From ed5640d8b587fbcfed7dd7967f3de04b37a76f26 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:06:44 +0200 Subject: Adding upstream version 4:7.4.7. Signed-off-by: Daniel Baumann --- sw/qa/extras/README | 274 ++ .../accessibility/accessible_relation_set.cxx | 245 + sw/qa/extras/data/odt/test.odt | Bin 0 -> 8486 bytes sw/qa/extras/docbookexport/data/simple.docx | Bin 0 -> 3759 bytes sw/qa/extras/docbookexport/data/tdf91095.docx | Bin 0 -> 19141 bytes sw/qa/extras/docbookexport/docbookexport.cxx | 40 + sw/qa/extras/find-unused-data.sh | 11 + .../fodfexport/data/tdf113696-writerimage.odt | Bin 0 -> 18341 bytes sw/qa/extras/fodfexport/data/tdf113696.odt | Bin 0 -> 10731 bytes sw/qa/extras/fodfexport/fodfexport.cxx | 62 + sw/qa/extras/globalfilter/data/BulletAsImage.odt | Bin 0 -> 9113 bytes sw/qa/extras/globalfilter/data/char_background.odt | Bin 0 -> 9737 bytes .../globalfilter/data/char_background_editing.docx | Bin 0 -> 12672 bytes sw/qa/extras/globalfilter/data/char_highlight.docx | Bin 0 -> 13213 bytes .../globalfilter/data/checkbox_form_field.odt | Bin 0 -> 8258 bytes sw/qa/extras/globalfilter/data/date_form_field.odt | Bin 0 -> 8830 bytes .../data/date_form_field_char_formatting.odt | Bin 0 -> 8432 bytes .../data/document_with_linked_graphic.odt | Bin 0 -> 21466 bytes .../globalfilter/data/document_with_two_images.odt | Bin 0 -> 204546 bytes .../globalfilter/data/dropdown_form_field.odt | Bin 0 -> 8285 bytes .../globalfilter/data/fieldmark_QUOTE_nest.docx | Bin 0 -> 13179 bytes .../globalfilter/data/fieldmark_QUOTE_nest.fodt | 133 + .../globalfilter/data/fieldmark_QUOTE_nest.rtf | 249 + sw/qa/extras/globalfilter/data/graphic_shape.odt | Bin 0 -> 100009 bytes .../globalfilter/data/images_with_special_IDs.odt | Bin 0 -> 169464 bytes sw/qa/extras/globalfilter/data/linked_graphic.jpg | Bin 0 -> 35738 bytes .../data/multiple_identical_graphics.odt | Bin 0 -> 13826 bytes sw/qa/extras/globalfilter/data/skipimages.doc | Bin 0 -> 19968 bytes sw/qa/extras/globalfilter/data/skipimages.docx | Bin 0 -> 10925 bytes .../data/tdf138345_charstyle_highlight.odt | Bin 0 -> 13304 bytes sw/qa/extras/globalfilter/data/text13e.odt | Bin 0 -> 9718 bytes sw/qa/extras/globalfilter/data/text_form_field.odt | Bin 0 -> 8376 bytes sw/qa/extras/globalfilter/globalfilter.cxx | 1909 ++++++++ sw/qa/extras/htmlexport/data/HTMLImage.odt | Bin 0 -> 9721 bytes sw/qa/extras/htmlexport/data/charborder.odt | Bin 0 -> 7773 bytes .../htmlexport/data/checkbox-radiobutton.doc | Bin 0 -> 35328 bytes sw/qa/extras/htmlexport/data/clearing-break.html | 8 + sw/qa/extras/htmlexport/data/extb.html | 10 + sw/qa/extras/htmlexport/data/fdo62336.docx | Bin 0 -> 21361 bytes sw/qa/extras/htmlexport/data/fdo81276.html | 21 + sw/qa/extras/htmlexport/data/fdo86857.html | 29 + sw/qa/extras/htmlexport/data/field-shade-reqif.odt | Bin 0 -> 8903 bytes sw/qa/extras/htmlexport/data/field-shade.odt | Bin 0 -> 8592 bytes sw/qa/extras/htmlexport/data/hello.html | 8 + sw/qa/extras/htmlexport/data/list.html | 4 + sw/qa/extras/htmlexport/data/no-ole2-pres-data.odt | Bin 0 -> 25483 bytes .../extras/htmlexport/data/ole1-pres-data-wmf.odt | Bin 0 -> 41595 bytes sw/qa/extras/htmlexport/data/ole2.odt | Bin 0 -> 19450 bytes sw/qa/extras/htmlexport/data/ole2.ole | 1014 ++++ sw/qa/extras/htmlexport/data/ole2.png | Bin 0 -> 766 bytes .../htmlexport/data/paint-ole-bitmap-format.odt | Bin 0 -> 21219 bytes sw/qa/extras/htmlexport/data/paint-ole.ole | 199 + sw/qa/extras/htmlexport/data/paint-ole.png | Bin 0 -> 1505 bytes sw/qa/extras/htmlexport/data/paint-ole.xhtml | 9 + sw/qa/extras/htmlexport/data/pdf-ole.odt | Bin 0 -> 41839 bytes .../htmlexport/data/reqif-aschar-objsize.odt | Bin 0 -> 70411 bytes sw/qa/extras/htmlexport/data/reqif-chinese.odt | Bin 0 -> 8350 bytes sw/qa/extras/htmlexport/data/reqif-jpg-img.xhtml | 4 + sw/qa/extras/htmlexport/data/reqif-list.xhtml | 11 + sw/qa/extras/htmlexport/data/reqif-no-lang.odt | Bin 0 -> 8340 bytes .../data/reqif-objdata-presentationdatasize.odt | Bin 0 -> 95777 bytes sw/qa/extras/htmlexport/data/reqif-ole-data.ole | 1 + sw/qa/extras/htmlexport/data/reqif-ole-data.xhtml | 3 + sw/qa/extras/htmlexport/data/reqif-ole-img.jpg | Bin 0 -> 696 bytes sw/qa/extras/htmlexport/data/reqif-ole-img.png | Bin 0 -> 766 bytes sw/qa/extras/htmlexport/data/reqif-ole-img.xhtml | 6 + sw/qa/extras/htmlexport/data/reqif-ole-nodata.odt | Bin 0 -> 8178 bytes sw/qa/extras/htmlexport/data/reqif-ole-odg.ole | 146 + sw/qa/extras/htmlexport/data/reqif-ole-odg.png | Bin 0 -> 1486 bytes sw/qa/extras/htmlexport/data/reqif-ole-odg.xhtml | 9 + sw/qa/extras/htmlexport/data/reqif-ole2.xhtml | 5 + sw/qa/extras/htmlexport/data/reqif-p.xhtml | 8 + sw/qa/extras/htmlexport/data/reqif-png-img.xhtml | 4 + sw/qa/extras/htmlexport/data/reqif-table.xhtml | 9 + sw/qa/extras/htmlexport/data/reqif-table2.odt | Bin 0 -> 8489 bytes .../data/skipimage-embedded-document.docx | Bin 0 -> 21379 bytes .../extras/htmlexport/data/skipimage-embedded.doc | Bin 0 -> 35840 bytes sw/qa/extras/htmlexport/data/tdf126879.odt | Bin 0 -> 8250 bytes sw/qa/extras/htmlexport/data/tdf132739.odt | Bin 0 -> 8832 bytes sw/qa/extras/htmlexport/data/tdf66822.odt | Bin 0 -> 10294 bytes sw/qa/extras/htmlexport/data/tdf76291.odt | Bin 0 -> 10342 bytes sw/qa/extras/htmlexport/data/tdf83890.odt | Bin 0 -> 9292 bytes sw/qa/extras/htmlexport/data/tdf90905.odt | Bin 0 -> 12166 bytes sw/qa/extras/htmlexport/data/textAndImage.docx | Bin 0 -> 6037 bytes sw/qa/extras/htmlexport/data/transparent-image.odt | Bin 0 -> 12432 bytes sw/qa/extras/htmlexport/data/transparent.png | Bin 0 -> 2950 bytes sw/qa/extras/htmlexport/data/xhtml-css.odt | Bin 0 -> 8559 bytes sw/qa/extras/htmlexport/htmlexport.cxx | 2481 ++++++++++ sw/qa/extras/htmlexport/xhtmlexport.cxx | 176 + .../htmlimport/data/PageAndParagraphFilled.html | 45 + .../data/allowed-rtf-ole-mime-types.xhtml | 5 + sw/qa/extras/htmlimport/data/data.ole | 1 + sw/qa/extras/htmlimport/data/emojis16BE.html | Bin 0 -> 142 bytes sw/qa/extras/htmlimport/data/hidden-textframe.html | 8 + sw/qa/extras/htmlimport/data/image-lazy-read.html | 11 + sw/qa/extras/htmlimport/data/image-size.html | 25 + sw/qa/extras/htmlimport/data/image-width-auto.html | 40 + sw/qa/extras/htmlimport/data/inlined_image.html | 21 + sw/qa/extras/htmlimport/data/libreoffice.jpg | Bin 0 -> 6065 bytes sw/qa/extras/htmlimport/data/list-style.html | 58 + .../extras/htmlimport/data/meta-ISO8601-dates.html | 20 + sw/qa/extras/htmlimport/data/meta-changedby.html | 21 + sw/qa/extras/htmlimport/data/ole-data.xhtml | 7 + sw/qa/extras/htmlimport/data/ole-data2.xhtml | 12 + sw/qa/extras/htmlimport/data/ole-img-svg.xhtml | 7 + sw/qa/extras/htmlimport/data/ole-img.xhtml | 7 + sw/qa/extras/htmlimport/data/ole2.gif | Bin 0 -> 521 bytes sw/qa/extras/htmlimport/data/ole2.ole | 1014 ++++ sw/qa/extras/htmlimport/data/ole2.png | Bin 0 -> 766 bytes sw/qa/extras/htmlimport/data/ole2.svg | 3 + sw/qa/extras/htmlimport/data/outline-level.html | 5 + sw/qa/extras/htmlimport/data/picture.html | 20 + sw/qa/extras/htmlimport/data/reqif-br.xhtml | 1 + .../extras/htmlimport/data/reqif-page-style.xhtml | 1 + sw/qa/extras/htmlimport/data/reqif-table.xhtml | 79 + sw/qa/extras/htmlimport/data/table_border_1px.html | 22 + sw/qa/extras/htmlimport/data/tdf118579.html | 67 + sw/qa/extras/htmlimport/data/tdf122789.html | 7 + sw/qa/extras/htmlimport/data/tdf142781.html | 3 + .../extras/htmlimport/data/tdf80194_subscript.html | 4 + sw/qa/extras/htmlimport/htmlimport.cxx | 593 +++ sw/qa/extras/indexing/IndexingExportTest.cxx | 321 ++ sw/qa/extras/indexing/SearchResultLocatorTest.cxx | 194 + .../indexing/data/IndexingExport_Fontwork.odt | Bin 0 -> 12090 bytes .../indexing/data/IndexingExport_Header_Footer.odt | Bin 0 -> 9644 bytes .../extras/indexing/data/IndexingExport_Images.odt | Bin 0 -> 14607 bytes sw/qa/extras/indexing/data/IndexingExport_OLE.odt | Bin 0 -> 14358 bytes .../indexing/data/IndexingExport_Sections.odt | Bin 0 -> 10245 bytes .../extras/indexing/data/IndexingExport_Shapes.odt | Bin 0 -> 11209 bytes .../extras/indexing/data/IndexingExport_Tables.odt | Bin 0 -> 10748 bytes .../data/IndexingExport_VariousParagraphs.odt | Bin 0 -> 11111 bytes sw/qa/extras/layout/README | 2 + sw/qa/extras/layout/data/LIBREOFFICE-N4LA0OHZ.rtf | 347 ++ sw/qa/extras/layout/data/LIBREOFFICE-UXTSOREL.rtf | Bin 0 -> 108970 bytes sw/qa/extras/layout/data/Tdf121509.odt | Bin 0 -> 9984 bytes sw/qa/extras/layout/data/TextBoxFrame.odt | Bin 0 -> 9414 bytes sw/qa/extras/layout/data/abi11870-2.odt | Bin 0 -> 117201 bytes sw/qa/extras/layout/data/btlr-cell.odt | Bin 0 -> 9223 bytes sw/qa/extras/layout/data/changed_table_rows.fodt | 203 + sw/qa/extras/layout/data/endOfLineComments.odt | Bin 0 -> 10823 bytes sw/qa/extras/layout/data/fdo43573-2-min.docx | Bin 0 -> 60965 bytes sw/qa/extras/layout/data/footer-fly-table.fodt | 1158 +++++ .../layout/data/forcepoint-swfootnoteframe-1.rtf | 1 + sw/qa/extras/layout/data/forcepoint100.html | Bin 0 -> 21528 bytes sw/qa/extras/layout/data/forcepoint102.rtf | 178 + sw/qa/extras/layout/data/forcepoint103.html | Bin 0 -> 13413 bytes sw/qa/extras/layout/data/forcepoint72-1.rtf | Bin 0 -> 5734 bytes sw/qa/extras/layout/data/forcepoint75-1.rtf | Bin 0 -> 88709 bytes sw/qa/extras/layout/data/forcepoint76-1.rtf | 3388 ++++++++++++++ sw/qa/extras/layout/data/forcepoint89.html | Bin 0 -> 3321 bytes sw/qa/extras/layout/data/forcepoint90.rtf | 1 + sw/qa/extras/layout/data/forcepoint91.html | Bin 0 -> 49256 bytes sw/qa/extras/layout/data/forcepoint92.doc | Bin 0 -> 29200 bytes sw/qa/extras/layout/data/forcepoint93-1.rtf | Bin 0 -> 88310 bytes sw/qa/extras/layout/data/forcepoint93-2.rtf | Bin 0 -> 5456 bytes sw/qa/extras/layout/data/forcepoint94.html | Bin 0 -> 12370 bytes sw/qa/extras/layout/data/forcepoint98.html | Bin 0 -> 7171 bytes sw/qa/extras/layout/data/forcepoint99.html | Bin 0 -> 14035 bytes sw/qa/extras/layout/data/horizontal_multilevel.odt | Bin 0 -> 13425 bytes sw/qa/extras/layout/data/image-comment.odt | Bin 0 -> 10445 bytes sw/qa/extras/layout/data/in_056132_mod.odt | Bin 0 -> 13647 bytes sw/qa/extras/layout/data/keep-with-next-fly.fodt | 146 + sw/qa/extras/layout/data/legend-itemorder-min.docx | Bin 0 -> 27053 bytes sw/qa/extras/layout/data/long_legendentry.docx | Bin 0 -> 24393 bytes .../extras/layout/data/no-line-break-at-slash.fodt | 50 + .../layout/data/outside_long_data_label.docx | Bin 0 -> 27245 bytes sw/qa/extras/layout/data/piechart_leaderline.odt | Bin 0 -> 15625 bytes sw/qa/extras/layout/data/redline_charatr.fodt | 164 + .../layout/data/redline_footnote_pagination.fodt | 792 ++++ sw/qa/extras/layout/data/redline_footnotes.odt | Bin 0 -> 9004 bytes sw/qa/extras/layout/data/redline_sections.fodt | 110 + sw/qa/extras/layout/data/redline_table.fodt | 128 + .../data/stable-at-page-anchored-fly-position.odt | Bin 0 -> 11244 bytes sw/qa/extras/layout/data/tab-over-margin.odt | Bin 0 -> 15051 bytes .../extras/layout/data/tabellen_test_windows_1.odt | Bin 0 -> 11954 bytes sw/qa/extras/layout/data/table-extrusion1.odt | Bin 0 -> 9234 bytes sw/qa/extras/layout/data/table-extrusion2.odt | Bin 0 -> 9259 bytes sw/qa/extras/layout/data/table_cell_overlap.fodt | 161 + sw/qa/extras/layout/data/tdf100680.docx | Bin 0 -> 25761 bytes sw/qa/extras/layout/data/tdf104797.docx | Bin 0 -> 11710 bytes sw/qa/extras/layout/data/tdf105481.odt | Bin 0 -> 26172 bytes sw/qa/extras/layout/data/tdf106153.docx | Bin 0 -> 10461 bytes sw/qa/extras/layout/data/tdf106234.fodt | 31 + sw/qa/extras/layout/data/tdf106390.odt | Bin 0 -> 13081 bytes sw/qa/extras/layout/data/tdf108021.odt | Bin 0 -> 14663 bytes sw/qa/extras/layout/data/tdf109077.docx | Bin 0 -> 13945 bytes sw/qa/extras/layout/data/tdf109137.docx | Bin 0 -> 19429 bytes sw/qa/extras/layout/data/tdf112290.docx | Bin 0 -> 13174 bytes sw/qa/extras/layout/data/tdf113014.fodt | 108 + sw/qa/extras/layout/data/tdf114163.odt | Bin 0 -> 17376 bytes sw/qa/extras/layout/data/tdf115094.docx | Bin 0 -> 31044 bytes sw/qa/extras/layout/data/tdf115523.fodt | 42 + sw/qa/extras/layout/data/tdf115524.fodt | 44 + sw/qa/extras/layout/data/tdf115630.docx | Bin 0 -> 26224 bytes sw/qa/extras/layout/data/tdf116256.docx | Bin 0 -> 21136 bytes sw/qa/extras/layout/data/tdf116486.docx | Bin 0 -> 21691 bytes sw/qa/extras/layout/data/tdf116501.odt | Bin 0 -> 51229 bytes sw/qa/extras/layout/data/tdf116830.odt | Bin 0 -> 8963 bytes sw/qa/extras/layout/data/tdf116848.odt | Bin 0 -> 12329 bytes sw/qa/extras/layout/data/tdf116925.docx | Bin 0 -> 13476 bytes sw/qa/extras/layout/data/tdf117028.docx | Bin 0 -> 13619 bytes sw/qa/extras/layout/data/tdf117187.odt | Bin 0 -> 9673 bytes sw/qa/extras/layout/data/tdf117188.docx | Bin 0 -> 1857 bytes sw/qa/extras/layout/data/tdf117245.odt | Bin 0 -> 10142 bytes sw/qa/extras/layout/data/tdf117923.doc | Bin 0 -> 29696 bytes sw/qa/extras/layout/data/tdf117923.docx | Bin 0 -> 21227 bytes sw/qa/extras/layout/data/tdf117982.docx | Bin 0 -> 9700 bytes sw/qa/extras/layout/data/tdf118058.fodt | 37 + sw/qa/extras/layout/data/tdf118672.odt | Bin 0 -> 10205 bytes sw/qa/extras/layout/data/tdf119875.odt | Bin 0 -> 7314 bytes sw/qa/extras/layout/data/tdf120287.fodt | 40 + sw/qa/extras/layout/data/tdf120287b.fodt | 45 + sw/qa/extras/layout/data/tdf120287c.fodt | 46 + sw/qa/extras/layout/data/tdf121658.odt | Bin 0 -> 19195 bytes sw/qa/extras/layout/data/tdf122014.docx | Bin 0 -> 27324 bytes sw/qa/extras/layout/data/tdf122225.docx | Bin 0 -> 25656 bytes sw/qa/extras/layout/data/tdf122607.odt | Bin 0 -> 23271 bytes sw/qa/extras/layout/data/tdf122607_leerzeile.odt | Bin 0 -> 23398 bytes sw/qa/extras/layout/data/tdf122800.odt | Bin 0 -> 14018 bytes sw/qa/extras/layout/data/tdf122878.docx | Bin 0 -> 17740 bytes sw/qa/extras/layout/data/tdf123163-1.docx | Bin 0 -> 25730 bytes sw/qa/extras/layout/data/tdf123268.odt | Bin 0 -> 12629 bytes sw/qa/extras/layout/data/tdf123651.docx | Bin 0 -> 34012 bytes sw/qa/extras/layout/data/tdf123898.odt | Bin 0 -> 9642 bytes sw/qa/extras/layout/data/tdf124261.docx | Bin 0 -> 22327 bytes sw/qa/extras/layout/data/tdf124423.docx | Bin 0 -> 12054 bytes sw/qa/extras/layout/data/tdf124423.odt | Bin 0 -> 4863 bytes sw/qa/extras/layout/data/tdf124600.docx | Bin 0 -> 16899 bytes sw/qa/extras/layout/data/tdf124601.doc | Bin 0 -> 23552 bytes sw/qa/extras/layout/data/tdf124601b.doc | Bin 0 -> 62976 bytes sw/qa/extras/layout/data/tdf124796.odt | Bin 0 -> 14342 bytes sw/qa/extras/layout/data/tdf125300.docx | Bin 0 -> 14147 bytes sw/qa/extras/layout/data/tdf125334.odt | Bin 0 -> 14362 bytes sw/qa/extras/layout/data/tdf125335.odt | Bin 0 -> 17360 bytes sw/qa/extras/layout/data/tdf125893.docx | Bin 0 -> 23032 bytes sw/qa/extras/layout/data/tdf126244.docx | Bin 0 -> 25928 bytes sw/qa/extras/layout/data/tdf127118.docx | Bin 0 -> 10819 bytes sw/qa/extras/layout/data/tdf127235.odt | Bin 0 -> 3239 bytes sw/qa/extras/layout/data/tdf127304.odt | Bin 0 -> 13381 bytes sw/qa/extras/layout/data/tdf128198-1.docx | Bin 0 -> 17048 bytes sw/qa/extras/layout/data/tdf128399.docx | Bin 0 -> 13132 bytes sw/qa/extras/layout/data/tdf128611.fodt | 77 + sw/qa/extras/layout/data/tdf128959.docx | Bin 0 -> 24490 bytes sw/qa/extras/layout/data/tdf128996.docx | Bin 0 -> 26061 bytes sw/qa/extras/layout/data/tdf129054.docx | Bin 0 -> 25456 bytes sw/qa/extras/layout/data/tdf129095.docx | Bin 0 -> 26028 bytes sw/qa/extras/layout/data/tdf130031.docx | Bin 0 -> 27382 bytes sw/qa/extras/layout/data/tdf130218.fodt | 86 + sw/qa/extras/layout/data/tdf130242.odt | Bin 0 -> 13515 bytes sw/qa/extras/layout/data/tdf130380.docx | Bin 0 -> 28262 bytes sw/qa/extras/layout/data/tdf130969.docx | Bin 0 -> 26299 bytes sw/qa/extras/layout/data/tdf131707_flyWrap.doc | Bin 0 -> 41472 bytes sw/qa/extras/layout/data/tdf132956.docx | Bin 0 -> 25937 bytes sw/qa/extras/layout/data/tdf133005.odt | Bin 0 -> 13251 bytes sw/qa/extras/layout/data/tdf134146.docx | Bin 0 -> 27259 bytes sw/qa/extras/layout/data/tdf134235.docx | Bin 0 -> 27348 bytes sw/qa/extras/layout/data/tdf134277.docx | Bin 0 -> 15350 bytes sw/qa/extras/layout/data/tdf134298.ott | Bin 0 -> 40880 bytes sw/qa/extras/layout/data/tdf134463.docx | Bin 0 -> 11999 bytes sw/qa/extras/layout/data/tdf134472.odt | Bin 0 -> 13403 bytes sw/qa/extras/layout/data/tdf134548.odt | Bin 0 -> 10592 bytes sw/qa/extras/layout/data/tdf134659.docx | Bin 0 -> 25623 bytes sw/qa/extras/layout/data/tdf134676.docx | Bin 0 -> 27317 bytes sw/qa/extras/layout/data/tdf134685.docx | Bin 0 -> 23322 bytes sw/qa/extras/layout/data/tdf134866.docx | Bin 0 -> 27169 bytes sw/qa/extras/layout/data/tdf135035.docx | Bin 0 -> 13724 bytes sw/qa/extras/layout/data/tdf135035.odt | Bin 0 -> 9562 bytes sw/qa/extras/layout/data/tdf135991.odt | Bin 0 -> 12299 bytes sw/qa/extras/layout/data/tdf136061.docx | Bin 0 -> 25928 bytes sw/qa/extras/layout/data/tdf136588.docx | Bin 0 -> 17297 bytes sw/qa/extras/layout/data/tdf136613.docx | Bin 0 -> 25266 bytes sw/qa/extras/layout/data/tdf136816.odt | Bin 0 -> 14115 bytes sw/qa/extras/layout/data/tdf137025.docx | Bin 0 -> 14726 bytes sw/qa/extras/layout/data/tdf137116.docx | Bin 0 -> 17637 bytes sw/qa/extras/layout/data/tdf137154.docx | Bin 0 -> 27388 bytes sw/qa/extras/layout/data/tdf137185.odt | Bin 0 -> 9657 bytes sw/qa/extras/layout/data/tdf137819.fodt | 284 ++ sw/qa/extras/layout/data/tdf138018.docx | Bin 0 -> 27131 bytes sw/qa/extras/layout/data/tdf138039.odt | Bin 0 -> 29534 bytes sw/qa/extras/layout/data/tdf138465min.docx | Bin 0 -> 19331 bytes sw/qa/extras/layout/data/tdf138592-a-acute.fodt | 31 + sw/qa/extras/layout/data/tdf138773.docx | Bin 0 -> 26209 bytes sw/qa/extras/layout/data/tdf138782.docx | Bin 0 -> 17574 bytes sw/qa/extras/layout/data/tdf138951.odt | Bin 0 -> 9894 bytes ...6_ColumnsWithFootnoteDoNotOccupyEntirePage.docx | Bin 0 -> 17622 bytes sw/qa/extras/layout/data/tdf141079.odt | Bin 0 -> 8787 bytes sw/qa/extras/layout/data/tdf141220.docx | Bin 0 -> 10459 bytes sw/qa/extras/layout/data/tdf143239-1-min.odt | Bin 0 -> 20308 bytes sw/qa/extras/layout/data/tdf144057.fodt | 387 ++ sw/qa/extras/layout/data/tdf145719.odt | Bin 0 -> 12051 bytes sw/qa/extras/layout/data/tdf145826.odt | Bin 0 -> 21108 bytes sw/qa/extras/layout/data/tdf146272.odt | Bin 0 -> 183377 bytes .../layout/data/tdf146704_EndnoteInSection.odt | Bin 0 -> 9426 bytes sw/qa/extras/layout/data/tdf147485-forcepoint.doc | Bin 0 -> 62544 bytes sw/qa/extras/layout/data/tdf149248.odt | Bin 0 -> 20313 bytes sw/qa/extras/layout/data/tdf149324.odt | Bin 0 -> 20206 bytes sw/qa/extras/layout/data/tdf149420.odt | Bin 0 -> 38885 bytes sw/qa/extras/layout/data/tdf149709.fodt | 41 + sw/qa/extras/layout/data/tdf149710.fodt | 31 + sw/qa/extras/layout/data/tdf149711.docx | Bin 0 -> 13619 bytes sw/qa/extras/layout/data/tdf150642.odt | Bin 0 -> 9487 bytes sw/qa/extras/layout/data/tdf151954.docx | Bin 0 -> 12688 bytes sw/qa/extras/layout/data/tdf152031-stair.odt | Bin 0 -> 9625 bytes .../extras/layout/data/tdf152085-section-tblr.odt | Bin 0 -> 8626 bytes sw/qa/extras/layout/data/tdf152106.odt | Bin 0 -> 13518 bytes sw/qa/extras/layout/data/tdf40260.odt | Bin 0 -> 17192 bytes sw/qa/extras/layout/data/tdf42748.fodt | 57 + ...olumnsWithFootnoteDoNotOccupyEntirePage_New.odt | Bin 0 -> 10799 bytes ...olumnsWithFootnoteDoNotOccupyEntirePage_Old.odt | Bin 0 -> 10216 bytes sw/qa/extras/layout/data/tdf54819.fodt | 9 + sw/qa/extras/layout/data/tdf64222.docx | Bin 0 -> 11201 bytes sw/qa/extras/layout/data/tdf69647_images.odt | Bin 0 -> 13188 bytes sw/qa/extras/layout/data/tdf69647_text.docx | Bin 0 -> 5353 bytes sw/qa/extras/layout/data/tdf69648.docx | Bin 0 -> 26434 bytes sw/qa/extras/layout/data/tdf72727.odt | Bin 0 -> 13943 bytes sw/qa/extras/layout/data/tdf75659.docx | Bin 0 -> 25109 bytes sw/qa/extras/layout/data/tdf85610.fodt | 56 + sw/qa/extras/layout/data/tdf88496.docx | Bin 0 -> 25175 bytes .../layout/data/testAreaChartNumberFormat.docx | Bin 0 -> 26115 bytes .../extras/layout/data/testTruncatedAxisLabel.odt | Bin 0 -> 13764 bytes .../layout/data/user-field-type-language.fodt | 21 + .../layout/data/writer-image-no-capture.docx | Bin 0 -> 14531 bytes sw/qa/extras/layout/data/xaxis-labelbreak.docx | Bin 0 -> 27222 bytes sw/qa/extras/layout/layout.cxx | 4888 ++++++++++++++++++++ sw/qa/extras/layout/layout2.cxx | 2240 +++++++++ .../data/10-testing-addresses-writer-merged.odt | Bin 0 -> 12810 bytes .../mailmerge/data/10-testing-addresses-writer.odt | Bin 0 -> 12849 bytes .../extras/mailmerge/data/10-testing-addresses.ods | Bin 0 -> 14816 bytes sw/qa/extras/mailmerge/data/4_v01.ods | Bin 0 -> 18847 bytes sw/qa/extras/mailmerge/data/5-with-blanks.ods | Bin 0 -> 9193 bytes sw/qa/extras/mailmerge/data/bookmarkcondition.fodt | 91 + sw/qa/extras/mailmerge/data/bookmarkcondition.ods | Bin 0 -> 6881 bytes sw/qa/extras/mailmerge/data/db_pagecounttest.ods | Bin 0 -> 9154 bytes sw/qa/extras/mailmerge/data/empty.odt | Bin 0 -> 7241 bytes sw/qa/extras/mailmerge/data/grabbagtest.docx | Bin 0 -> 11920 bytes sw/qa/extras/mailmerge/data/linked-labels.odt | Bin 0 -> 10918 bytes .../mailmerge/data/linked-with-condition.odt | Bin 0 -> 9193 bytes .../mailmerge/data/missing-default-line-color.ott | Bin 0 -> 15093 bytes .../data/multiple-page-anchored-draws.odt | Bin 0 -> 9257 bytes sw/qa/extras/mailmerge/data/one-empty-address.ods | Bin 0 -> 8013 bytes sw/qa/extras/mailmerge/data/onecell.xlsx | Bin 0 -> 4846 bytes sw/qa/extras/mailmerge/data/pagecounttest.ott | Bin 0 -> 12132 bytes sw/qa/extras/mailmerge/data/section_ps.odt | Bin 0 -> 9011 bytes .../extras/mailmerge/data/sections_first_last.odt | Bin 0 -> 9010 bytes .../mailmerge/data/simple-mail-merge-2pages.odt | Bin 0 -> 8616 bytes sw/qa/extras/mailmerge/data/simple-mail-merge.odt | Bin 0 -> 8363 bytes sw/qa/extras/mailmerge/data/tdf118113.ods | Bin 0 -> 7637 bytes sw/qa/extras/mailmerge/data/tdf118113.odt | Bin 0 -> 21041 bytes sw/qa/extras/mailmerge/data/tdf118845.fodt | 28 + sw/qa/extras/mailmerge/data/tdf125522.odt | Bin 0 -> 9794 bytes sw/qa/extras/mailmerge/data/tdf128148.odt | Bin 0 -> 9289 bytes sw/qa/extras/mailmerge/data/tdf35798-legacy.fodt | 37 + sw/qa/extras/mailmerge/data/tdf35798-legacy.odt | Bin 0 -> 9557 bytes sw/qa/extras/mailmerge/data/tdf35798-new.fodt | 38 + sw/qa/extras/mailmerge/data/tdf35798-new.odt | Bin 0 -> 9556 bytes sw/qa/extras/mailmerge/data/tdf62364.odt | Bin 0 -> 9832 bytes sw/qa/extras/mailmerge/data/tdf78611.odt | Bin 0 -> 14517 bytes sw/qa/extras/mailmerge/data/tdf81750.odt | Bin 0 -> 9460 bytes sw/qa/extras/mailmerge/data/tdf89214.odt | Bin 0 -> 9832 bytes sw/qa/extras/mailmerge/data/tdf92623.odt | Bin 0 -> 12615 bytes sw/qa/extras/mailmerge/data/writer-mail-merge.odt | Bin 0 -> 8410 bytes .../mailmerge/data/writer-merged-mail-merge.odt | Bin 0 -> 8421 bytes sw/qa/extras/mailmerge/mailmerge.cxx | 1361 ++++++ sw/qa/extras/odfexport/data/2_MathType3.docx | Bin 0 -> 15260 bytes .../odfexport/data/CrossRefHeadingBookmark.fodt | 120 + .../data/Formcontrol needs high z-index.odt | Bin 0 -> 25828 bytes sw/qa/extras/odfexport/data/MadeByLO7.odt | Bin 0 -> 17354 bytes sw/qa/extras/odfexport/data/allow-overlap.odt | Bin 0 -> 9853 bytes .../odfexport/data/arabic-zero-numbering.odt | Bin 0 -> 8730 bytes .../odfexport/data/arabic-zero3-numbering.odt | Bin 0 -> 9166 bytes .../odfexport/data/arabic-zero4-numbering.odt | Bin 0 -> 8702 bytes .../odfexport/data/arabic-zero5-numbering.odt | Bin 0 -> 8779 bytes sw/qa/extras/odfexport/data/border_types.odt | Bin 0 -> 10656 bytes sw/qa/extras/odfexport/data/btlr-cell.odt | Bin 0 -> 9174 bytes sw/qa/extras/odfexport/data/btlr-frame.odt | Bin 0 -> 8564 bytes .../odfexport/data/chapter-number-new-line.odt | Bin 0 -> 8649 bytes sw/qa/extras/odfexport/data/charborder.odt | Bin 0 -> 8704 bytes .../extras/odfexport/data/embedded-font-props.odt | Bin 0 -> 8097 bytes sw/qa/extras/odfexport/data/embedded-pdf.odt | Bin 0 -> 23502 bytes sw/qa/extras/odfexport/data/fdo38244.odt | Bin 0 -> 10334 bytes sw/qa/extras/odfexport/data/fdo43807.odt | Bin 0 -> 7630 bytes sw/qa/extras/odfexport/data/fdo58949.docx | Bin 0 -> 26510 bytes sw/qa/extras/odfexport/data/fdo60769.odt | Bin 0 -> 9482 bytes sw/qa/extras/odfexport/data/fdo79358.odt | Bin 0 -> 9356 bytes sw/qa/extras/odfexport/data/fdo86963.odt | Bin 0 -> 39845 bytes sw/qa/extras/odfexport/data/fillbitmap3.odt | Bin 0 -> 10748 bytes .../extras/odfexport/data/first-header-footer.odt | Bin 0 -> 9644 bytes .../data/footnote-collect-at-end-of-section.fodt | 192 + sw/qa/extras/odfexport/data/framebackgrounds.odt | Bin 0 -> 14327 bytes sw/qa/extras/odfexport/data/gerrit13858.odt | Bin 0 -> 10200 bytes sw/qa/extras/odfexport/data/gutter-left.odt | Bin 0 -> 8519 bytes sw/qa/extras/odfexport/data/image-mimetype.odt | Bin 0 -> 88597 bytes sw/qa/extras/odfexport/data/listformat.docx | Bin 0 -> 13082 bytes sw/qa/extras/odfexport/data/listformat.odt | Bin 0 -> 9221 bytes .../extras/odfexport/data/nestedTableInFooter.odt | Bin 0 -> 8611 bytes .../odfexport/data/ooo321_stylepagenumber.odt | Bin 0 -> 8558 bytes sw/qa/extras/odfexport/data/oooxml_embedded.sxw | Bin 0 -> 21943 bytes .../extras/odfexport/data/page-content-bottom.odt | Bin 0 -> 8502 bytes sw/qa/extras/odfexport/data/page-content-top.odt | Bin 0 -> 8561 bytes .../odfexport/data/pagestyle_background_lo64.odt | Bin 0 -> 9947 bytes .../odfexport/data/pagestyle_background_lo70.odt | Bin 0 -> 10125 bytes .../odfexport/data/pagestyle_background_ooo33.odt | Bin 0 -> 9127 bytes sw/qa/extras/odfexport/data/protection-key.fodt | 48 + sw/qa/extras/odfexport/data/qrcode-properties.odt | Bin 0 -> 11634 bytes sw/qa/extras/odfexport/data/redlineTextFrame.odt | Bin 0 -> 8560 bytes sw/qa/extras/odfexport/data/referencelanguage.odt | Bin 0 -> 16137 bytes sw/qa/extras/odfexport/data/relh-page-tdf80282.odt | Bin 0 -> 128045 bytes sw/qa/extras/odfexport/data/relh-page.odt | Bin 0 -> 10183 bytes sw/qa/extras/odfexport/data/relw-page.odt | Bin 0 -> 10221 bytes sw/qa/extras/odfexport/data/resolved-comment.odt | Bin 0 -> 8912 bytes sw/qa/extras/odfexport/data/rovas-numbering.odt | Bin 0 -> 8786 bytes sw/qa/extras/odfexport/data/ruby-position.odt | Bin 0 -> 8325 bytes .../odfexport/data/section-columns-separator.fodt | 24 + sw/qa/extras/odfexport/data/sender-initials.fodt | 71 + sw/qa/extras/odfexport/data/sha1_correct.odt | Bin 0 -> 8587 bytes sw/qa/extras/odfexport/data/sha1_wrong.odt | Bin 0 -> 8435 bytes sw/qa/extras/odfexport/data/shape-relsize.odt | Bin 0 -> 10706 bytes .../extras/odfexport/data/shape-with-hyperlink.odt | Bin 0 -> 10149 bytes sw/qa/extras/odfexport/data/shapes-hyperlink.odt | Bin 0 -> 12199 bytes .../odfexport/data/signatureline-properties.fodt | 596 +++ .../odfexport/data/spellout-numberingtypes.odt | Bin 0 -> 10222 bytes sw/qa/extras/odfexport/data/style-link.fodt | 15 + sw/qa/extras/odfexport/data/sw_hatch.odt | Bin 0 -> 6560 bytes .../table-in-frame-in-table-in-header-base.odt | Bin 0 -> 10398 bytes .../odfexport/data/table_number_format_3.docx | Bin 0 -> 5130 bytes sw/qa/extras/odfexport/data/table_styles_1.odt | Bin 0 -> 9874 bytes sw/qa/extras/odfexport/data/table_styles_2.odt | Bin 0 -> 10727 bytes sw/qa/extras/odfexport/data/table_styles_3.odt | Bin 0 -> 9376 bytes sw/qa/extras/odfexport/data/table_styles_4.odt | Bin 0 -> 9094 bytes sw/qa/extras/odfexport/data/table_styles_5.odt | Bin 0 -> 9841 bytes sw/qa/extras/odfexport/data/tdf100492.odt | Bin 0 -> 19671 bytes sw/qa/extras/odfexport/data/tdf101710.odt | Bin 0 -> 9350 bytes sw/qa/extras/odfexport/data/tdf101856.odt | Bin 0 -> 9406 bytes .../extras/odfexport/data/tdf101856_overlapped.odt | Bin 0 -> 9233 bytes sw/qa/extras/odfexport/data/tdf103091.fodt | 307 ++ sw/qa/extras/odfexport/data/tdf103567.odt | Bin 0 -> 13562 bytes .../odfexport/data/tdf104254_noHeaderWrapping.odt | Bin 0 -> 63167 bytes sw/qa/extras/odfexport/data/tdf107292.odt | Bin 0 -> 9921 bytes sw/qa/extras/odfexport/data/tdf107696.odt | Bin 0 -> 11122 bytes .../odfexport/data/tdf111891_frameVertStyle.odt | Bin 0 -> 8814 bytes sw/qa/extras/odfexport/data/tdf115815.odt | Bin 0 -> 9809 bytes sw/qa/extras/odfexport/data/tdf118393.odt | Bin 0 -> 14208 bytes sw/qa/extras/odfexport/data/tdf118502.odt | Bin 0 -> 76491 bytes sw/qa/extras/odfexport/data/tdf118637.odt | Bin 0 -> 10547 bytes sw/qa/extras/odfexport/data/tdf121658.odt | Bin 0 -> 20057 bytes .../data/tdf124470TableAndEmbeddedUsedFonts.odt | Bin 0 -> 10880 bytes sw/qa/extras/odfexport/data/tdf128504.docx | Bin 0 -> 3969 bytes sw/qa/extras/odfexport/data/tdf129520.docx | Bin 0 -> 15574 bytes sw/qa/extras/odfexport/data/tdf129568-ui.fodt | 368 ++ sw/qa/extras/odfexport/data/tdf129568.fodt | 368 ++ sw/qa/extras/odfexport/data/tdf130314.docx | Bin 0 -> 31668 bytes sw/qa/extras/odfexport/data/tdf130950.odt | Bin 0 -> 28785 bytes .../odfexport/data/tdf131025_noZerosInTable.odt | Bin 0 -> 11544 bytes sw/qa/extras/odfexport/data/tdf131621.ott | Bin 0 -> 29145 bytes sw/qa/extras/odfexport/data/tdf131812.odt | Bin 0 -> 8683 bytes .../odfexport/data/tdf132642_keepWithNextTable.odt | Bin 0 -> 10030 bytes sw/qa/extras/odfexport/data/tdf134987.docx | Bin 0 -> 39541 bytes sw/qa/extras/odfexport/data/tdf135144.docx | Bin 0 -> 40894 bytes .../data/tdf135338_firstLeftPageFooter.odt | Bin 0 -> 10687 bytes sw/qa/extras/odfexport/data/tdf136645.odt | Bin 0 -> 18408 bytes sw/qa/extras/odfexport/data/tdf137199.docx | Bin 0 -> 13281 bytes sw/qa/extras/odfexport/data/tdf139126.odt | Bin 0 -> 11105 bytes sw/qa/extras/odfexport/data/tdf140437.odt | Bin 0 -> 8641 bytes sw/qa/extras/odfexport/data/tdf142483.odt | Bin 0 -> 9011 bytes sw/qa/extras/odfexport/data/tdf143605.odt | Bin 0 -> 8729 bytes .../odfexport/data/tdf143793_noBodyWrapping.odt | Bin 0 -> 117036 bytes sw/qa/extras/odfexport/data/tdf144319.odt | Bin 0 -> 28531 bytes sw/qa/extras/odfexport/data/tdf145361.odt | Bin 0 -> 9513 bytes sw/qa/extras/odfexport/data/tdf146264.odt | Bin 0 -> 13422 bytes sw/qa/extras/odfexport/data/tdf149248.odt | Bin 0 -> 20313 bytes sw/qa/extras/odfexport/data/tdf149324.odt | Bin 0 -> 20206 bytes sw/qa/extras/odfexport/data/tdf149420.odt | Bin 0 -> 38885 bytes sw/qa/extras/odfexport/data/tdf150149.fodt | 79 + sw/qa/extras/odfexport/data/tdf150394.odt | Bin 0 -> 35943 bytes sw/qa/extras/odfexport/data/tdf151100.docx | Bin 0 -> 17741 bytes .../odfexport/data/tdf43569_conditionalfield.doc | Bin 0 -> 22016 bytes sw/qa/extras/odfexport/data/tdf66305.odt | Bin 0 -> 12685 bytes sw/qa/extras/odfexport/data/tdf77961.odt | Bin 0 -> 11510 bytes sw/qa/extras/odfexport/data/tdf92379.fodt | 89 + sw/qa/extras/odfexport/data/tdf95806.docx | Bin 0 -> 16907 bytes sw/qa/extras/odfexport/data/tdf99631.docx | Bin 0 -> 32417 bytes .../odfexport/data/testTdf52065_centerTabs.odt | Bin 0 -> 11274 bytes .../odfexport/data/textbox-rounded-corners.odt | Bin 0 -> 13249 bytes sw/qa/extras/odfexport/data/textframe-gradient.odt | Bin 0 -> 9800 bytes .../data/textframe-transparent-shadow.odt | Bin 0 -> 9634 bytes .../extras/odfexport/data/textframe-vertadjust.odt | Bin 0 -> 12850 bytes .../extras/odfexport/data/user-field-decl-fly.odt | Bin 0 -> 9167 bytes sw/qa/extras/odfexport/data/user-field-decl.odt | Bin 0 -> 8597 bytes .../odfexport/data/userdefattr-tablecell.odt | Bin 0 -> 9172 bytes sw/qa/extras/odfexport/data/whitespace.odt | Bin 0 -> 10981 bytes sw/qa/extras/odfexport/odfexport.cxx | 3224 +++++++++++++ sw/qa/extras/odfexport/odfexport2.cxx | 282 ++ .../odfimport/data/BibliographyEntryField.odt | Bin 0 -> 9194 bytes .../odfimport/data/PageAnchorZIndexFirstPage.fodt | 120 + .../odfimport/data/PageAnchorZIndexSecondPage.fodt | 120 + sw/qa/extras/odfimport/data/PageBackground.odt | Bin 0 -> 13301 bytes .../extras/odfimport/data/Word2010AsCharShape.odt | Bin 0 -> 4604 bytes .../odfimport/data/annotation-formatting.odt | Bin 0 -> 11215 bytes sw/qa/extras/odfimport/data/bnc800714.fodt | 35 + sw/qa/extras/odfimport/data/borders_ooo33.odt | Bin 0 -> 9890 bytes sw/qa/extras/odfimport/data/dateFormFormats.odt | Bin 0 -> 10664 bytes .../odfimport/data/empty-svg-family-name.odt | Bin 0 -> 12527 bytes sw/qa/extras/odfimport/data/fdo37606.odt | Bin 0 -> 11389 bytes sw/qa/extras/odfimport/data/fdo47267-3.odt | Bin 0 -> 223670 bytes sw/qa/extras/odfimport/data/fdo53210.odt | Bin 0 -> 11355 bytes sw/qa/extras/odfimport/data/fdo55814.odt | Bin 0 -> 10200 bytes sw/qa/extras/odfimport/data/fdo56272.odt | Bin 0 -> 10522 bytes sw/qa/extras/odfimport/data/fdo60842.odt | Bin 0 -> 4300 bytes sw/qa/extras/odfimport/data/fdo68839.odt | Bin 0 -> 17657 bytes sw/qa/extras/odfimport/data/fdo69862.odt | Bin 0 -> 9743 bytes sw/qa/extras/odfimport/data/fdo69979.odt | Bin 0 -> 9462 bytes sw/qa/extras/odfimport/data/fdo75872_aoo40.odt | Bin 0 -> 8625 bytes sw/qa/extras/odfimport/data/fdo75872_ooo33.odt | Bin 0 -> 8348 bytes sw/qa/extras/odfimport/data/fdo79269.odt | Bin 0 -> 8883 bytes sw/qa/extras/odfimport/data/fdo79269_header.odt | Bin 0 -> 8913 bytes sw/qa/extras/odfimport/data/fdo81223.odt | Bin 0 -> 9428 bytes sw/qa/extras/odfimport/data/fdo82165.odt | Bin 0 -> 10663 bytes sw/qa/extras/odfimport/data/fdo90130-1.odt | Bin 0 -> 8606 bytes sw/qa/extras/odfimport/data/fdo90130-2.odt | Bin 0 -> 9148 bytes sw/qa/extras/odfimport/data/forcepoint101.fodt | 13 + sw/qa/extras/odfimport/data/forcepoint108.fodt | 67 + sw/qa/extras/odfimport/data/hello.odt | Bin 0 -> 8159 bytes sw/qa/extras/odfimport/data/i61225.sxw | Bin 0 -> 53844 bytes sw/qa/extras/odfimport/data/ooo32780-1.odt | Bin 0 -> 34072 bytes sw/qa/extras/odfimport/data/ooo77837-1.odt | Bin 0 -> 15724 bytes .../data/paste-first-para-direct-format.odt | Bin 0 -> 8313 bytes sw/qa/extras/odfimport/data/space.odt | Bin 0 -> 3839 bytes sw/qa/extras/odfimport/data/spellmenu-redline.odt | Bin 0 -> 7959 bytes sw/qa/extras/odfimport/data/tdf100033_1.odt | Bin 0 -> 9367 bytes sw/qa/extras/odfimport/data/tdf100033_2.odt | Bin 0 -> 9401 bytes sw/qa/extras/odfimport/data/tdf101729.odt | Bin 0 -> 23049 bytes sw/qa/extras/odfimport/data/tdf103025.odt | Bin 0 -> 5694 bytes sw/qa/extras/odfimport/data/tdf107392.odt | Bin 0 -> 43338 bytes sw/qa/extras/odfimport/data/tdf107776.fodt | 29 + sw/qa/extras/odfimport/data/tdf108482.odt | Bin 0 -> 9421 bytes sw/qa/extras/odfimport/data/tdf109080_loext_ns.odt | Bin 0 -> 9217 bytes sw/qa/extras/odfimport/data/tdf109080_style_ns.odt | Bin 0 -> 9219 bytes sw/qa/extras/odfimport/data/tdf109228.odt | Bin 0 -> 13753 bytes sw/qa/extras/odfimport/data/tdf113289.odt | Bin 0 -> 8768 bytes sw/qa/extras/odfimport/data/tdf115079.odt | Bin 0 -> 22717 bytes sw/qa/extras/odfimport/data/tdf116195.odt | Bin 0 -> 123370 bytes sw/qa/extras/odfimport/data/tdf120677.fodt | 13 + sw/qa/extras/odfimport/data/tdf123829.odt | Bin 0 -> 10676 bytes sw/qa/extras/odfimport/data/tdf123968.odt | Bin 0 -> 9591 bytes sw/qa/extras/odfimport/data/tdf128737.odt | Bin 0 -> 18111 bytes sw/qa/extras/odfimport/data/tdf133459.odt | Bin 0 -> 8061 bytes sw/qa/extras/odfimport/data/tdf134971a.odt | Bin 0 -> 9960 bytes sw/qa/extras/odfimport/data/tdf134971b.odt | Bin 0 -> 8599 bytes sw/qa/extras/odfimport/data/tdf138879.odt | Bin 0 -> 9347 bytes sw/qa/extras/odfimport/data/tdf146257.odt | Bin 0 -> 12148 bytes sw/qa/extras/odfimport/data/tdf146597.odt | Bin 0 -> 13307 bytes sw/qa/extras/odfimport/data/tdf149978.fodt | 53 + .../odfimport/data/tdf41542_borderlessPadding.odt | Bin 0 -> 15669 bytes sw/qa/extras/odfimport/data/tdf74524.odt | Bin 0 -> 9015 bytes sw/qa/extras/odfimport/data/tdf75221.odt | Bin 0 -> 9131 bytes .../data/tdf76322_columnBreakInHeader.docx | Bin 0 -> 11357 bytes .../odfimport/data/tdf76349_1columnBreak.odt | Bin 0 -> 8561 bytes sw/qa/extras/odfimport/data/tdf89802.fodt | 56 + sw/qa/extras/odfimport/data/tdf92586.odt | Bin 0 -> 10517 bytes sw/qa/extras/odfimport/data/tdf94882.odt | Bin 0 -> 9704 bytes sw/qa/extras/odfimport/data/tdf96113.odt | Bin 0 -> 13364 bytes sw/qa/extras/odfimport/data/timeFormFormats.odt | Bin 0 -> 9518 bytes sw/qa/extras/odfimport/data/vmerge-cell-border.odt | Bin 0 -> 8996 bytes sw/qa/extras/odfimport/odfimport.cxx | 1355 ++++++ .../data/090716_Studentische_Arbeit_VWS.docx | Bin 0 -> 42368 bytes sw/qa/extras/ooxmlexport/data/1-table-1-page.docx | Bin 0 -> 11658 bytes sw/qa/extras/ooxmlexport/data/128197_compat14.docx | Bin 0 -> 13797 bytes sw/qa/extras/ooxmlexport/data/128197_compat15.docx | Bin 0 -> 13778 bytes sw/qa/extras/ooxmlexport/data/1_page.docx | Bin 0 -> 20552 bytes sw/qa/extras/ooxmlexport/data/2-id.docx | Bin 0 -> 12782 bytes sw/qa/extras/ooxmlexport/data/2120112713.docx | Bin 0 -> 41022 bytes .../ooxmlexport/data/2120112713_OpenBrace.docx | Bin 0 -> 23146 bytes sw/qa/extras/ooxmlexport/data/2129393649.docx | Bin 0 -> 50312 bytes sw/qa/extras/ooxmlexport/data/2_table_doc.docx | Bin 0 -> 10090 bytes sw/qa/extras/ooxmlexport/data/2col-header.docx | Bin 0 -> 17060 bytes sw/qa/extras/ooxmlexport/data/99_Fields.docx | Bin 0 -> 15788 bytes sw/qa/extras/ooxmlexport/data/AnchorId.docx | Bin 0 -> 17942 bytes .../ooxmlexport/data/Chart_BorderLine_Style.docx | Bin 0 -> 25288 bytes .../data/Chart_Plot_BorderLine_Style.docx | Bin 0 -> 25114 bytes sw/qa/extras/ooxmlexport/data/CommentDone.docx | Bin 0 -> 20946 bytes .../ooxmlexport/data/EmbeddedExcelChart.docx | Bin 0 -> 21785 bytes .../data/Encrypted_LO_Standard_abc.docx | Bin 0 -> 7680 bytes .../ooxmlexport/data/Encrypted_MSO2007_abc.docx | Bin 0 -> 18432 bytes .../ooxmlexport/data/Encrypted_MSO2010_abc.docx | Bin 0 -> 19456 bytes .../ooxmlexport/data/Encrypted_MSO2013_abc.docx | Bin 0 -> 17920 bytes .../data/EquationAsScientificNumbering.docx | Bin 0 -> 16850 bytes .../data/EquationWithAboveAndBelowCaption.docx | Bin 0 -> 15211 bytes sw/qa/extras/ooxmlexport/data/FDO73034.docx | Bin 0 -> 11655 bytes sw/qa/extras/ooxmlexport/data/FDO73546.docx | Bin 0 -> 27528 bytes sw/qa/extras/ooxmlexport/data/FDO74105.docx | Bin 0 -> 13804 bytes sw/qa/extras/ooxmlexport/data/FDO74106.docx | Bin 0 -> 17030 bytes sw/qa/extras/ooxmlexport/data/FDO74215.docx | Bin 0 -> 24322 bytes sw/qa/extras/ooxmlexport/data/FDO74774.docx | Bin 0 -> 118904 bytes sw/qa/extras/ooxmlexport/data/FDO74775.docx | Bin 0 -> 16685 bytes sw/qa/extras/ooxmlexport/data/FDO75133.docx | Bin 0 -> 16659 bytes sw/qa/extras/ooxmlexport/data/FDO76248.docx | Bin 0 -> 22330 bytes sw/qa/extras/ooxmlexport/data/FDO76312.docx | Bin 0 -> 37560 bytes sw/qa/extras/ooxmlexport/data/FDO77715.docx | Bin 0 -> 120055 bytes sw/qa/extras/ooxmlexport/data/FDO78292.docx | Bin 0 -> 586141 bytes sw/qa/extras/ooxmlexport/data/FDO78590.docx | Bin 0 -> 59732 bytes .../ooxmlexport/data/FigureAsLabelPicture.docx | Bin 0 -> 109122 bytes .../ooxmlexport/data/FileWithInvalidImageLink.docx | Bin 0 -> 15118 bytes sw/qa/extras/ooxmlexport/data/Hau_min_list2.fodt | 334 ++ sw/qa/extras/ooxmlexport/data/ImageCrop.docx | Bin 0 -> 71650 bytes sw/qa/extras/ooxmlexport/data/IndexFieldFlagF.docx | Bin 0 -> 15781 bytes .../ooxmlexport/data/LineStyle_DashType.docx | Bin 0 -> 22867 bytes .../ooxmlexport/data/LineStyle_DashType_VML.docx | Bin 0 -> 15661 bytes sw/qa/extras/ooxmlexport/data/LinkedTextBoxes.docx | Bin 0 -> 62194 bytes .../ooxmlexport/data/NoFillAttrInImagedata.docx | Bin 0 -> 272326 bytes sw/qa/extras/ooxmlexport/data/NumberedList.docx | Bin 0 -> 55519 bytes .../extras/ooxmlexport/data/PreserveWfieldTOC.docx | Bin 0 -> 18485 bytes .../extras/ooxmlexport/data/PreserveXfieldTOC.docx | Bin 0 -> 18620 bytes sw/qa/extras/ooxmlexport/data/SdtContent.docx | Bin 0 -> 24609 bytes sw/qa/extras/ooxmlexport/data/Shape.docx | Bin 0 -> 15602 bytes .../ooxmlexport/data/ShapeOverlappingWithSdt.docx | Bin 0 -> 29760 bytes sw/qa/extras/ooxmlexport/data/Simple-TOC.odt | Bin 0 -> 10289 bytes .../extras/ooxmlexport/data/TC-table-DnD-move.docx | Bin 0 -> 12977 bytes .../ooxmlexport/data/TC-table-Separate-Move.docx | Bin 0 -> 13407 bytes .../ooxmlexport/data/TC-table-rowDND-front.docx | Bin 0 -> 13389 bytes sw/qa/extras/ooxmlexport/data/TC-table-rowDND.docx | Bin 0 -> 13378 bytes sw/qa/extras/ooxmlexport/data/TCTagMisMatch.docx | Bin 0 -> 16327 bytes sw/qa/extras/ooxmlexport/data/TOC_field_b.docx | Bin 0 -> 15114 bytes sw/qa/extras/ooxmlexport/data/TOC_field_f.docx | Bin 0 -> 15697 bytes .../ooxmlexport/data/TableWithAboveCaptions.docx | Bin 0 -> 14761 bytes .../data/Table_cell_auto_width_fdo69656.docx | Bin 0 -> 18939 bytes sw/qa/extras/ooxmlexport/data/Tdf147485.docx | Bin 0 -> 62544 bytes sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt | Bin 0 -> 15349 bytes sw/qa/extras/ooxmlexport/data/TestVMLData.docx | Bin 0 -> 50255 bytes .../data/TextEffects_Glow_Shadow_Reflection.docx | Bin 0 -> 11925 bytes .../ooxmlexport/data/TextEffects_Groupshapes.docx | Bin 0 -> 44427 bytes .../ooxmlexport/data/TextEffects_InStyle.docx | Bin 0 -> 13028 bytes .../ooxmlexport/data/TextEffects_Props3d.docx | Bin 0 -> 11843 bytes ...fects_Props3d_Ligatures_NumForm_NumSpacing.docx | Bin 0 -> 12144 bytes .../data/TextEffects_StylisticSets_CntxtAlts.docx | Bin 0 -> 11988 bytes .../ooxmlexport/data/TextEffects_TextFill.docx | Bin 0 -> 11937 bytes .../ooxmlexport/data/TextEffects_TextOutline.docx | Bin 0 -> 11918 bytes .../extras/ooxmlexport/data/TextFrameRotation.docx | Bin 0 -> 25798 bytes .../ooxmlexport/data/Unsupportedtextfields.docx | Bin 0 -> 15608 bytes sw/qa/extras/ooxmlexport/data/WPGbodyPr.docx | Bin 0 -> 24700 bytes sw/qa/extras/ooxmlexport/data/a4andborders.docx | Bin 0 -> 10014 bytes sw/qa/extras/ooxmlexport/data/abi11739.docx | Bin 0 -> 11635 bytes sw/qa/extras/ooxmlexport/data/absolute-link.docx | Bin 0 -> 10533 bytes .../extras/ooxmlexport/data/activex_checkbox.docx | Bin 0 -> 13851 bytes .../ooxmlexport/data/activex_control_align.odt | Bin 0 -> 9737 bytes .../data/activex_control_at_run_end.odt | Bin 0 -> 9601 bytes .../data/activex_option_button_group.docx | Bin 0 -> 15877 bytes sw/qa/extras/ooxmlexport/data/activex_textbox.docx | Bin 0 -> 16937 bytes sw/qa/extras/ooxmlexport/data/afterlines.docx | Bin 0 -> 12622 bytes sw/qa/extras/ooxmlexport/data/all_gaps_word.docx | Bin 0 -> 10226 bytes .../data/alphabeticalIndex_AutoColumn.docx | Bin 0 -> 15891 bytes .../data/alphabeticalIndex_MultipleColumns.docx | Bin 0 -> 15937 bytes sw/qa/extras/ooxmlexport/data/anchor-position.docx | Bin 0 -> 14599 bytes .../ooxmlexport/data/annotation-formatting.docx | Bin 0 -> 14298 bytes .../ooxmlexport/data/arabic-zero-numbering.docx | Bin 0 -> 5730 bytes .../ooxmlexport/data/arabic-zero3-numbering.docx | Bin 0 -> 5934 bytes .../ooxmlexport/data/arabic-zero4-numbering.docx | Bin 0 -> 5238 bytes .../ooxmlexport/data/arabic-zero5-numbering.docx | Bin 0 -> 14411 bytes .../extras/ooxmlexport/data/artistic_effects.docx | Bin 0 -> 31934 bytes sw/qa/extras/ooxmlexport/data/author-property.docx | Bin 0 -> 18198 bytes sw/qa/extras/ooxmlexport/data/autofit.docx | Bin 0 -> 13763 bytes sw/qa/extras/ooxmlexport/data/bad.docm | Bin 0 -> 9672 bytes sw/qa/extras/ooxmlexport/data/behinddoc.docx | Bin 0 -> 17341 bytes sw/qa/extras/ooxmlexport/data/bezier.odt | Bin 0 -> 12174 bytes .../ooxmlexport/data/bnc519228_odd-breaksB.docx | Bin 0 -> 13674 bytes sw/qa/extras/ooxmlexport/data/bnc581614.doc | Bin 0 -> 31744 bytes sw/qa/extras/ooxmlexport/data/bnc637947.odt | Bin 0 -> 9408 bytes .../extras/ooxmlexport/data/bnc780044_spacing.docx | Bin 0 -> 7437 bytes sw/qa/extras/ooxmlexport/data/bnc834035.odt | Bin 0 -> 18557 bytes sw/qa/extras/ooxmlexport/data/bnc837302.docx | Bin 0 -> 13904 bytes sw/qa/extras/ooxmlexport/data/bnc865381.docx | Bin 0 -> 19510 bytes sw/qa/extras/ooxmlexport/data/bnc875718.docx | Bin 0 -> 7369 bytes .../ooxmlexport/data/bnc884615-mso-position.docx | Bin 0 -> 7751 bytes sw/qa/extras/ooxmlexport/data/bnc884615.docx | Bin 0 -> 14343 bytes sw/qa/extras/ooxmlexport/data/bnc891663.docx | Bin 0 -> 7911 bytes sw/qa/extras/ooxmlexport/data/btlr-frame.odt | Bin 0 -> 8564 bytes sw/qa/extras/ooxmlexport/data/btlr-textbox.docx | Bin 0 -> 15965 bytes sw/qa/extras/ooxmlexport/data/calendar1.docx | Bin 0 -> 14148 bytes sw/qa/extras/ooxmlexport/data/calendar2.docx | Bin 0 -> 12180 bytes sw/qa/extras/ooxmlexport/data/calendar3.docx | Bin 0 -> 9235 bytes sw/qa/extras/ooxmlexport/data/calendar4.docx | Bin 0 -> 9218 bytes sw/qa/extras/ooxmlexport/data/calendar5.docx | Bin 0 -> 12584 bytes sw/qa/extras/ooxmlexport/data/caption.docx | Bin 0 -> 13773 bytes sw/qa/extras/ooxmlexport/data/cell-btlr.docx | Bin 0 -> 4392 bytes sw/qa/extras/ooxmlexport/data/cell-grid-span.docx | Bin 0 -> 14652 bytes .../extras/ooxmlexport/data/cell-sdt-redline.docx | Bin 0 -> 11268 bytes sw/qa/extras/ooxmlexport/data/charborder.odt | Bin 0 -> 8052 bytes sw/qa/extras/ooxmlexport/data/chart-dupe.docx | Bin 0 -> 25367 bytes sw/qa/extras/ooxmlexport/data/chart-in-footer.docx | Bin 0 -> 29207 bytes sw/qa/extras/ooxmlexport/data/chart-prop.docx | Bin 0 -> 17749 bytes sw/qa/extras/ooxmlexport/data/chart-size.docx | Bin 0 -> 18128 bytes .../extras/ooxmlexport/data/checkbox-control.docx | Bin 0 -> 13493 bytes sw/qa/extras/ooxmlexport/data/chtoutline.docx | Bin 0 -> 15406 bytes sw/qa/extras/ooxmlexport/data/cjklist30.docx | Bin 0 -> 13395 bytes sw/qa/extras/ooxmlexport/data/cjklist31.docx | Bin 0 -> 13406 bytes sw/qa/extras/ooxmlexport/data/cjklist34.docx | Bin 0 -> 13414 bytes sw/qa/extras/ooxmlexport/data/cjklist35.docx | Bin 0 -> 13394 bytes sw/qa/extras/ooxmlexport/data/cjklist44.docx | Bin 0 -> 13384 bytes sw/qa/extras/ooxmlexport/data/clearing-break.docx | Bin 0 -> 15739 bytes sw/qa/extras/ooxmlexport/data/columnbreak.docx | Bin 0 -> 12703 bytes .../extras/ooxmlexport/data/combobox-control.docx | Bin 0 -> 21561 bytes sw/qa/extras/ooxmlexport/data/comment_initials.odt | Bin 0 -> 9335 bytes sw/qa/extras/ooxmlexport/data/comments-nested.odt | Bin 0 -> 11343 bytes .../extras/ooxmlexport/data/conditional-text.fodt | 8 + .../data/conditionalstyles-tbllook.docx | Bin 0 -> 11531 bytes .../data/cont-sect-break-header-footer.docx | Bin 0 -> 18294 bytes .../ooxmlexport/data/content-control-grab-bag.docx | Bin 0 -> 30547 bytes .../ooxmlexport/data/content-control-shape.docx | Bin 0 -> 59050 bytes sw/qa/extras/ooxmlexport/data/controlshape.fodt | 182 + sw/qa/extras/ooxmlexport/data/cp1000015.odt | Bin 0 -> 8044 bytes sw/qa/extras/ooxmlexport/data/crop-pixel.docx | Bin 0 -> 28063 bytes sw/qa/extras/ooxmlexport/data/crop-roundtrip.docx | Bin 0 -> 143445 bytes .../extras/ooxmlexport/data/croppedAndRotated.odt | Bin 0 -> 11188 bytes .../extras/ooxmlexport/data/custom-properties.docx | Bin 0 -> 10968 bytes sw/qa/extras/ooxmlexport/data/customxml.docx | Bin 0 -> 23402 bytes .../dashed_line_custdash_1000th_of_percent.docx | Bin 0 -> 16895 bytes .../data/dashed_line_custdash_percentage.docx | Bin 0 -> 16895 bytes sw/qa/extras/ooxmlexport/data/date-control.docx | Bin 0 -> 20936 bytes .../data/date_field_at_end_of_paragraph.docx | Bin 0 -> 22693 bytes .../ooxmlexport/data/date_field_in_shape.docx | Bin 0 -> 21746 bytes .../data/decimal-numbering-no-leveltext.docx | Bin 0 -> 13517 bytes .../ooxmlexport/data/default-sect-break-cols.docx | Bin 0 -> 9993 bytes sw/qa/extras/ooxmlexport/data/defaultStyle.docx | Bin 0 -> 5126 bytes sw/qa/extras/ooxmlexport/data/dkvert.docx | Bin 0 -> 20751 bytes .../ooxmlexport/data/dml-charheight-default.docx | Bin 0 -> 15770 bytes .../data/dml-customgeometry-cubicbezier.docx | Bin 0 -> 8702 bytes .../ooxmlexport/data/dml-gradientfill-theme.docx | Bin 0 -> 15771 bytes .../data/dml-groupshape-capitalization.docx | Bin 0 -> 17676 bytes .../data/dml-groupshape-childposition.docx | Bin 0 -> 17609 bytes .../data/dml-groupshape-paraspacing.docx | Bin 0 -> 17128 bytes .../ooxmlexport/data/dml-groupshape-relsize.docx | Bin 0 -> 17223 bytes .../ooxmlexport/data/dml-groupshape-runfonts.docx | Bin 0 -> 16971 bytes .../ooxmlexport/data/dml-groupshape-sdt.docx | Bin 0 -> 19727 bytes .../ooxmlexport/data/dml-picture-in-textframe.docx | Bin 0 -> 17252 bytes .../ooxmlexport/data/dml-rectangle-relsize.docx | Bin 0 -> 17858 bytes .../ooxmlexport/data/dml-shape-fillbitmapcrop.docx | Bin 0 -> 33037 bytes .../ooxmlexport/data/dml-shape-fillpattern.docx | Bin 0 -> 27380 bytes .../extras/ooxmlexport/data/dml-shape-relsize.docx | Bin 0 -> 15499 bytes sw/qa/extras/ooxmlexport/data/dml-shape-title.docx | Bin 0 -> 13772 bytes .../ooxmlexport/data/dml-solidfill-alpha.docx | Bin 0 -> 17049 bytes .../ooxmlexport/data/dml-textframe-vertadjust.docx | Bin 0 -> 18296 bytes sw/qa/extras/ooxmlexport/data/dml-textshape.docx | Bin 0 -> 16554 bytes sw/qa/extras/ooxmlexport/data/dml-textshapeB.docx | Bin 0 -> 15148 bytes sw/qa/extras/ooxmlexport/data/dml-zorder.odt | Bin 0 -> 9704 bytes .../ooxmlexport/data/docxopenhyperlinkbox.docx | Bin 0 -> 18197 bytes .../ooxmlexport/data/dont-add-new-styles.docx | Bin 0 -> 13305 bytes .../ooxmlexport/data/drawinglayer-pic-pos.docx | Bin 0 -> 17617 bytes sw/qa/extras/ooxmlexport/data/drawingml-flipv.docx | Bin 0 -> 15580 bytes .../extras/ooxmlexport/data/dropdown-in-cell.docx | Bin 0 -> 13262 bytes .../ooxmlexport/data/duplicate-east-asia.odt | Bin 0 -> 9514 bytes .../ooxmlexport/data/effect-extent-inline.docx | Bin 0 -> 25805 bytes .../ooxmlexport/data/effect-extent-line-width.docx | Bin 0 -> 23257 bytes sw/qa/extras/ooxmlexport/data/effect-extent.docx | Bin 0 -> 14715 bytes .../ooxmlexport/data/effectextent-margin.docx | Bin 0 -> 13144 bytes sw/qa/extras/ooxmlexport/data/em.docx | Bin 0 -> 10016 bytes sw/qa/extras/ooxmlexport/data/embedded-xlsx.docx | Bin 0 -> 33370 bytes sw/qa/extras/ooxmlexport/data/embedded_images.odt | Bin 0 -> 19334 bytes .../ooxmlexport/data/empty-annotation-mark.docx | Bin 0 -> 13339 bytes .../extras/ooxmlexport/data/empty-date-control.odt | Bin 0 -> 8668 bytes sw/qa/extras/ooxmlexport/data/empty.odt | Bin 0 -> 8466 bytes .../ooxmlexport/data/endingSectionProps.docx | Bin 0 -> 6506 bytes sw/qa/extras/ooxmlexport/data/fail_bracePair.odt | Bin 0 -> 9394 bytes sw/qa/extras/ooxmlexport/data/fdo106029.docx | Bin 0 -> 4336 bytes sw/qa/extras/ooxmlexport/data/fdo38244.docx | Bin 0 -> 12424 bytes sw/qa/extras/ooxmlexport/data/fdo38414.docx | Bin 0 -> 21800 bytes sw/qa/extras/ooxmlexport/data/fdo43093.docx | Bin 0 -> 9547 bytes sw/qa/extras/ooxmlexport/data/fdo43093b.docx | Bin 0 -> 12959 bytes .../ooxmlexport/data/fdo44689_start_page_0.docx | Bin 0 -> 16875 bytes .../ooxmlexport/data/fdo44689_start_page_7.docx | Bin 0 -> 16849 bytes sw/qa/extras/ooxmlexport/data/fdo46361.docx | Bin 0 -> 13791 bytes sw/qa/extras/ooxmlexport/data/fdo47669.docx | Bin 0 -> 3908 bytes sw/qa/extras/ooxmlexport/data/fdo48557.odt | Bin 0 -> 16782 bytes sw/qa/extras/ooxmlexport/data/fdo51034.odt | Bin 0 -> 9922 bytes sw/qa/extras/ooxmlexport/data/fdo51550.odt | Bin 0 -> 13611 bytes sw/qa/extras/ooxmlexport/data/fdo52208.docx | Bin 0 -> 13356 bytes sw/qa/extras/ooxmlexport/data/fdo53985.docx | Bin 0 -> 20115 bytes sw/qa/extras/ooxmlexport/data/fdo55187.docx | Bin 0 -> 12759 bytes sw/qa/extras/ooxmlexport/data/fdo55381.docx | Bin 0 -> 4710 bytes sw/qa/extras/ooxmlexport/data/fdo56679.docx | Bin 0 -> 15993 bytes sw/qa/extras/ooxmlexport/data/fdo58577.odt | Bin 0 -> 9427 bytes sw/qa/extras/ooxmlexport/data/fdo59273.docx | Bin 0 -> 4358 bytes sw/qa/extras/ooxmlexport/data/fdo59638.docx | Bin 0 -> 12166 bytes sw/qa/extras/ooxmlexport/data/fdo60922.docx | Bin 0 -> 4503 bytes sw/qa/extras/ooxmlexport/data/fdo60957-2.docx | Bin 0 -> 24075 bytes sw/qa/extras/ooxmlexport/data/fdo60990.odt | Bin 0 -> 10945 bytes sw/qa/extras/ooxmlexport/data/fdo61343.docx | Bin 0 -> 114220 bytes sw/qa/extras/ooxmlexport/data/fdo63053.docx | Bin 0 -> 5044 bytes sw/qa/extras/ooxmlexport/data/fdo63685.docx | Bin 0 -> 10964 bytes sw/qa/extras/ooxmlexport/data/fdo64238_a.docx | Bin 0 -> 16401 bytes sw/qa/extras/ooxmlexport/data/fdo64238_b.docx | Bin 0 -> 14359 bytes sw/qa/extras/ooxmlexport/data/fdo64350.docx | Bin 0 -> 16139 bytes sw/qa/extras/ooxmlexport/data/fdo64826.docx | Bin 0 -> 12018 bytes sw/qa/extras/ooxmlexport/data/fdo65090.docx | Bin 0 -> 10409 bytes sw/qa/extras/ooxmlexport/data/fdo65265.docx | Bin 0 -> 14520 bytes sw/qa/extras/ooxmlexport/data/fdo65295.docx | Bin 0 -> 26411 bytes sw/qa/extras/ooxmlexport/data/fdo65400.docx | Bin 0 -> 16108 bytes sw/qa/extras/ooxmlexport/data/fdo65632.docx | Bin 0 -> 12862 bytes sw/qa/extras/ooxmlexport/data/fdo65655.docx | Bin 0 -> 13760 bytes sw/qa/extras/ooxmlexport/data/fdo65718.docx | Bin 0 -> 62876 bytes sw/qa/extras/ooxmlexport/data/fdo65833.docx | Bin 0 -> 34539 bytes sw/qa/extras/ooxmlexport/data/fdo66145.docx | Bin 0 -> 16245 bytes sw/qa/extras/ooxmlexport/data/fdo66474.docx | Bin 0 -> 96326 bytes sw/qa/extras/ooxmlexport/data/fdo66543.docx | Bin 0 -> 16196 bytes sw/qa/extras/ooxmlexport/data/fdo66688.docx | Bin 0 -> 24042 bytes sw/qa/extras/ooxmlexport/data/fdo66773.docx | Bin 0 -> 16239 bytes sw/qa/extras/ooxmlexport/data/fdo66781.docx | Bin 0 -> 21428 bytes sw/qa/extras/ooxmlexport/data/fdo66929.docx | Bin 0 -> 21624 bytes sw/qa/extras/ooxmlexport/data/fdo67013.docx | Bin 0 -> 27038 bytes sw/qa/extras/ooxmlexport/data/fdo67737.docx | Bin 0 -> 21349 bytes sw/qa/extras/ooxmlexport/data/fdo68418.docx | Bin 0 -> 13897 bytes sw/qa/extras/ooxmlexport/data/fdo68607.docx | Bin 0 -> 36117 bytes sw/qa/extras/ooxmlexport/data/fdo68787.docx | Bin 0 -> 14436 bytes sw/qa/extras/ooxmlexport/data/fdo69548.docx | Bin 0 -> 3802 bytes sw/qa/extras/ooxmlexport/data/fdo69616.docx | Bin 0 -> 22253 bytes sw/qa/extras/ooxmlexport/data/fdo69636.docx | Bin 0 -> 23779 bytes sw/qa/extras/ooxmlexport/data/fdo69644.docx | Bin 0 -> 18215 bytes sw/qa/extras/ooxmlexport/data/fdo69649.docx | Bin 0 -> 35048 bytes sw/qa/extras/ooxmlexport/data/fdo70457.docx | Bin 0 -> 20296 bytes sw/qa/extras/ooxmlexport/data/fdo70812.docx | Bin 0 -> 5530 bytes sw/qa/extras/ooxmlexport/data/fdo70838.docx | Bin 0 -> 4103 bytes sw/qa/extras/ooxmlexport/data/fdo70942.docx | Bin 0 -> 15520 bytes sw/qa/extras/ooxmlexport/data/fdo71302.docx | Bin 0 -> 13418 bytes sw/qa/extras/ooxmlexport/data/fdo71646.docx | Bin 0 -> 22792 bytes sw/qa/extras/ooxmlexport/data/fdo71785.docx | Bin 0 -> 54366 bytes sw/qa/extras/ooxmlexport/data/fdo71834.docx | Bin 0 -> 20967 bytes sw/qa/extras/ooxmlexport/data/fdo72560.docx | Bin 0 -> 15144 bytes sw/qa/extras/ooxmlexport/data/fdo72560b.docx | Bin 0 -> 9969 bytes sw/qa/extras/ooxmlexport/data/fdo72560c.docx | Bin 0 -> 9969 bytes sw/qa/extras/ooxmlexport/data/fdo72560d.docx | Bin 0 -> 8116 bytes sw/qa/extras/ooxmlexport/data/fdo72560e.docx | Bin 0 -> 9934 bytes sw/qa/extras/ooxmlexport/data/fdo73215.docx | Bin 0 -> 17846 bytes sw/qa/extras/ooxmlexport/data/fdo73227.docx | Bin 0 -> 206920 bytes sw/qa/extras/ooxmlexport/data/fdo73247.docx | Bin 0 -> 17526 bytes sw/qa/extras/ooxmlexport/data/fdo73389.docx | Bin 0 -> 11067 bytes sw/qa/extras/ooxmlexport/data/fdo73541.docx | Bin 0 -> 16446 bytes sw/qa/extras/ooxmlexport/data/fdo73550.docx | Bin 0 -> 7671 bytes sw/qa/extras/ooxmlexport/data/fdo73556.docx | Bin 0 -> 12124 bytes .../ooxmlexport/data/fdo73596_AlphaSeparator.docx | Bin 0 -> 16099 bytes .../ooxmlexport/data/fdo73596_RunInStyle.docx | Bin 0 -> 15886 bytes sw/qa/extras/ooxmlexport/data/fdo74110.docx | Bin 0 -> 22916 bytes sw/qa/extras/ooxmlexport/data/fdo74153.docx | Bin 0 -> 11506 bytes sw/qa/extras/ooxmlexport/data/fdo74357.docx | Bin 0 -> 11930 bytes sw/qa/extras/ooxmlexport/data/fdo74401.docx | Bin 0 -> 18425 bytes sw/qa/extras/ooxmlexport/data/fdo74566.docx | Bin 0 -> 12675 bytes sw/qa/extras/ooxmlexport/data/fdo74605.docx | Bin 0 -> 180916 bytes sw/qa/extras/ooxmlexport/data/fdo74745.docx | Bin 0 -> 32560 bytes sw/qa/extras/ooxmlexport/data/fdo74792.docx | Bin 0 -> 127945 bytes sw/qa/extras/ooxmlexport/data/fdo75431.docx | Bin 0 -> 13275 bytes sw/qa/extras/ooxmlexport/data/fdo76016.docx | Bin 0 -> 15182 bytes sw/qa/extras/ooxmlexport/data/fdo76098.docx | Bin 0 -> 79411 bytes sw/qa/extras/ooxmlexport/data/fdo76101.docx | Bin 0 -> 88435 bytes sw/qa/extras/ooxmlexport/data/fdo76163.docx | Bin 0 -> 41001 bytes sw/qa/extras/ooxmlexport/data/fdo76249.docx | Bin 0 -> 121643 bytes sw/qa/extras/ooxmlexport/data/fdo76316.docx | Bin 0 -> 653222 bytes sw/qa/extras/ooxmlexport/data/fdo76586.docx | Bin 0 -> 12277 bytes sw/qa/extras/ooxmlexport/data/fdo76587.docx | Bin 0 -> 13605 bytes sw/qa/extras/ooxmlexport/data/fdo76589.docx | Bin 0 -> 13790 bytes sw/qa/extras/ooxmlexport/data/fdo76591.docx | Bin 0 -> 109793 bytes sw/qa/extras/ooxmlexport/data/fdo76597.docx | Bin 0 -> 83390 bytes sw/qa/extras/ooxmlexport/data/fdo76741.docx | Bin 0 -> 18895 bytes sw/qa/extras/ooxmlexport/data/fdo76803.docx | Bin 0 -> 36516 bytes sw/qa/extras/ooxmlexport/data/fdo76934.docx | Bin 0 -> 31867 bytes sw/qa/extras/ooxmlexport/data/fdo76979.docx | Bin 0 -> 41973 bytes sw/qa/extras/ooxmlexport/data/fdo77117.docx | Bin 0 -> 23755 bytes sw/qa/extras/ooxmlexport/data/fdo77129.docx | Bin 0 -> 106404 bytes sw/qa/extras/ooxmlexport/data/fdo77476.docx | Bin 0 -> 935746 bytes sw/qa/extras/ooxmlexport/data/fdo77716.docx | Bin 0 -> 12915 bytes sw/qa/extras/ooxmlexport/data/fdo77718.docx | Bin 0 -> 554994 bytes sw/qa/extras/ooxmlexport/data/fdo77719.docx | Bin 0 -> 16680 bytes sw/qa/extras/ooxmlexport/data/fdo77725.docx | Bin 0 -> 53579 bytes sw/qa/extras/ooxmlexport/data/fdo77727.docx | Bin 0 -> 48777 bytes sw/qa/extras/ooxmlexport/data/fdo77759.docx | Bin 0 -> 23880 bytes sw/qa/extras/ooxmlexport/data/fdo77812.docx | Bin 0 -> 13485 bytes sw/qa/extras/ooxmlexport/data/fdo77887.docx | Bin 0 -> 39281 bytes sw/qa/extras/ooxmlexport/data/fdo77890.docx | Bin 0 -> 31759 bytes sw/qa/extras/ooxmlexport/data/fdo78284.docx | Bin 0 -> 26129 bytes sw/qa/extras/ooxmlexport/data/fdo78300.docx | Bin 0 -> 14358 bytes sw/qa/extras/ooxmlexport/data/fdo78384.docx | Bin 0 -> 13134 bytes sw/qa/extras/ooxmlexport/data/fdo78420.docx | Bin 0 -> 687154 bytes sw/qa/extras/ooxmlexport/data/fdo78432.docx | Bin 0 -> 29365 bytes sw/qa/extras/ooxmlexport/data/fdo78469.docx | Bin 0 -> 31664 bytes sw/qa/extras/ooxmlexport/data/fdo78474.docx | Bin 0 -> 116064 bytes sw/qa/extras/ooxmlexport/data/fdo78599.docx | Bin 0 -> 38560 bytes sw/qa/extras/ooxmlexport/data/fdo78651.docx | Bin 0 -> 20283 bytes sw/qa/extras/ooxmlexport/data/fdo78654.docx | Bin 0 -> 40927 bytes sw/qa/extras/ooxmlexport/data/fdo78658.docx | Bin 0 -> 54504 bytes sw/qa/extras/ooxmlexport/data/fdo78659.docx | Bin 0 -> 86548 bytes sw/qa/extras/ooxmlexport/data/fdo78663.docx | Bin 0 -> 30861 bytes sw/qa/extras/ooxmlexport/data/fdo78882.docx | Bin 0 -> 22429 bytes sw/qa/extras/ooxmlexport/data/fdo78883.docx | Bin 0 -> 18303 bytes sw/qa/extras/ooxmlexport/data/fdo78886.docx | Bin 0 -> 40499 bytes sw/qa/extras/ooxmlexport/data/fdo78887.docx | Bin 0 -> 14813 bytes sw/qa/extras/ooxmlexport/data/fdo78904.docx | Bin 0 -> 14388 bytes sw/qa/extras/ooxmlexport/data/fdo78907.docx | Bin 0 -> 38642 bytes sw/qa/extras/ooxmlexport/data/fdo78910.docx | Bin 0 -> 22596 bytes sw/qa/extras/ooxmlexport/data/fdo78939.docx | Bin 0 -> 73680 bytes sw/qa/extras/ooxmlexport/data/fdo78957.docx | Bin 0 -> 54098 bytes sw/qa/extras/ooxmlexport/data/fdo79008.docx | Bin 0 -> 53143 bytes sw/qa/extras/ooxmlexport/data/fdo79062.docx | Bin 0 -> 17422 bytes sw/qa/extras/ooxmlexport/data/fdo79256.docx | Bin 0 -> 15170 bytes sw/qa/extras/ooxmlexport/data/fdo79535.docx | Bin 0 -> 22547 bytes sw/qa/extras/ooxmlexport/data/fdo79540.docx | Bin 0 -> 26279 bytes sw/qa/extras/ooxmlexport/data/fdo79591.docx | Bin 0 -> 25140 bytes sw/qa/extras/ooxmlexport/data/fdo79668.docx | Bin 0 -> 27444 bytes sw/qa/extras/ooxmlexport/data/fdo79738.docx | Bin 0 -> 10159 bytes sw/qa/extras/ooxmlexport/data/fdo79817.docx | Bin 0 -> 22303 bytes sw/qa/extras/ooxmlexport/data/fdo79822.docx | Bin 0 -> 40902 bytes sw/qa/extras/ooxmlexport/data/fdo79915.docx | Bin 0 -> 20751 bytes sw/qa/extras/ooxmlexport/data/fdo79968.docx | Bin 0 -> 51338 bytes sw/qa/extras/ooxmlexport/data/fdo79969_xlsb.docx | Bin 0 -> 25622 bytes sw/qa/extras/ooxmlexport/data/fdo79969_xlsm.docx | Bin 0 -> 26157 bytes sw/qa/extras/ooxmlexport/data/fdo80097.docx | Bin 0 -> 36655 bytes sw/qa/extras/ooxmlexport/data/fdo80410.docx | Bin 0 -> 24733 bytes sw/qa/extras/ooxmlexport/data/fdo80522.docx | Bin 0 -> 31344 bytes sw/qa/extras/ooxmlexport/data/fdo80523_pptm.docx | Bin 0 -> 50693 bytes sw/qa/extras/ooxmlexport/data/fdo80523_sldm.docx | Bin 0 -> 50663 bytes sw/qa/extras/ooxmlexport/data/fdo80555.docx | Bin 0 -> 15018 bytes sw/qa/extras/ooxmlexport/data/fdo80800.docx | Bin 0 -> 13128 bytes .../ooxmlexport/data/fdo80800b_tableStyle.docx | Bin 0 -> 11946 bytes sw/qa/extras/ooxmlexport/data/fdo80895.docx | Bin 0 -> 23133 bytes sw/qa/extras/ooxmlexport/data/fdo80897.docx | Bin 0 -> 16332 bytes sw/qa/extras/ooxmlexport/data/fdo80898.docx | Bin 0 -> 21989 bytes sw/qa/extras/ooxmlexport/data/fdo80902.docx | Bin 0 -> 10795 bytes sw/qa/extras/ooxmlexport/data/fdo80997.docx | Bin 0 -> 20222 bytes sw/qa/extras/ooxmlexport/data/fdo81031.docx | Bin 0 -> 25264 bytes sw/qa/extras/ooxmlexport/data/fdo81341.docx | Bin 0 -> 12678 bytes sw/qa/extras/ooxmlexport/data/fdo81381.docx | Bin 0 -> 51656 bytes sw/qa/extras/ooxmlexport/data/fdo81486.docx | Bin 0 -> 13354 bytes sw/qa/extras/ooxmlexport/data/fdo81492.docx | Bin 0 -> 45995 bytes sw/qa/extras/ooxmlexport/data/fdo81945.docx | Bin 0 -> 14037 bytes sw/qa/extras/ooxmlexport/data/fdo81946.docx | Bin 0 -> 34561 bytes sw/qa/extras/ooxmlexport/data/fdo82123.docx | Bin 0 -> 36087 bytes sw/qa/extras/ooxmlexport/data/fdo82492.docx | Bin 0 -> 25948 bytes sw/qa/extras/ooxmlexport/data/fdo83044.docx | Bin 0 -> 25970 bytes sw/qa/extras/ooxmlexport/data/fdo83048.docx | Bin 0 -> 29731 bytes sw/qa/extras/ooxmlexport/data/fdo83057.docx | Bin 0 -> 25032 bytes sw/qa/extras/ooxmlexport/data/fdo83428.docx | Bin 0 -> 4386 bytes sw/qa/extras/ooxmlexport/data/fdo85542.docx | Bin 0 -> 10299 bytes sw/qa/extras/ooxmlexport/data/field-rotated.fodt | 44 + sw/qa/extras/ooxmlexport/data/file_crash.docx | Bin 0 -> 17243 bytes .../ooxmlexport/data/first-header-footer.docx | Bin 0 -> 21998 bytes .../ooxmlexport/data/first-header-footerB.odt | Bin 0 -> 11341 bytes .../extras/ooxmlexport/data/fixed-date-field.docx | Bin 0 -> 5066 bytes sw/qa/extras/ooxmlexport/data/flip_and_rotate.odt | Bin 0 -> 9403 bytes .../ooxmlexport/data/floating-table-position.docx | Bin 0 -> 13236 bytes .../ooxmlexport/data/floating-tables-anchor.docx | Bin 0 -> 16348 bytes .../ooxmlexport/data/floatingtbl_with_formula.docx | Bin 0 -> 17046 bytes sw/qa/extras/ooxmlexport/data/fly_fieldmark.fodt | 60 + .../ooxmlexport/data/font-name-is-empty.docx | Bin 0 -> 6991 bytes .../ooxmlexport/data/footer-body-distance.docx | Bin 0 -> 17891 bytes .../ooxmlexport/data/footer-contain-hyperlink.docx | Bin 0 -> 12196 bytes .../ooxmlexport/data/footer-margin-lost.docx | Bin 0 -> 21058 bytes sw/qa/extras/ooxmlexport/data/footnote.docx | Bin 0 -> 15779 bytes sw/qa/extras/ooxmlexport/data/footnotesep.fodt | 86 + sw/qa/extras/ooxmlexport/data/frame-wrap-auto.docx | Bin 0 -> 10348 bytes sw/qa/extras/ooxmlexport/data/frame.fodt | 75 + .../extras/ooxmlexport/data/frame_size_export.docx | Bin 0 -> 13929 bytes .../extras/ooxmlexport/data/glossaryWithEmail.docx | Bin 0 -> 19290 bytes sw/qa/extras/ooxmlexport/data/grabbag.docx | Bin 0 -> 9989 bytes .../data/gradient-fill-preservation.docx | Bin 0 -> 9390 bytes .../ooxmlexport/data/graphic-object-fliph.docx | Bin 0 -> 14408 bytes sw/qa/extras/ooxmlexport/data/gridbefore.docx | Bin 0 -> 4987 bytes .../ooxmlexport/data/groupshape-picture.docx | Bin 0 -> 24669 bytes .../ooxmlexport/data/groupshape-rotation.docx | Bin 0 -> 10462 bytes .../ooxmlexport/data/groupshape-smarttag.docx | Bin 0 -> 10694 bytes .../ooxmlexport/data/groupshape-textbox.docx | Bin 0 -> 17394 bytes .../ooxmlexport/data/groupshape-theme-font.docx | Bin 0 -> 13871 bytes .../data/groupshape-trackedchanges.docx | Bin 0 -> 17667 bytes sw/qa/extras/ooxmlexport/data/gutter-left.docx | Bin 0 -> 11860 bytes sw/qa/extras/ooxmlexport/data/gutter-top.docx | Bin 0 -> 13032 bytes sw/qa/extras/ooxmlexport/data/header-border.docx | Bin 0 -> 15503 bytes .../data/headerfooter-link-to-prev.docx | Bin 0 -> 18770 bytes sw/qa/extras/ooxmlexport/data/hello.docm | Bin 0 -> 12709 bytes sw/qa/extras/ooxmlexport/data/hello.docx | Bin 0 -> 12578 bytes sw/qa/extras/ooxmlexport/data/hidemark.docx | Bin 0 -> 12816 bytes sw/qa/extras/ooxmlexport/data/hyperlink-field.odt | Bin 0 -> 15543 bytes sw/qa/extras/ooxmlexport/data/hyperlink.docx | Bin 0 -> 12564 bytes sw/qa/extras/ooxmlexport/data/hyperlinkshape.docx | Bin 0 -> 17780 bytes sw/qa/extras/ooxmlexport/data/hyphenation.odt | Bin 0 -> 16416 bytes sw/qa/extras/ooxmlexport/data/i120928.docx | Bin 0 -> 16550 bytes sw/qa/extras/ooxmlexport/data/i124106.docx | Bin 0 -> 4810 bytes .../ooxmlexport/data/image-comment-at-char.docx | Bin 0 -> 6385 bytes sw/qa/extras/ooxmlexport/data/image-noborder.docx | Bin 0 -> 14305 bytes sw/qa/extras/ooxmlexport/data/image_data.docx | Bin 0 -> 50255 bytes sw/qa/extras/ooxmlexport/data/imgshadow.docx | Bin 0 -> 29629 bytes sw/qa/extras/ooxmlexport/data/indentation.docx | Bin 0 -> 16945 bytes sw/qa/extras/ooxmlexport/data/indents.docx | Bin 0 -> 11553 bytes .../ooxmlexport/data/inheritFirstHeader.docx | Bin 0 -> 15002 bytes .../extras/ooxmlexport/data/inline-groupshape.docx | Bin 0 -> 16992 bytes .../extras/ooxmlexport/data/inline-sdt-header.docx | Bin 0 -> 14930 bytes .../ooxmlexport/data/internal_hyperlink_frame.odt | Bin 0 -> 9021 bytes .../ooxmlexport/data/internal_hyperlink_ole.odt | Bin 0 -> 13400 bytes .../ooxmlexport/data/internal_hyperlink_region.odt | Bin 0 -> 8744 bytes .../ooxmlexport/data/internal_hyperlink_table.odt | Bin 0 -> 8866 bytes .../ooxmlexport/data/invalid_date_form_field.docx | Bin 0 -> 4386 bytes sw/qa/extras/ooxmlexport/data/kde216114-1.odt | Bin 0 -> 22717 bytes sw/qa/extras/ooxmlexport/data/kde302504-1.odt | Bin 0 -> 10014 bytes sw/qa/extras/ooxmlexport/data/kern.docx | Bin 0 -> 12832 bytes sw/qa/extras/ooxmlexport/data/large-twips.docx | Bin 0 -> 5365 bytes .../ooxmlexport/data/layout-flow-alt-alone.docx | Bin 0 -> 7669 bytes sw/qa/extras/ooxmlexport/data/libreoffice.png | Bin 0 -> 767 bytes .../ooxmlexport/data/list_notcounted_indent.fodt | 141 + sw/qa/extras/ooxmlexport/data/lvlPicBulletId.docx | Bin 0 -> 32450 bytes sw/qa/extras/ooxmlexport/data/mailmerge.docx | Bin 0 -> 17580 bytes .../ooxmlexport/data/margins_from_style.docx | Bin 0 -> 13878 bytes sw/qa/extras/ooxmlexport/data/math-accents.docx | Bin 0 -> 3555 bytes sw/qa/extras/ooxmlexport/data/math-d.docx | Bin 0 -> 3633 bytes sw/qa/extras/ooxmlexport/data/math-escape.docx | Bin 0 -> 13422 bytes sw/qa/extras/ooxmlexport/data/math-escaping.docx | Bin 0 -> 3481 bytes sw/qa/extras/ooxmlexport/data/math-lim.docx | Bin 0 -> 3512 bytes sw/qa/extras/ooxmlexport/data/math-literal.docx | Bin 0 -> 3850 bytes sw/qa/extras/ooxmlexport/data/math-matrix.docx | Bin 0 -> 3507 bytes sw/qa/extras/ooxmlexport/data/math-mso2k7.docx | Bin 0 -> 12207 bytes sw/qa/extras/ooxmlexport/data/math-nary.docx | Bin 0 -> 3562 bytes .../data/math-overbrace_underbrace.docx | Bin 0 -> 3567 bytes sw/qa/extras/ooxmlexport/data/math-overstrike.docx | Bin 0 -> 3507 bytes .../extras/ooxmlexport/data/math-placeholders.docx | Bin 0 -> 3467 bytes sw/qa/extras/ooxmlexport/data/math-rad.docx | Bin 0 -> 3507 bytes sw/qa/extras/ooxmlexport/data/math-subscripts.docx | Bin 0 -> 3669 bytes .../ooxmlexport/data/math-vertical_stacks.docx | Bin 0 -> 3522 bytes sw/qa/extras/ooxmlexport/data/mathtype.docx | Bin 0 -> 12533 bytes sw/qa/extras/ooxmlexport/data/mce-nested.docx | Bin 0 -> 32734 bytes sw/qa/extras/ooxmlexport/data/mce-wpg.docx | Bin 0 -> 17404 bytes sw/qa/extras/ooxmlexport/data/mce.docx | Bin 0 -> 15667 bytes sw/qa/extras/ooxmlexport/data/missing-path.docx | Bin 0 -> 15860 bytes sw/qa/extras/ooxmlexport/data/missing_newline.odt | Bin 0 -> 10524 bytes sw/qa/extras/ooxmlexport/data/mso-spt180.docx | Bin 0 -> 10496 bytes .../ooxmlexport/data/msobrightnesscontrast.docx | Bin 0 -> 18972 bytes .../data/multi-column-line-separator-SAVED.docx | Bin 0 -> 5640 bytes .../data/multi-column-separator-with-line.docx | Bin 0 -> 11618 bytes sw/qa/extras/ooxmlexport/data/multi-page-toc.docx | Bin 0 -> 18321 bytes sw/qa/extras/ooxmlexport/data/n592908-frame.docx | Bin 0 -> 13589 bytes sw/qa/extras/ooxmlexport/data/n592908-picture.docx | Bin 0 -> 62593 bytes sw/qa/extras/ooxmlexport/data/n652364.docx | Bin 0 -> 8975 bytes sw/qa/extras/ooxmlexport/data/n693238.docx | Bin 0 -> 9933 bytes sw/qa/extras/ooxmlexport/data/n705956-1.docx | Bin 0 -> 7861 bytes sw/qa/extras/ooxmlexport/data/n705956-2.docx | Bin 0 -> 9363 bytes sw/qa/extras/ooxmlexport/data/n747461.docx | Bin 0 -> 6489 bytes sw/qa/extras/ooxmlexport/data/n750255.docx | Bin 0 -> 10102 bytes sw/qa/extras/ooxmlexport/data/n750935.docx | Bin 0 -> 57750 bytes sw/qa/extras/ooxmlexport/data/n751054.docx | Bin 0 -> 13100 bytes sw/qa/extras/ooxmlexport/data/n751117.docx | Bin 0 -> 10312 bytes sw/qa/extras/ooxmlexport/data/n764005.docx | Bin 0 -> 13088 bytes sw/qa/extras/ooxmlexport/data/n766481.docx | Bin 0 -> 10021 bytes sw/qa/extras/ooxmlexport/data/n766487.docx | Bin 0 -> 9273 bytes sw/qa/extras/ooxmlexport/data/n775906.docx | Bin 0 -> 11750 bytes sw/qa/extras/ooxmlexport/data/n777337.docx | Bin 0 -> 13409 bytes sw/qa/extras/ooxmlexport/data/n778828.docx | Bin 0 -> 10012 bytes sw/qa/extras/ooxmlexport/data/n778836.docx | Bin 0 -> 9649 bytes sw/qa/extras/ooxmlexport/data/n779630.docx | Bin 0 -> 12500 bytes sw/qa/extras/ooxmlexport/data/n779642.docx | Bin 0 -> 85485 bytes sw/qa/extras/ooxmlexport/data/n779834.docx | Bin 0 -> 22624 bytes sw/qa/extras/ooxmlexport/data/n779941.docx | Bin 0 -> 10316 bytes sw/qa/extras/ooxmlexport/data/n780563.docx | Bin 0 -> 24144 bytes sw/qa/extras/ooxmlexport/data/n780843.docx | Bin 0 -> 12614 bytes sw/qa/extras/ooxmlexport/data/n780843b.docx | Bin 0 -> 13623 bytes sw/qa/extras/ooxmlexport/data/n780853.docx | Bin 0 -> 9261 bytes sw/qa/extras/ooxmlexport/data/n782345.docx | Bin 0 -> 12607 bytes sw/qa/extras/ooxmlexport/data/n783638.docx | Bin 0 -> 19119 bytes sw/qa/extras/ooxmlexport/data/n785767.docx | Bin 0 -> 12848 bytes sw/qa/extras/ooxmlexport/data/n789482.docx | Bin 0 -> 12916 bytes sw/qa/extras/ooxmlexport/data/n792778.docx | Bin 0 -> 15329 bytes sw/qa/extras/ooxmlexport/data/n793262.docx | Bin 0 -> 15449 bytes sw/qa/extras/ooxmlexport/data/n793998.docx | Bin 0 -> 13167 bytes sw/qa/extras/ooxmlexport/data/n816593.docx | Bin 0 -> 17030 bytes sw/qa/extras/ooxmlexport/data/n820509.docx | Bin 0 -> 12047 bytes sw/qa/extras/ooxmlexport/data/n822175.odt | Bin 0 -> 7633 bytes sw/qa/extras/ooxmlexport/data/n830205.docx | Bin 0 -> 33186 bytes .../data/negative-cell-margin-twips.docx | Bin 0 -> 5902 bytes .../extras/ooxmlexport/data/nested-text-frames.odt | Bin 0 -> 13013 bytes .../ooxmlexport/data/nestedAlternateContent.docx | Bin 0 -> 19109 bytes .../ooxmlexport/data/no-numlevel-but-indented.odt | Bin 0 -> 19535 bytes sw/qa/extras/ooxmlexport/data/noDefault.docx | Bin 0 -> 9238 bytes sw/qa/extras/ooxmlexport/data/non_ascii_link.docx | Bin 0 -> 12061 bytes sw/qa/extras/ooxmlexport/data/nonbmpchar.docx | Bin 0 -> 4194 bytes .../ooxmlexport/data/num-override-lvltext.docx | Bin 0 -> 13708 bytes .../ooxmlexport/data/num-override-start.docx | Bin 0 -> 14327 bytes .../extras/ooxmlexport/data/num-parent-style.docx | Bin 0 -> 14002 bytes .../ooxmlexport/data/number-portion-format.odt | Bin 0 -> 8984 bytes sw/qa/extras/ooxmlexport/data/numbering-font.docx | Bin 0 -> 11014 bytes sw/qa/extras/ooxmlexport/data/numbering1.docx | Bin 0 -> 14346 bytes sw/qa/extras/ooxmlexport/data/numlist-zhcn.odt | Bin 0 -> 10410 bytes sw/qa/extras/ooxmlexport/data/numlist-zhtw.odt | Bin 0 -> 10419 bytes .../ooxmlexport/data/object_cross_reference.odt | Bin 0 -> 38788 bytes sw/qa/extras/ooxmlexport/data/ooo106020-1.odt | Bin 0 -> 11044 bytes sw/qa/extras/ooxmlexport/data/ooo34469-1.odt | Bin 0 -> 16812 bytes sw/qa/extras/ooxmlexport/data/ooo39250-1-min.rtf | 42 + sw/qa/extras/ooxmlexport/data/ooo39845-7.odt | Bin 0 -> 14361 bytes sw/qa/extras/ooxmlexport/data/ooo47778-3.odt | Bin 0 -> 9872 bytes sw/qa/extras/ooxmlexport/data/ooo47778-4.odt | Bin 0 -> 9815 bytes sw/qa/extras/ooxmlexport/data/ooo67471-2.odt | Bin 0 -> 9511 bytes sw/qa/extras/ooxmlexport/data/ooo72950-1.odt | Bin 0 -> 12591 bytes sw/qa/extras/ooxmlexport/data/ooo96040-2.odt | Bin 0 -> 289214 bytes sw/qa/extras/ooxmlexport/data/ooxml-triangle.docx | Bin 0 -> 13289 bytes .../extras/ooxmlexport/data/open-as-read-only.docx | Bin 0 -> 4594 bytes .../ooxmlexport/data/outline-number-types.odt | Bin 0 -> 13600 bytes sw/qa/extras/ooxmlexport/data/page-background.docx | Bin 0 -> 10041 bytes .../ooxmlexport/data/page-border-shadow.docx | Bin 0 -> 10012 bytes .../data/page-borders-export-case-2.docx | Bin 0 -> 16156 bytes .../extras/ooxmlexport/data/page-break-before.docx | Bin 0 -> 12943 bytes .../ooxmlexport/data/page-content-bottom.docx | Bin 0 -> 5007 bytes .../ooxmlexport/data/page-graphic-background.odt | Bin 0 -> 32296 bytes sw/qa/extras/ooxmlexport/data/pageBreak_after.odt | Bin 0 -> 10162 bytes sw/qa/extras/ooxmlexport/data/pagerelsize.docx | Bin 0 -> 17318 bytes .../ooxmlexport/data/para-adjust-distribute.docx | Bin 0 -> 11326 bytes .../extras/ooxmlexport/data/para-auto-spacing.docx | Bin 0 -> 30380 bytes sw/qa/extras/ooxmlexport/data/para-shading.docx | Bin 0 -> 12609 bytes sw/qa/extras/ooxmlexport/data/para-shadow.docx | Bin 0 -> 4056 bytes .../ooxmlexport/data/para-style-num-level.docx | Bin 0 -> 13101 bytes .../ooxmlexport/data/paragraph-mark-nonempty.odt | Bin 0 -> 8769 bytes sw/qa/extras/ooxmlexport/data/paragraph-mark.docx | Bin 0 -> 13113 bytes sw/qa/extras/ooxmlexport/data/paragraph-mark2.docx | Bin 0 -> 31782 bytes sw/qa/extras/ooxmlexport/data/paragraph-sdt.docx | Bin 0 -> 34035 bytes .../ooxmlexport/data/paragraphWithComments.docx | Bin 0 -> 14255 bytes .../data/parasplit-on-section-border.odt | Bin 0 -> 17642 bytes .../picture-artistic-effects-preservation.docx | Bin 0 -> 17272 bytes .../data/picture-effects-preservation.docx | Bin 0 -> 33275 bytes .../ooxmlexport/data/picture-with-schemecolor.docx | Bin 0 -> 35489 bytes .../ooxmlexport/data/picture-wrap-polygon.docx | Bin 0 -> 15997 bytes .../extras/ooxmlexport/data/pictureWatermark.docx | Bin 0 -> 798086 bytes .../data/picture_colormode_black_white.odt | Bin 0 -> 32725 bytes .../data/picture_colormode_grayscale.docx | Bin 0 -> 36515 bytes .../data/picture_colormode_watermark.odt | Bin 0 -> 32345 bytes .../extras/ooxmlexport/data/plausable-border.docx | Bin 0 -> 15719 bytes .../ooxmlexport/data/position-and-rotation.docx | Bin 0 -> 18502 bytes .../ooxmlexport/data/preserve_Z_field_TOC.docx | Bin 0 -> 18381 bytes sw/qa/extras/ooxmlexport/data/preset-shape.docx | Bin 0 -> 16054 bytes sw/qa/extras/ooxmlexport/data/protectedform.docx | Bin 0 -> 18511 bytes sw/qa/extras/ooxmlexport/data/quicktables.docx | Bin 0 -> 12205 bytes sw/qa/extras/ooxmlexport/data/rel-size-round.docx | Bin 0 -> 15098 bytes sw/qa/extras/ooxmlexport/data/relative-link.docx | Bin 0 -> 13415 bytes sw/qa/extras/ooxmlexport/data/relorientation.docx | Bin 0 -> 22931 bytes sw/qa/extras/ooxmlexport/data/rhbz1180114.docx | Bin 0 -> 3435 bytes sw/qa/extras/ooxmlexport/data/rhbz988516.docx | Bin 0 -> 15513 bytes sw/qa/extras/ooxmlexport/data/rot180-flipv.docx | Bin 0 -> 15903 bytes sw/qa/extras/ooxmlexport/data/rot270-flipv.docx | Bin 0 -> 15887 bytes sw/qa/extras/ooxmlexport/data/rot90-fliph.docx | Bin 0 -> 15683 bytes sw/qa/extras/ooxmlexport/data/rotated_shape.fodt | 81 + .../extras/ooxmlexport/data/rprchange_closed.docx | Bin 0 -> 24695 bytes sw/qa/extras/ooxmlexport/data/rtl-gutter.docx | Bin 0 -> 8843 bytes sw/qa/extras/ooxmlexport/data/rubyhyperlink.fodt | 45 + sw/qa/extras/ooxmlexport/data/sample.dotx | Bin 0 -> 11338 bytes sw/qa/extras/ooxmlexport/data/sdt-2-para.docx | Bin 0 -> 15487 bytes sw/qa/extras/ooxmlexport/data/sdt-2-run.docx | Bin 0 -> 12849 bytes sw/qa/extras/ooxmlexport/data/sdt-alias.docx | Bin 0 -> 12872 bytes .../extras/ooxmlexport/data/sdt-before-field.docx | Bin 0 -> 12995 bytes .../extras/ooxmlexport/data/sdt-citation-run.docx | Bin 0 -> 12817 bytes .../ooxmlexport/data/sdt-company-multipara.docx | Bin 0 -> 19521 bytes .../ooxmlexport/data/sdt-date-duplicate.docx | Bin 0 -> 34071 bytes sw/qa/extras/ooxmlexport/data/sdt-header.docx | Bin 0 -> 18551 bytes .../ooxmlexport/data/sdt-ignored-footer.docx | Bin 0 -> 18299 bytes sw/qa/extras/ooxmlexport/data/sdt-run-picture.docx | Bin 0 -> 15444 bytes .../ooxmlexport/data/section_break_numbering.docx | Bin 0 -> 5614 bytes sw/qa/extras/ooxmlexport/data/sectionprot.odt | Bin 0 -> 8612 bytes sw/qa/extras/ooxmlexport/data/sectionprot2.odt | Bin 0 -> 8568 bytes .../data/shape-3d-effect-preservation.docx | Bin 0 -> 19676 bytes .../ooxmlexport/data/shape-atpage-in-table.fodt | 185 + .../data/shape-effect-preservation.docx | Bin 0 -> 23996 bytes .../ooxmlexport/data/shape-in-floattable.docx | Bin 0 -> 26161 bytes .../ooxmlexport/data/shape-theme-preservation.docx | Bin 0 -> 18757 bytes .../data/signature-line-all-props-set.docx | Bin 0 -> 13169 bytes sw/qa/extras/ooxmlexport/data/simple-sdts.docx | Bin 0 -> 25424 bytes sw/qa/extras/ooxmlexport/data/smartart.docx | Bin 0 -> 20453 bytes sw/qa/extras/ooxmlexport/data/strict-smartart.docx | Bin 0 -> 18661 bytes sw/qa/extras/ooxmlexport/data/strict.docx | Bin 0 -> 25636 bytes .../extras/ooxmlexport/data/style-inheritance.docx | Bin 0 -> 26321 bytes .../ooxmlexport/data/symbol_chicago_list.docx | Bin 0 -> 8909 bytes sw/qa/extras/ooxmlexport/data/table-alignment.docx | Bin 0 -> 13187 bytes .../data/table-auto-column-fixed-size.docx | Bin 0 -> 17672 bytes .../data/table-auto-column-fixed-size2.docx | Bin 0 -> 12907 bytes .../extras/ooxmlexport/data/table-auto-nested.docx | Bin 0 -> 10297 bytes .../extras/ooxmlexport/data/table-black_fill.docx | Bin 0 -> 17978 bytes sw/qa/extras/ooxmlexport/data/table-borders.docx | Bin 0 -> 13489 bytes .../extras/ooxmlexport/data/table-btlr-center.docx | Bin 0 -> 10686 bytes .../extras/ooxmlexport/data/table-cell-margin.docx | Bin 0 -> 13708 bytes .../ooxmlexport/data/table-floating-margins.docx | Bin 0 -> 14346 bytes sw/qa/extras/ooxmlexport/data/table-floating.docx | Bin 0 -> 14996 bytes sw/qa/extras/ooxmlexport/data/table-pagebreak.docx | Bin 0 -> 10148 bytes .../extras/ooxmlexport/data/table-position-14.docx | Bin 0 -> 13708 bytes .../extras/ooxmlexport/data/table-position-15.docx | Bin 0 -> 12264 bytes .../data/table-row-data-displayed-twice.docx | Bin 0 -> 27239 bytes sw/qa/extras/ooxmlexport/data/table-rtl.docx | Bin 0 -> 13449 bytes .../extras/ooxmlexport/data/table-start-2-sdt.docx | Bin 0 -> 34077 bytes .../data/table-style-border-export.docx | Bin 0 -> 13984 bytes .../ooxmlexport/data/table-style-border.docx | Bin 0 -> 14552 bytes .../data/table-style-cell-back-color.docx | Bin 0 -> 13646 bytes .../ooxmlexport/data/table-style-conf-nested.docx | Bin 0 -> 13167 bytes .../ooxmlexport/data/table-style-parprop.docx | Bin 0 -> 10098 bytes .../ooxmlexport/data/table-style-rPr-sz.docx | Bin 0 -> 10771 bytes .../ooxmlexport/data/table-theme-preservation.docx | Bin 0 -> 37575 bytes sw/qa/extras/ooxmlexport/data/table.fodt | 70 + sw/qa/extras/ooxmlexport/data/table.odt | Bin 0 -> 8889 bytes sw/qa/extras/ooxmlexport/data/tableCurrupt.docx | Bin 0 -> 28750 bytes .../ooxmlexport/data/tablePreferredWidth.docx | Bin 0 -> 13130 bytes sw/qa/extras/ooxmlexport/data/table_atleast.docx | Bin 0 -> 13029 bytes .../ooxmlexport/data/table_cross_reference.odt | Bin 0 -> 10243 bytes .../data/table_cross_reference_custom_format.odt | Bin 0 -> 12089 bytes sw/qa/extras/ooxmlexport/data/table_lineRule.docx | Bin 0 -> 13998 bytes .../ooxmlexport/data/tableborder-finedash.docx | Bin 0 -> 10266 bytes sw/qa/extras/ooxmlexport/data/tblppr-shape.docx | Bin 0 -> 13497 bytes sw/qa/extras/ooxmlexport/data/tblr-height.docx | Bin 0 -> 10466 bytes sw/qa/extras/ooxmlexport/data/tbrl-frame-vml.docx | Bin 0 -> 22756 bytes sw/qa/extras/ooxmlexport/data/tbrl-textbox.docx | Bin 0 -> 17300 bytes sw/qa/extras/ooxmlexport/data/tdf100075.docx | Bin 0 -> 11834 bytes sw/qa/extras/ooxmlexport/data/tdf100581.odt | Bin 0 -> 24334 bytes .../ooxmlexport/data/tdf100751_arrowBothFlip.docx | Bin 0 -> 15546 bytes .../data/tdf101122_noFillForCustomShape.odt | Bin 0 -> 15232 bytes .../ooxmlexport/data/tdf101589_dontSplitTable.odt | Bin 0 -> 11314 bytes sw/qa/extras/ooxmlexport/data/tdf102466.docx | Bin 0 -> 101162 bytes sw/qa/extras/ooxmlexport/data/tdf103001.docx | Bin 0 -> 33883 bytes sw/qa/extras/ooxmlexport/data/tdf103090.odt | Bin 0 -> 8845 bytes sw/qa/extras/ooxmlexport/data/tdf103389.docx | Bin 0 -> 13983 bytes sw/qa/extras/ooxmlexport/data/tdf103544.docx | Bin 0 -> 15012 bytes sw/qa/extras/ooxmlexport/data/tdf103573.docx | Bin 0 -> 16155 bytes sw/qa/extras/ooxmlexport/data/tdf103651.docx | Bin 0 -> 14459 bytes .../ooxmlexport/data/tdf103975_notPageBreakB.docx | Bin 0 -> 13971 bytes .../ooxmlexport/data/tdf103975_notPageBreakC.docx | Bin 0 -> 13955 bytes .../ooxmlexport/data/tdf103975_notPageBreakD.docx | Bin 0 -> 21482 bytes .../ooxmlexport/data/tdf103975_notPageBreakE.docx | Bin 0 -> 14047 bytes sw/qa/extras/ooxmlexport/data/tdf103976.docx | Bin 0 -> 51017 bytes sw/qa/extras/ooxmlexport/data/tdf103982.docx | Bin 0 -> 12085 bytes .../data/tdf104061_tableSectionColumns.docx | Bin 0 -> 103497 bytes sw/qa/extras/ooxmlexport/data/tdf104115.docx | Bin 0 -> 13044 bytes sw/qa/extras/ooxmlexport/data/tdf104150.docx | Bin 0 -> 12621 bytes sw/qa/extras/ooxmlexport/data/tdf104162.docx | Bin 0 -> 14541 bytes .../ooxmlexport/data/tdf104348_contextMargin.docx | Bin 0 -> 19145 bytes sw/qa/extras/ooxmlexport/data/tdf104354-2.docx | Bin 0 -> 15263 bytes sw/qa/extras/ooxmlexport/data/tdf104354.docx | Bin 0 -> 10182 bytes .../data/tdf104354_firstParaInSection.docx | Bin 0 -> 6828 bytes sw/qa/extras/ooxmlexport/data/tdf104418.odt | Bin 0 -> 12437 bytes .../ooxmlexport/data/tdf104420_lostParagraph.docx | Bin 0 -> 103469 bytes sw/qa/extras/ooxmlexport/data/tdf104539.odt | Bin 0 -> 12783 bytes .../ooxmlexport/data/tdf104565_ArrowPosition.docx | Bin 0 -> 4980 bytes .../ooxmlexport/data/tdf104707_urlComment.odt | Bin 0 -> 9942 bytes .../data/tdf104713_undefinedStyles.docx | Bin 0 -> 2331 bytes sw/qa/extras/ooxmlexport/data/tdf104797.docx | Bin 0 -> 11710 bytes sw/qa/extras/ooxmlexport/data/tdf104823.docx | Bin 0 -> 21260 bytes sw/qa/extras/ooxmlexport/data/tdf105095.docx | Bin 0 -> 15756 bytes sw/qa/extras/ooxmlexport/data/tdf105215.docx | Bin 0 -> 5654 bytes sw/qa/extras/ooxmlexport/data/tdf105444.docx | Bin 0 -> 4928 bytes sw/qa/extras/ooxmlexport/data/tdf105485.docx | Bin 0 -> 7804 bytes .../data/tdf105490_negativeMargins.docx | Bin 0 -> 12389 bytes sw/qa/extras/ooxmlexport/data/tdf105688.docx | Bin 0 -> 31745 bytes .../data/tdf105875_VmlShapeRotationWithFlip.docx | Bin 0 -> 23175 bytes sw/qa/extras/ooxmlexport/data/tdf106001-2.odt | Bin 0 -> 8159 bytes sw/qa/extras/ooxmlexport/data/tdf106001.docx | Bin 0 -> 5021 bytes .../data/tdf106062_nonHangingFootnote.odt | Bin 0 -> 14255 bytes sw/qa/extras/ooxmlexport/data/tdf106132.docx | Bin 0 -> 5851 bytes .../ooxmlexport/data/tdf106174_rtlParaAlign.docx | Bin 0 -> 5266 bytes sw/qa/extras/ooxmlexport/data/tdf106492.docx | Bin 0 -> 7896 bytes .../data/tdf106541_noinheritChapterNumbering.odt | Bin 0 -> 13859 bytes sw/qa/extras/ooxmlexport/data/tdf106690-cell.docx | Bin 0 -> 14385 bytes sw/qa/extras/ooxmlexport/data/tdf106690.docx | Bin 0 -> 20653 bytes sw/qa/extras/ooxmlexport/data/tdf106724.docx | Bin 0 -> 21692 bytes sw/qa/extras/ooxmlexport/data/tdf106843.fodt | 43 + sw/qa/extras/ooxmlexport/data/tdf106953.docx | Bin 0 -> 13833 bytes sw/qa/extras/ooxmlexport/data/tdf106970.docx | Bin 0 -> 23255 bytes .../ooxmlexport/data/tdf106974_int32Crop.docx | Bin 0 -> 374376 bytes sw/qa/extras/ooxmlexport/data/tdf107020.docx | Bin 0 -> 404889 bytes sw/qa/extras/ooxmlexport/data/tdf107033.docx | Bin 0 -> 12577 bytes sw/qa/extras/ooxmlexport/data/tdf107035.docx | Bin 0 -> 4240 bytes sw/qa/extras/ooxmlexport/data/tdf107104.docx | Bin 0 -> 15648 bytes sw/qa/extras/ooxmlexport/data/tdf107111.docx | Bin 0 -> 451082 bytes sw/qa/extras/ooxmlexport/data/tdf107119.docx | Bin 0 -> 12207 bytes .../ooxmlexport/data/tdf107359-char-pitch.docx | Bin 0 -> 12806 bytes sw/qa/extras/ooxmlexport/data/tdf107618.doc | Bin 0 -> 28160 bytes sw/qa/extras/ooxmlexport/data/tdf107626.odt | Bin 0 -> 12912 bytes sw/qa/extras/ooxmlexport/data/tdf107684.odt | Bin 0 -> 12357 bytes sw/qa/extras/ooxmlexport/data/tdf107837.odt | Bin 0 -> 9059 bytes sw/qa/extras/ooxmlexport/data/tdf107889.docx | Bin 0 -> 11207 bytes sw/qa/extras/ooxmlexport/data/tdf107969.docx | Bin 0 -> 28622 bytes sw/qa/extras/ooxmlexport/data/tdf108269.docm | Bin 0 -> 20187 bytes .../ooxmlexport/data/tdf108350_noFontdefaults.docx | Bin 0 -> 7502 bytes sw/qa/extras/ooxmlexport/data/tdf108493.docx | Bin 0 -> 27322 bytes sw/qa/extras/ooxmlexport/data/tdf108496.docx | Bin 0 -> 19421 bytes sw/qa/extras/ooxmlexport/data/tdf108505.docx | Bin 0 -> 16732 bytes sw/qa/extras/ooxmlexport/data/tdf108682.docx | Bin 0 -> 12653 bytes .../data/tdf108944_footnoteSeparator2.odt | Bin 0 -> 10646 bytes .../data/tdf108973_backgroundTextbox.docx | Bin 0 -> 10429 bytes .../data/tdf108973_foregroundTextbox.docx | Bin 0 -> 10478 bytes sw/qa/extras/ooxmlexport/data/tdf109063.docx | Bin 0 -> 13191 bytes sw/qa/extras/ooxmlexport/data/tdf109184.docx | Bin 0 -> 20720 bytes sw/qa/extras/ooxmlexport/data/tdf109306.docx | Bin 0 -> 1427 bytes .../data/tdf109310_endnoteStyleForMSO.docx | Bin 0 -> 5109 bytes sw/qa/extras/ooxmlexport/data/tdf111964.docx | Bin 0 -> 1481 bytes .../ooxmlexport/data/tdf112103_tablebgnofill.docx | Bin 0 -> 19239 bytes sw/qa/extras/ooxmlexport/data/tdf112118.docx | Bin 0 -> 11702 bytes sw/qa/extras/ooxmlexport/data/tdf112169.odt | Bin 0 -> 23366 bytes sw/qa/extras/ooxmlexport/data/tdf112287.docx | Bin 0 -> 12821 bytes .../data/tdf112312_AutoFitForLegacyShapes.odt | Bin 0 -> 11123 bytes .../data/tdf112352_nextPageColumns.docx | Bin 0 -> 14346 bytes .../ooxmlexport/data/tdf112446_frameStyle.docx | Bin 0 -> 18766 bytes sw/qa/extras/ooxmlexport/data/tdf112694.docx | Bin 0 -> 14741 bytes sw/qa/extras/ooxmlexport/data/tdf113183.docx | Bin 0 -> 17163 bytes sw/qa/extras/ooxmlexport/data/tdf113258.docx | Bin 0 -> 17327 bytes .../data/tdf113258_noBeforeAutospacing.docx | Bin 0 -> 16284 bytes sw/qa/extras/ooxmlexport/data/tdf113399.doc | Bin 0 -> 73728 bytes sw/qa/extras/ooxmlexport/data/tdf113547.docx | Bin 0 -> 14424 bytes .../data/tdf113608_runAwayNumbering.docx | Bin 0 -> 17300 bytes .../data/tdf113849_evenAndOddHeaders.odt | Bin 0 -> 24355 bytes sw/qa/extras/ooxmlexport/data/tdf114308.docx | Bin 0 -> 21487 bytes sw/qa/extras/ooxmlexport/data/tdf114703.docx | Bin 0 -> 26969 bytes sw/qa/extras/ooxmlexport/data/tdf114882.docx | Bin 0 -> 14888 bytes sw/qa/extras/ooxmlexport/data/tdf115030.docx | Bin 0 -> 14926 bytes sw/qa/extras/ooxmlexport/data/tdf115094v3.docx | Bin 0 -> 11652 bytes sw/qa/extras/ooxmlexport/data/tdf115212.docx | Bin 0 -> 11275 bytes sw/qa/extras/ooxmlexport/data/tdf115557.docx | Bin 0 -> 12284 bytes sw/qa/extras/ooxmlexport/data/tdf115719.docx | Bin 0 -> 18668 bytes sw/qa/extras/ooxmlexport/data/tdf115719b.docx | Bin 0 -> 19145 bytes sw/qa/extras/ooxmlexport/data/tdf115861.docx | Bin 0 -> 15035 bytes sw/qa/extras/ooxmlexport/data/tdf116084.docx | Bin 0 -> 18209 bytes sw/qa/extras/ooxmlexport/data/tdf116194.docx | Bin 0 -> 17227 bytes sw/qa/extras/ooxmlexport/data/tdf116371.odt | Bin 0 -> 13384 bytes sw/qa/extras/ooxmlexport/data/tdf116394.docx | Bin 0 -> 11537 bytes sw/qa/extras/ooxmlexport/data/tdf116410.docx | Bin 0 -> 49192 bytes .../extras/ooxmlexport/data/tdf116436_rowFill.odt | Bin 0 -> 10835 bytes sw/qa/extras/ooxmlexport/data/tdf116801.docx | Bin 0 -> 28554 bytes sw/qa/extras/ooxmlexport/data/tdf116883.docx | Bin 0 -> 10422 bytes sw/qa/extras/ooxmlexport/data/tdf116976.docx | Bin 0 -> 14983 bytes sw/qa/extras/ooxmlexport/data/tdf116985.docx | Bin 0 -> 13508 bytes sw/qa/extras/ooxmlexport/data/tdf117137.docx | Bin 0 -> 17888 bytes .../ooxmlexport/data/tdf117297_tableStyle.docx | Bin 0 -> 12279 bytes .../data/tdf117504_numberingIndent.docx | Bin 0 -> 15821 bytes sw/qa/extras/ooxmlexport/data/tdf117805.odt | Bin 0 -> 14897 bytes sw/qa/extras/ooxmlexport/data/tdf117988.docx | Bin 0 -> 10553 bytes sw/qa/extras/ooxmlexport/data/tdf118169.docx | Bin 0 -> 5650 bytes sw/qa/extras/ooxmlexport/data/tdf118242.odt | Bin 0 -> 30562 bytes .../data/tdf118361_RTLfootnoteSeparator.docx | Bin 0 -> 13551 bytes sw/qa/extras/ooxmlexport/data/tdf118393.odt | Bin 0 -> 14208 bytes .../ooxmlexport/data/tdf118521_marginsLR.docx | Bin 0 -> 11538 bytes sw/qa/extras/ooxmlexport/data/tdf118535.odt | Bin 0 -> 12032 bytes sw/qa/extras/ooxmlexport/data/tdf118682.fodt | 36 + sw/qa/extras/ooxmlexport/data/tdf118691.docx | Bin 0 -> 27096 bytes sw/qa/extras/ooxmlexport/data/tdf118701.docx | Bin 0 -> 21644 bytes sw/qa/extras/ooxmlexport/data/tdf118702.odt | Bin 0 -> 8620 bytes .../data/tdf118812_tableStyles-comprehensive.docx | Bin 0 -> 12382 bytes .../ooxmlexport/data/tdf118947_tableStyle.docx | Bin 0 -> 9461 bytes .../ooxmlexport/data/tdf118947_tableStyle2.docx | Bin 0 -> 9578 bytes sw/qa/extras/ooxmlexport/data/tdf119037.odt | Bin 0 -> 12291 bytes sw/qa/extras/ooxmlexport/data/tdf119054.docx | Bin 0 -> 18842 bytes sw/qa/extras/ooxmlexport/data/tdf119143.docx | Bin 0 -> 17052 bytes .../data/tdf119188_list_margin_in_cell.docx | Bin 0 -> 13663 bytes sw/qa/extras/ooxmlexport/data/tdf119201.docx | Bin 0 -> 24206 bytes .../data/tdf119760_positionCellBorder.docx | Bin 0 -> 13144 bytes .../data/tdf119760_tableInTablePosition.docx | Bin 0 -> 4698 bytes sw/qa/extras/ooxmlexport/data/tdf119800.docx | Bin 0 -> 14336 bytes sw/qa/extras/ooxmlexport/data/tdf119809.docx | Bin 0 -> 22211 bytes .../data/tdf119952_negativeMargins.docx | Bin 0 -> 23533 bytes .../data/tdf120224_textControlCrossRef.docx | Bin 0 -> 16356 bytes sw/qa/extras/ooxmlexport/data/tdf120315.docx | Bin 0 -> 12276 bytes sw/qa/extras/ooxmlexport/data/tdf120338.docx | Bin 0 -> 14898 bytes .../ooxmlexport/data/tdf120344_FontTypes.docx | Bin 0 -> 13217 bytes sw/qa/extras/ooxmlexport/data/tdf120394.docx | Bin 0 -> 11032 bytes .../data/tdf120412_400PercentSubscript.docx | Bin 0 -> 10691 bytes .../ooxmlexport/data/tdf120511_eatenSection.docx | Bin 0 -> 29319 bytes .../ooxmlexport/data/tdf120760_ZOrderInHeader.docx | Bin 0 -> 40418 bytes .../data/tdf120852_readOnlyProtection.docx | Bin 0 -> 7727 bytes .../data/tdf120852_readOnlyUnProtected.docx | Bin 0 -> 11446 bytes sw/qa/extras/ooxmlexport/data/tdf121045.docx | Bin 0 -> 28392 bytes sw/qa/extras/ooxmlexport/data/tdf121176.docx | Bin 0 -> 30973 bytes .../ooxmlexport/data/tdf121374_sectionHF.odt | Bin 0 -> 9719 bytes .../ooxmlexport/data/tdf121374_sectionHF2.doc | Bin 0 -> 127488 bytes sw/qa/extras/ooxmlexport/data/tdf121441.docx | Bin 0 -> 23346 bytes sw/qa/extras/ooxmlexport/data/tdf121456.docx | Bin 0 -> 5277 bytes .../ooxmlexport/data/tdf121456_tabsOffset.odt | Bin 0 -> 14208 bytes sw/qa/extras/ooxmlexport/data/tdf121597.odt | Bin 0 -> 10592 bytes sw/qa/extras/ooxmlexport/data/tdf121658.docx | Bin 0 -> 20859 bytes .../data/tdf121659_loseColumnBrNextToShape.docx | Bin 0 -> 23557 bytes sw/qa/extras/ooxmlexport/data/tdf121661.docx | Bin 0 -> 20885 bytes sw/qa/extras/ooxmlexport/data/tdf121663.docx | Bin 0 -> 21773 bytes .../data/tdf121665_back2backColumnBreaks.docx | Bin 0 -> 5127 bytes .../ooxmlexport/data/tdf121666_lostPage.docx | Bin 0 -> 20235 bytes .../ooxmlexport/data/tdf121669_equalColumns.docx | Bin 0 -> 20227 bytes .../data/tdf121670_columnsInSectionsOnly.docx | Bin 0 -> 11270 bytes sw/qa/extras/ooxmlexport/data/tdf121784.docx | Bin 0 -> 5937 bytes sw/qa/extras/ooxmlexport/data/tdf121867.odt | Bin 0 -> 7856 bytes .../ooxmlexport/data/tdf122186_input_list.odt | Bin 0 -> 8068 bytes .../data/tdf122201_editUnprotectedText.odt | Bin 0 -> 7104 bytes sw/qa/extras/ooxmlexport/data/tdf122342.docx | Bin 0 -> 12443 bytes sw/qa/extras/ooxmlexport/data/tdf122563.docx | Bin 0 -> 24895 bytes sw/qa/extras/ooxmlexport/data/tdf122594.docx | Bin 0 -> 23235 bytes sw/qa/extras/ooxmlexport/data/tdf122648.docx | Bin 0 -> 4767 bytes sw/qa/extras/ooxmlexport/data/tdf123054.docx | Bin 0 -> 29457 bytes sw/qa/extras/ooxmlexport/data/tdf123104.docx | Bin 0 -> 24314 bytes .../data/tdf123116_oversizedRowSplit.odt | Bin 0 -> 11843 bytes sw/qa/extras/ooxmlexport/data/tdf123243.docx | Bin 0 -> 11905 bytes .../data/tdf123262_textFootnoteSeparators.docx | Bin 0 -> 29044 bytes ...RelativeAnchorHeightFromTopMarginHasHeader.docx | Bin 0 -> 20882 bytes ...tRelativeAnchorHeightFromTopMarginNoHeader.docx | Bin 0 -> 14683 bytes .../ooxmlexport/data/tdf123346_ArrowMarker.docx | Bin 0 -> 12804 bytes .../data/tdf123351_UnderlineGroupSapeText.docx | Bin 0 -> 33000 bytes sw/qa/extras/ooxmlexport/data/tdf123354.fodt | 40 + sw/qa/extras/ooxmlexport/data/tdf123355.docx | Bin 0 -> 74156 bytes sw/qa/extras/ooxmlexport/data/tdf123356.fodt | 40 + sw/qa/extras/ooxmlexport/data/tdf123381.docx | Bin 0 -> 11895 bytes sw/qa/extras/ooxmlexport/data/tdf123382.docx | Bin 0 -> 17952 bytes sw/qa/extras/ooxmlexport/data/tdf123386.docx | Bin 0 -> 14928 bytes sw/qa/extras/ooxmlexport/data/tdf123388.docx | Bin 0 -> 19614 bytes sw/qa/extras/ooxmlexport/data/tdf123389.docx | Bin 0 -> 13649 bytes sw/qa/extras/ooxmlexport/data/tdf123390.fodt | 40 + sw/qa/extras/ooxmlexport/data/tdf123401.fodt | 36 + sw/qa/extras/ooxmlexport/data/tdf123435.docx | Bin 0 -> 27738 bytes sw/qa/extras/ooxmlexport/data/tdf123460.docx | Bin 0 -> 13060 bytes .../data/tdf123569_rotWriterImage_46deg.odt | Bin 0 -> 18450 bytes .../ooxmlexport/data/tdf123610_handle_upright.docx | Bin 0 -> 14711 bytes sw/qa/extras/ooxmlexport/data/tdf123621.docx | Bin 0 -> 14753 bytes sw/qa/extras/ooxmlexport/data/tdf123622.docx | Bin 0 -> 13441 bytes sw/qa/extras/ooxmlexport/data/tdf123627.docx | Bin 0 -> 12153 bytes sw/qa/extras/ooxmlexport/data/tdf123628.odt | Bin 0 -> 8410 bytes .../data/tdf123636_newlinePageBreak.docx | Bin 0 -> 10107 bytes .../data/tdf123636_newlinePageBreak2.docx | Bin 0 -> 15014 bytes .../data/tdf123636_newlinePageBreak3.docx | Bin 0 -> 10411 bytes .../data/tdf123636_newlinePageBreak4.docx | Bin 0 -> 10347 bytes sw/qa/extras/ooxmlexport/data/tdf123642.docx | Bin 0 -> 17814 bytes sw/qa/extras/ooxmlexport/data/tdf123705.docx | Bin 0 -> 49292 bytes sw/qa/extras/ooxmlexport/data/tdf123757.docx | Bin 0 -> 16781 bytes sw/qa/extras/ooxmlexport/data/tdf123873.docx | Bin 0 -> 6951 bytes .../ooxmlexport/data/tdf123912_protectedForm.odt | Bin 0 -> 9604 bytes sw/qa/extras/ooxmlexport/data/tdf124367.docx | Bin 0 -> 12180 bytes sw/qa/extras/ooxmlexport/data/tdf124384.docx | Bin 0 -> 37437 bytes .../data/tdf124399_SingleCellTableBorders.docx | Bin 0 -> 12183 bytes sw/qa/extras/ooxmlexport/data/tdf124491.docx | Bin 0 -> 12794 bytes sw/qa/extras/ooxmlexport/data/tdf124594.docx | Bin 0 -> 18592 bytes sw/qa/extras/ooxmlexport/data/tdf124600b.docx | Bin 0 -> 15959 bytes sw/qa/extras/ooxmlexport/data/tdf124604.docx | Bin 0 -> 35311 bytes .../ooxmlexport/data/tdf124637_sectionMargin.docx | Bin 0 -> 21535 bytes .../data/tdf124678_no_leading_paragraph.odt | Bin 0 -> 9122 bytes .../data/tdf124678_with_leading_paragraph.odt | Bin 0 -> 9164 bytes sw/qa/extras/ooxmlexport/data/tdf124986.docx | Bin 0 -> 12108 bytes sw/qa/extras/ooxmlexport/data/tdf125268.odt | Bin 0 -> 8432 bytes .../tdf125298_crossreflink_nonascii_charlimit.docx | Bin 0 -> 5194 bytes sw/qa/extras/ooxmlexport/data/tdf125324.docx | Bin 0 -> 14007 bytes sw/qa/extras/ooxmlexport/data/tdf125518.odt | Bin 0 -> 34438 bytes sw/qa/extras/ooxmlexport/data/tdf125546.docx | Bin 0 -> 20716 bytes sw/qa/extras/ooxmlexport/data/tdf125657.docx | Bin 0 -> 19731 bytes .../data/tdf125778_lostPageBreakTOX.docx | Bin 0 -> 18696 bytes sw/qa/extras/ooxmlexport/data/tdf125894.docx | Bin 0 -> 23870 bytes .../data/tdf125936_numberingSuperscript.docx | Bin 0 -> 25589 bytes sw/qa/extras/ooxmlexport/data/tdf126206.docx | Bin 0 -> 12509 bytes sw/qa/extras/ooxmlexport/data/tdf126245.docx | Bin 0 -> 19219 bytes sw/qa/extras/ooxmlexport/data/tdf126287.docx | Bin 0 -> 8701 bytes .../data/tdf126363_LineWidthRounding.docx | Bin 0 -> 9956 bytes sw/qa/extras/ooxmlexport/data/tdf126590.docx | Bin 0 -> 12046 bytes sw/qa/extras/ooxmlexport/data/tdf126723.docx | Bin 0 -> 18689 bytes sw/qa/extras/ooxmlexport/data/tdf126768.docx | Bin 0 -> 12242 bytes sw/qa/extras/ooxmlexport/data/tdf126792.odt | Bin 0 -> 8403 bytes .../data/tdf126795_TabsRelativeToIndent0.odt | Bin 0 -> 16401 bytes .../data/tdf126795_TabsRelativeToIndent1.odt | Bin 0 -> 16424 bytes .../ooxmlexport/data/tdf126994_lostPageBreak.docx | Bin 0 -> 17107 bytes sw/qa/extras/ooxmlexport/data/tdf127085.docx | Bin 0 -> 34263 bytes sw/qa/extras/ooxmlexport/data/tdf127116.odt | Bin 0 -> 8573 bytes .../ooxmlexport/data/tdf127316_autoEscapement.odt | Bin 0 -> 11475 bytes sw/qa/extras/ooxmlexport/data/tdf127339.docx | Bin 0 -> 13057 bytes sw/qa/extras/ooxmlexport/data/tdf127362.odt | Bin 0 -> 9702 bytes sw/qa/extras/ooxmlexport/data/tdf127579.odt | Bin 0 -> 8551 bytes sw/qa/extras/ooxmlexport/data/tdf127605.odt | Bin 0 -> 9958 bytes sw/qa/extras/ooxmlexport/data/tdf127741.docx | Bin 0 -> 19275 bytes sw/qa/extras/ooxmlexport/data/tdf127814.docx | Bin 0 -> 29713 bytes sw/qa/extras/ooxmlexport/data/tdf127864.docx | Bin 0 -> 4726 bytes sw/qa/extras/ooxmlexport/data/tdf127925.odt | Bin 0 -> 8677 bytes sw/qa/extras/ooxmlexport/data/tdf128156.docx | Bin 0 -> 42256 bytes sw/qa/extras/ooxmlexport/data/tdf128207.docx | Bin 0 -> 50324 bytes sw/qa/extras/ooxmlexport/data/tdf128245.docx | Bin 0 -> 8276 bytes sw/qa/extras/ooxmlexport/data/tdf128290.odt | Bin 0 -> 9782 bytes sw/qa/extras/ooxmlexport/data/tdf128304.odt | Bin 0 -> 15138 bytes sw/qa/extras/ooxmlexport/data/tdf128646.docx | Bin 0 -> 24912 bytes sw/qa/extras/ooxmlexport/data/tdf128752.docx | Bin 0 -> 13621 bytes sw/qa/extras/ooxmlexport/data/tdf128820.fodt | 16 + sw/qa/extras/ooxmlexport/data/tdf128889.fodt | 15 + sw/qa/extras/ooxmlexport/data/tdf128913.docx | Bin 0 -> 10392 bytes .../ooxmlexport/data/tdf129242_InsideBorders.docx | Bin 0 -> 12222 bytes sw/qa/extras/ooxmlexport/data/tdf129353.docx | Bin 0 -> 4420 bytes .../ooxmlexport/data/tdf129442_RightBorder.docx | Bin 0 -> 12167 bytes .../ooxmlexport/data/tdf129450_BottomBorder.docx | Bin 0 -> 12195 bytes .../ooxmlexport/data/tdf129452_BottomBorders.docx | Bin 0 -> 11237 bytes .../ooxmlexport/data/tdf129452_excessBorder.docx | Bin 0 -> 11115 bytes .../data/tdf129522_removeShadowStyle.odt | Bin 0 -> 14253 bytes sw/qa/extras/ooxmlexport/data/tdf129525.rtf | 262 ++ .../ooxmlexport/data/tdf129575-directAfter.docx | Bin 0 -> 18625 bytes .../ooxmlexport/data/tdf129575-directBefore.docx | Bin 0 -> 19246 bytes .../ooxmlexport/data/tdf129575-docDefault.docx | Bin 0 -> 38088 bytes .../ooxmlexport/data/tdf129575-styleAfter.docx | Bin 0 -> 18620 bytes sw/qa/extras/ooxmlexport/data/tdf129582.docx | Bin 0 -> 129975 bytes sw/qa/extras/ooxmlexport/data/tdf129888dml.docx | Bin 0 -> 17003 bytes sw/qa/extras/ooxmlexport/data/tdf129888vml.docx | Bin 0 -> 17979 bytes sw/qa/extras/ooxmlexport/data/tdf130120.docx | Bin 0 -> 23067 bytes sw/qa/extras/ooxmlexport/data/tdf130494.docx | Bin 0 -> 17455 bytes .../data/tdf130610_bold_in_2_styles.ott | Bin 0 -> 10062 bytes sw/qa/extras/ooxmlexport/data/tdf130690.docx | Bin 0 -> 13323 bytes sw/qa/extras/ooxmlexport/data/tdf130814.docx | Bin 0 -> 18008 bytes sw/qa/extras/ooxmlexport/data/tdf130907.docx | Bin 0 -> 12201 bytes sw/qa/extras/ooxmlexport/data/tdf131203.docx | Bin 0 -> 3890 bytes sw/qa/extras/ooxmlexport/data/tdf131258.docx | Bin 0 -> 18939 bytes sw/qa/extras/ooxmlexport/data/tdf131260.docx | Bin 0 -> 14773 bytes sw/qa/extras/ooxmlexport/data/tdf131420.docx | Bin 0 -> 11981 bytes sw/qa/extras/ooxmlexport/data/tdf131537.odt | Bin 0 -> 15318 bytes sw/qa/extras/ooxmlexport/data/tdf131539.odt | Bin 0 -> 35907 bytes sw/qa/extras/ooxmlexport/data/tdf131540.odt | Bin 0 -> 36613 bytes .../data/tdf131561_necessaryBorder.docx | Bin 0 -> 9385 bytes sw/qa/extras/ooxmlexport/data/tdf131594.docx | Bin 0 -> 17358 bytes .../data/tdf131775_SpacingGroupShapeText.docx | Bin 0 -> 16290 bytes .../data/tdf131776_StrikeoutGroupShapeText.docx | Bin 0 -> 42520 bytes sw/qa/extras/ooxmlexport/data/tdf131801.docx | Bin 0 -> 12067 bytes .../data/tdf131922_LanguageInGroupShape.docx | Bin 0 -> 18178 bytes .../extras/ooxmlexport/data/tdf132149_pgBreak.odt | Bin 0 -> 14309 bytes .../extras/ooxmlexport/data/tdf132149_pgBreak2.odt | Bin 0 -> 17550 bytes .../extras/ooxmlexport/data/tdf132149_pgBreakB.odt | Bin 0 -> 14621 bytes sw/qa/extras/ooxmlexport/data/tdf132185.docx | Bin 0 -> 2183 bytes sw/qa/extras/ooxmlexport/data/tdf132271.docx | Bin 0 -> 12861 bytes sw/qa/extras/ooxmlexport/data/tdf132305.docx | Bin 0 -> 13398 bytes .../ooxmlexport/data/tdf132475_printField.docx | Bin 0 -> 11229 bytes sw/qa/extras/ooxmlexport/data/tdf132483.docx | Bin 0 -> 21183 bytes .../tdf132491_UnderlineColorGroupedShapes.docx | Bin 0 -> 16784 bytes sw/qa/extras/ooxmlexport/data/tdf132514.docx | Bin 0 -> 16787 bytes sw/qa/extras/ooxmlexport/data/tdf132752.docx | Bin 0 -> 26741 bytes sw/qa/extras/ooxmlexport/data/tdf132754.docx | Bin 0 -> 13249 bytes sw/qa/extras/ooxmlexport/data/tdf132766.docx | Bin 0 -> 5241 bytes sw/qa/extras/ooxmlexport/data/tdf132802.docx | Bin 0 -> 12960 bytes sw/qa/extras/ooxmlexport/data/tdf132807.docx | Bin 0 -> 13154 bytes .../ooxmlexport/data/tdf132898_extraBorder.docx | Bin 0 -> 11252 bytes .../ooxmlexport/data/tdf132898_missingBorder.docx | Bin 0 -> 25304 bytes ...2976_testRelativeAnchorWidthFromLeftMargin.docx | Bin 0 -> 14864 bytes .../data/tdf133000_numStyleFormatting.docx | Bin 0 -> 13761 bytes sw/qa/extras/ooxmlexport/data/tdf133030.docx | Bin 0 -> 12451 bytes sw/qa/extras/ooxmlexport/data/tdf133035.docx | Bin 0 -> 16259 bytes ...45_TestShapeAlignmentRelativeFromTopMargin.docx | Bin 0 -> 19805 bytes sw/qa/extras/ooxmlexport/data/tdf133052.docx | Bin 0 -> 13891 bytes sw/qa/extras/ooxmlexport/data/tdf133065.odt | Bin 0 -> 64161 bytes ...ativeAnchorHeightFromBottomMarginHasFooter.docx | Bin 0 -> 19378 bytes ...lativeAnchorHeightFromBottomMarginNoFooter.docx | Bin 0 -> 14632 bytes sw/qa/extras/ooxmlexport/data/tdf133163.fodt | 36 + .../ooxmlexport/data/tdf133334_followPgStyle.odt | Bin 0 -> 19219 bytes .../ooxmlexport/data/tdf133370_columnBreak.odt | Bin 0 -> 18388 bytes sw/qa/extras/ooxmlexport/data/tdf133455.docx | Bin 0 -> 15724 bytes sw/qa/extras/ooxmlexport/data/tdf133457.docx | Bin 0 -> 4525 bytes sw/qa/extras/ooxmlexport/data/tdf133473.docx | Bin 0 -> 83030 bytes sw/qa/extras/ooxmlexport/data/tdf133605.docx | Bin 0 -> 21862 bytes sw/qa/extras/ooxmlexport/data/tdf133605_2.docx | Bin 0 -> 21978 bytes sw/qa/extras/ooxmlexport/data/tdf133643.doc | Bin 0 -> 27136 bytes sw/qa/extras/ooxmlexport/data/tdf133647.docx | Bin 0 -> 14536 bytes ...670_testRelativeAnchorWidthFromRightMargin.docx | Bin 0 -> 14953 bytes sw/qa/extras/ooxmlexport/data/tdf133701.docx | Bin 0 -> 12392 bytes sw/qa/extras/ooxmlexport/data/tdf133702.docx | Bin 0 -> 12138 bytes sw/qa/extras/ooxmlexport/data/tdf133771.odt | Bin 0 -> 12738 bytes ...RelativeAnchorWidthFromInsideOutsideMargin.docx | Bin 0 -> 10536 bytes sw/qa/extras/ooxmlexport/data/tdf133924.docx | Bin 0 -> 12612 bytes sw/qa/extras/ooxmlexport/data/tdf134063.docx | Bin 0 -> 19854 bytes sw/qa/extras/ooxmlexport/data/tdf134260.docx | Bin 0 -> 14233 bytes .../ooxmlexport/data/tdf134569_nestedTable.docx | Bin 0 -> 17060 bytes sw/qa/extras/ooxmlexport/data/tdf134606.docx | Bin 0 -> 21603 bytes .../ooxmlexport/data/tdf134609_gridAfter.docx | Bin 0 -> 11574 bytes sw/qa/extras/ooxmlexport/data/tdf134618.doc | Bin 0 -> 23552 bytes .../ooxmlexport/data/tdf134619_numberingProps.doc | Bin 0 -> 75264 bytes sw/qa/extras/ooxmlexport/data/tdf134648.docx | Bin 0 -> 15198 bytes .../ooxmlexport/data/tdf134649_pageBreak.fodt | 86 + sw/qa/extras/ooxmlexport/data/tdf134784.docx | Bin 0 -> 28416 bytes .../ooxmlexport/data/tdf134951_duplicates.odt | Bin 0 -> 59225 bytes .../data/tdf135047_ImageSpaceSettings.fodt | 42 + .../data/tdf135164_cancelledNumbering.docx | Bin 0 -> 19962 bytes sw/qa/extras/ooxmlexport/data/tdf135187.docx | Bin 0 -> 19696 bytes .../ooxmlexport/data/tdf135216_evenOddFooter.odt | Bin 0 -> 12457 bytes .../ooxmlexport/data/tdf135329_lostImage.odt | Bin 0 -> 29541 bytes .../data/tdf135343_columnSectionBreak_c12v3.docx | Bin 0 -> 11087 bytes .../data/tdf135343_columnSectionBreak_c14.docx | Bin 0 -> 11891 bytes .../data/tdf135343_columnSectionBreak_c14v2.docx | Bin 0 -> 11298 bytes .../data/tdf135343_columnSectionBreak_c15.docx | Bin 0 -> 11890 bytes .../ooxmlexport/data/tdf135595_HFtableWrap.odt | Bin 0 -> 97647 bytes .../data/tdf135595_HFtableWrap_c12.docx | Bin 0 -> 74051 bytes sw/qa/extras/ooxmlexport/data/tdf135653.docx | Bin 0 -> 15117 bytes sw/qa/extras/ooxmlexport/data/tdf135655.odt | Bin 0 -> 18707 bytes sw/qa/extras/ooxmlexport/data/tdf135660.docx | Bin 0 -> 20134 bytes sw/qa/extras/ooxmlexport/data/tdf135665.docx | Bin 0 -> 25099 bytes sw/qa/extras/ooxmlexport/data/tdf135667.odt | Bin 0 -> 16180 bytes .../data/tdf135774_numberingCRProps.docx | Bin 0 -> 9989 bytes .../data/tdf135774_numberingShading.docx | Bin 0 -> 5435 bytes sw/qa/extras/ooxmlexport/data/tdf135906.docx | Bin 0 -> 35926 bytes sw/qa/extras/ooxmlexport/data/tdf135923-min.docx | Bin 0 -> 16777 bytes ...35943_shapeWithText_LayoutInCell0_compat15.docx | Bin 0 -> 16850 bytes .../data/tdf135949_anchoredBeforeBreak.docx | Bin 0 -> 49510 bytes sw/qa/extras/ooxmlexport/data/tdf135973.odt | Bin 0 -> 14301 bytes sw/qa/extras/ooxmlexport/data/tdf136059.odt | Bin 0 -> 17964 bytes .../data/tdf136386_WrapPolygonCurve.odt | Bin 0 -> 15739 bytes .../data/tdf136386_WrapPolygonLineShape.odt | Bin 0 -> 15715 bytes sw/qa/extras/ooxmlexport/data/tdf136404.fodt | 65 + .../data/tdf136441_commentInFootnote.odt | Bin 0 -> 11777 bytes .../ooxmlexport/data/tdf136589_paraHadField.docx | Bin 0 -> 39738 bytes sw/qa/extras/ooxmlexport/data/tdf136617.docx | Bin 0 -> 20185 bytes sw/qa/extras/ooxmlexport/data/tdf136667.docx | Bin 0 -> 12729 bytes sw/qa/extras/ooxmlexport/data/tdf136814.odt | Bin 0 -> 8249 bytes sw/qa/extras/ooxmlexport/data/tdf136841.docx | Bin 0 -> 15697 bytes sw/qa/extras/ooxmlexport/data/tdf136850.docx | Bin 0 -> 31943 bytes .../data/tdf136929_framesOfParagraph.odt | Bin 0 -> 179339 bytes .../ooxmlexport/data/tdf136952_pgBreak3B.odt | Bin 0 -> 14321 bytes sw/qa/extras/ooxmlexport/data/tdf137295.doc | Bin 0 -> 26624 bytes sw/qa/extras/ooxmlexport/data/tdf137466.docx | Bin 0 -> 20243 bytes sw/qa/extras/ooxmlexport/data/tdf137593.docx | Bin 0 -> 15697 bytes .../data/tdf137641_RelativeFromTopMargin.docx | Bin 0 -> 19650 bytes .../data/tdf137642_Vertical_Alignment_toppage.docx | Bin 0 -> 13163 bytes sw/qa/extras/ooxmlexport/data/tdf137655.docx | Bin 0 -> 33098 bytes .../data/tdf137678_testVmlLineShapeMirroredY.docx | Bin 0 -> 13192 bytes .../data/tdf137683_charHighlightTests.docx | Bin 0 -> 9877 bytes sw/qa/extras/ooxmlexport/data/tdf137742.docx | Bin 0 -> 6925 bytes .../data/tdf137765_testVmlLineShapeRotated.docx | Bin 0 -> 13280 bytes .../ooxmlexport/data/tdf137850_compat14ZOrder.docx | Bin 0 -> 24821 bytes .../ooxmlexport/data/tdf137850_compat15ZOrder.docx | Bin 0 -> 24816 bytes .../data/tdf138345_charStyleHighlight.docx | Bin 0 -> 4434 bytes .../data/tdf138345_numberingHighlight.docx | Bin 0 -> 5752 bytes sw/qa/extras/ooxmlexport/data/tdf138374.odt | Bin 0 -> 10053 bytes sw/qa/extras/ooxmlexport/data/tdf138612.docx | Bin 0 -> 36179 bytes sw/qa/extras/ooxmlexport/data/tdf138739.docx | Bin 0 -> 16780 bytes sw/qa/extras/ooxmlexport/data/tdf138771.docx | Bin 0 -> 26757 bytes sw/qa/extras/ooxmlexport/data/tdf138780.odt | Bin 0 -> 9383 bytes .../ooxmlexport/data/tdf138892_noNumbering.docx | Bin 0 -> 18468 bytes sw/qa/extras/ooxmlexport/data/tdf138899.docx | Bin 0 -> 22715 bytes sw/qa/extras/ooxmlexport/data/tdf139128.odt | Bin 0 -> 8645 bytes sw/qa/extras/ooxmlexport/data/tdf139549.docx | Bin 0 -> 18155 bytes sw/qa/extras/ooxmlexport/data/tdf139580.odt | Bin 0 -> 17378 bytes sw/qa/extras/ooxmlexport/data/tdf139948.docx | Bin 0 -> 12765 bytes sw/qa/extras/ooxmlexport/data/tdf140137.docx | Bin 0 -> 28792 bytes .../ooxmlexport/data/tdf140182_extraPagebreak.docx | Bin 0 -> 34729 bytes .../ooxmlexport/data/tdf140336_paraNoneShading.odt | Bin 0 -> 10529 bytes .../data/tdf140572_docDefault_superscript.docx | Bin 0 -> 16387 bytes sw/qa/extras/ooxmlexport/data/tdf140597.docx | Bin 0 -> 13966 bytes sw/qa/extras/ooxmlexport/data/tdf140668.docx | Bin 0 -> 14629 bytes sw/qa/extras/ooxmlexport/data/tdf141172.docx | Bin 0 -> 16286 bytes .../ooxmlexport/data/tdf141173_missingFrames.rtf | 61 + .../data/tdf141231_arabicHebrewNumbering.docx | Bin 0 -> 20367 bytes sw/qa/extras/ooxmlexport/data/tdf141548.docx | Bin 0 -> 4675 bytes sw/qa/extras/ooxmlexport/data/tdf141550.docx | Bin 0 -> 18735 bytes sw/qa/extras/ooxmlexport/data/tdf141660.docx | Bin 0 -> 35150 bytes .../data/tdf141966_chapterNumberTortureTest.docx | Bin 0 -> 6323 bytes .../data/tdf141966_chapterNumbering.docx | Bin 0 -> 6846 bytes .../ooxmlexport/data/tdf142361ShadowDirection.odt | Bin 0 -> 9135 bytes sw/qa/extras/ooxmlexport/data/tdf142387.docx | Bin 0 -> 13268 bytes .../data/tdf142404_tabOverMarginC15.docx | Bin 0 -> 9218 bytes .../data/tdf142404_tabOverSpacingC15.odt | Bin 0 -> 16596 bytes .../ooxmlexport/data/tdf142404_tabSpacing.docx | Bin 0 -> 9287 bytes sw/qa/extras/ooxmlexport/data/tdf142407.docx | Bin 0 -> 13527 bytes .../data/tdf142433_WrapPolygonCustomShape.odt | Bin 0 -> 13306 bytes sw/qa/extras/ooxmlexport/data/tdf142464_ampm.docx | Bin 0 -> 15171 bytes .../ooxmlexport/data/tdf142486_FrameShadow.odt | Bin 0 -> 14129 bytes .../data/tdf142486_LeftMarginShadowLeft.docx | Bin 0 -> 21616 bytes .../data/tdf142542_cancelledAutospacing.docx | Bin 0 -> 23239 bytes .../data/tdf142693_hugePaperSizeImport.docx | Bin 0 -> 4371 bytes sw/qa/extras/ooxmlexport/data/tdf142700.docx | Bin 0 -> 18373 bytes sw/qa/extras/ooxmlexport/data/tdf143175.docx | Bin 0 -> 4651 bytes .../data/tdf143219ContourWrap_glow_rotate.docx | Bin 0 -> 27622 bytes .../data/tdf143219ContourWrap_stroke_shadow.docx | Bin 0 -> 20398 bytes .../tdf143384_tableInFoot_negativeMargins.docx | Bin 0 -> 58566 bytes sw/qa/extras/ooxmlexport/data/tdf143399.docx | Bin 0 -> 10556 bytes .../data/tdf143432_Frame_WrapTextMode.odt | Bin 0 -> 14147 bytes .../data/tdf143583_emptyParaAtEndOfFootnote.docx | Bin 0 -> 8777 bytes .../data/tdf143692_outlineLevelTortureTest.docx | Bin 0 -> 20964 bytes .../data/tdf143860_NonPrimitiveCustomShape.odt | Bin 0 -> 9408 bytes sw/qa/extras/ooxmlexport/data/tdf144563.docx | Bin 0 -> 17488 bytes sw/qa/extras/ooxmlexport/data/tdf144668.odt | Bin 0 -> 8913 bytes sw/qa/extras/ooxmlexport/data/tdf146171.docx | Bin 0 -> 11710 bytes sw/qa/extras/ooxmlexport/data/tdf146346.docx | Bin 0 -> 20285 bytes sw/qa/extras/ooxmlexport/data/tdf146491.odt | Bin 0 -> 31278 bytes sw/qa/extras/ooxmlexport/data/tdf146515.odt | Bin 0 -> 12991 bytes sw/qa/extras/ooxmlexport/data/tdf146802.docx | Bin 0 -> 72360 bytes sw/qa/extras/ooxmlexport/data/tdf146851_1.docx | Bin 0 -> 12378 bytes sw/qa/extras/ooxmlexport/data/tdf146851_2.docx | Bin 0 -> 14171 bytes sw/qa/extras/ooxmlexport/data/tdf146955.odt | Bin 0 -> 77349 bytes .../ooxmlexport/data/tdf147115_defaultStyle.docx | Bin 0 -> 12060 bytes sw/qa/extras/ooxmlexport/data/tdf147724.docx | Bin 0 -> 9928 bytes .../ooxmlexport/data/tdf147861_customField.docx | Bin 0 -> 6473 bytes sw/qa/extras/ooxmlexport/data/tdf147892.fodt | 25 + .../data/tdf147978_enhancedPath_commandABVW.odt | Bin 0 -> 11581 bytes sw/qa/extras/ooxmlexport/data/tdf148052.docx | Bin 0 -> 17854 bytes sw/qa/extras/ooxmlexport/data/tdf148111.docx | Bin 0 -> 18731 bytes sw/qa/extras/ooxmlexport/data/tdf148132.docx | Bin 0 -> 3702 bytes .../data/tdf148273_sectionBulletFormatLeak.docx | Bin 0 -> 15161 bytes sw/qa/extras/ooxmlexport/data/tdf148360.docx | Bin 0 -> 3574 bytes sw/qa/extras/ooxmlexport/data/tdf148361.docx | Bin 0 -> 10663 bytes .../ooxmlexport/data/tdf148380_createField.docx | Bin 0 -> 12312 bytes .../ooxmlexport/data/tdf148380_fldLocked.docx | Bin 0 -> 12547 bytes .../ooxmlexport/data/tdf148380_modifiedField.docx | Bin 0 -> 7267 bytes .../ooxmlexport/data/tdf148380_printField.docx | Bin 0 -> 9399 bytes .../ooxmlexport/data/tdf148380_usernameField.docx | Bin 0 -> 16239 bytes sw/qa/extras/ooxmlexport/data/tdf148455_1.docx | Bin 0 -> 3038 bytes sw/qa/extras/ooxmlexport/data/tdf148455_2.docx | Bin 0 -> 3022 bytes sw/qa/extras/ooxmlexport/data/tdf148494.docx | Bin 0 -> 11605 bytes sw/qa/extras/ooxmlexport/data/tdf148720.odt | Bin 0 -> 11848 bytes sw/qa/extras/ooxmlexport/data/tdf149089.docx | Bin 0 -> 100716 bytes sw/qa/extras/ooxmlexport/data/tdf149198.docx | Bin 0 -> 3018 bytes sw/qa/extras/ooxmlexport/data/tdf149200.docx | Bin 0 -> 2880 bytes sw/qa/extras/ooxmlexport/data/tdf149313.docx | Bin 0 -> 2106 bytes sw/qa/extras/ooxmlexport/data/tdf149388.docx | Bin 0 -> 20546 bytes sw/qa/extras/ooxmlexport/data/tdf149388_fly.docx | Bin 0 -> 20251 bytes sw/qa/extras/ooxmlexport/data/tdf149546.docx | Bin 0 -> 23264 bytes sw/qa/extras/ooxmlexport/data/tdf149708.docx | Bin 0 -> 5633 bytes sw/qa/extras/ooxmlexport/data/tdf149711.docx | Bin 0 -> 13619 bytes sw/qa/extras/ooxmlexport/data/tdf150166.docx | Bin 0 -> 15751 bytes .../ooxmlexport/data/tdf150966_regularInset.docx | Bin 0 -> 17569 bytes .../ooxmlexport/data/tdf152200-field+textbox.docx | Bin 0 -> 15009 bytes sw/qa/extras/ooxmlexport/data/tdf152203.docx | Bin 0 -> 7778 bytes sw/qa/extras/ooxmlexport/data/tdf152206.docx | Bin 0 -> 7803 bytes sw/qa/extras/ooxmlexport/data/tdf153255.docx | Bin 0 -> 14233 bytes sw/qa/extras/ooxmlexport/data/tdf153891.docx | Bin 0 -> 24988 bytes sw/qa/extras/ooxmlexport/data/tdf154481.docx | Bin 0 -> 46878 bytes .../data/tdf36117_verticalAdjustment.docx | Bin 0 -> 13309 bytes .../data/tdf37153_considerWrapOnObjPos.docx | Bin 0 -> 8960 bytes .../data/tdf38778_properties_in_run_for_field.doc | Bin 0 -> 25600 bytes .../data/tdf41466_testVmlShapeWithTextbox.docx | Bin 0 -> 21651 bytes .../data/tdf41542_borderlessPadding.odt | Bin 0 -> 15669 bytes .../ooxmlexport/data/tdf41542_imagePadding.odt | Bin 0 -> 17926 bytes sw/qa/extras/ooxmlexport/data/tdf44278.docx | Bin 0 -> 14451 bytes .../data/tdf44832_section_new_header.odt | Bin 0 -> 19830 bytes sw/qa/extras/ooxmlexport/data/tdf44986.docx | Bin 0 -> 14593 bytes .../ooxmlexport/data/tdf46938_clearTabStop.docx | Bin 0 -> 10264 bytes .../tdf46940_dontEquallyDistributeColumns.docx | Bin 0 -> 8068 bytes sw/qa/extras/ooxmlexport/data/tdf48569.odt | Bin 0 -> 13858 bytes sw/qa/extras/ooxmlexport/data/tdf49073.docx | Bin 0 -> 17584 bytes .../data/tdf53856_conflictingStyle.docx | Bin 0 -> 16157 bytes .../ooxmlexport/data/tdf55427_footnote2endnote.odt | Bin 0 -> 13291 bytes sw/qa/extras/ooxmlexport/data/tdf57155.docx | Bin 0 -> 27287 bytes .../ooxmlexport/data/tdf57589_hashColor.docx | Bin 0 -> 11515 bytes .../data/tdf58944-repeating-table-header.docx | Bin 0 -> 16640 bytes sw/qa/extras/ooxmlexport/data/tdf59274.docx | Bin 0 -> 5167 bytes sw/qa/extras/ooxmlexport/data/tdf59699.docx | Bin 0 -> 13232 bytes .../ooxmlexport/data/tdf63561_clearTabs.docx | Bin 0 -> 4499 bytes .../ooxmlexport/data/tdf63561_clearTabs2.docx | Bin 0 -> 11915 bytes sw/qa/extras/ooxmlexport/data/tdf64264.docx | Bin 0 -> 13501 bytes .../data/tdf64372_continuousBreaks.docx | Bin 0 -> 11735 bytes sw/qa/extras/ooxmlexport/data/tdf64531.docx | Bin 0 -> 13683 bytes sw/qa/extras/ooxmlexport/data/tdf65955.odt | Bin 0 -> 8827 bytes sw/qa/extras/ooxmlexport/data/tdf65955_2.odt | Bin 0 -> 8898 bytes sw/qa/extras/ooxmlexport/data/tdf66039.docx | Bin 0 -> 23717 bytes .../ooxmlexport/data/tdf66398_permissions.docx | Bin 0 -> 10420 bytes sw/qa/extras/ooxmlexport/data/tdf66401.docx | Bin 0 -> 16369 bytes sw/qa/extras/ooxmlexport/data/tdf66496.docx | Bin 0 -> 21752 bytes sw/qa/extras/ooxmlexport/data/tdf67207.docx | Bin 0 -> 5186 bytes sw/qa/extras/ooxmlexport/data/tdf69635.docx | Bin 0 -> 6042 bytes sw/qa/extras/ooxmlexport/data/tdf70234.docx | Bin 0 -> 12301 bytes sw/qa/extras/ooxmlexport/data/tdf73499.docx | Bin 0 -> 16470 bytes sw/qa/extras/ooxmlexport/data/tdf73547-dash.docx | Bin 0 -> 7308 bytes .../data/tdf76683_negativeTwipsMeasure.docx | Bin 0 -> 12051 bytes .../ooxmlexport/data/tdf77219_backgroundShape.docx | Bin 0 -> 10550 bytes .../ooxmlexport/data/tdf77219_foregroundShape.docx | Bin 0 -> 10554 bytes .../data/tdf77236_MissingSolidFill.docx | Bin 0 -> 21999 bytes sw/qa/extras/ooxmlexport/data/tdf77417.docx | Bin 0 -> 57079 bytes sw/qa/extras/ooxmlexport/data/tdf77796.docx | Bin 0 -> 60288 bytes sw/qa/extras/ooxmlexport/data/tdf78352.docx | Bin 0 -> 15491 bytes .../data/tdf78657_picture_hyperlink.docx | Bin 0 -> 21039 bytes sw/qa/extras/ooxmlexport/data/tdf78749.docx | Bin 0 -> 18316 bytes sw/qa/extras/ooxmlexport/data/tdf78902.docx | Bin 0 -> 30230 bytes .../ooxmlexport/data/tdf79272_strictDxa.docx | Bin 0 -> 12279 bytes sw/qa/extras/ooxmlexport/data/tdf79329.docx | Bin 0 -> 21212 bytes .../data/tdf79435_legacyInputFields.doc | Bin 0 -> 13312 bytes sw/qa/extras/ooxmlexport/data/tdf79639.docx | Bin 0 -> 18409 bytes .../ooxmlexport/data/tdf80526_word_wrap.docx | Bin 0 -> 15114 bytes sw/qa/extras/ooxmlexport/data/tdf81100.docx | Bin 0 -> 29760 bytes sw/qa/extras/ooxmlexport/data/tdf81345.docx | Bin 0 -> 221506 bytes sw/qa/extras/ooxmlexport/data/tdf81507.docx | Bin 0 -> 20183 bytes sw/qa/extras/ooxmlexport/data/tdf81567.odt | Bin 0 -> 10892 bytes .../data/tdf82065_Ind_start_strict.docx | Bin 0 -> 12533 bytes .../ooxmlexport/data/tdf82173_endnoteStyle.docx | Bin 0 -> 14321 bytes .../ooxmlexport/data/tdf82173_footnoteStyle.docx | Bin 0 -> 14012 bytes .../data/tdf82175_noStyleInheritance.docx | Bin 0 -> 5432 bytes .../data/tdf82177_insideCellBorders.docx | Bin 0 -> 7885 bytes .../data/tdf82177_outsideCellBorders.docx | Bin 0 -> 8990 bytes .../ooxmlexport/data/tdf82177_tblBorders.docx | Bin 0 -> 9673 bytes sw/qa/extras/ooxmlexport/data/tdf8255.docx | Bin 0 -> 27607 bytes sw/qa/extras/ooxmlexport/data/tdf83227.docx | Bin 0 -> 14647 bytes sw/qa/extras/ooxmlexport/data/tdf83300.docx | Bin 0 -> 9948 bytes sw/qa/extras/ooxmlexport/data/tdf83309.docx | Bin 0 -> 112363 bytes sw/qa/extras/ooxmlexport/data/tdf84678.docx | Bin 0 -> 17834 bytes sw/qa/extras/ooxmlexport/data/tdf85161.docx | Bin 0 -> 15730 bytes sw/qa/extras/ooxmlexport/data/tdf86374.docx | Bin 0 -> 13194 bytes sw/qa/extras/ooxmlexport/data/tdf86926_A3.docx | Bin 0 -> 5465 bytes .../ooxmlexport/data/tdf87348_linkedTextboxes.docx | Bin 0 -> 18697 bytes sw/qa/extras/ooxmlexport/data/tdf87460.docx | Bin 0 -> 17343 bytes .../ooxmlexport/data/tdf87569_drawingml.docx | Bin 0 -> 14935 bytes sw/qa/extras/ooxmlexport/data/tdf87569_vml.docx | Bin 0 -> 50503 bytes sw/qa/extras/ooxmlexport/data/tdf87924.docx | Bin 0 -> 15925 bytes sw/qa/extras/ooxmlexport/data/tdf88496.docx | Bin 0 -> 25175 bytes sw/qa/extras/ooxmlexport/data/tdf88583.odt | Bin 0 -> 8471 bytes sw/qa/extras/ooxmlexport/data/tdf89165.docx | Bin 0 -> 89495 bytes .../tdf89377_tableWithBreakBeforeParaStyle.docx | Bin 0 -> 11507 bytes sw/qa/extras/ooxmlexport/data/tdf89702.docx | Bin 0 -> 13147 bytes sw/qa/extras/ooxmlexport/data/tdf89774.fodt | 11 + sw/qa/extras/ooxmlexport/data/tdf89791.docx | Bin 0 -> 3989 bytes sw/qa/extras/ooxmlexport/data/tdf89890.docx | Bin 0 -> 41925 bytes sw/qa/extras/ooxmlexport/data/tdf89991.docx | Bin 0 -> 5543 bytes sw/qa/extras/ooxmlexport/data/tdf90153.docx | Bin 0 -> 4856 bytes sw/qa/extras/ooxmlexport/data/tdf90611.docx | Bin 0 -> 14706 bytes sw/qa/extras/ooxmlexport/data/tdf90681-1.odt | Bin 0 -> 13089 bytes sw/qa/extras/ooxmlexport/data/tdf90681-2.odt | Bin 0 -> 16590 bytes .../data/tdf90697_complexBreaksHeaders.docx | Bin 0 -> 42783 bytes sw/qa/extras/ooxmlexport/data/tdf90789-2.docx | Bin 0 -> 12372 bytes sw/qa/extras/ooxmlexport/data/tdf90789.docx | Bin 0 -> 12023 bytes sw/qa/extras/ooxmlexport/data/tdf90810short.docx | Bin 0 -> 22286 bytes .../extras/ooxmlexport/data/tdf90906_colAuto.docx | Bin 0 -> 37477 bytes .../extras/ooxmlexport/data/tdf90906_colAutoB.docx | Bin 0 -> 9479 bytes sw/qa/extras/ooxmlexport/data/tdf91122.docx | Bin 0 -> 16946 bytes sw/qa/extras/ooxmlexport/data/tdf91260.docx | Bin 0 -> 16422 bytes sw/qa/extras/ooxmlexport/data/tdf91261.docx | Bin 0 -> 22081 bytes sw/qa/extras/ooxmlexport/data/tdf91417.docx | Bin 0 -> 13007 bytes sw/qa/extras/ooxmlexport/data/tdf91429.docx | Bin 0 -> 7989 bytes sw/qa/extras/ooxmlexport/data/tdf91594.docx | Bin 0 -> 13037 bytes sw/qa/extras/ooxmlexport/data/tdf92045.docx | Bin 0 -> 12629 bytes sw/qa/extras/ooxmlexport/data/tdf92124.docx | Bin 0 -> 7042 bytes sw/qa/extras/ooxmlexport/data/tdf92157.docx | Bin 0 -> 25188 bytes sw/qa/extras/ooxmlexport/data/tdf92335.docx | Bin 0 -> 5287 bytes sw/qa/extras/ooxmlexport/data/tdf92454.docx | Bin 0 -> 32409 bytes .../ooxmlexport/data/tdf92470_footnoteRestart.docx | Bin 0 -> 5154 bytes sw/qa/extras/ooxmlexport/data/tdf92472.docx | Bin 0 -> 27734 bytes sw/qa/extras/ooxmlexport/data/tdf92521.odt | Bin 0 -> 8891 bytes .../extras/ooxmlexport/data/tdf92524_autoColor.doc | Bin 0 -> 62464 bytes .../ooxmlexport/data/tdf92526_ShapeLineWidth.odt | Bin 0 -> 9163 bytes .../data/tdf92724_continuousBreaksComplex.docx | Bin 0 -> 26913 bytes .../data/tdf92724_continuousBreaksComplex2.docx | Bin 0 -> 16057 bytes sw/qa/extras/ooxmlexport/data/tdf93676-1.odt | Bin 0 -> 18743 bytes sw/qa/extras/ooxmlexport/data/tdf93919.docx | Bin 0 -> 15336 bytes sw/qa/extras/ooxmlexport/data/tdf94043.docx | Bin 0 -> 12326 bytes sw/qa/extras/ooxmlexport/data/tdf94374.docx | Bin 0 -> 12578 bytes sw/qa/extras/ooxmlexport/data/tdf94628.docx | Bin 0 -> 10434 bytes sw/qa/extras/ooxmlexport/data/tdf94801.docx | Bin 0 -> 16128 bytes sw/qa/extras/ooxmlexport/data/tdf95031.docx | Bin 0 -> 14024 bytes sw/qa/extras/ooxmlexport/data/tdf95033.docx | Bin 0 -> 22773 bytes sw/qa/extras/ooxmlexport/data/tdf95189.docx | Bin 0 -> 27705 bytes sw/qa/extras/ooxmlexport/data/tdf95213.docx | Bin 0 -> 17747 bytes .../data/tdf95367_inheritFollowStyle.docx | Bin 0 -> 13861 bytes sw/qa/extras/ooxmlexport/data/tdf95374.docx | Bin 0 -> 42873 bytes sw/qa/extras/ooxmlexport/data/tdf95376.docx | Bin 0 -> 25375 bytes sw/qa/extras/ooxmlexport/data/tdf95377.docx | Bin 0 -> 11982 bytes sw/qa/extras/ooxmlexport/data/tdf95495.docx | Bin 0 -> 102240 bytes sw/qa/extras/ooxmlexport/data/tdf95775.docx | Bin 0 -> 22523 bytes sw/qa/extras/ooxmlexport/data/tdf95777.docx | Bin 0 -> 19126 bytes sw/qa/extras/ooxmlexport/data/tdf95848.docx | Bin 0 -> 34087 bytes sw/qa/extras/ooxmlexport/data/tdf95848_2.docx | Bin 0 -> 14087 bytes .../ooxmlexport/data/tdf96750_landscapeFollow.docx | Bin 0 -> 24129 bytes sw/qa/extras/ooxmlexport/data/tdf97090.docx | Bin 0 -> 29899 bytes sw/qa/extras/ooxmlexport/data/tdf97371.docx | Bin 0 -> 18800 bytes .../data/tdf97517_testVmlLineShapeMirroredX.docx | Bin 0 -> 11539 bytes .../data/tdf97618_testVmlShapeTextWordWrap.docx | Bin 0 -> 16115 bytes .../ooxmlexport/data/tdf97648_relativeWidth.docx | Bin 0 -> 17613 bytes .../ooxmlexport/data/tdf98000_changePageStyle.odt | Bin 0 -> 9418 bytes .../ooxmlexport/data/tdf98620_environmentBiDi.odt | Bin 0 -> 9321 bytes .../ooxmlexport/data/tdf98700_keepWithNext.odt | Bin 0 -> 12680 bytes sw/qa/extras/ooxmlexport/data/tdf99074.docx | Bin 0 -> 12608 bytes .../ooxmlexport/data/tdf99090_pgbrkAfterTable.docx | Bin 0 -> 14726 bytes sw/qa/extras/ooxmlexport/data/tdf99140.docx | Bin 0 -> 13349 bytes sw/qa/extras/ooxmlexport/data/tdf99227.docx | Bin 0 -> 15636 bytes .../data/tdf99602_charStyleSubscript.docx | Bin 0 -> 10669 bytes .../data/tdf99602_charStyleSubscript2.odt | Bin 0 -> 12475 bytes .../data/tdf99602_subscript_charStyleSize.docx | Bin 0 -> 10623 bytes .../ooxmlexport/data/tdf99616_hidemarkb.docx | Bin 0 -> 11742 bytes sw/qa/extras/ooxmlexport/data/tdf99631.docx | Bin 0 -> 32417 bytes .../ooxmlexport/data/tdf99810-lost-arrow.odt | Bin 0 -> 9720 bytes sw/qa/extras/ooxmlexport/data/test76108.docx | Bin 0 -> 14419 bytes sw/qa/extras/ooxmlexport/data/test76317.docx | Bin 0 -> 17705 bytes sw/qa/extras/ooxmlexport/data/test76317_2K10.docx | Bin 0 -> 20751 bytes sw/qa/extras/ooxmlexport/data/test76734_2K7.docx | Bin 0 -> 10446 bytes sw/qa/extras/ooxmlexport/data/test77219.docx | Bin 0 -> 82015 bytes .../ooxmlexport/data/testCrashWhileSave.docx | Bin 0 -> 40873 bytes .../data/testCustomShapePresetExport.odt | Bin 0 -> 86157 bytes sw/qa/extras/ooxmlexport/data/testFootnote.docx | Bin 0 -> 24191 bytes sw/qa/extras/ooxmlexport/data/testGlossary.docx | Bin 0 -> 25741 bytes sw/qa/extras/ooxmlexport/data/testOuterShdw.docx | Bin 0 -> 272537 bytes sw/qa/extras/ooxmlexport/data/testPageref.docx | Bin 0 -> 26321 bytes .../ooxmlexport/data/testParaListRightIndent.docx | Bin 0 -> 12774 bytes sw/qa/extras/ooxmlexport/data/testPgMargin.docx | Bin 0 -> 10448 bytes sw/qa/extras/ooxmlexport/data/testTOCFlag_u.docx | Bin 0 -> 17390 bytes sw/qa/extras/ooxmlexport/data/testTcBorders.docx | Bin 0 -> 55225 bytes .../data/testTdf130167_spilloverHeader.docx | Bin 0 -> 47532 bytes .../extras/ooxmlexport/data/testTextBoxZOrder.docx | Bin 0 -> 17635 bytes sw/qa/extras/ooxmlexport/data/testTitlePage.docx | Bin 0 -> 16479 bytes .../testTrackChangesDeletedEmptyParagraph.docx | Bin 0 -> 12394 bytes .../data/testTrackChangesDeletedParagraphMark.docx | Bin 0 -> 16364 bytes .../data/testTrackChangesDeletedTableCell.docx | Bin 0 -> 13744 bytes .../data/testTrackChangesDeletedTableRow.docx | Bin 0 -> 16518 bytes ...testTrackChangesEmptyParagraphsInADeletion.docx | Bin 0 -> 13952 bytes .../testTrackChangesInsertedParagraphMark.docx | Bin 0 -> 16376 bytes .../data/testTrackChangesInsertedTableCell.docx | Bin 0 -> 13842 bytes .../data/testTrackChangesInsertedTableRow.docx | Bin 0 -> 16290 bytes .../data/testTrackChangesParagraphProperties.docx | Bin 0 -> 16307 bytes sw/qa/extras/ooxmlexport/data/testWPGZOrder.docx | Bin 0 -> 30061 bytes .../extras/ooxmlexport/data/testWPGtextboxes.docx | Bin 0 -> 19842 bytes .../data/testWordArtWithinDraingtool.docx | Bin 0 -> 45324 bytes .../ooxmlexport/data/test_GIF_ImageCrop.docx | Bin 0 -> 19624 bytes .../ooxmlexport/data/test_PNG_ImageCrop.docx | Bin 0 -> 57502 bytes .../extras/ooxmlexport/data/test_extra_image.docx | Bin 0 -> 120620 bytes .../extras/ooxmlexport/data/test_indentation.docx | Bin 0 -> 12896 bytes .../extras/ooxmlexport/data/test_line_spacing.docx | Bin 0 -> 9997 bytes .../extras/ooxmlexport/data/test_msword_hang.docx | Bin 0 -> 11209 bytes sw/qa/extras/ooxmlexport/data/test_ole_object.docx | Bin 0 -> 286633 bytes .../ooxmlexport/data/test_sdt_datepicker.docx | Bin 0 -> 20357 bytes .../ooxmlexport/data/test_segfault_while_save.docx | Bin 0 -> 55619 bytes sw/qa/extras/ooxmlexport/data/test_tdf120412.docx | Bin 0 -> 11820 bytes sw/qa/extras/ooxmlexport/data/textWatermark.docx | Bin 0 -> 17870 bytes .../ooxmlexport/data/text_cardinal_list.docx | Bin 0 -> 8844 bytes .../extras/ooxmlexport/data/text_number_list.docx | Bin 0 -> 8966 bytes .../extras/ooxmlexport/data/text_ordinal_list.docx | Bin 0 -> 8907 bytes .../ooxmlexport/data/textbox-right-edge.docx | Bin 0 -> 13896 bytes .../ooxmlexport/data/textbox-rounded-corners.docx | Bin 0 -> 16225 bytes sw/qa/extras/ooxmlexport/data/textbox-table.docx | Bin 0 -> 16404 bytes .../extras/ooxmlexport/data/textbox-wpg-only.docx | Bin 0 -> 16526 bytes .../ooxmlexport/data/textbox_picturefill.docx | Bin 0 -> 383971 bytes .../extras/ooxmlexport/data/textframe-borders.docx | Bin 0 -> 10440 bytes .../ooxmlexport/data/textframe-gradient.docx | Bin 0 -> 13655 bytes sw/qa/extras/ooxmlexport/data/textframes.odt | Bin 0 -> 8853 bytes sw/qa/extras/ooxmlexport/data/textinput.odt | Bin 0 -> 9544 bytes .../ooxmlexport/data/theme-preservation.docx | Bin 0 -> 15173 bytes sw/qa/extras/ooxmlexport/data/toc_doc.docx | Bin 0 -> 15698 bytes .../ooxmlexport/data/tools-line-numbering.docx | Bin 0 -> 15052 bytes .../extras/ooxmlexport/data/toxmarkhyperlink.fodt | 52 + .../ooxmlexport/data/transparent-shadow.docx | Bin 0 -> 14091 bytes sw/qa/extras/ooxmlexport/data/tscp.docx | Bin 0 -> 4878 bytes .../ooxmlexport/data/unbalanced-columns.docx | Bin 0 -> 12820 bytes .../ooxmlexport/data/unwanted-section-break.docx | Bin 0 -> 15710 bytes .../ooxmlexport/data/vml-text-vertical-adjust.docx | Bin 0 -> 10578 bytes sw/qa/extras/ooxmlexport/data/watermark-font.docx | Bin 0 -> 18824 bytes .../ooxmlexport/data/watermark-shapetype.docx | Bin 0 -> 17830 bytes sw/qa/extras/ooxmlexport/data/watermark.docx | Bin 0 -> 19473 bytes sw/qa/extras/ooxmlexport/data/wpg-nested.docx | Bin 0 -> 34068 bytes sw/qa/extras/ooxmlexport/data/wpg-only.docx | Bin 0 -> 13503 bytes sw/qa/extras/ooxmlexport/data/wps-char-color.docx | Bin 0 -> 15589 bytes sw/qa/extras/ooxmlexport/data/wps-only.docx | Bin 0 -> 13180 bytes .../ooxmlexport/data/wrap-tight-through.docx | Bin 0 -> 18524 bytes sw/qa/extras/ooxmlexport/data/zoom.docx | Bin 0 -> 10625 bytes sw/qa/extras/ooxmlexport/ooxmlencryption.cxx | 58 + sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 1108 +++++ sw/qa/extras/ooxmlexport/ooxmlexport10.cxx | 1444 ++++++ sw/qa/extras/ooxmlexport/ooxmlexport11.cxx | 867 ++++ sw/qa/extras/ooxmlexport/ooxmlexport12.cxx | 2248 +++++++++ sw/qa/extras/ooxmlexport/ooxmlexport13.cxx | 1294 ++++++ sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 1591 +++++++ sw/qa/extras/ooxmlexport/ooxmlexport15.cxx | 1054 +++++ sw/qa/extras/ooxmlexport/ooxmlexport16.cxx | 1045 +++++ sw/qa/extras/ooxmlexport/ooxmlexport17.cxx | 1087 +++++ sw/qa/extras/ooxmlexport/ooxmlexport18.cxx | 167 + sw/qa/extras/ooxmlexport/ooxmlexport2.cxx | 1199 +++++ sw/qa/extras/ooxmlexport/ooxmlexport3.cxx | 1224 +++++ sw/qa/extras/ooxmlexport/ooxmlexport4.cxx | 1307 ++++++ sw/qa/extras/ooxmlexport/ooxmlexport5.cxx | 1446 ++++++ sw/qa/extras/ooxmlexport/ooxmlexport6.cxx | 1055 +++++ sw/qa/extras/ooxmlexport/ooxmlexport7.cxx | 1164 +++++ sw/qa/extras/ooxmlexport/ooxmlexport8.cxx | 1260 +++++ sw/qa/extras/ooxmlexport/ooxmlexport9.cxx | 1670 +++++++ sw/qa/extras/ooxmlexport/ooxmlexport_template.cxx | 42 + sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx | 954 ++++ sw/qa/extras/ooxmlexport/ooxmllinks.cxx | 236 + sw/qa/extras/ooxmlexport/ooxmlw14export.cxx | 645 +++ sw/qa/extras/ooxmlimport/data/105975.docx | Bin 0 -> 12783 bytes sw/qa/extras/ooxmlimport/data/WordArt.docx | Bin 0 -> 10417 bytes sw/qa/extras/ooxmlimport/data/bnc773061.docx | Bin 0 -> 8872 bytes sw/qa/extras/ooxmlimport/data/bnc779620.docx | Bin 0 -> 10299 bytes sw/qa/extras/ooxmlimport/data/bnc821804.docx | Bin 0 -> 5601 bytes sw/qa/extras/ooxmlimport/data/btlr-frame-vml.docx | Bin 0 -> 22765 bytes .../data/dml-groupshape-paraadjust.docx | Bin 0 -> 17764 bytes sw/qa/extras/ooxmlimport/data/fdo43641.docx | Bin 0 -> 11966 bytes sw/qa/extras/ooxmlimport/data/fdo75722-dml.docx | Bin 0 -> 15469 bytes sw/qa/extras/ooxmlimport/data/fdo75722-vml.docx | Bin 0 -> 10146 bytes sw/qa/extras/ooxmlimport/data/fdo76583.docx | Bin 0 -> 14007 bytes sw/qa/extras/ooxmlimport/data/fdo87488.docx | Bin 0 -> 26418 bytes .../data/floating-table-section-columns.docx | Bin 0 -> 5668 bytes .../data/groupshape-child-rotation.docx | Bin 0 -> 15960 bytes .../ooxmlimport/data/groupshape-fontname.docx | Bin 0 -> 61000 bytes sw/qa/extras/ooxmlimport/data/groupshape-line.docx | Bin 0 -> 10291 bytes .../ooxmlimport/data/groupshape-relsize.docx | Bin 0 -> 20145 bytes sw/qa/extras/ooxmlimport/data/groupshape-sdt.docx | Bin 0 -> 10742 bytes sw/qa/extras/ooxmlimport/data/image-hyperlink.docx | Bin 0 -> 13467 bytes sw/qa/extras/ooxmlimport/data/image-lazy-read.docx | Bin 0 -> 9392 bytes sw/qa/extras/ooxmlimport/data/ink.docx | Bin 0 -> 14339 bytes sw/qa/extras/ooxmlimport/data/line-rotation.docx | Bin 0 -> 14772 bytes sw/qa/extras/ooxmlimport/data/line-wps-only.docx | Bin 0 -> 8721 bytes .../ooxmlimport/data/math-malformed_xml.docx | Bin 0 -> 4320 bytes sw/qa/extras/ooxmlimport/data/n751017.docx | Bin 0 -> 10194 bytes sw/qa/extras/ooxmlimport/data/n751077.docx | Bin 0 -> 22131 bytes sw/qa/extras/ooxmlimport/data/n757890.docx | Bin 0 -> 11098 bytes sw/qa/extras/ooxmlimport/data/n758883.docx | Bin 0 -> 11896 bytes sw/qa/extras/ooxmlimport/data/n760764.docx | Bin 0 -> 10079 bytes .../extras/ooxmlimport/data/n764745-alignment.docx | Bin 0 -> 5635 bytes sw/qa/extras/ooxmlimport/data/n766477.docx | Bin 0 -> 10104 bytes sw/qa/extras/ooxmlimport/data/n773061.docx | Bin 0 -> 7081 bytes sw/qa/extras/ooxmlimport/data/n775899.docx | Bin 0 -> 10264 bytes sw/qa/extras/ooxmlimport/data/n777345.docx | Bin 0 -> 9360 bytes sw/qa/extras/ooxmlimport/data/n778140.docx | Bin 0 -> 9564 bytes sw/qa/extras/ooxmlimport/data/n779627.docx | Bin 0 -> 30152 bytes sw/qa/extras/ooxmlimport/data/n779627b.docx | Bin 0 -> 5805 bytes sw/qa/extras/ooxmlimport/data/n780645.docx | Bin 0 -> 4014 bytes sw/qa/extras/ooxmlimport/data/n782061.docx | Bin 0 -> 12654 bytes sw/qa/extras/ooxmlimport/data/n820504.docx | Bin 0 -> 23684 bytes sw/qa/extras/ooxmlimport/data/n820788.docx | Bin 0 -> 10267 bytes .../extras/ooxmlimport/data/numbering-circle.docx | Bin 0 -> 4952 bytes sw/qa/extras/ooxmlimport/data/ole-anchor.docx | Bin 0 -> 12393 bytes .../ooxmlimport/data/strict-lockedcanvas.docx | Bin 0 -> 12345 bytes sw/qa/extras/ooxmlimport/data/table_width.docx | Bin 0 -> 6572 bytes sw/qa/extras/ooxmlimport/data/tdf100072.docx | Bin 0 -> 7034 bytes sw/qa/extras/ooxmlimport/data/tdf100830.docx | Bin 0 -> 22171 bytes sw/qa/extras/ooxmlimport/data/tdf101626.docx | Bin 0 -> 12420 bytes sw/qa/extras/ooxmlimport/data/tdf101627.docx | Bin 0 -> 45695 bytes sw/qa/extras/ooxmlimport/data/tdf103664.docx | Bin 0 -> 11444 bytes sw/qa/extras/ooxmlimport/data/tdf103931.docx | Bin 0 -> 3542 bytes sw/qa/extras/ooxmlimport/data/tdf104167.docx | Bin 0 -> 10909 bytes sw/qa/extras/ooxmlimport/data/tdf105127.docx | Bin 0 -> 10430 bytes sw/qa/extras/ooxmlimport/data/tdf105143.docx | Bin 0 -> 13098 bytes sw/qa/extras/ooxmlimport/data/tdf105975.docx | Bin 0 -> 12754 bytes sw/qa/extras/ooxmlimport/data/tdf106606.docx | Bin 0 -> 73530 bytes sw/qa/extras/ooxmlimport/data/tdf107784.docx | Bin 0 -> 14852 bytes sw/qa/extras/ooxmlimport/data/tdf108350.docx | Bin 0 -> 1271 bytes sw/qa/extras/ooxmlimport/data/tdf108408.docx | Bin 0 -> 1298 bytes .../data/tdf108545_embeddedDocxIcon.docx | Bin 0 -> 28843 bytes sw/qa/extras/ooxmlimport/data/tdf108714.docx | Bin 0 -> 1376 bytes sw/qa/extras/ooxmlimport/data/tdf108806.docx | Bin 0 -> 1315 bytes sw/qa/extras/ooxmlimport/data/tdf108849.docx | Bin 0 -> 1360 bytes sw/qa/extras/ooxmlimport/data/tdf109053.docx | Bin 0 -> 12195 bytes .../ooxmlimport/data/tdf109316_dropCaps.docx | Bin 0 -> 13058 bytes sw/qa/extras/ooxmlimport/data/tdf109524.docx | Bin 0 -> 1291 bytes sw/qa/extras/ooxmlimport/data/tdf111550.docx | Bin 0 -> 1362 bytes sw/qa/extras/ooxmlimport/data/tdf112443.docx | Bin 0 -> 26990 bytes sw/qa/extras/ooxmlimport/data/tdf113182.docx | Bin 0 -> 12561 bytes sw/qa/extras/ooxmlimport/data/tdf113946.docx | Bin 0 -> 15580 bytes sw/qa/extras/ooxmlimport/data/tdf114212.docx | Bin 0 -> 4791 bytes sw/qa/extras/ooxmlimport/data/tdf114217.docx | Bin 0 -> 11524 bytes sw/qa/extras/ooxmlimport/data/tdf115094.docx | Bin 0 -> 15064 bytes sw/qa/extras/ooxmlimport/data/tdf115094v2.docx | Bin 0 -> 32186 bytes sw/qa/extras/ooxmlimport/data/tdf115719b.docx | Bin 0 -> 19843 bytes sw/qa/extras/ooxmlimport/data/tdf115883.docx | Bin 0 -> 33313 bytes sw/qa/extras/ooxmlimport/data/tdf117843.docx | Bin 0 -> 26926 bytes sw/qa/extras/ooxmlimport/data/tdf118693.docx | Bin 0 -> 26072 bytes .../data/tdf119039_bad_embedded_compound.docx | Bin 0 -> 13876 bytes sw/qa/extras/ooxmlimport/data/tdf119200.docx | Bin 0 -> 20728 bytes sw/qa/extras/ooxmlimport/data/tdf120547.docx | Bin 0 -> 40512 bytes sw/qa/extras/ooxmlimport/data/tdf120548.docx | Bin 0 -> 13745 bytes sw/qa/extras/ooxmlimport/data/tdf120551.docx | Bin 0 -> 31758 bytes sw/qa/extras/ooxmlimport/data/tdf121203.docx | Bin 0 -> 12702 bytes sw/qa/extras/ooxmlimport/data/tdf121440.docx | Bin 0 -> 23209 bytes sw/qa/extras/ooxmlimport/data/tdf121664.docx | Bin 0 -> 12709 bytes sw/qa/extras/ooxmlimport/data/tdf121804.docx | Bin 0 -> 17629 bytes sw/qa/extras/ooxmlimport/data/tdf122224.docx | Bin 0 -> 19306 bytes sw/qa/extras/ooxmlimport/data/tdf122717.docx | Bin 0 -> 4940 bytes sw/qa/extras/ooxmlimport/data/tdf123386.docx | Bin 0 -> 14928 bytes sw/qa/extras/ooxmlimport/data/tdf123389.docx | Bin 0 -> 13649 bytes sw/qa/extras/ooxmlimport/data/tdf124398.docx | Bin 0 -> 79734 bytes sw/qa/extras/ooxmlimport/data/tdf124600.docx | Bin 0 -> 15746 bytes sw/qa/extras/ooxmlimport/data/tdf124670.docx | Bin 0 -> 1434 bytes sw/qa/extras/ooxmlimport/data/tdf124754.docx | Bin 0 -> 20960 bytes sw/qa/extras/ooxmlimport/data/tdf125038.docx | Bin 0 -> 12690 bytes sw/qa/extras/ooxmlimport/data/tdf125038b.docx | Bin 0 -> 12649 bytes sw/qa/extras/ooxmlimport/data/tdf125038c.docx | Bin 0 -> 12677 bytes sw/qa/extras/ooxmlimport/data/tdf126114.docx | Bin 0 -> 16877 bytes sw/qa/extras/ooxmlimport/data/tdf126426.docx | Bin 0 -> 15785 bytes sw/qa/extras/ooxmlimport/data/tdf127778.docx | Bin 0 -> 23220 bytes sw/qa/extras/ooxmlimport/data/tdf127825.docx | Bin 0 -> 13297 bytes sw/qa/extras/ooxmlimport/data/tdf128076.docx | Bin 0 -> 18928 bytes sw/qa/extras/ooxmlimport/data/tdf129237.docx | Bin 0 -> 13162 bytes sw/qa/extras/ooxmlimport/data/tdf129659.docx | Bin 0 -> 18584 bytes sw/qa/extras/ooxmlimport/data/tdf129912.docx | Bin 0 -> 19435 bytes sw/qa/extras/ooxmlimport/data/tdf130214.docx | Bin 0 -> 23057 bytes sw/qa/extras/ooxmlimport/data/tdf130804.docx | Bin 0 -> 182772 bytes .../data/tdf131841_HighlightColorGroupedShape.docx | Bin 0 -> 20448 bytes sw/qa/extras/ooxmlimport/data/tdf133448.docx | Bin 0 -> 92038 bytes sw/qa/extras/ooxmlimport/data/tdf133647.docx | Bin 0 -> 14536 bytes .../extras/ooxmlimport/data/tdf133647_unicode.docx | Bin 0 -> 20920 bytes sw/qa/extras/ooxmlimport/data/tdf134572.docx | Bin 0 -> 21846 bytes .../ooxmlimport/data/tdf136952_pgBreak3.docx | Bin 0 -> 5145 bytes .../data/tdf143219_ContourWrap_rotate.docx | Bin 0 -> 19636 bytes .../data/tdf143475_rotatedWord2007image.docx | Bin 0 -> 30338 bytes .../data/tdf143475_rotatedWord2007imageInline.docx | Bin 0 -> 29345 bytes .../data/tdf143476_lockedCanvas_image_line.docx | Bin 0 -> 11649 bytes .../data/tdf143476_lockedCanvas_position.docx | Bin 0 -> 278044 bytes .../data/tdf143476_lockedCanvas_twoShapes.docx | Bin 0 -> 22179 bytes .../data/tdf152200-bad_fldChar_end.docx | Bin 0 -> 10153 bytes sw/qa/extras/ooxmlimport/data/tdf43017.docx | Bin 0 -> 14890 bytes .../data/tdf48658_transparentOLEheader.docx | Bin 0 -> 181161 bytes sw/qa/extras/ooxmlimport/data/tdf60351.docx | Bin 0 -> 26060 bytes .../ooxmlimport/data/tdf74367_MarginsZeroed.docx | Bin 0 -> 12600 bytes .../ooxmlimport/data/tdf75573_lostTable.docx | Bin 0 -> 25590 bytes .../ooxmlimport/data/tdf75573_page1frame.docx | Bin 0 -> 29488 bytes sw/qa/extras/ooxmlimport/data/tdf76446.docx | Bin 0 -> 10135 bytes sw/qa/extras/ooxmlimport/data/tdf82824.docx | Bin 0 -> 24581 bytes sw/qa/extras/ooxmlimport/data/tdf85232.docx | Bin 0 -> 24373 bytes sw/qa/extras/ooxmlimport/data/tdf85523.docx | Bin 0 -> 21015 bytes sw/qa/extras/ooxmlimport/data/tdf87533_bidi.docx | Bin 0 -> 13857 bytes sw/qa/extras/ooxmlimport/data/tdf95755.docx | Bin 0 -> 16864 bytes sw/qa/extras/ooxmlimport/data/tdf95970.docx | Bin 0 -> 13092 bytes sw/qa/extras/ooxmlimport/data/tdf96218.docx | Bin 0 -> 41900 bytes sw/qa/extras/ooxmlimport/data/tdf96674.docx | Bin 0 -> 14947 bytes sw/qa/extras/ooxmlimport/data/tdf97038.docx | Bin 0 -> 64161 bytes sw/qa/extras/ooxmlimport/data/tdf98882.docx | Bin 0 -> 18390 bytes sw/qa/extras/ooxmlimport/data/tdf99135.docx | Bin 0 -> 12122 bytes sw/qa/extras/ooxmlimport/data/testfdo90720.docx | Bin 0 -> 11844 bytes sw/qa/extras/ooxmlimport/data/text-copy.docx | Bin 0 -> 16288 bytes .../extras/ooxmlimport/data/textbox-wps-only.docx | Bin 0 -> 13988 bytes .../data/unbalanced-columns-compat.docx | Bin 0 -> 10118 bytes sw/qa/extras/ooxmlimport/data/vml-adjustments.docx | Bin 0 -> 12987 bytes sw/qa/extras/ooxmlimport/data/xml_space.docx | Bin 0 -> 1309 bytes sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 1860 ++++++++ sw/qa/extras/ooxmlimport/ooxmlimport2.cxx | 954 ++++ sw/qa/extras/rtfexport/data/FORMDROPDOWN.rtf | 33 + sw/qa/extras/rtfexport/data/abi10039.odt | Bin 0 -> 12293 bytes sw/qa/extras/rtfexport/data/abi10076.odt | Bin 0 -> 98498 bytes sw/qa/extras/rtfexport/data/all_gaps_word.rtf | 381 ++ sw/qa/extras/rtfexport/data/anchor.fodt | 101 + .../rtfexport/data/arabic-zero-numbering.rtf | 14 + sw/qa/extras/rtfexport/data/bin-skipping.rtf | 19 + sw/qa/extras/rtfexport/data/bookmark.rtf | 7 + sw/qa/extras/rtfexport/data/btlr-cell.rtf | 9 + sw/qa/extras/rtfexport/data/btlr-frame.odt | Bin 0 -> 8564 bytes sw/qa/extras/rtfexport/data/char-color.rtf | 29 + sw/qa/extras/rtfexport/data/charborder.odt | Bin 0 -> 8052 bytes sw/qa/extras/rtfexport/data/cjklist12.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist13.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist16.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist20.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist21.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist24.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist25.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist30.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist31.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist34.rtf | 225 + sw/qa/extras/rtfexport/data/cjklist38.rtf | 225 + .../rtfexport/data/classification-confidential.rtf | 11 + sw/qa/extras/rtfexport/data/classification-no.rtf | 1 + sw/qa/extras/rtfexport/data/classification-yes.rtf | 11 + sw/qa/extras/rtfexport/data/clearing-break.rtf | 22 + sw/qa/extras/rtfexport/data/comments-nested.odt | Bin 0 -> 11343 bytes .../rtfexport/data/copypaste-footnote-paste.rtf | 2 + sw/qa/extras/rtfexport/data/copypaste-footnote.rtf | 6 + .../rtfexport/data/copypaste-pagestyle-paste.rtf | 17 + .../extras/rtfexport/data/copypaste-pagestyle.rtf | 3 + sw/qa/extras/rtfexport/data/cp1000018.rtf | 27 + sw/qa/extras/rtfexport/data/cs-bold.rtf | 12 + sw/qa/extras/rtfexport/data/custom-doc-props.rtf | 25 + sw/qa/extras/rtfexport/data/do-dhgt-old.rtf | 10 + sw/qa/extras/rtfexport/data/do-dhgt.rtf | 9 + sw/qa/extras/rtfexport/data/dplinehollow.rtf | 7 + sw/qa/extras/rtfexport/data/dppolyline.rtf | 6 + sw/qa/extras/rtfexport/data/dprect-anchor.rtf | 4 + sw/qa/extras/rtfexport/data/dptxbx-relation.rtf | 5 + sw/qa/extras/rtfexport/data/em.rtf | 8 + sw/qa/extras/rtfexport/data/fdo30983.rtf | 43 + sw/qa/extras/rtfexport/data/fdo32613.odt | Bin 0 -> 10434 bytes sw/qa/extras/rtfexport/data/fdo36089.rtf | 9 + sw/qa/extras/rtfexport/data/fdo37716.rtf | 5 + sw/qa/extras/rtfexport/data/fdo38176.rtf | 3 + sw/qa/extras/rtfexport/data/fdo38244.rtf | 15 + sw/qa/extras/rtfexport/data/fdo38786.rtf | 2 + sw/qa/extras/rtfexport/data/fdo39001.rtf | 22 + sw/qa/extras/rtfexport/data/fdo39053.rtf | Bin 0 -> 22118 bytes sw/qa/extras/rtfexport/data/fdo42109.rtf | 29 + sw/qa/extras/rtfexport/data/fdo42465.rtf | 4 + sw/qa/extras/rtfexport/data/fdo43965.rtf | 16 + sw/qa/extras/rtfexport/data/fdo44053.rtf | 15 + sw/qa/extras/rtfexport/data/fdo44174.rtf | 6 + sw/qa/extras/rtfexport/data/fdo44176.rtf | 10 + sw/qa/extras/rtfexport/data/fdo44211.rtf | 4 + sw/qa/extras/rtfexport/data/fdo44715.rtf | 42 + sw/qa/extras/rtfexport/data/fdo45187.rtf | 32 + sw/qa/extras/rtfexport/data/fdo45394.rtf | 19 + sw/qa/extras/rtfexport/data/fdo45543.rtf | 8 + sw/qa/extras/rtfexport/data/fdo45553.rtf | 2 + sw/qa/extras/rtfexport/data/fdo45563.rtf | 5 + sw/qa/extras/rtfexport/data/fdo46955.rtf | 1 + sw/qa/extras/rtfexport/data/fdo46966.rtf | 10 + sw/qa/extras/rtfexport/data/fdo47107.rtf | 21 + sw/qa/extras/rtfexport/data/fdo47326.rtf | 5 + sw/qa/extras/rtfexport/data/fdo47495.rtf | 164 + sw/qa/extras/rtfexport/data/fdo47764.rtf | 4 + sw/qa/extras/rtfexport/data/fdo47802.rtf | 46 + sw/qa/extras/rtfexport/data/fdo48023.rtf | 8 + sw/qa/extras/rtfexport/data/fdo48033.rtf | 22 + sw/qa/extras/rtfexport/data/fdo48037.rtf | 13 + sw/qa/extras/rtfexport/data/fdo48104.rtf | 6 + sw/qa/extras/rtfexport/data/fdo48193.rtf | 10 + sw/qa/extras/rtfexport/data/fdo48335.odt | Bin 0 -> 9612 bytes sw/qa/extras/rtfexport/data/fdo48356.rtf | 3 + sw/qa/extras/rtfexport/data/fdo48440.rtf | 5 + sw/qa/extras/rtfexport/data/fdo48446.rtf | 7 + sw/qa/extras/rtfexport/data/fdo48876.rtf | 5 + sw/qa/extras/rtfexport/data/fdo49271.rtf | 3 + sw/qa/extras/rtfexport/data/fdo49501.rtf | 5 + sw/qa/extras/rtfexport/data/fdo49655.rtf | 5 + sw/qa/extras/rtfexport/data/fdo49659.rtf | 19 + sw/qa/extras/rtfexport/data/fdo49683.rtf | 5 + sw/qa/extras/rtfexport/data/fdo49893-2.rtf | 5 + sw/qa/extras/rtfexport/data/fdo49934.rtf | 7 + sw/qa/extras/rtfexport/data/fdo50087.rtf | 8 + sw/qa/extras/rtfexport/data/fdo50539.rtf | 4 + sw/qa/extras/rtfexport/data/fdo50665.rtf | 16 + sw/qa/extras/rtfexport/data/fdo50831.rtf | 11 + sw/qa/extras/rtfexport/data/fdo51916.rtf | 319 ++ sw/qa/extras/rtfexport/data/fdo52286.odt | Bin 0 -> 9130 bytes sw/qa/extras/rtfexport/data/fdo52389.rtf | 3 + sw/qa/extras/rtfexport/data/fdo52475.rtf | 5 + sw/qa/extras/rtfexport/data/fdo52989.rtf | 12 + sw/qa/extras/rtfexport/data/fdo53113.odt | Bin 0 -> 9276 bytes sw/qa/extras/rtfexport/data/fdo53594.rtf | 42 + sw/qa/extras/rtfexport/data/fdo53604.odt | Bin 0 -> 8808 bytes sw/qa/extras/rtfexport/data/fdo54473.rtf | 10 + sw/qa/extras/rtfexport/data/fdo54612.rtf | 34 + sw/qa/extras/rtfexport/data/fdo54900.rtf | 17 + sw/qa/extras/rtfexport/data/fdo55493.rtf | 142 + sw/qa/extras/rtfexport/data/fdo55939.odt | Bin 0 -> 8853 bytes sw/qa/extras/rtfexport/data/fdo56512.rtf | 5 + sw/qa/extras/rtfexport/data/fdo57678.rtf | 34 + sw/qa/extras/rtfexport/data/fdo57886.rtf | 23 + sw/qa/extras/rtfexport/data/fdo58076-2.rtf | 24 + sw/qa/extras/rtfexport/data/fdo58076.rtf | 5 + sw/qa/extras/rtfexport/data/fdo58646.rtf | 7 + sw/qa/extras/rtfexport/data/fdo58646line.rtf | 1 + sw/qa/extras/rtfexport/data/fdo58933.rtf | 28 + sw/qa/extras/rtfexport/data/fdo59419.rtf | 5 + sw/qa/extras/rtfexport/data/fdo59638.rtf | 35 + sw/qa/extras/rtfexport/data/fdo60722.rtf | 13 + sw/qa/extras/rtfexport/data/fdo61193.rtf | 1 + sw/qa/extras/rtfexport/data/fdo61507.rtf | 12 + sw/qa/extras/rtfexport/data/fdo61909.rtf | 28 + sw/qa/extras/rtfexport/data/fdo62044-paste.rtf | 7 + sw/qa/extras/rtfexport/data/fdo62044.rtf | 7 + sw/qa/extras/rtfexport/data/fdo62288.rtf | 23 + sw/qa/extras/rtfexport/data/fdo62805.rtf | 21 + sw/qa/extras/rtfexport/data/fdo62977.rtf | 24 + sw/qa/extras/rtfexport/data/fdo63023.rtf | 10 + sw/qa/extras/rtfexport/data/fdo63428.rtf | 8 + sw/qa/extras/rtfexport/data/fdo64637.rtf | 13 + sw/qa/extras/rtfexport/data/fdo64671.rtf | 3 + sw/qa/extras/rtfexport/data/fdo65090.rtf | 6 + sw/qa/extras/rtfexport/data/fdo66040.rtf | 85 + sw/qa/extras/rtfexport/data/fdo66682.rtf | 25 + sw/qa/extras/rtfexport/data/fdo66743.rtf | 5 + sw/qa/extras/rtfexport/data/fdo67498.rtf | 5 + sw/qa/extras/rtfexport/data/fdo68076.rtf | 18 + sw/qa/extras/rtfexport/data/fdo68779.rtf | 25 + sw/qa/extras/rtfexport/data/fdo68787.rtf | 9 + sw/qa/extras/rtfexport/data/fdo69289.rtf | 6 + sw/qa/extras/rtfexport/data/fdo69384-paste.rtf | 17 + sw/qa/extras/rtfexport/data/fdo70221.rtf | Bin 0 -> 3714 bytes sw/qa/extras/rtfexport/data/fdo70578.rtf | 11 + sw/qa/extras/rtfexport/data/fdo72031.rtf | 1 + sw/qa/extras/rtfexport/data/fdo73241.rtf | 8 + sw/qa/extras/rtfexport/data/fdo74229.rtf | 33 + sw/qa/extras/rtfexport/data/fdo74709.rtf | 32 + sw/qa/extras/rtfexport/data/fdo75735.rtf | 8 + sw/qa/extras/rtfexport/data/fdo76628.rtf | 10 + sw/qa/extras/rtfexport/data/fdo76633.rtf | 32 + sw/qa/extras/rtfexport/data/fdo77267.rtf | 12 + sw/qa/extras/rtfexport/data/fdo77600.rtf | 25 + sw/qa/extras/rtfexport/data/fdo77979.odt | Bin 0 -> 9009 bytes sw/qa/extras/rtfexport/data/fdo77996.rtf | 36 + sw/qa/extras/rtfexport/data/fdo78502.rtf | 12 + sw/qa/extras/rtfexport/data/fdo78758.rtf | 9 + sw/qa/extras/rtfexport/data/fdo79384.rtf | 9 + sw/qa/extras/rtfexport/data/fdo79959.rtf | 4 + sw/qa/extras/rtfexport/data/fdo80167.rtf | 6 + sw/qa/extras/rtfexport/data/fdo80905.rtf | 12 + sw/qa/extras/rtfexport/data/fdo81892.rtf | 26 + sw/qa/extras/rtfexport/data/fdo82006.rtf | 5 + sw/qa/extras/rtfexport/data/fdo82076.rtf | 13 + sw/qa/extras/rtfexport/data/fdo82078.rtf | 13 + sw/qa/extras/rtfexport/data/fdo82106.rtf | 4 + sw/qa/extras/rtfexport/data/fdo82858.docx | Bin 0 -> 10672 bytes sw/qa/extras/rtfexport/data/fdo82859.rtf | 25 + sw/qa/extras/rtfexport/data/fdo82860.odt | Bin 0 -> 9222 bytes sw/qa/extras/rtfexport/data/fdo83204.rtf | 9 + sw/qa/extras/rtfexport/data/fdo83464.rtf | 24 + sw/qa/extras/rtfexport/data/fdo84679.rtf | 12 + sw/qa/extras/rtfexport/data/fdo85889-mac.rtf | 3 + sw/qa/extras/rtfexport/data/fdo85889-pc.rtf | 3 + sw/qa/extras/rtfexport/data/fdo85889-pca.rtf | 3 + sw/qa/extras/rtfexport/data/fdo86750.rtf | 4 + sw/qa/extras/rtfexport/data/fdo86761.rtf | 42 + sw/qa/extras/rtfexport/data/fdo89496.rtf | 18 + sw/qa/extras/rtfexport/data/fdo94835.rtf | 66 + sw/qa/extras/rtfexport/data/font-override.rtf | 28 + sw/qa/extras/rtfexport/data/footer-para.rtf | 5 + .../extras/rtfexport/data/graphic-object-fliph.rtf | 41 + sw/qa/extras/rtfexport/data/gutter-left.rtf | 4 + sw/qa/extras/rtfexport/data/gutter-top.rtf | 4 + sw/qa/extras/rtfexport/data/hello.rtf | 1 + sw/qa/extras/rtfexport/data/hexcrlf.rtf | 10 + sw/qa/extras/rtfexport/data/hidden-linebreaks.rtf | 27 + sw/qa/extras/rtfexport/data/hyperlink-target.rtf | 11 + sw/qa/extras/rtfexport/data/hyperlink.rtf | 9 + sw/qa/extras/rtfexport/data/hyperlink_empty.rtf | 8 + sw/qa/extras/rtfexport/data/hyphauto.rtf | 6 + sw/qa/extras/rtfexport/data/hyphpar.rtf | 5 + sw/qa/extras/rtfexport/data/i120928.rtf | 48 + sw/qa/extras/rtfexport/data/landscape.rtf | 13 + sw/qa/extras/rtfexport/data/leftmargin-default.rtf | 5 + sw/qa/extras/rtfexport/data/levelfollow.rtf | 38 + sw/qa/extras/rtfexport/data/leveljc-center.rtf | 22 + sw/qa/extras/rtfexport/data/linenumbering.rtf | 8 + sw/qa/extras/rtfexport/data/margmirror.rtf | 9 + sw/qa/extras/rtfexport/data/math-accents.rtf | 189 + sw/qa/extras/rtfexport/data/math-d.rtf | 170 + sw/qa/extras/rtfexport/data/math-eqarray.rtf | 96 + sw/qa/extras/rtfexport/data/math-escaping.rtf | 12 + sw/qa/extras/rtfexport/data/math-lim.rtf | 48 + sw/qa/extras/rtfexport/data/math-limupp.rtf | 77 + sw/qa/extras/rtfexport/data/math-matrix.rtf | 66 + sw/qa/extras/rtfexport/data/math-mbox.rtf | 23 + sw/qa/extras/rtfexport/data/math-mso2007.rtf | 1218 +++++ sw/qa/extras/rtfexport/data/math-nary.rtf | 87 + sw/qa/extras/rtfexport/data/math-placeholders.rtf | 26 + sw/qa/extras/rtfexport/data/math-rad.rtf | 48 + sw/qa/extras/rtfexport/data/math-runs.rtf | 12 + sw/qa/extras/rtfexport/data/math-sepchr.rtf | 39 + sw/qa/extras/rtfexport/data/math-strikeh.rtf | 26 + sw/qa/extras/rtfexport/data/math-subscripts.rtf | 224 + .../extras/rtfexport/data/math-vertical-stacks.rtf | 131 + sw/qa/extras/rtfexport/data/mathtype.rtf | 142 + sw/qa/extras/rtfexport/data/mnor.rtf | 86 + .../data/mw00_table_of_contents_templates.doc | Bin 0 -> 24064 bytes sw/qa/extras/rtfexport/data/n192129.rtf | 3 + sw/qa/extras/rtfexport/data/n750757.rtf | 45 + sw/qa/extras/rtfexport/data/n751020.rtf | 8 + sw/qa/extras/rtfexport/data/n757651.rtf | 18 + sw/qa/extras/rtfexport/data/n818997.rtf | 77 + sw/qa/extras/rtfexport/data/n820504.rtf | 37 + sw/qa/extras/rtfexport/data/n825305.rtf | 76 + sw/qa/extras/rtfexport/data/num-override-start.rtf | 29 + sw/qa/extras/rtfexport/data/numbering-font.rtf | 20 + sw/qa/extras/rtfexport/data/page-background.rtf | 30 + sw/qa/extras/rtfexport/data/page-border.rtf | 4 + .../rtfexport/data/para-adjust-distribute.rtf | 4 + sw/qa/extras/rtfexport/data/para-border.rtf | 27 + sw/qa/extras/rtfexport/data/para-bottom-margin.rtf | 14 + sw/qa/extras/rtfexport/data/para-shadow.rtf | 21 + .../rtfexport/data/para-style-bottom-margin-2.rtf | 12 + sw/qa/extras/rtfexport/data/pgndec.rtf | 24 + sw/qa/extras/rtfexport/data/pgnlcltr.rtf | 23 + sw/qa/extras/rtfexport/data/pgnlcrm.rtf | 23 + sw/qa/extras/rtfexport/data/pgnucrm.rtf | 23 + .../extras/rtfexport/data/picture-wrap-polygon.rtf | 47 + sw/qa/extras/rtfexport/data/placeholder.odt | Bin 0 -> 8752 bytes sw/qa/extras/rtfexport/data/record-changes.rtf | 3 + sw/qa/extras/rtfexport/data/redline-insdel.rtf | 11 + sw/qa/extras/rtfexport/data/redline.rtf | 18 + sw/qa/extras/rtfexport/data/relsize.rtf | 42 + sw/qa/extras/rtfexport/data/rhbz1065629.rtf | 101 + sw/qa/extras/rtfexport/data/rtl-gutter.rtf | 4 + sw/qa/extras/rtfexport/data/sautoupd.rtf | 7 + sw/qa/extras/rtfexport/data/shptxt-pard.rtf | 19 + sw/qa/extras/rtfexport/data/shpz-dhgt.rtf | 43 + .../extras/rtfexport/data/tab-stop-fill-chars.rtf | 14 + sw/qa/extras/rtfexport/data/table-rtl.rtf | 5 + sw/qa/extras/rtfexport/data/tabs.rtf | 4 + sw/qa/extras/rtfexport/data/tbrl-frame.odt | Bin 0 -> 8666 bytes sw/qa/extras/rtfexport/data/tbrl-page.rtf | 3 + sw/qa/extras/rtfexport/data/tdf100507.rtf | 22 + .../rtfexport/data/tdf100961_fixedDateTime.rtf | 38 + sw/qa/extras/rtfexport/data/tdf103925.rtf | 1 + sw/qa/extras/rtfexport/data/tdf104035.rtf | 14 + sw/qa/extras/rtfexport/data/tdf104079.rtf | 48 + sw/qa/extras/rtfexport/data/tdf104081.rtf | 4 + sw/qa/extras/rtfexport/data/tdf104085.rtf | Bin 0 -> 348 bytes sw/qa/extras/rtfexport/data/tdf104228.rtf | 37 + sw/qa/extras/rtfexport/data/tdf104287.rtf | 38 + sw/qa/extras/rtfexport/data/tdf104317.rtf | 39 + sw/qa/extras/rtfexport/data/tdf104390.rtf | 6 + sw/qa/extras/rtfexport/data/tdf104744.rtf | 24 + sw/qa/extras/rtfexport/data/tdf104936.rtf | 20 + sw/qa/extras/rtfexport/data/tdf104937.rtf | 42 + sw/qa/extras/rtfexport/data/tdf105729.rtf | 9 + sw/qa/extras/rtfexport/data/tdf105852.rtf | 50 + sw/qa/extras/rtfexport/data/tdf106694.rtf | 10 + sw/qa/extras/rtfexport/data/tdf106950.rtf | 8 + sw/qa/extras/rtfexport/data/tdf106953.rtf | 23 + sw/qa/extras/rtfexport/data/tdf107116.rtf | 10 + sw/qa/extras/rtfexport/data/tdf107413.rtf | 155 + sw/qa/extras/rtfexport/data/tdf107480.rtf | 17 + sw/qa/extras/rtfexport/data/tdf107620.docx | Bin 0 -> 12654 bytes sw/qa/extras/rtfexport/data/tdf108123.rtf | 48 + sw/qa/extras/rtfexport/data/tdf108416.rtf | 18 + sw/qa/extras/rtfexport/data/tdf108949_footnote.rtf | 15 + .../data/tdf108949_footnoteCharFormat.odt | Bin 0 -> 14038 bytes sw/qa/extras/rtfexport/data/tdf108955.rtf | 11 + sw/qa/extras/rtfexport/data/tdf109790.rtf | 16 + sw/qa/extras/rtfexport/data/tdf111851.rtf | 17 + .../rtfexport/data/tdf112208_hangingIndent.rtf | 89 + sw/qa/extras/rtfexport/data/tdf112211.rtf | 31 + sw/qa/extras/rtfexport/data/tdf112507.rtf | 38 + sw/qa/extras/rtfexport/data/tdf112520.docx | Bin 0 -> 13279 bytes sw/qa/extras/rtfexport/data/tdf113202.rtf | 42 + sw/qa/extras/rtfexport/data/tdf113408.rtf | 24 + sw/qa/extras/rtfexport/data/tdf113550.rtf | 17 + sw/qa/extras/rtfexport/data/tdf114303.rtf | 11 + sw/qa/extras/rtfexport/data/tdf114309.rtf | 40 + sw/qa/extras/rtfexport/data/tdf114333.rtf | 5 + sw/qa/extras/rtfexport/data/tdf115180.docx | Bin 0 -> 10151 bytes sw/qa/extras/rtfexport/data/tdf116358.rtf | 116 + sw/qa/extras/rtfexport/data/tdf116371.odt | Bin 0 -> 13384 bytes .../rtfexport/data/tdf116436_tableBackground.odt | Bin 0 -> 10745 bytes sw/qa/extras/rtfexport/data/tdf116841.rtf | 16 + sw/qa/extras/rtfexport/data/tdf117268.rtf | 35 + sw/qa/extras/rtfexport/data/tdf117505.odt | Bin 0 -> 19263 bytes sw/qa/extras/rtfexport/data/tdf118047.rtf | 14 + sw/qa/extras/rtfexport/data/tdf121623.rtf | 165 + sw/qa/extras/rtfexport/data/tdf122455.rtf | 21 + .../rtfexport/data/tdf122589_firstSection.odt | Bin 0 -> 17950 bytes sw/qa/extras/rtfexport/data/tdf123393.rtf | 14 + sw/qa/extras/rtfexport/data/tdf123703.rtf | 31 + .../extras/rtfexport/data/tdf123703_compatible.rtf | 37 + .../extras/rtfexport/data/tdf123703_stshfdbch.rtf | 31 + sw/qa/extras/rtfexport/data/tdf125719_case_1.rtf | 108 + sw/qa/extras/rtfexport/data/tdf125719_case_2.rtf | 139 + sw/qa/extras/rtfexport/data/tdf126309.rtf | 8 + sw/qa/extras/rtfexport/data/tdf127806.rtf | 86 + sw/qa/extras/rtfexport/data/tdf128320.odt | Bin 0 -> 31978 bytes .../data/tdf128428_compatible_monospaced.rtf | 38 + .../extras/rtfexport/data/tdf128428_dntblnsbdb.rtf | 31 + .../extras/rtfexport/data/tdf128428_monospaced.rtf | 33 + sw/qa/extras/rtfexport/data/tdf129513.rtf | 4 + .../rtfexport/data/tdf129522_removeShadowStyle.odt | Bin 0 -> 14253 bytes sw/qa/extras/rtfexport/data/tdf129578_lostBI.rtf | 31 + .../rtfexport/data/tdf129631_lostBorders.rtf | 27 + .../rtfexport/data/tdf129631_lostBorders3.rtf | 27 + sw/qa/extras/rtfexport/data/tdf130817.rtf | 82 + sw/qa/extras/rtfexport/data/tdf131234.rtf | 12 + sw/qa/extras/rtfexport/data/tdf133437.rtf | 571 +++ .../rtfexport/data/tdf136587_noStyleName.rtf | 13 + sw/qa/extras/rtfexport/data/tdf137085.rtf | 10 + .../rtfexport/data/tdf137683_charHighlightNone.rtf | 18 + sw/qa/extras/rtfexport/data/tdf137894.odt | Bin 0 -> 11723 bytes sw/qa/extras/rtfexport/data/tdf138210.rtf | Bin 0 -> 1281 bytes sw/qa/extras/rtfexport/data/tdf138779.docx | Bin 0 -> 16556 bytes sw/qa/extras/rtfexport/data/tdf139948.rtf | 8 + sw/qa/extras/rtfexport/data/tdf141964_numId0.rtf | 42 + sw/qa/extras/rtfexport/data/tdf144437.odt | Bin 0 -> 8514 bytes sw/qa/extras/rtfexport/data/tdf146489.rtf | 56 + sw/qa/extras/rtfexport/data/tdf148515.rtf | 14 + sw/qa/extras/rtfexport/data/tdf150267.rtf | 209 + sw/qa/extras/rtfexport/data/tdf151370.rtf | 3 + sw/qa/extras/rtfexport/data/tdf44986.rtf | 35 + sw/qa/extras/rtfexport/data/tdf49073.rtf | 112 + sw/qa/extras/rtfexport/data/tdf50821.rtf | 10 + sw/qa/extras/rtfexport/data/tdf54584.rtf | 4 + sw/qa/extras/rtfexport/data/tdf61901.rtf | 7 + sw/qa/extras/rtfexport/data/tdf65642.rtf | 23 + sw/qa/extras/rtfexport/data/tdf66543.rtf | 8 + sw/qa/extras/rtfexport/data/tdf74795.rtf | 13 + sw/qa/extras/rtfexport/data/tdf75614.rtf | 18 + sw/qa/extras/rtfexport/data/tdf77349.rtf | 3 + sw/qa/extras/rtfexport/data/tdf80708.rtf | 15 + sw/qa/extras/rtfexport/data/tdf82073.rtf | 9 + sw/qa/extras/rtfexport/data/tdf84832.docx | Bin 0 -> 11875 bytes sw/qa/extras/rtfexport/data/tdf86182.rtf | 4 + sw/qa/extras/rtfexport/data/tdf86814.rtf | 8 + sw/qa/extras/rtfexport/data/tdf87034.rtf | 13 + sw/qa/extras/rtfexport/data/tdf88583.odt | Bin 0 -> 8471 bytes sw/qa/extras/rtfexport/data/tdf88811.rtf | 26 + sw/qa/extras/rtfexport/data/tdf90260-nopar.rtf | 2 + sw/qa/extras/rtfexport/data/tdf90421.fodt | 8 + sw/qa/extras/rtfexport/data/tdf90697.rtf | 73 + sw/qa/extras/rtfexport/data/tdf91074.rtf | 7 + sw/qa/extras/rtfexport/data/tdf92061.rtf | 5 + sw/qa/extras/rtfexport/data/tdf92481.rtf | 6 + sw/qa/extras/rtfexport/data/tdf92521.odt | Bin 0 -> 8891 bytes sw/qa/extras/rtfexport/data/tdf94043.rtf | 17 + sw/qa/extras/rtfexport/data/tdf94377.rtf | 15 + sw/qa/extras/rtfexport/data/tdf94435.rtf | 7 + sw/qa/extras/rtfexport/data/tdf94456.rtf | 23 + sw/qa/extras/rtfexport/data/tdf95706.rtf | 36 + sw/qa/extras/rtfexport/data/tdf95706_2.rtf | 17 + sw/qa/extras/rtfexport/data/tdf95707.rtf | 178 + sw/qa/extras/rtfexport/data/tdf96175.rtf | 6 + sw/qa/extras/rtfexport/data/tdf96275.rtf | 18 + sw/qa/extras/rtfexport/data/tdf96308-deftab.rtf | 8 + sw/qa/extras/rtfexport/data/tdf97035.rtf | 140 + sw/qa/extras/rtfexport/data/tdf98806.rtf | 11 + sw/qa/extras/rtfexport/data/textframe-borders.rtf | 49 + sw/qa/extras/rtfexport/data/textframe-gradient.rtf | 161 + sw/qa/extras/rtfexport/data/textframe-table.rtf | 41 + sw/qa/extras/rtfexport/data/textframes.odt | Bin 0 -> 8853 bytes sw/qa/extras/rtfexport/data/ulw.rtf | 1 + sw/qa/extras/rtfexport/data/watermark.rtf | 660 +++ sw/qa/extras/rtfexport/data/zoom.rtf | 1 + sw/qa/extras/rtfexport/rtfexport.cxx | 1457 ++++++ sw/qa/extras/rtfexport/rtfexport2.cxx | 954 ++++ sw/qa/extras/rtfexport/rtfexport3.cxx | 520 +++ sw/qa/extras/rtfexport/rtfexport4.cxx | 810 ++++ sw/qa/extras/rtfexport/rtfexport5.cxx | 1400 ++++++ sw/qa/extras/rtfimport/data/background.rtf | 39 + sw/qa/extras/rtfimport/data/behind-doc.rtf | 19 + sw/qa/extras/rtfimport/data/chtoutline.rtf | 207 + sw/qa/extras/rtfimport/data/classification-no.rtf | 1 + sw/qa/extras/rtfimport/data/classification-yes.rtf | 11 + sw/qa/extras/rtfimport/data/column-break.rtf | 1 + .../rtfimport/data/cont-section-pagebreak.rtf | 16 + .../extras/rtfimport/data/cp950listleveltext1.rtf | 196 + .../extras/rtfimport/data/cp950listleveltext2.rtf | 177 + .../extras/rtfimport/data/cp950listleveltext3.rtf | 177 + sw/qa/extras/rtfimport/data/default-values.rtf | 18 + sw/qa/extras/rtfimport/data/fdo44984.rtf | 30 + sw/qa/extras/rtfimport/data/fdo45182.rtf | 11 + sw/qa/extras/rtfimport/data/fdo45183.rtf | 34 + sw/qa/extras/rtfimport/data/fdo45190.rtf | 10 + sw/qa/extras/rtfimport/data/fdo46662.rtf | 46 + sw/qa/extras/rtfimport/data/fdo47036.rtf | 73 + sw/qa/extras/rtfimport/data/fdo47440.rtf | 27 + sw/qa/extras/rtfimport/data/fdo48442.rtf | 10 + sw/qa/extras/rtfimport/data/fdo49692.rtf | 17 + sw/qa/extras/rtfimport/data/fdo49892.rtf | 238 + sw/qa/extras/rtfimport/data/fdo49893-3.rtf | 15 + sw/qa/extras/rtfimport/data/fdo49893.rtf | 14 + sw/qa/extras/rtfimport/data/fdo52052.rtf | 23 + sw/qa/extras/rtfimport/data/fdo52066.rtf | 21 + sw/qa/extras/rtfimport/data/fdo53556.rtf | 49 + sw/qa/extras/rtfimport/data/fdo55525.rtf | 12 + sw/qa/extras/rtfimport/data/fdo57708.rtf | 8 + sw/qa/extras/rtfimport/data/fdo59953.rtf | 16 + sw/qa/extras/rtfimport/data/fdo66565.rtf | 35 + sw/qa/extras/rtfimport/data/fdo67365.rtf | 35 + sw/qa/extras/rtfimport/data/fdo68291-paste.rtf | 17 + sw/qa/extras/rtfimport/data/fdo68291.odt | Bin 0 -> 8237 bytes sw/qa/extras/rtfimport/data/fdo74599.rtf | 8 + sw/qa/extras/rtfimport/data/fdo74823.rtf | 32 + sw/qa/extras/rtfimport/data/fdo79319.rtf | 60 + sw/qa/extras/rtfimport/data/fdo80742.rtf | 6 + sw/qa/extras/rtfimport/data/fdo81033.rtf | 12 + sw/qa/extras/rtfimport/data/fdo81944.rtf | 15 + sw/qa/extras/rtfimport/data/fdo82071.rtf | 46 + sw/qa/extras/rtfimport/data/fdo82114.rtf | 14 + sw/qa/extras/rtfimport/data/fdo82512.rtf | 10 + sw/qa/extras/rtfimport/data/fdo84685.rtf | 7 + sw/qa/extras/rtfimport/data/fdo85179.rtf | 37 + sw/qa/extras/rtfimport/data/fdo85812.rtf | 39 + sw/qa/extras/rtfimport/data/flip.rtf | 96 + sw/qa/extras/rtfimport/data/groupshape-notext.rtf | 71 + .../extras/rtfimport/data/groupshape-rotation.rtf | 75 + sw/qa/extras/rtfimport/data/groupshape.rtf | 76 + sw/qa/extras/rtfimport/data/hello.rtf | 1 + sw/qa/extras/rtfimport/data/ink.rtf | 157 + sw/qa/extras/rtfimport/data/libreoffice.png | Bin 0 -> 767 bytes sw/qa/extras/rtfimport/data/lndscpsxn.rtf | 17 + sw/qa/extras/rtfimport/data/n695479.rtf | 14 + sw/qa/extras/rtfimport/data/n823655.rtf | 48 + sw/qa/extras/rtfimport/data/n823675.rtf | 27 + sw/qa/extras/rtfimport/data/ole-inline.rtf | 188 + .../rtfimport/data/para-style-bottom-margin.rtf | 14 + .../data/paste-first-para-direct-format.rtf | 21 + sw/qa/extras/rtfimport/data/posh-leftright.rtf | 45 + sw/qa/extras/rtfimport/data/posh-posv.rtf | 24 + sw/qa/extras/rtfimport/data/sbkeven.rtf | 10 + sw/qa/extras/rtfimport/data/sbkodd.rtf | 10 + sw/qa/extras/rtfimport/data/tdf104016.rtf | 30 + sw/qa/extras/rtfimport/data/tdf105511.rtf | 4 + sw/qa/extras/rtfimport/data/tdf108055.rtf | 232 + sw/qa/extras/rtfimport/data/tdf108943.rtf | 24 + sw/qa/extras/rtfimport/data/tdf108947.rtf | 113 + sw/qa/extras/rtfimport/data/tdf108951.rtf | 38 + sw/qa/extras/rtfimport/data/tdf112211-2.rtf | 43 + sw/qa/extras/rtfimport/data/tdf115153.rtf | 9 + sw/qa/extras/rtfimport/data/tdf115155.rtf | 30 + sw/qa/extras/rtfimport/data/tdf115242.rtf | 40 + sw/qa/extras/rtfimport/data/tdf115715.rtf | 38 + sw/qa/extras/rtfimport/data/tdf116265.rtf | 28 + sw/qa/extras/rtfimport/data/tdf116269.rtf | 22 + sw/qa/extras/rtfimport/data/tdf117246.rtf | 11 + sw/qa/extras/rtfimport/data/tdf117403.rtf | 15 + sw/qa/extras/rtfimport/data/tdf119599.rtf | 9 + sw/qa/extras/rtfimport/data/tdf122430.rtf | 31 + sw/qa/extras/rtfimport/data/tdf126173.rtf | 85 + sw/qa/extras/rtfimport/data/tdf128611.rtf | 29 + sw/qa/extras/rtfimport/data/tdf59454.rtf | 8 + sw/qa/extras/rtfimport/data/tdf59699.rtf | 10 + sw/qa/extras/rtfimport/data/tdf78506.rtf | 24 + sw/qa/extras/rtfimport/data/tdf81943.rtf | 48 + sw/qa/extras/rtfimport/data/tdf84684.rtf | 399 ++ sw/qa/extras/rtfimport/data/tdf90046.rtf | 8 + sw/qa/extras/rtfimport/data/tdf90097.rtf | 162 + sw/qa/extras/rtfimport/data/tdf90260-par.rtf | 2 + sw/qa/extras/rtfimport/data/tdf90315.rtf | 4 + sw/qa/extras/rtfimport/data/tdf91684.rtf | 460 ++ sw/qa/extras/rtfimport/data/tdf96308-tabpos.rtf | 12 + sw/qa/extras/rtfimport/data/tdf96326.rtf | 27 + sw/qa/extras/rtfimport/data/tdf99498.rtf | 3 + .../rtfimport/data/unbalanced-columns-compat.rtf | 7 + sw/qa/extras/rtfimport/data/unbalanced-columns.rtf | 5 + sw/qa/extras/rtfimport/data/watermark.rtf | 407 ++ sw/qa/extras/rtfimport/data/wrap-distance.rtf | 69 + sw/qa/extras/rtfimport/rtfimport.cxx | 1674 +++++++ sw/qa/extras/tiledrendering/data/2-pages.odt | Bin 0 -> 8596 bytes .../extras/tiledrendering/data/cond-coll-copy.odt | Bin 0 -> 7351 bytes .../extras/tiledrendering/data/content-control.odt | Bin 0 -> 9683 bytes .../tiledrendering/data/drop_down_form_field.odt | Bin 0 -> 8596 bytes .../tiledrendering/data/drop_down_form_field2.odt | Bin 0 -> 8596 bytes .../data/drop_down_form_field_noitem.odt | Bin 0 -> 8467 bytes .../data/drop_down_form_field_noselection.odt | Bin 0 -> 8512 bytes sw/qa/extras/tiledrendering/data/dummy.fodt | 8 + sw/qa/extras/tiledrendering/data/estonian.odt | Bin 0 -> 11615 bytes sw/qa/extras/tiledrendering/data/fieldmark.docx | Bin 0 -> 13174 bytes sw/qa/extras/tiledrendering/data/frame.odt | Bin 0 -> 8370 bytes sw/qa/extras/tiledrendering/data/hyperlink.odt | Bin 0 -> 9154 bytes sw/qa/extras/tiledrendering/data/image-comment.odt | Bin 0 -> 9765 bytes .../tiledrendering/data/pagedown-invalidation.odt | Bin 0 -> 8528 bytes .../tiledrendering/data/pilcrow-redlining.fodt | 62 + .../data/redline-notification-during-save.odt | Bin 0 -> 6786 bytes .../data/removenode_redline_callback.fodt | 306 ++ sw/qa/extras/tiledrendering/data/search.odt | Bin 0 -> 11324 bytes .../tiledrendering/data/semi-transparent.odt | Bin 0 -> 8891 bytes .../tiledrendering/data/shape-with-text.fodt | 17 + sw/qa/extras/tiledrendering/data/shape.fodt | 33 + .../data/splitnode_redline_callback.fodt | 294 ++ .../tiledrendering/data/table-paint-invalidate.odt | Bin 0 -> 9067 bytes .../tiledrendering/data/tdf114799_highlight.docx | Bin 0 -> 29040 bytes .../extras/tiledrendering/data/tdf114799_shd.docx | Bin 0 -> 29049 bytes sw/qa/extras/tiledrendering/data/tdf115088.odt | Bin 0 -> 8108 bytes sw/qa/extras/tiledrendering/data/tdf117448.fodt | 30 + .../data/tdf43244_SpacesOnMargin.odt | Bin 0 -> 9791 bytes sw/qa/extras/tiledrendering/tiledrendering.cxx | 3716 +++++++++++++++ sw/qa/extras/txtencexport/data/bullets.odt | Bin 0 -> 10827 bytes sw/qa/extras/txtencexport/txtencexport.cxx | 99 + sw/qa/extras/txtexport/data/UTF16LEBOMCRLF.txt | Bin 0 -> 18 bytes sw/qa/extras/txtexport/data/UTF16LECRLF.txt | Bin 0 -> 16 bytes sw/qa/extras/txtexport/data/UTF8BOMCRLF.txt | 2 + sw/qa/extras/txtexport/data/UTF8CRLF.txt | 2 + sw/qa/extras/txtexport/data/bullets.odt | Bin 0 -> 10379 bytes sw/qa/extras/txtexport/txtexport.cxx | 144 + sw/qa/extras/txtimport/data/GB18030.txt | 1 + sw/qa/extras/txtimport/data/UTF16BEWITHBOM.txt | Bin 0 -> 1290 bytes sw/qa/extras/txtimport/data/UTF16BEWITHOUTBOM.txt | Bin 0 -> 1288 bytes sw/qa/extras/txtimport/data/UTF16LEWITHBOM.txt | Bin 0 -> 1290 bytes sw/qa/extras/txtimport/data/UTF16LEWITHOUTBOM.txt | Bin 0 -> 1288 bytes sw/qa/extras/txtimport/data/UTF8WITHBOM.txt | 2 + sw/qa/extras/txtimport/data/UTF8WITHOUTBOM.txt | 2 + sw/qa/extras/txtimport/data/bullets.odt | Bin 0 -> 10379 bytes sw/qa/extras/txtimport/txtimport.cxx | 194 + sw/qa/extras/uiwriter/data/AsCharTxBxTest.docx | Bin 0 -> 19888 bytes sw/qa/extras/uiwriter/data/AtPageTextBoxCrash.odt | Bin 0 -> 9880 bytes sw/qa/extras/uiwriter/data/DUMMY.odm | Bin 0 -> 8336 bytes sw/qa/extras/uiwriter/data/DUMMY1.odt | Bin 0 -> 8473 bytes sw/qa/extras/uiwriter/data/HiddenSection.odt | Bin 0 -> 8378 bytes .../uiwriter/data/MsWordCompTrailingBlanks.docx | Bin 0 -> 14629 bytes .../data/MsWordCompTrailingBlanksFalse.odt | Bin 0 -> 8629 bytes .../uiwriter/data/MsWordCompTrailingBlanksTrue.odt | Bin 0 -> 8628 bytes sw/qa/extras/uiwriter/data/TC-table-DnD-move.docx | Bin 0 -> 12977 bytes .../uiwriter/data/TC-table-converttotable.docx | Bin 0 -> 14913 bytes sw/qa/extras/uiwriter/data/TC-table-del-add.docx | Bin 0 -> 13681 bytes sw/qa/extras/uiwriter/data/TC-table-rowadd.docx | Bin 0 -> 13050 bytes sw/qa/extras/uiwriter/data/autotext-dotm.dotm | Bin 0 -> 19456 bytes sw/qa/extras/uiwriter/data/autotext-empty.dotx | Bin 0 -> 11390 bytes sw/qa/extras/uiwriter/data/autotext-gallery.dotx | Bin 0 -> 18550 bytes sw/qa/extras/uiwriter/data/autotext-multiple.dotx | Bin 0 -> 18470 bytes sw/qa/extras/uiwriter/data/collapsed_bookmark.odt | Bin 0 -> 8199 bytes sw/qa/extras/uiwriter/data/commented-word.odt | Bin 0 -> 9953 bytes sw/qa/extras/uiwriter/data/cp1000071.odt | Bin 0 -> 9268 bytes sw/qa/extras/uiwriter/data/cp1000115.fodt | 208 + .../uiwriter/data/cross_reference_demo_bmk.odt | Bin 0 -> 8443 bytes sw/qa/extras/uiwriter/data/datasource.ods | Bin 0 -> 9596 bytes sw/qa/extras/uiwriter/data/demo91.fodt | 156 + sw/qa/extras/uiwriter/data/draw-anchor-undo.odt | Bin 0 -> 9823 bytes sw/qa/extras/uiwriter/data/fdo112025-insert.docx | Bin 0 -> 4090 bytes sw/qa/extras/uiwriter/data/fdo112025.odt | Bin 0 -> 8836 bytes sw/qa/extras/uiwriter/data/fdo114306.odt | Bin 0 -> 17107 bytes sw/qa/extras/uiwriter/data/fdo114306_2.odt | Bin 0 -> 38424 bytes sw/qa/extras/uiwriter/data/fdo69893.odt | Bin 0 -> 7178 bytes sw/qa/extras/uiwriter/data/fdo70807.odt | Bin 0 -> 22693 bytes sw/qa/extras/uiwriter/data/fdo72942-insert.docx | Bin 0 -> 11830 bytes sw/qa/extras/uiwriter/data/fdo72942.docx | Bin 0 -> 4980 bytes sw/qa/extras/uiwriter/data/fdo75110.odt | Bin 0 -> 13169 bytes sw/qa/extras/uiwriter/data/fdo75898.odt | Bin 0 -> 9446 bytes sw/qa/extras/uiwriter/data/fdo82191.odt | Bin 0 -> 10888 bytes sw/qa/extras/uiwriter/data/fdo85554.odt | Bin 0 -> 10091 bytes sw/qa/extras/uiwriter/data/fdo87448.odt | Bin 0 -> 9989 bytes .../uiwriter/data/floating-table-position.docx | Bin 0 -> 13236 bytes .../data/floating_table/small_floating_table.odt | Bin 0 -> 8977 bytes .../floating_table/unfloatable_floating_table.doc | Bin 0 -> 69120 bytes .../floating_table/unfloatable_floating_table.docx | Bin 0 -> 14282 bytes .../floating_table/unfloatable_floating_table.odt | Bin 0 -> 9331 bytes .../unfloatable_small_floating_table.docx | Bin 0 -> 13381 bytes .../uiwriter/data/hash#path/calc-data-source.ods | Bin 0 -> 16055 bytes .../data/hash#path/embedded-data-source.odt | Bin 0 -> 9554 bytes sw/qa/extras/uiwriter/data/hello-world.pdf | Bin 0 -> 6961 bytes sw/qa/extras/uiwriter/data/i95698.odt | Bin 0 -> 10770 bytes .../extras/uiwriter/data/image-comment-at-char.odt | Bin 0 -> 9985 bytes sw/qa/extras/uiwriter/data/image-comment.odt | Bin 0 -> 9847 bytes sw/qa/extras/uiwriter/data/image.odt | Bin 0 -> 9569 bytes .../uiwriter/data/lines-in-section-in-table.odt | Bin 0 -> 9396 bytes sw/qa/extras/uiwriter/data/lorem.fodt | 14 + sw/qa/extras/uiwriter/data/merge-change1.odt | Bin 0 -> 12057 bytes sw/qa/extras/uiwriter/data/merge-change2.odt | Bin 0 -> 12300 bytes sw/qa/extras/uiwriter/data/num-parent-style.docx | Bin 0 -> 14002 bytes sw/qa/extras/uiwriter/data/ofz18563.docx | Bin 0 -> 7102 bytes sw/qa/extras/uiwriter/data/ole-save-while-edit.odt | Bin 0 -> 14547 bytes sw/qa/extras/uiwriter/data/ole2.png | Bin 0 -> 766 bytes .../uiwriter/data/paragraph-of-text-range.odt | Bin 0 -> 8878 bytes .../extras/uiwriter/data/redline-autocorrect.fodt | 24 + .../extras/uiwriter/data/redline-autocorrect2.fodt | 24 + sw/qa/extras/uiwriter/data/redline-para-join.docx | Bin 0 -> 13090 bytes sw/qa/extras/uiwriter/data/redlineFrame.fodt | 81 + .../data/redlineFrame_at_char_start_inside.fodt | 73 + .../data/redlineFrame_at_char_start_outside.fodt | 73 + .../data/redline_fly_at_para_one_paragraph.odt | Bin 0 -> 9251 bytes ...line_fly_duplication_at_para_2nd_paragraph.fodt | 222 + ...redline_fly_duplication_at_para_end_inside.fodt | 228 + ...line_fly_duplication_at_para_start_outside.fodt | 229 + sw/qa/extras/uiwriter/data/rhbz1810732.docx | Bin 0 -> 12107 bytes sw/qa/extras/uiwriter/data/rhbz739252-3.odt | Bin 0 -> 20869 bytes sw/qa/extras/uiwriter/data/shape-page-move.odt | Bin 0 -> 10137 bytes .../uiwriter/data/shape-textbox-autosize.odt | Bin 0 -> 12356 bytes .../uiwriter/data/shape-textbox-vertadjust.odt | Bin 0 -> 12049 bytes sw/qa/extras/uiwriter/data/shape-textbox.odt | Bin 0 -> 10689 bytes sw/qa/extras/uiwriter/data/simplefooter.docx | Bin 0 -> 18174 bytes .../data/split-section-in-nested-table.fodt | 154 + sw/qa/extras/uiwriter/data/table-in-sect.odt | Bin 0 -> 11744 bytes sw/qa/extras/uiwriter/data/tdf100018-1.odt | Bin 0 -> 18795 bytes sw/qa/extras/uiwriter/data/tdf100691.fodt | 230 + sw/qa/extras/uiwriter/data/tdf101534.fodt | 28 + .../data/tdf103978_backgroundTextShape.docx | Bin 0 -> 26058 bytes sw/qa/extras/uiwriter/data/tdf104032.odt | Bin 0 -> 8967 bytes sw/qa/extras/uiwriter/data/tdf104425.odt | Bin 0 -> 9459 bytes sw/qa/extras/uiwriter/data/tdf104440.odt | Bin 0 -> 8807 bytes sw/qa/extras/uiwriter/data/tdf104492.docx | Bin 0 -> 61554 bytes sw/qa/extras/uiwriter/data/tdf104649.docx | Bin 0 -> 75971 bytes sw/qa/extras/uiwriter/data/tdf104814.docx | Bin 0 -> 12830 bytes sw/qa/extras/uiwriter/data/tdf105330.odt | Bin 0 -> 8970 bytes sw/qa/extras/uiwriter/data/tdf105413.fodt | 38 + sw/qa/extras/uiwriter/data/tdf105417.odt | Bin 0 -> 9238 bytes sw/qa/extras/uiwriter/data/tdf105625.fodt | 9 + .../data/tdf106701_tabOverMarginAutotab.doc | Bin 0 -> 21504 bytes sw/qa/extras/uiwriter/data/tdf106736-grid.odt | Bin 0 -> 11498 bytes sw/qa/extras/uiwriter/data/tdf106843.docx | Bin 0 -> 13936 bytes sw/qa/extras/uiwriter/data/tdf107025.odt | Bin 0 -> 8337 bytes sw/qa/extras/uiwriter/data/tdf107362.odt | Bin 0 -> 10905 bytes sw/qa/extras/uiwriter/data/tdf107893.odt | Bin 0 -> 9133 bytes sw/qa/extras/uiwriter/data/tdf107975.odt | Bin 0 -> 10312 bytes sw/qa/extras/uiwriter/data/tdf108124.odt | Bin 0 -> 21575 bytes sw/qa/extras/uiwriter/data/tdf108524.odt | Bin 0 -> 9053 bytes sw/qa/extras/uiwriter/data/tdf108687_tabstop.odt | Bin 0 -> 12847 bytes sw/qa/extras/uiwriter/data/tdf112109.fodt | 170 + sw/qa/extras/uiwriter/data/tdf112160.fodt | 125 + sw/qa/extras/uiwriter/data/tdf112342.docx | Bin 0 -> 19601 bytes sw/qa/extras/uiwriter/data/tdf112448.odt | Bin 0 -> 10574 bytes sw/qa/extras/uiwriter/data/tdf112741.fodt | 405 ++ sw/qa/extras/uiwriter/data/tdf112860.fodt | 1394 ++++++ sw/qa/extras/uiwriter/data/tdf113153.fodt | 677 +++ sw/qa/extras/uiwriter/data/tdf113287.fodt | 291 ++ sw/qa/extras/uiwriter/data/tdf113445.fodt | 348 ++ sw/qa/extras/uiwriter/data/tdf113481-IVS.odt | Bin 0 -> 9571 bytes sw/qa/extras/uiwriter/data/tdf113520.fodt | 292 ++ sw/qa/extras/uiwriter/data/tdf113686.fodt | 278 ++ sw/qa/extras/uiwriter/data/tdf113790.docx | Bin 0 -> 5155 bytes .../uiwriter/data/tdf113877_blank_bold_off.odt | Bin 0 -> 8742 bytes .../uiwriter/data/tdf113877_blank_bold_on.odt | Bin 0 -> 9349 bytes .../uiwriter/data/tdf113877_blank_ownStandard.odt | Bin 0 -> 8886 bytes .../data/tdf113877_insert_numbered_list.odt | Bin 0 -> 7617 bytes .../data/tdf113877_insert_numbered_list_abcd.odt | Bin 0 -> 8518 bytes sw/qa/extras/uiwriter/data/tdf114536.odt | Bin 0 -> 13623 bytes sw/qa/extras/uiwriter/data/tdf115065.odt | Bin 0 -> 9972 bytes sw/qa/extras/uiwriter/data/tdf115815.odt | Bin 0 -> 9809 bytes .../uiwriter/data/tdf116403-considerborders.odt | Bin 0 -> 9284 bytes sw/qa/extras/uiwriter/data/tdf116789.fodt | 27 + sw/qa/extras/uiwriter/data/tdf117225.odt | Bin 0 -> 11015 bytes sw/qa/extras/uiwriter/data/tdf117923.docx | Bin 0 -> 21227 bytes sw/qa/extras/uiwriter/data/tdf118311.fodt | 19 + sw/qa/extras/uiwriter/data/tdf118699.docx | Bin 0 -> 21417 bytes sw/qa/extras/uiwriter/data/tdf119019.docx | Bin 0 -> 13665 bytes sw/qa/extras/uiwriter/data/tdf120336.docx | Bin 0 -> 21892 bytes sw/qa/extras/uiwriter/data/tdf120338.docx | Bin 0 -> 14898 bytes sw/qa/extras/uiwriter/data/tdf121546.odt | Bin 0 -> 10044 bytes sw/qa/extras/uiwriter/data/tdf122942.odt | Bin 0 -> 9864 bytes sw/qa/extras/uiwriter/data/tdf123102.odt | Bin 0 -> 13674 bytes sw/qa/extras/uiwriter/data/tdf123285.odt | Bin 0 -> 11762 bytes sw/qa/extras/uiwriter/data/tdf123786.fodt | 14 + sw/qa/extras/uiwriter/data/tdf124397.docx | Bin 0 -> 29518 bytes sw/qa/extras/uiwriter/data/tdf124722.rtf | 873 ++++ sw/qa/extras/uiwriter/data/tdf124904.fodt | 40 + .../extras/uiwriter/data/tdf125151_protected.fodt | 11 + .../extras/uiwriter/data/tdf125151_protectedB.fodt | 14 + sw/qa/extras/uiwriter/data/tdf125261.odt | Bin 0 -> 8900 bytes sw/qa/extras/uiwriter/data/tdf125310.fodt | 23 + sw/qa/extras/uiwriter/data/tdf125310b.fodt | 24 + sw/qa/extras/uiwriter/data/tdf125881.docx | Bin 0 -> 34448 bytes sw/qa/extras/uiwriter/data/tdf125916.docx | Bin 0 -> 40570 bytes sw/qa/extras/uiwriter/data/tdf126206.docx | Bin 0 -> 12509 bytes sw/qa/extras/uiwriter/data/tdf126340.odt | Bin 0 -> 9910 bytes sw/qa/extras/uiwriter/data/tdf126504.odt | Bin 0 -> 9266 bytes sw/qa/extras/uiwriter/data/tdf126626.docx | Bin 0 -> 16513 bytes .../data/tdf126784_distributeSelectedColumns.odt | Bin 0 -> 21302 bytes sw/qa/extras/uiwriter/data/tdf127652.odt | Bin 0 -> 26963 bytes sw/qa/extras/uiwriter/data/tdf128335.odt | Bin 0 -> 10391 bytes sw/qa/extras/uiwriter/data/tdf128375.docx | Bin 0 -> 6296 bytes sw/qa/extras/uiwriter/data/tdf128603.odt | Bin 0 -> 10391 bytes sw/qa/extras/uiwriter/data/tdf128739.docx | Bin 0 -> 4375 bytes sw/qa/extras/uiwriter/data/tdf128782.odt | Bin 0 -> 8817 bytes sw/qa/extras/uiwriter/data/tdf128860.fodt | 14 + sw/qa/extras/uiwriter/data/tdf129270.odt | Bin 0 -> 9301 bytes sw/qa/extras/uiwriter/data/tdf129382.docx | Bin 0 -> 112383 bytes sw/qa/extras/uiwriter/data/tdf129655-vtextbox.odt | Bin 0 -> 9958 bytes sw/qa/extras/uiwriter/data/tdf129805.docx | Bin 0 -> 20783 bytes sw/qa/extras/uiwriter/data/tdf130094.fodt | 177 + sw/qa/extras/uiwriter/data/tdf130680.odt | Bin 0 -> 97412 bytes sw/qa/extras/uiwriter/data/tdf130685.odt | Bin 0 -> 24714 bytes sw/qa/extras/uiwriter/data/tdf130746.odt | Bin 0 -> 9378 bytes sw/qa/extras/uiwriter/data/tdf130805.odt | Bin 0 -> 9392 bytes sw/qa/extras/uiwriter/data/tdf131684.docx | Bin 0 -> 6506 bytes sw/qa/extras/uiwriter/data/tdf131963.docx | Bin 0 -> 34251 bytes sw/qa/extras/uiwriter/data/tdf132160.odt | Bin 0 -> 9501 bytes sw/qa/extras/uiwriter/data/tdf132187.odt | Bin 0 -> 10580 bytes sw/qa/extras/uiwriter/data/tdf132236.odt | Bin 0 -> 10140 bytes sw/qa/extras/uiwriter/data/tdf132321.odt | Bin 0 -> 9045 bytes sw/qa/extras/uiwriter/data/tdf132420.odt | Bin 0 -> 11766 bytes sw/qa/extras/uiwriter/data/tdf132596.docx | Bin 0 -> 11062 bytes sw/qa/extras/uiwriter/data/tdf132597.odt | Bin 0 -> 132875 bytes .../data/tdf132637_protectTrackChanges.doc | Bin 0 -> 26624 bytes sw/qa/extras/uiwriter/data/tdf132725.odt | Bin 0 -> 73108 bytes sw/qa/extras/uiwriter/data/tdf132744.odt | Bin 0 -> 13424 bytes sw/qa/extras/uiwriter/data/tdf132911.odt | Bin 0 -> 10980 bytes sw/qa/extras/uiwriter/data/tdf132944.odt | Bin 0 -> 9682 bytes sw/qa/extras/uiwriter/data/tdf133477.fodt | 21 + sw/qa/extras/uiwriter/data/tdf133490.odt | Bin 0 -> 9606 bytes sw/qa/extras/uiwriter/data/tdf133524.fodt | 14 + sw/qa/extras/uiwriter/data/tdf133524_ro.fodt | 14 + sw/qa/extras/uiwriter/data/tdf133589.fodt | 19 + sw/qa/extras/uiwriter/data/tdf133967.odt | Bin 0 -> 16689 bytes sw/qa/extras/uiwriter/data/tdf133982.docx | Bin 0 -> 11705 bytes sw/qa/extras/uiwriter/data/tdf133990.odt | Bin 0 -> 17859 bytes sw/qa/extras/uiwriter/data/tdf134021.docx | Bin 0 -> 23096 bytes sw/qa/extras/uiwriter/data/tdf134227.docx | Bin 0 -> 19455 bytes sw/qa/extras/uiwriter/data/tdf134250.fodt | 86 + sw/qa/extras/uiwriter/data/tdf134252.fodt | 95 + sw/qa/extras/uiwriter/data/tdf134253.odt | Bin 0 -> 46144 bytes sw/qa/extras/uiwriter/data/tdf134404.odt | Bin 0 -> 9928 bytes sw/qa/extras/uiwriter/data/tdf134436.fodt | 83 + sw/qa/extras/uiwriter/data/tdf134626.odt | Bin 0 -> 9136 bytes sw/qa/extras/uiwriter/data/tdf134931.odt | Bin 0 -> 9962 bytes sw/qa/extras/uiwriter/data/tdf134965.odt | Bin 0 -> 45482 bytes sw/qa/extras/uiwriter/data/tdf135056.odt | Bin 0 -> 19293 bytes sw/qa/extras/uiwriter/data/tdf135061.odt | Bin 0 -> 10767 bytes sw/qa/extras/uiwriter/data/tdf135412.docx | Bin 0 -> 22923 bytes sw/qa/extras/uiwriter/data/tdf135623.docx | Bin 0 -> 25768 bytes sw/qa/extras/uiwriter/data/tdf135661.odt | Bin 0 -> 10800 bytes sw/qa/extras/uiwriter/data/tdf135662.odt | Bin 0 -> 13627 bytes sw/qa/extras/uiwriter/data/tdf135733.odt | Bin 0 -> 11211 bytes sw/qa/extras/uiwriter/data/tdf136385.odt | Bin 0 -> 8759 bytes sw/qa/extras/uiwriter/data/tdf136452.fodt | 80 + sw/qa/extras/uiwriter/data/tdf136453.fodt | 66 + sw/qa/extras/uiwriter/data/tdf136715.odt | Bin 0 -> 11499 bytes sw/qa/extras/uiwriter/data/tdf136778.docx | Bin 0 -> 11761 bytes sw/qa/extras/uiwriter/data/tdf137964.odt | Bin 0 -> 9332 bytes sw/qa/extras/uiwriter/data/tdf138130.docx | Bin 0 -> 8977 bytes sw/qa/extras/uiwriter/data/tdf138482.docx | Bin 0 -> 18955 bytes sw/qa/extras/uiwriter/data/tdf139127.fodt | 45 + sw/qa/extras/uiwriter/data/tdf139638.odt | Bin 0 -> 14273 bytes sw/qa/extras/uiwriter/data/tdf139737.fodt | 306 ++ sw/qa/extras/uiwriter/data/tdf139843.odt | Bin 0 -> 38984 bytes sw/qa/extras/uiwriter/data/tdf140828.docx | Bin 0 -> 5393 bytes sw/qa/extras/uiwriter/data/tdf140975.docx | Bin 0 -> 5124 bytes sw/qa/extras/uiwriter/data/tdf141175.odt | Bin 0 -> 9574 bytes sw/qa/extras/uiwriter/data/tdf142130.fodt | 37 + sw/qa/extras/uiwriter/data/tdf142157.odt | Bin 0 -> 10242 bytes sw/qa/extras/uiwriter/data/tdf142196.fodt | 30 + sw/qa/extras/uiwriter/data/tdf142700.fodt | 40 + sw/qa/extras/uiwriter/data/tdf142715.odt | Bin 0 -> 11275 bytes sw/qa/extras/uiwriter/data/tdf143176.fodt | 20 + sw/qa/extras/uiwriter/data/tdf143244.odt | Bin 0 -> 9831 bytes .../uiwriter/data/tdf143760_ContourToWrapOff.docx | Bin 0 -> 19612 bytes sw/qa/extras/uiwriter/data/tdf143904.odt | Bin 0 -> 9763 bytes sw/qa/extras/uiwriter/data/tdf144058.fodt | 134 + sw/qa/extras/uiwriter/data/tdf144317.odt | Bin 0 -> 15696 bytes sw/qa/extras/uiwriter/data/tdf144748.fodt | 82 + sw/qa/extras/uiwriter/data/tdf144840.odt | Bin 0 -> 9334 bytes sw/qa/extras/uiwriter/data/tdf145091.docx | Bin 0 -> 4753 bytes sw/qa/extras/uiwriter/data/tdf145207.odt | Bin 0 -> 14033 bytes sw/qa/extras/uiwriter/data/tdf145311.fodt | 39 + sw/qa/extras/uiwriter/data/tdf145321.odt | Bin 0 -> 28467 bytes sw/qa/extras/uiwriter/data/tdf145621.odt | Bin 0 -> 9238 bytes sw/qa/extras/uiwriter/data/tdf145731.odt | Bin 0 -> 11459 bytes sw/qa/extras/uiwriter/data/tdf146449.odt | Bin 0 -> 21250 bytes sw/qa/extras/uiwriter/data/tdf147006.rtf | 24 + sw/qa/extras/uiwriter/data/tdf147126.docx | Bin 0 -> 39793 bytes sw/qa/extras/uiwriter/data/tdf147507.fodt | 77 + sw/qa/extras/uiwriter/data/tdf147723.docx | Bin 0 -> 22072 bytes sw/qa/extras/uiwriter/data/tdf148799.docx | Bin 0 -> 21690 bytes sw/qa/extras/uiwriter/data/tdf148849.fodt | 53 + sw/qa/extras/uiwriter/data/tdf149089.odt | Bin 0 -> 90383 bytes sw/qa/extras/uiwriter/data/tdf149550.docx | Bin 0 -> 29727 bytes sw/qa/extras/uiwriter/data/tdf151462.odt | Bin 0 -> 17719 bytes sw/qa/extras/uiwriter/data/tdf151993.docx | Bin 0 -> 11913 bytes sw/qa/extras/uiwriter/data/tdf153819.fodt | 174 + sw/qa/extras/uiwriter/data/tdf34957.odt | Bin 0 -> 19449 bytes .../uiwriter/data/tdf35021_tabOverMarginDemo.doc | Bin 0 -> 11264 bytes sw/qa/extras/uiwriter/data/tdf38394.fodt | 52 + sw/qa/extras/uiwriter/data/tdf39721.fodt | 42 + sw/qa/extras/uiwriter/data/tdf39828.fodt | 57 + sw/qa/extras/uiwriter/data/tdf45525.odt | Bin 0 -> 11985 bytes .../uiwriter/data/tdf47471_paraStyleBackground.odt | Bin 0 -> 13816 bytes sw/qa/extras/uiwriter/data/tdf50447.fodt | 26 + sw/qa/extras/uiwriter/data/tdf52391.fodt | 54 + sw/qa/extras/uiwriter/data/tdf54819.fodt | 9 + sw/qa/extras/uiwriter/data/tdf54819b.odt | Bin 0 -> 17538 bytes sw/qa/extras/uiwriter/data/tdf58604.odt | Bin 0 -> 9780 bytes sw/qa/extras/uiwriter/data/tdf61154.fodt | 132 + .../uiwriter/data/tdf64242_optimizeTable.odt | Bin 0 -> 11060 bytes sw/qa/extras/uiwriter/data/tdf66405.docx | Bin 0 -> 13857 bytes sw/qa/extras/uiwriter/data/tdf76636.doc | Bin 0 -> 13824 bytes sw/qa/extras/uiwriter/data/tdf76817.docx | Bin 0 -> 18584 bytes sw/qa/extras/uiwriter/data/tdf76817.fodt | 77 + sw/qa/extras/uiwriter/data/tdf77014.odt | Bin 0 -> 8161 bytes sw/qa/extras/uiwriter/data/tdf78727.docx | Bin 0 -> 15004 bytes sw/qa/extras/uiwriter/data/tdf83260-1.odt | Bin 0 -> 9422 bytes sw/qa/extras/uiwriter/data/tdf83798.odt | Bin 0 -> 9423 bytes sw/qa/extras/uiwriter/data/tdf84695-tab.odt | Bin 0 -> 9833 bytes sw/qa/extras/uiwriter/data/tdf84695.odt | Bin 0 -> 9769 bytes sw/qa/extras/uiwriter/data/tdf86639.rtf | 3 + sw/qa/extras/uiwriter/data/tdf87922.odt | Bin 0 -> 8866 bytes sw/qa/extras/uiwriter/data/tdf88453-table.odt | Bin 0 -> 27182 bytes sw/qa/extras/uiwriter/data/tdf88453.odt | Bin 0 -> 21235 bytes sw/qa/extras/uiwriter/data/tdf89720.odt | Bin 0 -> 11283 bytes sw/qa/extras/uiwriter/data/tdf89954.odt | Bin 0 -> 10022 bytes sw/qa/extras/uiwriter/data/tdf90003.odt | Bin 0 -> 8515 bytes sw/qa/extras/uiwriter/data/tdf90069.docx | Bin 0 -> 4737 bytes sw/qa/extras/uiwriter/data/tdf90362.fodt | 12 + sw/qa/extras/uiwriter/data/tdf90883.odt | Bin 0 -> 8759 bytes .../uiwriter/data/tdf91292_paraBackground.docx | Bin 0 -> 4262 bytes sw/qa/extras/uiwriter/data/tdf91801.fodt | 21 + sw/qa/extras/uiwriter/data/tdf92648.docx | Bin 0 -> 70406 bytes sw/qa/extras/uiwriter/data/tdf95699.odt | Bin 0 -> 8925 bytes sw/qa/extras/uiwriter/data/tdf96943.odt | Bin 0 -> 8797 bytes sw/qa/extras/uiwriter/data/tdf97601.odt | Bin 0 -> 14942 bytes sw/qa/extras/uiwriter/data/tdf98987.docx | Bin 0 -> 19509 bytes sw/qa/extras/uiwriter/data/tdf99004.docx | Bin 0 -> 18435 bytes sw/qa/extras/uiwriter/data/tdf99689.odt | Bin 0 -> 15771 bytes sw/qa/extras/uiwriter/data/tdf99689_figures.odt | Bin 0 -> 466344 bytes sw/qa/extras/uiwriter/data/tdf99689_tables.odt | Bin 0 -> 11267 bytes sw/qa/extras/uiwriter/data/testFontEmbedding.odt | Bin 0 -> 8830 bytes .../uiwriter/data/testInconsistentBookmark.ott | Bin 0 -> 10488 bytes .../uiwriter/data/test_anchor_as_character.odt | Bin 0 -> 10284 bytes .../data/textfield-getanchor-gettext-in-footer.odt | Bin 0 -> 8966 bytes sw/qa/extras/uiwriter/data/threadedException.fodt | 530 +++ sw/qa/extras/uiwriter/data/try2.fodt | 66 + sw/qa/extras/uiwriter/data/txbx_crash.odt | Bin 0 -> 9369 bytes sw/qa/extras/uiwriter/data/udindex3.odt | Bin 0 -> 11068 bytes sw/qa/extras/uiwriter/data/unicodeAltX.odt | Bin 0 -> 19978 bytes sw/qa/extras/uiwriter/data/uno-cycle.odt | Bin 0 -> 9118 bytes .../variable-field-table-row-split-header.fodt | 270 ++ sw/qa/extras/uiwriter/data/watermark-position.odt | Bin 0 -> 8769 bytes sw/qa/extras/uiwriter/data/watermark.docx | Bin 0 -> 18768 bytes sw/qa/extras/uiwriter/uiwriter.cxx | 1754 +++++++ sw/qa/extras/uiwriter/uiwriter2.cxx | 3235 +++++++++++++ sw/qa/extras/uiwriter/uiwriter3.cxx | 4523 ++++++++++++++++++ sw/qa/extras/uiwriter/uiwriter4.cxx | 2242 +++++++++ sw/qa/extras/uiwriter/uiwriter5.cxx | 2992 ++++++++++++ sw/qa/extras/uiwriter/uiwriter6.cxx | 2352 ++++++++++ sw/qa/extras/uiwriter/uiwriter7.cxx | 2818 +++++++++++ sw/qa/extras/unowriter/data/bookmarkintable.fodt | 82 + .../unowriter/data/image-comment-at-char.odt | Bin 0 -> 10244 bytes .../unowriter/data/renderable-page-position.odt | Bin 0 -> 8465 bytes .../unowriter/data/selection-in-table-enum.odt | Bin 0 -> 8941 bytes .../extras/unowriter/data/table-line-spacing.docx | Bin 0 -> 11383 bytes sw/qa/extras/unowriter/data/tdf134250.fodt | 86 + sw/qa/extras/unowriter/data/tdf134252.fodt | 95 + .../data/tdf134252_onlytable_protected.fodt | 87 + sw/qa/extras/unowriter/data/test.jpg | Bin 0 -> 1136 bytes .../unowriter/data/view-cursor-page-style.fodt | 23 + sw/qa/extras/unowriter/data/xautotextgroup.odt | Bin 0 -> 11151 bytes sw/qa/extras/unowriter/unowriter.cxx | 1210 +++++ sw/qa/extras/ww8export/data/all_gaps_word.doc | Bin 0 -> 32256 bytes .../ww8export/data/arabic-zero-numbering.doc | Bin 0 -> 10752 bytes sw/qa/extras/ww8export/data/bnc636128.doc | Bin 0 -> 26112 bytes sw/qa/extras/ww8export/data/bnc787942.doc | Bin 0 -> 24064 bytes sw/qa/extras/ww8export/data/bnc821208.doc | Bin 0 -> 30208 bytes sw/qa/extras/ww8export/data/bnc863018b.doc | Bin 0 -> 26624 bytes sw/qa/extras/ww8export/data/bordercolours.doc | Bin 0 -> 29696 bytes sw/qa/extras/ww8export/data/bordercolours.odt | Bin 0 -> 24601 bytes sw/qa/extras/ww8export/data/btlr-cell.doc | Bin 0 -> 26624 bytes sw/qa/extras/ww8export/data/btlr-frame.odt | Bin 0 -> 8564 bytes sw/qa/extras/ww8export/data/cell-bg-color.odt | Bin 0 -> 10180 bytes sw/qa/extras/ww8export/data/charborder.odt | Bin 0 -> 8053 bytes sw/qa/extras/ww8export/data/checkbox_control.odt | Bin 0 -> 9601 bytes sw/qa/extras/ww8export/data/cjklist30.doc | Bin 0 -> 27648 bytes sw/qa/extras/ww8export/data/cjklist31.doc | Bin 0 -> 27648 bytes sw/qa/extras/ww8export/data/cjklist34.doc | Bin 0 -> 27648 bytes sw/qa/extras/ww8export/data/cjklist35.doc | Bin 0 -> 23552 bytes sw/qa/extras/ww8export/data/clearing-break.doc | Bin 0 -> 25600 bytes sw/qa/extras/ww8export/data/comment-export.odt | Bin 0 -> 9709 bytes sw/qa/extras/ww8export/data/commented-table.doc | Bin 0 -> 27136 bytes sw/qa/extras/ww8export/data/comments-nested.doc | Bin 0 -> 23552 bytes sw/qa/extras/ww8export/data/cp1000044.doc | Bin 0 -> 26112 bytes sw/qa/extras/ww8export/data/fdo36868.doc | Bin 0 -> 23552 bytes sw/qa/extras/ww8export/data/fdo42144.odt | Bin 0 -> 9425 bytes sw/qa/extras/ww8export/data/fdo45724.odt | Bin 0 -> 13499 bytes sw/qa/extras/ww8export/data/fdo46020.odt | Bin 0 -> 12611 bytes sw/qa/extras/ww8export/data/fdo53985.doc | Bin 0 -> 39936 bytes sw/qa/extras/ww8export/data/fdo56513.doc | Bin 0 -> 23040 bytes sw/qa/extras/ww8export/data/fdo59530.doc | Bin 0 -> 10240 bytes sw/qa/extras/ww8export/data/fdo66304-1.odt | Bin 0 -> 54780 bytes sw/qa/extras/ww8export/data/fdo68963.doc | Bin 0 -> 22528 bytes sw/qa/extras/ww8export/data/fdo68967.doc | Bin 0 -> 99328 bytes sw/qa/extras/ww8export/data/fdo77454.doc | Bin 0 -> 11776 bytes sw/qa/extras/ww8export/data/fdo77844.doc | Bin 0 -> 28672 bytes sw/qa/extras/ww8export/data/fdo80333.doc | Bin 0 -> 24064 bytes sw/qa/extras/ww8export/data/fdo81102.doc | Bin 0 -> 22528 bytes .../extras/ww8export/data/first-header-footer.doc | Bin 0 -> 23552 bytes sw/qa/extras/ww8export/data/gutter-left.doc | Bin 0 -> 22528 bytes sw/qa/extras/ww8export/data/gutter-top.doc | Bin 0 -> 22528 bytes sw/qa/extras/ww8export/data/i120158.doc | Bin 0 -> 23040 bytes .../ww8export/data/image-comment-at-char.doc | Bin 0 -> 24064 bytes sw/qa/extras/ww8export/data/list-nolevel.doc | Bin 0 -> 23040 bytes sw/qa/extras/ww8export/data/mailmerge.doc | Bin 0 -> 23040 bytes .../ww8export/data/msobrightnesscontrast.doc | Bin 0 -> 27648 bytes sw/qa/extras/ww8export/data/n325936.doc | Bin 0 -> 24576 bytes sw/qa/extras/ww8export/data/n652364.doc | Bin 0 -> 22016 bytes sw/qa/extras/ww8export/data/n750255.doc | Bin 0 -> 22016 bytes sw/qa/extras/ww8export/data/n757118.doc | Bin 0 -> 35840 bytes sw/qa/extras/ww8export/data/n757905.doc | Bin 0 -> 28160 bytes sw/qa/extras/ww8export/data/n757910.doc | Bin 0 -> 22528 bytes sw/qa/extras/ww8export/data/n760294.doc | Bin 0 -> 26112 bytes sw/qa/extras/ww8export/data/n816603.doc | Bin 0 -> 67072 bytes sw/qa/extras/ww8export/data/n823651.doc | Bin 0 -> 30720 bytes sw/qa/extras/ww8export/data/new-page-styles.doc | Bin 0 -> 38912 bytes .../ww8export/data/object_cross_reference.odt | Bin 0 -> 35667 bytes sw/qa/extras/ww8export/data/ooo92948-1.doc | Bin 0 -> 43008 bytes sw/qa/extras/ww8export/data/page-border.doc | Bin 0 -> 22016 bytes sw/qa/extras/ww8export/data/redline-export-1.odt | Bin 0 -> 12833 bytes sw/qa/extras/ww8export/data/redline-export-2.odt | Bin 0 -> 10363 bytes sw/qa/extras/ww8export/data/redline-export-3.odt | Bin 0 -> 10403 bytes sw/qa/extras/ww8export/data/rtl-gutter.doc | Bin 0 -> 22528 bytes .../extras/ww8export/data/shapes-line-ellipse.doc | Bin 0 -> 40448 bytes .../ww8export/data/table_cross_reference.odt | Bin 0 -> 10251 bytes .../data/table_cross_reference_custom_format.odt | Bin 0 -> 12087 bytes .../ww8export/data/tdf100961_fixedDateTime.doc | Bin 0 -> 19968 bytes .../ww8export/data/tdf101826_xattrTextBoxFill.doc | Bin 0 -> 55296 bytes sw/qa/extras/ww8export/data/tdf102334.doc | Bin 0 -> 28672 bytes .../data/tdf104239_chapterNumberTortureTest.doc | Bin 0 -> 24064 bytes .../ww8export/data/tdf104239_chapterNumbering.doc | Bin 0 -> 10240 bytes .../data/tdf104239_chapterNumberingLevels.doc | Bin 0 -> 30720 bytes .../extras/ww8export/data/tdf104239_numbering.doc | Bin 0 -> 52224 bytes .../data/tdf104239_sharedOutlineNumId.doc | Bin 0 -> 33280 bytes sw/qa/extras/ww8export/data/tdf104334.doc | Bin 0 -> 25600 bytes .../ww8export/data/tdf104596_wrapInHeaderTable.doc | Bin 0 -> 29184 bytes sw/qa/extras/ww8export/data/tdf104805.doc | Bin 0 -> 22528 bytes sw/qa/extras/ww8export/data/tdf105570.doc | Bin 0 -> 29696 bytes .../data/tdf106062_nonHangingFootnote.odt | Bin 0 -> 14255 bytes .../ww8export/data/tdf106174_rtlParaAlign.docx | Bin 0 -> 5266 bytes sw/qa/extras/ww8export/data/tdf106291.doc | Bin 0 -> 24064 bytes .../ww8export/data/tdf106541_cancelOutline.doc | Bin 0 -> 26624 bytes .../data/tdf106541_inheritChapterNumbering.doc | Bin 0 -> 33280 bytes .../data/tdf106541_inheritChapterNumberingB.doc | Bin 0 -> 47104 bytes .../data/tdf106541_inheritOutlineNumbering.doc | Bin 0 -> 40448 bytes sw/qa/extras/ww8export/data/tdf107773.doc | Bin 0 -> 29184 bytes sw/qa/extras/ww8export/data/tdf108072.doc | Bin 0 -> 28672 bytes sw/qa/extras/ww8export/data/tdf108448_endNote.odt | Bin 0 -> 10911 bytes .../ww8export/data/tdf108518_CRnumformatting.doc | Bin 0 -> 63488 bytes sw/qa/extras/ww8export/data/tdf111480.doc | Bin 0 -> 27648 bytes .../data/tdf112074_RTLtableJustification.doc | Bin 0 -> 24576 bytes sw/qa/extras/ww8export/data/tdf112118.doc | Bin 0 -> 26624 bytes sw/qa/extras/ww8export/data/tdf112346.doc | Bin 0 -> 27648 bytes sw/qa/extras/ww8export/data/tdf112517_maxSprms.doc | Bin 0 -> 49152 bytes sw/qa/extras/ww8export/data/tdf112535.doc | Bin 0 -> 19968 bytes .../ww8export/data/tdf112618_textbox_no_bg.doc | Bin 0 -> 27136 bytes sw/qa/extras/ww8export/data/tdf114308.doc | Bin 0 -> 27136 bytes .../ww8export/data/tdf115896_layoutInCell.doc | Bin 0 -> 31232 bytes sw/qa/extras/ww8export/data/tdf116194.doc | Bin 0 -> 12288 bytes .../ww8export/data/tdf116436_tableBackground.odt | Bin 0 -> 10745 bytes .../ww8export/data/tdf116570_exportFootnote.odt | Bin 0 -> 16416 bytes .../data/tdf117217_largeTableBackgrounds.odt | Bin 0 -> 10988 bytes sw/qa/extras/ww8export/data/tdf117503.docx | Bin 0 -> 23567 bytes sw/qa/extras/ww8export/data/tdf117885.doc | Bin 0 -> 50688 bytes sw/qa/extras/ww8export/data/tdf118133.docx | Bin 0 -> 23359 bytes .../ww8export/data/tdf118375_240degClockwise.doc | Bin 0 -> 19456 bytes sw/qa/extras/ww8export/data/tdf118412.doc | Bin 0 -> 51200 bytes sw/qa/extras/ww8export/data/tdf118564.doc | Bin 0 -> 28160 bytes .../ww8export/data/tdf119232_startEvenPage.doc | Bin 0 -> 30720 bytes sw/qa/extras/ww8export/data/tdf120003.doc | Bin 0 -> 10752 bytes .../data/tdf120225_textControlCrossRef.doc | Bin 0 -> 27136 bytes sw/qa/extras/ww8export/data/tdf120394.doc | Bin 0 -> 30208 bytes .../data/tdf120412_proportionalEscapement.odt | Bin 0 -> 11092 bytes sw/qa/extras/ww8export/data/tdf120711.doc | Bin 0 -> 25600 bytes .../extras/ww8export/data/tdf121110_absJustify.doc | Bin 0 -> 19456 bytes .../ww8export/data/tdf121111_fillStyleNone.docx | Bin 0 -> 53968 bytes sw/qa/extras/ww8export/data/tdf122425_2.doc | Bin 0 -> 41472 bytes sw/qa/extras/ww8export/data/tdf122429_header.doc | Bin 0 -> 122368 bytes sw/qa/extras/ww8export/data/tdf122460_header.odt | Bin 0 -> 9753 bytes .../ww8export/data/tdf123433_fillStyleStop.doc | Bin 0 -> 33792 bytes sw/qa/extras/ww8export/data/tdf124937.doc | Bin 0 -> 33280 bytes .../ww8export/data/tdf126708_containsemf.odt | Bin 0 -> 13315 bytes .../ww8export/data/tdf127166_prstDash_Word97.doc | Bin 0 -> 26624 bytes .../ww8export/data/tdf127316_autoEscapement.odt | Bin 0 -> 11475 bytes .../ww8export/data/tdf127316_autoEscapement2.odt | Bin 0 -> 14195 bytes .../ww8export/data/tdf127862_pageFillStyle.odt | Bin 0 -> 38808 bytes sw/qa/extras/ww8export/data/tdf128501.doc | Bin 0 -> 16587 bytes sw/qa/extras/ww8export/data/tdf128605.doc | Bin 0 -> 22016 bytes .../ww8export/data/tdf128608_fillStyleNoneB.odt | Bin 0 -> 11105 bytes .../data/tdf128608_tableParaBackColor.doc | Bin 0 -> 113152 bytes .../data/tdf128700_relativeTableWidth.doc | Bin 0 -> 67072 bytes sw/qa/extras/ww8export/data/tdf129247.docx | Bin 0 -> 18550 bytes .../ww8export/data/tdf129522_removeShadowStyle.odt | Bin 0 -> 14253 bytes sw/qa/extras/ww8export/data/tdf130262.doc | Bin 0 -> 36864 bytes .../data/tdf132094_transparentPageImage.doc | Bin 0 -> 78336 bytes sw/qa/extras/ww8export/data/tdf132726.odt | Bin 0 -> 41738 bytes .../ww8export/data/tdf133453_realFontSize.doc | Bin 0 -> 10752 bytes sw/qa/extras/ww8export/data/tdf134264.docx | Bin 0 -> 15412 bytes sw/qa/extras/ww8export/data/tdf134570.doc | Bin 0 -> 39936 bytes sw/qa/extras/ww8export/data/tdf134948.odt | Bin 0 -> 10457 bytes .../extras/ww8export/data/tdf135672_tableGrows.doc | Bin 0 -> 10240 bytes sw/qa/extras/ww8export/data/tdf136620.odt | Bin 0 -> 8915 bytes sw/qa/extras/ww8export/data/tdf136814.odt | Bin 0 -> 8249 bytes .../ww8export/data/tdf138302_restartNumbering.odt | Bin 0 -> 14081 bytes .../ww8export/data/tdf138345_paraCharHighlight.doc | Bin 0 -> 10240 bytes .../extras/ww8export/data/tdf139495_tinyHeader.doc | Bin 0 -> 22016 bytes sw/qa/extras/ww8export/data/tdf142760.doc | Bin 0 -> 36864 bytes sw/qa/extras/ww8export/data/tdf142840.odt | Bin 0 -> 10707 bytes .../ww8export/data/tdf147861_customField.doc | Bin 0 -> 19968 bytes .../ww8export/data/tdf148380_createField.doc | Bin 0 -> 10240 bytes .../extras/ww8export/data/tdf148380_fldLocked.doc | Bin 0 -> 20480 bytes .../ww8export/data/tdf36117_verticalAdjustment.doc | Bin 0 -> 27648 bytes .../data/tdf37153_considerWrapOnObjPos.doc | Bin 0 -> 15872 bytes .../ww8export/data/tdf37778_readonlySection.doc | Bin 0 -> 29696 bytes .../data/tdf38778_properties_in_run_for_field.doc | Bin 0 -> 25600 bytes .../ww8export/data/tdf41542_borderlessPadding.odt | Bin 0 -> 15669 bytes .../ww8export/data/tdf41542_imagePadding.odt | Bin 0 -> 17926 bytes sw/qa/extras/ww8export/data/tdf46441-2.odt | Bin 0 -> 14672 bytes .../data/tdf49102_mergedCellNumbering.doc | Bin 0 -> 17408 bytes .../ww8export/data/tdf55427_footnote2endnote.odt | Bin 0 -> 13291 bytes .../ww8export/data/tdf55528_relativeTableWidth.doc | Bin 0 -> 24576 bytes .../ww8export/data/tdf56321_flipImage_both.doc | Bin 0 -> 22528 bytes sw/qa/extras/ww8export/data/tdf59896.doc | Bin 0 -> 12288 bytes .../ww8export/data/tdf60378_mergedBorders.doc | Bin 0 -> 45056 bytes sw/qa/extras/ww8export/data/tdf70838.odt | Bin 0 -> 9257 bytes .../ww8export/data/tdf70838b_verticalRotation.odt | Bin 0 -> 11231 bytes .../extras/ww8export/data/tdf73056_cellMargins.doc | Bin 0 -> 25088 bytes sw/qa/extras/ww8export/data/tdf74328.doc | Bin 0 -> 44032 bytes .../ww8export/data/tdf75539_relativeWidth.doc | Bin 0 -> 50176 bytes .../data/tdf75748_inheritChapterNumberingC.doc | Bin 0 -> 25088 bytes .../ww8export/data/tdf76349_textboxMargins.doc | Bin 0 -> 23552 bytes sw/qa/extras/ww8export/data/tdf77964.doc | Bin 0 -> 248320 bytes .../ww8export/data/tdf79186_noLayoutInCell.odt | Bin 0 -> 21127 bytes .../ww8export/data/tdf79435_legacyInputFields.docx | Bin 0 -> 12593 bytes .../extras/ww8export/data/tdf79553_lineNumbers.doc | Bin 0 -> 77312 bytes sw/qa/extras/ww8export/data/tdf79639.doc | Bin 0 -> 27648 bytes .../extras/ww8export/data/tdf80635_marginLeft.doc | Bin 0 -> 47104 bytes .../ww8export/data/tdf80635_marginRightRTL.doc | Bin 0 -> 25088 bytes sw/qa/extras/ww8export/data/tdf80635_pageLeft.doc | Bin 0 -> 36352 bytes .../ww8export/data/tdf80635_pageRightRTL.doc | Bin 0 -> 25088 bytes .../ww8export/data/tdf81705_outlineLevel.doc | Bin 0 -> 29696 bytes .../tdf89377_tableWithBreakBeforeParaStyle.doc | Bin 0 -> 27136 bytes sw/qa/extras/ww8export/data/tdf91083.odt | Bin 0 -> 19865 bytes .../extras/ww8export/data/tdf91083_tableKeep2.odt | Bin 0 -> 15980 bytes .../extras/ww8export/data/tdf91083_tableKeep3.odt | Bin 0 -> 13658 bytes sw/qa/extras/ww8export/data/tdf91687.doc | Bin 0 -> 23552 bytes sw/qa/extras/ww8export/data/tdf92281.doc | Bin 0 -> 26112 bytes .../ww8export/data/tdf94009_zeroPgMargin.odt | Bin 0 -> 11939 bytes .../data/tdf94326_notOutlineNumbering.doc | Bin 0 -> 40960 bytes sw/qa/extras/ww8export/data/tdf94386.odt | Bin 0 -> 8163 bytes sw/qa/extras/ww8export/data/tdf95321.doc | Bin 0 -> 27648 bytes sw/qa/extras/ww8export/data/tdf95576.doc | Bin 0 -> 23040 bytes sw/qa/extras/ww8export/data/tdf96277.doc | Bin 0 -> 48128 bytes .../extras/ww8export/data/tdf98620_rtlJustify.doc | Bin 0 -> 9216 bytes sw/qa/extras/ww8export/data/tdf99100.doc | Bin 0 -> 22528 bytes sw/qa/extras/ww8export/data/tdf99120.doc | Bin 0 -> 23040 bytes .../extras/ww8export/data/tdf99197_defaultLTR.doc | Bin 0 -> 19968 bytes sw/qa/extras/ww8export/data/tdf99474.odt | Bin 0 -> 9375 bytes ...tTdf107931_KERN_DocEnabled_disabledDefStyle.doc | Bin 0 -> 10240 bytes .../data/testTdf107931_KERN_enabledDefStyle.doc | Bin 0 -> 22528 bytes sw/qa/extras/ww8export/data/transparent-text.doc | Bin 0 -> 33792 bytes sw/qa/extras/ww8export/data/tscp.doc | Bin 0 -> 10240 bytes sw/qa/extras/ww8export/data/zoom.doc | Bin 0 -> 9216 bytes sw/qa/extras/ww8export/data/zoomtype.doc | Bin 0 -> 9216 bytes sw/qa/extras/ww8export/ww8export.cxx | 1570 +++++++ sw/qa/extras/ww8export/ww8export2.cxx | 1104 +++++ sw/qa/extras/ww8export/ww8export3.cxx | 1104 +++++ sw/qa/extras/ww8export/ww8export4.cxx | 51 + sw/qa/extras/ww8import/data/bnc875715.doc | Bin 0 -> 41472 bytes .../extras/ww8import/data/changes-in-footnote.doc | Bin 0 -> 13312 bytes .../data/floating-table-section-columns.doc | Bin 0 -> 27648 bytes .../data/floating-table-section-margins.doc | Bin 0 -> 38400 bytes .../ww8import/data/image-lazy-read-0size.doc | Bin 0 -> 28160 bytes sw/qa/extras/ww8import/data/image-lazy-read.doc | Bin 0 -> 26624 bytes sw/qa/extras/ww8import/data/n816593.doc | Bin 0 -> 26624 bytes sw/qa/extras/ww8import/data/tdf106799.doc | Bin 0 -> 11264 bytes sw/qa/extras/ww8import/data/tdf110987 | Bin 0 -> 9216 bytes sw/qa/extras/ww8import/data/tdf120761_zOrder.dot | Bin 0 -> 53760 bytes sw/qa/extras/ww8import/data/tdf121734.doc | Bin 0 -> 26624 bytes sw/qa/extras/ww8import/data/tdf122425_1.doc | Bin 0 -> 32256 bytes sw/qa/extras/ww8import/data/tdf124601.doc | Bin 0 -> 62976 bytes sw/qa/extras/ww8import/data/tdf125281.doc | Bin 0 -> 82432 bytes sw/qa/extras/ww8import/ww8import.cxx | 306 ++ 3172 files changed, 130465 insertions(+) create mode 100644 sw/qa/extras/README create mode 100644 sw/qa/extras/accessibility/accessible_relation_set.cxx create mode 100644 sw/qa/extras/data/odt/test.odt create mode 100644 sw/qa/extras/docbookexport/data/simple.docx create mode 100644 sw/qa/extras/docbookexport/data/tdf91095.docx create mode 100644 sw/qa/extras/docbookexport/docbookexport.cxx create mode 100755 sw/qa/extras/find-unused-data.sh create mode 100644 sw/qa/extras/fodfexport/data/tdf113696-writerimage.odt create mode 100644 sw/qa/extras/fodfexport/data/tdf113696.odt create mode 100644 sw/qa/extras/fodfexport/fodfexport.cxx create mode 100644 sw/qa/extras/globalfilter/data/BulletAsImage.odt create mode 100644 sw/qa/extras/globalfilter/data/char_background.odt create mode 100644 sw/qa/extras/globalfilter/data/char_background_editing.docx create mode 100644 sw/qa/extras/globalfilter/data/char_highlight.docx create mode 100644 sw/qa/extras/globalfilter/data/checkbox_form_field.odt create mode 100644 sw/qa/extras/globalfilter/data/date_form_field.odt create mode 100644 sw/qa/extras/globalfilter/data/date_form_field_char_formatting.odt create mode 100644 sw/qa/extras/globalfilter/data/document_with_linked_graphic.odt create mode 100644 sw/qa/extras/globalfilter/data/document_with_two_images.odt create mode 100644 sw/qa/extras/globalfilter/data/dropdown_form_field.odt create mode 100644 sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.docx create mode 100644 sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.fodt create mode 100644 sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.rtf create mode 100644 sw/qa/extras/globalfilter/data/graphic_shape.odt create mode 100644 sw/qa/extras/globalfilter/data/images_with_special_IDs.odt create mode 100644 sw/qa/extras/globalfilter/data/linked_graphic.jpg create mode 100644 sw/qa/extras/globalfilter/data/multiple_identical_graphics.odt create mode 100644 sw/qa/extras/globalfilter/data/skipimages.doc create mode 100644 sw/qa/extras/globalfilter/data/skipimages.docx create mode 100644 sw/qa/extras/globalfilter/data/tdf138345_charstyle_highlight.odt create mode 100644 sw/qa/extras/globalfilter/data/text13e.odt create mode 100644 sw/qa/extras/globalfilter/data/text_form_field.odt create mode 100644 sw/qa/extras/globalfilter/globalfilter.cxx create mode 100644 sw/qa/extras/htmlexport/data/HTMLImage.odt create mode 100644 sw/qa/extras/htmlexport/data/charborder.odt create mode 100644 sw/qa/extras/htmlexport/data/checkbox-radiobutton.doc create mode 100644 sw/qa/extras/htmlexport/data/clearing-break.html create mode 100644 sw/qa/extras/htmlexport/data/extb.html create mode 100644 sw/qa/extras/htmlexport/data/fdo62336.docx create mode 100644 sw/qa/extras/htmlexport/data/fdo81276.html create mode 100644 sw/qa/extras/htmlexport/data/fdo86857.html create mode 100644 sw/qa/extras/htmlexport/data/field-shade-reqif.odt create mode 100644 sw/qa/extras/htmlexport/data/field-shade.odt create mode 100644 sw/qa/extras/htmlexport/data/hello.html create mode 100644 sw/qa/extras/htmlexport/data/list.html create mode 100644 sw/qa/extras/htmlexport/data/no-ole2-pres-data.odt create mode 100644 sw/qa/extras/htmlexport/data/ole1-pres-data-wmf.odt create mode 100644 sw/qa/extras/htmlexport/data/ole2.odt create mode 100644 sw/qa/extras/htmlexport/data/ole2.ole create mode 100644 sw/qa/extras/htmlexport/data/ole2.png create mode 100644 sw/qa/extras/htmlexport/data/paint-ole-bitmap-format.odt create mode 100644 sw/qa/extras/htmlexport/data/paint-ole.ole create mode 100644 sw/qa/extras/htmlexport/data/paint-ole.png create mode 100644 sw/qa/extras/htmlexport/data/paint-ole.xhtml create mode 100644 sw/qa/extras/htmlexport/data/pdf-ole.odt create mode 100644 sw/qa/extras/htmlexport/data/reqif-aschar-objsize.odt create mode 100644 sw/qa/extras/htmlexport/data/reqif-chinese.odt create mode 100644 sw/qa/extras/htmlexport/data/reqif-jpg-img.xhtml create mode 100644 sw/qa/extras/htmlexport/data/reqif-list.xhtml create mode 100644 sw/qa/extras/htmlexport/data/reqif-no-lang.odt create mode 100644 sw/qa/extras/htmlexport/data/reqif-objdata-presentationdatasize.odt create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole-data.ole create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole-data.xhtml create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole-img.jpg create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole-img.png create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole-img.xhtml create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole-nodata.odt create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole-odg.ole create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole-odg.png create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole-odg.xhtml create mode 100644 sw/qa/extras/htmlexport/data/reqif-ole2.xhtml create mode 100644 sw/qa/extras/htmlexport/data/reqif-p.xhtml create mode 100644 sw/qa/extras/htmlexport/data/reqif-png-img.xhtml create mode 100644 sw/qa/extras/htmlexport/data/reqif-table.xhtml create mode 100644 sw/qa/extras/htmlexport/data/reqif-table2.odt create mode 100644 sw/qa/extras/htmlexport/data/skipimage-embedded-document.docx create mode 100644 sw/qa/extras/htmlexport/data/skipimage-embedded.doc create mode 100644 sw/qa/extras/htmlexport/data/tdf126879.odt create mode 100644 sw/qa/extras/htmlexport/data/tdf132739.odt create mode 100644 sw/qa/extras/htmlexport/data/tdf66822.odt create mode 100644 sw/qa/extras/htmlexport/data/tdf76291.odt create mode 100644 sw/qa/extras/htmlexport/data/tdf83890.odt create mode 100644 sw/qa/extras/htmlexport/data/tdf90905.odt create mode 100644 sw/qa/extras/htmlexport/data/textAndImage.docx create mode 100644 sw/qa/extras/htmlexport/data/transparent-image.odt create mode 100644 sw/qa/extras/htmlexport/data/transparent.png create mode 100644 sw/qa/extras/htmlexport/data/xhtml-css.odt create mode 100644 sw/qa/extras/htmlexport/htmlexport.cxx create mode 100644 sw/qa/extras/htmlexport/xhtmlexport.cxx create mode 100644 sw/qa/extras/htmlimport/data/PageAndParagraphFilled.html create mode 100644 sw/qa/extras/htmlimport/data/allowed-rtf-ole-mime-types.xhtml create mode 100644 sw/qa/extras/htmlimport/data/data.ole create mode 100644 sw/qa/extras/htmlimport/data/emojis16BE.html create mode 100644 sw/qa/extras/htmlimport/data/hidden-textframe.html create mode 100644 sw/qa/extras/htmlimport/data/image-lazy-read.html create mode 100644 sw/qa/extras/htmlimport/data/image-size.html create mode 100644 sw/qa/extras/htmlimport/data/image-width-auto.html create mode 100644 sw/qa/extras/htmlimport/data/inlined_image.html create mode 100644 sw/qa/extras/htmlimport/data/libreoffice.jpg create mode 100644 sw/qa/extras/htmlimport/data/list-style.html create mode 100644 sw/qa/extras/htmlimport/data/meta-ISO8601-dates.html create mode 100644 sw/qa/extras/htmlimport/data/meta-changedby.html create mode 100644 sw/qa/extras/htmlimport/data/ole-data.xhtml create mode 100644 sw/qa/extras/htmlimport/data/ole-data2.xhtml create mode 100644 sw/qa/extras/htmlimport/data/ole-img-svg.xhtml create mode 100644 sw/qa/extras/htmlimport/data/ole-img.xhtml create mode 100644 sw/qa/extras/htmlimport/data/ole2.gif create mode 100644 sw/qa/extras/htmlimport/data/ole2.ole create mode 100644 sw/qa/extras/htmlimport/data/ole2.png create mode 100644 sw/qa/extras/htmlimport/data/ole2.svg create mode 100644 sw/qa/extras/htmlimport/data/outline-level.html create mode 100644 sw/qa/extras/htmlimport/data/picture.html create mode 100644 sw/qa/extras/htmlimport/data/reqif-br.xhtml create mode 100644 sw/qa/extras/htmlimport/data/reqif-page-style.xhtml create mode 100644 sw/qa/extras/htmlimport/data/reqif-table.xhtml create mode 100644 sw/qa/extras/htmlimport/data/table_border_1px.html create mode 100644 sw/qa/extras/htmlimport/data/tdf118579.html create mode 100644 sw/qa/extras/htmlimport/data/tdf122789.html create mode 100644 sw/qa/extras/htmlimport/data/tdf142781.html create mode 100644 sw/qa/extras/htmlimport/data/tdf80194_subscript.html create mode 100644 sw/qa/extras/htmlimport/htmlimport.cxx create mode 100644 sw/qa/extras/indexing/IndexingExportTest.cxx create mode 100644 sw/qa/extras/indexing/SearchResultLocatorTest.cxx create mode 100644 sw/qa/extras/indexing/data/IndexingExport_Fontwork.odt create mode 100644 sw/qa/extras/indexing/data/IndexingExport_Header_Footer.odt create mode 100644 sw/qa/extras/indexing/data/IndexingExport_Images.odt create mode 100644 sw/qa/extras/indexing/data/IndexingExport_OLE.odt create mode 100644 sw/qa/extras/indexing/data/IndexingExport_Sections.odt create mode 100644 sw/qa/extras/indexing/data/IndexingExport_Shapes.odt create mode 100644 sw/qa/extras/indexing/data/IndexingExport_Tables.odt create mode 100644 sw/qa/extras/indexing/data/IndexingExport_VariousParagraphs.odt create mode 100644 sw/qa/extras/layout/README create mode 100644 sw/qa/extras/layout/data/LIBREOFFICE-N4LA0OHZ.rtf create mode 100644 sw/qa/extras/layout/data/LIBREOFFICE-UXTSOREL.rtf create mode 100644 sw/qa/extras/layout/data/Tdf121509.odt create mode 100644 sw/qa/extras/layout/data/TextBoxFrame.odt create mode 100644 sw/qa/extras/layout/data/abi11870-2.odt create mode 100644 sw/qa/extras/layout/data/btlr-cell.odt create mode 100644 sw/qa/extras/layout/data/changed_table_rows.fodt create mode 100644 sw/qa/extras/layout/data/endOfLineComments.odt create mode 100644 sw/qa/extras/layout/data/fdo43573-2-min.docx create mode 100644 sw/qa/extras/layout/data/footer-fly-table.fodt create mode 100644 sw/qa/extras/layout/data/forcepoint-swfootnoteframe-1.rtf create mode 100644 sw/qa/extras/layout/data/forcepoint100.html create mode 100644 sw/qa/extras/layout/data/forcepoint102.rtf create mode 100644 sw/qa/extras/layout/data/forcepoint103.html create mode 100644 sw/qa/extras/layout/data/forcepoint72-1.rtf create mode 100644 sw/qa/extras/layout/data/forcepoint75-1.rtf create mode 100644 sw/qa/extras/layout/data/forcepoint76-1.rtf create mode 100644 sw/qa/extras/layout/data/forcepoint89.html create mode 100644 sw/qa/extras/layout/data/forcepoint90.rtf create mode 100644 sw/qa/extras/layout/data/forcepoint91.html create mode 100644 sw/qa/extras/layout/data/forcepoint92.doc create mode 100644 sw/qa/extras/layout/data/forcepoint93-1.rtf create mode 100644 sw/qa/extras/layout/data/forcepoint93-2.rtf create mode 100644 sw/qa/extras/layout/data/forcepoint94.html create mode 100644 sw/qa/extras/layout/data/forcepoint98.html create mode 100644 sw/qa/extras/layout/data/forcepoint99.html create mode 100644 sw/qa/extras/layout/data/horizontal_multilevel.odt create mode 100644 sw/qa/extras/layout/data/image-comment.odt create mode 100644 sw/qa/extras/layout/data/in_056132_mod.odt create mode 100644 sw/qa/extras/layout/data/keep-with-next-fly.fodt create mode 100644 sw/qa/extras/layout/data/legend-itemorder-min.docx create mode 100644 sw/qa/extras/layout/data/long_legendentry.docx create mode 100644 sw/qa/extras/layout/data/no-line-break-at-slash.fodt create mode 100644 sw/qa/extras/layout/data/outside_long_data_label.docx create mode 100644 sw/qa/extras/layout/data/piechart_leaderline.odt create mode 100644 sw/qa/extras/layout/data/redline_charatr.fodt create mode 100644 sw/qa/extras/layout/data/redline_footnote_pagination.fodt create mode 100644 sw/qa/extras/layout/data/redline_footnotes.odt create mode 100644 sw/qa/extras/layout/data/redline_sections.fodt create mode 100644 sw/qa/extras/layout/data/redline_table.fodt create mode 100644 sw/qa/extras/layout/data/stable-at-page-anchored-fly-position.odt create mode 100644 sw/qa/extras/layout/data/tab-over-margin.odt create mode 100644 sw/qa/extras/layout/data/tabellen_test_windows_1.odt create mode 100644 sw/qa/extras/layout/data/table-extrusion1.odt create mode 100644 sw/qa/extras/layout/data/table-extrusion2.odt create mode 100644 sw/qa/extras/layout/data/table_cell_overlap.fodt create mode 100644 sw/qa/extras/layout/data/tdf100680.docx create mode 100644 sw/qa/extras/layout/data/tdf104797.docx create mode 100644 sw/qa/extras/layout/data/tdf105481.odt create mode 100644 sw/qa/extras/layout/data/tdf106153.docx create mode 100644 sw/qa/extras/layout/data/tdf106234.fodt create mode 100644 sw/qa/extras/layout/data/tdf106390.odt create mode 100644 sw/qa/extras/layout/data/tdf108021.odt create mode 100644 sw/qa/extras/layout/data/tdf109077.docx create mode 100644 sw/qa/extras/layout/data/tdf109137.docx create mode 100644 sw/qa/extras/layout/data/tdf112290.docx create mode 100644 sw/qa/extras/layout/data/tdf113014.fodt create mode 100644 sw/qa/extras/layout/data/tdf114163.odt create mode 100644 sw/qa/extras/layout/data/tdf115094.docx create mode 100644 sw/qa/extras/layout/data/tdf115523.fodt create mode 100644 sw/qa/extras/layout/data/tdf115524.fodt create mode 100644 sw/qa/extras/layout/data/tdf115630.docx create mode 100644 sw/qa/extras/layout/data/tdf116256.docx create mode 100644 sw/qa/extras/layout/data/tdf116486.docx create mode 100644 sw/qa/extras/layout/data/tdf116501.odt create mode 100644 sw/qa/extras/layout/data/tdf116830.odt create mode 100644 sw/qa/extras/layout/data/tdf116848.odt create mode 100644 sw/qa/extras/layout/data/tdf116925.docx create mode 100644 sw/qa/extras/layout/data/tdf117028.docx create mode 100644 sw/qa/extras/layout/data/tdf117187.odt create mode 100644 sw/qa/extras/layout/data/tdf117188.docx create mode 100644 sw/qa/extras/layout/data/tdf117245.odt create mode 100644 sw/qa/extras/layout/data/tdf117923.doc create mode 100644 sw/qa/extras/layout/data/tdf117923.docx create mode 100644 sw/qa/extras/layout/data/tdf117982.docx create mode 100644 sw/qa/extras/layout/data/tdf118058.fodt create mode 100644 sw/qa/extras/layout/data/tdf118672.odt create mode 100644 sw/qa/extras/layout/data/tdf119875.odt create mode 100644 sw/qa/extras/layout/data/tdf120287.fodt create mode 100644 sw/qa/extras/layout/data/tdf120287b.fodt create mode 100644 sw/qa/extras/layout/data/tdf120287c.fodt create mode 100644 sw/qa/extras/layout/data/tdf121658.odt create mode 100644 sw/qa/extras/layout/data/tdf122014.docx create mode 100644 sw/qa/extras/layout/data/tdf122225.docx create mode 100644 sw/qa/extras/layout/data/tdf122607.odt create mode 100644 sw/qa/extras/layout/data/tdf122607_leerzeile.odt create mode 100644 sw/qa/extras/layout/data/tdf122800.odt create mode 100644 sw/qa/extras/layout/data/tdf122878.docx create mode 100644 sw/qa/extras/layout/data/tdf123163-1.docx create mode 100644 sw/qa/extras/layout/data/tdf123268.odt create mode 100644 sw/qa/extras/layout/data/tdf123651.docx create mode 100644 sw/qa/extras/layout/data/tdf123898.odt create mode 100644 sw/qa/extras/layout/data/tdf124261.docx create mode 100644 sw/qa/extras/layout/data/tdf124423.docx create mode 100644 sw/qa/extras/layout/data/tdf124423.odt create mode 100644 sw/qa/extras/layout/data/tdf124600.docx create mode 100644 sw/qa/extras/layout/data/tdf124601.doc create mode 100644 sw/qa/extras/layout/data/tdf124601b.doc create mode 100644 sw/qa/extras/layout/data/tdf124796.odt create mode 100644 sw/qa/extras/layout/data/tdf125300.docx create mode 100644 sw/qa/extras/layout/data/tdf125334.odt create mode 100644 sw/qa/extras/layout/data/tdf125335.odt create mode 100644 sw/qa/extras/layout/data/tdf125893.docx create mode 100644 sw/qa/extras/layout/data/tdf126244.docx create mode 100644 sw/qa/extras/layout/data/tdf127118.docx create mode 100644 sw/qa/extras/layout/data/tdf127235.odt create mode 100644 sw/qa/extras/layout/data/tdf127304.odt create mode 100644 sw/qa/extras/layout/data/tdf128198-1.docx create mode 100644 sw/qa/extras/layout/data/tdf128399.docx create mode 100644 sw/qa/extras/layout/data/tdf128611.fodt create mode 100644 sw/qa/extras/layout/data/tdf128959.docx create mode 100644 sw/qa/extras/layout/data/tdf128996.docx create mode 100644 sw/qa/extras/layout/data/tdf129054.docx create mode 100644 sw/qa/extras/layout/data/tdf129095.docx create mode 100644 sw/qa/extras/layout/data/tdf130031.docx create mode 100644 sw/qa/extras/layout/data/tdf130218.fodt create mode 100644 sw/qa/extras/layout/data/tdf130242.odt create mode 100644 sw/qa/extras/layout/data/tdf130380.docx create mode 100644 sw/qa/extras/layout/data/tdf130969.docx create mode 100644 sw/qa/extras/layout/data/tdf131707_flyWrap.doc create mode 100644 sw/qa/extras/layout/data/tdf132956.docx create mode 100644 sw/qa/extras/layout/data/tdf133005.odt create mode 100644 sw/qa/extras/layout/data/tdf134146.docx create mode 100644 sw/qa/extras/layout/data/tdf134235.docx create mode 100644 sw/qa/extras/layout/data/tdf134277.docx create mode 100644 sw/qa/extras/layout/data/tdf134298.ott create mode 100644 sw/qa/extras/layout/data/tdf134463.docx create mode 100644 sw/qa/extras/layout/data/tdf134472.odt create mode 100644 sw/qa/extras/layout/data/tdf134548.odt create mode 100644 sw/qa/extras/layout/data/tdf134659.docx create mode 100644 sw/qa/extras/layout/data/tdf134676.docx create mode 100644 sw/qa/extras/layout/data/tdf134685.docx create mode 100644 sw/qa/extras/layout/data/tdf134866.docx create mode 100644 sw/qa/extras/layout/data/tdf135035.docx create mode 100644 sw/qa/extras/layout/data/tdf135035.odt create mode 100644 sw/qa/extras/layout/data/tdf135991.odt create mode 100644 sw/qa/extras/layout/data/tdf136061.docx create mode 100644 sw/qa/extras/layout/data/tdf136588.docx create mode 100644 sw/qa/extras/layout/data/tdf136613.docx create mode 100644 sw/qa/extras/layout/data/tdf136816.odt create mode 100644 sw/qa/extras/layout/data/tdf137025.docx create mode 100644 sw/qa/extras/layout/data/tdf137116.docx create mode 100644 sw/qa/extras/layout/data/tdf137154.docx create mode 100644 sw/qa/extras/layout/data/tdf137185.odt create mode 100644 sw/qa/extras/layout/data/tdf137819.fodt create mode 100644 sw/qa/extras/layout/data/tdf138018.docx create mode 100644 sw/qa/extras/layout/data/tdf138039.odt create mode 100644 sw/qa/extras/layout/data/tdf138465min.docx create mode 100644 sw/qa/extras/layout/data/tdf138592-a-acute.fodt create mode 100644 sw/qa/extras/layout/data/tdf138773.docx create mode 100644 sw/qa/extras/layout/data/tdf138782.docx create mode 100644 sw/qa/extras/layout/data/tdf138951.odt create mode 100644 sw/qa/extras/layout/data/tdf139336_ColumnsWithFootnoteDoNotOccupyEntirePage.docx create mode 100644 sw/qa/extras/layout/data/tdf141079.odt create mode 100644 sw/qa/extras/layout/data/tdf141220.docx create mode 100644 sw/qa/extras/layout/data/tdf143239-1-min.odt create mode 100644 sw/qa/extras/layout/data/tdf144057.fodt create mode 100644 sw/qa/extras/layout/data/tdf145719.odt create mode 100644 sw/qa/extras/layout/data/tdf145826.odt create mode 100644 sw/qa/extras/layout/data/tdf146272.odt create mode 100644 sw/qa/extras/layout/data/tdf146704_EndnoteInSection.odt create mode 100644 sw/qa/extras/layout/data/tdf147485-forcepoint.doc create mode 100644 sw/qa/extras/layout/data/tdf149248.odt create mode 100644 sw/qa/extras/layout/data/tdf149324.odt create mode 100644 sw/qa/extras/layout/data/tdf149420.odt create mode 100644 sw/qa/extras/layout/data/tdf149709.fodt create mode 100644 sw/qa/extras/layout/data/tdf149710.fodt create mode 100644 sw/qa/extras/layout/data/tdf149711.docx create mode 100644 sw/qa/extras/layout/data/tdf150642.odt create mode 100644 sw/qa/extras/layout/data/tdf151954.docx create mode 100644 sw/qa/extras/layout/data/tdf152031-stair.odt create mode 100644 sw/qa/extras/layout/data/tdf152085-section-tblr.odt create mode 100644 sw/qa/extras/layout/data/tdf152106.odt create mode 100644 sw/qa/extras/layout/data/tdf40260.odt create mode 100644 sw/qa/extras/layout/data/tdf42748.fodt create mode 100644 sw/qa/extras/layout/data/tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_New.odt create mode 100644 sw/qa/extras/layout/data/tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_Old.odt create mode 100644 sw/qa/extras/layout/data/tdf54819.fodt create mode 100644 sw/qa/extras/layout/data/tdf64222.docx create mode 100644 sw/qa/extras/layout/data/tdf69647_images.odt create mode 100644 sw/qa/extras/layout/data/tdf69647_text.docx create mode 100644 sw/qa/extras/layout/data/tdf69648.docx create mode 100644 sw/qa/extras/layout/data/tdf72727.odt create mode 100644 sw/qa/extras/layout/data/tdf75659.docx create mode 100644 sw/qa/extras/layout/data/tdf85610.fodt create mode 100644 sw/qa/extras/layout/data/tdf88496.docx create mode 100644 sw/qa/extras/layout/data/testAreaChartNumberFormat.docx create mode 100644 sw/qa/extras/layout/data/testTruncatedAxisLabel.odt create mode 100644 sw/qa/extras/layout/data/user-field-type-language.fodt create mode 100644 sw/qa/extras/layout/data/writer-image-no-capture.docx create mode 100644 sw/qa/extras/layout/data/xaxis-labelbreak.docx create mode 100644 sw/qa/extras/layout/layout.cxx create mode 100644 sw/qa/extras/layout/layout2.cxx create mode 100644 sw/qa/extras/mailmerge/data/10-testing-addresses-writer-merged.odt create mode 100644 sw/qa/extras/mailmerge/data/10-testing-addresses-writer.odt create mode 100644 sw/qa/extras/mailmerge/data/10-testing-addresses.ods create mode 100644 sw/qa/extras/mailmerge/data/4_v01.ods create mode 100644 sw/qa/extras/mailmerge/data/5-with-blanks.ods create mode 100644 sw/qa/extras/mailmerge/data/bookmarkcondition.fodt create mode 100644 sw/qa/extras/mailmerge/data/bookmarkcondition.ods create mode 100644 sw/qa/extras/mailmerge/data/db_pagecounttest.ods create mode 100644 sw/qa/extras/mailmerge/data/empty.odt create mode 100644 sw/qa/extras/mailmerge/data/grabbagtest.docx create mode 100644 sw/qa/extras/mailmerge/data/linked-labels.odt create mode 100644 sw/qa/extras/mailmerge/data/linked-with-condition.odt create mode 100644 sw/qa/extras/mailmerge/data/missing-default-line-color.ott create mode 100644 sw/qa/extras/mailmerge/data/multiple-page-anchored-draws.odt create mode 100644 sw/qa/extras/mailmerge/data/one-empty-address.ods create mode 100644 sw/qa/extras/mailmerge/data/onecell.xlsx create mode 100644 sw/qa/extras/mailmerge/data/pagecounttest.ott create mode 100644 sw/qa/extras/mailmerge/data/section_ps.odt create mode 100644 sw/qa/extras/mailmerge/data/sections_first_last.odt create mode 100644 sw/qa/extras/mailmerge/data/simple-mail-merge-2pages.odt create mode 100644 sw/qa/extras/mailmerge/data/simple-mail-merge.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf118113.ods create mode 100644 sw/qa/extras/mailmerge/data/tdf118113.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf118845.fodt create mode 100644 sw/qa/extras/mailmerge/data/tdf125522.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf128148.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf35798-legacy.fodt create mode 100644 sw/qa/extras/mailmerge/data/tdf35798-legacy.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf35798-new.fodt create mode 100644 sw/qa/extras/mailmerge/data/tdf35798-new.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf62364.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf78611.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf81750.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf89214.odt create mode 100644 sw/qa/extras/mailmerge/data/tdf92623.odt create mode 100644 sw/qa/extras/mailmerge/data/writer-mail-merge.odt create mode 100644 sw/qa/extras/mailmerge/data/writer-merged-mail-merge.odt create mode 100644 sw/qa/extras/mailmerge/mailmerge.cxx create mode 100644 sw/qa/extras/odfexport/data/2_MathType3.docx create mode 100644 sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt create mode 100644 sw/qa/extras/odfexport/data/Formcontrol needs high z-index.odt create mode 100644 sw/qa/extras/odfexport/data/MadeByLO7.odt create mode 100644 sw/qa/extras/odfexport/data/allow-overlap.odt create mode 100644 sw/qa/extras/odfexport/data/arabic-zero-numbering.odt create mode 100644 sw/qa/extras/odfexport/data/arabic-zero3-numbering.odt create mode 100644 sw/qa/extras/odfexport/data/arabic-zero4-numbering.odt create mode 100644 sw/qa/extras/odfexport/data/arabic-zero5-numbering.odt create mode 100644 sw/qa/extras/odfexport/data/border_types.odt create mode 100644 sw/qa/extras/odfexport/data/btlr-cell.odt create mode 100644 sw/qa/extras/odfexport/data/btlr-frame.odt create mode 100644 sw/qa/extras/odfexport/data/chapter-number-new-line.odt create mode 100644 sw/qa/extras/odfexport/data/charborder.odt create mode 100644 sw/qa/extras/odfexport/data/embedded-font-props.odt create mode 100644 sw/qa/extras/odfexport/data/embedded-pdf.odt create mode 100644 sw/qa/extras/odfexport/data/fdo38244.odt create mode 100644 sw/qa/extras/odfexport/data/fdo43807.odt create mode 100644 sw/qa/extras/odfexport/data/fdo58949.docx create mode 100644 sw/qa/extras/odfexport/data/fdo60769.odt create mode 100644 sw/qa/extras/odfexport/data/fdo79358.odt create mode 100644 sw/qa/extras/odfexport/data/fdo86963.odt create mode 100644 sw/qa/extras/odfexport/data/fillbitmap3.odt create mode 100644 sw/qa/extras/odfexport/data/first-header-footer.odt create mode 100644 sw/qa/extras/odfexport/data/footnote-collect-at-end-of-section.fodt create mode 100644 sw/qa/extras/odfexport/data/framebackgrounds.odt create mode 100644 sw/qa/extras/odfexport/data/gerrit13858.odt create mode 100644 sw/qa/extras/odfexport/data/gutter-left.odt create mode 100644 sw/qa/extras/odfexport/data/image-mimetype.odt create mode 100644 sw/qa/extras/odfexport/data/listformat.docx create mode 100644 sw/qa/extras/odfexport/data/listformat.odt create mode 100644 sw/qa/extras/odfexport/data/nestedTableInFooter.odt create mode 100644 sw/qa/extras/odfexport/data/ooo321_stylepagenumber.odt create mode 100644 sw/qa/extras/odfexport/data/oooxml_embedded.sxw create mode 100644 sw/qa/extras/odfexport/data/page-content-bottom.odt create mode 100644 sw/qa/extras/odfexport/data/page-content-top.odt create mode 100644 sw/qa/extras/odfexport/data/pagestyle_background_lo64.odt create mode 100644 sw/qa/extras/odfexport/data/pagestyle_background_lo70.odt create mode 100644 sw/qa/extras/odfexport/data/pagestyle_background_ooo33.odt create mode 100644 sw/qa/extras/odfexport/data/protection-key.fodt create mode 100644 sw/qa/extras/odfexport/data/qrcode-properties.odt create mode 100644 sw/qa/extras/odfexport/data/redlineTextFrame.odt create mode 100644 sw/qa/extras/odfexport/data/referencelanguage.odt create mode 100644 sw/qa/extras/odfexport/data/relh-page-tdf80282.odt create mode 100644 sw/qa/extras/odfexport/data/relh-page.odt create mode 100644 sw/qa/extras/odfexport/data/relw-page.odt create mode 100644 sw/qa/extras/odfexport/data/resolved-comment.odt create mode 100644 sw/qa/extras/odfexport/data/rovas-numbering.odt create mode 100644 sw/qa/extras/odfexport/data/ruby-position.odt create mode 100644 sw/qa/extras/odfexport/data/section-columns-separator.fodt create mode 100644 sw/qa/extras/odfexport/data/sender-initials.fodt create mode 100644 sw/qa/extras/odfexport/data/sha1_correct.odt create mode 100644 sw/qa/extras/odfexport/data/sha1_wrong.odt create mode 100644 sw/qa/extras/odfexport/data/shape-relsize.odt create mode 100644 sw/qa/extras/odfexport/data/shape-with-hyperlink.odt create mode 100644 sw/qa/extras/odfexport/data/shapes-hyperlink.odt create mode 100644 sw/qa/extras/odfexport/data/signatureline-properties.fodt create mode 100644 sw/qa/extras/odfexport/data/spellout-numberingtypes.odt create mode 100644 sw/qa/extras/odfexport/data/style-link.fodt create mode 100644 sw/qa/extras/odfexport/data/sw_hatch.odt create mode 100644 sw/qa/extras/odfexport/data/table-in-frame-in-table-in-header-base.odt create mode 100644 sw/qa/extras/odfexport/data/table_number_format_3.docx create mode 100644 sw/qa/extras/odfexport/data/table_styles_1.odt create mode 100644 sw/qa/extras/odfexport/data/table_styles_2.odt create mode 100644 sw/qa/extras/odfexport/data/table_styles_3.odt create mode 100644 sw/qa/extras/odfexport/data/table_styles_4.odt create mode 100644 sw/qa/extras/odfexport/data/table_styles_5.odt create mode 100644 sw/qa/extras/odfexport/data/tdf100492.odt create mode 100644 sw/qa/extras/odfexport/data/tdf101710.odt create mode 100644 sw/qa/extras/odfexport/data/tdf101856.odt create mode 100644 sw/qa/extras/odfexport/data/tdf101856_overlapped.odt create mode 100644 sw/qa/extras/odfexport/data/tdf103091.fodt create mode 100644 sw/qa/extras/odfexport/data/tdf103567.odt create mode 100644 sw/qa/extras/odfexport/data/tdf104254_noHeaderWrapping.odt create mode 100644 sw/qa/extras/odfexport/data/tdf107292.odt create mode 100644 sw/qa/extras/odfexport/data/tdf107696.odt create mode 100644 sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt create mode 100644 sw/qa/extras/odfexport/data/tdf115815.odt create mode 100644 sw/qa/extras/odfexport/data/tdf118393.odt create mode 100644 sw/qa/extras/odfexport/data/tdf118502.odt create mode 100644 sw/qa/extras/odfexport/data/tdf118637.odt create mode 100644 sw/qa/extras/odfexport/data/tdf121658.odt create mode 100644 sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt create mode 100644 sw/qa/extras/odfexport/data/tdf128504.docx create mode 100644 sw/qa/extras/odfexport/data/tdf129520.docx create mode 100644 sw/qa/extras/odfexport/data/tdf129568-ui.fodt create mode 100644 sw/qa/extras/odfexport/data/tdf129568.fodt create mode 100644 sw/qa/extras/odfexport/data/tdf130314.docx create mode 100644 sw/qa/extras/odfexport/data/tdf130950.odt create mode 100644 sw/qa/extras/odfexport/data/tdf131025_noZerosInTable.odt create mode 100644 sw/qa/extras/odfexport/data/tdf131621.ott create mode 100644 sw/qa/extras/odfexport/data/tdf131812.odt create mode 100644 sw/qa/extras/odfexport/data/tdf132642_keepWithNextTable.odt create mode 100644 sw/qa/extras/odfexport/data/tdf134987.docx create mode 100644 sw/qa/extras/odfexport/data/tdf135144.docx create mode 100644 sw/qa/extras/odfexport/data/tdf135338_firstLeftPageFooter.odt create mode 100644 sw/qa/extras/odfexport/data/tdf136645.odt create mode 100644 sw/qa/extras/odfexport/data/tdf137199.docx create mode 100644 sw/qa/extras/odfexport/data/tdf139126.odt create mode 100644 sw/qa/extras/odfexport/data/tdf140437.odt create mode 100644 sw/qa/extras/odfexport/data/tdf142483.odt create mode 100644 sw/qa/extras/odfexport/data/tdf143605.odt create mode 100644 sw/qa/extras/odfexport/data/tdf143793_noBodyWrapping.odt create mode 100644 sw/qa/extras/odfexport/data/tdf144319.odt create mode 100644 sw/qa/extras/odfexport/data/tdf145361.odt create mode 100644 sw/qa/extras/odfexport/data/tdf146264.odt create mode 100644 sw/qa/extras/odfexport/data/tdf149248.odt create mode 100644 sw/qa/extras/odfexport/data/tdf149324.odt create mode 100644 sw/qa/extras/odfexport/data/tdf149420.odt create mode 100644 sw/qa/extras/odfexport/data/tdf150149.fodt create mode 100644 sw/qa/extras/odfexport/data/tdf150394.odt create mode 100644 sw/qa/extras/odfexport/data/tdf151100.docx create mode 100644 sw/qa/extras/odfexport/data/tdf43569_conditionalfield.doc create mode 100644 sw/qa/extras/odfexport/data/tdf66305.odt create mode 100644 sw/qa/extras/odfexport/data/tdf77961.odt create mode 100644 sw/qa/extras/odfexport/data/tdf92379.fodt create mode 100644 sw/qa/extras/odfexport/data/tdf95806.docx create mode 100644 sw/qa/extras/odfexport/data/tdf99631.docx create mode 100644 sw/qa/extras/odfexport/data/testTdf52065_centerTabs.odt create mode 100644 sw/qa/extras/odfexport/data/textbox-rounded-corners.odt create mode 100644 sw/qa/extras/odfexport/data/textframe-gradient.odt create mode 100644 sw/qa/extras/odfexport/data/textframe-transparent-shadow.odt create mode 100644 sw/qa/extras/odfexport/data/textframe-vertadjust.odt create mode 100644 sw/qa/extras/odfexport/data/user-field-decl-fly.odt create mode 100644 sw/qa/extras/odfexport/data/user-field-decl.odt create mode 100644 sw/qa/extras/odfexport/data/userdefattr-tablecell.odt create mode 100644 sw/qa/extras/odfexport/data/whitespace.odt create mode 100644 sw/qa/extras/odfexport/odfexport.cxx create mode 100644 sw/qa/extras/odfexport/odfexport2.cxx create mode 100644 sw/qa/extras/odfimport/data/BibliographyEntryField.odt create mode 100644 sw/qa/extras/odfimport/data/PageAnchorZIndexFirstPage.fodt create mode 100644 sw/qa/extras/odfimport/data/PageAnchorZIndexSecondPage.fodt create mode 100644 sw/qa/extras/odfimport/data/PageBackground.odt create mode 100644 sw/qa/extras/odfimport/data/Word2010AsCharShape.odt create mode 100644 sw/qa/extras/odfimport/data/annotation-formatting.odt create mode 100644 sw/qa/extras/odfimport/data/bnc800714.fodt create mode 100644 sw/qa/extras/odfimport/data/borders_ooo33.odt create mode 100644 sw/qa/extras/odfimport/data/dateFormFormats.odt create mode 100644 sw/qa/extras/odfimport/data/empty-svg-family-name.odt create mode 100644 sw/qa/extras/odfimport/data/fdo37606.odt create mode 100644 sw/qa/extras/odfimport/data/fdo47267-3.odt create mode 100644 sw/qa/extras/odfimport/data/fdo53210.odt create mode 100644 sw/qa/extras/odfimport/data/fdo55814.odt create mode 100644 sw/qa/extras/odfimport/data/fdo56272.odt create mode 100644 sw/qa/extras/odfimport/data/fdo60842.odt create mode 100644 sw/qa/extras/odfimport/data/fdo68839.odt create mode 100644 sw/qa/extras/odfimport/data/fdo69862.odt create mode 100644 sw/qa/extras/odfimport/data/fdo69979.odt create mode 100644 sw/qa/extras/odfimport/data/fdo75872_aoo40.odt create mode 100644 sw/qa/extras/odfimport/data/fdo75872_ooo33.odt create mode 100644 sw/qa/extras/odfimport/data/fdo79269.odt create mode 100644 sw/qa/extras/odfimport/data/fdo79269_header.odt create mode 100644 sw/qa/extras/odfimport/data/fdo81223.odt create mode 100644 sw/qa/extras/odfimport/data/fdo82165.odt create mode 100644 sw/qa/extras/odfimport/data/fdo90130-1.odt create mode 100644 sw/qa/extras/odfimport/data/fdo90130-2.odt create mode 100644 sw/qa/extras/odfimport/data/forcepoint101.fodt create mode 100644 sw/qa/extras/odfimport/data/forcepoint108.fodt create mode 100644 sw/qa/extras/odfimport/data/hello.odt create mode 100644 sw/qa/extras/odfimport/data/i61225.sxw create mode 100644 sw/qa/extras/odfimport/data/ooo32780-1.odt create mode 100644 sw/qa/extras/odfimport/data/ooo77837-1.odt create mode 100644 sw/qa/extras/odfimport/data/paste-first-para-direct-format.odt create mode 100644 sw/qa/extras/odfimport/data/space.odt create mode 100644 sw/qa/extras/odfimport/data/spellmenu-redline.odt create mode 100644 sw/qa/extras/odfimport/data/tdf100033_1.odt create mode 100644 sw/qa/extras/odfimport/data/tdf100033_2.odt create mode 100644 sw/qa/extras/odfimport/data/tdf101729.odt create mode 100644 sw/qa/extras/odfimport/data/tdf103025.odt create mode 100644 sw/qa/extras/odfimport/data/tdf107392.odt create mode 100644 sw/qa/extras/odfimport/data/tdf107776.fodt create mode 100644 sw/qa/extras/odfimport/data/tdf108482.odt create mode 100644 sw/qa/extras/odfimport/data/tdf109080_loext_ns.odt create mode 100644 sw/qa/extras/odfimport/data/tdf109080_style_ns.odt create mode 100644 sw/qa/extras/odfimport/data/tdf109228.odt create mode 100644 sw/qa/extras/odfimport/data/tdf113289.odt create mode 100644 sw/qa/extras/odfimport/data/tdf115079.odt create mode 100644 sw/qa/extras/odfimport/data/tdf116195.odt create mode 100644 sw/qa/extras/odfimport/data/tdf120677.fodt create mode 100644 sw/qa/extras/odfimport/data/tdf123829.odt create mode 100644 sw/qa/extras/odfimport/data/tdf123968.odt create mode 100644 sw/qa/extras/odfimport/data/tdf128737.odt create mode 100644 sw/qa/extras/odfimport/data/tdf133459.odt create mode 100644 sw/qa/extras/odfimport/data/tdf134971a.odt create mode 100644 sw/qa/extras/odfimport/data/tdf134971b.odt create mode 100644 sw/qa/extras/odfimport/data/tdf138879.odt create mode 100644 sw/qa/extras/odfimport/data/tdf146257.odt create mode 100644 sw/qa/extras/odfimport/data/tdf146597.odt create mode 100644 sw/qa/extras/odfimport/data/tdf149978.fodt create mode 100644 sw/qa/extras/odfimport/data/tdf41542_borderlessPadding.odt create mode 100644 sw/qa/extras/odfimport/data/tdf74524.odt create mode 100644 sw/qa/extras/odfimport/data/tdf75221.odt create mode 100644 sw/qa/extras/odfimport/data/tdf76322_columnBreakInHeader.docx create mode 100644 sw/qa/extras/odfimport/data/tdf76349_1columnBreak.odt create mode 100644 sw/qa/extras/odfimport/data/tdf89802.fodt create mode 100644 sw/qa/extras/odfimport/data/tdf92586.odt create mode 100644 sw/qa/extras/odfimport/data/tdf94882.odt create mode 100644 sw/qa/extras/odfimport/data/tdf96113.odt create mode 100644 sw/qa/extras/odfimport/data/timeFormFormats.odt create mode 100644 sw/qa/extras/odfimport/data/vmerge-cell-border.odt create mode 100644 sw/qa/extras/odfimport/odfimport.cxx create mode 100644 sw/qa/extras/ooxmlexport/data/090716_Studentische_Arbeit_VWS.docx create mode 100644 sw/qa/extras/ooxmlexport/data/1-table-1-page.docx create mode 100644 sw/qa/extras/ooxmlexport/data/128197_compat14.docx create mode 100644 sw/qa/extras/ooxmlexport/data/128197_compat15.docx create mode 100644 sw/qa/extras/ooxmlexport/data/1_page.docx create mode 100644 sw/qa/extras/ooxmlexport/data/2-id.docx create mode 100644 sw/qa/extras/ooxmlexport/data/2120112713.docx create mode 100644 sw/qa/extras/ooxmlexport/data/2120112713_OpenBrace.docx create mode 100644 sw/qa/extras/ooxmlexport/data/2129393649.docx create mode 100644 sw/qa/extras/ooxmlexport/data/2_table_doc.docx create mode 100644 sw/qa/extras/ooxmlexport/data/2col-header.docx create mode 100644 sw/qa/extras/ooxmlexport/data/99_Fields.docx create mode 100644 sw/qa/extras/ooxmlexport/data/AnchorId.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Chart_BorderLine_Style.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Chart_Plot_BorderLine_Style.docx create mode 100644 sw/qa/extras/ooxmlexport/data/CommentDone.docx create mode 100644 sw/qa/extras/ooxmlexport/data/EmbeddedExcelChart.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Encrypted_LO_Standard_abc.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Encrypted_MSO2007_abc.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Encrypted_MSO2010_abc.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Encrypted_MSO2013_abc.docx create mode 100644 sw/qa/extras/ooxmlexport/data/EquationAsScientificNumbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/EquationWithAboveAndBelowCaption.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO73034.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO73546.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO74105.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO74106.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO74215.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO74774.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO74775.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO75133.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO76248.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO76312.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO77715.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO78292.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FDO78590.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FigureAsLabelPicture.docx create mode 100644 sw/qa/extras/ooxmlexport/data/FileWithInvalidImageLink.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Hau_min_list2.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/ImageCrop.docx create mode 100644 sw/qa/extras/ooxmlexport/data/IndexFieldFlagF.docx create mode 100644 sw/qa/extras/ooxmlexport/data/LineStyle_DashType.docx create mode 100644 sw/qa/extras/ooxmlexport/data/LineStyle_DashType_VML.docx create mode 100644 sw/qa/extras/ooxmlexport/data/LinkedTextBoxes.docx create mode 100644 sw/qa/extras/ooxmlexport/data/NoFillAttrInImagedata.docx create mode 100644 sw/qa/extras/ooxmlexport/data/NumberedList.docx create mode 100644 sw/qa/extras/ooxmlexport/data/PreserveWfieldTOC.docx create mode 100644 sw/qa/extras/ooxmlexport/data/PreserveXfieldTOC.docx create mode 100644 sw/qa/extras/ooxmlexport/data/SdtContent.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Shape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/ShapeOverlappingWithSdt.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Simple-TOC.odt create mode 100644 sw/qa/extras/ooxmlexport/data/TC-table-DnD-move.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TC-table-Separate-Move.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TC-table-rowDND-front.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TC-table-rowDND.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TCTagMisMatch.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TOC_field_b.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TOC_field_f.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TableWithAboveCaptions.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Table_cell_auto_width_fdo69656.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Tdf147485.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt create mode 100644 sw/qa/extras/ooxmlexport/data/TestVMLData.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TextEffects_Glow_Shadow_Reflection.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TextEffects_Groupshapes.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TextEffects_InStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TextEffects_Props3d.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TextEffects_Props3d_Ligatures_NumForm_NumSpacing.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TextEffects_StylisticSets_CntxtAlts.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TextEffects_TextFill.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TextEffects_TextOutline.docx create mode 100644 sw/qa/extras/ooxmlexport/data/TextFrameRotation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/Unsupportedtextfields.docx create mode 100644 sw/qa/extras/ooxmlexport/data/WPGbodyPr.docx create mode 100644 sw/qa/extras/ooxmlexport/data/a4andborders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/abi11739.docx create mode 100644 sw/qa/extras/ooxmlexport/data/absolute-link.docx create mode 100644 sw/qa/extras/ooxmlexport/data/activex_checkbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/activex_control_align.odt create mode 100644 sw/qa/extras/ooxmlexport/data/activex_control_at_run_end.odt create mode 100644 sw/qa/extras/ooxmlexport/data/activex_option_button_group.docx create mode 100644 sw/qa/extras/ooxmlexport/data/activex_textbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/afterlines.docx create mode 100644 sw/qa/extras/ooxmlexport/data/all_gaps_word.docx create mode 100644 sw/qa/extras/ooxmlexport/data/alphabeticalIndex_AutoColumn.docx create mode 100644 sw/qa/extras/ooxmlexport/data/alphabeticalIndex_MultipleColumns.docx create mode 100644 sw/qa/extras/ooxmlexport/data/anchor-position.docx create mode 100644 sw/qa/extras/ooxmlexport/data/annotation-formatting.docx create mode 100644 sw/qa/extras/ooxmlexport/data/arabic-zero-numbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/arabic-zero3-numbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/arabic-zero4-numbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/arabic-zero5-numbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/artistic_effects.docx create mode 100644 sw/qa/extras/ooxmlexport/data/author-property.docx create mode 100644 sw/qa/extras/ooxmlexport/data/autofit.docx create mode 100644 sw/qa/extras/ooxmlexport/data/bad.docm create mode 100644 sw/qa/extras/ooxmlexport/data/behinddoc.docx create mode 100644 sw/qa/extras/ooxmlexport/data/bezier.odt create mode 100644 sw/qa/extras/ooxmlexport/data/bnc519228_odd-breaksB.docx create mode 100644 sw/qa/extras/ooxmlexport/data/bnc581614.doc create mode 100644 sw/qa/extras/ooxmlexport/data/bnc637947.odt create mode 100644 sw/qa/extras/ooxmlexport/data/bnc780044_spacing.docx create mode 100644 sw/qa/extras/ooxmlexport/data/bnc834035.odt create mode 100644 sw/qa/extras/ooxmlexport/data/bnc837302.docx create mode 100644 sw/qa/extras/ooxmlexport/data/bnc865381.docx create mode 100644 sw/qa/extras/ooxmlexport/data/bnc875718.docx create mode 100644 sw/qa/extras/ooxmlexport/data/bnc884615-mso-position.docx create mode 100644 sw/qa/extras/ooxmlexport/data/bnc884615.docx create mode 100644 sw/qa/extras/ooxmlexport/data/bnc891663.docx create mode 100644 sw/qa/extras/ooxmlexport/data/btlr-frame.odt create mode 100644 sw/qa/extras/ooxmlexport/data/btlr-textbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/calendar1.docx create mode 100644 sw/qa/extras/ooxmlexport/data/calendar2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/calendar3.docx create mode 100644 sw/qa/extras/ooxmlexport/data/calendar4.docx create mode 100644 sw/qa/extras/ooxmlexport/data/calendar5.docx create mode 100644 sw/qa/extras/ooxmlexport/data/caption.docx create mode 100644 sw/qa/extras/ooxmlexport/data/cell-btlr.docx create mode 100644 sw/qa/extras/ooxmlexport/data/cell-grid-span.docx create mode 100644 sw/qa/extras/ooxmlexport/data/cell-sdt-redline.docx create mode 100644 sw/qa/extras/ooxmlexport/data/charborder.odt create mode 100644 sw/qa/extras/ooxmlexport/data/chart-dupe.docx create mode 100644 sw/qa/extras/ooxmlexport/data/chart-in-footer.docx create mode 100644 sw/qa/extras/ooxmlexport/data/chart-prop.docx create mode 100644 sw/qa/extras/ooxmlexport/data/chart-size.docx create mode 100644 sw/qa/extras/ooxmlexport/data/checkbox-control.docx create mode 100644 sw/qa/extras/ooxmlexport/data/chtoutline.docx create mode 100644 sw/qa/extras/ooxmlexport/data/cjklist30.docx create mode 100644 sw/qa/extras/ooxmlexport/data/cjklist31.docx create mode 100644 sw/qa/extras/ooxmlexport/data/cjklist34.docx create mode 100644 sw/qa/extras/ooxmlexport/data/cjklist35.docx create mode 100644 sw/qa/extras/ooxmlexport/data/cjklist44.docx create mode 100644 sw/qa/extras/ooxmlexport/data/clearing-break.docx create mode 100644 sw/qa/extras/ooxmlexport/data/columnbreak.docx create mode 100644 sw/qa/extras/ooxmlexport/data/combobox-control.docx create mode 100644 sw/qa/extras/ooxmlexport/data/comment_initials.odt create mode 100644 sw/qa/extras/ooxmlexport/data/comments-nested.odt create mode 100644 sw/qa/extras/ooxmlexport/data/conditional-text.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/conditionalstyles-tbllook.docx create mode 100644 sw/qa/extras/ooxmlexport/data/cont-sect-break-header-footer.docx create mode 100644 sw/qa/extras/ooxmlexport/data/content-control-grab-bag.docx create mode 100644 sw/qa/extras/ooxmlexport/data/content-control-shape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/controlshape.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/cp1000015.odt create mode 100644 sw/qa/extras/ooxmlexport/data/crop-pixel.docx create mode 100644 sw/qa/extras/ooxmlexport/data/crop-roundtrip.docx create mode 100644 sw/qa/extras/ooxmlexport/data/croppedAndRotated.odt create mode 100644 sw/qa/extras/ooxmlexport/data/custom-properties.docx create mode 100644 sw/qa/extras/ooxmlexport/data/customxml.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dashed_line_custdash_1000th_of_percent.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dashed_line_custdash_percentage.docx create mode 100644 sw/qa/extras/ooxmlexport/data/date-control.docx create mode 100644 sw/qa/extras/ooxmlexport/data/date_field_at_end_of_paragraph.docx create mode 100644 sw/qa/extras/ooxmlexport/data/date_field_in_shape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/decimal-numbering-no-leveltext.docx create mode 100644 sw/qa/extras/ooxmlexport/data/default-sect-break-cols.docx create mode 100644 sw/qa/extras/ooxmlexport/data/defaultStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dkvert.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-charheight-default.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-customgeometry-cubicbezier.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-gradientfill-theme.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-groupshape-capitalization.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-groupshape-childposition.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-groupshape-paraspacing.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-groupshape-relsize.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-groupshape-runfonts.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-groupshape-sdt.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-picture-in-textframe.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-rectangle-relsize.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-shape-fillbitmapcrop.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-shape-fillpattern.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-shape-relsize.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-shape-title.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-textframe-vertadjust.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-textshape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-textshapeB.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dml-zorder.odt create mode 100644 sw/qa/extras/ooxmlexport/data/docxopenhyperlinkbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dont-add-new-styles.docx create mode 100644 sw/qa/extras/ooxmlexport/data/drawinglayer-pic-pos.docx create mode 100644 sw/qa/extras/ooxmlexport/data/drawingml-flipv.docx create mode 100644 sw/qa/extras/ooxmlexport/data/dropdown-in-cell.docx create mode 100644 sw/qa/extras/ooxmlexport/data/duplicate-east-asia.odt create mode 100644 sw/qa/extras/ooxmlexport/data/effect-extent-inline.docx create mode 100644 sw/qa/extras/ooxmlexport/data/effect-extent-line-width.docx create mode 100644 sw/qa/extras/ooxmlexport/data/effect-extent.docx create mode 100644 sw/qa/extras/ooxmlexport/data/effectextent-margin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/em.docx create mode 100644 sw/qa/extras/ooxmlexport/data/embedded-xlsx.docx create mode 100644 sw/qa/extras/ooxmlexport/data/embedded_images.odt create mode 100644 sw/qa/extras/ooxmlexport/data/empty-annotation-mark.docx create mode 100644 sw/qa/extras/ooxmlexport/data/empty-date-control.odt create mode 100644 sw/qa/extras/ooxmlexport/data/empty.odt create mode 100644 sw/qa/extras/ooxmlexport/data/endingSectionProps.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fail_bracePair.odt create mode 100644 sw/qa/extras/ooxmlexport/data/fdo106029.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo38244.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo38414.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo43093.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo43093b.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo44689_start_page_0.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo44689_start_page_7.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo46361.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo47669.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo48557.odt create mode 100644 sw/qa/extras/ooxmlexport/data/fdo51034.odt create mode 100644 sw/qa/extras/ooxmlexport/data/fdo51550.odt create mode 100644 sw/qa/extras/ooxmlexport/data/fdo52208.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo53985.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo55187.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo55381.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo56679.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo58577.odt create mode 100644 sw/qa/extras/ooxmlexport/data/fdo59273.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo59638.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo60922.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo60957-2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo60990.odt create mode 100644 sw/qa/extras/ooxmlexport/data/fdo61343.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo63053.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo63685.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo64238_a.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo64238_b.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo64350.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo64826.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo65090.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo65265.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo65295.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo65400.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo65632.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo65655.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo65718.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo65833.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo66145.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo66474.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo66543.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo66688.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo66773.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo66781.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo66929.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo67013.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo67737.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo68418.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo68607.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo68787.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo69548.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo69616.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo69636.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo69644.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo69649.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo70457.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo70812.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo70838.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo70942.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo71302.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo71646.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo71785.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo71834.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo72560.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo72560b.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo72560c.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo72560d.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo72560e.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo73215.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo73227.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo73247.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo73389.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo73541.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo73550.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo73556.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo73596_AlphaSeparator.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo73596_RunInStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo74110.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo74153.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo74357.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo74401.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo74566.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo74605.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo74745.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo74792.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo75431.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76016.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76098.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76101.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76163.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76249.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76316.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76586.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76587.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76589.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76591.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76597.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76741.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76803.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76934.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo76979.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77117.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77129.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77476.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77716.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77718.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77719.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77725.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77727.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77759.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77812.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77887.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo77890.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78284.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78300.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78384.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78420.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78432.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78469.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78474.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78599.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78651.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78654.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78658.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78659.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78663.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78882.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78883.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78886.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78887.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78904.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78907.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78910.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78939.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo78957.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79008.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79062.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79256.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79535.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79540.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79591.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79668.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79738.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79817.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79822.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79915.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79968.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79969_xlsb.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo79969_xlsm.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80097.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80410.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80522.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80523_pptm.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80523_sldm.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80555.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80800.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80800b_tableStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80895.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80897.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80898.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80902.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo80997.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo81031.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo81341.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo81381.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo81486.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo81492.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo81945.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo81946.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo82123.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo82492.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo83044.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo83048.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo83057.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo83428.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fdo85542.docx create mode 100644 sw/qa/extras/ooxmlexport/data/field-rotated.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/file_crash.docx create mode 100644 sw/qa/extras/ooxmlexport/data/first-header-footer.docx create mode 100644 sw/qa/extras/ooxmlexport/data/first-header-footerB.odt create mode 100644 sw/qa/extras/ooxmlexport/data/fixed-date-field.docx create mode 100644 sw/qa/extras/ooxmlexport/data/flip_and_rotate.odt create mode 100644 sw/qa/extras/ooxmlexport/data/floating-table-position.docx create mode 100644 sw/qa/extras/ooxmlexport/data/floating-tables-anchor.docx create mode 100644 sw/qa/extras/ooxmlexport/data/floatingtbl_with_formula.docx create mode 100644 sw/qa/extras/ooxmlexport/data/fly_fieldmark.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/font-name-is-empty.docx create mode 100644 sw/qa/extras/ooxmlexport/data/footer-body-distance.docx create mode 100644 sw/qa/extras/ooxmlexport/data/footer-contain-hyperlink.docx create mode 100644 sw/qa/extras/ooxmlexport/data/footer-margin-lost.docx create mode 100644 sw/qa/extras/ooxmlexport/data/footnote.docx create mode 100644 sw/qa/extras/ooxmlexport/data/footnotesep.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/frame-wrap-auto.docx create mode 100644 sw/qa/extras/ooxmlexport/data/frame.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/frame_size_export.docx create mode 100644 sw/qa/extras/ooxmlexport/data/glossaryWithEmail.docx create mode 100644 sw/qa/extras/ooxmlexport/data/grabbag.docx create mode 100644 sw/qa/extras/ooxmlexport/data/gradient-fill-preservation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/graphic-object-fliph.docx create mode 100644 sw/qa/extras/ooxmlexport/data/gridbefore.docx create mode 100644 sw/qa/extras/ooxmlexport/data/groupshape-picture.docx create mode 100644 sw/qa/extras/ooxmlexport/data/groupshape-rotation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/groupshape-smarttag.docx create mode 100644 sw/qa/extras/ooxmlexport/data/groupshape-textbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/groupshape-theme-font.docx create mode 100644 sw/qa/extras/ooxmlexport/data/groupshape-trackedchanges.docx create mode 100644 sw/qa/extras/ooxmlexport/data/gutter-left.docx create mode 100644 sw/qa/extras/ooxmlexport/data/gutter-top.docx create mode 100644 sw/qa/extras/ooxmlexport/data/header-border.docx create mode 100644 sw/qa/extras/ooxmlexport/data/headerfooter-link-to-prev.docx create mode 100644 sw/qa/extras/ooxmlexport/data/hello.docm create mode 100644 sw/qa/extras/ooxmlexport/data/hello.docx create mode 100644 sw/qa/extras/ooxmlexport/data/hidemark.docx create mode 100644 sw/qa/extras/ooxmlexport/data/hyperlink-field.odt create mode 100644 sw/qa/extras/ooxmlexport/data/hyperlink.docx create mode 100644 sw/qa/extras/ooxmlexport/data/hyperlinkshape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/hyphenation.odt create mode 100644 sw/qa/extras/ooxmlexport/data/i120928.docx create mode 100644 sw/qa/extras/ooxmlexport/data/i124106.docx create mode 100644 sw/qa/extras/ooxmlexport/data/image-comment-at-char.docx create mode 100644 sw/qa/extras/ooxmlexport/data/image-noborder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/image_data.docx create mode 100644 sw/qa/extras/ooxmlexport/data/imgshadow.docx create mode 100644 sw/qa/extras/ooxmlexport/data/indentation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/indents.docx create mode 100644 sw/qa/extras/ooxmlexport/data/inheritFirstHeader.docx create mode 100644 sw/qa/extras/ooxmlexport/data/inline-groupshape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/inline-sdt-header.docx create mode 100644 sw/qa/extras/ooxmlexport/data/internal_hyperlink_frame.odt create mode 100644 sw/qa/extras/ooxmlexport/data/internal_hyperlink_ole.odt create mode 100644 sw/qa/extras/ooxmlexport/data/internal_hyperlink_region.odt create mode 100644 sw/qa/extras/ooxmlexport/data/internal_hyperlink_table.odt create mode 100644 sw/qa/extras/ooxmlexport/data/invalid_date_form_field.docx create mode 100644 sw/qa/extras/ooxmlexport/data/kde216114-1.odt create mode 100644 sw/qa/extras/ooxmlexport/data/kde302504-1.odt create mode 100644 sw/qa/extras/ooxmlexport/data/kern.docx create mode 100644 sw/qa/extras/ooxmlexport/data/large-twips.docx create mode 100644 sw/qa/extras/ooxmlexport/data/layout-flow-alt-alone.docx create mode 100644 sw/qa/extras/ooxmlexport/data/libreoffice.png create mode 100644 sw/qa/extras/ooxmlexport/data/list_notcounted_indent.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/lvlPicBulletId.docx create mode 100644 sw/qa/extras/ooxmlexport/data/mailmerge.docx create mode 100644 sw/qa/extras/ooxmlexport/data/margins_from_style.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-accents.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-d.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-escape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-escaping.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-lim.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-literal.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-matrix.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-mso2k7.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-nary.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-overbrace_underbrace.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-overstrike.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-placeholders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-rad.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-subscripts.docx create mode 100644 sw/qa/extras/ooxmlexport/data/math-vertical_stacks.docx create mode 100644 sw/qa/extras/ooxmlexport/data/mathtype.docx create mode 100644 sw/qa/extras/ooxmlexport/data/mce-nested.docx create mode 100644 sw/qa/extras/ooxmlexport/data/mce-wpg.docx create mode 100644 sw/qa/extras/ooxmlexport/data/mce.docx create mode 100644 sw/qa/extras/ooxmlexport/data/missing-path.docx create mode 100644 sw/qa/extras/ooxmlexport/data/missing_newline.odt create mode 100644 sw/qa/extras/ooxmlexport/data/mso-spt180.docx create mode 100644 sw/qa/extras/ooxmlexport/data/msobrightnesscontrast.docx create mode 100644 sw/qa/extras/ooxmlexport/data/multi-column-line-separator-SAVED.docx create mode 100644 sw/qa/extras/ooxmlexport/data/multi-column-separator-with-line.docx create mode 100644 sw/qa/extras/ooxmlexport/data/multi-page-toc.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n592908-frame.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n592908-picture.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n652364.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n693238.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n705956-1.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n705956-2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n747461.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n750255.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n750935.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n751054.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n751117.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n764005.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n766481.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n766487.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n775906.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n777337.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n778828.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n778836.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n779630.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n779642.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n779834.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n779941.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n780563.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n780843.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n780843b.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n780853.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n782345.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n783638.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n785767.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n789482.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n792778.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n793262.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n793998.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n816593.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n820509.docx create mode 100644 sw/qa/extras/ooxmlexport/data/n822175.odt create mode 100644 sw/qa/extras/ooxmlexport/data/n830205.docx create mode 100644 sw/qa/extras/ooxmlexport/data/negative-cell-margin-twips.docx create mode 100644 sw/qa/extras/ooxmlexport/data/nested-text-frames.odt create mode 100644 sw/qa/extras/ooxmlexport/data/nestedAlternateContent.docx create mode 100644 sw/qa/extras/ooxmlexport/data/no-numlevel-but-indented.odt create mode 100644 sw/qa/extras/ooxmlexport/data/noDefault.docx create mode 100644 sw/qa/extras/ooxmlexport/data/non_ascii_link.docx create mode 100644 sw/qa/extras/ooxmlexport/data/nonbmpchar.docx create mode 100644 sw/qa/extras/ooxmlexport/data/num-override-lvltext.docx create mode 100644 sw/qa/extras/ooxmlexport/data/num-override-start.docx create mode 100644 sw/qa/extras/ooxmlexport/data/num-parent-style.docx create mode 100644 sw/qa/extras/ooxmlexport/data/number-portion-format.odt create mode 100644 sw/qa/extras/ooxmlexport/data/numbering-font.docx create mode 100644 sw/qa/extras/ooxmlexport/data/numbering1.docx create mode 100644 sw/qa/extras/ooxmlexport/data/numlist-zhcn.odt create mode 100644 sw/qa/extras/ooxmlexport/data/numlist-zhtw.odt create mode 100644 sw/qa/extras/ooxmlexport/data/object_cross_reference.odt create mode 100644 sw/qa/extras/ooxmlexport/data/ooo106020-1.odt create mode 100644 sw/qa/extras/ooxmlexport/data/ooo34469-1.odt create mode 100644 sw/qa/extras/ooxmlexport/data/ooo39250-1-min.rtf create mode 100644 sw/qa/extras/ooxmlexport/data/ooo39845-7.odt create mode 100644 sw/qa/extras/ooxmlexport/data/ooo47778-3.odt create mode 100644 sw/qa/extras/ooxmlexport/data/ooo47778-4.odt create mode 100644 sw/qa/extras/ooxmlexport/data/ooo67471-2.odt create mode 100644 sw/qa/extras/ooxmlexport/data/ooo72950-1.odt create mode 100644 sw/qa/extras/ooxmlexport/data/ooo96040-2.odt create mode 100644 sw/qa/extras/ooxmlexport/data/ooxml-triangle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/open-as-read-only.docx create mode 100644 sw/qa/extras/ooxmlexport/data/outline-number-types.odt create mode 100644 sw/qa/extras/ooxmlexport/data/page-background.docx create mode 100644 sw/qa/extras/ooxmlexport/data/page-border-shadow.docx create mode 100644 sw/qa/extras/ooxmlexport/data/page-borders-export-case-2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/page-break-before.docx create mode 100644 sw/qa/extras/ooxmlexport/data/page-content-bottom.docx create mode 100644 sw/qa/extras/ooxmlexport/data/page-graphic-background.odt create mode 100644 sw/qa/extras/ooxmlexport/data/pageBreak_after.odt create mode 100644 sw/qa/extras/ooxmlexport/data/pagerelsize.docx create mode 100644 sw/qa/extras/ooxmlexport/data/para-adjust-distribute.docx create mode 100644 sw/qa/extras/ooxmlexport/data/para-auto-spacing.docx create mode 100644 sw/qa/extras/ooxmlexport/data/para-shading.docx create mode 100644 sw/qa/extras/ooxmlexport/data/para-shadow.docx create mode 100644 sw/qa/extras/ooxmlexport/data/para-style-num-level.docx create mode 100644 sw/qa/extras/ooxmlexport/data/paragraph-mark-nonempty.odt create mode 100644 sw/qa/extras/ooxmlexport/data/paragraph-mark.docx create mode 100644 sw/qa/extras/ooxmlexport/data/paragraph-mark2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/paragraph-sdt.docx create mode 100644 sw/qa/extras/ooxmlexport/data/paragraphWithComments.docx create mode 100644 sw/qa/extras/ooxmlexport/data/parasplit-on-section-border.odt create mode 100644 sw/qa/extras/ooxmlexport/data/picture-artistic-effects-preservation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/picture-effects-preservation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/picture-with-schemecolor.docx create mode 100644 sw/qa/extras/ooxmlexport/data/picture-wrap-polygon.docx create mode 100644 sw/qa/extras/ooxmlexport/data/pictureWatermark.docx create mode 100644 sw/qa/extras/ooxmlexport/data/picture_colormode_black_white.odt create mode 100644 sw/qa/extras/ooxmlexport/data/picture_colormode_grayscale.docx create mode 100644 sw/qa/extras/ooxmlexport/data/picture_colormode_watermark.odt create mode 100644 sw/qa/extras/ooxmlexport/data/plausable-border.docx create mode 100644 sw/qa/extras/ooxmlexport/data/position-and-rotation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/preserve_Z_field_TOC.docx create mode 100644 sw/qa/extras/ooxmlexport/data/preset-shape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/protectedform.docx create mode 100644 sw/qa/extras/ooxmlexport/data/quicktables.docx create mode 100644 sw/qa/extras/ooxmlexport/data/rel-size-round.docx create mode 100644 sw/qa/extras/ooxmlexport/data/relative-link.docx create mode 100644 sw/qa/extras/ooxmlexport/data/relorientation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/rhbz1180114.docx create mode 100644 sw/qa/extras/ooxmlexport/data/rhbz988516.docx create mode 100644 sw/qa/extras/ooxmlexport/data/rot180-flipv.docx create mode 100644 sw/qa/extras/ooxmlexport/data/rot270-flipv.docx create mode 100644 sw/qa/extras/ooxmlexport/data/rot90-fliph.docx create mode 100644 sw/qa/extras/ooxmlexport/data/rotated_shape.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/rprchange_closed.docx create mode 100644 sw/qa/extras/ooxmlexport/data/rtl-gutter.docx create mode 100644 sw/qa/extras/ooxmlexport/data/rubyhyperlink.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/sample.dotx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-2-para.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-2-run.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-alias.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-before-field.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-citation-run.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-company-multipara.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-date-duplicate.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-header.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sdt-run-picture.docx create mode 100644 sw/qa/extras/ooxmlexport/data/section_break_numbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/sectionprot.odt create mode 100644 sw/qa/extras/ooxmlexport/data/sectionprot2.odt create mode 100644 sw/qa/extras/ooxmlexport/data/shape-3d-effect-preservation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/shape-atpage-in-table.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/shape-effect-preservation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/shape-in-floattable.docx create mode 100644 sw/qa/extras/ooxmlexport/data/shape-theme-preservation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/signature-line-all-props-set.docx create mode 100644 sw/qa/extras/ooxmlexport/data/simple-sdts.docx create mode 100644 sw/qa/extras/ooxmlexport/data/smartart.docx create mode 100644 sw/qa/extras/ooxmlexport/data/strict-smartart.docx create mode 100644 sw/qa/extras/ooxmlexport/data/strict.docx create mode 100644 sw/qa/extras/ooxmlexport/data/style-inheritance.docx create mode 100644 sw/qa/extras/ooxmlexport/data/symbol_chicago_list.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-alignment.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-auto-column-fixed-size.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-auto-column-fixed-size2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-auto-nested.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-black_fill.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-borders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-btlr-center.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-cell-margin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-floating-margins.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-floating.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-pagebreak.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-position-14.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-position-15.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-row-data-displayed-twice.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-rtl.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-start-2-sdt.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-style-border-export.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-style-border.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-style-cell-back-color.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-style-conf-nested.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-style-parprop.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-style-rPr-sz.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table-theme-preservation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/table.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tableCurrupt.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tablePreferredWidth.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table_atleast.docx create mode 100644 sw/qa/extras/ooxmlexport/data/table_cross_reference.odt create mode 100644 sw/qa/extras/ooxmlexport/data/table_cross_reference_custom_format.odt create mode 100644 sw/qa/extras/ooxmlexport/data/table_lineRule.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tableborder-finedash.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tblppr-shape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tblr-height.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tbrl-frame-vml.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tbrl-textbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf100075.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf100581.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf100751_arrowBothFlip.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf101122_noFillForCustomShape.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf101589_dontSplitTable.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf102466.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103001.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103090.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103389.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103544.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103573.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103651.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakB.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakC.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakD.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakE.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103976.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf103982.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104061_tableSectionColumns.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104115.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104150.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104162.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104348_contextMargin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104354-2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104354.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104354_firstParaInSection.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104418.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104420_lostParagraph.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104539.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104565_ArrowPosition.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104707_urlComment.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104713_undefinedStyles.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104797.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104823.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf105095.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf105215.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf105444.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf105485.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf105490_negativeMargins.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf105688.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf105875_VmlShapeRotationWithFlip.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106001-2.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106001.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106062_nonHangingFootnote.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106132.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106174_rtlParaAlign.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106492.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106541_noinheritChapterNumbering.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106690-cell.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106690.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106724.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106843.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106953.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106970.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf106974_int32Crop.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107020.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107033.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107035.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107104.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107111.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107119.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107359-char-pitch.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107618.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107626.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107684.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107837.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107889.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf107969.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf108269.docm create mode 100644 sw/qa/extras/ooxmlexport/data/tdf108350_noFontdefaults.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf108493.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf108496.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf108505.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf108682.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf108944_footnoteSeparator2.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf108973_backgroundTextbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf108973_foregroundTextbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf109063.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf109184.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf109306.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf109310_endnoteStyleForMSO.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf111964.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf112103_tablebgnofill.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf112118.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf112169.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf112287.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf112312_AutoFitForLegacyShapes.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf112352_nextPageColumns.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf112446_frameStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf112694.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf113183.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf113258.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf113258_noBeforeAutospacing.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf113399.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf113547.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf113608_runAwayNumbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf113849_evenAndOddHeaders.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf114308.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf114703.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf114882.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf115030.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf115094v3.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf115212.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf115557.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf115719.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf115719b.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf115861.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116084.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116194.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116371.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116394.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116410.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116436_rowFill.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116801.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116883.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116976.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf116985.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf117137.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf117297_tableStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf117504_numberingIndent.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf117805.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf117988.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118169.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118242.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118361_RTLfootnoteSeparator.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118393.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118521_marginsLR.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118535.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118682.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118691.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118701.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118702.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118812_tableStyles-comprehensive.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118947_tableStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf118947_tableStyle2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119037.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119054.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119143.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119188_list_margin_in_cell.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119201.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119760_positionCellBorder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119760_tableInTablePosition.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119800.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119809.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf119952_negativeMargins.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120224_textControlCrossRef.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120315.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120338.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120344_FontTypes.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120394.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120412_400PercentSubscript.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120511_eatenSection.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120760_ZOrderInHeader.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120852_readOnlyProtection.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf120852_readOnlyUnProtected.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121045.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121176.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF2.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121441.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121456.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121456_tabsOffset.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121597.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121658.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121659_loseColumnBrNextToShape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121661.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121663.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121665_back2backColumnBreaks.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121666_lostPage.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121669_equalColumns.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121670_columnsInSectionsOnly.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121784.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf121867.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf122186_input_list.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf122201_editUnprotectedText.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf122342.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf122563.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf122594.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf122648.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123054.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123104.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123116_oversizedRowSplit.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123243.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123262_textFootnoteSeparators.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123324_testRelativeAnchorHeightFromTopMarginHasHeader.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123324_testRelativeAnchorHeightFromTopMarginNoHeader.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123346_ArrowMarker.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123351_UnderlineGroupSapeText.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123354.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123355.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123356.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123381.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123382.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123386.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123388.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123389.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123390.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123401.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123435.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123460.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123569_rotWriterImage_46deg.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123610_handle_upright.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123621.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123622.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123627.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123628.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak3.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak4.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123642.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123705.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123757.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123873.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf123912_protectedForm.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124367.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124384.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124399_SingleCellTableBorders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124491.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124594.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124600b.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124604.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124637_sectionMargin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124678_no_leading_paragraph.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124678_with_leading_paragraph.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf124986.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf125268.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf125298_crossreflink_nonascii_charlimit.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf125324.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf125518.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf125546.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf125657.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf125778_lostPageBreakTOX.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf125894.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf125936_numberingSuperscript.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126206.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126245.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126287.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126363_LineWidthRounding.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126590.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126723.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126768.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126792.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126795_TabsRelativeToIndent0.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126795_TabsRelativeToIndent1.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf126994_lostPageBreak.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127085.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127116.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127316_autoEscapement.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127339.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127362.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127579.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127605.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127741.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127814.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127864.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf127925.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128156.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128207.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128245.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128290.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128304.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128646.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128752.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128820.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128889.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf128913.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129242_InsideBorders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129353.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129442_RightBorder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129450_BottomBorder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129452_BottomBorders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129452_excessBorder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129522_removeShadowStyle.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129525.rtf create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129575-directAfter.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129575-directBefore.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129575-docDefault.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129575-styleAfter.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129582.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129888dml.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129888vml.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf130120.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf130494.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf130610_bold_in_2_styles.ott create mode 100644 sw/qa/extras/ooxmlexport/data/tdf130690.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf130814.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf130907.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131203.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131258.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131260.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131420.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131537.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131539.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131540.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131561_necessaryBorder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131594.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131775_SpacingGroupShapeText.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131776_StrikeoutGroupShapeText.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131801.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf131922_LanguageInGroupShape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132149_pgBreak.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132149_pgBreak2.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132149_pgBreakB.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132185.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132271.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132305.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132475_printField.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132483.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132491_UnderlineColorGroupedShapes.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132514.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132752.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132754.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132766.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132802.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132807.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132898_extraBorder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132898_missingBorder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf132976_testRelativeAnchorWidthFromLeftMargin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133000_numStyleFormatting.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133030.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133035.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133045_TestShapeAlignmentRelativeFromTopMargin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133052.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133065.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133070_testRelativeAnchorHeightFromBottomMarginHasFooter.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133070_testRelativeAnchorHeightFromBottomMarginNoFooter.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133163.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133334_followPgStyle.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133370_columnBreak.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133455.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133457.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133473.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133605.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133605_2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133643.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133647.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133670_testRelativeAnchorWidthFromRightMargin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133701.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133702.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133771.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133924.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134063.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134260.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134569_nestedTable.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134606.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134609_gridAfter.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134618.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134619_numberingProps.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134648.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134649_pageBreak.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134784.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf134951_duplicates.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135047_ImageSpaceSettings.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135164_cancelledNumbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135187.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135216_evenOddFooter.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135329_lostImage.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c12v3.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c14.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c14v2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c15.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135595_HFtableWrap.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135595_HFtableWrap_c12.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135653.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135655.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135660.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135665.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135667.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135774_numberingCRProps.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135774_numberingShading.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135906.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135923-min.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135943_shapeWithText_LayoutInCell0_compat15.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135949_anchoredBeforeBreak.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf135973.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136059.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136386_WrapPolygonCurve.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136386_WrapPolygonLineShape.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136404.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136441_commentInFootnote.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136589_paraHadField.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136617.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136667.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136814.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136841.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136850.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136929_framesOfParagraph.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf136952_pgBreak3B.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137295.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137466.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137593.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137641_RelativeFromTopMargin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137642_Vertical_Alignment_toppage.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137655.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137678_testVmlLineShapeMirroredY.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137683_charHighlightTests.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137742.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137765_testVmlLineShapeRotated.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137850_compat14ZOrder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf137850_compat15ZOrder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf138345_charStyleHighlight.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf138345_numberingHighlight.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf138374.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf138612.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf138739.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf138771.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf138780.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf138892_noNumbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf138899.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf139128.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf139549.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf139580.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf139948.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf140137.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf140182_extraPagebreak.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf140336_paraNoneShading.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf140572_docDefault_superscript.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf140597.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf140668.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf141172.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf141173_missingFrames.rtf create mode 100644 sw/qa/extras/ooxmlexport/data/tdf141231_arabicHebrewNumbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf141548.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf141550.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf141660.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf141966_chapterNumberTortureTest.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf141966_chapterNumbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142361ShadowDirection.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142387.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142404_tabOverMarginC15.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142404_tabOverSpacingC15.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142404_tabSpacing.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142407.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142433_WrapPolygonCustomShape.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142464_ampm.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142486_FrameShadow.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142486_LeftMarginShadowLeft.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142542_cancelledAutospacing.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142693_hugePaperSizeImport.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf142700.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf143175.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf143219ContourWrap_glow_rotate.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf143219ContourWrap_stroke_shadow.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf143384_tableInFoot_negativeMargins.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf143399.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf143432_Frame_WrapTextMode.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf143583_emptyParaAtEndOfFootnote.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf143692_outlineLevelTortureTest.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf143860_NonPrimitiveCustomShape.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf144563.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf144668.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf146171.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf146346.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf146491.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf146515.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf146802.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf146851_1.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf146851_2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf146955.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf147115_defaultStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf147724.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf147861_customField.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf147892.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf147978_enhancedPath_commandABVW.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148052.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148111.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148132.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148273_sectionBulletFormatLeak.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148360.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148361.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148380_createField.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148380_fldLocked.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148380_modifiedField.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148380_printField.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148380_usernameField.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148455_1.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148455_2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148494.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf148720.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf149089.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf149198.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf149200.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf149313.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf149388.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf149388_fly.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf149546.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf149708.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf149711.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf150166.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf150966_regularInset.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf152200-field+textbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf152203.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf152206.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf153255.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf153891.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf154481.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf37153_considerWrapOnObjPos.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf38778_properties_in_run_for_field.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf41466_testVmlShapeWithTextbox.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf41542_borderlessPadding.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf41542_imagePadding.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf44278.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf44832_section_new_header.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf44986.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf46938_clearTabStop.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf46940_dontEquallyDistributeColumns.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf48569.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf49073.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf53856_conflictingStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf55427_footnote2endnote.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf57155.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf57589_hashColor.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf58944-repeating-table-header.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf59274.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf59699.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf63561_clearTabs.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf63561_clearTabs2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf64264.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf64372_continuousBreaks.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf64531.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf65955.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf65955_2.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf66039.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf66398_permissions.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf66401.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf66496.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf67207.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf69635.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf70234.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf73499.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf73547-dash.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf76683_negativeTwipsMeasure.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf77219_backgroundShape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf77219_foregroundShape.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf77236_MissingSolidFill.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf77417.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf77796.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf78352.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf78657_picture_hyperlink.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf78749.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf78902.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf79272_strictDxa.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf79329.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf79435_legacyInputFields.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf79639.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf80526_word_wrap.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf81100.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf81345.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf81507.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf81567.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf82065_Ind_start_strict.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf82173_endnoteStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf82173_footnoteStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf82175_noStyleInheritance.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf82177_insideCellBorders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf82177_outsideCellBorders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf82177_tblBorders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf8255.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf83227.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf83300.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf83309.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf84678.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf85161.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf86374.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf86926_A3.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf87348_linkedTextboxes.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf87460.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf87569_drawingml.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf87569_vml.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf87924.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf88496.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf88583.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf89165.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf89377_tableWithBreakBeforeParaStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf89702.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf89774.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf89791.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf89890.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf89991.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90153.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90611.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90681-1.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90681-2.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90697_complexBreaksHeaders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90789-2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90789.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90810short.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90906_colAuto.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf90906_colAutoB.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf91122.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf91260.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf91261.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf91417.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf91429.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf91594.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92045.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92124.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92157.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92335.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92454.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92470_footnoteRestart.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92472.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92521.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92524_autoColor.doc create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92526_ShapeLineWidth.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92724_continuousBreaksComplex.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf92724_continuousBreaksComplex2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf93676-1.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf93919.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf94043.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf94374.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf94628.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf94801.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95031.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95033.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95189.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95213.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95367_inheritFollowStyle.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95374.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95376.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95377.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95495.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95775.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95777.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95848.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf95848_2.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf96750_landscapeFollow.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf97090.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf97371.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf97517_testVmlLineShapeMirroredX.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf97618_testVmlShapeTextWordWrap.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf97648_relativeWidth.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf98000_changePageStyle.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf98620_environmentBiDi.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf98700_keepWithNext.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99074.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99090_pgbrkAfterTable.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99140.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99227.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99602_charStyleSubscript.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99602_charStyleSubscript2.odt create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99602_subscript_charStyleSize.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99616_hidemarkb.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99631.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf99810-lost-arrow.odt create mode 100644 sw/qa/extras/ooxmlexport/data/test76108.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test76317.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test76317_2K10.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test76734_2K7.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test77219.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testCrashWhileSave.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testCustomShapePresetExport.odt create mode 100644 sw/qa/extras/ooxmlexport/data/testFootnote.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testGlossary.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testOuterShdw.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testPageref.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testParaListRightIndent.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testPgMargin.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTOCFlag_u.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTcBorders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTdf130167_spilloverHeader.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTextBoxZOrder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTitlePage.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedEmptyParagraph.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedParagraphMark.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedTableCell.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedTableRow.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTrackChangesEmptyParagraphsInADeletion.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedParagraphMark.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedTableCell.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedTableRow.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testTrackChangesParagraphProperties.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testWPGZOrder.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testWPGtextboxes.docx create mode 100644 sw/qa/extras/ooxmlexport/data/testWordArtWithinDraingtool.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_GIF_ImageCrop.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_PNG_ImageCrop.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_extra_image.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_indentation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_line_spacing.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_msword_hang.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_ole_object.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_sdt_datepicker.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_segfault_while_save.docx create mode 100644 sw/qa/extras/ooxmlexport/data/test_tdf120412.docx create mode 100644 sw/qa/extras/ooxmlexport/data/textWatermark.docx create mode 100644 sw/qa/extras/ooxmlexport/data/text_cardinal_list.docx create mode 100644 sw/qa/extras/ooxmlexport/data/text_number_list.docx create mode 100644 sw/qa/extras/ooxmlexport/data/text_ordinal_list.docx create mode 100644 sw/qa/extras/ooxmlexport/data/textbox-right-edge.docx create mode 100644 sw/qa/extras/ooxmlexport/data/textbox-rounded-corners.docx create mode 100644 sw/qa/extras/ooxmlexport/data/textbox-table.docx create mode 100644 sw/qa/extras/ooxmlexport/data/textbox-wpg-only.docx create mode 100644 sw/qa/extras/ooxmlexport/data/textbox_picturefill.docx create mode 100644 sw/qa/extras/ooxmlexport/data/textframe-borders.docx create mode 100644 sw/qa/extras/ooxmlexport/data/textframe-gradient.docx create mode 100644 sw/qa/extras/ooxmlexport/data/textframes.odt create mode 100644 sw/qa/extras/ooxmlexport/data/textinput.odt create mode 100644 sw/qa/extras/ooxmlexport/data/theme-preservation.docx create mode 100644 sw/qa/extras/ooxmlexport/data/toc_doc.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tools-line-numbering.docx create mode 100644 sw/qa/extras/ooxmlexport/data/toxmarkhyperlink.fodt create mode 100644 sw/qa/extras/ooxmlexport/data/transparent-shadow.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tscp.docx create mode 100644 sw/qa/extras/ooxmlexport/data/unbalanced-columns.docx create mode 100644 sw/qa/extras/ooxmlexport/data/unwanted-section-break.docx create mode 100644 sw/qa/extras/ooxmlexport/data/vml-text-vertical-adjust.docx create mode 100644 sw/qa/extras/ooxmlexport/data/watermark-font.docx create mode 100644 sw/qa/extras/ooxmlexport/data/watermark-shapetype.docx create mode 100644 sw/qa/extras/ooxmlexport/data/watermark.docx create mode 100644 sw/qa/extras/ooxmlexport/data/wpg-nested.docx create mode 100644 sw/qa/extras/ooxmlexport/data/wpg-only.docx create mode 100644 sw/qa/extras/ooxmlexport/data/wps-char-color.docx create mode 100644 sw/qa/extras/ooxmlexport/data/wps-only.docx create mode 100644 sw/qa/extras/ooxmlexport/data/wrap-tight-through.docx create mode 100644 sw/qa/extras/ooxmlexport/data/zoom.docx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlencryption.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport10.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport11.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport12.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport13.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport14.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport15.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport16.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport17.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport18.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport2.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport3.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport4.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport5.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport6.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport7.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport8.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport9.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlexport_template.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmllinks.cxx create mode 100644 sw/qa/extras/ooxmlexport/ooxmlw14export.cxx create mode 100644 sw/qa/extras/ooxmlimport/data/105975.docx create mode 100644 sw/qa/extras/ooxmlimport/data/WordArt.docx create mode 100644 sw/qa/extras/ooxmlimport/data/bnc773061.docx create mode 100644 sw/qa/extras/ooxmlimport/data/bnc779620.docx create mode 100644 sw/qa/extras/ooxmlimport/data/bnc821804.docx create mode 100644 sw/qa/extras/ooxmlimport/data/btlr-frame-vml.docx create mode 100644 sw/qa/extras/ooxmlimport/data/dml-groupshape-paraadjust.docx create mode 100644 sw/qa/extras/ooxmlimport/data/fdo43641.docx create mode 100644 sw/qa/extras/ooxmlimport/data/fdo75722-dml.docx create mode 100644 sw/qa/extras/ooxmlimport/data/fdo75722-vml.docx create mode 100644 sw/qa/extras/ooxmlimport/data/fdo76583.docx create mode 100644 sw/qa/extras/ooxmlimport/data/fdo87488.docx create mode 100644 sw/qa/extras/ooxmlimport/data/floating-table-section-columns.docx create mode 100644 sw/qa/extras/ooxmlimport/data/groupshape-child-rotation.docx create mode 100644 sw/qa/extras/ooxmlimport/data/groupshape-fontname.docx create mode 100644 sw/qa/extras/ooxmlimport/data/groupshape-line.docx create mode 100644 sw/qa/extras/ooxmlimport/data/groupshape-relsize.docx create mode 100644 sw/qa/extras/ooxmlimport/data/groupshape-sdt.docx create mode 100644 sw/qa/extras/ooxmlimport/data/image-hyperlink.docx create mode 100644 sw/qa/extras/ooxmlimport/data/image-lazy-read.docx create mode 100644 sw/qa/extras/ooxmlimport/data/ink.docx create mode 100644 sw/qa/extras/ooxmlimport/data/line-rotation.docx create mode 100644 sw/qa/extras/ooxmlimport/data/line-wps-only.docx create mode 100644 sw/qa/extras/ooxmlimport/data/math-malformed_xml.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n751017.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n751077.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n757890.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n758883.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n760764.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n764745-alignment.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n766477.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n773061.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n775899.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n777345.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n778140.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n779627.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n779627b.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n780645.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n782061.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n820504.docx create mode 100644 sw/qa/extras/ooxmlimport/data/n820788.docx create mode 100644 sw/qa/extras/ooxmlimport/data/numbering-circle.docx create mode 100644 sw/qa/extras/ooxmlimport/data/ole-anchor.docx create mode 100644 sw/qa/extras/ooxmlimport/data/strict-lockedcanvas.docx create mode 100644 sw/qa/extras/ooxmlimport/data/table_width.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf100072.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf100830.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf101626.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf101627.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf103664.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf103931.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf104167.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf105127.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf105143.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf105975.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf106606.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf107784.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf108350.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf108408.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf108545_embeddedDocxIcon.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf108714.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf108806.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf108849.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf109053.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf109316_dropCaps.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf109524.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf111550.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf112443.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf113182.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf113946.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf114212.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf114217.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf115094.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf115094v2.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf115719b.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf115883.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf117843.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf118693.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf119039_bad_embedded_compound.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf119200.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf120547.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf120548.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf120551.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf121203.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf121440.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf121664.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf121804.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf122224.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf122717.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf123386.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf123389.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf124398.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf124600.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf124670.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf124754.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf125038.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf125038b.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf125038c.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf126114.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf126426.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf127778.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf127825.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf128076.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf129237.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf129659.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf129912.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf130214.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf130804.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf131841_HighlightColorGroupedShape.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf133448.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf133647.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf133647_unicode.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf134572.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf136952_pgBreak3.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf143219_ContourWrap_rotate.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf143475_rotatedWord2007image.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf143475_rotatedWord2007imageInline.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf143476_lockedCanvas_image_line.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf143476_lockedCanvas_position.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf143476_lockedCanvas_twoShapes.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf152200-bad_fldChar_end.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf43017.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf48658_transparentOLEheader.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf60351.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf74367_MarginsZeroed.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf75573_lostTable.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf75573_page1frame.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf76446.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf82824.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf85232.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf85523.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf87533_bidi.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf95755.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf95970.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf96218.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf96674.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf97038.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf98882.docx create mode 100644 sw/qa/extras/ooxmlimport/data/tdf99135.docx create mode 100644 sw/qa/extras/ooxmlimport/data/testfdo90720.docx create mode 100644 sw/qa/extras/ooxmlimport/data/text-copy.docx create mode 100644 sw/qa/extras/ooxmlimport/data/textbox-wps-only.docx create mode 100644 sw/qa/extras/ooxmlimport/data/unbalanced-columns-compat.docx create mode 100644 sw/qa/extras/ooxmlimport/data/vml-adjustments.docx create mode 100644 sw/qa/extras/ooxmlimport/data/xml_space.docx create mode 100644 sw/qa/extras/ooxmlimport/ooxmlimport.cxx create mode 100644 sw/qa/extras/ooxmlimport/ooxmlimport2.cxx create mode 100644 sw/qa/extras/rtfexport/data/FORMDROPDOWN.rtf create mode 100644 sw/qa/extras/rtfexport/data/abi10039.odt create mode 100644 sw/qa/extras/rtfexport/data/abi10076.odt create mode 100644 sw/qa/extras/rtfexport/data/all_gaps_word.rtf create mode 100644 sw/qa/extras/rtfexport/data/anchor.fodt create mode 100644 sw/qa/extras/rtfexport/data/arabic-zero-numbering.rtf create mode 100644 sw/qa/extras/rtfexport/data/bin-skipping.rtf create mode 100644 sw/qa/extras/rtfexport/data/bookmark.rtf create mode 100644 sw/qa/extras/rtfexport/data/btlr-cell.rtf create mode 100644 sw/qa/extras/rtfexport/data/btlr-frame.odt create mode 100644 sw/qa/extras/rtfexport/data/char-color.rtf create mode 100644 sw/qa/extras/rtfexport/data/charborder.odt create mode 100644 sw/qa/extras/rtfexport/data/cjklist12.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist13.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist16.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist20.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist21.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist24.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist25.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist30.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist31.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist34.rtf create mode 100644 sw/qa/extras/rtfexport/data/cjklist38.rtf create mode 100644 sw/qa/extras/rtfexport/data/classification-confidential.rtf create mode 100644 sw/qa/extras/rtfexport/data/classification-no.rtf create mode 100644 sw/qa/extras/rtfexport/data/classification-yes.rtf create mode 100644 sw/qa/extras/rtfexport/data/clearing-break.rtf create mode 100644 sw/qa/extras/rtfexport/data/comments-nested.odt create mode 100644 sw/qa/extras/rtfexport/data/copypaste-footnote-paste.rtf create mode 100644 sw/qa/extras/rtfexport/data/copypaste-footnote.rtf create mode 100644 sw/qa/extras/rtfexport/data/copypaste-pagestyle-paste.rtf create mode 100644 sw/qa/extras/rtfexport/data/copypaste-pagestyle.rtf create mode 100644 sw/qa/extras/rtfexport/data/cp1000018.rtf create mode 100644 sw/qa/extras/rtfexport/data/cs-bold.rtf create mode 100644 sw/qa/extras/rtfexport/data/custom-doc-props.rtf create mode 100644 sw/qa/extras/rtfexport/data/do-dhgt-old.rtf create mode 100644 sw/qa/extras/rtfexport/data/do-dhgt.rtf create mode 100644 sw/qa/extras/rtfexport/data/dplinehollow.rtf create mode 100644 sw/qa/extras/rtfexport/data/dppolyline.rtf create mode 100644 sw/qa/extras/rtfexport/data/dprect-anchor.rtf create mode 100644 sw/qa/extras/rtfexport/data/dptxbx-relation.rtf create mode 100644 sw/qa/extras/rtfexport/data/em.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo30983.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo32613.odt create mode 100644 sw/qa/extras/rtfexport/data/fdo36089.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo37716.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo38176.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo38244.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo38786.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo39001.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo39053.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo42109.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo42465.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo43965.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo44053.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo44174.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo44176.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo44211.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo44715.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo45187.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo45394.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo45543.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo45553.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo45563.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo46955.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo46966.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo47107.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo47326.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo47495.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo47764.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo47802.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo48023.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo48033.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo48037.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo48104.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo48193.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo48335.odt create mode 100644 sw/qa/extras/rtfexport/data/fdo48356.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo48440.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo48446.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo48876.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo49271.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo49501.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo49655.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo49659.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo49683.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo49893-2.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo49934.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo50087.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo50539.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo50665.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo50831.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo51916.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo52286.odt create mode 100644 sw/qa/extras/rtfexport/data/fdo52389.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo52475.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo52989.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo53113.odt create mode 100644 sw/qa/extras/rtfexport/data/fdo53594.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo53604.odt create mode 100644 sw/qa/extras/rtfexport/data/fdo54473.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo54612.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo54900.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo55493.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo55939.odt create mode 100644 sw/qa/extras/rtfexport/data/fdo56512.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo57678.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo57886.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo58076-2.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo58076.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo58646.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo58646line.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo58933.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo59419.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo59638.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo60722.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo61193.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo61507.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo61909.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo62044-paste.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo62044.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo62288.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo62805.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo62977.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo63023.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo63428.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo64637.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo64671.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo65090.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo66040.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo66682.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo66743.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo67498.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo68076.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo68779.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo68787.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo69289.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo69384-paste.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo70221.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo70578.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo72031.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo73241.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo74229.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo74709.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo75735.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo76628.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo76633.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo77267.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo77600.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo77979.odt create mode 100644 sw/qa/extras/rtfexport/data/fdo77996.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo78502.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo78758.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo79384.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo79959.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo80167.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo80905.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo81892.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo82006.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo82076.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo82078.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo82106.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo82858.docx create mode 100644 sw/qa/extras/rtfexport/data/fdo82859.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo82860.odt create mode 100644 sw/qa/extras/rtfexport/data/fdo83204.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo83464.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo84679.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo85889-mac.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo85889-pc.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo85889-pca.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo86750.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo86761.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo89496.rtf create mode 100644 sw/qa/extras/rtfexport/data/fdo94835.rtf create mode 100644 sw/qa/extras/rtfexport/data/font-override.rtf create mode 100644 sw/qa/extras/rtfexport/data/footer-para.rtf create mode 100644 sw/qa/extras/rtfexport/data/graphic-object-fliph.rtf create mode 100644 sw/qa/extras/rtfexport/data/gutter-left.rtf create mode 100644 sw/qa/extras/rtfexport/data/gutter-top.rtf create mode 100644 sw/qa/extras/rtfexport/data/hello.rtf create mode 100644 sw/qa/extras/rtfexport/data/hexcrlf.rtf create mode 100644 sw/qa/extras/rtfexport/data/hidden-linebreaks.rtf create mode 100644 sw/qa/extras/rtfexport/data/hyperlink-target.rtf create mode 100644 sw/qa/extras/rtfexport/data/hyperlink.rtf create mode 100644 sw/qa/extras/rtfexport/data/hyperlink_empty.rtf create mode 100644 sw/qa/extras/rtfexport/data/hyphauto.rtf create mode 100644 sw/qa/extras/rtfexport/data/hyphpar.rtf create mode 100644 sw/qa/extras/rtfexport/data/i120928.rtf create mode 100644 sw/qa/extras/rtfexport/data/landscape.rtf create mode 100644 sw/qa/extras/rtfexport/data/leftmargin-default.rtf create mode 100644 sw/qa/extras/rtfexport/data/levelfollow.rtf create mode 100644 sw/qa/extras/rtfexport/data/leveljc-center.rtf create mode 100644 sw/qa/extras/rtfexport/data/linenumbering.rtf create mode 100644 sw/qa/extras/rtfexport/data/margmirror.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-accents.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-d.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-eqarray.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-escaping.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-lim.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-limupp.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-matrix.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-mbox.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-mso2007.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-nary.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-placeholders.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-rad.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-runs.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-sepchr.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-strikeh.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-subscripts.rtf create mode 100644 sw/qa/extras/rtfexport/data/math-vertical-stacks.rtf create mode 100644 sw/qa/extras/rtfexport/data/mathtype.rtf create mode 100644 sw/qa/extras/rtfexport/data/mnor.rtf create mode 100644 sw/qa/extras/rtfexport/data/mw00_table_of_contents_templates.doc create mode 100644 sw/qa/extras/rtfexport/data/n192129.rtf create mode 100644 sw/qa/extras/rtfexport/data/n750757.rtf create mode 100644 sw/qa/extras/rtfexport/data/n751020.rtf create mode 100644 sw/qa/extras/rtfexport/data/n757651.rtf create mode 100644 sw/qa/extras/rtfexport/data/n818997.rtf create mode 100644 sw/qa/extras/rtfexport/data/n820504.rtf create mode 100644 sw/qa/extras/rtfexport/data/n825305.rtf create mode 100644 sw/qa/extras/rtfexport/data/num-override-start.rtf create mode 100644 sw/qa/extras/rtfexport/data/numbering-font.rtf create mode 100644 sw/qa/extras/rtfexport/data/page-background.rtf create mode 100644 sw/qa/extras/rtfexport/data/page-border.rtf create mode 100644 sw/qa/extras/rtfexport/data/para-adjust-distribute.rtf create mode 100644 sw/qa/extras/rtfexport/data/para-border.rtf create mode 100644 sw/qa/extras/rtfexport/data/para-bottom-margin.rtf create mode 100644 sw/qa/extras/rtfexport/data/para-shadow.rtf create mode 100644 sw/qa/extras/rtfexport/data/para-style-bottom-margin-2.rtf create mode 100644 sw/qa/extras/rtfexport/data/pgndec.rtf create mode 100644 sw/qa/extras/rtfexport/data/pgnlcltr.rtf create mode 100644 sw/qa/extras/rtfexport/data/pgnlcrm.rtf create mode 100644 sw/qa/extras/rtfexport/data/pgnucrm.rtf create mode 100644 sw/qa/extras/rtfexport/data/picture-wrap-polygon.rtf create mode 100644 sw/qa/extras/rtfexport/data/placeholder.odt create mode 100644 sw/qa/extras/rtfexport/data/record-changes.rtf create mode 100644 sw/qa/extras/rtfexport/data/redline-insdel.rtf create mode 100644 sw/qa/extras/rtfexport/data/redline.rtf create mode 100644 sw/qa/extras/rtfexport/data/relsize.rtf create mode 100644 sw/qa/extras/rtfexport/data/rhbz1065629.rtf create mode 100644 sw/qa/extras/rtfexport/data/rtl-gutter.rtf create mode 100644 sw/qa/extras/rtfexport/data/sautoupd.rtf create mode 100644 sw/qa/extras/rtfexport/data/shptxt-pard.rtf create mode 100644 sw/qa/extras/rtfexport/data/shpz-dhgt.rtf create mode 100644 sw/qa/extras/rtfexport/data/tab-stop-fill-chars.rtf create mode 100644 sw/qa/extras/rtfexport/data/table-rtl.rtf create mode 100644 sw/qa/extras/rtfexport/data/tabs.rtf create mode 100644 sw/qa/extras/rtfexport/data/tbrl-frame.odt create mode 100644 sw/qa/extras/rtfexport/data/tbrl-page.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf100507.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf100961_fixedDateTime.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf103925.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104035.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104079.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104081.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104085.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104228.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104287.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104317.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104390.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104744.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104936.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf104937.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf105729.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf105852.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf106694.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf106950.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf106953.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf107116.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf107413.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf107480.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf107620.docx create mode 100644 sw/qa/extras/rtfexport/data/tdf108123.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf108416.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf108949_footnote.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf108949_footnoteCharFormat.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf108955.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf109790.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf111851.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf112208_hangingIndent.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf112211.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf112507.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf112520.docx create mode 100644 sw/qa/extras/rtfexport/data/tdf113202.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf113408.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf113550.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf114303.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf114309.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf114333.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf115180.docx create mode 100644 sw/qa/extras/rtfexport/data/tdf116358.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf116371.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf116436_tableBackground.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf116841.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf117268.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf117505.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf118047.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf121623.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf122455.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf122589_firstSection.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf123393.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf123703.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf123703_compatible.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf123703_stshfdbch.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf125719_case_1.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf125719_case_2.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf126309.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf127806.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf128320.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf128428_compatible_monospaced.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf128428_dntblnsbdb.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf128428_monospaced.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf129513.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf129522_removeShadowStyle.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf129578_lostBI.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf129631_lostBorders.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf129631_lostBorders3.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf130817.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf131234.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf133437.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf136587_noStyleName.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf137085.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf137683_charHighlightNone.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf137894.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf138210.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf138779.docx create mode 100644 sw/qa/extras/rtfexport/data/tdf139948.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf141964_numId0.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf144437.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf146489.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf148515.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf150267.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf151370.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf44986.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf49073.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf50821.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf54584.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf61901.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf65642.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf66543.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf74795.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf75614.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf77349.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf80708.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf82073.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf84832.docx create mode 100644 sw/qa/extras/rtfexport/data/tdf86182.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf86814.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf87034.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf88583.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf88811.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf90260-nopar.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf90421.fodt create mode 100644 sw/qa/extras/rtfexport/data/tdf90697.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf91074.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf92061.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf92481.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf92521.odt create mode 100644 sw/qa/extras/rtfexport/data/tdf94043.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf94377.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf94435.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf94456.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf95706.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf95706_2.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf95707.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf96175.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf96275.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf96308-deftab.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf97035.rtf create mode 100644 sw/qa/extras/rtfexport/data/tdf98806.rtf create mode 100644 sw/qa/extras/rtfexport/data/textframe-borders.rtf create mode 100644 sw/qa/extras/rtfexport/data/textframe-gradient.rtf create mode 100644 sw/qa/extras/rtfexport/data/textframe-table.rtf create mode 100644 sw/qa/extras/rtfexport/data/textframes.odt create mode 100644 sw/qa/extras/rtfexport/data/ulw.rtf create mode 100644 sw/qa/extras/rtfexport/data/watermark.rtf create mode 100644 sw/qa/extras/rtfexport/data/zoom.rtf create mode 100644 sw/qa/extras/rtfexport/rtfexport.cxx create mode 100644 sw/qa/extras/rtfexport/rtfexport2.cxx create mode 100644 sw/qa/extras/rtfexport/rtfexport3.cxx create mode 100644 sw/qa/extras/rtfexport/rtfexport4.cxx create mode 100644 sw/qa/extras/rtfexport/rtfexport5.cxx create mode 100644 sw/qa/extras/rtfimport/data/background.rtf create mode 100644 sw/qa/extras/rtfimport/data/behind-doc.rtf create mode 100644 sw/qa/extras/rtfimport/data/chtoutline.rtf create mode 100644 sw/qa/extras/rtfimport/data/classification-no.rtf create mode 100644 sw/qa/extras/rtfimport/data/classification-yes.rtf create mode 100644 sw/qa/extras/rtfimport/data/column-break.rtf create mode 100644 sw/qa/extras/rtfimport/data/cont-section-pagebreak.rtf create mode 100644 sw/qa/extras/rtfimport/data/cp950listleveltext1.rtf create mode 100644 sw/qa/extras/rtfimport/data/cp950listleveltext2.rtf create mode 100644 sw/qa/extras/rtfimport/data/cp950listleveltext3.rtf create mode 100644 sw/qa/extras/rtfimport/data/default-values.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo44984.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo45182.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo45183.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo45190.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo46662.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo47036.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo47440.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo48442.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo49692.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo49892.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo49893-3.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo49893.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo52052.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo52066.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo53556.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo55525.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo57708.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo59953.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo66565.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo67365.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo68291-paste.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo68291.odt create mode 100644 sw/qa/extras/rtfimport/data/fdo74599.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo74823.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo79319.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo80742.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo81033.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo81944.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo82071.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo82114.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo82512.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo84685.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo85179.rtf create mode 100644 sw/qa/extras/rtfimport/data/fdo85812.rtf create mode 100644 sw/qa/extras/rtfimport/data/flip.rtf create mode 100644 sw/qa/extras/rtfimport/data/groupshape-notext.rtf create mode 100644 sw/qa/extras/rtfimport/data/groupshape-rotation.rtf create mode 100644 sw/qa/extras/rtfimport/data/groupshape.rtf create mode 100644 sw/qa/extras/rtfimport/data/hello.rtf create mode 100644 sw/qa/extras/rtfimport/data/ink.rtf create mode 100644 sw/qa/extras/rtfimport/data/libreoffice.png create mode 100644 sw/qa/extras/rtfimport/data/lndscpsxn.rtf create mode 100644 sw/qa/extras/rtfimport/data/n695479.rtf create mode 100644 sw/qa/extras/rtfimport/data/n823655.rtf create mode 100644 sw/qa/extras/rtfimport/data/n823675.rtf create mode 100644 sw/qa/extras/rtfimport/data/ole-inline.rtf create mode 100644 sw/qa/extras/rtfimport/data/para-style-bottom-margin.rtf create mode 100644 sw/qa/extras/rtfimport/data/paste-first-para-direct-format.rtf create mode 100644 sw/qa/extras/rtfimport/data/posh-leftright.rtf create mode 100644 sw/qa/extras/rtfimport/data/posh-posv.rtf create mode 100644 sw/qa/extras/rtfimport/data/sbkeven.rtf create mode 100644 sw/qa/extras/rtfimport/data/sbkodd.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf104016.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf105511.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf108055.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf108943.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf108947.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf108951.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf112211-2.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf115153.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf115155.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf115242.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf115715.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf116265.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf116269.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf117246.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf117403.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf119599.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf122430.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf126173.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf128611.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf59454.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf59699.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf78506.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf81943.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf84684.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf90046.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf90097.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf90260-par.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf90315.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf91684.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf96308-tabpos.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf96326.rtf create mode 100644 sw/qa/extras/rtfimport/data/tdf99498.rtf create mode 100644 sw/qa/extras/rtfimport/data/unbalanced-columns-compat.rtf create mode 100644 sw/qa/extras/rtfimport/data/unbalanced-columns.rtf create mode 100644 sw/qa/extras/rtfimport/data/watermark.rtf create mode 100644 sw/qa/extras/rtfimport/data/wrap-distance.rtf create mode 100644 sw/qa/extras/rtfimport/rtfimport.cxx create mode 100644 sw/qa/extras/tiledrendering/data/2-pages.odt create mode 100644 sw/qa/extras/tiledrendering/data/cond-coll-copy.odt create mode 100644 sw/qa/extras/tiledrendering/data/content-control.odt create mode 100644 sw/qa/extras/tiledrendering/data/drop_down_form_field.odt create mode 100644 sw/qa/extras/tiledrendering/data/drop_down_form_field2.odt create mode 100644 sw/qa/extras/tiledrendering/data/drop_down_form_field_noitem.odt create mode 100644 sw/qa/extras/tiledrendering/data/drop_down_form_field_noselection.odt create mode 100644 sw/qa/extras/tiledrendering/data/dummy.fodt create mode 100644 sw/qa/extras/tiledrendering/data/estonian.odt create mode 100644 sw/qa/extras/tiledrendering/data/fieldmark.docx create mode 100644 sw/qa/extras/tiledrendering/data/frame.odt create mode 100644 sw/qa/extras/tiledrendering/data/hyperlink.odt create mode 100644 sw/qa/extras/tiledrendering/data/image-comment.odt create mode 100644 sw/qa/extras/tiledrendering/data/pagedown-invalidation.odt create mode 100644 sw/qa/extras/tiledrendering/data/pilcrow-redlining.fodt create mode 100644 sw/qa/extras/tiledrendering/data/redline-notification-during-save.odt create mode 100644 sw/qa/extras/tiledrendering/data/removenode_redline_callback.fodt create mode 100644 sw/qa/extras/tiledrendering/data/search.odt create mode 100644 sw/qa/extras/tiledrendering/data/semi-transparent.odt create mode 100644 sw/qa/extras/tiledrendering/data/shape-with-text.fodt create mode 100644 sw/qa/extras/tiledrendering/data/shape.fodt create mode 100644 sw/qa/extras/tiledrendering/data/splitnode_redline_callback.fodt create mode 100644 sw/qa/extras/tiledrendering/data/table-paint-invalidate.odt create mode 100644 sw/qa/extras/tiledrendering/data/tdf114799_highlight.docx create mode 100644 sw/qa/extras/tiledrendering/data/tdf114799_shd.docx create mode 100644 sw/qa/extras/tiledrendering/data/tdf115088.odt create mode 100644 sw/qa/extras/tiledrendering/data/tdf117448.fodt create mode 100644 sw/qa/extras/tiledrendering/data/tdf43244_SpacesOnMargin.odt create mode 100644 sw/qa/extras/tiledrendering/tiledrendering.cxx create mode 100644 sw/qa/extras/txtencexport/data/bullets.odt create mode 100644 sw/qa/extras/txtencexport/txtencexport.cxx create mode 100644 sw/qa/extras/txtexport/data/UTF16LEBOMCRLF.txt create mode 100644 sw/qa/extras/txtexport/data/UTF16LECRLF.txt create mode 100644 sw/qa/extras/txtexport/data/UTF8BOMCRLF.txt create mode 100644 sw/qa/extras/txtexport/data/UTF8CRLF.txt create mode 100644 sw/qa/extras/txtexport/data/bullets.odt create mode 100644 sw/qa/extras/txtexport/txtexport.cxx create mode 100644 sw/qa/extras/txtimport/data/GB18030.txt create mode 100644 sw/qa/extras/txtimport/data/UTF16BEWITHBOM.txt create mode 100644 sw/qa/extras/txtimport/data/UTF16BEWITHOUTBOM.txt create mode 100644 sw/qa/extras/txtimport/data/UTF16LEWITHBOM.txt create mode 100644 sw/qa/extras/txtimport/data/UTF16LEWITHOUTBOM.txt create mode 100644 sw/qa/extras/txtimport/data/UTF8WITHBOM.txt create mode 100644 sw/qa/extras/txtimport/data/UTF8WITHOUTBOM.txt create mode 100644 sw/qa/extras/txtimport/data/bullets.odt create mode 100644 sw/qa/extras/txtimport/txtimport.cxx create mode 100644 sw/qa/extras/uiwriter/data/AsCharTxBxTest.docx create mode 100644 sw/qa/extras/uiwriter/data/AtPageTextBoxCrash.odt create mode 100644 sw/qa/extras/uiwriter/data/DUMMY.odm create mode 100644 sw/qa/extras/uiwriter/data/DUMMY1.odt create mode 100644 sw/qa/extras/uiwriter/data/HiddenSection.odt create mode 100644 sw/qa/extras/uiwriter/data/MsWordCompTrailingBlanks.docx create mode 100644 sw/qa/extras/uiwriter/data/MsWordCompTrailingBlanksFalse.odt create mode 100644 sw/qa/extras/uiwriter/data/MsWordCompTrailingBlanksTrue.odt create mode 100644 sw/qa/extras/uiwriter/data/TC-table-DnD-move.docx create mode 100644 sw/qa/extras/uiwriter/data/TC-table-converttotable.docx create mode 100644 sw/qa/extras/uiwriter/data/TC-table-del-add.docx create mode 100644 sw/qa/extras/uiwriter/data/TC-table-rowadd.docx create mode 100644 sw/qa/extras/uiwriter/data/autotext-dotm.dotm create mode 100644 sw/qa/extras/uiwriter/data/autotext-empty.dotx create mode 100644 sw/qa/extras/uiwriter/data/autotext-gallery.dotx create mode 100644 sw/qa/extras/uiwriter/data/autotext-multiple.dotx create mode 100644 sw/qa/extras/uiwriter/data/collapsed_bookmark.odt create mode 100644 sw/qa/extras/uiwriter/data/commented-word.odt create mode 100644 sw/qa/extras/uiwriter/data/cp1000071.odt create mode 100644 sw/qa/extras/uiwriter/data/cp1000115.fodt create mode 100644 sw/qa/extras/uiwriter/data/cross_reference_demo_bmk.odt create mode 100644 sw/qa/extras/uiwriter/data/datasource.ods create mode 100644 sw/qa/extras/uiwriter/data/demo91.fodt create mode 100644 sw/qa/extras/uiwriter/data/draw-anchor-undo.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo112025-insert.docx create mode 100644 sw/qa/extras/uiwriter/data/fdo112025.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo114306.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo114306_2.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo69893.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo70807.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo72942-insert.docx create mode 100644 sw/qa/extras/uiwriter/data/fdo72942.docx create mode 100644 sw/qa/extras/uiwriter/data/fdo75110.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo75898.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo82191.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo85554.odt create mode 100644 sw/qa/extras/uiwriter/data/fdo87448.odt create mode 100644 sw/qa/extras/uiwriter/data/floating-table-position.docx create mode 100644 sw/qa/extras/uiwriter/data/floating_table/small_floating_table.odt create mode 100644 sw/qa/extras/uiwriter/data/floating_table/unfloatable_floating_table.doc create mode 100644 sw/qa/extras/uiwriter/data/floating_table/unfloatable_floating_table.docx create mode 100644 sw/qa/extras/uiwriter/data/floating_table/unfloatable_floating_table.odt create mode 100644 sw/qa/extras/uiwriter/data/floating_table/unfloatable_small_floating_table.docx create mode 100644 sw/qa/extras/uiwriter/data/hash#path/calc-data-source.ods create mode 100644 sw/qa/extras/uiwriter/data/hash#path/embedded-data-source.odt create mode 100644 sw/qa/extras/uiwriter/data/hello-world.pdf create mode 100644 sw/qa/extras/uiwriter/data/i95698.odt create mode 100644 sw/qa/extras/uiwriter/data/image-comment-at-char.odt create mode 100644 sw/qa/extras/uiwriter/data/image-comment.odt create mode 100644 sw/qa/extras/uiwriter/data/image.odt create mode 100644 sw/qa/extras/uiwriter/data/lines-in-section-in-table.odt create mode 100644 sw/qa/extras/uiwriter/data/lorem.fodt create mode 100644 sw/qa/extras/uiwriter/data/merge-change1.odt create mode 100644 sw/qa/extras/uiwriter/data/merge-change2.odt create mode 100644 sw/qa/extras/uiwriter/data/num-parent-style.docx create mode 100644 sw/qa/extras/uiwriter/data/ofz18563.docx create mode 100644 sw/qa/extras/uiwriter/data/ole-save-while-edit.odt create mode 100644 sw/qa/extras/uiwriter/data/ole2.png create mode 100644 sw/qa/extras/uiwriter/data/paragraph-of-text-range.odt create mode 100644 sw/qa/extras/uiwriter/data/redline-autocorrect.fodt create mode 100644 sw/qa/extras/uiwriter/data/redline-autocorrect2.fodt create mode 100644 sw/qa/extras/uiwriter/data/redline-para-join.docx create mode 100644 sw/qa/extras/uiwriter/data/redlineFrame.fodt create mode 100644 sw/qa/extras/uiwriter/data/redlineFrame_at_char_start_inside.fodt create mode 100644 sw/qa/extras/uiwriter/data/redlineFrame_at_char_start_outside.fodt create mode 100644 sw/qa/extras/uiwriter/data/redline_fly_at_para_one_paragraph.odt create mode 100644 sw/qa/extras/uiwriter/data/redline_fly_duplication_at_para_2nd_paragraph.fodt create mode 100644 sw/qa/extras/uiwriter/data/redline_fly_duplication_at_para_end_inside.fodt create mode 100644 sw/qa/extras/uiwriter/data/redline_fly_duplication_at_para_start_outside.fodt create mode 100644 sw/qa/extras/uiwriter/data/rhbz1810732.docx create mode 100644 sw/qa/extras/uiwriter/data/rhbz739252-3.odt create mode 100644 sw/qa/extras/uiwriter/data/shape-page-move.odt create mode 100644 sw/qa/extras/uiwriter/data/shape-textbox-autosize.odt create mode 100644 sw/qa/extras/uiwriter/data/shape-textbox-vertadjust.odt create mode 100644 sw/qa/extras/uiwriter/data/shape-textbox.odt create mode 100644 sw/qa/extras/uiwriter/data/simplefooter.docx create mode 100644 sw/qa/extras/uiwriter/data/split-section-in-nested-table.fodt create mode 100644 sw/qa/extras/uiwriter/data/table-in-sect.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf100018-1.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf100691.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf101534.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf103978_backgroundTextShape.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf104032.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf104425.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf104440.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf104492.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf104649.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf104814.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf105330.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf105413.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf105417.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf105625.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf106701_tabOverMarginAutotab.doc create mode 100644 sw/qa/extras/uiwriter/data/tdf106736-grid.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf106843.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf107025.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf107362.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf107893.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf107975.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf108124.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf108524.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf108687_tabstop.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf112109.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf112160.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf112342.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf112448.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf112741.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf112860.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf113153.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf113287.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf113445.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf113481-IVS.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf113520.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf113686.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf113790.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf113877_blank_bold_off.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf113877_blank_bold_on.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf113877_blank_ownStandard.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf113877_insert_numbered_list.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf113877_insert_numbered_list_abcd.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf114536.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf115065.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf115815.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf116403-considerborders.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf116789.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf117225.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf117923.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf118311.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf118699.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf119019.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf120336.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf120338.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf121546.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf122942.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf123102.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf123285.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf123786.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf124397.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf124722.rtf create mode 100644 sw/qa/extras/uiwriter/data/tdf124904.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf125151_protected.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf125151_protectedB.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf125261.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf125310.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf125310b.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf125881.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf125916.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf126206.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf126340.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf126504.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf126626.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf126784_distributeSelectedColumns.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf127652.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf128335.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf128375.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf128603.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf128739.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf128782.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf128860.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf129270.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf129382.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf129655-vtextbox.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf129805.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf130094.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf130680.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf130685.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf130746.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf130805.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf131684.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf131963.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf132160.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf132187.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf132236.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf132321.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf132420.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf132596.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf132597.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf132637_protectTrackChanges.doc create mode 100644 sw/qa/extras/uiwriter/data/tdf132725.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf132744.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf132911.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf132944.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf133477.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf133490.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf133524.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf133524_ro.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf133589.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf133967.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf133982.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf133990.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf134021.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf134227.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf134250.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf134252.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf134253.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf134404.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf134436.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf134626.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf134931.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf134965.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf135056.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf135061.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf135412.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf135623.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf135661.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf135662.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf135733.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf136385.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf136452.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf136453.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf136715.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf136778.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf137964.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf138130.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf138482.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf139127.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf139638.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf139737.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf139843.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf140828.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf140975.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf141175.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf142130.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf142157.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf142196.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf142700.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf142715.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf143176.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf143244.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf143760_ContourToWrapOff.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf143904.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf144058.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf144317.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf144748.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf144840.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf145091.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf145207.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf145311.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf145321.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf145621.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf145731.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf146449.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf147006.rtf create mode 100644 sw/qa/extras/uiwriter/data/tdf147126.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf147507.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf147723.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf148799.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf148849.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf149089.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf149550.docx create mode 100755 sw/qa/extras/uiwriter/data/tdf151462.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf151993.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf153819.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf34957.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf35021_tabOverMarginDemo.doc create mode 100644 sw/qa/extras/uiwriter/data/tdf38394.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf39721.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf39828.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf45525.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf47471_paraStyleBackground.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf50447.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf52391.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf54819.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf54819b.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf58604.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf61154.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf64242_optimizeTable.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf66405.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf76636.doc create mode 100644 sw/qa/extras/uiwriter/data/tdf76817.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf76817.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf77014.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf78727.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf83260-1.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf83798.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf84695-tab.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf84695.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf86639.rtf create mode 100644 sw/qa/extras/uiwriter/data/tdf87922.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf88453-table.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf88453.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf89720.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf89954.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf90003.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf90069.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf90362.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf90883.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf91292_paraBackground.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf91801.fodt create mode 100644 sw/qa/extras/uiwriter/data/tdf92648.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf95699.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf96943.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf97601.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf98987.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf99004.docx create mode 100644 sw/qa/extras/uiwriter/data/tdf99689.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf99689_figures.odt create mode 100644 sw/qa/extras/uiwriter/data/tdf99689_tables.odt create mode 100644 sw/qa/extras/uiwriter/data/testFontEmbedding.odt create mode 100644 sw/qa/extras/uiwriter/data/testInconsistentBookmark.ott create mode 100644 sw/qa/extras/uiwriter/data/test_anchor_as_character.odt create mode 100644 sw/qa/extras/uiwriter/data/textfield-getanchor-gettext-in-footer.odt create mode 100644 sw/qa/extras/uiwriter/data/threadedException.fodt create mode 100644 sw/qa/extras/uiwriter/data/try2.fodt create mode 100644 sw/qa/extras/uiwriter/data/txbx_crash.odt create mode 100644 sw/qa/extras/uiwriter/data/udindex3.odt create mode 100644 sw/qa/extras/uiwriter/data/unicodeAltX.odt create mode 100644 sw/qa/extras/uiwriter/data/uno-cycle.odt create mode 100644 sw/qa/extras/uiwriter/data/variable-field-table-row-split-header.fodt create mode 100644 sw/qa/extras/uiwriter/data/watermark-position.odt create mode 100644 sw/qa/extras/uiwriter/data/watermark.docx create mode 100644 sw/qa/extras/uiwriter/uiwriter.cxx create mode 100644 sw/qa/extras/uiwriter/uiwriter2.cxx create mode 100644 sw/qa/extras/uiwriter/uiwriter3.cxx create mode 100644 sw/qa/extras/uiwriter/uiwriter4.cxx create mode 100644 sw/qa/extras/uiwriter/uiwriter5.cxx create mode 100644 sw/qa/extras/uiwriter/uiwriter6.cxx create mode 100644 sw/qa/extras/uiwriter/uiwriter7.cxx create mode 100644 sw/qa/extras/unowriter/data/bookmarkintable.fodt create mode 100644 sw/qa/extras/unowriter/data/image-comment-at-char.odt create mode 100644 sw/qa/extras/unowriter/data/renderable-page-position.odt create mode 100644 sw/qa/extras/unowriter/data/selection-in-table-enum.odt create mode 100644 sw/qa/extras/unowriter/data/table-line-spacing.docx create mode 100644 sw/qa/extras/unowriter/data/tdf134250.fodt create mode 100644 sw/qa/extras/unowriter/data/tdf134252.fodt create mode 100644 sw/qa/extras/unowriter/data/tdf134252_onlytable_protected.fodt create mode 100644 sw/qa/extras/unowriter/data/test.jpg create mode 100644 sw/qa/extras/unowriter/data/view-cursor-page-style.fodt create mode 100644 sw/qa/extras/unowriter/data/xautotextgroup.odt create mode 100644 sw/qa/extras/unowriter/unowriter.cxx create mode 100644 sw/qa/extras/ww8export/data/all_gaps_word.doc create mode 100644 sw/qa/extras/ww8export/data/arabic-zero-numbering.doc create mode 100644 sw/qa/extras/ww8export/data/bnc636128.doc create mode 100644 sw/qa/extras/ww8export/data/bnc787942.doc create mode 100644 sw/qa/extras/ww8export/data/bnc821208.doc create mode 100644 sw/qa/extras/ww8export/data/bnc863018b.doc create mode 100644 sw/qa/extras/ww8export/data/bordercolours.doc create mode 100644 sw/qa/extras/ww8export/data/bordercolours.odt create mode 100644 sw/qa/extras/ww8export/data/btlr-cell.doc create mode 100644 sw/qa/extras/ww8export/data/btlr-frame.odt create mode 100644 sw/qa/extras/ww8export/data/cell-bg-color.odt create mode 100644 sw/qa/extras/ww8export/data/charborder.odt create mode 100644 sw/qa/extras/ww8export/data/checkbox_control.odt create mode 100644 sw/qa/extras/ww8export/data/cjklist30.doc create mode 100644 sw/qa/extras/ww8export/data/cjklist31.doc create mode 100644 sw/qa/extras/ww8export/data/cjklist34.doc create mode 100644 sw/qa/extras/ww8export/data/cjklist35.doc create mode 100644 sw/qa/extras/ww8export/data/clearing-break.doc create mode 100644 sw/qa/extras/ww8export/data/comment-export.odt create mode 100644 sw/qa/extras/ww8export/data/commented-table.doc create mode 100644 sw/qa/extras/ww8export/data/comments-nested.doc create mode 100644 sw/qa/extras/ww8export/data/cp1000044.doc create mode 100644 sw/qa/extras/ww8export/data/fdo36868.doc create mode 100644 sw/qa/extras/ww8export/data/fdo42144.odt create mode 100644 sw/qa/extras/ww8export/data/fdo45724.odt create mode 100644 sw/qa/extras/ww8export/data/fdo46020.odt create mode 100644 sw/qa/extras/ww8export/data/fdo53985.doc create mode 100644 sw/qa/extras/ww8export/data/fdo56513.doc create mode 100644 sw/qa/extras/ww8export/data/fdo59530.doc create mode 100644 sw/qa/extras/ww8export/data/fdo66304-1.odt create mode 100644 sw/qa/extras/ww8export/data/fdo68963.doc create mode 100644 sw/qa/extras/ww8export/data/fdo68967.doc create mode 100644 sw/qa/extras/ww8export/data/fdo77454.doc create mode 100644 sw/qa/extras/ww8export/data/fdo77844.doc create mode 100644 sw/qa/extras/ww8export/data/fdo80333.doc create mode 100644 sw/qa/extras/ww8export/data/fdo81102.doc create mode 100644 sw/qa/extras/ww8export/data/first-header-footer.doc create mode 100644 sw/qa/extras/ww8export/data/gutter-left.doc create mode 100644 sw/qa/extras/ww8export/data/gutter-top.doc create mode 100644 sw/qa/extras/ww8export/data/i120158.doc create mode 100644 sw/qa/extras/ww8export/data/image-comment-at-char.doc create mode 100644 sw/qa/extras/ww8export/data/list-nolevel.doc create mode 100644 sw/qa/extras/ww8export/data/mailmerge.doc create mode 100644 sw/qa/extras/ww8export/data/msobrightnesscontrast.doc create mode 100644 sw/qa/extras/ww8export/data/n325936.doc create mode 100644 sw/qa/extras/ww8export/data/n652364.doc create mode 100644 sw/qa/extras/ww8export/data/n750255.doc create mode 100644 sw/qa/extras/ww8export/data/n757118.doc create mode 100644 sw/qa/extras/ww8export/data/n757905.doc create mode 100644 sw/qa/extras/ww8export/data/n757910.doc create mode 100644 sw/qa/extras/ww8export/data/n760294.doc create mode 100644 sw/qa/extras/ww8export/data/n816603.doc create mode 100644 sw/qa/extras/ww8export/data/n823651.doc create mode 100644 sw/qa/extras/ww8export/data/new-page-styles.doc create mode 100644 sw/qa/extras/ww8export/data/object_cross_reference.odt create mode 100644 sw/qa/extras/ww8export/data/ooo92948-1.doc create mode 100644 sw/qa/extras/ww8export/data/page-border.doc create mode 100644 sw/qa/extras/ww8export/data/redline-export-1.odt create mode 100644 sw/qa/extras/ww8export/data/redline-export-2.odt create mode 100644 sw/qa/extras/ww8export/data/redline-export-3.odt create mode 100644 sw/qa/extras/ww8export/data/rtl-gutter.doc create mode 100644 sw/qa/extras/ww8export/data/shapes-line-ellipse.doc create mode 100644 sw/qa/extras/ww8export/data/table_cross_reference.odt create mode 100644 sw/qa/extras/ww8export/data/table_cross_reference_custom_format.odt create mode 100644 sw/qa/extras/ww8export/data/tdf100961_fixedDateTime.doc create mode 100644 sw/qa/extras/ww8export/data/tdf101826_xattrTextBoxFill.doc create mode 100644 sw/qa/extras/ww8export/data/tdf102334.doc create mode 100644 sw/qa/extras/ww8export/data/tdf104239_chapterNumberTortureTest.doc create mode 100644 sw/qa/extras/ww8export/data/tdf104239_chapterNumbering.doc create mode 100644 sw/qa/extras/ww8export/data/tdf104239_chapterNumberingLevels.doc create mode 100644 sw/qa/extras/ww8export/data/tdf104239_numbering.doc create mode 100644 sw/qa/extras/ww8export/data/tdf104239_sharedOutlineNumId.doc create mode 100644 sw/qa/extras/ww8export/data/tdf104334.doc create mode 100644 sw/qa/extras/ww8export/data/tdf104596_wrapInHeaderTable.doc create mode 100644 sw/qa/extras/ww8export/data/tdf104805.doc create mode 100644 sw/qa/extras/ww8export/data/tdf105570.doc create mode 100644 sw/qa/extras/ww8export/data/tdf106062_nonHangingFootnote.odt create mode 100644 sw/qa/extras/ww8export/data/tdf106174_rtlParaAlign.docx create mode 100644 sw/qa/extras/ww8export/data/tdf106291.doc create mode 100644 sw/qa/extras/ww8export/data/tdf106541_cancelOutline.doc create mode 100644 sw/qa/extras/ww8export/data/tdf106541_inheritChapterNumbering.doc create mode 100644 sw/qa/extras/ww8export/data/tdf106541_inheritChapterNumberingB.doc create mode 100644 sw/qa/extras/ww8export/data/tdf106541_inheritOutlineNumbering.doc create mode 100644 sw/qa/extras/ww8export/data/tdf107773.doc create mode 100644 sw/qa/extras/ww8export/data/tdf108072.doc create mode 100644 sw/qa/extras/ww8export/data/tdf108448_endNote.odt create mode 100644 sw/qa/extras/ww8export/data/tdf108518_CRnumformatting.doc create mode 100644 sw/qa/extras/ww8export/data/tdf111480.doc create mode 100644 sw/qa/extras/ww8export/data/tdf112074_RTLtableJustification.doc create mode 100644 sw/qa/extras/ww8export/data/tdf112118.doc create mode 100644 sw/qa/extras/ww8export/data/tdf112346.doc create mode 100644 sw/qa/extras/ww8export/data/tdf112517_maxSprms.doc create mode 100644 sw/qa/extras/ww8export/data/tdf112535.doc create mode 100644 sw/qa/extras/ww8export/data/tdf112618_textbox_no_bg.doc create mode 100644 sw/qa/extras/ww8export/data/tdf114308.doc create mode 100644 sw/qa/extras/ww8export/data/tdf115896_layoutInCell.doc create mode 100644 sw/qa/extras/ww8export/data/tdf116194.doc create mode 100644 sw/qa/extras/ww8export/data/tdf116436_tableBackground.odt create mode 100644 sw/qa/extras/ww8export/data/tdf116570_exportFootnote.odt create mode 100644 sw/qa/extras/ww8export/data/tdf117217_largeTableBackgrounds.odt create mode 100644 sw/qa/extras/ww8export/data/tdf117503.docx create mode 100644 sw/qa/extras/ww8export/data/tdf117885.doc create mode 100644 sw/qa/extras/ww8export/data/tdf118133.docx create mode 100644 sw/qa/extras/ww8export/data/tdf118375_240degClockwise.doc create mode 100644 sw/qa/extras/ww8export/data/tdf118412.doc create mode 100644 sw/qa/extras/ww8export/data/tdf118564.doc create mode 100644 sw/qa/extras/ww8export/data/tdf119232_startEvenPage.doc create mode 100644 sw/qa/extras/ww8export/data/tdf120003.doc create mode 100644 sw/qa/extras/ww8export/data/tdf120225_textControlCrossRef.doc create mode 100644 sw/qa/extras/ww8export/data/tdf120394.doc create mode 100644 sw/qa/extras/ww8export/data/tdf120412_proportionalEscapement.odt create mode 100644 sw/qa/extras/ww8export/data/tdf120711.doc create mode 100644 sw/qa/extras/ww8export/data/tdf121110_absJustify.doc create mode 100644 sw/qa/extras/ww8export/data/tdf121111_fillStyleNone.docx create mode 100644 sw/qa/extras/ww8export/data/tdf122425_2.doc create mode 100644 sw/qa/extras/ww8export/data/tdf122429_header.doc create mode 100644 sw/qa/extras/ww8export/data/tdf122460_header.odt create mode 100644 sw/qa/extras/ww8export/data/tdf123433_fillStyleStop.doc create mode 100644 sw/qa/extras/ww8export/data/tdf124937.doc create mode 100644 sw/qa/extras/ww8export/data/tdf126708_containsemf.odt create mode 100644 sw/qa/extras/ww8export/data/tdf127166_prstDash_Word97.doc create mode 100644 sw/qa/extras/ww8export/data/tdf127316_autoEscapement.odt create mode 100644 sw/qa/extras/ww8export/data/tdf127316_autoEscapement2.odt create mode 100644 sw/qa/extras/ww8export/data/tdf127862_pageFillStyle.odt create mode 100644 sw/qa/extras/ww8export/data/tdf128501.doc create mode 100644 sw/qa/extras/ww8export/data/tdf128605.doc create mode 100644 sw/qa/extras/ww8export/data/tdf128608_fillStyleNoneB.odt create mode 100644 sw/qa/extras/ww8export/data/tdf128608_tableParaBackColor.doc create mode 100644 sw/qa/extras/ww8export/data/tdf128700_relativeTableWidth.doc create mode 100644 sw/qa/extras/ww8export/data/tdf129247.docx create mode 100644 sw/qa/extras/ww8export/data/tdf129522_removeShadowStyle.odt create mode 100644 sw/qa/extras/ww8export/data/tdf130262.doc create mode 100644 sw/qa/extras/ww8export/data/tdf132094_transparentPageImage.doc create mode 100644 sw/qa/extras/ww8export/data/tdf132726.odt create mode 100644 sw/qa/extras/ww8export/data/tdf133453_realFontSize.doc create mode 100644 sw/qa/extras/ww8export/data/tdf134264.docx create mode 100644 sw/qa/extras/ww8export/data/tdf134570.doc create mode 100644 sw/qa/extras/ww8export/data/tdf134948.odt create mode 100644 sw/qa/extras/ww8export/data/tdf135672_tableGrows.doc create mode 100644 sw/qa/extras/ww8export/data/tdf136620.odt create mode 100644 sw/qa/extras/ww8export/data/tdf136814.odt create mode 100644 sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt create mode 100644 sw/qa/extras/ww8export/data/tdf138345_paraCharHighlight.doc create mode 100644 sw/qa/extras/ww8export/data/tdf139495_tinyHeader.doc create mode 100644 sw/qa/extras/ww8export/data/tdf142760.doc create mode 100644 sw/qa/extras/ww8export/data/tdf142840.odt create mode 100644 sw/qa/extras/ww8export/data/tdf147861_customField.doc create mode 100644 sw/qa/extras/ww8export/data/tdf148380_createField.doc create mode 100644 sw/qa/extras/ww8export/data/tdf148380_fldLocked.doc create mode 100644 sw/qa/extras/ww8export/data/tdf36117_verticalAdjustment.doc create mode 100644 sw/qa/extras/ww8export/data/tdf37153_considerWrapOnObjPos.doc create mode 100644 sw/qa/extras/ww8export/data/tdf37778_readonlySection.doc create mode 100644 sw/qa/extras/ww8export/data/tdf38778_properties_in_run_for_field.doc create mode 100644 sw/qa/extras/ww8export/data/tdf41542_borderlessPadding.odt create mode 100644 sw/qa/extras/ww8export/data/tdf41542_imagePadding.odt create mode 100644 sw/qa/extras/ww8export/data/tdf46441-2.odt create mode 100644 sw/qa/extras/ww8export/data/tdf49102_mergedCellNumbering.doc create mode 100644 sw/qa/extras/ww8export/data/tdf55427_footnote2endnote.odt create mode 100644 sw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.doc create mode 100644 sw/qa/extras/ww8export/data/tdf56321_flipImage_both.doc create mode 100644 sw/qa/extras/ww8export/data/tdf59896.doc create mode 100644 sw/qa/extras/ww8export/data/tdf60378_mergedBorders.doc create mode 100644 sw/qa/extras/ww8export/data/tdf70838.odt create mode 100644 sw/qa/extras/ww8export/data/tdf70838b_verticalRotation.odt create mode 100644 sw/qa/extras/ww8export/data/tdf73056_cellMargins.doc create mode 100644 sw/qa/extras/ww8export/data/tdf74328.doc create mode 100644 sw/qa/extras/ww8export/data/tdf75539_relativeWidth.doc create mode 100644 sw/qa/extras/ww8export/data/tdf75748_inheritChapterNumberingC.doc create mode 100644 sw/qa/extras/ww8export/data/tdf76349_textboxMargins.doc create mode 100644 sw/qa/extras/ww8export/data/tdf77964.doc create mode 100644 sw/qa/extras/ww8export/data/tdf79186_noLayoutInCell.odt create mode 100644 sw/qa/extras/ww8export/data/tdf79435_legacyInputFields.docx create mode 100644 sw/qa/extras/ww8export/data/tdf79553_lineNumbers.doc create mode 100644 sw/qa/extras/ww8export/data/tdf79639.doc create mode 100644 sw/qa/extras/ww8export/data/tdf80635_marginLeft.doc create mode 100644 sw/qa/extras/ww8export/data/tdf80635_marginRightRTL.doc create mode 100644 sw/qa/extras/ww8export/data/tdf80635_pageLeft.doc create mode 100644 sw/qa/extras/ww8export/data/tdf80635_pageRightRTL.doc create mode 100644 sw/qa/extras/ww8export/data/tdf81705_outlineLevel.doc create mode 100644 sw/qa/extras/ww8export/data/tdf89377_tableWithBreakBeforeParaStyle.doc create mode 100644 sw/qa/extras/ww8export/data/tdf91083.odt create mode 100644 sw/qa/extras/ww8export/data/tdf91083_tableKeep2.odt create mode 100644 sw/qa/extras/ww8export/data/tdf91083_tableKeep3.odt create mode 100644 sw/qa/extras/ww8export/data/tdf91687.doc create mode 100644 sw/qa/extras/ww8export/data/tdf92281.doc create mode 100644 sw/qa/extras/ww8export/data/tdf94009_zeroPgMargin.odt create mode 100644 sw/qa/extras/ww8export/data/tdf94326_notOutlineNumbering.doc create mode 100644 sw/qa/extras/ww8export/data/tdf94386.odt create mode 100644 sw/qa/extras/ww8export/data/tdf95321.doc create mode 100644 sw/qa/extras/ww8export/data/tdf95576.doc create mode 100644 sw/qa/extras/ww8export/data/tdf96277.doc create mode 100644 sw/qa/extras/ww8export/data/tdf98620_rtlJustify.doc create mode 100644 sw/qa/extras/ww8export/data/tdf99100.doc create mode 100644 sw/qa/extras/ww8export/data/tdf99120.doc create mode 100644 sw/qa/extras/ww8export/data/tdf99197_defaultLTR.doc create mode 100644 sw/qa/extras/ww8export/data/tdf99474.odt create mode 100644 sw/qa/extras/ww8export/data/testTdf107931_KERN_DocEnabled_disabledDefStyle.doc create mode 100644 sw/qa/extras/ww8export/data/testTdf107931_KERN_enabledDefStyle.doc create mode 100644 sw/qa/extras/ww8export/data/transparent-text.doc create mode 100644 sw/qa/extras/ww8export/data/tscp.doc create mode 100644 sw/qa/extras/ww8export/data/zoom.doc create mode 100644 sw/qa/extras/ww8export/data/zoomtype.doc create mode 100644 sw/qa/extras/ww8export/ww8export.cxx create mode 100644 sw/qa/extras/ww8export/ww8export2.cxx create mode 100644 sw/qa/extras/ww8export/ww8export3.cxx create mode 100644 sw/qa/extras/ww8export/ww8export4.cxx create mode 100644 sw/qa/extras/ww8import/data/bnc875715.doc create mode 100644 sw/qa/extras/ww8import/data/changes-in-footnote.doc create mode 100644 sw/qa/extras/ww8import/data/floating-table-section-columns.doc create mode 100644 sw/qa/extras/ww8import/data/floating-table-section-margins.doc create mode 100644 sw/qa/extras/ww8import/data/image-lazy-read-0size.doc create mode 100644 sw/qa/extras/ww8import/data/image-lazy-read.doc create mode 100644 sw/qa/extras/ww8import/data/n816593.doc create mode 100644 sw/qa/extras/ww8import/data/tdf106799.doc create mode 100644 sw/qa/extras/ww8import/data/tdf110987 create mode 100644 sw/qa/extras/ww8import/data/tdf120761_zOrder.dot create mode 100644 sw/qa/extras/ww8import/data/tdf121734.doc create mode 100644 sw/qa/extras/ww8import/data/tdf122425_1.doc create mode 100644 sw/qa/extras/ww8import/data/tdf124601.doc create mode 100644 sw/qa/extras/ww8import/data/tdf125281.doc create mode 100644 sw/qa/extras/ww8import/ww8import.cxx (limited to 'sw/qa/extras') diff --git a/sw/qa/extras/README b/sw/qa/extras/README new file mode 100644 index 000000000..efa6071d5 --- /dev/null +++ b/sw/qa/extras/README @@ -0,0 +1,274 @@ += How to add a new Writer filter test + +The `sw/qa/extras/` subdirectory has multiple import and export filter unit +tests. This file documents how to add new testcases to this framework. + +== Import tests + +Import tests are the easier ones. First you need to use +`CPPUNIT_TEST_FIXTURE()` and `load()`, so the framework will load the +specified file to `mxComponent`, which represents the UNO model of the +document. + +The rest of the testcase is about implementing the test method asserting this +document model: use the UNO API to retrieve properties, then use +`CPPUNIT_ASSERT_EQUAL()` to test against an expected value. + +See below for more details on writing the UNO code see below. + +=== Direct XPath assertions on the layout dump + +In most cases you want to assert the document model, but sometimes asserting +the layout is easier. If you want to do so, the `parseDump()` method can be +used to parse the layout dump of the currently loaded document. If you want +to have a look at the XML document that can be asserted, start soffice with the +`SW_DEBUG=1` environment variable, load a document, press F12, and have a look +at the `layout.xml` file in the current directory. Once you find the needed +information in that file, you can write your XPath expression to turn that into +a testcase. + +(Similarly, Shift-F12 produces a `nodes.xml` for the document model dump, but +it's unlikely that you'll need that in a unit test.) + +== Export tests + +Export tests are similar. Given that test documents are easier to provide in +some format (instead of writing code to build the documents from scratch) in +most cases, we will do an import, then do an export (to invoke the code we want +to test) and then do an import again, so we can do the testing by asserting the +document model, just like we did for import tests. + +Yes, this means that you can only test the export code (using this framework) +if the importer is working correctly. (But that's not so bad, users usually +expect a feature to work in both the importer and the exporter.) + +The only difference is that in these tests the test method is called twice: +once after the initial import -- so you can see if the export fails due to an +import problem in fact -- and once after the export and import. + +=== Direct XPath assertions + +Another alternative is to assert the resulted export document directly. +Currently this is only implemented for DOCX, which is a zipped XML, so it's +possible to evaluate XPath checks. A check looks like this: + +if (xmlDocPtr pXmlDoc = parseExport("word/document.xml")) + assertXPath(pXmlDoc, , , ); + +It's important to check for the NULL pointer here, it's expected that it'll be +NULL when the test runs first (after the first import), as there is nothing +exported yet. For other XPath assert variants, see the `XmlTestTools` class. + +== Helper methods + +When two or more tests do the same (for example determine the number of +characters in the document), helper methods are introduced to avoid code +duplication. When you need something more complex, check if there is already a +helper method, they are also good examples. + +Helper methods which are used by more than one testsuite are in the +`SwModelTestBase` class. For example the `getLength()` method uses the trick +that you can simply enumerate over the document model, getting the paragraphs +of it; and inside those, you can enumerate over their runs. That alone is +enough if you want to test a paragraph or character property. + +== Using UNO for tests + +Figuring out the UNO API just by reading the idl files under `offapi/` is not +that productive. Xray can help in this case. Download it from: + +https://dev-www.libreoffice.org/extern/XrayTool52_en.sxw + +It's a document file, start Writer, Tools -> Options -> LibreOffice -> Security, +Macro Security, and there choose Low. Then open the document, and click `Install +Xray`. Now you can close the file. Open your testcase, which is imported +correctly (from a fixed bugs's point of view). Then open the basic editor +(Tools -> Macros -> LibreOffice Basic -> Organize Macros, Edit), and start to +write your testcase as `Sub Main`. You don't have to know much about basic, for +a typical testcase you need no `if`, `for`, or anything like that. + +NOTE: Once you restart Writer, xray will no longer be loaded automatically. For +subsequent starts, place the following line in `Main` before you do anything +else: + +---- +GlobalScope.BasicLibraries.LoadLibrary("XrayTool") +---- + +The above `mxComponent` is available as `ThisComponent` in basic, and if you +want to inspect a variable here, you can use the `xray` command to inspect +properties, methods, interfaces, etc. + +Let's take for example fdo#49501. The problem there was the page was not +landscape (and a few more, let's ignore that). + +You can start with: + +---- +xray ThisComponent +---- + +and navigate around (it is a good idea to click Configuration and enable +alphabetical sorting). The good thing is that once you write the code, you can +just start F5 without restarting LibreOffice to see the result, so you can +develop quickly. + +With some experimenting, you'll end up with something like this: + +---- +oStyle = ThisComponent.StyleFamilies.PageStyles.getByName("Default Style") +xray oStyle.IsLandscape +---- + +Now all left is to rewrite that in cpp, where it'll be much easier to debug +when later this test fails for some reason. In cpp, you typically need to be +more verbose, so the code will look like: + +---- +uno::Reference xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(true, getProperty(xStyle, "IsLandscape")); +---- + +== CppUnit tips + +=== sal_Bool + +In case a UNO method returns sal_Bool, and the assert fails, CppUnit won't be +able to print a usable error message, as it will think that the value is a +printable character. Best to use `bool` for the expected value and cast the +actual value to `bool` as well before comparing. + +=== Running only a single test + +If you want to run only a single test to allow quick development iteration, +then use `CPPUNIT_TEST_NAME` to specify the name of the single test: + +---- +CPPUNIT_TEST_NAME="testTdf91074" make -sr CppunitTest_sw_rtfimport +---- + +== UNO, in more details, various tips: + +=== writing code based xray inspection: + +In general, if you want to access a property, in Basic it's enough to write 'object.property', +such as printing character count that 'xray ThisComponent' prints as 'CharacterCount': + +count = ThisComponent.CharacterCount +text = paragraph.String + +In C++, this can get more complicated, as you need to use the right interface for access. Xray +prints the internal name of the object (e.g. 'SwXTextDocument' for 'xray ThisComponent') +above the list of its properties. Inspect this class/interface in the code (that is, +under offapi/, udkapi/, or wherever it is implemented) and search for a function named +similarly to the property you want (getXYZ()). If there is none, it is most +probably a property that can be read using XPropertySet or using the getProperty helper: + +sal_Int32 val = getProperty< sal_Int32 >( textDocument, "CharacterCount" ); + +If there is a function to obtain the property, you need access it using the right interface. +If the class itself is not the right interface, then it is one of the classes it inherits +from, usually the block of functions that are implemented for this interface starts with +stating the name. For example see sw/inc/unoparagraph.hxx for class SwXParagraph, it has +function getString() in a block introduced with 'XTextRange', so XTextRange is the interface +it inherits from: + +// text of the paragraph +uno::Reference text(paragraph, uno::UNO_QUERY); +OUString value = text->getString(); + +Some properties may be more complicated to access, such as using XEnumerationAccess, XIndexAccess +or XNamedAccess to enumerate items, index them by number of name (clicking 'Dbg_SupportedInterfaces' +in xray gives a list of interfaces the object implements, and 'Count' shows the number of items). + +=== XEnumerationAccess (e.g. get the 2nd paragraph of the document): + +Basic: + +enum = ThisComponent.Text.createEnumeration +para = enum.NextElement +para = enum.NextElement +xray para + +C++: + +uno::Reference textDocument(mxComponent, uno::UNO_QUERY); +uno::Reference paraEnumAccess(textDocument->getText(), uno::UNO_QUERY); +// list of paragraphs +uno::Reference paraEnum = paraEnumAccess->createEnumeration(); +// go to 1st paragraph +(void) paraEnum->nextElement(); +// get the 2nd paragraph +uno::Reference paragraph(paraEnum->nextElement(), uno::UNO_QUERY); + +Note that for paragraphs it's easier to use getParagraph(), which gets the given +paragraph (counted from 1) and optionally checks the paragraph text. + +uno::Reference< text::XTextRange > paragraph = getParagraph( 2, "TEXT" ) + +=== XNamedAccess (e.g. get a bookmark named 'position1'): + +Basic: + +bookmark = ThisComponent.Bookmarks.getByName("position1") + +or even simpler + +bookmark = ThisComponent.Bookmarks.position1 + +C++: + +uno::Reference textDocument(mxComponent, uno::UNO_QUERY); +// XBookmarksSupplier interface will be needed to access the bookmarks +uno::Reference bookmarksSupplier(textDocument, uno::UNO_QUERY); +// get the bookmarks +uno::Reference bookmarks(bookmarksSupplier->getBookmarks(), uno::UNO_QUERY); +uno::Reference bookmark; +// get the bookmark by name +bookmarks->getByName("position1") >>= bookmark; + +=== XIndexAccess (e.g. get the first bookmark): + +Basic: + +bookmark = ThisComponent.Bookmarks.getByIndex(0) + +C++: + +uno::Reference textDocument(mxComponent, uno::UNO_QUERY); +// XBookmarksSupplier interface will be needed to access the bookmarks +uno::Reference bookmarksSupplier(textDocument, uno::UNO_QUERY); +// get the bookmarks +uno::Reference bookmarks(bookmarksSupplier->getBookmarks(), uno::UNO_QUERY); +uno::Reference bookmark; +// get the bookmark by index +bookmarks->getByIndex(0) >>= bookmark; + +=== Images + +Embedded images seem to be accessed like this: + +Basic: + +image = ThisComponent.DrawPage.getByIndex(0) +graphic = image.Graphic + +C++: + +uno::Reference image = getShape(1); +uno::Reference graphic = getProperty< uno::Reference< graphic::XGraphic > >( image, "Graphic" ); + + +=== Styles + +Styles provide information about many properties of (parts of) the document, for example +page width: + +Basic: + +ThisComponent.StyleFamilies.PageStyles.getByName("Default Style").Width + +C++: + +getStyles("PageStyles")->getByName("Standard") >>= defaultStyle; +sal_Int32 width = getProperty< sal_Int32 >( defaultStyle, "Width" ); diff --git a/sw/qa/extras/accessibility/accessible_relation_set.cxx b/sw/qa/extras/accessibility/accessible_relation_set.cxx new file mode 100644 index 000000000..9cbdacc30 --- /dev/null +++ b/sw/qa/extras/accessibility/accessible_relation_set.cxx @@ -0,0 +1,245 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::accessibility; +using namespace css::lang; + +namespace +{ +class AccessibilityTools +{ +public: + static css::uno::Reference + getAccessibleObjectForRole(const css::uno::Reference& xacc, + sal_Int16 role); +}; +} + +css::uno::Reference +AccessibilityTools::getAccessibleObjectForRole( + const css::uno::Reference& xacc, sal_Int16 role) +{ + css::uno::Reference ac = xacc->getAccessibleContext(); + bool isShowing = ac->getAccessibleStateSet()->contains(AccessibleStateType::SHOWING); + + if ((ac->getAccessibleRole() == role) && isShowing) + { + return ac; + } + else + { + int k = ac->getAccessibleChildCount(); + if (ac->getAccessibleChildCount() > 100) + { + k = 50; + } + + for (int i = 0; i < k; i++) + { + css::uno::Reference ac2 + = AccessibilityTools::getAccessibleObjectForRole(ac->getAccessibleChild(i), role); + if (ac2.is()) + { + return ac2; + } + } + } + return nullptr; +} + +class AccessibleRelationSet : public UnoApiTest +{ +public: + AccessibleRelationSet() + : UnoApiTest("") + { + } + + uno::Reference init(uno::Reference& para1, + uno::Reference& para2, + uno::Reference& para3); + void contents_flows_to_and_from(); + + CPPUNIT_TEST_SUITE(AccessibleRelationSet); + CPPUNIT_TEST(contents_flows_to_and_from); + CPPUNIT_TEST_SUITE_END(); +}; + +uno::Reference +AccessibleRelationSet::init(uno::Reference& para1, + uno::Reference& para2, + uno::Reference& para3) +{ + uno::Reference xComponent + = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument"); + uno::Reference xTextDoc(xComponent, uno::UNO_QUERY); + + css::uno::Reference oText(xTextDoc->getText(), uno::UNO_SET_THROW); + + css::uno::Reference oCursor = oText->createTextCursor(); + + for (int i = 0; i < 5; i++) + { + oText->insertString(oCursor, "Paragraph Number: " + OUString::number(i), false); + oText->insertControlCharacter(oCursor, text::ControlCharacter::PARAGRAPH_BREAK, false); + } + + css::uno::Reference aModel(xTextDoc, uno::UNO_QUERY_THROW); + css::uno::Reference xController(aModel->getCurrentController()); + + css::uno::Reference ctx; + uno::Reference xFrame(xController->getFrame(), uno::UNO_SET_THROW); + uno::Reference xWindow(xFrame->getComponentWindow(), uno::UNO_SET_THROW); + + css::uno::Reference xRoot(xWindow, uno::UNO_QUERY_THROW); + ctx = AccessibilityTools::getAccessibleObjectForRole(xRoot, AccessibleRole::DOCUMENT_TEXT); + CPPUNIT_ASSERT_MESSAGE("Couldn't get AccessibleRole.DOCUMENT_TEXT object", ctx.is()); + para1 = ctx->getAccessibleChild(0); + para2 = ctx->getAccessibleChild(1); + para3 = ctx->getAccessibleChild(2); + return xComponent; +} + +void AccessibleRelationSet::contents_flows_to_and_from() +{ + //contents_flows_to + std::vector types{ "INVALID", "CONTENT_FLOWS_FROM", "CONTENT_FLOWS_TO", + "CONTROLLED_BY", "CONTROLLER_FOR", "LABEL_FOR", + "LABELED_BY", "MEMBER_OF", "SUB_WINDOW_OF" }; + + css::uno::Reference para1; + css::uno::Reference para2; + css::uno::Reference para3; + + uno::Reference xComponent(init(para1, para2, para3)); + css::uno::Reference oObj(para1, uno::UNO_QUERY_THROW); + css::uno::Reference set + = oObj->getAccessibleRelationSet(); + + css::uno::Reference atarget; + + if (set.is()) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct count of relations", sal_Int32(1), + set->getRelationCount()); + sal_Int16 firstrelation = set->getRelation(0).RelationType; + css::uno::Reference adummy( + set->getRelation(0).TargetSet[0], uno::UNO_QUERY_THROW); + atarget = adummy; + CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct relation type for paragraph 0", types[2], + types[firstrelation]); + + css::uno::Reference paraText2(para2, + uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct target paragraph", atarget->getText(), + paraText2->getText()); + } + + //contents_flows_from() + css::uno::Reference oObj2(para2, uno::UNO_QUERY_THROW); + css::uno::Reference set2 + = oObj2->getAccessibleRelationSet(); + + sal_Int16 relationtypes[2] = { -1, -1 }; + css::uno::Reference atargets[2]; + + if (set2.is()) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct count of relations", sal_Int32(2), + set2->getRelationCount()); + sal_Int16 tmprelation = set2->getRelation(0).RelationType; + if (tmprelation == 1) + { + css::uno::Reference adummy( + set2->getRelation(0).TargetSet[0], uno::UNO_QUERY_THROW); + atargets[0] = adummy; + relationtypes[0] = tmprelation; + } + else if (tmprelation == 2) + { + css::uno::Reference adummy( + set2->getRelation(0).TargetSet[0], uno::UNO_QUERY_THROW); + atargets[1] = adummy; + relationtypes[1] = tmprelation; + } + else + { + CPPUNIT_FAIL("didn't gain correct relation type"); + } + tmprelation = set2->getRelation(1).RelationType; + if (tmprelation == 1) + { + css::uno::Reference adummy( + set2->getRelation(1).TargetSet[0], uno::UNO_QUERY_THROW); + atargets[0] = adummy; + relationtypes[0] = tmprelation; + } + else if (tmprelation == 2) + { + css::uno::Reference adummy( + set2->getRelation(1).TargetSet[0], uno::UNO_QUERY_THROW); + atargets[1] = adummy; + relationtypes[1] = tmprelation; + } + else + { + CPPUNIT_FAIL("didn't gain correct relation type"); + } + } + + CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct relation type for paragraph 1", types[1], + types[relationtypes[0]]); + + css::uno::Reference paraText1(para1, uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct target paragraph", atargets[0]->getText(), + paraText1->getText()); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct relation type for paragraph 3", types[2], + types[relationtypes[1]]); + + css::uno::Reference paraText3(para3, uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct target paragraph", atargets[1]->getText(), + paraText3->getText()); + + closeDocument(xComponent); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(AccessibleRelationSet); + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/data/odt/test.odt b/sw/qa/extras/data/odt/test.odt new file mode 100644 index 000000000..b73c2e570 Binary files /dev/null and b/sw/qa/extras/data/odt/test.odt differ diff --git a/sw/qa/extras/docbookexport/data/simple.docx b/sw/qa/extras/docbookexport/data/simple.docx new file mode 100644 index 000000000..89081fd3c Binary files /dev/null and b/sw/qa/extras/docbookexport/data/simple.docx differ diff --git a/sw/qa/extras/docbookexport/data/tdf91095.docx b/sw/qa/extras/docbookexport/data/tdf91095.docx new file mode 100644 index 000000000..fbe23c80e Binary files /dev/null and b/sw/qa/extras/docbookexport/data/tdf91095.docx differ diff --git a/sw/qa/extras/docbookexport/docbookexport.cxx b/sw/qa/extras/docbookexport/docbookexport.cxx new file mode 100644 index 000000000..74241d353 --- /dev/null +++ b/sw/qa/extras/docbookexport/docbookexport.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 + +class DocbookExportTest : public SwModelTestBase +{ +public: + DocbookExportTest() : + SwModelTestBase("/sw/qa/extras/docbookexport/data/", "DocBook File") + {} +}; + +#define DECLARE_DOCBOOKEXPORT_TEST(TestName, filename) DECLARE_SW_EXPORT_TEST(TestName, filename, nullptr, DocbookExportTest) + +DECLARE_DOCBOOKEXPORT_TEST(testsimple, "simple.docx") +{ + xmlDocUniquePtr pDoc = parseXml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + assertXPathContent(pDoc, "/article/para", "aaaa"); +} + +/* the test actually should crash with this file */ +DECLARE_DOCBOOKEXPORT_TEST(testtdf91095, "tdf91095.docx") +{ + xmlDocUniquePtr pDoc = parseXml(maTempFile); + CPPUNIT_ASSERT(pDoc); +} + + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/find-unused-data.sh b/sw/qa/extras/find-unused-data.sh new file mode 100755 index 000000000..460c01caa --- /dev/null +++ b/sw/qa/extras/find-unused-data.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +for i in */data/* +do + file=$(basename "$i") + if ! git grep -q "$file"; then + echo "WARNING: $i is not used, write a testcase for it!" + fi +done + +# vi:set shiftwidth=4 expandtab: diff --git a/sw/qa/extras/fodfexport/data/tdf113696-writerimage.odt b/sw/qa/extras/fodfexport/data/tdf113696-writerimage.odt new file mode 100644 index 000000000..f8aee0836 Binary files /dev/null and b/sw/qa/extras/fodfexport/data/tdf113696-writerimage.odt differ diff --git a/sw/qa/extras/fodfexport/data/tdf113696.odt b/sw/qa/extras/fodfexport/data/tdf113696.odt new file mode 100644 index 000000000..03e0612a3 Binary files /dev/null and b/sw/qa/extras/fodfexport/data/tdf113696.odt differ diff --git a/sw/qa/extras/fodfexport/fodfexport.cxx b/sw/qa/extras/fodfexport/fodfexport.cxx new file mode 100644 index 000000000..53297da28 --- /dev/null +++ b/sw/qa/extras/fodfexport/fodfexport.cxx @@ -0,0 +1,62 @@ +/* -*- 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 +#include + +class Test : public SwModelTestBase +{ +public: + Test() + : SwModelTestBase("/sw/qa/extras/fodfexport/data/", "OpenDocument Text Flat XML") + { + } + + /** + * Denylist handling + */ + bool mustTestImportOf(const char* filename) const override + { + // Only test import of .fodt document + return o3tl::ends_with(filename, ".odt") || o3tl::ends_with(filename, ".fodt"); + } +}; + +DECLARE_FODFEXPORT_TEST(testTdf113696, "tdf113696.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Test that an image which is written in svm format (image/x-vclgraphic) + // is accompanied by a png fallback graphic. + if (xmlDocUniquePtr pXmlDoc = parseExportedFile()) + { + assertXPath(pXmlDoc, "/office:document/office:body/office:text/text:p/draw:frame/" + "draw:image[@draw:mime-type='image/x-vclgraphic']"); + assertXPath(pXmlDoc, "/office:document/office:body/office:text/text:p/draw:frame/" + "draw:image[@draw:mime-type='image/png']"); + } +} + +DECLARE_FODFEXPORT_TEST(testTdf113696WriterImage, "tdf113696-writerimage.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Same as testTdf113696, but with a writer image instead of a draw image + // (they use different code paths). + if (xmlDocUniquePtr pXmlDoc = parseExportedFile()) + { + assertXPath(pXmlDoc, "/office:document/office:body/office:text/text:p/draw:frame/" + "draw:image[@draw:mime-type='image/x-vclgraphic']"); + assertXPath(pXmlDoc, "/office:document/office:body/office:text/text:p/draw:frame/" + "draw:image[@draw:mime-type='image/png']"); + } +} + +CPPUNIT_PLUGIN_IMPLEMENT(); +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/globalfilter/data/BulletAsImage.odt b/sw/qa/extras/globalfilter/data/BulletAsImage.odt new file mode 100644 index 000000000..27622aac4 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/BulletAsImage.odt differ diff --git a/sw/qa/extras/globalfilter/data/char_background.odt b/sw/qa/extras/globalfilter/data/char_background.odt new file mode 100644 index 000000000..d2dcea069 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/char_background.odt differ diff --git a/sw/qa/extras/globalfilter/data/char_background_editing.docx b/sw/qa/extras/globalfilter/data/char_background_editing.docx new file mode 100644 index 000000000..5e92fe8bb Binary files /dev/null and b/sw/qa/extras/globalfilter/data/char_background_editing.docx differ diff --git a/sw/qa/extras/globalfilter/data/char_highlight.docx b/sw/qa/extras/globalfilter/data/char_highlight.docx new file mode 100644 index 000000000..e601bac11 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/char_highlight.docx differ diff --git a/sw/qa/extras/globalfilter/data/checkbox_form_field.odt b/sw/qa/extras/globalfilter/data/checkbox_form_field.odt new file mode 100644 index 000000000..14c931ed3 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/checkbox_form_field.odt differ diff --git a/sw/qa/extras/globalfilter/data/date_form_field.odt b/sw/qa/extras/globalfilter/data/date_form_field.odt new file mode 100644 index 000000000..2b786a414 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/date_form_field.odt differ diff --git a/sw/qa/extras/globalfilter/data/date_form_field_char_formatting.odt b/sw/qa/extras/globalfilter/data/date_form_field_char_formatting.odt new file mode 100644 index 000000000..eb7702620 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/date_form_field_char_formatting.odt differ diff --git a/sw/qa/extras/globalfilter/data/document_with_linked_graphic.odt b/sw/qa/extras/globalfilter/data/document_with_linked_graphic.odt new file mode 100644 index 000000000..e7aeda6e2 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/document_with_linked_graphic.odt differ diff --git a/sw/qa/extras/globalfilter/data/document_with_two_images.odt b/sw/qa/extras/globalfilter/data/document_with_two_images.odt new file mode 100644 index 000000000..54d3d666d Binary files /dev/null and b/sw/qa/extras/globalfilter/data/document_with_two_images.odt differ diff --git a/sw/qa/extras/globalfilter/data/dropdown_form_field.odt b/sw/qa/extras/globalfilter/data/dropdown_form_field.odt new file mode 100644 index 000000000..caaa66acd Binary files /dev/null and b/sw/qa/extras/globalfilter/data/dropdown_form_field.odt differ diff --git a/sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.docx b/sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.docx new file mode 100644 index 000000000..9fbec01e0 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.docx differ diff --git a/sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.fodt b/sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.fodt new file mode 100644 index 000000000..86b17a15b --- /dev/null +++ b/sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.fodt @@ -0,0 +1,133 @@ + + + Michael StahlMichael Stahl22019-01-24T14:48:002019-01-24T14:48:00P0DLibreOfficeDev/7.5.0.0.alpha0$Linux_X86_64 LibreOffice_project/be346d6cdc87b18dc861279187915de42722e97015.0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QUOTE "foo + QUOTE "foo + bar + baz" foo + bar + baz + bar + baz" foo + foo + bar + baz + bar + baz + + + + \ No newline at end of file diff --git a/sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.rtf b/sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.rtf new file mode 100644 index 000000000..04c8384fd --- /dev/null +++ b/sw/qa/extras/globalfilter/data/fieldmark_QUOTE_nest.rtf @@ -0,0 +1,249 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch37\stshfloch37\stshfhich37\stshfbi0\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};} +{\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{\*\falt Times New Roman};}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};} +{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};} +{\f279\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\f280\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};} +{\f282\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\f283\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};} +{\f284\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\f285\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};} +{\f286\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\f287\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\f619\fbidi \froman\fcharset238\fprq2 Cambria Math CE;} +{\f620\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f622\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f623\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f626\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} +{\f627\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f649\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f650\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f652\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;} +{\f653\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f654\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\f655\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\f656\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\f657\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};} +{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};} +{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};} +{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};} +{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};} +{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};} +{\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\f31533\fbidi \fswiss\fcharset177\fprq2 Calibri Light (Hebrew);}{\fhimajor\f31534\fbidi \fswiss\fcharset178\fprq2 Calibri Light (Arabic);} +{\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{\*\falt Times New Roman};} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};} +{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};} +{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};} +{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};} +{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};} +{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\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\f31573\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);} +{\fhiminor\f31574\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\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{\*\falt Times New Roman};}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};} +{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};} +{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};} +{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}}{\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 \loch\af37\hich\af37\dbch\af37 }{\*\defpap \ql \li0\ri0\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 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1031\langfe1033\loch\f37\hich\af37\dbch\af37\cgrid\langnp1031\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv +\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1031\langfe1031\loch\f37\hich\af37\dbch\af37\cgrid\langnp1031\langfenp1031 \snext11 \ssemihidden \sunhideused +Normal Table;}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid1061464\rsid1922412\rsid5796261\rsid12332008\rsid13762899\rsid16735927}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1 +\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Michael Stahl}{\operator Michael Stahl}{\creatim\yr2019\mo1\dy24\hr15\min48}{\revtim\yr2019\mo1\dy24\hr15\min48}{\version2}{\edmins0}{\nofpages1}{\nofwords13}{\nofchars89}{\nofcharsws101}{\vern57447}} +{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1134\gutter0\ltrsect +\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0 +\showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot1061464\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2 +\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6 +\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1031\langfe1033\loch\af37\hich\af37\dbch\af37\cgrid\langnp1031\langfenp1033 {\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1061464 \hich\af37\dbch\af37\loch\f37 \hich\af37\dbch\af37\loch\f37 QUOTE "foo +\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13762899 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1061464 \hich\af37\dbch\af37\loch\f37 }{\field{\*\fldinst {\rtlch\fcs1 \af0 +\ltrch\fcs0 \insrsid13762899 \hich\af37\dbch\af37\loch\f37 \hich\af37\dbch\af37\loch\f37 QUOTE "foo +\par \hich\af37\dbch\af37\loch\f37 bar +\par \hich\af37\dbch\af37\loch\f37 baz"\hich\af37\dbch\af37\loch\f37 }}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13762899 \hich\af37\dbch\af37\loch\f37 foo +\par \hich\af37\dbch\af37\loch\f37 bar +\par \hich\af37\dbch\af37\loch\f37 baz}}}\sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13762899 +\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1061464 \hich\af37\dbch\af37\loch\f37 bar +\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang6153\langfe1033\langnp6153\insrsid1061464\charrsid13762899 \hich\af37\dbch\af37\loch\f37 baz"\hich\af37\dbch\af37\loch\f37 }}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 +\lang6153\langfe1033\langnp6153\insrsid13762899\charrsid13762899 \hich\af37\dbch\af37\loch\f37 foo +\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13762899 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang6153\langfe1033\langnp6153\insrsid13762899\charrsid13762899 +\hich\af37\dbch\af37\loch\f37 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang6153\langfe1033\langnp6153\insrsid13762899\charrsid13762899 \hich\af37\dbch\af37\loch\f37 foo +\par \hich\af37\dbch\af37\loch\f37 bar +\par \hich\af37\dbch\af37\loch\f37 baz +\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang6153\langfe1033\langnp6153\insrsid13762899\charrsid13762899 \hich\af37\dbch\af37\loch\f37 bar + +\par \hich\af37\dbch\af37\loch\f37 baz}}}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1031\langfe1033\loch\af37\hich\af37\dbch\af37\cgrid\langnp1031\langfenp1033 \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 +\lang6153\langfe1033\langnp6153\insrsid5796261\charrsid13762899 +\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang6153\langfe1033\langnp6153\insrsid16735927\charrsid1061464 +\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 Normal Table;\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 Table Simple 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Contemporary;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Elegant;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Professional; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Theme;\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 +4d73786d6c322e534158584d4c5265616465722e362e30000000000000000000000e0000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdffffff04000000feffffff05000000fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff010000000c6ad98892f1d411a65f0040963251e500000000000000000000000010aa +78dbf3b3d4010300000080020000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff02000000000000000000000000000000000000000000000010aa78dbf3b3d401 +10aa78dbf3b3d4010000000000000000000000004f00c600520049004f005800c7005400c700c40053003200d400c00033004b004100d800cc003000430041003d003d000000000000000000000000000000000032000101ffffffffffffffff03000000000000000000000000000000000000000000000010aa78dbf3b3 +d40110aa78dbf3b3d4010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000 +00000000000000000000000000000000f100000000000000010000000200000003000000feffffff0500000006000000070000000800000009000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c623a536f757263657320786d6c6e733a623d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f6772617068792220786d6c6e733d +22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222053656c65637465645374796c653d225c415041536978746845646974696f6e4f66666963654f6e6c696e652e78736c22205374796c654e616d +653d22415041222056657273696f6e3d2236222f3e0000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b33393438 +363433412d443337392d343439452d394344322d3037344130333842314130387d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c +64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e500072006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000 +0000000000000000000000000000000000000000000000000000000000000400000055010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f +72654974656d3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/sw/qa/extras/globalfilter/data/graphic_shape.odt b/sw/qa/extras/globalfilter/data/graphic_shape.odt new file mode 100644 index 000000000..425e8c2f3 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/graphic_shape.odt differ diff --git a/sw/qa/extras/globalfilter/data/images_with_special_IDs.odt b/sw/qa/extras/globalfilter/data/images_with_special_IDs.odt new file mode 100644 index 000000000..d4c62f5d2 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/images_with_special_IDs.odt differ diff --git a/sw/qa/extras/globalfilter/data/linked_graphic.jpg b/sw/qa/extras/globalfilter/data/linked_graphic.jpg new file mode 100644 index 000000000..2218cdd72 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/linked_graphic.jpg differ diff --git a/sw/qa/extras/globalfilter/data/multiple_identical_graphics.odt b/sw/qa/extras/globalfilter/data/multiple_identical_graphics.odt new file mode 100644 index 000000000..20f40798e Binary files /dev/null and b/sw/qa/extras/globalfilter/data/multiple_identical_graphics.odt differ diff --git a/sw/qa/extras/globalfilter/data/skipimages.doc b/sw/qa/extras/globalfilter/data/skipimages.doc new file mode 100644 index 000000000..3c40599b0 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/skipimages.doc differ diff --git a/sw/qa/extras/globalfilter/data/skipimages.docx b/sw/qa/extras/globalfilter/data/skipimages.docx new file mode 100644 index 000000000..cc6a4f4ce Binary files /dev/null and b/sw/qa/extras/globalfilter/data/skipimages.docx differ diff --git a/sw/qa/extras/globalfilter/data/tdf138345_charstyle_highlight.odt b/sw/qa/extras/globalfilter/data/tdf138345_charstyle_highlight.odt new file mode 100644 index 000000000..6886ed8f7 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/tdf138345_charstyle_highlight.odt differ diff --git a/sw/qa/extras/globalfilter/data/text13e.odt b/sw/qa/extras/globalfilter/data/text13e.odt new file mode 100644 index 000000000..bb16e0467 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/text13e.odt differ diff --git a/sw/qa/extras/globalfilter/data/text_form_field.odt b/sw/qa/extras/globalfilter/data/text_form_field.odt new file mode 100644 index 000000000..96af26f77 Binary files /dev/null and b/sw/qa/extras/globalfilter/data/text_form_field.odt differ diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx b/sw/qa/extras/globalfilter/globalfilter.cxx new file mode 100644 index 000000000..fefc1fbda --- /dev/null +++ b/sw/qa/extras/globalfilter/globalfilter.cxx @@ -0,0 +1,1909 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase() {} + + void testEmbeddedGraphicRoundtrip(); + void testLinkedGraphicRT(); + void testImageWithSpecialID(); + void testGraphicShape(); + void testMultipleIdenticalGraphics(); + void testCharHighlight(); + void testCharHighlightODF(); + void testCharHighlightBody(); + void testCharStyleHighlight(); + void testMSCharBackgroundEditing(); + void testCharBackgroundToHighlighting(); +#if !defined(_WIN32) + void testSkipImages(); +#endif + void testNestedFieldmark(); + void verifyText13(char const*); + void testODF13(); + void testRedlineFlags(); + void testBulletAsImage(); + void testTextFormField(); + void testCheckBoxFormField(); + void testDropDownFormField(); + void testDateFormField(); + void testDateFormFieldCharacterFormatting(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testEmbeddedGraphicRoundtrip); + CPPUNIT_TEST(testLinkedGraphicRT); + CPPUNIT_TEST(testImageWithSpecialID); + CPPUNIT_TEST(testGraphicShape); + CPPUNIT_TEST(testMultipleIdenticalGraphics); + CPPUNIT_TEST(testCharHighlight); + CPPUNIT_TEST(testCharHighlightODF); + CPPUNIT_TEST(testMSCharBackgroundEditing); + CPPUNIT_TEST(testCharBackgroundToHighlighting); +#if !defined(_WIN32) + CPPUNIT_TEST(testSkipImages); +#endif + CPPUNIT_TEST(testNestedFieldmark); + CPPUNIT_TEST(testODF13); + CPPUNIT_TEST(testRedlineFlags); + CPPUNIT_TEST(testBulletAsImage); + CPPUNIT_TEST(testTextFormField); + CPPUNIT_TEST(testCheckBoxFormField); + CPPUNIT_TEST(testDropDownFormField); + CPPUNIT_TEST(testDateFormField); + CPPUNIT_TEST(testDateFormFieldCharacterFormatting); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::testEmbeddedGraphicRoundtrip() +{ + OUString aFilterNames[] = { + "writer8", + "Rich Text Format", + "MS Word 97", + "Office Open XML Text", + }; + + for (OUString const & rFilterName : aFilterNames) + { + // Check whether the export code swaps in the image which was swapped out before by auto mechanism + + if (mxComponent.is()) + mxComponent->dispose(); + + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/document_with_two_images.odt"), "com.sun.star.text.TextDocument"); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check whether graphic exported well after it was swapped out + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 2, getShapes()); + + // First image + uno::Reference xImage(getShape(1), uno::UNO_QUERY); + uno::Reference< beans::XPropertySet > XPropSet( xImage, uno::UNO_QUERY_THROW ); + + // Check graphic, size + { + uno::Reference xGraphic; + XPropSet->getPropertyValue("Graphic") >>= xGraphic; + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xGraphic.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), graphic::GraphicType::PIXEL, xGraphic->getType()); + uno::Reference xBitmap(xGraphic, uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xBitmap.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(610), xBitmap->getSize().Width); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(381), xBitmap->getSize().Height); + } + + // Second Image + xImage.set(getShape(2), uno::UNO_QUERY); + XPropSet.set( xImage, uno::UNO_QUERY_THROW ); + + // Check graphic, size + { + uno::Reference xGraphic; + XPropSet->getPropertyValue("Graphic") >>= xGraphic; + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xGraphic.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), graphic::GraphicType::PIXEL, xGraphic->getType()); + uno::Reference xBitmap(xGraphic, uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xBitmap.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(900), xBitmap->getSize().Width); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(600), xBitmap->getSize().Height); + } + } +} + +void Test::testLinkedGraphicRT() +{ + const OUString aFilterNames[] = { + "writer8", +// "Rich Text Format", Note: picture is there, but SwGrfNode is not found? + "MS Word 97", + "Office Open XML Text", + }; + + for (OUString const & rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/document_with_linked_graphic.odt"), "com.sun.star.text.TextDocument"); + + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pDoc); + SwNodes& aNodes = pDoc->GetNodes(); + + // Find the image + bool bImageFound = false; + Graphic aGraphic; + for (SwNodeOffset nIndex(0); nIndex < aNodes.Count(); ++nIndex) + { + if (aNodes[nIndex]->IsGrfNode()) + { + SwGrfNode* pGrfNode = aNodes[nIndex]->GetGrfNode(); + CPPUNIT_ASSERT(pGrfNode); + + const GraphicObject& rGraphicObj = pGrfNode->GetGrfObj(true); + aGraphic = rGraphicObj.GetGraphic(); + bImageFound = true; + } + } + + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), bImageFound); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), GraphicType::Bitmap, aGraphic.GetType()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_uLong(864900), aGraphic.GetSizeBytes()); + + // Check if linked graphic is registered in LinkManager + sfx2::LinkManager& rLinkManager = pTextDoc->GetDocShell()->GetDoc()->GetEditShell()->GetLinkManager(); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), size_t(1), rLinkManager.GetLinks().size()); + const tools::SvRef & rLink = rLinkManager.GetLinks()[0]; + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), rLink->GetLinkSourceName().indexOf("linked_graphic.jpg") >= 0); + } +} + +void Test::testImageWithSpecialID() +{ + // Check how LO handles when the imported graphic's ID is different from that one + // which is generated by LO. + + const OUString aFilterNames[] = { + "writer8", + "Rich Text Format", + "MS Word 97", + "Office Open XML Text", + }; + + for (OUString const & rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/images_with_special_IDs.odt"), "com.sun.star.text.TextDocument"); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check whether graphic exported well + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 2, getShapes()); + + uno::Reference xImage = getShape(1); + uno::Reference< beans::XPropertySet > XPropSet( xImage, uno::UNO_QUERY_THROW ); + + // Check graphic, size + { + uno::Reference xGraphic; + XPropSet->getPropertyValue("Graphic") >>= xGraphic; + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xGraphic.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), graphic::GraphicType::PIXEL, xGraphic->getType()); + uno::Reference xBitmap(xGraphic, uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xBitmap.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(610), xBitmap->getSize().Width); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(381), xBitmap->getSize().Height); + } + + // Second Image + xImage.set(getShape(2), uno::UNO_QUERY); + XPropSet.set( xImage, uno::UNO_QUERY_THROW ); + + // Check graphic, size + { + uno::Reference xGraphic; + XPropSet->getPropertyValue("Graphic") >>= xGraphic; + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xGraphic.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), graphic::GraphicType::PIXEL, xGraphic->getType()); + uno::Reference xBitmap(xGraphic, uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xBitmap.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(900), xBitmap->getSize().Width); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(600), xBitmap->getSize().Height); + } + } +} + +/// Gives the first embedded or linked image in a document. +static uno::Reference lcl_getShape(const uno::Reference& xComponent, bool bEmbedded) +{ + uno::Reference xShape; + + uno::Reference xDrawPageSupplier(xComponent, uno::UNO_QUERY); + uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); + for (sal_Int32 i = 0; i < xDrawPage->getCount(); ++i) + { + uno::Reference xShapeProperties(xDrawPage->getByIndex(i), uno::UNO_QUERY); + uno::Reference xGraphic; + xShapeProperties->getPropertyValue("Graphic") >>= xGraphic; + if (xGraphic.is()) + { + Graphic aGraphic(xGraphic); + + if (bEmbedded == aGraphic.getOriginURL().isEmpty()) + { + xShape.set(xShapeProperties, uno::UNO_QUERY); + return xShape; + } + } + } + + return xShape; +} + +void Test::testGraphicShape() +{ + // There are two kind of images in Writer: 1) Writer specific handled by SwGrfNode and + // 2) graphic shape handled by SdrGrafObj (e.g. after copy&paste from Impress). + + const OUString aFilterNames[] = { + "writer8", + "Rich Text Format", + "MS Word 97", + "Office Open XML Text", + }; + + for (OUString const & rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/graphic_shape.odt"), "com.sun.star.text.TextDocument"); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check whether graphic exported well + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 2, getShapes()); + + uno::Reference xImage = lcl_getShape(mxComponent, true); + CPPUNIT_ASSERT_MESSAGE("Couldn't load the shape/image", xImage.is()); + uno::Reference< beans::XPropertySet > XPropSet( xImage, uno::UNO_QUERY ); + // First image is embedded + // Check size + { + uno::Reference xGraphic; + XPropSet->getPropertyValue("Graphic") >>= xGraphic; + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xGraphic.is()); + uno::Reference xBitmap(xGraphic, uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xBitmap.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(610), xBitmap->getSize().Width ); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(381), xBitmap->getSize().Height ); + } + + // MS filters make this kind of linked images broken !? + if (rFilterName != "writer8") + return; + + // Second image is a linked one + xImage = lcl_getShape(mxComponent, false); + XPropSet.set(xImage, uno::UNO_QUERY); + const OString sFailedImageLoad = OString::Concat("Couldn't load the shape/image for ") + rFilterName.toUtf8(); + CPPUNIT_ASSERT_MESSAGE(sFailedImageLoad.getStr(), xImage.is()); + + // Check size + { + uno::Reference xGraphic; + XPropSet->getPropertyValue("Graphic") >>= xGraphic; + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xGraphic.is()); + + Graphic aGraphic(xGraphic); + OUString sURL = aGraphic.getOriginURL(); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), sURL.endsWith("linked_graphic.jpg")); + + uno::Reference xBitmap(xGraphic, uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xBitmap.is()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(620), xBitmap->getSize().Width); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(465), xBitmap->getSize().Height); + } + } +} + +namespace +{ + +std::vector> + lcl_getGraphics(const uno::Reference& xComponent) +{ + std::vector> aGraphics; + + uno::Reference xDrawPageSupplier(xComponent, uno::UNO_QUERY); + uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); + for (sal_Int32 i = 0; i < xDrawPage->getCount(); ++i) + { + uno::Reference xShapeProperties(xDrawPage->getByIndex(i), uno::UNO_QUERY); + uno::Reference xGraphic; + xShapeProperties->getPropertyValue("Graphic") >>= xGraphic; + if (xGraphic.is()) + { + aGraphics.push_back(xGraphic); + } + } + + return aGraphics; +} + +} + +void Test::testMultipleIdenticalGraphics() +{ + // We have multiple identical graphics. When we save them we want + // them to be saved de-duplicated and the same should still be true + // after loading them again. This test check that the de-duplication + // works as expected. + + const OUString aFilterNames[] { + "writer8", + //"Rich Text Format", // doesn't work correctly for now + "MS Word 97", + "Office Open XML Text", + }; + + for (OUString const & rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/multiple_identical_graphics.odt"), "com.sun.star.text.TextDocument"); + + // Export the document and import again for a check + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + mxComponent->dispose(); + + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check whether graphic exported well + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + auto aGraphics = lcl_getGraphics(mxComponent); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), size_t(5), aGraphics.size()); + + // Get all GfxLink addresses, we expect all of them to be the same + // indicating we use the same graphic instance for all shapes + std::vector aGfxLinkAddresses; + for (auto const & rxGraphic : aGraphics) + { + GfxLink* pLink = Graphic(rxGraphic).GetSharedGfxLink().get(); + aGfxLinkAddresses.emplace_back(reinterpret_cast(pLink)); + } + + // Check all addresses are the same + bool bResult = std::equal(aGfxLinkAddresses.begin() + 1, aGfxLinkAddresses.end(), aGfxLinkAddresses.begin()); + const OString sGraphicNotTheSameFailedMessage = OString::Concat("Graphics not the same for filter: '") + + rFilterName.toUtf8() + OString::Concat("'"); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sGraphicNotTheSameFailedMessage.getStr(), true, bResult); + } +} + +void Test::testCharHighlightBody() +{ + // MS Word has two kind of character backgrounds called character shading and highlighting + // MS filters handle these attributes separately, but ODF export merges them into one background attribute + + const OUString aFilterNames[] = { + "writer8", + "Rich Text Format", + "MS Word 97", + "Office Open XML Text", + }; + + for (OUString const & rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/char_highlight.docx"), + "com.sun.star.text.TextDocument"); + + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + const uno::Reference< text::XTextRange > xPara = getParagraph(1); + // Both highlight and background + const Color nBackColor(0x4F81BD); + for( int nRun = 1; nRun <= 16; ++nRun ) + { + const uno::Reference xRun(getRun(xPara,nRun), uno::UNO_QUERY); + Color nHighlightColor; + switch( nRun ) + { + case 1: nHighlightColor = COL_BLACK; break; //black 0x000000 + case 2: nHighlightColor = COL_LIGHTBLUE; break; //light blue 0x0000ff + case 3: nHighlightColor = COL_LIGHTCYAN; break; //light cyan 0x00ffff + case 4: nHighlightColor = COL_LIGHTGREEN; break; //light green 0x00ff00 + case 5: nHighlightColor = COL_LIGHTMAGENTA; break; //light magenta 0xff00ff + case 6: nHighlightColor = COL_LIGHTRED; break; //light red 0xff0000 + case 7: nHighlightColor = COL_YELLOW; break; //yellow 0xffff00 + case 8: nHighlightColor = COL_WHITE; break; //white 0xffffff + case 9: nHighlightColor = COL_BLUE; break;//blue 0x000080 + case 10: nHighlightColor = COL_CYAN; break; //cyan 0x008080 + case 11: nHighlightColor = COL_GREEN; break; //green 0x008000 + case 12: nHighlightColor = COL_MAGENTA; break; //magenta 0x800080 + case 13: nHighlightColor = COL_RED; break; //red 0x800000 + case 14: nHighlightColor = COL_BROWN; break; //brown 0x808000 + case 15: nHighlightColor = COL_GRAY; break; //dark gray 0x808080 + case 16: nHighlightColor = COL_LIGHTGRAY; break; //light gray 0xC0C0C0 + } + + if (rFilterName == "writer8") + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nHighlightColor, getProperty(xRun,"CharBackColor")); + } + else // MS filters + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nHighlightColor, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nBackColor, getProperty(xRun,"CharBackColor")); + } + } + + // Only highlight + { + const uno::Reference xRun(getRun(xPara,18), uno::UNO_QUERY); + if (rFilterName == "writer8") + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_LIGHTRED, getProperty(xRun,"CharBackColor")); + } + else + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_LIGHTRED, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharBackColor")); + } + } + + // Only background + { + const uno::Reference xRun(getRun(xPara,19), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_LIGHTBLUE, getProperty(xRun,"CharBackColor")); + } + } +} + +void Test::testCharStyleHighlight() +{ + // MS Word has two kind of character backgrounds called character shading and highlighting. + // However, their character style can only accept shading. It ignores the highlighting value. + + const OUString aFilterNames[] = { + "Rich Text Format", + "MS Word 97", + "Office Open XML Text", + }; + + for (OUString const & rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/tdf138345_charstyle_highlight.odt"), + "com.sun.star.text.TextDocument"); + + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + uno::Reference xCharStyle; + getStyles("CharacterStyles")->getByName("charBackground") >>= xCharStyle; + const Color nBackColor(0xFFDBB6); //orange-y + + // Always export character style's background colour as shading, never as highlighting. + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xCharStyle,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nBackColor, getProperty(xCharStyle,"CharBackColor")); + } +} + +void Test::testCharHighlight() +{ + SvtFilterOptions& rOpt = SvtFilterOptions::Get(); + rOpt.SetCharBackground2Shading(); + + testCharHighlightBody(); + testCharStyleHighlight(); + + rOpt.SetCharBackground2Highlighting(); + + testCharHighlightBody(); + testCharStyleHighlight(); +} + +void Test::testCharHighlightODF() +{ + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/char_background_editing.docx"), + "com.sun.star.text.TextDocument"); + + // don't check import, testMSCharBackgroundEditing already does that + + uno::Reference xPara = getParagraph(1); + for (int i = 1; i <= 4; ++i) + { + uno::Reference xRun(getRun(xPara,i), uno::UNO_QUERY); + switch (i) + { + case 1: // non-transparent highlight + xRun->setPropertyValue("CharBackColor", uno::Any(static_cast(128))); + xRun->setPropertyValue("CharBackTransparent", uno::Any(true)); + xRun->setPropertyValue("CharHighlight", uno::Any(static_cast(64))); + break; + + case 2: // transparent backcolor + xRun->setPropertyValue("CharBackColor", uno::Any(static_cast(128))); + xRun->setPropertyValue("CharBackTransparent", uno::Any(true)); + xRun->setPropertyValue("CharHighlight", uno::Any(static_cast(COL_TRANSPARENT))); + break; + + case 3: // non-transparent backcolor + xRun->setPropertyValue("CharBackColor", uno::Any(static_cast(128))); + xRun->setPropertyValue("CharBackTransparent", uno::Any(false)); + xRun->setPropertyValue("CharHighlight", uno::Any(static_cast(COL_TRANSPARENT))); + break; + + case 4: // non-transparent highlight again + xRun->setPropertyValue("CharBackColor", uno::Any(static_cast(128))); + xRun->setPropertyValue("CharBackTransparent", uno::Any(false)); + xRun->setPropertyValue("CharHighlight", uno::Any(static_cast(64))); + break; + } + } + + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= OUString("writer8"); + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + xPara.set(getParagraph(1)); + for (int i = 1; i <= 4; ++i) + { + uno::Reference xRun(getRun(xPara,i), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(COL_TRANSPARENT), getProperty(xRun, "CharHighlight")); + switch (i) + { + case 1: // non-transparent highlight + CPPUNIT_ASSERT_EQUAL(Color(0x000040), getProperty(xRun, "CharBackColor")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xRun, "CharBackTransparent")); + break; + case 2: // transparent backcolor + CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, getProperty(xRun, "CharBackColor")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xRun, "CharBackTransparent")); + break; + case 3: // non-transparent backcolor + CPPUNIT_ASSERT_EQUAL(COL_BLUE, getProperty(xRun, "CharBackColor")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xRun, "CharBackTransparent")); + break; + case 4: // non-transparent highlight again + CPPUNIT_ASSERT_EQUAL(Color(0x000040), getProperty(xRun, "CharBackColor")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xRun, "CharBackTransparent")); + break; + } + } +} + +void Test::testMSCharBackgroundEditing() +{ + // Simulate the editing process of imported MSO character background attributes + // and check how export behaves. + + const OUString aFilterNames[] = { + "writer8", + "Rich Text Format", + "MS Word 97", + "Office Open XML Text", + }; + + for (OUString const & rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/char_background_editing.docx"), + "com.sun.star.text.TextDocument"); + + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + // Check whether import was done on the right way + uno::Reference< text::XTextRange > xPara = getParagraph(1); + { + uno::Reference xRun(getRun(xPara,1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_LIGHTRED, getProperty(xRun,"CharBackColor")); + + xRun.set(getRun(xPara,2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_LIGHTBLUE, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharBackColor")); + + xRun.set(getRun(xPara,3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_LIGHTBLUE, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_LIGHTRED, getProperty(xRun,"CharBackColor")); + + xRun.set(getRun(xPara,4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharBackColor")); + } + + // Simulate editing + for( int i = 1; i <= 4; ++i ) + { + uno::Reference xRun(getRun(xPara,i), uno::UNO_QUERY); + // Change background + Color nBackColor; + switch( i ) + { + case 1: nBackColor = COL_BLACK; break; //black 0x000000 + case 2: nBackColor = COL_LIGHTCYAN; break; //cyan 0x00ffff + case 3: nBackColor = COL_LIGHTGREEN; break; //green 0x00ff00 + case 4: nBackColor = COL_LIGHTMAGENTA; break; //magenta 0xff00ff + } + xRun->setPropertyValue("CharBackColor", uno::Any(nBackColor)); + // Remove highlighting + xRun->setPropertyValue("CharHighlight", uno::Any(COL_TRANSPARENT)); + // Remove shading marker + uno::Sequence aGrabBag = getProperty >(xRun,"CharInteropGrabBag"); + for (beans::PropertyValue& rProp : asNonConstRange(aGrabBag)) + { + if (rProp.Name == "CharShadingMarker") + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), true, rProp.Value.get()); + rProp.Value <<= false; + } + } + xRun->setPropertyValue("CharInteropGrabBag", uno::Any(aGrabBag)); + } + + SvtFilterOptions& rOpt = SvtFilterOptions::Get(); + rOpt.SetCharBackground2Highlighting(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check whether background was exported as highlighting + xPara.set(getParagraph(1)); + for( int i = 1; i <= 4; ++i ) + { + Color nBackColor; + switch( i ) + { + case 1: nBackColor = COL_BLACK; break; //black 0x000000 + case 2: nBackColor = COL_LIGHTCYAN; break; //light cyan 0x00ffff + case 3: nBackColor = COL_LIGHTGREEN; break; //light green 0x00ff00 + case 4: nBackColor = COL_LIGHTMAGENTA; break; //light magenta 0xff00ff + } + const uno::Reference xRun(getRun(xPara,i), uno::UNO_QUERY); + if (rFilterName == "writer8") + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nBackColor, getProperty(xRun,"CharBackColor")); + } + else + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nBackColor, getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_TRANSPARENT, getProperty(xRun,"CharBackColor")); + } + } + } +} + +void Test::testCharBackgroundToHighlighting() +{ + // MSO highlighting has less kind of values so let's see how LO character background is converted + // to these values + + const OUString aFilterNames[] = { + "Rich Text Format", + "MS Word 97", + "Office Open XML Text", + }; + + for (OUString const & rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/char_background.odt"), + "com.sun.star.text.TextDocument"); + + OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + + SvtFilterOptions& rOpt = SvtFilterOptions::Get(); + rOpt.SetCharBackground2Highlighting(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check highlight color + const uno::Reference< text::XTextRange > xPara = getParagraph(1); + for( int nRun = 1; nRun <= 19; ++nRun ) + { + const uno::Reference xRun(getRun(xPara,nRun), uno::UNO_QUERY); + Color nHighlightColor; + switch( nRun ) + { + case 1: nHighlightColor = COL_BLACK; break; //black 0x000000 + case 2: nHighlightColor = COL_YELLOW; break; //yellow 0xffff00 + case 3: nHighlightColor = COL_LIGHTMAGENTA; break; //light magenta 0xff00ff + case 4: nHighlightColor = COL_LIGHTCYAN; break; //light cyan 0x00ffff + case 5: nHighlightColor = COL_YELLOW; break; //yellow 0xffff00 + case 6: nHighlightColor = COL_LIGHTRED; break; //light red 0xff0000 + case 7: nHighlightColor = COL_LIGHTBLUE; break; //light blue 0x0000ff + case 8: nHighlightColor = COL_LIGHTGREEN; break; //light green 0x00ff00 + case 9: nHighlightColor = COL_GREEN; break; //dark green 0x008000 + case 10: nHighlightColor = COL_MAGENTA; break; //dark magenta 0x800080 + case 11: nHighlightColor = COL_BLUE; break; //dark blue 0x000080 + case 12: nHighlightColor = COL_BROWN; break; //brown 0x808000 + case 13: nHighlightColor = COL_GRAY; break; //dark gray 0x808080 + case 14: nHighlightColor = COL_BLACK; break; //black 0x000000 + case 15: nHighlightColor = COL_LIGHTRED; break; //light red 0xff0000 + case 16: nHighlightColor = COL_LIGHTGRAY; break; //light gray 0xC0C0C0 + case 17: nHighlightColor = COL_RED; break; //dark red 0x800000 + case 18: nHighlightColor = COL_GRAY; break; //dark gray 0x808080 + case 19: nHighlightColor = COL_YELLOW; break; //yellow 0xffff00 + } + const OString sMessage = sFailedMessage +". Index of run with unmatched color: " + OString::number(nRun); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), nHighlightColor, getProperty(xRun,"CharHighlight")); + } + } +} + +#if !defined(_WIN32) +void Test::testSkipImages() +{ + // Check how LO skips image loading (but not texts of textboxes and custom shapes) + // during DOC and DOCX import, using the "SkipImages" FilterOptions. + + std::pair aFilterNames[] = { + { "/sw/qa/extras/globalfilter/data/skipimages.doc", "" }, + { "/sw/qa/extras/globalfilter/data/skipimages.doc", "SkipImages" }, + { "/sw/qa/extras/globalfilter/data/skipimages.docx", "" }, + { "/sw/qa/extras/globalfilter/data/skipimages.docx", "SkipImages" } + }; + + for (auto const & rFilterNamePair : aFilterNames) + { + bool bSkipImages = !rFilterNamePair.second.isEmpty(); + OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterNamePair.first.toUtf8(); + + if (mxComponent.is()) + mxComponent->dispose(); + + if (bSkipImages) + { + // FilterOptions parameter + uno::Sequence args(comphelper::InitPropertySequence({ + { "FilterOptions", uno::Any(rFilterNamePair.second) } + })); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(rFilterNamePair.first), "com.sun.star.text.TextDocument", args); + sFailedMessage += " - " + rFilterNamePair.second.toUtf8(); + } + else + { + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(rFilterNamePair.first), "com.sun.star.text.TextDocument"); + } + + // Check shapes (images, textboxes, custom shapes) + uno::Reference xShape; + uno::Reference xGraphic; + uno::Reference< beans::XPropertySet > XPropSet; + uno::Reference xBitmap; + + bool bHasTextboxText = false; + bool bHasCustomShapeText = false; + sal_Int32 nImageCount = 0; + + for (int i = 1; i<= getShapes(); i++) + { + xShape = getShape(i); + XPropSet.set( xShape, uno::UNO_QUERY_THROW ); + try + { + XPropSet->getPropertyValue("Graphic") >>= xGraphic; + xBitmap.set(xGraphic, uno::UNO_QUERY); + if (xBitmap.is()) + nImageCount++; + } + catch (beans::UnknownPropertyException &) + { /* ignore */ } + + uno::Reference xText(xShape, uno::UNO_QUERY); + if (xText.is()) + { + OUString shapeText = xText->getString(); + if (shapeText.startsWith("Lorem ipsum")) + bHasTextboxText = true; + else if (shapeText.startsWith("Nam pretium")) + bHasCustomShapeText = true; + } + } + + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), bHasTextboxText); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), bHasCustomShapeText); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast(bSkipImages ? 0 : 3), nImageCount ); + } +} +#endif + +static auto verifyNestedFieldmark(OUString const& rTestName, + uno::Reference const& xComponent) -> void +{ + SwDoc const*const pDoc(dynamic_cast(*xComponent).GetDocShell()->GetDoc()); + IDocumentMarkAccess const& rIDMA(*pDoc->getIDocumentMarkAccess()); + + // no spurious bookmarks have been created + CPPUNIT_ASSERT_EQUAL_MESSAGE(rTestName.toUtf8().getStr(), + sal_Int32(0), rIDMA.getBookmarksCount()); + + // check inner fieldmark + SwNodeIndex const node1(*pDoc->GetNodes().GetEndOfContent().StartOfSectionNode(), +2); + SwPosition const innerPos(*node1.GetNode().GetTextNode(), + node1.GetNode().GetTextNode()->GetText().indexOf(CH_TXT_ATR_FIELDSTART)); + CPPUNIT_ASSERT_EQUAL_MESSAGE(rTestName.toUtf8().getStr(), + sal_Int32(1), innerPos.nContent.GetIndex()); + ::sw::mark::IFieldmark *const pInner(rIDMA.getFieldmarkAt(innerPos)); + CPPUNIT_ASSERT_MESSAGE(rTestName.toUtf8().getStr(), pInner); + OUString const innerString(SwPaM(pInner->GetMarkPos(), pInner->GetOtherMarkPos()).GetText()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(rTestName.toUtf8().getStr(), OUString( + OUStringChar(CH_TXT_ATR_FIELDSTART) + u" QUOTE \"foo " + OUStringChar(CH_TXTATR_NEWLINE) + + u" bar " + OUStringChar(CH_TXTATR_NEWLINE) + + u"baz\" " + OUStringChar(CH_TXT_ATR_FIELDSEP) + u"foo " + OUStringChar(CH_TXTATR_NEWLINE) + + u" bar " + OUStringChar(CH_TXTATR_NEWLINE) + + u"baz" + OUStringChar(CH_TXT_ATR_FIELDEND)), innerString); + + // check outer fieldmark + SwNodeIndex const node2(node1, -1); + SwPosition const outerPos(*node2.GetNode().GetTextNode(), + node2.GetNode().GetTextNode()->GetText().indexOf(CH_TXT_ATR_FIELDSTART)); + CPPUNIT_ASSERT_EQUAL_MESSAGE(rTestName.toUtf8().getStr(), + sal_Int32(0), outerPos.nContent.GetIndex()); + ::sw::mark::IFieldmark const*const pOuter(rIDMA.getFieldmarkAt(outerPos)); + CPPUNIT_ASSERT_MESSAGE(rTestName.toUtf8().getStr(), pOuter); + OUString const outerString(SwPaM(pOuter->GetMarkPos(), pOuter->GetOtherMarkPos()).GetText()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(rTestName.toUtf8().getStr(), OUString( + OUStringChar(CH_TXT_ATR_FIELDSTART) + u" QUOTE \"foo " + OUStringChar(CH_TXTATR_NEWLINE) + + u" " + OUStringChar(CH_TXT_ATR_FIELDSTART) + u" QUOTE \"foo " + OUStringChar(CH_TXTATR_NEWLINE) + + u" bar " + OUStringChar(CH_TXTATR_NEWLINE) + + u"baz\" " + OUStringChar(CH_TXT_ATR_FIELDSEP) + u"foo " + OUStringChar(CH_TXTATR_NEWLINE) + + u" bar " + OUStringChar(CH_TXTATR_NEWLINE) + + u"baz" + OUStringChar(CH_TXT_ATR_FIELDEND) + OUStringChar(CH_TXTATR_NEWLINE) + + u"bar " + OUStringChar(CH_TXTATR_NEWLINE) + + u"baz\" " + OUStringChar(CH_TXT_ATR_FIELDSEP) + u"foo " + OUStringChar(CH_TXTATR_NEWLINE) + + u" foo " + OUStringChar(CH_TXTATR_NEWLINE) + + u" bar " + OUStringChar(CH_TXTATR_NEWLINE) + + u"baz" + OUStringChar(CH_TXTATR_NEWLINE) + + u"bar " + OUStringChar(CH_TXTATR_NEWLINE) + + u"baz" + OUStringChar(CH_TXT_ATR_FIELDEND)), outerString); + + // must return innermost mark + CPPUNIT_ASSERT_EQUAL(pInner, rIDMA.getFieldmarkFor(innerPos)); +} + +void Test::testNestedFieldmark() +{ + // experimental config setting + Resetter resetter( + [] () { + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Filter::Microsoft::Import::ForceImportWWFieldsAsGenericFields::set(false, pBatch); + return pBatch->commit(); + }); + std::shared_ptr pBatch(comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Filter::Microsoft::Import::ForceImportWWFieldsAsGenericFields::set(true, pBatch); + pBatch->commit(); + + std::pair const aFilterNames[] = { + {"writer8", "fieldmark_QUOTE_nest.fodt"}, + {"Office Open XML Text", "fieldmark_QUOTE_nest.docx"}, + {"Rich Text Format", "fieldmark_QUOTE_nest.rtf"}, + }; + + for (auto const & rFilterName : aFilterNames) + { + if (mxComponent.is()) + { + mxComponent->dispose(); + } + + mxComponent = loadFromDesktop(m_directories.getURLFromSrc( + OUStringConcatenation("/sw/qa/extras/globalfilter/data/" + rFilterName.second)), + "com.sun.star.text.TextDocument"); + + verifyNestedFieldmark(rFilterName.first + ", load", mxComponent); + + // Export the document and import again + uno::Reference const xStorable(mxComponent, uno::UNO_QUERY); + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName.first; + + utl::TempFile aTempFile; + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + mxComponent->dispose(); + + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + verifyNestedFieldmark(rFilterName.first + " exported-reload", mxComponent); + aTempFile.EnableKillingFile(); + } +} + +auto Test::verifyText13(char const*const pTestName) -> void +{ + // OFFICE-3789 style:header-first/style:footer-first + uno::Reference xPageStyle; + getStyles("PageStyles")->getByName("Standard") >>= xPageStyle; + uno::Reference xHF(getProperty>(xPageStyle, "HeaderTextFirst")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(pTestName, OUString("Header first"), xHF->getString()); + uno::Reference xFF(getProperty>(xPageStyle, "FooterTextFirst")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(pTestName, OUString("Footer first"), xFF->getString()); + // OFFICE-3767 text:contextual-spacing + uno::Reference xPara(getParagraph(1)); + CPPUNIT_ASSERT_MESSAGE(pTestName, getProperty(xPara, "ParaContextMargin")); + // OFFICE-3776 meta:creator-initials + uno::Reference xRun(getRun(xPara, 1)); + CPPUNIT_ASSERT_EQUAL_MESSAGE(pTestName, OUString("Annotation"), getProperty(xRun, "TextPortionType")); + uno::Reference xComment(getProperty>(xRun, "TextField")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(pTestName, OUString("dj"), getProperty(xComment, "Initials")); + // OFFICE-3941 text:index-entry-link-start/text:index-entry-link-end + uno::Reference xDIS(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexes(xDIS->getDocumentIndexes()); + uno::Reference xIndex(xIndexes->getByIndex(0), uno::UNO_QUERY); + uno::Reference xLevels(getProperty>(xIndex, "LevelFormat")); + uno::Sequence format; + xLevels->getByIndex(1) >>= format; // 1-based? + CPPUNIT_ASSERT_EQUAL_MESSAGE(pTestName, OUString("TokenType"), format[0][0].Name); + CPPUNIT_ASSERT_EQUAL_MESSAGE(pTestName, OUString("TokenHyperlinkStart"), format[0][0].Value.get()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(pTestName, OUString("TokenType"), format[4][0].Name); + CPPUNIT_ASSERT_EQUAL_MESSAGE(pTestName, OUString("TokenHyperlinkEnd"), format[4][0].Value.get()); +} + +// test ODF 1.3 new text document features +void Test::testODF13() +{ + // import + mxComponent = loadFromDesktop(m_directories.getURLFromSrc( + u"/sw/qa/extras/globalfilter/data/text13e.odt"), + "com.sun.star.text.TextDocument"); + + // check model + verifyText13("import"); + + Resetter _([]() { + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Save::ODF::DefaultVersion::set(3, pBatch); + return pBatch->commit(); + }); + + { + // export ODF 1.3 + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Save::ODF::DefaultVersion::set(10, pBatch); + pBatch->commit(); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= OUString("writer8"); + + utl::TempFile aTempFile; + uno::Reference const xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + + // check XML + xmlDocUniquePtr pContentXml = parseExportInternal(aTempFile.GetURL(), "content.xml"); + assertXPath(pContentXml, "/office:document-content/office:automatic-styles/style:style/style:paragraph-properties[@style:contextual-spacing='true']"); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:p/office:annotation/meta:creator-initials"); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:p/office:annotation/loext:sender-initials", 0); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/text:index-entry-link-start"); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/loext:index-entry-link-start", 0); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/text:index-entry-link-end"); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/loext:index-entry-link-end", 0); + xmlDocUniquePtr pStylesXml = parseExportInternal(aTempFile.GetURL(), "styles.xml"); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/style:header-first"); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/loext:header-first", 0); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/style:footer-first"); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/loext:footer-first", 0); + + // reload + mxComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // check model + verifyText13("1.3 reload"); + } + { + // export ODF 1.2 extended + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Save::ODF::DefaultVersion::set(9, pBatch); + pBatch->commit(); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= OUString("writer8"); + + utl::TempFile aTempFile; + uno::Reference const xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + + // check XML + xmlDocUniquePtr pContentXml = parseExportInternal(aTempFile.GetURL(), "content.xml"); + assertXPath(pContentXml, "/office:document-content/office:automatic-styles/style:style/style:paragraph-properties[@loext:contextual-spacing='true']"); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:p/office:annotation/loext:sender-initials"); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:p/office:annotation/meta:creator-initials", 0); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/loext:index-entry-link-start"); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/text:index-entry-link-start", 0); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/loext:index-entry-link-end"); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/text:index-entry-link-end", 0); + xmlDocUniquePtr pStylesXml = parseExportInternal(aTempFile.GetURL(), "styles.xml"); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/loext:header-first"); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/style:header-first", 0); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/loext:footer-first"); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/style:footer-first", 0); + + // reload + mxComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // check model + verifyText13("1.2 Extended reload"); + } + { + // export ODF 1.2 + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Save::ODF::DefaultVersion::set(4, pBatch); + pBatch->commit(); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= OUString("writer8"); + + utl::TempFile aTempFile; + uno::Reference const xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + + // check XML + xmlDocUniquePtr pContentXml = parseExportInternal(aTempFile.GetURL(), "content.xml"); + assertXPathNoAttribute(pContentXml, "/office:document-content/office:automatic-styles/style:style/style:paragraph-properties", "contextual-spacing"); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:p/office:annotation/meta:creator-initials", 0); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:p/office:annotation/loext:sender-initials", 0); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/text:index-entry-link-start", 0); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/loext:index-entry-link-start", 0); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/text:index-entry-link-end", 0); + assertXPath(pContentXml, "/office:document-content/office:body/office:text/text:illustration-index/text:illustration-index-source/text:illustration-index-entry-template/loext:index-entry-link-end", 0); + xmlDocUniquePtr pStylesXml = parseExportInternal(aTempFile.GetURL(), "styles.xml"); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/style:header-first", 0); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/loext:header-first", 0); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/style:footer-first", 0); + assertXPath(pStylesXml, "/office:document-styles/office:master-styles/style:master-page/loext:footer-first", 0); + + // don't reload - no point + } +} + +void Test::testRedlineFlags() +{ + const OUString aFilterNames[] = { + "writer8", + "Rich Text Format", + "MS Word 97", + "Office Open XML Text", + }; + + mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + + SwPaM pam(SwPosition(SwNodeIndex(pDoc->GetNodes().GetEndOfContent(), -1))); + pDoc->getIDocumentContentOperations().InsertString(pam, "foo bar baz"); + + IDocumentRedlineAccess & rIDRA(pDoc->getIDocumentRedlineAccess()); + // enable change tracking + rIDRA.SetRedlineFlags(rIDRA.GetRedlineFlags() + | RedlineFlags::On | RedlineFlags::ShowDelete); + + // need a delete redline to trigger mode switching + pam.Move(fnMoveForward, GoInDoc); + pam.SetMark(); + pam.Move(fnMoveBackward, GoInDoc); + pDoc->getIDocumentContentOperations().DeleteAndJoin(pam); + + // hide delete redlines + RedlineFlags const nRedlineFlags = + rIDRA.GetRedlineFlags() & ~RedlineFlags::ShowDelete; + rIDRA.SetRedlineFlags(nRedlineFlags); + + for (OUString const & rFilterName : aFilterNames) + { + // export the document + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), + aMediaDescriptor.getAsConstPropertyValueList()); + + // tdf#97103 check that redline mode is properly restored + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString(OString::Concat("redline mode not restored in ") + rFilterName.toUtf8()).getStr(), + static_cast(nRedlineFlags), static_cast(rIDRA.GetRedlineFlags())); + } +} + +void Test::testBulletAsImage() +{ + OUString aFilterNames[] = { + "writer8", + "MS Word 97", + "Office Open XML Text", + "Rich Text Format", + }; + + for (OUString const & rFilterName : aFilterNames) + { + OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + if (mxComponent.is()) + mxComponent->dispose(); + + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/BulletAsImage.odt"), "com.sun.star.text.TextDocument"); + + // Check if import was successful + { + uno::Reference xPara(getParagraph(1)); + uno::Reference xPropertySet(xPara, uno::UNO_QUERY); + uno::Reference xLevels; + xLevels.set(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProperties; + xLevels->getByIndex(0) >>= aProperties; + uno::Reference xBitmap; + awt::Size aSize; + sal_Int16 nNumberingType = -1; + + for (beans::PropertyValue const & rProperty : std::as_const(aProperties)) + { + if (rProperty.Name == "NumberingType") + { + nNumberingType = rProperty.Value.get(); + } + else if (rProperty.Name == "GraphicBitmap") + { + if (rProperty.Value.has>()) + { + xBitmap = rProperty.Value.get>(); + } + } + else if (rProperty.Name == "GraphicSize") + { + aSize = rProperty.Value.get(); + } + } + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), style::NumberingType::BITMAP, nNumberingType); + + // Graphic Bitmap + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xBitmap.is()); + Graphic aGraphic(uno::Reference(xBitmap, uno::UNO_QUERY)); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), GraphicType::Bitmap, aGraphic.GetType()); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), aGraphic.GetSizeBytes() > o3tl::make_unsigned(0)); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), tools::Long(16), aGraphic.GetSizePixel().Width()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), tools::Long(16), aGraphic.GetSizePixel().Height()); + + // Graphic Size + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(400), aSize.Width); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(400), aSize.Height); + } + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + { + uno::Reference xPara(getParagraph(1)); + uno::Reference xPropertySet(xPara, uno::UNO_QUERY); + uno::Reference xLevels; + xLevels.set(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProperties; + xLevels->getByIndex(0) >>= aProperties; + uno::Reference xBitmap; + awt::Size aSize; + sal_Int16 nNumberingType = -1; + + for (beans::PropertyValue const & rProperty : std::as_const(aProperties)) + { + if (rProperty.Name == "NumberingType") + { + nNumberingType = rProperty.Value.get(); + } + else if (rProperty.Name == "GraphicBitmap") + { + if (rProperty.Value.has>()) + { + xBitmap = rProperty.Value.get>(); + } + } + else if (rProperty.Name == "GraphicSize") + { + aSize = rProperty.Value.get(); + } + } + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), style::NumberingType::BITMAP, nNumberingType); + + // Graphic Bitmap + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xBitmap.is()); + Graphic aGraphic(uno::Reference(xBitmap, uno::UNO_QUERY)); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), GraphicType::Bitmap, aGraphic.GetType()); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), aGraphic.GetSizeBytes() > o3tl::make_unsigned(0)); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), tools::Long(16), aGraphic.GetSizePixel().Width()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), tools::Long(16), aGraphic.GetSizePixel().Height()); + + // Graphic Size + if (rFilterName == "write8") // ODT is correct + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(400), aSize.Width); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(400), aSize.Height); + } + // FIXME: MS Filters don't work correctly for graphic bullet size + else if (rFilterName == "Office Open XML Text" || rFilterName == "Rich Text Format") + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(279), aSize.Width); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(279), aSize.Height); + } + else if (rFilterName == "MS Word 97") + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(296), aSize.Width); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(296), aSize.Height); + } + } + } +} + +void Test::testTextFormField() +{ + const OUString aFilterNames[] = { + "writer8", + "MS Word 97", + "Office Open XML Text", + }; + + for (const OUString& rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/text_form_field.odt"), "com.sun.star.text.TextDocument"); + + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check the document after round trip + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess(); + + // We have two text form fields + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(2), pMarkAccess->getAllMarksCount()); + + // Check whether all fieldmarks are text form fields + for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != pMarkAccess->getAllMarksEnd(); ++aIter) + { + ::sw::mark::IFieldmark* pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(*aIter); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pFieldmark); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(ODF_FORMTEXT), pFieldmark->GetFieldname()); + } + + // In the first paragraph we have an empty text form field with the placeholder spaces + const uno::Reference< text::XTextRange > xPara = getParagraph(1); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("TextFieldStart"), getProperty(getRun(xPara, 1), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("TextFieldSeparator"), getProperty(getRun(xPara, 2), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("Text"), getProperty(getRun(xPara, 3), "TextPortionType")); + sal_Unicode vEnSpaces[5] = {8194, 8194, 8194, 8194, 8194}; + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(vEnSpaces, 5), getRun(xPara, 3)->getString()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("TextFieldEnd"), getProperty(getRun(xPara, 4), "TextPortionType")); + + // In the second paragraph we have a set text + const uno::Reference< text::XTextRange > xPara2 = getParagraph(2); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("TextFieldStart"), getProperty(getRun(xPara2, 1), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("TextFieldSeparator"), getProperty(getRun(xPara2, 2), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("Text"), getProperty(getRun(xPara2, 3), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("xxxxx"), getRun(xPara2, 3)->getString()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("TextFieldEnd"), getProperty(getRun(xPara2, 4), "TextPortionType")); + } +} + +void Test::testCheckBoxFormField() +{ + const OUString aFilterNames[] = { + "writer8", + "MS Word 97", + "Office Open XML Text", + }; + + for (const OUString& rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/checkbox_form_field.odt"), "com.sun.star.text.TextDocument"); + + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check the document after round trip + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess(); + + // We have two check box form fields + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(2), pMarkAccess->getAllMarksCount()); + + int nIndex = 0; + for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != pMarkAccess->getAllMarksEnd(); ++aIter) + { + ::sw::mark::IFieldmark* pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(*aIter); + + if(rFilterName == "Office Open XML Text") // OOXML import also generates bookmarks + { + if(!pFieldmark) + continue; + } + + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pFieldmark); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(ODF_FORMCHECKBOX), pFieldmark->GetFieldname()); + ::sw::mark::ICheckboxFieldmark* pCheckBox = dynamic_cast< ::sw::mark::ICheckboxFieldmark* >(pFieldmark); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pCheckBox); + + // The first one is unchecked, the other one is checked + if(nIndex == 0) + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), !pCheckBox->IsChecked()); + else + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pCheckBox->IsChecked()); + ++nIndex; + } + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), int(2), nIndex); + } +} + +void Test::testDropDownFormField() +{ + const OUString aFilterNames[] = { + "writer8", + "MS Word 97", + "Office Open XML Text", + }; + + for (const OUString& rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/dropdown_form_field.odt"), "com.sun.star.text.TextDocument"); + + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check the document after round trip + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(2), pMarkAccess->getAllMarksCount()); + + int nIndex = 0; + for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != pMarkAccess->getAllMarksEnd(); ++aIter) + { + ::sw::mark::IFieldmark* pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(*aIter); + + if(!pFieldmark) + continue; + + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pFieldmark); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(ODF_FORMDROPDOWN), pFieldmark->GetFieldname()); + + // Check drop down field's parameters. + const sw::mark::IFieldmark::parameter_map_t* const pParameters = pFieldmark->GetParameters(); + css::uno::Sequence vListEntries; + sal_Int32 nSelection = -1; + auto pListEntries = pParameters->find(ODF_FORMDROPDOWN_LISTENTRY); + if (pListEntries != pParameters->end()) + { + pListEntries->second >>= vListEntries; + + if(vListEntries.hasElements()) + { + auto pResult = pParameters->find(ODF_FORMDROPDOWN_RESULT); + if (pResult != pParameters->end()) + { + pResult->second >>= nSelection; + } + } + } + + // The first one is empty + if(nIndex == 0) + { + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), !vListEntries.hasElements()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(-1), nSelection); + } + else // The second one has list and also a selected item + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(4), vListEntries.getLength()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(1), nSelection); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("1000"), vListEntries[0]); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("2000"), vListEntries[1]); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("3000"), vListEntries[2]); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("4000"), vListEntries[3]); + } + ++nIndex; + } + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), int(2), nIndex); + } +} + +void Test::testDateFormField() +{ + const OUString aFilterNames[] = { + "writer8", + "Office Open XML Text", + }; + + for (const OUString& rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/date_form_field.odt"), "com.sun.star.text.TextDocument"); + + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check the document after round trip + if (rFilterName == "writer8") + { + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(5), pMarkAccess->getAllMarksCount()); + + int nIndex = 0; + for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != pMarkAccess->getAllMarksEnd(); ++aIter) + { + ::sw::mark::IDateFieldmark* pFieldmark = dynamic_cast<::sw::mark::IDateFieldmark*>(*aIter); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pFieldmark); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(ODF_FORMDATE), pFieldmark->GetFieldname()); + + // Check date form field's parameters. + const sw::mark::IFieldmark::parameter_map_t* const pParameters = pFieldmark->GetParameters(); + OUString sDateFormat; + auto pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT); + if (pResult != pParameters->end()) + { + pResult->second >>= sDateFormat; + } + + OUString sLang; + pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT_LANGUAGE); + if (pResult != pParameters->end()) + { + pResult->second >>= sLang; + } + + OUString sCurrentDate = pFieldmark->GetContent(); + + // The first one has the default field content + if(nIndex == 0) + { + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("MM/DD/YY"), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("en-US"), sLang); + sal_Unicode vEnSpaces[ODF_FORMFIELD_DEFAULT_LENGTH] = {8194, 8194, 8194, 8194, 8194}; + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(vEnSpaces, 5), sCurrentDate); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), SwNodeOffset(9), pFieldmark->GetMarkStart().nNode.GetIndex()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(5), pFieldmark->GetMarkStart().nContent.GetIndex()); + } + else if (nIndex == 1) // The second has the default format + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("MM/DD/YY"), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("en-US"), sLang); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("06/12/19"), sCurrentDate); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), SwNodeOffset(9), pFieldmark->GetMarkStart().nNode.GetIndex()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(20), pFieldmark->GetMarkStart().nContent.GetIndex()); + } + else if (nIndex == 2) // The third one has special format + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("[NatNum12 MMMM=abbreviation]YYYY\". \"MMMM D."), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("hu-HU"), sLang); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("2019. febr. 12."), sCurrentDate); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), SwNodeOffset(9), pFieldmark->GetMarkStart().nNode.GetIndex()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(40), pFieldmark->GetMarkStart().nContent.GetIndex()); + + } + else if (nIndex == 3) // The fourth one has placeholder text + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("D, MMM YY"), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("bm-ML"), sLang); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("[select date]"), sCurrentDate); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), SwNodeOffset(9), pFieldmark->GetMarkStart().nNode.GetIndex()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(62), pFieldmark->GetMarkStart().nContent.GetIndex()); + + } + else // The last one is really empty + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("MM/DD/YY"), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("en-US"), sLang); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(""), sCurrentDate); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), SwNodeOffset(9), pFieldmark->GetMarkStart().nNode.GetIndex()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(82), pFieldmark->GetMarkStart().nContent.GetIndex()); + + } + ++nIndex; + } + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), int(5), nIndex); + } + else + { + // Import from DOCX, so the fieldmark is now a content control. + uno::Reference xEnumAccess(getParagraph(1), uno::UNO_QUERY); + uno::Reference xTextPortions = xEnumAccess->createEnumeration(); + + int nIndex = 0; + while (xTextPortions->hasMoreElements()) + { + uno::Reference xTextPortion(xTextPortions->nextElement(), uno::UNO_QUERY); + OUString aPortionType; + xTextPortion->getPropertyValue("TextPortionType") >>= aPortionType; + if (aPortionType != "ContentControl") + { + continue; + } + + uno::Reference xContentControl; + xTextPortion->getPropertyValue("ContentControl") >>= xContentControl; + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + + bool bDate{}; + xContentControlProps->getPropertyValue("Date") >>= bDate; + CPPUNIT_ASSERT(bDate); + + // Check date form field's parameters. + OUString sDateFormat; + xContentControlProps->getPropertyValue("DateFormat") >>= sDateFormat; + + OUString sLang; + xContentControlProps->getPropertyValue("DateLanguage") >>= sLang; + + uno::Reference xContentControlEnumAccess(xContentControl, + uno::UNO_QUERY); + uno::Reference xContentControlEnum + = xContentControlEnumAccess->createEnumeration(); + uno::Reference xContentControlTextPortion(xContentControlEnum->nextElement(), uno::UNO_QUERY); + OUString sCurrentDate = xContentControlTextPortion->getString(); + + // The first one has the default field content + if(nIndex == 0) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("MM/DD/YY"), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("en-US"), sLang); + sal_Unicode vEnSpaces[ODF_FORMFIELD_DEFAULT_LENGTH] = {8194, 8194, 8194, 8194, 8194}; + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(vEnSpaces, 5), sCurrentDate); + } + else if (nIndex == 1) // The second has the default format + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("MM/DD/YY"), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("en-US"), sLang); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("06/12/19"), sCurrentDate); + } + else if (nIndex == 2) // The third one has special format + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("[NatNum12 MMMM=abbreviation]YYYY\". \"MMMM D."), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("hu-HU"), sLang); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("2019. febr. 12."), sCurrentDate); + } + else if (nIndex == 3) // The fourth one has placeholder text + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("D, MMM YY"), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("bm-ML"), sLang); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("[select date]"), sCurrentDate); + } + else // The last one is really empty + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("MM/DD/YY"), sDateFormat); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("en-US"), sLang); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(""), sCurrentDate); + } + ++nIndex; + } + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), int(5), nIndex); + } + } +} + +void Test::testDateFormFieldCharacterFormatting() +{ + const OUString aFilterNames[] = { + "writer8", + "Office Open XML Text", + }; + + for (const OUString& rFilterName : aFilterNames) + { + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/extras/globalfilter/data/date_form_field_char_formatting.odt"), "com.sun.star.text.TextDocument"); + + const OString sFailedMessage = OString::Concat("Failed on filter: ") + rFilterName.toUtf8(); + + // Export the document and import again for a check + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= rFilterName; + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY); + xComponent->dispose(); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument"); + + // Check the document after round trip + if (rFilterName == "writer8") + { + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess(); + + // Check that we have the field at the right place + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(1), pMarkAccess->getAllMarksCount()); + ::sw::mark::IDateFieldmark* pFieldmark = dynamic_cast<::sw::mark::IDateFieldmark*>(*pMarkAccess->getAllMarksBegin()); + CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pFieldmark); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(ODF_FORMDATE), pFieldmark->GetFieldname()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(0), pFieldmark->GetMarkStart().nContent.GetIndex()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(11), pFieldmark->GetMarkEnd().nContent.GetIndex()); + + // We have one date field, first half of the field has bold character weight and second part has red character color + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), awt::FontWeight::BOLD, getProperty(getRun(getParagraph(1), 3), "CharWeight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_AUTO, getProperty(getRun(getParagraph(1), 3), "CharColor")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), awt::FontWeight::NORMAL, getProperty(getRun(getParagraph(1), 4), "CharWeight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), Color(0xff0000), getProperty(getRun(getParagraph(1), 4), "CharColor")); + } + else + { + uno::Reference xTextPortion(getRun(getParagraph(1), 1), uno::UNO_QUERY); + OUString aPortionType; + xTextPortion->getPropertyValue("TextPortionType") >>= aPortionType; + CPPUNIT_ASSERT_EQUAL(OUString("ContentControl"), aPortionType); + + uno::Reference xContentControl; + xTextPortion->getPropertyValue("ContentControl") >>= xContentControl; + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + bool bDate{}; + xContentControlProps->getPropertyValue("Date") >>= bDate; + CPPUNIT_ASSERT(bDate); + + uno::Reference xContentControlEnumAccess(xContentControl, + uno::UNO_QUERY); + uno::Reference xContentControlEnum + = xContentControlEnumAccess->createEnumeration(); + xTextPortion.set(xContentControlEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), awt::FontWeight::BOLD, getProperty(xTextPortion, "CharWeight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), COL_AUTO, getProperty(xTextPortion, "CharColor")); + xTextPortion.set(xContentControlEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), awt::FontWeight::NORMAL, getProperty(xTextPortion, "CharWeight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), Color(0xff0000), getProperty(xTextPortion, "CharColor")); + } + } +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/htmlexport/data/HTMLImage.odt b/sw/qa/extras/htmlexport/data/HTMLImage.odt new file mode 100644 index 000000000..c938c3fd9 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/HTMLImage.odt differ diff --git a/sw/qa/extras/htmlexport/data/charborder.odt b/sw/qa/extras/htmlexport/data/charborder.odt new file mode 100644 index 000000000..e9667b2da Binary files /dev/null and b/sw/qa/extras/htmlexport/data/charborder.odt differ diff --git a/sw/qa/extras/htmlexport/data/checkbox-radiobutton.doc b/sw/qa/extras/htmlexport/data/checkbox-radiobutton.doc new file mode 100644 index 000000000..17162a410 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/checkbox-radiobutton.doc differ diff --git a/sw/qa/extras/htmlexport/data/clearing-break.html b/sw/qa/extras/htmlexport/data/clearing-break.html new file mode 100644 index 000000000..9586cb3af --- /dev/null +++ b/sw/qa/extras/htmlexport/data/clearing-break.html @@ -0,0 +1,8 @@ + + + +

+ +foo
bar

+ + diff --git a/sw/qa/extras/htmlexport/data/extb.html b/sw/qa/extras/htmlexport/data/extb.html new file mode 100644 index 000000000..be73feadf --- /dev/null +++ b/sw/qa/extras/htmlexport/data/extb.html @@ -0,0 +1,10 @@ + + + + + + +

𤭢

+

𤭢

+ + diff --git a/sw/qa/extras/htmlexport/data/fdo62336.docx b/sw/qa/extras/htmlexport/data/fdo62336.docx new file mode 100644 index 000000000..f14a0e001 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/fdo62336.docx differ diff --git a/sw/qa/extras/htmlexport/data/fdo81276.html b/sw/qa/extras/htmlexport/data/fdo81276.html new file mode 100644 index 000000000..653f6b182 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/fdo81276.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/sw/qa/extras/htmlexport/data/fdo86857.html b/sw/qa/extras/htmlexport/data/fdo86857.html new file mode 100644 index 000000000..dc1fd8886 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/fdo86857.html @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + +
+


+ +

+
+


+ +

+ + diff --git a/sw/qa/extras/htmlexport/data/field-shade-reqif.odt b/sw/qa/extras/htmlexport/data/field-shade-reqif.odt new file mode 100644 index 000000000..be7ec90f5 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/field-shade-reqif.odt differ diff --git a/sw/qa/extras/htmlexport/data/field-shade.odt b/sw/qa/extras/htmlexport/data/field-shade.odt new file mode 100644 index 000000000..2533be68c Binary files /dev/null and b/sw/qa/extras/htmlexport/data/field-shade.odt differ diff --git a/sw/qa/extras/htmlexport/data/hello.html b/sw/qa/extras/htmlexport/data/hello.html new file mode 100644 index 000000000..bc4180d17 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/hello.html @@ -0,0 +1,8 @@ + + + + Title of document + + hello world + diff --git a/sw/qa/extras/htmlexport/data/list.html b/sw/qa/extras/htmlexport/data/list.html new file mode 100644 index 000000000..867521155 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/list.html @@ -0,0 +1,4 @@ +
    +
  • foo
  • +
  • bar
  • +
diff --git a/sw/qa/extras/htmlexport/data/no-ole2-pres-data.odt b/sw/qa/extras/htmlexport/data/no-ole2-pres-data.odt new file mode 100644 index 000000000..cd65a1755 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/no-ole2-pres-data.odt differ diff --git a/sw/qa/extras/htmlexport/data/ole1-pres-data-wmf.odt b/sw/qa/extras/htmlexport/data/ole1-pres-data-wmf.odt new file mode 100644 index 000000000..9bcca729b Binary files /dev/null and b/sw/qa/extras/htmlexport/data/ole1-pres-data-wmf.odt differ diff --git a/sw/qa/extras/htmlexport/data/ole2.odt b/sw/qa/extras/htmlexport/data/ole2.odt new file mode 100644 index 000000000..a10cfbb5b Binary files /dev/null and b/sw/qa/extras/htmlexport/data/ole2.odt differ diff --git a/sw/qa/extras/htmlexport/data/ole2.ole b/sw/qa/extras/htmlexport/data/ole2.ole new file mode 100644 index 000000000..96407e88f --- /dev/null +++ b/sw/qa/extras/htmlexport/data/ole2.ole @@ -0,0 +1,1014 @@ +{\object\objemb{\*\objclass PowerPoint.Show.12}\objw10020\objh5638{\*\objdata +01050000 +02000000 +13000000 +506f776572506f696e742e53686f772e313200 +00000000 +00000000 +00940000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000 +0000000000010000000100000000000000001000000200000001000000feffffff000000000000 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffdffffff47000000feffffff48000000050000000600000007000000080000000900 +00000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013 +0000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 +1d0000001e0000001f000000200000002100000022000000230000002400000025000000260000 +002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000 +00003100000032000000330000003400000035000000360000003700000038000000390000003a +0000003b0000003c0000003d0000003e0000003f00000040000000410000004200000043000000 +440000004500000046000000fefffffffefffffffeffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000016000500 +ffffffffffffffff02000000f4554fcf878f474d80bb5808164bb3f80000000000000000000000 +0080609bf8f8bcd30103000000000300000000000001004f006c00650000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000a000201ffffffffffffffffffffffff00000000000000000000000000000000 +00000000000000000000000000000000000000000000000014000000000000005000610063006b +006100670065000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000100002010100000004000000ffffffff0000000000 +000000000000000000000000000000000000000000000000000000000000000400000056840000 +00000000010043006f006d0070004f0062006a0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000012000200ffffffffffff +ffffffffffff000000000000000000000000000000000000000000000000000000000000000000 +000000010000007c00000000000000feffffff02000000feffffff040000000500000006000000 +0700000008000000090000000a000000fefffffffeffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff01000002000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000100feff030a0000fffffffff4554fcf878f474d80bb5808164bb3f8220000004d +6963726f736f667420506f776572506f696e742d5072e473656e746174696f6e000f0000004d53 +50726573656e746174696f6e0013000000506f776572506f696e742e53686f772e313200f439b2 +7100000000000000000000000000000000ffffffff030000000400000001000000ffffffff0200 +0000000000000a450000d8260000ba010000010009000003dd0000000600120000000000040000 +0003010800050000000b0200000000050000000c02cf08a80f030000001e0007000000fc020000 +ffffff000000040000002d01000008000000fa02050000000000ffffff00040000002d0101000e +00000024030500ffffffffffffcf08a80fcf08a80fffffffffffff08000000fa02000000000000 +00000000040000002d01020007000000fc020000ffffff000000040000002d01030004000000f0 +01000007000000fc0200004472c4000000040000002d0100000400000006010100040000002d01 +0100120000002403070065026a03e4086a03e408af025a0a2504e4089b05e408e0046502e00404 +0000002d0102000400000006010100040000002d0103000800504b030414000600080000002100 +dfcc18f5ad010000460c0000130008025b436f6e74656e745f54797065735d2e786d6c20a20402 +28a000020000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000cc975b4fc23014c7df4dfc0e4b5f0d2ba0221a060f5e9ebc90881fa06e07 +a8766dd316846fefd90582849b02b12f4bcecef9ffcfaf6bb776adce2415c1188ce54a46a41656 +4900325609978388bcf51e2a4d1258c764c2849210912958d2699f9eb47a530d3640b5b411193a +a76f28b5f110526643a54162a6af4cca1c866640358b3fd90068bd5a6dd0584907d2555ce641da +ad3be8b39170c1fd046f17241f1a0624b82d0ab35e11e169669027e84a8d016197344c6bc163e6 +304fc7325922ab9454212af31a3be4da9e61c19a0e59667d8352f7828fd3f004822e33ee99a558 +45b576541bb0a8cb6bc3cd4e2b5055bfcf6348543c4a51122e9aa5e24718a68ccbd920d6c15881 +379f987538f58b41edd0640bde3b319534c7e1d8469069ba46697b8cf9c98db7118c397c1d8560 +6ebc8dc0e13b0cc575ff49c86db67664ef025edd54c0c147bd60bdd3ea7b64533572e51a2c82e3 +acc4c2fbaf4c750f99ce3d64baf090e9d243a686874c571e32353d64baf690a956f511eabfbee4 +28cf775e3cf71af83dc3ec909aa92b1a8dc038be793f9b7744ebbd070dd9f9378164456f9aff05 +b4bf010000ffff0300504b03041400060008000000210068f874a103010000e20200000b000802 +5f72656c732f2e72656c7320a2040228a000020000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000ac92db4a03311086ef05df21cc7d37 +db2a22d26c6f44e89dc8fa006332bb1bdd1c48a6d2bebda1e061612d82bdcccc3f1fdf24596ff6 +6e14ef94b20d5ec1b2aa4190d7c158df2b786e1f16b72032a33738064f0a0e9461d35c5eac9f68 +442e4379b0318b42f159c1c01cefa4cc7a2087b90a917ce9742139e4724cbd8ca8dfb027b9aaeb +1b997e32a09930c5d628485b7305a23d44fa1f5b3a6234c8287548b488a94c27b66517d162ea89 +1598a01f4b391f135521839c175a9d5788879d7bf168c71995af5ef51aa9ff4d68f977a1d07556 +d37dd03b479ee7bca6896fa71859c644b9148fe95337747d4e21da337943e6f4a3618c9f4672f2 +339b0f000000ffff0300504b030414000600080000002100635c23b4c000000037010000200000 +007070742f736c696465732f5f72656c732f736c696465312e786d6c2e72656c738ccfbd6ac330 +1007f03dd07710b757b23b84102c65290543a7903ec0219d6d515b123ab9c46f1f8d3174c8785f +bf3fd75deecb2cfe28b38f41432b1b10146c743e8c1a7e6e5fef27105c30389c63200d1b315ccc +dba1bbd28ca51ef1e4138baa04d6309592ce4ab19d6841963151a89321e6054b2df3a812da5f1c +497d34cd51e56703ccce14bdd3907bd782b86d895eb1e330784b9fd1ae0b85f24f84e2d93bfac6 +2daea5b298472a1aa47ceeef965a592340994eedde350f000000ffff0300504b03041400060008 +00000021001b2e35070c010000d00300001f0008017070742f5f72656c732f70726573656e7461 +74696f6e2e786d6c2e72656c7320a2040128a00001000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000ac93414ec3301045f748dcc19a3d7152a042a84e3708a90b2404e100269924168e6d79 +4c21b7c76aa12455157591e5fff6fc799ab157ebef4eb32d7a52d608c89214189ad256ca3402de +8ac7ab3b6014a4a9a4b60605f448b0ce2f2f562fa8658845d42a472ca61812d086e0ee39a7b2c5 +4e52621d9a78525bdfc910a56fb893e5876c902fd274c9fd3003f25126db5402fca6ba0656f40e +cfc9b675ad4a7cb0e56787269c68c19d477af636366385f40d0601072b8969c04f432ce68420ad +2afc07d8c95f379b82c86687789214d01fa1eccdd18d49ace59c5841be6b7c0dbdc6c18a06e614 +c8edac20b176b0a49ddc9b93c3b8999361abf0ebe8b51eac3f083efa87f90f000000ffff030050 +4b030414000600080000002100bcd1a735de0200002c0e0000140000007070742f70726573656e +746174696f6e2e786d6cec97cd6fda3014c0ef93f63f44be4e34385f0444a86034d3a44e42a5bb +ece62606a23a71641b0a9df6bfefd97120a59ad4c38e3961fb7dfae7a7f0def4f65832e740852c +7895207c33440ead329e17d536413f1fd3418c1ca9489513c62b9aa01395e876f6f9d3b49ed482 +4a5a29a2c0d40137959c9004ed94aa27ae2bb31d2d89bce135ad40b6e1a2240ab662ebe682bc80 +fb92b9de7018b925292a64edc547ecf966536474c9b37d09e11b2782329387dc15b56cbdd51ff1 +d6bdc5db94241500e617e76582c2211e8670440e74bd7f9254a5bc521280a11990902cff41a4a2 +e27b7e2fd5d58953e409f270300a623f0a00a798e8139060e4cea6ee3fccdfae1b2761d4b1f62e +d65dddf5ab931d21310f8fe12ef09cd92941511cc67ae36aa58a2b2aad5a2b305a631c0467ad9c +6ec89ea9477a546b7562743625fa6cb51276f5b0120e23ba4c723a58de996cba2aecc0700d3a25 +11f7098210846da1c4187240e7913cad5fdb887029c58c0a25f7d5423c6bae8e7ed0ca6e41b483 +505035ab7d95a986fb390b099e70acfd3c53a1ab182e6ee492b3224f0bc6cc46d700fdca847320 +104d1d1bfc575a26aaa34e355c3f837aff525603a6b42699507225a0a41164f24a90c90b8e078d +c33df3b068bc0b9a201ce9847b3e068ae5e35ff8b4107a3e1a8ae5135cf8607f84a31e504bc502 +0a3b80622f36d9f78034150b28ba00f2bc3832ff023d204dc5021a75008d02bfff469fa95840f1 +0590a6d37fa4cf542ca0710750148efa8ff4998ae95cdfb798f504d6b6978595b31745827edfa5 +f374e1f9fe6018f9e920f016e120863fbdc17899fa698817733c9cffd18d380e7507fc6d5fe414 +9cb453000edfcd016591092ef946dd64bcb403855bf3172a6a5e9899027bcd14d078dd6a97a607 +8727e1a28081017c72f18a9c9a4bddde47c07d0f13c312861b0ddf1a66ccd48214dba733f37930 +f7e741d3bdb72a6665a25c07f46c083f0efe5f08b3eea032cf01c0dbdff6a83b1ccdfe020000ff +ff0300504b030414000600080000002100303a84e5ea0200006c060000150000007070742f736c +696465732f736c696465312e786d6c8c545b6f9b30147e9fb4ff8078a75c020450691548a8266d +6bd4763fc033262019dbb2dd3451b5ff3edb98a45d23ad3c707c39dfb97ce71c5fdf1e46ecec11 +170325a51b5e05ae8308a4ed4076a5fbeba9f132d711129016604a50e91e91706f6fbe7eb96685 +c0ada3d04414a0747b2959e1fb02f66804e28a3244d45d47f908a4daf29ddf72f0a2ac8ed88f82 +20f5473010d7e2f967f0b4eb0688d6143e8f88c8c90847184815b9e80726666bec33d618474299 +31e87721dda8cce0236eb514ec8923a457647fc7d923db7273fd73bfe5ced02abe5c878051d1e2 +faf6c2aa992dd99b85ff0f7c372f4171e8f8a8a5cacd3994ae22ffa8ffbe3e4307e9c0e9109e4f +617f7f4117f69b0bdafeecc07fe354673505f7319d784e67dba101176a037b8723d84be12c5c1b +d47721e7f09ef950baaf4d1355c9a689bd46adbc38a862afdac4b9d7448b6c132d9b3a5aa47f34 +3a4c0bc891a1fcdba975c2f443b9c601722a6827af201d6ddde7f651950a63db3c3ae4d764d934 +6114575e1ed7991757e9dacb56abdc5b6749be08f3661584eb3f960d15f32c4d16be4ddeb270b1 +7067d62e962cccd2348c22538c28c8832059be2f5f1ae649122da7b244d1324d97ef8b030ac685 +bc437474f4a274f9b0ebe58a73fa6228077b15eb0498154d6853404aca23465a119307d4295294 +d3c8200d9fa8c6dcd9035cba0042d5f1e174d583164dc749a03e1bd1096176c6a0d6ee068c4fb6 +ad81cbb6273356dfd0d07508ca1338f83ff884309e293983c781507ec9003e7b9ef42782266258 +210f156d8f1af75b49d5eb5ce29a62332c80c09eaaf7074a3ed50d0bf9a88166c3cc4f2100de91 +374a88b45bc0c183bac140bf942df2d61b1b0333de67a7a65256ccafc9dc7f6665a7a8aaf234aa +b3caabc2b8f1e275bef4564d9a784db288e3baca56f562a3a78885f1c72952879f9b22465f1067 +74300f6818d841322486e922cbb3659447260f13db2c4fd3621f4688f90fc0eef7662294338978 +6d8e981ed149f5aca27357b8bf000000ffff0300504b030414000600080000002100d5d192f1bc +000000370100002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c696465 +4c61796f7574362e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c1 +45f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609d +ef35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d8 +0c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23 +fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ec +ddf6030000ffff0300504b030414000600080000002100d5d192f1bc000000370100002c000000 +7070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574372e786d6c +2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2 +e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416 +c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284 +b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2 +f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b +030414000600080000002100d5d192f1bc000000370100002c0000007070742f736c6964654c61 +796f7574732f5f72656c732f736c6964654c61796f7574392e786d6c2e72656c738ccfbd0ac230 +1007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5c +b37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c +68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaa +daa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85 +c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b0304140006000800000021 +00d5d192f1bc000000370100002d0000007070742f736c6964654c61796f7574732f5f72656c73 +2f736c6964654c61796f757431302e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad +8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc86 +5a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c +6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a +48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654 +cb1201aa6dd4ecddf6030000ffff0300504b030414000600080000002100d5d192f1bc00000037 +0100002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f +7574382e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018e +e4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcae +c7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb +10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae +73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf60300 +00ffff0300504b030414000600080000002100d5d192f1bc000000370100002d0000007070742f +736c6964654c61796f7574732f5f72656c732f736c6964654c61796f757431312e786d6c2e7265 +6c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9b +d18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049 +c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a9 +5711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784 +e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b030414 +000600080000002100d5d192f1bc000000370100002c0000007070742f736c6964654c61796f75 +74732f5f72656c732f736c6964654c61796f7574312e786d6c2e72656c738ccfbd0ac2301007f0 +5df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4d +a378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c +8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f4 +6d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453 +d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b030414000600080000002100d5d1 +92f1bc000000370100002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c +6964654c61796f7574322e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad83883475 +11c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c8 +9b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e +3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83 +b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa +6dd4ecddf6030000ffff0300504b030414000600080000002100d5d192f1bc000000370100002c +0000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574332e +786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db +24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d51604 +67f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c99749 +17d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec1 +3c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff03 +00504b030414000600080000002100d5d192f1bc000000370100002c0000007070742f736c6964 +654c61796f7574732f5f72656c732f736c6964654c61796f7574342e786d6c2e72656c738ccfbd +0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37d +fdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed +72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b +52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23 +674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b0304140006000800 +0000210069a25f2115010000c70700002c0000007070742f736c6964654d6173746572732f5f72 +656c732f736c6964654d6173746572312e786d6c2e72656c73c4d54d6ac3301005e07da17730b3 +8f253b899394c8d98442a0ab921e4058e31f6a4b46524a7dfb8a96420c616821a08dc092f5e6e3 +6db43f7c0e7df281d675460bc8520e09eacaa84e3702dececf8b2d24ce4bad646f340a98d0c1a1 +7c7cd8bf622f7db8e4da6e744948d14e40ebfdf8c498ab5a1ca44bcd883a9cd4c60ed2874fdbb0 +5156efb24196735e307b9d01e52c33392901f6a4c2fcf334e25fb24d5d77151e4d751950fb1b23 +98eb3b852f7232171f62a56dd00b48d3ebfdd94fdb348c00765bb68c295b52b24d4cd9869265f9 +3d693edcc519ea7be767cd28c75d19ff6d28271b8a29233b2b62ca0ab2b3b8a591adad63d2d664 +6b3c6a6b9cb2ad62d256946c1753b6fb95b1d9f35b7e010000ffff0300504b0304140006000800 +00002100e40b4c2ac604000089100000220000007070742f736c6964654c61796f7574732f736c +6964654c61796f757431312e786d6ccc58cd6edc3610be17e83b08bad32b891425195907fa6351 +347fa8dd1c7aa325ae5788fe4a71d7eb0401f2267d8e16bde54df2241d52929dd88eb32ee2c297 +2545cd0c67e6fb6648ed93a7bba6b6b6420e55d72e6df7c0b12dd1165d59b5674bfbb7138642db +1a146f4b5e77ad58da1762b09f1efdf8c393fe70a8cb67fca2db280b6cb4c3215fda6ba5fac3c5 +6228d6a2e1c341d78b16dead3ad970058ff26c514a7e0eb69b7ae1390e5d34bc6aed495feea3df +ad565521b2aed834a255a311296aaec0ff615df5c36caddfc75a2fc500668cf6972ea98b1ea285 +c4a8934ad5226ecb939d6d1979b98537ae7d0429288eebd26a79030baf41b47ac36b212dd010b5 +b5694beb44ec94111cfa1329849eb5db9f647fdcbf9246ffc5f695b4aa52db9becd88be9c52466 +1edbad992caea99fcd537eb85bc9468f901f6bb7b401c60bfdbbd06be084558c8bc5d56ab17e79 +8b6cb1ce6f915ecc1b2c3edb5447353a77331c6f0ee7465a74e28c4bcf06353bb791d5d27ec798 +97f8392388c10c11272128c949849887c3dc0b58ea61fa5e6bbbf4b090c280f6733993cfa53700 +6faa427643b7520745d74ccc99090858bb64c25a3bfc2e49a893e718a3d48942447c3f80dd4307 +2549c26246589e90e8fd940bf0791e4d148b29f42907332643ffac2bde0c56db01661ae211c24b +8911573df6eb89704a93cdb63a59012d47fe4d5aa3a8995ca5ff56ecc3c0239133a28aa9ef7afe +9734f0a8179af71a5e3f74dd1087d7411e4df7876a9774e585d63e8511c0d51e2d6dc135aea3d9 +7a50c7eaa216e6a1d73fc62909c235d75da41428cb475975644800e02821c742b4ca8d2cd6d62f +7555bc11ad752ab83c1520d46a7fc634ebb88de9c59543c6c7bb39886fe32024a1876ef176cd6b +70c1f21e291be38826cc0b33045b1244282528a629450e8bfc284fc23cc0dec3b351637e8d8ce0 +deee4af91ea4c4a1770727830013fc909cec351db7f5659fbb8ba3cc1073dbc99a9f01254b3118 +de8cac1deea6e8f5ed4ca6eedeeef7736dccca4f452bf6b0e87ddb62262b750f8bf8db165f5790 +dbfd2d923d92fcf19f767587c9fbd53a996b3de36ad30c9f97387ea4259e666114504c118b0894 +789445fac04911893d97b931ce823c7cf8122fa1a487b71009af5773718f47fe57abdbdc48ae17 +e157ca6e05f723136d84532fa5094638600c8e5716a128f04284d32866414cf28092f7f3b5abe4 +4aa8aa11ac3adb48f172a3ef503789640d8d4a6bc1dbcba256472e3d70f001a43abca214f86070 +6fcb575cf25f6fd2f1bf10ce9f09c7361fff7c2baa5ab49f938e3c52d279d4f1fc380a80740945 +2488139464b18fa2344e1d9f26b193e38727dd4ac991757f6c38b4153913ef1bc7ca7d88f77dd1 +a6976877351c86eda66984fc0270ff91021ea42427d4c5507211f4962c0851eca439f29d308949 +18f971fc3f7419f8547cb1696ec5dc1c67dfb9d9647916d09cf928a53882d6ca729478598a9893 +7b21a3ccf7dde8b2d90c75550a4074ef1ef3e9c35f2fe4c1a70f7f7f87166386f9d370cebb994d +ec4992887a690865ea12e89b19946ecca88f988f094993304e71aed9d3bbe4267b60713ff6f4dd +b9907d57992f6ad79908b4e5fa02e37b0e76b0e79a337d617c9bc74b961cebf861ace573debfdc +1a9a8cd7a5d42cf59a9aa3e895888e7dfe0be1e85f000000ffff0300504b030414000600080000 +002100ee0bf3bf90040000a70f0000220000007070742f736c6964654c61796f7574732f736c69 +64654c61796f757431302e786d6ccc57db6edc36107d2fd07f10f44eeb46dd8cac03dd5814756c +a376f3d0375ae27a85e8568abbde7560207fd2ef68d1b7fc49bea4434af2dab1e3ac031bf08b78 +d1703833e7cc907cf3765d57da8af1be6c9b996eed99bac69abc2dcae662a6ff714650a06bbda0 +4d41abb661337dc37afdedc1cf3fbde9f6fbaa38a49b762934d0d1f4fb74a62f84e8f60da3cf17 +aca6fd5edbb106fecd5b5e5301437e61149c5e82eeba326cd3f48c9a968d3eaee7bbac6fe7f332 +67699b2f6bd6884109671515607fbf28bb7ed2d6eda2ade3ac07356af55d93c4a6036f2130e26c +ad6b4a8eaf60c6d20fc0f5fcb42ab486d63071560a5669cba6905114e5075a31ae9db1b550827d +77c61993bd66f50bef4ebb13aed61fad4eb8561652dfa84737c61fa3981a362bd531be5a7e3175 +e9fe7ace6bd9425cb4f54c07f836f26bc8393042cb87c97c3b9b2f8e1f90cd17d903d2c6b48171 +6b53e9d560dc7d77ecc99d212c325aca8ec35e4c162d7939d33f1262c76e463022d043d88c318a +331c22623b4166fb24b11def5aaeb6bcfd9c3385d0afc5c434cbbb876e5de6bceddbb9d8cbdb7a +a4c9c43600d6c223b0d2ca8fb66f054eeac7c8719308e130b550ec3a094adcccc38e935a76985e +8f01009ba75679618cfe8e8e4f40f4dd619b7fe8b5a605a024ae036e37120398b2ed1623bb4429 +2a36ca0d3f55671be59105621db7c5466e720ead9aa4fb552f4ec5a6626ad0c98f328303101595 +c95b30946603b8e240c10161128c0ffcd78a25cf17da6f55997f608d76ce283f6720d448570787 +a53d4ab5b135c198c0ff36059c8902efefe64307497ab5a01598a0d9af941709f6dc08c71e0a92 +087627568a02270e8126416aa659e4e1d07c795e489475ade52594a6a10649f3d6dbc54f218b2a +4b339d5109c74087fbd4e9246b56d54d35788c4a44f167d5f28a5e00730ad62b780772f58f33e9 +ebed94438f6ff7e7a554a665e7ac613b68b4bfaf31e5a5788246e7fb1adf9710dbdd35e21d82fc +f9bf66fe88caa7a5249e5232a56259f7b733d179a59988bdd8c4212128b47c13e12c345140c004 +171333b49dcc37c3f0e533b180ccebafc0135acda71c1c0ec667a9d873b845286f4327b1132f76 +90e383cbd825210a7d3b404e1246c48f70e67bf87aba9414543051d68c94174bce8e97f2a6719f +485a5f8ba462b4b9496a7160797ba6b307a10eb694021b14ee4d714239fdfd3e1d7f8470ee4438 +b2fcfcf7152b2bd6dc261d7ea5a48b82308a039220df8b2c84831443f9771d04fbc6b11d618f44 +d6cb936e2ef8c0babf9614ca0a9f88f723d5ff1bc47b5eb4bd1bb4db0aceac6659d78cdf01dc7d +a580a72ea45ae8c6c8f28300cefbcc44a1094327c9029bc4a1ac412f0f383ca48e96f58398abe3 +ec998b4d9aa5be971117259e13c2e5976428b6d3041133b303e211d7b5c29b62d35765c100d19d +6bcc974fff1cf1bd2f9ffe7d8612a39ae90135c55df546f6c471e8d94910a3d8c25037d3d04711 +f15c445c07e3240ea2c4c9247b3a0bdf670f4ceec69eaebd64bc6b4bf5deb4cc91402b2a2f07be +6b390176436f046a60c9d65a09fda9f41fda8abfa3ddf14ad164b82e256aaa93d41c44b722d2f7 +e9817df03f000000ffff0300504b0304140006000800000021005a9d3795690500006715000021 +0000007070742f736c6964654c61796f7574732f736c6964654c61796f7574332e786d6ccc58dd +6edb3614be1fb077103460778c259212a9ac4ea13f6ec3b2b458ba0750243a16aabf51b4eba428 +d037d9736cd85ddfa44f3292926ca749336f6b82dc98147578f89df37da40efdecf9a6aeac3517 +7dd93673db3d726c8b37795b94cde5dcfef51503d4b67a99354556b50d9fdb57bcb79f9f7cfdd5 +b3eeb8af8ad3ecaa5d494bf968fae36c6e2fa5ec8e67b33e5ff23aeb8fda8e37eadda2157526d5 +a3b89c15227ba37cd7d50c3a8e3fabb3b2b1c7f9e290f9ed6251e63c69f355cd1b393811bccaa4 +c2df2fcbae9fbc758778eb04ef951b33fb262479d5a9687b9effc0b3c2b68ca158ab21d73e51b1 +e7e755613559ad06c20bb540534ad9836fbfd984df7df8eb42a5335f8a72218d6ddfbd129ceb5e +b3fe5e74e7dd4b615c9cad5f0aab2cb4cbd1953d1b5f8c66e6b1599bceec93e99753373bde2c44 +ad5b951b6b33b7158557fa77a6c7f8465af93098ef46f3e58b3b6cf3657a87f56c5a60b6b7a88e +6a00773b1c3885f3aa94bcb274c20c8ed35e4e8856a29cdb6f19839197320c98ea01ec44184429 +0e008388a690b01822ff9d9eedfac7b9e086a51f8b496dae7f8be1bacc45dbb70b7994b7f52895 +49718a5c178fe46a946f03274843c808086948010e68080296ba2075621c45288e100edf8d0950 +98a7d644311be31d039f88e8bbd3367fdd5b4dab88d2bc0ebc6d2d063275db2d4785c952567cb4 +1b5e9ace2ecb77524c914bbd813b97380141f426dbaee3b99eef8c3442ea4182c8a7640ebebb63 +b989dae24a4fbf50ad22316bf265ab76e3c5e0b4eae5b9bcaab8e9af2b778454f0c52fcab8bf9e +db6aa5492a5b03dddf9bd8e91f334fa84955a68f978283241dd69027462c8a44c9c5b043ad6225 +f2a5f55355e6af79635df04c5c7065d468d7031dc3329d89668ac20476bf40d156a02a5f9d3a3b +ae9759a5d6b5e013952a8b13163a29017e922025558f8288520248801d88433f42943dbc54b53a +3420adafffa358ecd100fbe83ec5ba9ee3b8f460c57e4ea6569d8953739a954da1ce79dd35b356 +67ea636666eda918626778ddb75559b0b2aacc83268cc795b0d659a5f6eb6638cf64d9c8618478 +3bf56f8d87a79d9fd9b4d2cd4d62ba7087147b04ea1c1c04572ffb587035c6112edac10d5cac73 +76105c973e225c8d71848b77705d445c23b183f06acbc7c2ab418e78bd3dbc14529db5a7875783 +1cf1fa3bbc1052f325787a7835c8112fd9c34b303a78bb3d2a5e0d72c44b777835d8c3f7db63e2 +d52047bcc11e5edf234f73bf69907797281abd32d8d6c4f7952cccd429eb5654d9a5aa500ade5b +baa2188a98fe4b562c78aa58924caeea7ebf66414fb466a129f63c184090f8240618c708049051 +405ce27a8cc42c26f1c3d72c85b48dba54b21653ed32c8e5b3c58bb974dd5b619807a39685ba05 +0e970914c358d5610011c600f658000202294071103212e294f8f8dd74ab2c32c9655973565eae +047fb1d2d7c4db22b3fa5ac615cf9aad16e589eb1f39e848a59aee24a53018de9be2652632bd9d +3e91ea7f119c37098ead3efc7ecdcb8a37fba2c34f55743e4969e0b8c0f1824415ca410828a38a +15e4e3044192423f7878d12da41854f7db2a132a5d93f0fea16afe37c2fbb26cfb5bb6d599c99b +6655d75cdc20dc7ba284c328f270927a2056ab011cba0e0854110d62c7f5a0e3d3d071d0c313de +57c5d9aabe9373f800874d9226c44f990ada478152394b4104931830278594f9ccf3dc607bd8f4 +ea2bc815a3079f311fdfff71268e3ebefff30b1c31a699fefd9af26e7aa37aa228f0614c2310b9 +589d9b494040c87c0f300fa94f4644c318a55a3d9d8b6fab470d1ea69eae7dc345d796e60f43d7 +190564ea079fb808a99be744f320921d58cdfcb90e5fb595f839eb5eac8d4a868f7c6c863aadcc +c17467a2439ffe203df91b0000ffff0300504b0304140006000800000021008f55c3fd73040000 +6b0f0000210000007070742f736c6964654c61796f7574732f736c6964654c61796f7574322e78 +6d6ccc97cb6ee3361486f705fa0e82f6b42ea46ec63803dd580c9a26419376d11d23d1b13aba95 +a21c3b8300f3267d8e16ddcd9bcc9394a4a4783249334ee100d998147578780effefd0d49bb79b +aad4d6947545532f746b66ea1aadb3262feaab85fecb0506beae759cd439299b9a2ef42dedf4b7 +47df7ff7a69d77657e4cb64dcf35e1a3eee664a1af386fe786d1652b5a916ed6b4b416ef960dab +08178feccac819b916beabd2b04dd3352a52d4fa389fed33bf592e8b8c264dd657b4e68313464b +c245fcddaa68bbc95bbb8fb796d14eb851b3ef87c4b7adc8b6b9fc5dd794115b8b474b3f127967 +e765aed5a412031705a7a5d6d7b9f6ae5e9192abf75d7bc12895bd7afd036bcfdb33a6a69daccf +9856e4d2cd385d37c617a3997aacd7aa637c35fd6aea92f966c92ad98abdd0360b5d48b695bf86 +1ca31bae65c360b61bcd56a78fd866abf4116b635ac0f8625199d510dcc374ec299d6137e426a9 +388e3b3e45d4b362a17fc0d88e9c142380450f203342204a5100b00dfdd4f6706c43f756ceb6dc +79c6a852e55d3ed165b90f14ad8a8c355db3e4b3aca9463426c28498161ac594517e883c2f347d +b11cb42c0ba008a520401001c7b2133f08a06de1e476dc0011f3d4aa2c8c31df31f14988ae3d6e +b2f79d56374228a9eba0db9dc520a66cdbd548142f784947bbe1a5eaec7679a4806fa226dfca45 +2e45ab06c9bcecf839df96543db4f24785c184102591059b5390a483b8fc48c921b689533630af +e53dcb56da8f6591bda7b5764909bba4c2a896a90e09cb78946b6317823189ffdf08c00981a10c +ba5614e48dec51a6d9af940798fac8775d045ccb0b01421602611407c00c4de85808c7d88a5e92 +8722dfec4c0e80422b29589777d5fd141a58f1b06e5849ae040939edb40b91db004bf734195f2f +a752787ab9dfaea5332dbda435ddc3a3fd6d8f092bf8333cc26f7bfcb5a0ec191ed11e9bfce99f +7af984cbe795189a4a2c21bcafee55187ca51516c756e8413b06a68b20405e68c91337023849d3 +c8f73c1198f3f2276ecec50de6466442caa50c4c56ddf0477790b25b8acb80ca3680b11dbb1104 +d0c31820070720f06c1fc03808b117a2d473d1ed74b1c809a7bca8282eae7a464f7b7973780892 +d6553c2e29a9ef8a9a1f59eecc8433b1d5fe0e291183d2bdcecf08233f3fc4f1ff00e74cc0e1fe +d39f37b42869fd2574e89542e7d911b41cc19b87a138d671e08330767d90402f753d1cd85e18be +3c744bce06eafee8893856d804de01cffbc3aaeddea9dd9405adebbeaa28bb27b8f34a054fa3c4 +09fdd403293463807cc7017e8421b0a1679a711a24317ad1fff14170f13174d2578f6aaefece0e +7cd82469e2b9297640ecc200a000a720b293186033b57dec62c7b182bbc3a62b8b9c0a45f73e63 +3e7ffceb84cd3e7ffcfb00478c6aa60fa269df556fa4278a02d78efd0844e2d20550127820c4ae +03b003118a233f8c612ae9692df4901e31b81f3d6d734d59db14ea9bd1324780d6445e0ea0e740 +cbf6dd60146aa06417ad94fe5ce62fda92fd44dad3b5c264b82ec56aa895680ea63b1399fbf491 +7cf42f000000ffff0300504b0304140006000800000021007555dfd22405000070120000210000 +007070742f736c6964654c61796f7574732f736c6964654c61796f7574312e786d6ccc585d6edc +36107e2fd03b087aa75724254a32b20ef45b14759ca0760e204b5caf10fd95a236768200b949cf +d1bef62639498794e4ddb59dd48ee3c22f4b8a1a7e9c99efd368b42f5e5ed695b1e1a22fdb6669 +e203cb347893b745d95c2ccdb76729f24ca39759536455dbf0a579c57bf3e5d1cf3fbde80efbaa +38ceaeda411a80d1f487d9d25c4bd91d2e167dbee675d61fb41d6fe0deaa157526e1525c2c0a91 +bd07ecba5a10cb628b3a2b1b73da2feeb3bf5dadca9cc76d3ed4bc912388e05526c1ff7e5d76fd +8cd6dd07ad13bc0718bd7bdf2579d541b4b29415370d6d2636b080cd23883c3fad0aa3c96a5838 +2b2507c8aae4fa4edf9d09ced5acd9fc22bad3ee8dd01b4e366f8451160a60da682ea61b9399be +6c367ab2b8b1fd629e6687972b51ab11f2605c2e4da0eb4afd2ed41abf94463e2ee6dbd57cfdfa +0edb7c9ddc61bd980f58ec1caaa21a9dbb1d0e99c3d17930547ab41fc7bd9c3d1a44b9343fa629 +099d24b5510a33645ba18dc2c4f6514aa89710378d08659fd46ecc0e73c13523bf16b3b230bbc5 +665de6a2eddb953cc8db7a92c5ac2e2012db1391cacb8f0e0b284eb185ec2081d3632f4681eb07 +08278e1746961fa781ff694a00f83c8f3a8ac514ef14f84c44df1db7f9bbde685a204af13af276 +6d3192a9c66e3da92997e24c0b6aa658ddd7936da2ef64193bc4b6ac913f8c09a48aee33ee637b +34504c42465d66dde273c4ee0ee565d816576af7398cc063d6e4eb161ebef311b3eae5a9bcaab8 +9e6f2adc2993eaa2d1fe6b7e0bbefa1d16fb0f4b93a953c78326db71be83d1a91f1d95804d55a6 +0a4bc1519c8cc7c9232d1da05472313e9b4631887c6dfc5695f93bde18e73c13e71c8c1a053d92 +331ed3e9c0e680748cdf962b9de5fab681d3a4d62c79a69ab580c6c4c30c8561ec233bf2521452 +27425ee87b0e75a81579f1d36bb61fce47cd82534a898fd22e651681b0bea15dcc1cc765e4beda +fdaa60eb4c1cebd256360514783ddd17f1f970022f340db0a367e5eb4d3deb29d9a2da8e4b94bf +0f85de7b5414de044db7d0632e1e0c8dbd5d68853741db5b684c5dacaac283b1b7a564029cb09d +1d6c8f78ca85c7612bc0099b6db109f17491791cb6029cb0dd1d6cd7a6df43e53eb6029cb0bd2d +b602fe2e2ef7b015e084edef60334757f8c7612bc08757eb5497e84d2baaec821b05ef8d6d2d1d +8b78ff74f5db9eeb779cc9a1ee3be8fb3eacb30a0e35e8736d3d0296604a020437e074cf2128f0 +43e83f1c4282d00ebcc0c24f5fc60b696a0540b25673291fa5f0d55aae1bd26f165c7da105b382 +7e5847ebd388442ca488ba698a6c27f591ef120fd1c80f5237b01397d99fe6eebac8249765cdd3 +f26210fcf5203585377567f4b58c2a9e35d7bdab3cc2ecc0a20790516f2b29f041f3de146f3291 +29c9df50eff708ce9905970efffcf98197156f7645673f53d179d4b269101114474182ec1094e7 +63df8544441676ec942651f8f4a25b4131d2aafb63c804a46b16de7f34110f11de8f659b5db3ad +3ee89a66a86b2ef608779e29e1984531096d07311cc0578e87e1c3dd497ce47a8cba21745dcc0b +fe8766b12a4e86fa4ecec796eec7169b38895d96a40e8a18850ed94f1314923842a995102f65a9 +e360ffbad8f45509ef4af0eebe35e6cbe7bf4ec4c197cf7fff8012a387f99f8139ef7a36a9270c +7d46222f4421b6a16ec6f0ac06297350ea50db8e422f8868a2d4d361fbb67a60f17eeae9daf75c +746da9ff38c1d624a04d56e9f69012c6089b791e55b2f556517faae287b112afb2eef546cb647c +e7477aa953d21c4db7262af6f99fa2a37f010000ffff0300504b030414000600080000002100fd +00fcd1320800004e360000210000007070742f736c6964654d6173746572732f736c6964654d61 +73746572312e786d6cec5bdd6ee33616be5fa0ef20f8b6502c8ad49f314e61495677b0e93468a6 +7bb177b444dbdae86f293a93a41860de64817d8b5dec5ddf649ea4879464cb49ec49da49e10446 +008b3a3ca20ecf77bec343da79f3dd759e69578cd769598c07e8c41868ac88cb242d16e3c1cfef +23dd1d68b5a04542b3b260e3c10dab07df9d7ef39737d5a8ce921f682d18d7608ca21ed1f16029 +44351a0eeb78c9725a9f94152ba06f5ef29c0ab8e58b61c2e907183bcf86a661d8c39ca6c5a07d +9e3fe6f9723e4f631696f12a67856806e12ca302ecaf97695577a3558f19ade2ac8661d4d35b26 +9dc2fce28b2c91d7d9a2f9fc89cdb534b9062f1906020d3a5223b320e3da15cdc683d9020d86a7 +6f86ad72db920fd7d57bce986c1557dff3eaa23ae7ea0defaece398c09430eb482e6e05f3980ea +68d5d46d71a51ac33b8f2fba261d5dcf792eafe01e0d2c04146fe4e750cad8b5d0e246186fa4f1 +f2c70774e3e5f401ed61f78261efa572568d71f7a76376d3799f0a965500cfed926632541ac781 +4967b5e88c5bf1743cf8258a4cdf9a46448fa0a513c327ba3f259e1e99d89d9a4e1498d8fe289f +46f628e64c61f636e9620fd9f7f0ced39897753917277199b781d3c51f408d481b7dd2e05f0c02 +12ec06fa04598e4e42c3d43dcb413af61cc3833e9f38e863eb0bb0b9bbaa590cdba9b73ee830a9 +abb332beacb5a204cc24c40d846b8d065779ad969ab8a9c05d2215196bf59a4ed5d838fc41b45d +ec42e42a18b16d21d3dac61d1916b26ca9200145d8b42c1b6fc14a4715afc5f7accc35d9180f38 +8b85028a5ec10c1bd54e45d9d458528dc4b55f263752730657401f52093cbf2cf9ed40cbde16f5 +78e02142e0dd42dd10cb31e186f77b665b3d220bca4c851f2d6218673c880557b61440dcc94a94 +f3b4b5a879a5ecca6a71216e32a6e65dc90f25e660504665264b981e4e1bb788531594b94a5d4d +32d092158f97dadfb234be6485366394cf182815f22d0dd6120a35f4703369e587fd44c06b2200 +1a7d1e9807ca83c8987a7e3835f48937011e20043c70ac896e637bea19fed4c7f84fe08144561a +24a3f78fd001b9a665efe703c116c2d83d7c3e3c9902958cfe2bf5ac12eea344a4787055f28c2e +800109ab3519b10d49eafd8cb8fb3a85d8fed7fde3831c4c9bce58c11e31a2f9e511439e8a278c +a8f2dffe11ff9e02748f1f913cc2c9bffebf98ef19f269a98574a925a46295d7fde4820f34b9b8 +51e8987e38d1dd20243a71609175c308e961141ac83203c341c6f327974440497b0b33a1d9bc4d +322ac07e6f92b131aca7d69d62cb7408560a32c76c56e517b4e4aae9745945b5af3224c39d660b +d82a64cad884cd7f0291742792d3559094599a4469963d50228beba6001469211a896319465764 +ae959bbbcd38c3ee4daad91ad2b47b062a42ceb3a409360f076660fb58c74e14e9c48a3c58c94c +57c78137899c09993a36f938e862820a26d29c45e962c5d98fab068abb3cd6ea5c0419a3c53aa7 +8a53649f18f80422dddd307a2e370e100b45724e39950eba930d7e0fdfad8eefd1ead77fdfb234 +63459ff3e440391f460176d104eb6138f17462bb13ddf3ac00aa6b0ff9aee1d8beed3c3fe7e710 +d02a4affb5a290d579cbfba60c7e0aef89815d553bec223e944cc47dcdc4efcaf1c3a3fed7e59b +bde61b18c38a6295e78c6f51ce3a50ca99d3c09cb88ea54f43076af86812c95dadab47641ad941 +e4e1107bcf4fb93a4bdeadf28758a74aa5a7adb63632f6b2eed52fb787cab9f5721b42b0d9d3c8 +d2031b439ef7a2a9ee9b61a0c386d274233bb22ce4ad97db1a5ec580518f5e653f7ffaef3b7ef2 +f9d3ffbec222ab2edd795c17f7aad5b2d7f73ddb0c5c5ff71181ca21f41c7d12d9961e599890c0 +7727019e4af65688dc672f081fc7deaafcc07855a6ea1413192d811548d8c1c842aee3364829db +baeb9aa5ede9649cf11f68a5cd16086a3281c0c3d7d04a2ea1355b9852664a992965d0a271cc0a +011a6da393989d64ad833b09ee24a493904e627512ab93d89d04d2e7324b8b4b7086bc0cb47999 +fdb51174ade6ac13f2c419bd2957e26dd222d19334a7898838c4c536f1803d2329e16f13958276 +eb5a92699dae2aeff7e8a29eae2a09f6e89a3d5d95c8f6e8e29eaeca477b74494fd7fe82aed5d3 +75bea06bf774d529c71e5da7a7eb7d41d7ed63a1e2748ff21670dde2711f7871ad924baddaf228 +74e7de4383fcf49ece2e6edb1cdbe4559554193d2b7c7ea9ced4e5f702457b0b5d4b4810b0609e +af8a58c87e35727151c5cd12179fc76d96f48c4d96ec2bf8f2547f5b759d4cd7bdb3d5bbb268ce +617af9ba31f2124a8827e4ee76e8be969a924aa3731a432afd36ffa79e897635a4773a186d8ff5 +eb3b1d71dd8efd609edff67ea556be7b50e4949f01c466530ea705247470aade090e07295137aa +a8b7f2f5c08a4a581b37de99f09482d5152dca1a6e0dd3f0a1f42070edfe80a9552ae26544f334 +93e50608e225e53513eb156bb60a40a2c4e3c1e74fff69a4bd7030d51ee139c2a1d8150ec5ae70 +28f687836a9a1bc86dd752c6bf00c8ad4342fcd912c057445cc2dc228e3788c396164b9f1f217f +22e4ca69070eb9c4b9859cf4200778d586ea08f99320472f21af4b9c5bc8adde526e588e82f108 +f9eb835ce2dc426ef720b7107929e5db11f227422e716e21777a907b4e63fd11f2d707b9c4b985 +dcdd408e89299d7e84fc35422e716e21f77a90bbae7d2cdf5e29e412e7e6c7a59b73996a548a25 +e3eb531a78e2bc098c7676f70fc7372adb473acf12242fcdc70f1f7da8af708efed97950d039e1 +e89f1dbb6aecc88df5d141bbf6a0c8355d65fdd1413b766c6a193f3a68f7fea6fb25c0d1413b76 +0360ee3149efab9d6dcb3926e9ed4ab35f5caa5f54745fd436dfe336ff0776fa1b000000ffff03 +00504b0304140006000800000021009119fff8d404000095130000210000007070742f736c6964 +654c61796f7574732f736c6964654c61796f7574342e786d6cec58cd6edc3610be17e83b08bad3 +12c51f4946ec407f2c823ab651bb3df4464b5caf1afd95e2aed70e02e44dfa1c2d7acb9be4494a +512b3bfe89bd0eecc2875c9614351cceccf7cd7056af5eafeaca5a0ad9976db363c32dd7b64493 +b745d99ceed8bf1e3310d856af7853f0aa6dc48e7d2e7afbf5ee8f3fbceab6fbaad8e3e7ed4259 +5a47d36ff31d7bae54b7ed387d3e1735efb7da4e34faddac953557fa519e3a85e4675a775d399e +eb52a7e66563aff7cb4df6b7b359998bb4cd17b568d4a8448a8a2b6d7f3f2fbb7ed2d66da2ad93 +a2d76acceeeb26a9f34e7babceda83933f6ccbc8c9a55e81f6ae763d3faa0aabe1b55ef8fd4c94 +d69b66ce2b25ccbbbe3b96420cb366f993ec8eba4369b6ec2f0fa55516838af556db59bf588b99 +c7666926ce8deda7d3946faf66b21e461d0a6bb5636bc4ce875f6758132b65e5e3627eb59acf0f +ee90cde7d91dd2ce7480f3c5a18357a371b7ddf126778e4b252a6b0890b163af5793450b59eed8 +ef19f36292310c989e01ecc618c4190e01f35090793e4b3c443f0cbb21ddcea530a0bc29267241 +7a0bd0bacc65dbb733b595b7f59a1913c1349610afb11cac7cefa1183237202088620470865210 +bb24004118c208277e18607dfa18006df3341a2f9cb5bf6bc72720fa6eafcddff556d36aa0065c +47dc2e25463087b19b4f842a5525d672e34b33b98af29a056a15b7c5f970c8891ecd22dfae7a75 +a4ce2b611ebae1c798213510151ff2b51020cd4670d5ae81438749093952de2a16329f5b3f5765 +fe4e34d689e0f24468a16670757478b0c7a876ae4c7026f0bf4e01345160cc83bed3f978613242 +5ade0be5038c538203e6034ab208e0388e4018bb21486106634218826ef09c7ce82fb4fdbc9a0d +e6acae84bf428a3bf23e4081ae5726a161e011ea91eb2580c000d24160486d8c084428b899e0a3 +ea8de9d60d4c5b569715e43efa31c3b9652b2b7eaad95688de3ad6a68d84ecef67dfcde34c70ee +3f6e28c34a58d98968c4061abd8735a6b2548fd0881ed6f85b29e42334e20d82fce9df66768fca +c7a531be278dd10b4de334630451cf07098b438051e283288d5d00094efd308a8298c0ff318d0d +af1e95c614fadef73cfe9ec74f98c764cae394ab457d2d8df14b4de3240903162720a121031827 +09885c9602142628a409832979d6db78ecce0a65dfba97c7a6f849bab599fed360bc0d51e22554 +b7a1c867da5bc24210fa5e00501246cc8f70e653fc61fa0f52702554590b569e2ea438582803e1 +4d22597dad924af0e632a9d52ea45b2edad2a10eae28a56d30b837c52197fc97db74fc16c2d189 +706cf1e9af0b5156a2f99274e485920e27a18722ea812c2110e0845010c591b683119f309f86c4 +45cf4fba999223ebfe5c705d56e444bc073ac2c710ef69d1f62fd16eab5234cda2ae85bc06387d +a1805314e90b9465002601d655c6d55526f07d90519cc5888698f9f8f901efab627f51df89f903 +edc337159b344b7daabb245d5a91ee9042ed7eeca509606ee6058c32426078596cfaaa2c844674 +e31af3f9e3dffb72ebf3c77f9ea0c49861fa7832c5ddccd6ec89e3907a49108318625d37d35037 +7b8c12a05b407d65c44194a06c604f07f16df6e8c5cdd8d3b56742766d693e2f41774da025d757 +798811428442d3a239c6b469bc24c9d1e0be1e2bf99677074bc392b15b4acc5237307314bd1219 +5c9f3ea7edfe070000ffff0300504b030414000600080000002100d60634cc2e060000371f0000 +210000007070742f736c6964654c61796f7574732f736c6964654c61796f7574352e786d6cec59 +cb6edc3614dd17e83f08b3a747a4288a3462077ab108eada41ed66d19d2c713c6af42aa519db09 +02e44ffa1d2dbacb9fe44b4a529267fcccd8890303f5664449e4e125cfb94777a4172fcfcac25a +0ad9e675b533815bf6c412555a677975b233f9ed88033ab1da2ea9b2a4a82bb1333917ede4e5ee +8f3fbc68b6db22db4bceeb4567298caadd4e7626f3ae6bb6a7d3369d8b3269b7ea4654eadeac96 +65d2a9537932cd6472aab0cb628a6c9b4ccb24af26c378b9c9f87a36cb5311d5e9a21455d78348 +51249d8abf9de74d3ba2359ba03552b40ac68cbe1c5277dea8d576a7f5d1d9d1697d70fcc7c432 +9de5525d86935db5fef4b0c8ac2a29d58537429e14224fe7e646db1c492174ab5afe249bc3e6b5 +34fdf797afa595677afc306e321d6e0cddcc69b5348de995e1276333d93e9bc9521fd56658673b +13c5d9b9fe9dea6be2acb3d2fe62baba9ace0f6ee89bcee31b7a4fc709a66b93ea55f5c15d5f0e +1a97739477a2b0f4ee9838f6da6e8c6821f39dc97bce51e0c61c03ae5a00db0106418c19e0c8a1 +31f278881cf2418f86643b95c2d0f22a1be505c9354acb3c95755bcfbaadb42e076d8c12536c42 +3cb0a9a37c6fc7761cb00082d0836a76e80680da3e073ef5380b2881ccf63e0c1ba0621e8f6615 +d361bdc3c24722da66af4edfb656552ba234af3d6f173d7a32f5b1998f92cabb420cfdfa9ba6b1 +dae51b29a60ef32835dc39c485c8bd4c36b45de8127b60113ac875897395cb1ebad9eece823a3b +d7c38fd5d1682dd92edaeeb03b2f843969f48f09432a8a8b447b41264014f7b376bb8668454027 +649f4e56b690e9dcfab9c8d3b7a2b28e45228f85ea54e908faadd42b35d0d3550826aabbc5e55c +884b2db65189fe6e9e146a5e0b3d519985d4269e1fc4c0b5a31860eedb80c55e08a807b14f5d14 +b0103ebecc34b53a202d8eaf511b2414c25e4b2bb929b1791ef57ab551e4308836159b9554e9bc +56567fdc438eba33ed6501d530ab4ce49eb1a4bcca943beba60158ecab4790199589d9afaa63fb +4e990fd6b23f1e9779813200a21520763da4fb6e846a5f47d55003aab34265109b08364185f43a +aa861a50f10a153a1e34f9bc11ace9791956630db0ee1a2c45d4c4f050588d35c092152c429498 +0d7b28acc61a60bd35580f3b1b337613acc61a60e90a56636e4ed90db01a6b80656bb0c4f5be8a +328dd5b7d772c258b19e4475b8786edf65cddcf8f1b2964572a29c3813ada59db337ebf65b3a33 +1e9df955a52db95d3767e7899a332411839451c0b0e303ecb904042a0680a94b239bd98807fc31 +cd5973afb6683658736f9b0fb466e4daaeed5da9042e59b343287655efaf2b04be97faae4e6776 +f2eee97e3fd560567c2c2ab101a2d9eebb11239977f7401c1e8c7721bec985bc0722de60933ffd +5bcdee80bc5f1abbb71558f889e6302621653e0c408c62ac0aacc00581ad0aac08f1904688211b +45dfabc0d2f9fce7225104cb21a5fbb2fb3e294da087cc63eef6728b3a5027fd73b9f55c6e3d97 +5bffd3728bdc516eb94fd4aa0962b17e5f01108e1d65d53806d471086021b32362f310d2477de5 +72dd9ecde3f5c1f67c4bc9b566cfcf25d773c9f5c554f6c6548e926e515eca64f254ff38453685 +34e2007102010e7004021707c00e2248781c85c4ff0e6fb5b2ae2fb9d6fe42c1fe9df5ad196d5e +a96f9876b322eb57cb9c1085247080e3710eb0cb19601ea2c00999cf3d1fc71ec11fc68f0459d2 +892e2f05cf4f16521c2c3a43e15521596dd9858548aa8ba4ee7621d9b29d2db5d57425291583e1 +bdca5e2732d10fb02b727c88e0e82838bef8f4d73b9117a25a179df74445e7c754f92d26803387 +011c3355e9fb5005837ddfc5c40e9cc07d7cd1cd3a7953a10fbff05ef53ec2fbb66cb30bb6eb22 +1755b5284b212f114e9fea271a18ba14c608408c6c802971008331040e610ea7be1b70481e9ff0 +b6c8f617e58d9c7fe185cd83cc268a238fc4dc0521d12a673c06018a42c0ed18514eb8eb427661 +366d91ab725745b7a9c77cfef8f7bedcfafcf19f6f6031e6307edb1cf7ddb406f504012328a401 +082056be19310ff89cb880bb0ec66140fdd089b57a1a88afab475ddc4c3d4d7d2a6453e7e6fb2f +b407012d135d1c104821a29e33d679bd4a56d16aea0ff5fad5b190bf24cdc1d2c8a42f974273a9 +d1d2ecbbaebae8b58f1fbc77ff030000ffff0300504b030414000600080000002100ccacc02fe8 +030000060c0000210000007070742f736c6964654c61796f7574732f736c6964654c61796f7574 +362e786d6ccc965d6edc3610c7df0bf40e82deb99228ea6b9175a02f16455ddba8dd03d012d72b +445fa5a88dd74180dca4e7685f7b939ca4434af23ab10b18850df8654991437266fe3fcef2ddfb +dba636f65c0c55d76e4c67659b066f8baeacda9b8df9fb1545a1690c92b525abbb966fcc031fcc +f7273ffef0ae5f0f7579ca0edd280dd8a31dd66c63eea4ecd79635143bdeb061d5f5bc85b96d27 +1a26e153dc58a5601f61efa6b6b06dfb56c3aad69cd78be7acefb6dbaae059578c0d6fe5b489e0 +3593e0ffb0abfa61d9ad7fce6ebde0036ca3577feb923cf410adac64cdcfdbfa601ada54ec61d0 +314f20fae2b22e8d96353070360ae3aa92bcd613437f253857bd76ff93e82ffb0ba1edcff617c2 +a84ab57e5e675af3c46ca63fdbbdee58df2dbf59ba6c7dbb158d6a2115c6edc604c50eead75263 +fc561ac534581c478bddf913b6c52e7fc2da5a0eb01e1caaa29a9c7b1c0e5ec2d129305476b41f +a7835c3c1a45b5313f518a132fa70451e82162270425398910c56e98e380a6d8f53fabd58ebf2e +04d7a2fc5c2e7039fe23419baa10ddd06de5aae89a998c0530d0d221b396cacb4f9e9bb9244e1d +383df211f1220725419e202fc9529bb84e8629fe3c27007c5e5a1d8535c73b07be0831f4a75df1 +6130da0e8452ba4ebadd5b4c62aab6df3d046ab69b2675e798e59902799b74e5411d720dad1e64 +eb7a9097f25073fdd1ab1fed8600216aa6ee6bc951964fe2ca132d07a4497231216f94a32876c6 +2f75557ce0ad71cd99b8e660d4aa50a780953f7a6bebe882b588ffdf08b80b0219936333f4701d +ef76ac86930dfc4671080312e0cc0951846984484a429424294636f5e20c7b180711797d1c4a09 +d5f50e2261f556390677d1996ee18be0b18512a5a38ddc14a77ee22237a014e08790a30087c84d +a3980631c9031fa25d9c6292cbaae1b4ba19053f1fa596f07bca8ca19169cd597b5f4fe489e3af +6c7705a90e8f48810f5af7b6bc6082fdf698d5ff031c5980a3e33f7fdef1aae6ed43e8dc370a9d +9f7a4ee48514e511f046803314274184322ff0314eb06be3e4f5a1db4a3151f7c7c804a46b016f +59fb02e0bdacdadebdda5d5df1b61d9b868b6f04276f54f028a7d48b888f704c1d440212a3d84e +63e4e7506c6896789e475f5f7078a89d8dcd939ae3572836599e057e4e3d94fa2e94d688e628c1 +598aa89de390fad4834b705f6c86ba2a3928faec1af3f5cb5f6762f5f5cbdf2f506274b3bcd696 +bcebde4c4f92443e4ec304250e81ba9945018aa9ef21eab984a44918a76eaee8e91df2981e187c +1e3d7df7918bbeabf47bd6b16780f6acde98010e5cecfb6130eb3441727456297fa9c287b616bf +b2fe7caf2999fef7533dd42b3227d3a3890a7d79bf9ffc0b0000ffff0300504b03041400060008 +00000021005632cb5c8e030000fa090000210000007070742f736c6964654c61796f7574732f73 +6c6964654c61796f7574372e786d6ccc56db6edc36107d2fd07f10f4ce952851b745d6c1eac2a2 +806b1b75fa018cc4f50ad185a5a88dd78181fc49bfa37ded9fe44b3aa4a47512bb801f6c202fe2 +6834339c33e788d29bb7b76d631db81ceabedbd878e5da16efcabeaabb9b8dfdc73b8a62db1a14 +eb2ad6f41ddfd8473ed86fcf7efee98d580f4d75ce8efda82ca8d10d6bb6b1f74a89b5e30ce59e +b76c58f58277f06cd7cb9629b895374e25d947a8dd368ee7baa1d3b2bab3e77cf99cfc7eb7ab4b +9ef7e5d8f24e4d45246f9882fe877d2d86a59a784e3521f900654cf6b72da9a300b4ef1bd67db0 +2d13260fe0c0f619202faf9bcaea580b8e73cea5f10de29de45c5bdde11729aec59534a117872b +69d5954e9d536c677e308799dbee600ce7bbf49bc564ebdb9d6cf50a13b06e37361075d45747fb +f8adb2cac9593e78cbfde513b1e5be7822da593670beda54a39a9a7b0cc75be0e44c8ded208082 +bb3d6b1497961e92e9e97c504b77a3ac37f6274abd34282841142c44dc94a0b42009a29e1f175e +4433cf0fef75360ed7a5e486975fab455f387cc4695b97b21ffa9d5a957d3b8b63d118d089c94c +a7eef893efe55b9ce42e0a039c21e247054a709ea2304db334247980497c3f0f037a5e5683c299 +b1cf43584819c4795f7e18acae07d234c71387a7888958bd8afdaca94ac11b75074858b3d38d01 +1178a2600936c60303b342d46dda5747bde97b588d93ad9b415dab63c3cd8dd0971d48d3a04dfc +cccbc2d4477e442922014d50127931f2b3644ba32d29a290dc2f42af98e2aa6e39ad6f46c92f47 +652894c035bc017012541ce505f4ddaaace1ac3b89499de170e5fa2b1875acc7350d0d7a30bc77 +d51593ecf7efaa4c031606e702ca59a4f6ff82f317c1d1f1dfbfee78ddf0ee6bd1793faae870e6 +82dc02443105d181c6509283951152b884d028f5ddd717dd4ec949757f8e4cc2b816e12db92f20 +bc97659b9cd8ee9b9a77ddd8b65c7e43b8ff83125e64dbc0755d0f45599cc0ee31415b976e5192 +6e53d7a52e2952fafa84c3c7f9626c9fe4dc7b85c3262ff2282c6880b2d007d0092d50eae519a2 +6ee1c534a4418093d361333475c581d1679f315f3eff7d21575f3efff302478c59964ff5327763 +cdea49d324f4b238452926706ee64984b63484f737f009c9d2789bf985568fc0e4b17ac0f93cf5 +88fe2397a2afcd3f0c7667011d58b3b163cfc7d88b4f3c4d22796856337fade1c3dac8df98b83c +1895c05ec072665c422b730a7d08d1d0977fb6b3ff000000ffff0300504b030414000600080000 +0021004ba90907dd05000065170000210000007070742f736c6964654c61796f7574732f736c69 +64654c61796f7574382e786d6ccc58dd6edb3618bd1fb077107ccf58147f44054d0afd0ec5b2b4 +58b35dec4e91e858abfe46d1aed3a2401f64c09e63c3eefa267d92919494384e6a3b6983e5c6fa +241f1ef2e3777848e9d9f355555a4b2ebaa2a98f26f0c09e58bcce9abca82f8e26bf9c25804dac +4ea6759e964dcd8f2697bc9b3c3ffefebb67ed6157e627e965b39096e2a8bbc3f4683297b23d9c +4ebb6cceabb43b685a5eabff668da852a96ec5c53417e95bc55d9553c7b6e9b44a8b7a32b417fb +b46f66b322e351932d2a5ecb9e44f032956afcddbc68bb91addd87ad15bc5334a6f5cd21c9cb56 +65db9cff7eb69a58062696ea019c1cabccb3d7656ed569a51ebca8e76929adaa90d6a73fcfd53c +667351cca48175ed99e05c47f5f207d1be6e5f09d3fa74f94a5845aed90696c974f8638099db7a +6982e946f38b314c0f573351e9ab9a146b753451b5bbd4bf53fd8cafa495f50fb3eba7d9fce51d +d86c1edf819e8e1d4cd73ad559f583bb9d8e33a67356485e5a7aaecc384e3a398e68218aa3c9fb +247102122718242a02d80e300862ec81c4412c76dc247410fda05b437a98096ecaf3221f6506e9 +add25645269aae99c983aca9068d8c5253558578a8aa1ee57b4451e8138a419c7821c01123c0f3 +690430756c1af8ae8d08fc304c801af37835594c877c87c4c74274ed4993bde9acba5185d275ed +eb7685e88ba9afed7c90962c64c9075cffa709ae67f9ce1233e4b98c99da61e22abdde2c36f290 +e320b72f22a4b63d20d64bd933b787721534f9a56e7daeaeaa84699dcd1bb508cf7bceb293afe5 +65c94dbc2ce130a09ccf7e56e0ee9deaed9afd0aa0e3b586adfe31ed846a54a6da55720ea2b8ef +431e1ba9a8124a2efa8569e50b91cdad1fcb227bc36beb9ca7e29c2b50ada9fb62f4ddb4269b31 +0b93d87679a2519efd9aed5ae51aef74c485e53c51ad629220db097d90b82c0038f12960ae4b40 +ecfbd40f3c27b4fde031b55ae4ab6bc8fe3225902138e8d4632e76c84d9d52e83a5a3c46a798b9 +88f6887d74fa15e234a1731bebb075ec085021ba038bd7b1234085f80eacbd8e1d012a24bbb023 +408574177604a8d0dd851d012a64bbb0234085de2e6c0fb86bf1b77add2fcbabbd669b1924c601 +968d28d30bb5f673de59674a32bd3d74dbbd60b33b23daedddfdf6569359f139aff91e8cce6ec6 +4814f21e8c6837e3af0517f760c47b4cf2a77febd916cafb992abedaf355a1d61d153d51478551 +0423162010464cf5ae364cc0087501c13026288e022f208fbffb6b2b9b9875a4a66ba687b61a04 +f6d0e380631377b0a62f9c0710839028f457faac55a5e2c49c148b3a5787671d9a568b53f58660 +5aadd9843e847cd18607aae124b31fdf0dfbddb0ea81cf8358a3f6e3bbb14d6cd8f9c007916bd2 +d88f709be78f84cc617acb7900e1c6c630103a0ea31af600c28ddd632474b1d9401f40b8b1c50c +849a6dffa26cdb8746424adc0716e5ffdfaceee7b164f4d828958beac6b9153f5197a5b6134342 +88ea0eaa77ac043210501a8018d9110a023f0ce9a39e5b7b97cde52d8f85bd0ebe68b2e6cd7bab +159a1ba3965999f7d97a2874544208203749803ab37bc0731d0650e8f989ebe3d8a5f8c3f84d21 +4f259745c593e26221f8cb85fe56705b645657c9b0e4697da545790ce9818d0ed454b36b49a931 +98bad7f9ab54a45aef1b527d88e0e828b864f1e9af77bc2879bd2e3af2545fec632f26ccc300ba +0155aff328019ee30780529810cf61811fb3c717dd4c8a5e757f2c52757413a3f076bc45dd4778 +dfb6daee55b59bb2e075bda82a2e6e149c3ed182c7a167275ee0e985a6de8eb11f032f8c95d504 +3689f4279e80fa8f5ff0aecc4f17d59d35df71a27b90d94471e4d2382120a4c85307d824068113 +8520b16387253421047a5766d39585da1dd5e8f6f598cf1fff3e15079f3ffef30d2cc65cc64fa0 +e3bc9b68504f1078d40959000288956f469e0bfc84aa4d83208cc380f9218ab57a5a886fab473d +dc4f3d6df3968bb629cce762680f025aa6fa25d1231e830cd3a14ebd48ae07ab2bff5aa7afaea5 +f8296d5f2e8d4afa4d3e348f5aadcc1e7a0dd1a98f9fc78fff030000ffff0300504b0304140006 +000800000021004a0963b7a105000020170000210000007070742f736c6964654c61796f757473 +2f736c6964654c61796f7574392e786d6ccc585b6edc3614fd2fd03d08f34f8ff892282376307a +15455d27a8dd05c812c72344af529a899d20401652a0eb687fb393aca49794348fd84ea6ceb8f0 +cf88e25c1ef2f21c1e927af1f2a62cac95546d5e5727137c644f2c59a5759657d72793df2f6324 +2656db2555961475254f26b7b29dbc3cfdf18717cd715b6467c96dbdec2cc0a8dae3e464b2e8ba +e6783a6dd3852c93f6a86e6405ffcd6b55261dbcaaeb69a692b7805d165362dbceb44cf26a32b4 +57fbb4afe7f33c95619d2e4b59753d889245d2c1f8db45deb4235ab30f5aa3640b30a6f5ee90ba +db06b26df2f4f266629930b5820a3c3985ccd38b22b3aaa4840a3f87629977d6a73faf6016d385 +cae79d096a9b4b25a52e55ab9f5473d1bc56a6edf9eab5b2f24c630d1893e9f0c710665eab9529 +4cbf687e3d1693e39bb92af513a6c4ba39990073b7fa77aaebe44d67a57d65baa94d17afee894d +17d13dd1d3b183e956a73aab7e7077d321633a9779270b4bcf9419c759db8d235aaafc64f23e8e +89cfa398a1184a88d93e437ec43c14132a22e2c601a1ce07dd1a3bc7a992869c9fb35164d8b943 +6c99a7aa6eeb797794d6e5a0905168c0296603a77a94ef83d0f1ec68e622416008ccb567c8e371 +84dc90ba11091d9f87e187610260cce3d364311df21d121f89689bb33a7dd35a550d44695e7bde +d6113d99fad92c0661757957c821aeffd31436b37c2fc5827aae10863bc65d50eb2ed9d4a38450 +b727113bb63d446c53d92337c7dd8d5f67b7baf5153c81c2a44a17352cc1ab1eb368bb8beeb690 +a6bc2af030a04cce7f83e0f61df4b6415f07e8f256c346ff98760a1a1589f6944ca230eafbe84e +8d5480c24eaa7e595ad952a50beb97224fdfc8caba9289ba92105469e89e8cbe9bc66433666112 +fbba3ce9284fbd621b308c778ba4807e2df24c85ea792ce0cc27280c08f4ee0518cd6838433ea7 +d80e621e304e9e5ea8e0807a3c379be8fde5cab1a078d0ab275c46f8ae5e1dec122d22a357265c +eaf411fbe8f521915a65a2ce8c93e55506d6ae8ba6d5f21cf62fd3ea1b1a3645b2811a56da5e78 +446ce36990018f6ef03cccd8de783a728da741063cb6c1c3d4d56b7d4f407b1b50a30c807c0b50 +10a1f37804a04619009d0d2021c2d1618f00d42803a0bb05e832c3dc230035ca002836801a6d7f +52760035ca00e86d013adc7d24291ae57e279555f63a51896ef685973ec610d97abf86f5b86d88 +f4991a62446c4fe0d841946a438c848344180924dc59e4c296ce4cef4f6d88da7e26863698aef9 +e08de47bb67262737758e70fece55460cc21fa7ff546632a07f446bce365dfef8d78c7bb0fe08d +f8d0deb80b78006fdc053c8037ee021ec01b77010fe08dbb800f7ba3868780f5a5e66ba7ced81c +3557b52a926b386466b2b5b407f6e7d0f690874e3e7a6c9874cbb2dd7659f65c5d96c738b07d07 +f199c7e17e147a70ec9c11b8245127b44341a3103fbdcb66dd1d8fc5bd0e1e3459736bfeaa159a +17a396395cdafb43360d48e0f81451378e11e3b1873c970844036f16bb3316b90efb307e0dc892 +4e767929e3fc7aa9e4aba5bee7df1599d5965d50c8a45a6bb13bc5ce914d8f60aac546523086c3 +6feace28b878f9e9af77322f64b52d3afe4c456787b120918f6143c73662b398237f16f8681607 +a117c4ccf56cfef4a29b77aa57dd1fcb44c1748dc2fbc6cde7bf08efb06cbb6bb6eb229755b52c +4ba97608779e29e19c128f78314521c61e104e29f2fd50c06028f3b0270413f4e9096f8bec7c59 +decbf9374e748f329b300a5d27026d070e85a4bd38423e090314db1111b113738ebdb5d9b4450e +bb238c6e5f8ff9fcf1ef7375f4f9e33f07b018f3183f5f8ef36e4a837a7cdf7348207ce46306be +197a2eac5587a39853c6025fcc021a69f53498dd550f54eea79ea67e2b5553e7e6432fb60701ad +92c21c9a31713927e3aed0ab64335a4dfd85ce1f9e85fa35695ead8c4cfa5d3e30558d96661fba +09d1b98f5fb64fff050000ffff0300504b030414000600080000002100d5d192f1bc0000003701 +00002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f75 +74352e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4 +da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7 +d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10 +c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73 +860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000 +ffff0300504b03041400060008000000210068b9a05cc3060000c9200000140000007070742f74 +68656d652f7468656d65312e786d6cec59cd8b1b3714bf17fa3f0c7377fc35e38f25de608fed6c +92dd64899d941ce5b13ca3b566642479774d0894e4d44ba190965e0abdf5504a030d34f4d23f66 +21a14dff884a1adb33b235dd7c6c42a0eb055bd2fcded34fef3d3dbdd55cbd761a61eb18528648 +dcb2cb574ab605639f8c511cb4ec7bc37ea1615b8c83780c308961cb5e40665fdbfdfcb3ab6087 +87308296908fd90e68d921e7b39d6291f96218b02b640663f16c426804b8e8d2a038a6e044e88d +70b1522ad58a1140b16dc520126aef4c26c887f6ee4a6d0f8baf983339e0633a904ae136763c2d +cb1fb6601ea6d631c02d5bcc3026274378ca6d0b03c6c583965d521fbbb87bb5b816c23c473623 +d7579fa5dc52603cad28391a8cd6828ee33ab5f65abf0260be8debd57bb55e6dad4f0180ef8b95 +265c749df58ae72cb11950d234e8eed6bbd5b286cfe8af6ee1dbaefcd3f00a94349d2d7cbfefa5 +36cc8092a6bb85773bcd4e57d7af4049b3b685af97da5da7aee11528c4289e6ea14b6eadeaad56 +bb864c08de33c29baed3af5796f01455cc4457221ff3bc588bc011a17d0150ce051cc5165fcce0 +04f802e7018c461459fb280845e0cd404c98182e554afd52557ccb3f47b59447c10e0419e964c8 +675b43928fc57c8a66bc65df145aed0ce4e58b17678f9f9f3dfefdecc993b3c7bf2ee7de96db03 +7190957bfdd337fffcf0a5f5f76f3fbe7efaad19cfb2f857bf7cf5ea8f3fff4b3dd7687df7ecd5 +f3672fbffffaaf9f9f1ae06d0a4659f810459059b7e18975974462818609e088be9dc43004282b +d18e03066220650ce81e0f35f4ed05c0c080eb40dd8ef7a9481726e0f5f991467810d2394706e0 +ad30d2800784e00ea1c635dd927365ad308f03f3e4749ec5dd05e0d834b7b7e1e5de7c26e21e99 +547a21d4681e62e17210c018724b3e2353080d620f10d2ec7a807c4a189970eb01b23a00194d32 +44232d9a52a13d1409bf2c4c0485bf35db1cdcb73a049bd477e1b18e147b0360934a8835335e07 +730e22236310e12c721ff0d04472b0a0be6670c685a7038889d51b43c64c3277e842a37b4ba419 +b3db0ff022d29194a3a909b90f08c922bb64ea85209a1939a338cc626fb0a90851601d126e2441 +f41d22fbc20f20ce75f77d0435779fbfb7ef8934640e10f9644e4d5b02127d3f2ef0044093f236 +8db414dba6c8181d9d79a085f63e84189c803184d6bd1b263c9969364f49df0c4556d98326dbdc +047aacca7e0c19b4547163702c625ac80e604072f81c2c3612cf02c411a0799a6f4ff590e989a3 +2e32c62bf6a75a2a45546e5a33893b2cd2d697abf530045a58c93e33c7eb826afe7b933d26648e +de4106beb58c48ec6f6c9b21c0da0469c00c81a8324ce9568868ee4f45e476526273a3dc44dfb4 +a91b8a1b454f84e2732ba08ddac7fd38b5cf07ab7a2ebedec94b299b554e1e6eb3b6f1081da34f +bfb4e982797c08c5697259d95c5636ffc7ca266f3f5fd63397f5cc653df3d1ea99b484511741ab +eb1ea525cabdfb99208c077c81e13e53c50f137b7fdc1783aaa384d6574db3503497d369b88002 +d5b628e15f201e0e423013d394d50c015baa0e9835234c944f6ad8a85b955ff3e8808c93d17279 +75bb2904004fc745f9b51a17c51a4f466bf5f41a6fad5ef50275ddba222065df864466329d44d5 +40a2be1a3c87845ad985b0681a5834a4fa5c16ea67e915713859405e89bb4ec248849b08e9b1f4 +5322bff2ee857b3acf98fab22b86e53525d78bf1b44622136e3a894c1886e2f0d81cbe605f3753 +976af4a429b669d41b1fc2d732896ce4061ceb3deb44ecb9aa2bd4f860d6b227e21f27d18c6642 +1f93990ae0206ed93e5f1afa5d32cb8c32de052c4c60ea51b2fe0871482d8c2211eb5937e038e5 +56aed4e51a3f5172cdd2a76739f59375329c4ca0cf7346d2ae789628313e7d4fb0ec90b9203d08 +c727d608cfe95d200ce5d6cbd28063c4f8da9a634433c19d5a71235d2db7a2f6d625dda200cf42 +b03c51b2c93c81abf69a4e661d8ae9e6aaf4fe7231a3403ae9bd4fddf385369266ce01224f4d73 +fef870877c86559af7355649eadecc75cd55aecb3b25deff40c8504b27d3a849c6066a7967c705 +160499e9d6a19977465cf469b019b5f28058d595aab7f57a9b8c8e44e47745b53ac79c251764a7 +a2fcf6562f26934ca04657d9e5945b738a5af6c392db76bc8aeb154a0db75770aa4ea9d070dbd5 +42db75abe59e5b2e753b9547c2283c8cca6e32775ffcb38f17cbf7f66a7cebdd7db42ab5aff824 +2a1255071795b07a775fae18dedd5b43f9dcb690b0ccc35aa5dfac363bb542b3daee179c6ea751 +687ab54ea15bf3eadd7ed7731bcdfe23db3a5660a75df59c5aaf51a8953dafe0d44a927ea359a8 +3b954adba9b71b3da7fd68696bb1f2d5efcabc8ad7eebf000000ffff0300504b03040a00000000 +000000210015e9f115040900000409000017000000646f6350726f70732f7468756d626e61696c +2e6a706567ffd8ffe000104a46494600010101006000600000ffdb004300030202030202030303 +0304030304050805050404050a070706080c0a0c0c0b0a0b0b0d0e12100d0e110e0b0b10161011 +13141515150c0f171816141812141514ffdb00430103040405040509050509140d0b0d14141414 +141414141414141414141414141414141414141414141414141414141414141414141414141414 +14141414141414ffc00011080090010003012200021101031101ffc4001f000001050101010101 +0100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000 +017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282 +090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465 +666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aa +b2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2 +f3f4f5f6f7f8f9faffc4001f010003010101010101010101000000000000010203040506070809 +0a0bffc400b5110002010204040304070504040001027700010203110405213106124151076171 +1322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a353637 +38393a434445464748494a535455565758595a636465666768696a737475767778797a82838485 +868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8 +c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c030100021103 +11003f00fd53a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a2 +8a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800 +a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a28 +00a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a +2800a28a2800a28a2800a28a2800a2b83f03fc61d17c6be2af11f86637fb26bba2ddcb04969230 +ccd1ab6d12a7a8e991d54fb104f795ad4a73a52e59ab322338cd5e2ee145145645851451400514 +514005145140051451400514514005145140051451400d7758d19dd82aa8c96638007ad53fedcd +37fe8216bff7f97fc6b13e2b7fc92ff187fd81af3ff443d7e52d7d2e5393acd23393a9cbcb6e97 +fd51e4e3b1ff0053715cb7bf99faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00d042d7feff +002ff8d7e45515ef7faa6bfe7fff00e4bff04f33fb6dff00cfbfc7fe01faebfdb9a6ff00d042d7 +feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455147faa6bfe7fff00e4bff043fb6dff00cf +bfc7fe01faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455147faa +6bfe7fff00e4bff043fb6dff00cfbfc7fe01faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00 +d042d7feff002ff8d7e455147faa6bfe7fff00e4bff043fb6dff00cfbfc7fe01faebfdb9a6ff00 +d042d7feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455147faa6bfe7fff00e4bff043fb6d +ff00cfbfc7fe01faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455 +147faa6bfe7fff00e4bff043fb6dff00cfbfc7fe01e95f15bc497de1cf8fde28d6745be7b4bdb6 +d627960bab76e41de7f0208e08e84120f15f6bfecf3fb4369df19b46fb2dd79763e29b4406eac8 +1c2cabd3cd8b3d54f71d549c1e304fe6f568787fc41a8f85b59b4d5b49bb92c751b490490dc447 +0cadfd41e841e08241af7f1f93d3c6e1a34ef69c5593f4efe5f91e661b1f3c3d573fb2dea8fd73 +a2bc77f679fda1b4ef8cda37d96ebcbb1f14da20375640e1655e9e6c59eaa7b8eaa4e0f1827d8a +bf25c461ea616a3a5555a48fb7a75215a0a70774c28a28ae7350a28a2800a28a2800a28a2800a2 +8a2800a28a2800a28a280396f8adff0024bfc61ff606bcff00d10f5f94b5fab5f1514b7c30f178 +0324e8f78001ff005c1ebf2afec73ffcf093fef835fa370ab4a955bf747ca6757e787a321a2a6f +b1cfff003c24ff00be0d1f639ffe7849ff007c1afbbe65dcf9bb321a2a6fb1cfff003c24ff00be +0d1f639ffe7849ff007c1a399770b321a2a6fb1cff00f3c24ffbe0d1f639ff00e7849ff7c1a399 +770b321a2a6fb1cfff003c24ff00be0d1f639ffe7849ff007c1a399770b321a2a6fb1cff00f3c2 +4ffbe0d1f639ff00e7849ff7c1a399770b321a2a6fb1cfff003c24ff00be0d1f639ffe7849ff00 +7c1a399770b321a29594ab1041047506b57c2be15d57c6dafd9e8ba2d9c97da8dd3ec8e18ff524 +f40a07249e00144a518c5ca4ec9028b93b2dcd0f86b6be25bcf1c6911f8405c7fc245e7036ad6c +70cac3a927a05c677678c673c57ea7e86ba8268d62bab3dbcbaa08505d3daa9588cb81b8a03ced +ce719af38f809f0134bf82ba0607977de21ba41f6dd436fe3e5c79e4203f8b1193d80f55afc8f3 +ccca9e61592a51f763d7abff0081d8fb9cbb092c2d37cef57d3b0514515f347ac1451450014514 +500145145001451450014514500145145001451450014514500145145001451450014514500145 +14500145145007e67fc50f0aeabe36fda23c55a2e8b6725f6a375ac5c2470c7fef9c927a050392 +4f000afb6fe027c04d2fe0ae8181e5df7886e907db750dbf8f971e79080fe2c464f603a3f067c2 +bd13c13e20f106bb6b0f9daceb77725cdcde4a06f0acdb8449fdd51c7d4f27b01d957d26639c4f +154a186a5a42295fcda5f97fc39e4e17031a339559eb26dfc828a28af9b3d60a28a2800a28a280 +0a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2 +800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28 +a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a +28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a280 +0a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2 +800a28a2800a28a2803fffd9504b030414000600080000002100a364236b8d0100003203000011 +0000007070742f7072657350726f70732e786d6cacd2516fdb201000e0f749fb0f16ef0430368e +ad38951d1c69d21ea6aafd01c8c6099a310848dba9ea7f1f73d22add34a99af6742074c777709b +9b273d250fd27965e61a901506899c7b33a8f95083fbbb3d5c83c407310f6232b3acc10fe9c1cd +f6f3a78dadac935ece418498facd25b1d0ec2b51836308b642c8f747a9855f192be778361aa745 +885b774083138ff1023da1146386b45033b8e4bb8fe49b7154bde4a63fe908381771725a24fea8 +ac7fad663f52edba8f77a46d6c523e85af3e5c56c9c9a91a3c7705db7565d64086e90e66244b61 +5b762d649cd00263829bb478f9954db26a50be176ef8a2c54176830a5c04f18a23d91f3cad7a67 +bc19c3aa37fad227b2e6513a6bd4d22ac197f77a10530d3040db0d5a70ef8d9c9206b3b48145b9 +6e6046d312362de7b06d9b75ce588a7382df8c7214a7292c466ed57fe4d1b460c5df887b9e77fb +a6e11077bb0e6639ed60b9a60466ac4d69dbc540b33331affaa370e1ce89fe7b9c9b5b39b6c2cb +e10d9aff0b34bd86926be4392edf8e7e1ff3ed4f000000ffff0300504b03041400060008000000 +2100d8fd8d8fac000000b6000000130000007070742f7461626c655374796c65732e786d6c0ccc +490e82301840e1bd897768fe7d2d43512414c2202b77ea012a9421e94068a312e3dd65f9f2922f +cd3f4aa29758ec643403ffe00112ba35dda407068f7b836340d671dd7169b460b00a0b79b6dfa5 +3c714f7973ab1457ebd0a6689b7006a3737342886d47a1b83d9859e8edf56651dc6db90ca45bf8 +7bd3952481e71d89e29306d4899ec137aa8220a2b4c0a7cbe5886948035c7a34c67154d6d5b9a9 +fd2a2c7e40b23f000000ffff0300504b0304140006000800000021006720e9636d010000c60200 +00110000007070742f7669657750726f70732e786d6c8c52c96ec23010bd57ea3f58be978434a4 +3422e152950b874ad0de2dc7492c39b6e5314bf8fa4e365ac485db2c6fdebc5956eb73a3c85138 +904667743e0b29119a9b42ea2aa3dffbcf972525e0992e98325a64b41540d7f9f3d3caa647294e +5f8e2081869465b4f6dea64100bc160d8399b14263ae34ae611e5d5705856327246e5410856112 +344c6a3ad6bb47ea4d594a2e3e0c3f3442fb81c409c53c8a875a5a98d8ec236cd609409abefa46 +528ec3e90ea87efa113b1fb1de38516c45e9095c70558b240a69f03fb737b64fbdc749d2a7827b +1e50b2107f2edfa962f0086866f766e3649151bc02d4e6b4392018b0572f898fc023733bce9498 +e2d039f98aa5702678c345440952ccc35e0246dbfb6870adb2a971b2929a9c331a23a6cd68148f +90b16107aa3a255bf0579b60192e0ff76cdc85126b5066341fc69e207df075194f2dff483af2eb +e4839cdbbd54b8869d651cbf857094f686d7c14fe4ed640e8cc30be6bf000000ffff0300504b03 +04140006000800000021007749ef2667010000b202000011000801646f6350726f70732f636f72 +652e786d6c20a2040128a000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000008c92d14e +c2301486ef4d7c87a5d76edd980a59b692a8e18248422246e35dd31e46e3d62e6d61f03ebe892f +6637d800e5c2cbe6ffce97d3bf4dc7dbb2f036a08d5032435110220f24535cc83c43af8b893f42 +9eb154725a280919da814163727d95b22a614ac35cab0ab415603c67922661558656d65609c686 +ada0a426708474e152e9925a77d439ae28fba439e04118dee3122ce5d452dc08fdaa37a28392b3 +5e59ad75d10a38c3504009d21a1c05113eb21674692e0eb4c909590abbabe022da853dbd35a207 +ebba0eeab845ddfe117e9f3dbfb457f5856cba628048ca5962852d80cc550d7aae84b4fe5c7f7f +19b732b5aeed14f74803330dd42a4da66b99df78d37521e81ee982a6f1821a3b738fb314c01f76 +bfd8bf7933a261239ac7258396e88fe9a1a9bd1fb8e76e98ecfbe892b7f8f1693141641046233f +8cfde87e110e93284eee861fcd6a67f347617958e0ffc6db241a9d183b0169373eff65e4070000 +ffff0300504b030414000600080000002100e329ddaa0f0200000705000010000801646f635072 +6f70732f6170702e786d6c20a2040128a000010000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000a454c16edb300cbd0fd83f18be274eba2d180245459720c8a1590dc44dcf8a45dbc414c990 +b8b4ddf7ec4ff66393e5da4dd6a040579f1ec9e727fa9132bb7cd8abe800d6a1d1b3783c1cc511 +e8dc48d4e52cbecd9683af71e448682994d1308b1fc1c597fce307965a53832504177909ed6671 +45544f93c4e515ec851bfab2f695c2d8bd201fda32314581392c4cfe730f9a928bd16892c00381 +962007752f18b78ad303fdafa83479d39fdb668fb5d7e32c332454867be023963c07ecce58e99a +5c0bd8555d2bcc057937f81a736b9c2928ba094744a9b9079b1ad4c49263a2f7029c3f3b44cbd0 +1aff660169874ab2e44c95a5c28ad28aba0a871f456ca35082e363963c21f6dd10045a0bd80aa5 +04fd54f5e99398add77385752874906d72a160ee0de185500ebc749f602b10cdb05381d6330f34 +3d404ec6460e7ff9714fe268271c3436cee283b02834c52dad0d0256b523cbb760ef9b5112449b +bcb25890b07eb62ce919011ebf788cf133ff14081ebc4a6cb516e0b07c8bf8f80de24ba3d08f0c +09d4fb4f084130d5e353bb332405eea6f00b4067dcff72ec7ee8a1f5be6de7caeb9fb4d7a3b950 +b8b3f85a2dbac6b2a2b38c76dbcf969e6fc020b57f7ef76bfdc2a4ee73fff9c06bd43fdc6d9d99 +8520e896f134c93695b020fd7dee97b54fb09577c2aa863faf842e41769c9785e62a6fdbff1a1f +4f8623ff845bdbe59a7bd9fd70f85f000000ffff0300504b01022d0014000600080000002100df +cc18f5ad010000460c00001300000000000000000000000000000000005b436f6e74656e745f54 +797065735d2e786d6c504b01022d001400060008000000210068f874a103010000e20200000b00 +000000000000000000000000e60300005f72656c732f2e72656c73504b01022d00140006000800 +00002100635c23b4c00000003701000020000000000000000000000000001a0700007070742f73 +6c696465732f5f72656c732f736c696465312e786d6c2e72656c73504b01022d00140006000800 +000021001b2e35070c010000d00300001f00000000000000000000000000180800007070742f5f +72656c732f70726573656e746174696f6e2e786d6c2e72656c73504b01022d0014000600080000 +002100bcd1a735de0200002c0e00001400000000000000000000000000690a00007070742f7072 +6573656e746174696f6e2e786d6c504b01022d0014000600080000002100303a84e5ea0200006c +0600001500000000000000000000000000790d00007070742f736c696465732f736c696465312e +786d6c504b01022d0014000600080000002100d5d192f1bc000000370100002c00000000000000 +000000000000961000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c +61796f7574362e786d6c2e72656c73504b01022d0014000600080000002100d5d192f1bc000000 +370100002c000000000000000000000000009c1100007070742f736c6964654c61796f7574732f +5f72656c732f736c6964654c61796f7574372e786d6c2e72656c73504b01022d00140006000800 +00002100d5d192f1bc000000370100002c00000000000000000000000000a21200007070742f73 +6c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574392e786d6c2e72656c73 +504b01022d0014000600080000002100d5d192f1bc000000370100002d00000000000000000000 +000000a81300007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f +757431302e786d6c2e72656c73504b01022d0014000600080000002100d5d192f1bc0000003701 +00002c00000000000000000000000000af1400007070742f736c6964654c61796f7574732f5f72 +656c732f736c6964654c61796f7574382e786d6c2e72656c73504b01022d001400060008000000 +2100d5d192f1bc000000370100002d00000000000000000000000000b51500007070742f736c69 +64654c61796f7574732f5f72656c732f736c6964654c61796f757431312e786d6c2e72656c7350 +4b01022d0014000600080000002100d5d192f1bc000000370100002c0000000000000000000000 +0000bc1600007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f75 +74312e786d6c2e72656c73504b01022d0014000600080000002100d5d192f1bc00000037010000 +2c00000000000000000000000000c21700007070742f736c6964654c61796f7574732f5f72656c +732f736c6964654c61796f7574322e786d6c2e72656c73504b01022d0014000600080000002100 +d5d192f1bc000000370100002c00000000000000000000000000c81800007070742f736c696465 +4c61796f7574732f5f72656c732f736c6964654c61796f7574332e786d6c2e72656c73504b0102 +2d0014000600080000002100d5d192f1bc000000370100002c00000000000000000000000000ce +1900007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574342e +786d6c2e72656c73504b01022d001400060008000000210069a25f2115010000c70700002c0000 +0000000000000000000000d41a00007070742f736c6964654d6173746572732f5f72656c732f73 +6c6964654d6173746572312e786d6c2e72656c73504b01022d0014000600080000002100e40b4c +2ac6040000891000002200000000000000000000000000331c00007070742f736c6964654c6179 +6f7574732f736c6964654c61796f757431312e786d6c504b01022d0014000600080000002100ee +0bf3bf90040000a70f00002200000000000000000000000000392100007070742f736c6964654c +61796f7574732f736c6964654c61796f757431302e786d6c504b01022d00140006000800000021 +005a9d379569050000671500002100000000000000000000000000092600007070742f736c6964 +654c61796f7574732f736c6964654c61796f7574332e786d6c504b01022d001400060008000000 +21008f55c3fd730400006b0f00002100000000000000000000000000b12b00007070742f736c69 +64654c61796f7574732f736c6964654c61796f7574322e786d6c504b01022d0014000600080000 +0021007555dfd224050000701200002100000000000000000000000000633000007070742f736c +6964654c61796f7574732f736c6964654c61796f7574312e786d6c504b01022d00140006000800 +00002100fd00fcd1320800004e3600002100000000000000000000000000c63500007070742f73 +6c6964654d6173746572732f736c6964654d6173746572312e786d6c504b01022d001400060008 +00000021009119fff8d4040000951300002100000000000000000000000000373e00007070742f +736c6964654c61796f7574732f736c6964654c61796f7574342e786d6c504b01022d0014000600 +080000002100d60634cc2e060000371f000021000000000000000000000000004a430000707074 +2f736c6964654c61796f7574732f736c6964654c61796f7574352e786d6c504b01022d00140006 +00080000002100ccacc02fe8030000060c00002100000000000000000000000000b74900007070 +742f736c6964654c61796f7574732f736c6964654c61796f7574362e786d6c504b01022d001400 +06000800000021005632cb5c8e030000fa0900002100000000000000000000000000de4d000070 +70742f736c6964654c61796f7574732f736c6964654c61796f7574372e786d6c504b01022d0014 +0006000800000021004ba90907dd050000651700002100000000000000000000000000ab510000 +7070742f736c6964654c61796f7574732f736c6964654c61796f7574382e786d6c504b01022d00 +140006000800000021004a0963b7a1050000201700002100000000000000000000000000c75700 +007070742f736c6964654c61796f7574732f736c6964654c61796f7574392e786d6c504b01022d +0014000600080000002100d5d192f1bc000000370100002c00000000000000000000000000a75d +00007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574352e78 +6d6c2e72656c73504b01022d001400060008000000210068b9a05cc3060000c920000014000000 +00000000000000000000ad5e00007070742f7468656d652f7468656d65312e786d6c504b01022d +000a00000000000000210015e9f11504090000040900001700000000000000000000000000a265 +0000646f6350726f70732f7468756d626e61696c2e6a706567504b01022d001400060008000000 +2100a364236b8d010000320300001100000000000000000000000000db6e00007070742f707265 +7350726f70732e786d6c504b01022d0014000600080000002100d8fd8d8fac000000b600000013 +00000000000000000000000000977000007070742f7461626c655374796c65732e786d6c504b01 +022d00140006000800000021006720e9636d010000c60200001100000000000000000000000000 +747100007070742f7669657750726f70732e786d6c504b01022d00140006000800000021007749 +ef2667010000b2020000110000000000000000000000000010730000646f6350726f70732f636f +72652e786d6c504b01022d0014000600080000002100e329ddaa0f020000070500001000000000 +000000000000000000ae750000646f6350726f70732f6170702e786d6c504b0506000000002500 +25004d0b0000f37800000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000002004f006c00650050007200650073003000300030000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001800020103 +00000005000000ffffffff00000000000000000000000000000000000000000000000000000000 +000000000000000003000000fc010000000000005200690063006800450064006900740046006c +006100670073000000000000000000000000000000000000000000000000000000000000000000 +0000000000001c000200ffffffffffffffffffffffff0000000000000000000000000000000000 +000000000000000000000000000000000000000b0000000c000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000ffffffffffffff +ffffffffff00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000fa020000040000002f528f00040000002d010400070000 +00fc020100000000000000040000002d010500120000002403070065026a03e4086a03e408af02 +5a0a2504e4089b05e408e0046502e004040000002d010200040000002d01030004000000f00104 +00040000002701ffff040000002c010000070000001604cf08a80f00000000030000001e000400 +00002c010000040000002701ffff0300000000000000000000000000000000000000000000004e +414e49000000000000000001000008000000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000 +01050000 +05000000 +0d000000 +4d45544146494c455049435400 +0a450000 +28d9ffff +c2010000 +08000a45d8260000 +010009000003dd00000006001200000000000400000003010800050000000b0200000000050000 +000c02cf08a80f030000001e0007000000fc020000ffffff000000040000002d01000008000000 +fa02050000000000ffffff00040000002d0101000e00000024030500ffffffffffffcf08a80fcf +08a80fffffffffffff08000000fa0200000000000000000000040000002d01020007000000fc02 +0000ffffff000000040000002d01030004000000f001000007000000fc0200004472c400000004 +0000002d0100000400000006010100040000002d010100120000002403070065026a03e4086a03 +e408af025a0a2504e4089b05e408e0046502e004040000002d0102000400000006010100040000 +002d01030008000000fa020000040000002f528f00040000002d01040007000000fc0201000000 +00000000040000002d010500120000002403070065026a03e4086a03e408af025a0a2504e4089b +05e408e0046502e004040000002d010200040000002d01030004000000f0010400040000002701 +ffff040000002c010000070000001604cf08a80f00000000030000001e00040000002c01000004 +0000002701ffff030000000000 +}{\result{\pict\wmetafile8\picw10020\pich5638\picwgoal10020\pichgoal5638 +010009000003dd00000006001200000000000400000003010800050000000b0200000000050000 +000c02cf08a80f030000001e0007000000fc020000ffffff000000040000002d01000008000000 +fa02050000000000ffffff00040000002d0101000e00000024030500ffffffffffffcf08a80fcf +08a80fffffffffffff08000000fa0200000000000000000000040000002d01020007000000fc02 +0000ffffff000000040000002d01030004000000f001000007000000fc0200004472c400000004 +0000002d0100000400000006010100040000002d010100120000002403070065026a03e4086a03 +e408af025a0a2504e4089b05e408e0046502e004040000002d0102000400000006010100040000 +002d01030008000000fa020000040000002f528f00040000002d01040007000000fc0201000000 +00000000040000002d010500120000002403070065026a03e4086a03e408af025a0a2504e4089b +05e408e0046502e004040000002d010200040000002d01030004000000f0010400040000002701 +ffff040000002c010000070000001604cf08a80f00000000030000001e00040000002c01000004 +0000002701ffff030000000000 +}}} \ No newline at end of file diff --git a/sw/qa/extras/htmlexport/data/ole2.png b/sw/qa/extras/htmlexport/data/ole2.png new file mode 100644 index 000000000..fdad35484 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/ole2.png differ diff --git a/sw/qa/extras/htmlexport/data/paint-ole-bitmap-format.odt b/sw/qa/extras/htmlexport/data/paint-ole-bitmap-format.odt new file mode 100644 index 000000000..d83b89459 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/paint-ole-bitmap-format.odt differ diff --git a/sw/qa/extras/htmlexport/data/paint-ole.ole b/sw/qa/extras/htmlexport/data/paint-ole.ole new file mode 100644 index 000000000..e8e78490e --- /dev/null +++ b/sw/qa/extras/htmlexport/data/paint-ole.ole @@ -0,0 +1,199 @@ +{\object\objemb{\*\objclass PBrush}\objw13852\objh7822{\*\objdata +01050000020000000700000050427275736800000000000000000000440000 +424de64300000000000036000000280000004c0000004c0000000100180000000000b043000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9894f6241ced241ced +7d79f5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4039ef241ced241ced241cedf8f8feffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1bffa322aee241ced241ced625cf2f8f8feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6a2f7241ced241ced241ced625cf2f8f8feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff918df6241ced241ced241ced625cf2f8f8feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff918df6241ced241ced241ced625cf2f8f8feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918df6241ced241ced241ced625cf2 +f8f8feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918df6241ced241ced241ced625cf2f8f8feffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918df6241ced241ced241ced706af4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918df6241ced241ced241ced7d79f5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff3931ef241ced241ced241ced625cf2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9894f6241ced241ced7d79f5ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffc1bffa322aee241ced241ced241cedbab8f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2b23ee241ced241ced2b23eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1bffa4039ef241ced241ced4d47f1ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe241ced241ced241cedadaaf8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeafd241ced241ced241cedffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff8f8fe7772f4241ced241ced241ced2b23eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3931ef241ced241cedbab8f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8480f5241ced +241ced241ced241ced9894f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8480f5241ced241ced4d47f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9894f6241ced241ced241ced4039efa6a2f7ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeaeafd241ced241ced241cedadaaf8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe2b23ee241ced241ced2b23eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3931ef +241ced241ced241ced625cf2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8480f5241ced241ced2b23eeadaaf8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbab8f9322aee241ced241ced241cedbab8f9ffffffffffffffffff +ffffffffffffffffffffffffffffffffffff2b23ee241ced241ced9894f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1f1fe706af4241ced241ced4d47f1ffffffffffffffffffffffffffffffffffffffffffffffffbab8f9241ced241ced +241cedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeafd2b23ee241ced241cedcfcdfbffffffffffffffffffffffffffffffffffff7d79f5241ced241ced241ced2b23eeffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d79f5241ced241ced8b87f6ffffffffffffffffffffffffffffffd6d4fb241ced241ced241ced2b23ee9894f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffc8c6fa241ced241ced4039effffffffffffffffffffffffff8f8fe5b55f2241ced241ced5b55f2eaeafdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3931ef241ced241ced +bab8f9fffffffffffff8f8fe625cf2241ced241ced241cedd6d4fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8480f5241ced241ced4d47f1f8f8fef8f8fe625cf2241ced241ced241ced918df6 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeafd2b23ee241ced241ced625cf2746ff3241ced241ced241ced918df6ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6a2f7241ced241ced241ced241ced241ced241ced918df6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff918df6241ced241ced241ced241cec6963f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff8f8fe413af0241ced241ced241cedbab7f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe625cf2241ced241cee241ced241ced544ef1f8f8fe +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe625cf2241ced241ced241cec281fee241ced241ced625cf2f8f8feffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbab8f94d47f1241ced241ced241ced918df69f9bf7241ced241ced241ced625cf2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff8f8fe6963f3241ced241ced241ced241ced918df6ffffffffffff918df6241ced241ced241ced9894f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe625cf2241ced +241ced241ced2b23ee9894f6ffffffffffffffffffffffff8b87f6241ced241ced2b23eedddbfcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7772f4241ced241ced241ced7d79f5eaeafdffffffffffffffffffffffffffffff +f8f8fe4d47f1241ced241ced544ef1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6d4fb241ced241ced241ced918df6ffffffffffffffffffffffffffffffffffffffffffffffffd6d4fb2b23ee241ced241ced9894f6ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeafd544ef1241ced241ced6963f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9894f6241ced241ced2b23eedddbfcffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffadaaf8322aee241ced241ced241cedd6d4fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff544ef1241ced241ced544ef1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe6963f3241ced241ced241ced241ced +9894f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4e3fd2b23ee241ced241cedbab8f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe625cf2241ced241ced241ced4640f0cfcdfbffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8480f5241ced241ced4d47f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe625cf2241ced241ced241ced8480f5f8f8feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeafd2b23ee +241ced241ced9894f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd6d4fb8480f54039ef241ced241ced241ced918df6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9894f6241ced241ced2b23eedddbfcffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe6963f3 +241ced241ced241ced241ced241ced918df6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff544ef1241ced241ced544ef1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe625cf2241ced241ced241ced241ced3931ef9f9bf7ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4e3fd2b23ee241ced241cedbab8f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe625cf2241ced241ced241ced7772f4c8c6faffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8480f5241ced241ced4d47f1f8f8feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8c6fa544ef1241ced241ced241ced918df6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeaeafd2b23ee241ced241ced706af4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffc8c6fa5b55f2241ced241ced241ced241ced918df6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6a2f7241ced241ced2b23ee +f8f8feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeafd625cf2241ced241ced241ced241ced2b23ee +9894f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffadaaf85b55f2adaaf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffadaaf8322aee241ced241ced241ced2b23ee8480f5eaeafdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8fe6963f3241ced241ced241ced241ced8480f5eaeafdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff8480f5241ced241ced241ced4640f0cfcdfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +4039ef241ced241ced8480f5f8f8feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1bffa5b55f2a6a2f7ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 +000000000000000000000000000000000000000001050000050000000d0000004d45544146494c45504943540049060000b7f9ffff2c1b00000800490649060000 +010009000003920d00000000690d000000000400000003010800050000000b0200000000050000000c024d004d00030000001e0004000000070104000400000007010400690d0000410b2000cc004c004c00000000004c004c0000000000280000004c0000004c0000000100080000000000000000000000000000000000 +000000000000000000000000ffffff00c1bffa005b55f200a6a2f7004039ef00241ced008480f500f8f8fe004640f000cfcdfb006963f300eaeafd00adaaf800322aee002b23ee00625cf2009894f600c8c6fa00918df600544ef100706af4007772f4004d47f1003931ef009f9bf700e4e3fd00bab8f900d6d4fb00dddb +fc007d79f5008b87f600241cec00281fee00241cee00413af000bab7f900746ff300f1f1fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011106061e0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010506060608 +0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020e0606100801010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010406060610080101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101130606061008010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010113060606100801010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +011306060610080101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101130606061008010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101011306060615010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101130606061e010101010101010101010101010101 +0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011806060610010101010101010101010101010101010101011106061e0101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101020e0606061b0101010101010101010101010101010101010f06060f0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102050606170101010101010101010101010101010101080606060d010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010c06060601010101010101010101010101010108160606060f010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011806061b01010101010101010101 +010101010706060606110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010107060617010101010101010101010101011106060605040101010101010101010101010101010101010101010101010101010101010101010101010101010101 +0101010101010101010101010c0606060d0101010101010101010101080f06060f01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011806060610010101010101010101010706060f0d0101010101010101010101010101010101 +0101010101010101010101010101010101010101010101010101010101010101010101010101011b0e0606061b0101010101010101010f0606110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126150606170101010101 +0101011b0606060101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010c0f06060a0101010101011e0606060f01010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +0101010101010101010101010101010101011e06061f01010101011c0606060f1101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101120606050101010108030606030c010101010101010101010101010101010101 +0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011806061b010108100606061c010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010706061708 +08100606061301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010c0f0606102506060613010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101040606060606061301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010113060606200b010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010823060606240101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010810 +062206061408010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010810060620210606100801010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101011b17060606131906060610010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101080b06060606130101130606061101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010108100606060f11010101011f06060f1d010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101160606061e +0c0101010101081706061401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011c0606061301010101010101011c0f0606110101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010c1406060b010101010101010101011106060f1d010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010d0e0606061c0101010101010101010101140606140101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101080b06060606110101010101010101010101011a0f06061b0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010810060606090a0101 +010101010101010101010101070606170101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101081006060607080101010101010101010101010101010c0f060611010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101011c0705060606130101010101010101010101010101010101011106060f1d0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101080b060606060613010101010101010101010101010101010101010114060614010101010101 +0101010101010101010101010101010101010101010101010101010101010101010101010108100606060618190101010101010101010101010101010101010101011a0f06061b01010101010101010101010101010101010101010101010101010101010101010101010101010101010810060606161201010101010101 +0101010101010101010101010101010101070606170801010101010101010101010101010101010101010101010101010101010101010101010101010112140606061301010101010101010101010101010101010101010101010101010c0f06061501010101010101010101010101010101010101010101010101010101 +01010101010101010112030606060613010101010101010101010101010101010101010101010101010101010406060f08010101010101010101010101010101010101010101010101010101010101010101010c10060606060f110101010101010101010101010101010101010101010101010101010101010d030d0101 +01010101010101010101010101010101010101010101010101010101010101010d0e0606060f070c010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101080b06060606070c010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010107060606090a01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101050606070801010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010203040101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101040000002701ffff030000000000 +}{\result{\pict{\*\picprop}\wmetafile8\picw13852\pich7822\picwgoal13852\pichgoal7822 +}}} diff --git a/sw/qa/extras/htmlexport/data/paint-ole.png b/sw/qa/extras/htmlexport/data/paint-ole.png new file mode 100644 index 000000000..8388f7382 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/paint-ole.png differ diff --git a/sw/qa/extras/htmlexport/data/paint-ole.xhtml b/sw/qa/extras/htmlexport/data/paint-ole.xhtml new file mode 100644 index 000000000..efe3326ad --- /dev/null +++ b/sw/qa/extras/htmlexport/data/paint-ole.xhtml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sw/qa/extras/htmlexport/data/pdf-ole.odt b/sw/qa/extras/htmlexport/data/pdf-ole.odt new file mode 100644 index 000000000..184449a4f Binary files /dev/null and b/sw/qa/extras/htmlexport/data/pdf-ole.odt differ diff --git a/sw/qa/extras/htmlexport/data/reqif-aschar-objsize.odt b/sw/qa/extras/htmlexport/data/reqif-aschar-objsize.odt new file mode 100644 index 000000000..6028b54a4 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-aschar-objsize.odt differ diff --git a/sw/qa/extras/htmlexport/data/reqif-chinese.odt b/sw/qa/extras/htmlexport/data/reqif-chinese.odt new file mode 100644 index 000000000..b99c57cae Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-chinese.odt differ diff --git a/sw/qa/extras/htmlexport/data/reqif-jpg-img.xhtml b/sw/qa/extras/htmlexport/data/reqif-jpg-img.xhtml new file mode 100644 index 000000000..da7276192 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-jpg-img.xhtml @@ -0,0 +1,4 @@ + + OLE Object + + diff --git a/sw/qa/extras/htmlexport/data/reqif-list.xhtml b/sw/qa/extras/htmlexport/data/reqif-list.xhtml new file mode 100644 index 000000000..5433ee10a --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-list.xhtml @@ -0,0 +1,11 @@ +Heading + + + First + + Second + + Third + + + diff --git a/sw/qa/extras/htmlexport/data/reqif-no-lang.odt b/sw/qa/extras/htmlexport/data/reqif-no-lang.odt new file mode 100644 index 000000000..c831921a4 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-no-lang.odt differ diff --git a/sw/qa/extras/htmlexport/data/reqif-objdata-presentationdatasize.odt b/sw/qa/extras/htmlexport/data/reqif-objdata-presentationdatasize.odt new file mode 100644 index 000000000..231a7c572 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-objdata-presentationdatasize.odt differ diff --git a/sw/qa/extras/htmlexport/data/reqif-ole-data.ole b/sw/qa/extras/htmlexport/data/reqif-ole-data.ole new file mode 100644 index 000000000..d3dc23d79 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-ole-data.ole @@ -0,0 +1 @@ +{\pict} diff --git a/sw/qa/extras/htmlexport/data/reqif-ole-data.xhtml b/sw/qa/extras/htmlexport/data/reqif-ole-data.xhtml new file mode 100644 index 000000000..5f9c89400 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-ole-data.xhtml @@ -0,0 +1,3 @@ + + + diff --git a/sw/qa/extras/htmlexport/data/reqif-ole-img.jpg b/sw/qa/extras/htmlexport/data/reqif-ole-img.jpg new file mode 100644 index 000000000..ca9183e9d Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-ole-img.jpg differ diff --git a/sw/qa/extras/htmlexport/data/reqif-ole-img.png b/sw/qa/extras/htmlexport/data/reqif-ole-img.png new file mode 100644 index 000000000..fdad35484 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-ole-img.png differ diff --git a/sw/qa/extras/htmlexport/data/reqif-ole-img.xhtml b/sw/qa/extras/htmlexport/data/reqif-ole-img.xhtml new file mode 100644 index 000000000..df3f4a048 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-ole-img.xhtml @@ -0,0 +1,6 @@ + + + OLE Object + + + diff --git a/sw/qa/extras/htmlexport/data/reqif-ole-nodata.odt b/sw/qa/extras/htmlexport/data/reqif-ole-nodata.odt new file mode 100644 index 000000000..a4d3243a8 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-ole-nodata.odt differ diff --git a/sw/qa/extras/htmlexport/data/reqif-ole-odg.ole b/sw/qa/extras/htmlexport/data/reqif-ole-odg.ole new file mode 100644 index 000000000..de674fe3c --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-ole-odg.ole @@ -0,0 +1,146 @@ +{\object\objemb{\*\objclass }{\*\objdata +000000000200000000000000000000000000000000240000d0cf11e0a1b11ae1000000000000000000000000000000003b000300feff09000600000000000000 +00000000010000000f00000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffffefffffffeffffff05000000060000000700000008000000090000000a000000 +0b0000000c0000000d0000000e000000feffffff10000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff52006f006f007400200045006e007400720079000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +000000000000000000000000feffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +000000000000000000000000feffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +000000000000000000000000feffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +000000000000000000000000feffffff000000000000000001000000fefffffffefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0100feff030a0000ffffffff71b78b44e2cfc447bcdf1fbf378e202c1b0000004c696272654f6666 +6963652e44726177446f63756d656e742e310010000000456d626564646564204f626a6563740000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000143700000000000010270000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000504b0304140000080000a26dbe4c9f032ec42b0000002b000000080000006d696d65747970656170 +706c69636174696f6e2f766e642e6f617369732e6f70656e646f63756d656e742e6772617068696373504b0304140008080800a26dbe4c000000000000000000 +0000000c00000073657474696e67732e786d6cb5585b6fda30147edfaf405127b50f107ad13a22a02a6d59abb18d15e89e0fc9815875ecc8764af9f73b49a0a2 +102a1af013c2f6f9ce77ee769a57af11afbca0d24c8a96735aab3b1514be0c9898b69cd1b05bfdee5cb5bf34e564c27cf402e927110a53d5680c1dd1151217da +cbb75b4ea284274133ed0988507bc6f7648c6229e6ad9ef63265f9ca2b67e2b9e584c6c49eebce66b3daecbc26d5d43d6d341a6eb6bb3c1a2bd404052623bc9b +c2559955b5be141336dd15253fbd2a2fa57c239d0ae48665c4cfeaf50b37ffbf3cad23c677d5959eadfa328a89f398bff3150816ed0a939eddb03a67f531f7c6 +1bf745b05652e4cc692ff3619906ede6c239f94f95198cd21ca92c96538e2d87547a2f0c676fd9e314c9bd9779623a75c0b54218cad8596e9a794c9b4c18a75d +6fba9b209f02eee1c4d841fec7021316419f5ed41b8dbde1ef914dc342ea54365be00b16d378ec1ec17c2151595e7d2694d771cce7238dea160cac911e4bc911 +84d3362ac1727ee93013413c04f2cde8b1b786af8d22964efbe878ac400463d098287ee2ea1014ba31703203bf9e778e8e13224855179e2c48b8da9000a8a0a6 +e5b81cb31b5202be417543054dad282da421d15ae7184a553eeb6e2497caaaf57e3962b7a043abbc8292bc70020937446d608a3bcbe9d965c960dc45630cba52 +18bd2dcf27c075c944ffa12060d4e3ad3a755a8edb3d18df6eb4c372c41ef44f54e25a3310fd44f826c9da9785e83ce83e99693a523e9341d61574c07f3e7c2f +7dafa3ab2893ad29a169b0de090fe8a62e337d985a5470cf820045aa636badefeda214fd372dd8b362c838daf5d39059e1df6302ef4460b5e594a52621784408 +a4e0730b96ff42d089c29160ebb5b9b8485c96c3cd922da101a6ba52d1eba168325e9485563055108783248a6c35e02cdbfe26c0995977fb3eb7fa0c16d58308 +307d67d1fcedc15c261bbe5f641c97b32a5df5244f5233f7525950f90b2deece187d88299e4a460334c9fa65e7605e4755084f55f7eda2c304a8f92e9407f082 +4ff973f38fb8e152dbe81b039f8aff969ebd11f1325215defff680a60a427560e0511cd0ac4ca338c428e61fcccded1367ebf3cfdd78d2bbdb3efab4ff03504b +07089f6ee54e2b03000036120000504b0304140008080800a26dbe4c0000000000000000000000000b000000636f6e74656e742e786d6cbd58518fa336107eef +af409cd437e290dcdd6ee826275555a54abba753774faaeecd6b0cb8c518d92624fdf53736e09864c9a25eb52f41d8df371e7f339ec1b9fb74e065b0a7523151 +6dc378b10c035a1191b22adf865f9f7e8f6ec34fbb9fee4496314293549086d34a4744541a9e01b02b9574b3dbb0915522b0622aa930a72ad1241135ad0656e2 +a313bb5637a2f4b19c4db7609fade941cf251bec888b9fe7af6cc13e3b95b89d4b365810d5a767622ef9a0ca2813a03aafb166675e1c4a56fdb30d0badeb04a1 +b66d17ed7a21648ee2cd6683ecac7398385cddc8d2a252826849cd620ac58b180d584e359eeb9fc1fa2e550d7fa672b63458e38ba8d6922a80c0764d62ce33e4 +7346f9b5cf6767d73e9f90991458cece330b1ea7ca3a9d9f2aebd4e772ac8b89f8dea20798b43f0ff7a7bc927cee5a063b928a4856cfde6687f6f94208e7aa21 +7487ddbabb5a2edfa3eedd43b757e1ad649a4a0f4eaec2092e89535cf09744035c8c0011d1bd497977888c106a82b042ddb403ab74d2f45f0ff78fa4a01c9fc0 +ec7570c42aa5717552467156ce8e0260279216576c762a18ecc5d19126192615ff8024ad85d42e40d9fc2600abac9c4685e6e5740933b303349769fa2214dc59 +232867504ca23da3edbb70d49dae27e6e62c316da97f8d62417e2fb84a8897c8605c3981543d352e99bbde9a89a64abb387402d2434d253353b8b4b46464c18f +5629fe83c9be1f7b16464d8ad172a85c6e4b2f9a1122e20a12190eaca8138f3dee79921fe699338754a4d9b9c5b38245945aeb97f2e1e94f64e622d3f2a1a9f5 +2b799f3aab70377cd774754c213790c1f74d946142a3949252edeebafee48683eeddf8bd0def19343b2b6ff0882ba812d04406281ccde336fc19d742fd7286eb +06c36064dae0a39c562004943a2938ae46889a6902cd608f25b3d987e6bb0626b359be19e05b38f75968715d3187786bad60c9f87f8ca33a2a4df90f39d71096 +e257f2eb8479139f1e692e68f0f58f498706c09b78f3840b61baee852f6ee247574753c5a11fc78d16a68392c8da7155c3fe8e7c4debd82dd67bd9df0fa21ae7 +de562fa9b9bca0e612d70523c3708da5b9a2d997a823996f8b14cb341cecf694a886c24aa5665405c6017b3f023a8e0a21d9bfc254e208972c8782f977a334cb +8ee119706fe8e404e30cfa33ed5146912897a28d0acaf202ea74864b05b3994838abdc28dc3bdedf10eec65b969a4fde78f1f1c306868df69e1ed3e27cb9d006 +c4c076b36eeb6ec4df3cac6b76346c8250d3732ed7459391ee279e457a742f7d487777560b13d84e95ce57f31ef73af9b1b2b9614739dc8aa8b419d1cffd4633 +dc943aec4d120889e0912a704d2f0dd94c71c11ae5c39761a6c447734f8387687477767aed578bd86a6fc74e715a6f6e864168e36b1f7434a49b9b5b78dfddd9 +8b768d7a476955988fdb144e9c80bba23c5a82f94afb55809965b00c56f1c765ff3b787dacc1554909246fee52ca99aaedade82130e4fb9e3e32139c9ecbe05b +f0d986f342b761cca87c0ab00b1d1a05164dfc0fb2fb0e504b0708a84c77df6004000048110000504b0304140008080800a26dbe4c0000000000000000000000 +000a0000007374796c65732e786d6ced5c5f73db36127fbf4fa151e7ee8da6484bb6a58bddb9de4d6f3ad3a49dfc79e853072241090d497040d0b2f325eef1be +df7d92dbc51f1294489ab65527519bccd8117601ecfe76b1582ca0bcfaf62e4b27b754948ce7d7d3e06c369dd03ce231cb37d7d30fefbff7aea6dfdefce5154f +1216d155cca32aa3b9f44a799fd272029df372a589d7d34ae42b4e4a56ae7292d17225a3152f686e3bad5cee959a4ab7a8c1c67657cc6e6f49efe4d8cec8dbea +4bd6e36756cc6eef5890ddd8cec80b98badd133eb6f35d997a09f7229e1544b23d29ee52967fbc9e6ea52c56bebfdbedce76e7675c6cfc60b95cfa8a5a0b1cd5 +7c452552c515473e4d294e56fac159e05bde8c4a32563ee47545caab6c4dc56868882407562d042d8105d445bf1c3790dba7e55fb79bd1de75bbe98139da1231 +dacf1473db55cee3f1ae721ebb7d3322b73df6bdf25f0351fd78fd63e357221b3b17f2b6a08a042b46aba9b9ddfe9cf35a54eca017bb12379ccde6befeec70ef +06d97782492a1cf668903d22695423ceb32ed0802ff081c3a3b7e8f2b5de194b476b0dbc3d4e4272361a7ae43d705581e0f76ab8f0052db8903520c9f8a00bb3 +8475c8d8ca2ced0f1948b5ac1b11c79dac20ceb90fe10316af77cbe8ee9b696b37187684e59e23a8d0fa5017c5e4c6dec10ec1cc479e7af9826b341b85d8d45b +59c2ab3cd676d000d2bb820a862492aa6eabd608aeb552fe8421cdfee78cd0da14184d6da4a855ea1c86732f2b3d96c302e1c5cae9dd8a5a65792ebbccf7fead +8f340f774488f9661e271108a73776d74f38ecf80989a817d3282d6f5ee9685d374ff46714f27afa2383d0af949fbc23392c3008a9961516cefdf5f46fa4e0e5 +dff7f874e374d21a1af9bd0dcd416b58f88267246f71144c46101a6f8960ca37fcf1a2c190c928d990f125847bc3251f46ace67869ac60cae088762cef4b49b3 +670957452c260ff857c3f32232bda31b4e271f7ee815c832bc8834efc9163ca043969af0dcd9fdbee060daf509e1e6150661d84548cc206e4dd4272de2f72c4d +69fc6b38fbf5bbb482b8ae48312b8b94dc7b2ecbc4a19ba30224b59488ba0d922dd890530e29e73797e132891243827db0269c2f16e1c5b2d50783675e3209b8 +04b3d95f9d4edd14926f70f6f3d9cc34acb98831d1050e7f94aaff1694e643baba0c2394bd5c47178b0e6583f0f2220c3fb3b26f693ca46a437e58d124b9882f +e20e45a3651804f4332bfa0b4d53be1bd2b5c53146dd982e961deaaee79757b3f9efae6e46c4472a5c65ff2104ca8ff104b3bdeff81d7498cc26e16c723ed3ed +90b6bc0ea02df5026cdc86b34f4d988a6942aad4140e6c68313109c02db62c9a5a5ef3d92b20b1a142325aaaf14b29f847daace7f9c58258281280f92004247c +b583a13c5ee85364ce3dfcdc08551041d464ada91409f3228f54929705c1da068b29d7ac242db675002daa3c9295dafed4d8103d5956609aaae968636f2d2881 +133ac8cf22d98aab2c8f2926eb585251ac389b2abd24242d698d08a4be801c2f4a0cbcfdb2d7ec28fc814a5549bd1dccc8779e9adcc02545455b42f5254b00a7 +a297ec13d0c37921555b0a0e55910d3461e0828608d25f29c0ae1fde1d8cebc14985e4adddb261c0812d831ede806866b0b44f5b4b315359c23fdf1c4e8807b5 +94de75ee7c6ac29aa173ca9aba65fb93d6a41fde4c1bbbb41cdd1ac4f57a0d2fac5d38238878faf8b560d63e2e061887a72c9ebaeb63c762ac17cca26cfae0b2 +d1ebdcd381c4763c0bb1eb213da278d6b0aed962c068d3df5d05b08eceb8686b0dfa97b1a2a04b135847de960bf689e311085622db80d57fab4ac9927be57b05 +89b174e9c15a4151827081c238843597122b035db494265229b04f106cb37528da005b12abea058be366c7568d1ea4402595de5d1b8d36f1be936875bf9ae15f +f00255b14c59d98e9c7b3ee4b2a5f496a69ad95b57b0f9c88926623b6c0453fd51933c2c545d4ffff7dfffd40ee70ce2f89cea93b1dc4bc91a28b5ad2f4001bf +2fecd880617dfb1d58f0dd7db6e6e9744c486ac79bf9426d4ffe90a68fc0217c060e6a4bf0d634e1825a104e0fa1f3a32114683f3f3984e64744e8ea24115a1c +0da1f06c7e92085d1c0da1f393c4e7f278f89c689cbe3a1a42f3138dd3cb2322749a713a981d0da2c5d715a81db239b1f97d07afc1aa01cc0da79d0d2aac4f11 +e608611aed09a2ddaa4f29edb6fa80629a5559604b757f5dc68156851c538503cdfa20a6aa768bdc391719499b51a42079a9ef8c739ed351483b53f14aa288f5 +c9ce2129d1e556f06ab3f54cd1cb9de29049de177b3c3d150955f9df7797dfef6269cfb5822b53fbd06d56b336aef68078a071056613badae3626287db195bdb +f1ccfaa312cecf1e1ca773551feaacdad83a48c7e5cd81f686f56998d9de7d570596de00d853e6d148ba44b53a0db50d8183ce0043bbe8d3be293a50a7e67bfc +9d51d3b717849aa31f869aa507889ade0f450f8b72359a155ba27df66051099a329a74f827bfed72cf2e0613139af8e0d4c11ea87ff1f56f34923b26b71040b0 +ecd35708b3855622ea7767de41f9e33175e399fad32a41290d478bfe93121debfe283efece39fec4b1f03748d534224e5687f6cd801e6682634c723ec1de13e8 +8aff763b1d178f56ed501bf6c938a02f7c055232997e563087b76593ab60e979b44a5b4ae2cfed22a3522153859d873d29ce59188c495d9c0b87d11865949495 +7809880e2bf09d91c62da5d7d7698f29c2d33ceeecd7537b77cc652bcc90ca553993267918097b103e06767dddf9844b8d7181baf7ae20517ffa753a48269de7 +36dd69e4715fdbec833a7713489bf1c139277e2cd4cdfb89ae3da6f580e2b12bc1d8f2c9a1c2de99bbf6b26d5ea70e432eb967e9d3b6a879053260d216c7176a +532de39f46759fc30c98f46d7fe0fc420c8a12fe69cebd473f03166db37ca1463542fec1edfa932e633d3375a9f3b0d955d0f3fe62e0f8f987495d2cd8c3c98b +e57a62fa525bf4f94f6906cc695e958e593df601ea891b742077a92dfac4ece5654c6adece8e31a97d667be226edcd5c6a833e29777919739a17c263cc691f13 +9fb839873297daa24fcd5d5ec6a8e61df418a3da27d35fb151fdbdef54988ff83c19bf4218799660adb2a11e989457b2e5033fbf9e4d3b78066a774177e16eaf +59df78069d379eb655cd670c1b06678ba5db6eaf37c3cbb3a5ba3d36320a06d070c19a2f02e3b71f05616e45cad1a4dffd5fc745b0efcbe62bd91e0e50e3e236 +1eb8ec9a441f3702bfdd678ca89fce8fa84efbbd2633848c94521501ef9b6fcd8052d884d7d4cd67f751bed6ba7eb57f406fe41dc3a3af64ca7ed6083c55f074 +80c3545d3100282e7f5f0f0d8a5116316e59e95ffaed74135d1a1f6d3cd8f90e85e718d7f94ad21e967ef77f5e70f37f504b0708d111d268a1090000fc400000 +504b0304140008080800a26dbe4c000000000000000000000000150000004d4554412d494e462f6d616e69666573742e786d6cad92416ec3201045f73985c5de +d0765521e3ec7a82f600080f0e121e108c23fbf6c5561cbbaa223552778c66f8fffd81e63c0dbeba42ca2ea062affc85558026740e7bc5be3e3fea77766e4fcd +a0d159c824b74355ee61be978a8d0965d0d965897a802cc9c81001bb60c60190e4cf79b93addab03c01bbb49fb00d3a69b7ab909d93062a7a94cdf8c608a90dc +d2d25e066b9d017950589dda53b547b0ce435dc6d3bc03d8d1fb3a6aba28261e72ed4b80cee99ae6088ae918bd332b90b862c7d71df06374de271d2fce64269e +e1c840545e21f312e68137957c62693f256c02d282f5dfba99660f7fc56dc4af2fd57e03504b070800db977cf10000008d020000504b01021400140000080000 +a26dbe4c9f032ec42b0000002b0000000800000000000000000000000000000000006d696d6574797065504b01021400140008080800a26dbe4c9f6ee54e2b03 +0000361200000c000000000000000000000000005100000073657474696e67732e786d6c504b01021400140008080800a26dbe4ca84c77df6004000048110000 +0b00000000000000000000000000b6030000636f6e74656e742e786d6c504b01021400140008080800a26dbe4cd111d268a1090000fc4000000a000000000000 +000000000000004f0800007374796c65732e786d6c504b01021400140008080800a26dbe4c00db977cf10000008d020000150000000000000000000000000028 +1200004d4554412d494e462f6d616e69666573742e786d6c504b05060000000005000500240100005c1300000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000052006f006f007400200045006e007400720079000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000016000500ffffffffffffffff0100000071b78b44e2cfc447bcdf1fbf378e202c0000000000000000 +000000000000000000000000030000000001000000000000010043006f006d0070004f0062006a00000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000120002000200000003000000ffffffff000000000000000000000000000000000000000000000000 +00000000000000000000000000000000530000000000000001004f006c0065000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000a000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +000000000000000000000000020000001400000000000000700072006f0070006500720074006900650073005f00730074007200650061006d00000000000000 +0000000000000000000000000000000000000000000000002400020004000000ffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000300000010000000000000007000610063006b006100670065005f00730074007200650061006d00000000000000000000000000 +0000000000000000000000000000000000000000000000001e000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +00000000000000000000000004000000961400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +000000000000000000000000feffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +000000000000000000000000feffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +000000000000000000000000feffffff0000000000000000}} \ No newline at end of file diff --git a/sw/qa/extras/htmlexport/data/reqif-ole-odg.png b/sw/qa/extras/htmlexport/data/reqif-ole-odg.png new file mode 100644 index 000000000..66b76c74a Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-ole-odg.png differ diff --git a/sw/qa/extras/htmlexport/data/reqif-ole-odg.xhtml b/sw/qa/extras/htmlexport/data/reqif-ole-odg.xhtml new file mode 100644 index 000000000..9e7be3ae8 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-ole-odg.xhtml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sw/qa/extras/htmlexport/data/reqif-ole2.xhtml b/sw/qa/extras/htmlexport/data/reqif-ole2.xhtml new file mode 100644 index 000000000..716ecd1bd --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-ole2.xhtml @@ -0,0 +1,5 @@ + + + OLE Object + + diff --git a/sw/qa/extras/htmlexport/data/reqif-p.xhtml b/sw/qa/extras/htmlexport/data/reqif-p.xhtml new file mode 100644 index 000000000..304857d9a --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-p.xhtml @@ -0,0 +1,8 @@ +aaabbb +in table +http://libreoffice.org +u +s +s +s + diff --git a/sw/qa/extras/htmlexport/data/reqif-png-img.xhtml b/sw/qa/extras/htmlexport/data/reqif-png-img.xhtml new file mode 100644 index 000000000..637a7c2ac --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-png-img.xhtml @@ -0,0 +1,4 @@ + + OLE Object + + diff --git a/sw/qa/extras/htmlexport/data/reqif-table.xhtml b/sw/qa/extras/htmlexport/data/reqif-table.xhtml new file mode 100644 index 000000000..1bf1f0d93 --- /dev/null +++ b/sw/qa/extras/htmlexport/data/reqif-table.xhtml @@ -0,0 +1,9 @@ + + + + + + + +
A1
A2
+
diff --git a/sw/qa/extras/htmlexport/data/reqif-table2.odt b/sw/qa/extras/htmlexport/data/reqif-table2.odt new file mode 100644 index 000000000..772dde0dd Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-table2.odt differ diff --git a/sw/qa/extras/htmlexport/data/skipimage-embedded-document.docx b/sw/qa/extras/htmlexport/data/skipimage-embedded-document.docx new file mode 100644 index 000000000..f48935ad4 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/skipimage-embedded-document.docx differ diff --git a/sw/qa/extras/htmlexport/data/skipimage-embedded.doc b/sw/qa/extras/htmlexport/data/skipimage-embedded.doc new file mode 100644 index 000000000..b4b57ec5f Binary files /dev/null and b/sw/qa/extras/htmlexport/data/skipimage-embedded.doc differ diff --git a/sw/qa/extras/htmlexport/data/tdf126879.odt b/sw/qa/extras/htmlexport/data/tdf126879.odt new file mode 100644 index 000000000..8002e93da Binary files /dev/null and b/sw/qa/extras/htmlexport/data/tdf126879.odt differ diff --git a/sw/qa/extras/htmlexport/data/tdf132739.odt b/sw/qa/extras/htmlexport/data/tdf132739.odt new file mode 100644 index 000000000..6156aca93 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/tdf132739.odt differ diff --git a/sw/qa/extras/htmlexport/data/tdf66822.odt b/sw/qa/extras/htmlexport/data/tdf66822.odt new file mode 100644 index 000000000..88cc750cb Binary files /dev/null and b/sw/qa/extras/htmlexport/data/tdf66822.odt differ diff --git a/sw/qa/extras/htmlexport/data/tdf76291.odt b/sw/qa/extras/htmlexport/data/tdf76291.odt new file mode 100644 index 000000000..68588c876 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/tdf76291.odt differ diff --git a/sw/qa/extras/htmlexport/data/tdf83890.odt b/sw/qa/extras/htmlexport/data/tdf83890.odt new file mode 100644 index 000000000..fcfab68f9 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/tdf83890.odt differ diff --git a/sw/qa/extras/htmlexport/data/tdf90905.odt b/sw/qa/extras/htmlexport/data/tdf90905.odt new file mode 100644 index 000000000..19a51bdf8 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/tdf90905.odt differ diff --git a/sw/qa/extras/htmlexport/data/textAndImage.docx b/sw/qa/extras/htmlexport/data/textAndImage.docx new file mode 100644 index 000000000..adad46279 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/textAndImage.docx differ diff --git a/sw/qa/extras/htmlexport/data/transparent-image.odt b/sw/qa/extras/htmlexport/data/transparent-image.odt new file mode 100644 index 000000000..0c5fb8de0 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/transparent-image.odt differ diff --git a/sw/qa/extras/htmlexport/data/transparent.png b/sw/qa/extras/htmlexport/data/transparent.png new file mode 100644 index 000000000..936980b0a Binary files /dev/null and b/sw/qa/extras/htmlexport/data/transparent.png differ diff --git a/sw/qa/extras/htmlexport/data/xhtml-css.odt b/sw/qa/extras/htmlexport/data/xhtml-css.odt new file mode 100644 index 000000000..a094202e9 Binary files /dev/null and b/sw/qa/extras/htmlexport/data/xhtml-css.odt differ diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx b/sw/qa/extras/htmlexport/htmlexport.cxx new file mode 100644 index 000000000..4a1580cd7 --- /dev/null +++ b/sw/qa/extras/htmlexport/htmlexport.cxx @@ -0,0 +1,2481 @@ +/* -*- 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 + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace +{ +/// Test RTF parser that just extracts a single OLE2 object from a file. +class TestReqIfRtfReader : public SvRTFParser +{ +public: + TestReqIfRtfReader(SvStream& rStream); + void NextToken(int nToken) override; + bool WriteObjectData(SvStream& rOLE); + tools::Long GetObjw() const { return m_nObjw; } + tools::Long GetObjh() const { return m_nObjh; } + int getWmetafile() const { return m_nWmetafile; } + +private: + bool m_bInObjData = false; + OStringBuffer m_aHex; + tools::Long m_nObjw = 0; + tools::Long m_nObjh = 0; + int m_nWmetafile = 0; +}; + +TestReqIfRtfReader::TestReqIfRtfReader(SvStream& rStream) + : SvRTFParser(rStream) +{ +} + +void TestReqIfRtfReader::NextToken(int nToken) +{ + switch (nToken) + { + case '}': + m_bInObjData = false; + break; + case RTF_TEXTTOKEN: + if (m_bInObjData) + m_aHex.append(OUStringToOString(aToken, RTL_TEXTENCODING_ASCII_US)); + break; + case RTF_OBJDATA: + m_bInObjData = true; + break; + case RTF_OBJW: + m_nObjw = nTokenValue; + break; + case RTF_OBJH: + m_nObjh = nTokenValue; + break; + case RTF_WMETAFILE: + m_nWmetafile = nTokenValue; + break; + } +} + +bool TestReqIfRtfReader::WriteObjectData(SvStream& rOLE) +{ + OString aObjdata = m_aHex.makeStringAndClear(); + + SvMemoryStream aStream; + int b = 0; + int count = 2; + + // Feed the destination text to a stream. + for (int i = 0; i < aObjdata.getLength(); ++i) + { + char ch = aObjdata[i]; + if (ch != 0x0d && ch != 0x0a) + { + b = b << 4; + sal_Int8 parsed = msfilter::rtfutil::AsHex(ch); + if (parsed == -1) + return false; + b += parsed; + count--; + if (!count) + { + aStream.WriteChar(b); + count = 2; + b = 0; + } + } + } + + aStream.Seek(0); + rOLE.WriteStream(aStream); + return true; +} + +/// Parser for [MS-OLEDS] 2.2.5 EmbeddedObject, aka OLE1. +struct OLE1Reader +{ + sal_uInt32 m_nNativeDataSize; + std::vector m_aNativeData; + sal_uInt32 m_nPresentationDataSize; + + OLE1Reader(SvStream& rStream); +}; + +OLE1Reader::OLE1Reader(SvStream& rStream) +{ + // Skip ObjectHeader, see [MS-OLEDS] 2.2.4. + rStream.Seek(0); + CPPUNIT_ASSERT(rStream.remainingSize()); + sal_uInt32 nData; + rStream.ReadUInt32(nData); // OLEVersion + rStream.ReadUInt32(nData); // FormatID + rStream.ReadUInt32(nData); // ClassName + rStream.SeekRel(nData); + rStream.ReadUInt32(nData); // TopicName + rStream.SeekRel(nData); + rStream.ReadUInt32(nData); // ItemName + rStream.SeekRel(nData); + + rStream.ReadUInt32(m_nNativeDataSize); + m_aNativeData.resize(m_nNativeDataSize); + rStream.ReadBytes(m_aNativeData.data(), m_aNativeData.size()); + + rStream.ReadUInt32(nData); // OLEVersion for presentation data + CPPUNIT_ASSERT(rStream.good()); + rStream.ReadUInt32(nData); // FormatID + rStream.ReadUInt32(nData); // ClassName + rStream.SeekRel(nData); + rStream.ReadUInt32(nData); // Width + rStream.ReadUInt32(nData); // Height + rStream.ReadUInt32(nData); // PresentationDataSize + m_nPresentationDataSize = nData; +} +} + +/// Covers sw/source/filter/html/wrthtml.cxx and related fixes. +class HtmlExportTest : public SwModelTestBase, public HtmlTestTools +{ +private: + FieldUnit m_eUnit; + +public: + HtmlExportTest() + : SwModelTestBase("/sw/qa/extras/htmlexport/data/", "HTML (StarWriter)") + , m_eUnit(FieldUnit::NONE) + { + } + + /// Wraps an RTF fragment into a complete RTF file, so an RTF parser can handle it. + static void wrapRtfFragment(const OUString& rURL, SvMemoryStream& rStream) + { + SvFileStream aRtfStream(rURL, StreamMode::READ); + rStream.WriteOString("{\\rtf1"); + rStream.WriteStream(aRtfStream); + rStream.WriteOString("}"); + rStream.Seek(0); + } + +private: + bool mustCalcLayoutOf(const char* filename) override + { + return filename != std::string_view("fdo62336.docx"); + } + + bool mustTestImportOf(const char* filename) const override + { + return filename != std::string_view("fdo62336.docx"); + } + + virtual std::unique_ptr preTest(const char* filename) override + { + if (getTestName().indexOf("SkipImages") != -1) + setFilterOptions("SkipImages"); + else if (getTestName().indexOf("EmbedImages") != -1) + setFilterOptions("EmbedImages"); + else if (getTestName().indexOf("XHTML") != -1) + setFilterOptions("XHTML"); + else if (getTestName().indexOf("ReqIf") != -1) + { + if (o3tl::ends_with(filename, ".xhtml")) + { + setImportFilterOptions("xhtmlns=reqif-xhtml"); + // Bypass filter detect. + setImportFilterName("HTML (StarWriter)"); + } + // Export options (implies XHTML). + setFilterOptions("xhtmlns=reqif-xhtml"); + } + else + setFilterOptions(""); + + if (filename == std::string_view("charborder.odt")) + { + // FIXME if padding-top gets exported as inches, not cms, we get rounding errors. + SwGlobals::ensure(); // make sure that SW_MOD() is not 0 + std::unique_ptr pResetter(new Resetter([this]() { + SwMasterUsrPref* pPref = const_cast(SW_MOD()->GetUsrPref(false)); + pPref->SetMetric(this->m_eUnit); + })); + SwMasterUsrPref* pPref = const_cast(SW_MOD()->GetUsrPref(false)); + m_eUnit = pPref->GetMetric(); + pPref->SetMetric(FieldUnit::CM); + return pResetter; + } + return nullptr; + } +}; + +#define DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(TestName, filename) \ + DECLARE_SW_ROUNDTRIP_TEST(TestName, filename, nullptr, HtmlExportTest) + +/// HTML export of the sw doc model tests. +class SwHtmlDomExportTest : public SwModelTestBase, public HtmlTestTools +{ +public: + /// Get the .ole path, assuming maTempFile is an XHTML export result. + OUString GetOlePath(); + OUString GetPngPath(); + /// Parse the ole1 data out of an RTF fragment URL. + void ParseOle1FromRtfUrl(const OUString& rRtfUrl, SvMemoryStream& rOle1); + /// Export using the C++ HTML export filter, with xhtmlns=reqif-xhtml. + void ExportToReqif(); + /// Import using the C++ HTML import filter, with xhtmlns=reqif-xhtml. + void ImportFromReqif(const OUString& rUrl); +}; + +OUString SwHtmlDomExportTest::GetOlePath() +{ + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + OUString aOlePath = getXPath( + pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p/reqif-xhtml:object", "data"); + OUString aOleSuffix(".ole"); + CPPUNIT_ASSERT(aOlePath.endsWith(aOleSuffix)); + INetURLObject aUrl(maTempFile.GetURL()); + aUrl.setBase(aOlePath.subView(0, aOlePath.getLength() - aOleSuffix.getLength())); + aUrl.setExtension(u"ole"); + return aUrl.GetMainURL(INetURLObject::DecodeMechanism::NONE); +} + +OUString SwHtmlDomExportTest::GetPngPath() +{ + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + OUString aPngPath = getXPath( + pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p/reqif-xhtml:object", "data"); + OUString aPngSuffix(".png"); + CPPUNIT_ASSERT(aPngPath.endsWith(aPngSuffix)); + INetURLObject aUrl(maTempFile.GetURL()); + aUrl.setBase(aPngPath.subView(0, aPngPath.getLength() - aPngSuffix.getLength())); + aUrl.setExtension(u"png"); + return aUrl.GetMainURL(INetURLObject::DecodeMechanism::NONE); +} + +void SwHtmlDomExportTest::ParseOle1FromRtfUrl(const OUString& rRtfUrl, SvMemoryStream& rOle1) +{ + SvMemoryStream aRtf; + HtmlExportTest::wrapRtfFragment(rRtfUrl, aRtf); + tools::SvRef xReader(new TestReqIfRtfReader(aRtf)); + CPPUNIT_ASSERT(xReader->CallParser() != SvParserState::Error); + CPPUNIT_ASSERT(xReader->WriteObjectData(rOle1)); + CPPUNIT_ASSERT(rOle1.Tell()); +} + +void SwHtmlDomExportTest::ExportToReqif() +{ + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); +} + +void SwHtmlDomExportTest::ImportFromReqif(const OUString& rUrl) +{ + uno::Sequence aLoadProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + mxComponent = loadFromDesktop(rUrl, "com.sun.star.text.TextDocument", aLoadProperties); +} + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/htmlexport/data/"; + +DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(testFdo81276, "fdo81276.html") +{ + uno::Reference xPageStyles(getStyles("PageStyles")); + uno::Reference xStyle(xPageStyles->getByName("HTML"), uno::UNO_QUERY); + // some rounding going on here? + CPPUNIT_ASSERT(abs(sal_Int32(29700) - getProperty(xStyle, "Width")) < 10); + CPPUNIT_ASSERT(abs(sal_Int32(21006) - getProperty(xStyle, "Height")) < 10); + CPPUNIT_ASSERT(abs(sal_Int32(500) - getProperty(xStyle, "LeftMargin")) < 10); + CPPUNIT_ASSERT(abs(sal_Int32(500) - getProperty(xStyle, "RightMargin")) < 10); + CPPUNIT_ASSERT(abs(sal_Int32(2000) - getProperty(xStyle, "TopMargin")) < 10); + CPPUNIT_ASSERT(abs(sal_Int32(500) - getProperty(xStyle, "BottomMargin")) < 10); +} + +DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(testFdo62336, "fdo62336.docx") +{ + // The problem was essentially a crash during table export as docx/rtf/html + // If either of no-calc-layout or no-test-import is enabled, the crash does not occur +} + +DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(testFdo86857, "fdo86857.html") +{ + // problem was that background color on page style was not exported + uno::Reference xPageStyles(getStyles("PageStyles")); + uno::Reference xStyle(xPageStyles->getByName("HTML"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, getProperty(xStyle, "BackColor")); + // check that table background color works, which still uses RES_BACKGROUND + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x66ffff), getProperty(xCell, "BackColor")); +} + +DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(testCharacterBorder, "charborder.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + uno::Reference xRun(getRun(getParagraph(1), 1), uno::UNO_QUERY); + // Different Border + { + CPPUNIT_ASSERT_BORDER_EQUAL(table::BorderLine2(0x6666FF, 12, 12, 12, 3, 37), + getProperty(xRun, "CharTopBorder")); + CPPUNIT_ASSERT_BORDER_EQUAL(table::BorderLine2(0xFF9900, 0, 99, 0, 2, 99), + getProperty(xRun, "CharLeftBorder")); + CPPUNIT_ASSERT_BORDER_EQUAL(table::BorderLine2(0xFF0000, 0, 169, 0, 1, 169), + getProperty(xRun, "CharBottomBorder")); + CPPUNIT_ASSERT_BORDER_EQUAL(table::BorderLine2(0x0000FF, 0, 169, 0, 0, 169), + getProperty(xRun, "CharRightBorder")); + } + + // Different Padding + { + CPPUNIT_ASSERT_EQUAL(sal_Int32(450), getProperty(xRun, "CharTopBorderDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(550), + getProperty(xRun, "CharLeftBorderDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(150), + getProperty(xRun, "CharBottomBorderDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(250), + getProperty(xRun, "CharRightBorderDistance")); + } + + // No shadow +} + +#define DECLARE_HTMLEXPORT_TEST(TestName, filename) \ + DECLARE_SW_EXPORT_TEST(TestName, filename, nullptr, HtmlExportTest) + +DECLARE_HTMLEXPORT_TEST(testExportOfImages, "textAndImage.docx") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + assertXPath(pDoc, "/html/body", 1); + assertXPath(pDoc, "/html/body/p/img", 1); +} + +DECLARE_HTMLEXPORT_TEST(testExportOfImagesWithSkipImagesEnabled, "textAndImage.docx") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + assertXPath(pDoc, "/html/body", 1); + assertXPath(pDoc, "/html/body/p/img", 0); +} + +DECLARE_HTMLEXPORT_TEST(testSkipImagesEmbedded, "skipimage-embedded.doc") +{ + // Embedded spreadsheet was exported as image, so content was lost. Make + // sure it's exported as HTML instead. + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // This was 0. + assertXPath(pDoc, "//table", 1); + // This was 2, the HTML header was in the document two times. + assertXPath(pDoc, "//meta[@name='generator']", 1); + // This was 0, was directly under

, which caused errors in the parser. + assertXPath(pDoc, "//span/table", 1); +} + +DECLARE_HTMLEXPORT_TEST(testSkipImagesEmbeddedDocument, "skipimage-embedded-document.docx") +{ + // Similar to testSkipImagesEmbedded, but with an embedded Writer object, + // not a Calc one, and this time OOXML, not WW8. + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // This was 2, the HTML header was in the document two times. + assertXPath(pDoc, "//meta[@name='generator']", 1); + // Text of embedded document was missing. + assertXPathContent(pDoc, "/html/body/p/span/p/span", "Inner."); +} + +DECLARE_HTMLEXPORT_TEST(testExportImageProperties, "HTMLImage.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + assertXPath(pDoc, "/html/body", 1); + + assertXPath(pDoc, "/html/body/p/map/area", "shape", "poly"); + assertXPath(pDoc, "/html/body/p/map/area", "href", "http://www.microsoft.com/"); + assertXPath(pDoc, "/html/body/p/map/area", "target", "_self"); + assertXPath(pDoc, "/html/body/p/map/area", "alt", "microsoft"); + + assertXPath(pDoc, "/html/body/p/a", 1); + assertXPath(pDoc, "/html/body/p/a", "href", "http://www.google.com/"); + + assertXPath(pDoc, "/html/body/p/a/font", 1); + assertXPath(pDoc, "/html/body/p/a/font", "color", "#ff0000"); + + assertXPath(pDoc, "/html/body/p/a/font/img", 1); + assertXPath(pDoc, "/html/body/p/a/font/img", "name", "Text"); + assertXPath(pDoc, "/html/body/p/a/font/img", "alt", "Four colors"); + assertXPath(pDoc, "/html/body/p/a/font/img", "align", "middle"); + + // Probably the DPI in OSX is different and Twip -> Pixel conversion produces + // different results - so disable OSX for now. + // + // It would make sense to switch to use CSS and use "real world" units instead + // i.e. (style="margin: 0cm 1.5cm; width: 1cm; height: 1cm") + +#if 0 // disabled as it depends that the system DPI is set to 96 + assertXPath(pDoc, "/html/body/p/a/font/img", "hspace", "38"); + assertXPath(pDoc, "/html/body/p/a/font/img", "vspace", "19"); + assertXPath(pDoc, "/html/body/p/a/font/img", "width", "222"); + assertXPath(pDoc, "/html/body/p/a/font/img", "height", "222"); + assertXPath(pDoc, "/html/body/p/a/font/img", "border", "3"); +#endif + + assertXPath(pDoc, "/html/body/p/a/font/img", "usemap", "#map1"); +} + +DECLARE_HTMLEXPORT_TEST(testExportCheckboxRadioButtonState, "checkbox-radiobutton.doc") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + assertXPath(pDoc, "/html/body", 1); + assertXPath(pDoc, "/html/body/p[1]/input", "type", "checkbox"); + assertXPath(pDoc, "/html/body/p[1]/input", "checked", "checked"); + assertXPath(pDoc, "/html/body/p[2]/input", "type", "checkbox"); + assertXPathNoAttribute(pDoc, "/html/body/p[2]/input", "checked"); + assertXPath(pDoc, "/html/body/form/p[1]/input", "type", "checkbox"); + assertXPath(pDoc, "/html/body/form/p[1]/input", "checked", "checked"); + assertXPath(pDoc, "/html/body/form/p[2]/input", "type", "checkbox"); + assertXPathNoAttribute(pDoc, "/html/body/form/p[2]/input", "checked"); + assertXPath(pDoc, "/html/body/form/p[3]/input", "type", "radio"); + assertXPath(pDoc, "/html/body/form/p[3]/input", "checked", "checked"); + assertXPath(pDoc, "/html/body/form/p[4]/input", "type", "radio"); + assertXPathNoAttribute(pDoc, "/html/body/form/p[4]/input", "checked"); +} + +DECLARE_HTMLEXPORT_TEST(testExportUrlEncoding, "tdf76291.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // Test URI encoded hyperlink with Chinese characters + assertXPath(pDoc, "/html/body/p/a", "href", + "http://www.youtube.com/results?search_query=%E7%B2%B5%E8%AA%9Emv&sm=12"); +} + +DECLARE_HTMLEXPORT_TEST(testExportInternalUrl, "tdf90905.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // Internal url should be valid + assertXPath(pDoc, "/html/body/p[1]/a", "href", "#0.0.1.Text|outline"); + assertXPath(pDoc, "/html/body/p[2]/a", "href", "#bookmark"); +} + +DECLARE_HTMLEXPORT_TEST(testExportImageBulletList, "tdf66822.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // Encoded base64 SVG bullet should match and render on browser + assertXPath(pDoc, "/html/body/ul", 1); + assertXPath( + pDoc, "/html/body/ul", "style", + "list-style-image: url(data:image/svg+xml;base64," + "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3" + "RyYXRvciAxMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDUxNDQ4KSAg" + "LS0+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm" + "9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiIFsNCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cu" + "dzMub3JnLzIwMDAvc3ZnIj4NCgk8IUVOVElUWSBuc194bGluayAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluay" + "I+DQpdPg0KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGlu" + "az0iJm5zX3hsaW5rOyIgd2lkdGg9IjE0LjAwOCIgaGVpZ2h0PSIxNC4wMSINCgkgdmlld0JveD0iMCAwIDE0LjAwOC" + "AxNC4wMSIgb3ZlcmZsb3c9InZpc2libGUiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE0LjAwOCAxNC4wMSIg" + "eG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzRfIiBjeD0iNy4wMD" + "Q0IiBjeT0iNy4wMDQ5IiByPSI3LjAwNDQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCgkJPHN0b3Ag" + "IG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzM1REIzNSIvPg0KCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT" + "0ic3RvcC1jb2xvcjojMDBBMDAwIi8+DQoJPC9yYWRpYWxHcmFkaWVudD4NCgk8Y2lyY2xlIGZpbGw9InVybCgjWE1M" + "SURfNF8pIiBjeD0iNy4wMDQiIGN5PSI3LjAwNSIgcj0iNy4wMDQiLz4NCgk8ZGVmcz4NCgkJPGZpbHRlciBpZD0iQW" + "RvYmVfT3BhY2l0eU1hc2tGaWx0ZXIiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMy40ODEiIHk9IjAu" + "NjkzIiB3aWR0aD0iNi45ODgiIGhlaWdodD0iMy44OTMiPg0KCQkJPGZlQ29sb3JNYXRyaXggIHR5cGU9Im1hdHJpeC" + "IgdmFsdWVzPSIxIDAgMCAwIDAgIDAgMSAwIDAgMCAgMCAwIDEgMCAwICAwIDAgMCAxIDAiLz4NCgkJPC9maWx0ZXI+" + "DQoJPC9kZWZzPg0KCTxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjMuNDgxIiB5PSIwLjY5MyIgd2" + "lkdGg9IjYuOTg4IiBoZWlnaHQ9IjMuODkzIiBpZD0iWE1MSURfNV8iPg0KCQk8ZyBmaWx0ZXI9InVybCgjQWRvYmVf" + "T3BhY2l0eU1hc2tGaWx0ZXIpIj4NCgkJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfNl8iIGdyYWRpZW50VW5pdH" + "M9InVzZXJTcGFjZU9uVXNlIiB4MT0iNy4xMjIxIiB5MT0iMC4xMDMiIHgyPSI3LjEyMjEiIHkyPSI1LjIzNDQiPg0K" + "CQkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGRkYiLz4NCgkJCQk8c3RvcCAgb2Zmc2" + "V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwIi8+DQoJCQk8L2xpbmVhckdyYWRpZW50Pg0KCQkJPHJlY3Qg" + "eD0iMy4xOTkiIHk9IjAuMzM5IiBvcGFjaXR5PSIwLjciIGZpbGw9InVybCgjWE1MSURfNl8pIiB3aWR0aD0iNy44ND" + "YiIGhlaWdodD0iNC42MDEiLz4NCgkJPC9nPg0KCTwvbWFzaz4NCgk8ZWxsaXBzZSBtYXNrPSJ1cmwoI1hNTElEXzVf" + "KSIgZmlsbD0iI0ZGRkZGRiIgY3g9IjYuOTc1IiBjeT0iMi42NCIgcng9IjMuNDk0IiByeT0iMS45NDYiLz4NCjwvZz" + "4NCjwvc3ZnPg0K);"); +} + +DECLARE_HTMLEXPORT_TEST(testTdf83890, "tdf83890.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + assertXPath(pDoc, "/html/body/ol[2]/ol", "start", "2"); +} + +DECLARE_HTMLEXPORT_TEST(testExtbChars, "extb.html") +{ + OUString aExpected(u"\U00024b62"); + // Assert that UTF8 encoded non-BMP Unicode character is correct + uno::Reference xTextRange1 = getRun(getParagraph(1), 1); + CPPUNIT_ASSERT_EQUAL(aExpected, xTextRange1->getString()); + + // Assert that non-BMP Unicode in character entity format is correct + uno::Reference xTextRange2 = getRun(getParagraph(2), 1); + CPPUNIT_ASSERT_EQUAL(aExpected, xTextRange2->getString()); +} + +DECLARE_HTMLEXPORT_TEST(testNormalImageExport, "textAndImage.docx") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + assertXPath(pDoc, "/html/body", 1); + + // the HTML export normally does not embed the images + OUString imgSrc = getXPath(pDoc, "/html/body/p/img", "src"); + CPPUNIT_ASSERT(imgSrc.endsWith(".png")); +} + +DECLARE_HTMLEXPORT_TEST(testEmbedImagesEnabled, "textAndImage.docx") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + assertXPath(pDoc, "/html/body", 1); + + // the HTML export normally does not embed the images, but here the test + // name triggers setting of the "EmbedImages" filter option, meaning the + // image will not be a separate PNG, but an embedded base64 encoded + // version of that + OUString imgSrc = getXPath(pDoc, "/html/body/p/img", "src"); + CPPUNIT_ASSERT(imgSrc.startsWith("data:image/png;base64,")); +} + +DECLARE_HTMLEXPORT_TEST(testXHTML, "hello.html") +{ + OString aExpected("TellEnd(); + + OString aExpected = "aaa\nbbb" + "" SAL_NEWLINE_STRING + // This was 'Seek(0); + OString aActual(read_uInt8s_ToOString(*pStream, aExpected.getLength())); + // This was a HTML header, like '" instead of CSS. + CPPUNIT_ASSERT(aStream.indexOf(", namespace prefix was missing. + CPPUNIT_ASSERT(aStream.indexOf("") != -1); + + // This was "" instead of CSS. + CPPUNIT_ASSERT(aStream.indexOf("" instead of CSS + namespace prefix was missing. + CPPUNIT_ASSERT(aStream.indexOf("") != -1); +} + +DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(testReqIfOleData, "reqif-ole-data.xhtml") +{ + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getEmbeddedObjects(), + uno::UNO_QUERY); + // This was 0, without URL was ignored. + // Then this was 0 on export, as data of OLE nodes was ignored. + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); +} + +DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(testReqIfOleImg, "reqif-ole-img.xhtml") +{ + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getEmbeddedObjects(), + uno::UNO_QUERY); + uno::Reference xObject(xObjects->getByIndex(0), + uno::UNO_QUERY); + // This failed, OLE object had no replacement image. + // And then it also failed when the export lost the replacement image. + uno::Reference xGraphic = xObject->getReplacementGraphic(); + // This failed when query and fragment of file:// URLs were not ignored. + CPPUNIT_ASSERT(xGraphic.is()); + + uno::Reference xShape(xObject, uno::UNO_QUERY); + OutputDevice* pDevice = Application::GetDefaultDevice(); + Size aPixel(64, 64); + // Expected to be 1693. + Size aLogic(pDevice->PixelToLogic(aPixel, MapMode(MapUnit::Map100thMM))); + awt::Size aSize = xShape->getSize(); + // This was only 1247, size was not set explicitly. + CPPUNIT_ASSERT_EQUAL(static_cast(aLogic.getWidth()), aSize.Width); + + // Check mime/media types. + CPPUNIT_ASSERT_EQUAL(OUString("image/png"), getProperty(xGraphic, "MimeType")); + + uno::Reference xObjectProps(xObject, uno::UNO_QUERY); + uno::Reference xStreamProvider( + xObjectProps->getPropertyValue("EmbeddedObject"), uno::UNO_QUERY); + uno::Reference xStream(xStreamProvider->getStream(), uno::UNO_QUERY); + // This was empty when either import or export handling was missing. + CPPUNIT_ASSERT_EQUAL(static_cast(37888), xStream->getLength()); + + // Check alternate text (it was empty, for export the 'alt' attribute was used). + CPPUNIT_ASSERT_EQUAL(OUString("OLE Object"), getProperty(xObject, "Title").trim()); + + if (!mbExported) + return; + + // "type" attribute was missing for the inner element. + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + CPPUNIT_ASSERT(aStream.indexOf("type=\"image/png\"") != -1); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqIfPngImg) +{ + auto verify = [this](bool bExported) { + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xShape.is()); + + if (!bExported) + { + // Imported PNG image is not an object. + CPPUNIT_ASSERT_EQUAL(OUString("Image1"), xShape->getName()); + return; + } + + // All images are exported as objects in ReqIF mode. + CPPUNIT_ASSERT_EQUAL(OUString("Object1"), xShape->getName()); + + // This was , not , which is not valid in the reqif-xhtml + // subset. + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + CPPUNIT_ASSERT(aStream.indexOf(" xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("ExportImagesAsOLE", true), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + mxComponent->dispose(); + ImportFromReqif(maTempFile.GetURL()); + verify(/*bExported=*/true); +} + +DECLARE_HTMLEXPORT_TEST(testReqIfJpgImg, "reqif-jpg-img.xhtml") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + // This was image/jpeg, JPG was not converted to PNG in ReqIF mode. + CPPUNIT_ASSERT(aStream.indexOf("type=\"image/png\"") != -1); +} + +DECLARE_HTMLEXPORT_TEST(testReqIfTable, "reqif-table.xhtml") +{ + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + + //
was missing, so the XHTML fragment wasn't a valid + // xhtml.BlkStruct.class type anymore. + assertXPath(pDoc, + "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:table/reqif-xhtml:tr/reqif-xhtml:th", + 1); + // Make sure that the cell background is not written using CSS. + assertXPathNoAttribute( + pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:table/reqif-xhtml:tr/reqif-xhtml:th", + "style"); + // The attribute was present, which is not valid in reqif-xhtml. + assertXPathNoAttribute( + pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:table/reqif-xhtml:tr/reqif-xhtml:th", + "bgcolor"); +} + +DECLARE_HTMLEXPORT_TEST(testReqIfTable2, "reqif-table2.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + // This failed, was written. + CPPUNIT_ASSERT(aStream.indexOf("") != -1); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqIfTableHeight) +{ + // Given a document with a table in it, with an explicit row height: + loadURL("private:factory/swriter", nullptr); + uno::Sequence aTableProperties = { + comphelper::makePropertyValue("Rows", static_cast(1)), + comphelper::makePropertyValue("Columns", static_cast(1)), + }; + dispatchCommand(mxComponent, ".uno:InsertTable", aTableProperties); + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xRow(xTable->getRows()->getByIndex(0), uno::UNO_QUERY); + xRow->setPropertyValue("Height", uno::Any(static_cast(1000))); + + // When exporting to reqif-xhtml: + ExportToReqif(); + + // Then make sure that the explicit cell height is omitted from the output: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + // Without the accompanying fix in place, this test would have failed, explicit height was + // written, which is not valid reqif-xhtml. + assertXPathNoAttribute(pDoc, "//reqif-xhtml:td", "height"); +} + +DECLARE_HTMLEXPORT_TEST(testXHTMLUseCSS, "xhtml-css.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + // This failed, was written. + CPPUNIT_ASSERT(aStream.indexOf(" was written. + CPPUNIT_ASSERT(aStream.indexOf("TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + // This failed,
    was written. + CPPUNIT_ASSERT(aStream.indexOf("") != -1); + + // This failed, the 'style' attribute was written, even if the input did + // not had one. + CPPUNIT_ASSERT_EQUAL(static_cast(-1), aStream.indexOf(" style=\"")); + + // This failed
  • was only opened, not closed. + CPPUNIT_ASSERT(aStream.indexOf("") != -1); +} + +DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(testReqIfOle2, "reqif-ole2.xhtml") +{ + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getEmbeddedObjects(), + uno::UNO_QUERY); + uno::Reference xObject(xObjects->getByIndex(0), + uno::UNO_QUERY); + uno::Reference xEmbeddedObject( + xObject->getExtendedControlOverEmbeddedObject(), uno::UNO_QUERY); + // This failed, the "RTF fragment" native data was loaded as-is, we had no + // filter to handle it, so nothing happened on double-click. + CPPUNIT_ASSERT(xEmbeddedObject.is()); + uno::Reference xStream(xEmbeddedObject->getStream(), uno::UNO_QUERY); + // This was 38375, msfilter::rtfutil::ExtractOLE2FromObjdata() wrote + // everything after the OLE1 header into the OLE2 stream, while the + // Presentation field after the OLE2 data doesn't belong there. + CPPUNIT_ASSERT_EQUAL(static_cast(37888), xStream->getLength()); + // Finally the export also failed as it tried to open the stream from the + // document storage, but the embedded object already opened it, so an + // exception of type com.sun.star.io.IOException was thrown. + + if (mbExported) + { + // Check that the replacement graphic is exported at RTF level. + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + // Get the path of the RTF data. + OUString aOlePath = getXPath( + pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p/reqif-xhtml:object", "data"); + OUString aOleSuffix(".ole"); + CPPUNIT_ASSERT(aOlePath.endsWith(aOleSuffix)); + INetURLObject aUrl(maTempFile.GetURL()); + aUrl.setBase(aOlePath.subView(0, aOlePath.getLength() - aOleSuffix.getLength())); + aUrl.setExtension(u"ole"); + OUString aOleUrl = aUrl.GetMainURL(INetURLObject::DecodeMechanism::NONE); + + // Search for \result in the RTF data. + SvFileStream aOleStream(aOleUrl, StreamMode::READ); + CPPUNIT_ASSERT(aOleStream.IsOpen()); + OString aOleString(read_uInt8s_ToOString(aOleStream, aOleStream.TellEnd())); + // Without the accompanying fix in place, this test would have failed, + // replacement graphic was missing at RTF level. + CPPUNIT_ASSERT(aOleString.indexOf(OOO_STRING_SVTOOLS_RTF_RESULT) != -1); + } +} + +DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(testReqIfOle2Odg, "reqif-ole-odg.xhtml") +{ + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getEmbeddedObjects(), + uno::UNO_QUERY); + uno::Reference xTextEmbeddedObject(xObjects->getByIndex(0), + uno::UNO_QUERY); + uno::Reference xObject(xTextEmbeddedObject->getEmbeddedObject(), + uno::UNO_QUERY); + // This failed, both import and export failed to handle OLE2 that contains + // just ODF. + CPPUNIT_ASSERT(xObject.is()); + CPPUNIT_ASSERT(xObject->supportsService("com.sun.star.drawing.DrawingDocument")); +} + +DECLARE_HTMLEXPORT_TEST(testList, "list.html") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + // This failed, it was
  • , i.e. list item was closed before content + // started. + CPPUNIT_ASSERT(aStream.indexOf("
  • ") != -1); +} + +DECLARE_HTMLEXPORT_TEST(testTransparentImage, "transparent-image.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + OUString aSource = getXPath(pDoc, "/html/body/p/img", "src"); + OUString aMessage = "src attribute is: " + aSource; + // This was a jpeg, transparency was lost. + CPPUNIT_ASSERT_MESSAGE(aMessage.toUtf8().getStr(), aSource.endsWith(".gif")); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testTransparentImageReqIf) +{ + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "transparent-image.odt"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {}); + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("ExportImagesAsOLE", true), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + + OUString aSource = getXPath( + pDoc, + "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p/reqif-xhtml:object/reqif-xhtml:object", + "data"); + OUString aMessage = "src attribute is: " + aSource; + // This was GIF, when the intention was to force PNG. + CPPUNIT_ASSERT_MESSAGE(aMessage.toUtf8().getStr(), aSource.endsWith(".png")); +} + +DECLARE_HTMLEXPORT_TEST(testOleNodataReqIf, "reqif-ole-nodata.odt") +{ + // This failed, io::IOException was thrown during the filter() call. + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + + // Make sure the native element has the required data attribute. + OUString aSource = getXPath( + pDoc, + "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p/reqif-xhtml:object/reqif-xhtml:object", + "data"); + CPPUNIT_ASSERT(!aSource.isEmpty()); +} + +DECLARE_HTMLEXPORT_TEST(testNoLangReqIf, "reqif-no-lang.odt") +{ + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + + // Make sure that xml:lang is not written in ReqIF mode. + assertXPathNoAttribute(pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:h1", "lang"); +} + +DECLARE_HTMLEXPORT_TEST(testFieldShade, "field-shade.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // Without the accompanying fix in place, this test would have failed with 'Expected: 1; Actual: + // 0', i.e. shading for the field was lost. + assertXPath(pDoc, "/html/body/p[1]/span", "style", "background: #c0c0c0"); + + // Check that field shading is written only in case there is no user-defined span background. + assertXPath(pDoc, "/html/body/p[2]/span", "style", "background: #ff0000"); + // Without the accompanying fix in place, this test would have failed with 'Expected: 0; Actual: + // 1', i.e there was an inner span hiding the wanted background color. + assertXPath(pDoc, "/html/body/p[2]/span/span", 0); +} + +DECLARE_HTMLEXPORT_TEST(testTdf132739, "tdf132739.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // Without the fix in place, this test would have failed with + // - Expected: background: #5983b0; border: 1px solid #333333; padding: 0.04in + // - Actual : background: #5983b0 + assertXPath(pDoc, "/html/body/table/tr[1]/td", "style", + "background: #5983b0; border: 1px solid #333333; padding: 0.04in"); +} + +DECLARE_HTMLEXPORT_TEST(testFieldShadeReqIf, "field-shade-reqif.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 2 + // i.e. the ReqIF subset of xhtml had a background color and a page number field, resulting in + // an invalid ReqIF-XHTML. + assertXPath(pDoc, "/html/body/div/p[1]/span", 0); + assertXPath(pDoc, "/html/body/div/p[1]/sdfield", 0); +} + +DECLARE_HTMLEXPORT_TEST(testTdf126879, "tdf126879.odt") +{ + const OString aExpected(""); + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + const OString aActual(read_uInt8s_ToOString(*pStream, aExpected.getLength())); + // Without the fix in place, this test would have failed with + // - Expected: + // - Actual : + CPPUNIT_ASSERT_EQUAL(aExpected, aActual); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testBlockQuoteReqIf) +{ + // Build a document model that uses the Quotations paragraph style. + loadURL("private:factory/swriter", nullptr); + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + xParagraph->setPropertyValue("ParaStyleName", uno::Any(OUString("Quotations"))); + + // Export it. + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= OUString("HTML (StarWriter)"); + aMediaDescriptor["FilterOptions"] <<= OUString("xhtmlns=reqif-xhtml"); + xStorable->storeToURL(maTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // i.e. had character (direct) children, which is invalid xhtml. + assertXPath(pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:blockquote/reqif-xhtml:p", 1); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testRTFOLEMimeType) +{ + // Import a document with an embedded object. + OUString aType("test/rtf"); + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "reqif-ole-data.xhtml"; + ImportFromReqif(aURL); + + // Export it. + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("RTFOLEMimeType", aType), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: test/rtf + // - Actual : text/rtf + // i.e. the MIME type was always text/rtf, not taking the store parameter into account. + assertXPath(pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p/reqif-xhtml:object", "type", + aType); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testChinese) +{ + // Load a document with Chinese text in it. + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "reqif-chinese.odt"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {}); + + // Export it. + ExportToReqif(); + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + + // Without the accompanying fix in place, this test would have failed as the output was not + // well-formed. + CPPUNIT_ASSERT(pDoc); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifComment) +{ + // Create a document with a comment in it. + loadURL("private:factory/swriter", nullptr); + uno::Sequence aPropertyValues = comphelper::InitPropertySequence({ + { "Text", uno::Any(OUString("some text")) }, + { "Author", uno::Any(OUString("me")) }, + }); + dispatchCommand(mxComponent, ".uno:InsertAnnotation", aPropertyValues); + + // Export it. + ExportToReqif(); + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + + // Without the accompanying fix in place, this test would have failed as the output was not + // well-formed. + CPPUNIT_ASSERT(pDoc); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifFontNameSize) +{ + // Create a document with a custom font name and size in it. + loadURL("private:factory/swriter", nullptr); + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + xParagraph->setPropertyValue("CharFontName", uno::Any(OUString("Liberation Serif"))); + float fCharHeight = 14.0; + xParagraph->setPropertyValue("CharHeight", uno::Any(fCharHeight)); + sal_Int32 nCharColor = 0xff0000; + xParagraph->setPropertyValue("CharColor", uno::Any(nCharColor)); + uno::Reference xTextRange(xParagraph, uno::UNO_QUERY); + xTextRange->setString("x"); + + // Export it. + ExportToReqif(); + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + + // Make sure the output is well-formed. + CPPUNIT_ASSERT(pDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 3 + // i.e. font name and size was written, even if that's not relevant for ReqIF. + assertXPath(pDoc, "//reqif-xhtml:span", 1); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifParagraphAlignment) +{ + // Create a document with an explicitly aligned paragraph. + loadURL("private:factory/swriter", nullptr); + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + xParagraph->setPropertyValue("ParaAdjust", + uno::Any(static_cast(style::ParagraphAdjust_RIGHT))); + + // Export it. + ExportToReqif(); + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pDoc = parseXmlStream(&aStream); + + // Make sure the output is well-formed. + CPPUNIT_ASSERT(pDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: + // - Actual : right + // i.e. the markup was used, which is invalid. + assertXPathNoAttribute(pDoc, "//reqif-xhtml:p", "align"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifOle1PDF) +{ + // Save to reqif-xhtml. + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "pdf-ole.odt"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {}); + + ExportToReqif(); + OUString aRtfUrl = GetOlePath(); + SvMemoryStream aOle1; + ParseOle1FromRtfUrl(aRtfUrl, aOle1); + + // Check the content of the ole1 data. + OLE1Reader aOle1Reader(aOle1); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 39405 + // - Actual : 43008 + // i.e. we did not work with the Ole10Native stream, rather created an OLE1 wrapper around the + // OLE1-in-OLE2 data, resulting in additional size. + CPPUNIT_ASSERT_EQUAL(static_cast(0x99ed), aOle1Reader.m_nNativeDataSize); + + // Now import this back and check the ODT result. + mxComponent->dispose(); + mxComponent.clear(); + ImportFromReqif(maTempFile.GetURL()); + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("writer8")), + }; + xStorable->storeToURL(aTempFile.GetURL(), aStoreProperties); + uno::Reference xNameAccess + = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), + aTempFile.GetURL()); + uno::Reference xInputStream(xNameAccess->getByName("Object 2"), + uno::UNO_QUERY); + std::unique_ptr pStream(utl::UcbStreamHelper::CreateStream(xInputStream, true)); + tools::SvRef pStorage = new SotStorage(*pStream); + tools::SvRef pOleNative = pStorage->OpenSotStream("\1Ole10Native"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 39409 + // - Actual : 0 + // i.e. we didn't handle the case when the ole1 payload was not an ole2 container. Note how the + // expected value is the same as nData above + 4 bytes, since this data is length-prefixed. + CPPUNIT_ASSERT_EQUAL(static_cast(39409), pOleNative->GetSize()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifOle1Paint) +{ + // Load the bug document, which has OLE1 data in it, which is not a wrapper around OLE2 data. + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "paint-ole.xhtml"; + ImportFromReqif(aURL); + + // Save it as ODT to inspect the result of the OLE1 -> OLE2 conversion. + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + xStorable.set(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("writer8")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + uno::Reference xNameAccess + = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), + maTempFile.GetURL()); + uno::Reference xInputStream(xNameAccess->getByName("Object 2"), + uno::UNO_QUERY); + std::unique_ptr pStream(utl::UcbStreamHelper::CreateStream(xInputStream, true)); + tools::SvRef pStorage = new SotStorage(*pStream); + // Check the clsid of the root stream of the OLE2 storage. + SvGlobalName aActual = pStorage->GetClassName(); + SvGlobalName aExpected(0x0003000A, 0, 0, 0xc0, 0, 0, 0, 0, 0, 0, 0x46); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0003000A-0000-0000-c000-000000000046 + // - Actual : 0003000C-0000-0000-c000-000000000046 + // i.e. the "Package" clsid was used on the OLE2 storage unconditionally, even for an mspaint + // case, which has its own clsid. + CPPUNIT_ASSERT_EQUAL(aExpected.GetHexName(), aActual.GetHexName()); + + ExportToReqif(); + OUString aRtfUrl = GetOlePath(); + SvMemoryStream aOle1; + ParseOle1FromRtfUrl(aRtfUrl, aOle1); + + // Check the content of the ole1 data. + // Skip ObjectHeader, see [MS-OLEDS] 2.2.4. + aOle1.Seek(0); + sal_uInt32 nData; + aOle1.ReadUInt32(nData); // OLEVersion + aOle1.ReadUInt32(nData); // FormatID + aOle1.ReadUInt32(nData); // ClassName + CPPUNIT_ASSERT(nData); + OString aClassName = read_uInt8s_ToOString(aOle1, nData - 1); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: PBrush + // - Actual : Package + // i.e. a hardcoded class name was written. + CPPUNIT_ASSERT_EQUAL(OString("PBrush"), aClassName); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifOle1PaintBitmapFormat) +{ + // Given a document with a 8bpp bitmap: + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "paint-ole-bitmap-format.odt"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {}); + + // When exporting to reqif-xhtml with ExportImagesAsOLE enabled: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("ExportImagesAsOLE", true), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the resulting bitmap is 24bpp: + OUString aRtfUrl = GetOlePath(); + SvMemoryStream aOle1; + ParseOle1FromRtfUrl(aRtfUrl, aOle1); + OLE1Reader aOle1Reader(aOle1); + Bitmap aBitmap; + SvMemoryStream aMemory; + aMemory.WriteBytes(aOle1Reader.m_aNativeData.data(), aOle1Reader.m_aNativeData.size()); + aMemory.Seek(0); + CPPUNIT_ASSERT(ReadDIB(aBitmap, aMemory, true)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 24 + // - Actual : 8 + // i.e. it was not a pixel format ms paint could handle in OLE mode. + CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, aBitmap.getPixelFormat()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testMultiParaListItem) +{ + // Create a document with 3 list items: A, B&C and D. + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("A"); + SwDoc* pDoc = pWrtShell->GetDoc(); + { + // Enable numbering. + sal_uInt16 nPos = pDoc->MakeNumRule(pDoc->GetUniqueNumRuleName()); + SwNumRule* pNumRule = pDoc->GetNumRuleTable()[nPos]; + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + } + pWrtShell->SplitNode(); + pWrtShell->Insert("B"); + pWrtShell->SplitNode(); + pWrtShell->Insert("C"); + { + // C is in the same list item as B. + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetCountedInList(false); + } + pWrtShell->SplitNode(); + pWrtShell->Insert("D"); + + ExportToReqif(); + + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + assertXPathContent(pXmlDoc, "//reqif-xhtml:ol/reqif-xhtml:li[1]/reqif-xhtml:p", "A"); + assertXPathContent(pXmlDoc, "//reqif-xhtml:ol/reqif-xhtml:li[2]/reqif-xhtml:p[1]", "B"); + // Without the accompanying fix in place, this test would have failed with: + // XPath '//reqif-xhtml:ol/reqif-xhtml:li[2]/reqif-xhtml:p[2]' not found + // i.e. was written before "C", not after "C", so "C" was not in the 2nd list item. + assertXPathContent(pXmlDoc, "//reqif-xhtml:ol/reqif-xhtml:li[2]/reqif-xhtml:p[2]", "C"); + assertXPathContent(pXmlDoc, "//reqif-xhtml:ol/reqif-xhtml:li[3]/reqif-xhtml:p", "D"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testUnderlineNone) +{ + // Create a document with a single paragraph: its underlying is set to an explicit 'none' value. + loadURL("private:factory/swriter", nullptr); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + xText->insertString(xText->getEnd(), "x", /*bAbsorb=*/false); + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + xParagraph->setPropertyValue("CharUnderline", uno::Any(sal_Int16(awt::FontUnderline::NONE))); + + // Export to reqif-xhtml. + ExportToReqif(); + + // Make sure that the paragraph has no explicit style, because "text-decoration: none" is + // filtered out. + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + assertXPathNoAttribute(pXmlDoc, "//reqif-xhtml:div/reqif-xhtml:p", "style"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifOle1PresDataNoOle2) +{ + // Save to reqif-xhtml. + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "no-ole2-pres-data.odt"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {}); + ExportToReqif(); + OUString aRtfUrl = GetOlePath(); + SvMemoryStream aOle1; + ParseOle1FromRtfUrl(aRtfUrl, aOle1); + + // Check the content of the ole1 data. + // Without the accompanying fix in place, this test would have failed as there was no + // presentation data after the native data in the OLE1 container. The result was not editable in + // Word. + OLE1Reader aOle1Reader(aOle1); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifOle1PresDataWmfOnly) +{ + // Save to reqif-xhtml. + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole1-pres-data-wmf.odt"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {}); + ExportToReqif(); + OUString aRtfUrl = GetOlePath(); + SvMemoryStream aOle1; + ParseOle1FromRtfUrl(aRtfUrl, aOle1); + + OLE1Reader aOle1Reader(aOle1); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 135660 + // - Actual : 272376 + // i.e. we wrote some additional EMF data into the WMF output, which broke Word. + CPPUNIT_ASSERT_EQUAL(static_cast(135660), aOle1Reader.m_nPresentationDataSize); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifAscharObjsize) +{ + // Given a document with an as-char anchored embedded object: + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "reqif-aschar-objsize.odt"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {}); + + // When exporting to reqif-xhtml: + ExportToReqif(); + + // Then make sure that the RTF snippet has the correct aspect ratio: + OUString aRtfUrl = GetOlePath(); + SvMemoryStream aRtf; + HtmlExportTest::wrapRtfFragment(aRtfUrl, aRtf); + tools::SvRef xReader(new TestReqIfRtfReader(aRtf)); + CPPUNIT_ASSERT(xReader->CallParser() != SvParserState::Error); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 7344 + // - Actual : 2836 + // i.e. the aspect ratio was 1:1, while the PNG aspect ratio was correctly not 1:1. + CPPUNIT_ASSERT_EQUAL(static_cast(7344), xReader->GetObjw()); + CPPUNIT_ASSERT_EQUAL(static_cast(4116), xReader->GetObjh()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifObjdataPresentationDataSize) +{ + // Given a document with an OLE2 embedded object, containing a preview: + OUString aURL + = m_directories.getURLFromSrc(DATA_DIRECTORY) + "reqif-objdata-presentationdatasize.odt"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {}); + + // When exporting to ReqIF: + ExportToReqif(); + + // Then make sure that the PresentationDataSize in the RTF's objdata blob is correct: + OUString aRtfUrl = GetOlePath(); + SvMemoryStream aOle1; + ParseOle1FromRtfUrl(aRtfUrl, aOle1); + OLE1Reader aOle1Reader(aOle1); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 565994 + // - Actual : 330240 (Linux) + // - Actual : 566034 (Windows, when Word is installed) + // because PresentationData was taken from the OLE2 stream but its size was taken from RTF. + CPPUNIT_ASSERT_EQUAL(static_cast(565994), aOle1Reader.m_nPresentationDataSize); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testListHeading) +{ + // Given a document with a list heading: + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("list header"); + SwDoc* pDoc = pWrtShell->GetDoc(); + sal_uInt16 nPos = pDoc->MakeNumRule(pDoc->GetUniqueNumRuleName()); + SwNumRule* pNumRule = pDoc->GetNumRuleTable()[nPos]; + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + rTextNode.SetCountedInList(false); + + // When exporting to ReqIF: + ExportToReqif(); + + // Then make sure the output is valid xhtml: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + + // Without the accompanying fix in place, this test would have failed: + // - expected:

    ...

    + // - actual :

      ...

    + // because a but no
  • is not well-formed and
      with a non-li children is invalid. + assertXPathContent(pXmlDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p", "list header"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testPartiallyNumberedList) +{ + // Given a document with a list, first para is numbered, second is not: + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("list header"); + SwDoc* pDoc = pWrtShell->GetDoc(); + sal_uInt16 nPos = pDoc->MakeNumRule(pDoc->GetUniqueNumRuleName()); + SwNumRule* pNumRule = pDoc->GetNumRuleTable()[nPos]; + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + } + pWrtShell->Insert2("numbered"); + pWrtShell->SplitNode(); + pWrtShell->Insert2("not numbered"); + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + rTextNode.SetCountedInList(false); + } + + // When exporting to ReqIF: + ExportToReqif(); + + // Then make sure the output is well-formed xhtml: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed: + // - expected:
    1. ...

      ...

    2. + // - actual :
    3. ...

      ...

      + // because a
    4. without a matching
    5. is not well-formed, and the was omitted because + // the second para was not numbered. + assertXPath(pXmlDoc, + "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:ol/reqif-xhtml:li/reqif-xhtml:p", 2); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testListHeaderAndItem) +{ + // Given a document with a list, first para is not numbered, but the second is: + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("not numbered"); + SwDoc* pDoc = pWrtShell->GetDoc(); + sal_uInt16 nPos = pDoc->MakeNumRule(pDoc->GetUniqueNumRuleName()); + SwNumRule* pNumRule = pDoc->GetNumRuleTable()[nPos]; + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + rTextNode.SetCountedInList(false); + } + pWrtShell->SplitNode(); + pWrtShell->Insert2("numbered"); + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + } + + // When exporting to ReqIF: + ExportToReqif(); + + // Then make sure the output is well-formed xhtml: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + // Without the accompanying fix in place, this test would have failed: + // Entity: line 3: parser error : Opening and ending tag mismatch: ol line 3 and li + // not numbered + CPPUNIT_ASSERT(pXmlDoc); + // Make sure that in case the list has a header and an item, then both are wrapped in an
    6. + // element. + assertXPath(pXmlDoc, + "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:ol/reqif-xhtml:li/reqif-xhtml:p", 2); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testBlockQuoteNoMargin) +{ + // Given a document with some text, para style set to Quotations, no bottom margin: + loadURL("private:factory/swriter", nullptr); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + xText->insertString(xText->getEnd(), "string", /*bAbsorb=*/false); + uno::Reference xQuotations( + getStyles("ParagraphStyles")->getByName("Quotations"), uno::UNO_QUERY); + xQuotations->setPropertyValue("ParaBottomMargin", uno::Any(static_cast(0))); + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + xParagraph->setPropertyValue("ParaStyleName", uno::Any(OUString("Quotations"))); + + // When exporting to XHTML: + ExportToReqif(); + + // Then make sure the output is valid xhtml: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed: + // - expected:

      ...

      + // - actual :
      ...
      + // i.e.
      is can't have character children, but it had. + assertXPathContent(pXmlDoc, + "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:blockquote/reqif-xhtml:p", + "string"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifImageToOle) +{ + // Given a document with an image: + loadURL("private:factory/swriter", nullptr); + OUString aImageURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole2.png"; + uno::Sequence aArgs = { + comphelper::makePropertyValue("FileName", aImageURL), + }; + dispatchCommand(mxComponent, ".uno:InsertGraphic", aArgs); + + // When exporting to XHTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("ExportImagesAsOLE", true), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure we export that PNG as WMF in ReqIF mode: + OUString aRtfUrl = GetOlePath(); + SvMemoryStream aRtf; + HtmlExportTest::wrapRtfFragment(aRtfUrl, aRtf); + tools::SvRef xReader(new TestReqIfRtfReader(aRtf)); + CPPUNIT_ASSERT(xReader->CallParser() != SvParserState::Error); + // Without the accompanying fix in place, this test would have failed: + // - Expected: 8 + // - Actual : 0 + // i.e. the image was exported as PNG, not as WMF (with a version). + CPPUNIT_ASSERT_EQUAL(8, xReader->getWmetafile()); + + // Make sure that the native data byte array is not empty. + SvMemoryStream aOle1; + CPPUNIT_ASSERT(xReader->WriteObjectData(aOle1)); + // Without the accompanying fix in place, this test would have failed, as aOle1 was empty. + OLE1Reader aOle1Reader(aOle1); + CPPUNIT_ASSERT(aOle1Reader.m_nNativeDataSize); + + // Make sure that the presentation data byte array is not empty. + // Without the accompanying fix in place, this test would have failed, as aOle1 only contained + // the native data. + CPPUNIT_ASSERT(aOle1Reader.m_nPresentationDataSize); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedPNGDirectly) +{ + // Given a document with an image: + loadURL("private:factory/swriter", nullptr); + OUString aImageURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole2.png"; + uno::Sequence aArgs = { + comphelper::makePropertyValue("FileName", aImageURL), + }; + dispatchCommand(mxComponent, ".uno:InsertGraphic", aArgs); + + // When exporting to XHTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the PNG is embedded directly, without an RTF wrapper: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: image/png + // - Actual : text/rtf + // i.e. even PNG was wrapped in an RTF. + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "type", "image/png"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedJPGDirectly) +{ + // Given a document with an image: + loadURL("private:factory/swriter", nullptr); + OUString aImageURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "reqif-ole-img.jpg"; + uno::Sequence aArgs = { + comphelper::makePropertyValue("FileName", aImageURL), + }; + dispatchCommand(mxComponent, ".uno:InsertGraphic", aArgs); + + // When exporting to XHTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the JPG is embedded directly, without an RTF wrapper: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "type", "image/jpeg"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: image/jpeg + // - Actual : image/png + // i.e. first the original JPG data was lost, then the inner PNG fallback was missing. + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object/reqif-xhtml:object", "type", + "image/png"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedPNGShapeDirectly) +{ + // Given a document with an image shape: + loadURL("private:factory/swriter", nullptr); + OUString aImageURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole2.png"; + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xShape( + xFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"), uno::UNO_QUERY); + xShape->setSize(awt::Size(10000, 10000)); + uno::Reference xShapeProps(xShape, uno::UNO_QUERY); + xShapeProps->setPropertyValue("GraphicURL", uno::Any(aImageURL)); + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + xDrawPageSupplier->getDrawPage()->add(xShape); + + // When exporting to XHTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the PNG is embedded directly, without an RTF wrapper: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - no attribute 'type' exist + // i.e. the PNG was exported as GIF, without an explicit type. + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "type", "image/png"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedJPGShapeDirectly) +{ + // Given a document with an image: + loadURL("private:factory/swriter", nullptr); + OUString aImageURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "reqif-ole-img.jpg"; + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xShape( + xFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"), uno::UNO_QUERY); + xShape->setSize(awt::Size(10000, 10000)); + uno::Reference xShapeProps(xShape, uno::UNO_QUERY); + xShapeProps->setPropertyValue("GraphicURL", uno::Any(aImageURL)); + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + xDrawPageSupplier->getDrawPage()->add(xShape); + + // When exporting to XHTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the JPG is embedded directly, without an RTF wrapper: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: image/jpeg + // - Actual : image/png + // i.e. first the original JPG data was lost, then the inner PNG fallback was missing. + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "type", "image/jpeg"); + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object/reqif-xhtml:object", "type", + "image/png"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedPNGShapeAsOLE) +{ + // Given a document with an image shape: + loadURL("private:factory/swriter", nullptr); + OUString aImageURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole2.png"; + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xShape( + xFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"), uno::UNO_QUERY); + xShape->setSize(awt::Size(10000, 10000)); + uno::Reference xShapeProps(xShape, uno::UNO_QUERY); + xShapeProps->setPropertyValue("GraphicURL", uno::Any(aImageURL)); + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + xDrawPageSupplier->getDrawPage()->add(xShape); + + // When exporting to XHTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("ExportImagesAsOLE", true), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the PNG is embedded with an RTF wrapper: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: text/rtf + // - Actual : image/png + // i.e. the OLE wrapper around the PNG was missing. + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "type", "text/rtf"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedShapeAsPNG) +{ + // Given a document with a shape: + loadURL("private:factory/swriter", nullptr); + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xShape( + xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setSize(awt::Size(10000, 10000)); + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + xDrawPageSupplier->getDrawPage()->add(xShape); + + // When exporting to XHTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the shape is embedded as a PNG: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: image/png + // - Actual : image/x-vclgraphic + // i.e. the result was invalid ReqIF. + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "type", "image/png"); + + // Then check the pixel size of the shape: + Size aPixelSize(Application::GetDefaultDevice()->LogicToPixel(Size(10000, 10000), + MapMode(MapUnit::Map100thMM))); + // Without the accompanying fix in place, this test would have failed with: + // - no attribute 'width' exist + // i.e. shapes had no width. + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "width", + OUString::number(aPixelSize.getWidth())); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testShapeAsImageHtml) +{ + // Given a document with a shape: + loadURL("private:factory/swriter", nullptr); + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xShape( + xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setSize(awt::Size(5080, 2540)); + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + xDrawPageSupplier->getDrawPage()->add(xShape); + + // When exporting to plain HTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + mxComponent->dispose(); + + // Then make sure importing it back results in a clean doc model: + mxComponent = loadFromDesktop(maTempFile.GetURL()); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: + // - Actual : /> + // i.e. the output was not well-formed. + CPPUNIT_ASSERT_EQUAL(OUString(" "), getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testJson) +{ + // Given a document with a shape: + loadURL("private:factory/swriter", nullptr); + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xShape( + xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setSize(awt::Size(2540, 2540)); + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + xDrawPageSupplier->getDrawPage()->add(xShape); + + // When exporting to HTML, and specifying options as JSON: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + OUString aJson("{\"XhtmlNs\":{\"type\":\"string\", \"value\":\"reqif-xhtml\"}," + "\"ShapeDPI\":{\"type\":\"long\",\"value\":\"192\"}}"); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", aJson), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure those options are not ignored: + // Without the accompanying fix in place, this test would have failed, as GetPngPath() expects + // XML output, but xhtmlns=reqif-xhtml was ignored. + OUString aPngUrl = GetPngPath(); + SvFileStream aFileStream(aPngUrl, StreamMode::READ); + GraphicDescriptor aDescriptor(aFileStream, nullptr); + aDescriptor.Detect(/*bExtendedInfo=*/true); + // Make sure that the increased DPI is taken into account: + tools::Long nExpected = 192; + CPPUNIT_ASSERT_EQUAL(nExpected, aDescriptor.GetSizePixel().getWidth()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedShapeAsPNGCustomDPI) +{ + // Given a document with a shape: + loadURL("private:factory/swriter", nullptr); + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xShape( + xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setSize(awt::Size(5080, 2540)); + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + xDrawPageSupplier->getDrawPage()->add(xShape); + sal_Int32 nDPI = 600; + + // When exporting to XHTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("ShapeDPI", nDPI), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the shape is embedded as a PNG: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pXmlDoc); + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "type", "image/png"); + + // Then check the pixel size of the shape: + Size aPixelSize(Application::GetDefaultDevice()->LogicToPixel(Size(5080, 2540), + MapMode(MapUnit::Map100thMM))); + tools::Long nPNGWidth = 1200; + OUString aPngUrl = GetPngPath(); + SvFileStream aFileStream(aPngUrl, StreamMode::READ); + GraphicDescriptor aDescriptor(aFileStream, nullptr); + aDescriptor.Detect(/*bExtendedInfo=*/true); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1200 + // - Actual : 1000 + // i.e. first setting a double DPI didn't result in larger pixel width of the PNG, then it was + // limited to 1000 pixels (because the pixel limit was 500k). + CPPUNIT_ASSERT_EQUAL(nPNGWidth, aDescriptor.GetSizePixel().getWidth()); + + // Then make sure the shape's logic size (in CSS pixels) don't change: + assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "width", + OUString::number(aPixelSize.getWidth())); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifOleBmpTransparent) +{ + // Given a document with a transparent image: + loadURL("private:factory/swriter", nullptr); + OUString aImageURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "transparent.png"; + uno::Sequence aArgs = { + comphelper::makePropertyValue("FileName", aImageURL), + }; + dispatchCommand(mxComponent, ".uno:InsertGraphic", aArgs); + + // When exporting to reqif with ExportImagesAsOLE=true: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("ExportImagesAsOLE", true), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the transparent pixel turns into white: + OUString aRtfUrl = GetOlePath(); + SvMemoryStream aRtf; + HtmlExportTest::wrapRtfFragment(aRtfUrl, aRtf); + tools::SvRef xReader(new TestReqIfRtfReader(aRtf)); + CPPUNIT_ASSERT(xReader->CallParser() != SvParserState::Error); + SvMemoryStream aOle1; + CPPUNIT_ASSERT(xReader->WriteObjectData(aOle1)); + OLE1Reader aOle1Reader(aOle1); + SvMemoryStream aBitmapStream(aOle1Reader.m_aNativeData.data(), aOle1Reader.m_aNativeData.size(), + StreamMode::READ); + Bitmap aBitmap; + ReadDIB(aBitmap, aBitmapStream, /*bFileHeader=*/true); + Size aBitmapSize = aBitmap.GetSizePixel(); + BitmapEx aBitmapEx(aBitmap); + Color nActualColor + = aBitmapEx.GetPixelColor(aBitmapSize.getWidth() - 1, aBitmapSize.getHeight() - 1); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: Color: R:255 G:255 B:255 A:0 + // - Actual : Color: R:0 G:0 B:0 A:0 + // i.e. the bitmap without an alpha channel was black, not white. + CPPUNIT_ASSERT_EQUAL(COL_WHITE, nActualColor); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testListsHeading) +{ + // Given a document with lh, lh, li, li, lh and lh nodes: + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("list 1, header 1"); + pWrtShell->SplitNode(); + pWrtShell->Insert("list 1, header 2"); + pWrtShell->SplitNode(); + pWrtShell->Insert("list 2, item 1"); + pWrtShell->SplitNode(); + pWrtShell->Insert("list 2, item 2"); + pWrtShell->SplitNode(); + pWrtShell->Insert("list 3, header 1"); + pWrtShell->SplitNode(); + pWrtShell->Insert("list 3, header 2"); + SwDoc* pDoc = pWrtShell->GetDoc(); + pWrtShell->Up(false, 5); + { + sal_uInt16 nPos = pDoc->MakeNumRule(pDoc->GetUniqueNumRuleName()); + SwNumRule* pNumRule = pDoc->GetNumRuleTable()[nPos]; + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + rTextNode.SetCountedInList(false); + } + pWrtShell->Down(false, 1); + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + rTextNode.SetCountedInList(false); + } + } + pWrtShell->Down(false, 1); + { + sal_uInt16 nPos = pDoc->MakeNumRule(pDoc->GetUniqueNumRuleName()); + SwNumRule* pNumRule = pDoc->GetNumRuleTable()[nPos]; + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + } + pWrtShell->Down(false, 1); + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + } + } + pWrtShell->Down(false, 1); + { + sal_uInt16 nPos = pDoc->MakeNumRule(pDoc->GetUniqueNumRuleName()); + SwNumRule* pNumRule = pDoc->GetNumRuleTable()[nPos]; + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + rTextNode.SetCountedInList(false); + } + pWrtShell->Down(false, 1); + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + rTextNode.SetCountedInList(false); + } + } + + // When exporting to ReqIF: + ExportToReqif(); + + // Then make sure the output is valid xhtml: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + + // Without the accompanying fix in place, this test would have failed with: + // - In <>, XPath '/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p' not found + // Because the headers of list 1 were inside
        , not directly under
        . + assertXPathContent(pXmlDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:p", + "list 1, header 1"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testOleEmfPreviewToHtml) +{ + // Given a document containing an embedded object, with EMF preview: + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole2.odt"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {}); + + // When exporting to HTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure the tag has matching file extension and data: + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + OUString aPath = getXPath(pDoc, "/html/body/p/img", "src"); + // Without the accompanying fix in place, this test would have failed, as aPath was + // ole_html_3978e5f373402b43.JPG, with EMF data. + CPPUNIT_ASSERT(aPath.endsWith("gif")); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testNestedBullets) +{ + // Given a documented with nested lists: + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("first"); + sal_uInt16 nPos = pDoc->MakeNumRule(pDoc->GetUniqueNumRuleName()); + SwNumRule* pNumRule = pDoc->GetNumRuleTable()[nPos]; + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + rTextNode.SetAttrListLevel(0); + } + pWrtShell->SplitNode(); + pWrtShell->Insert("second"); + { + SwNode& rNode = pWrtShell->GetCursor()->GetPoint()->nNode.GetNode(); + SwTextNode& rTextNode = *rNode.GetTextNode(); + rTextNode.SetAttr(SwNumRuleItem(pNumRule->GetName())); + rTextNode.SetAttrListLevel(1); + } + + // When exporting to xhtml: + ExportToReqif(); + + // Then make sure that there is a
      1. between the outer and the inner
          : + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + // Without the accompanying fix in place, this test would have failed with: + // - XPath '//reqif-xhtml:ol/reqif-xhtml:li/reqif-xhtml:ol/reqif-xhtml:li/reqif-xhtml:p' not found + // i.e. the
        1. inside the outer
            was missing. + assertXPathContent( + pXmlDoc, "//reqif-xhtml:ol/reqif-xhtml:li/reqif-xhtml:ol/reqif-xhtml:li/reqif-xhtml:p", + "second"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testTrailingLineBreak) +{ + // Given a document with a trailing line-break: + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("test\n"); + + // When exporting to reqif-xhtml: + ExportToReqif(); + + // Then make sure that we still have a single line-break: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 2 + // - XPath '//reqif-xhtml:br' number of nodes is incorrect + assertXPath(pXmlDoc, "//reqif-xhtml:br", 1); + + // Then test the import side: + + // Given an empty document: + mxComponent->dispose(); + + // When importing a
            from reqif-xhtml: + ImportFromReqif(maTempFile.GetURL()); + + // Then make sure that line-break is not lost: + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + pDoc = pTextDoc->GetDocShell()->GetDoc(); + pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + OUString aActual = pWrtShell->GetCursor()->GetNode().GetTextNode()->GetText(); + // Without the accompanying fix in place, this test would have failed, as the trailing + // line-break was lost. + CPPUNIT_ASSERT_EQUAL(OUString("test\n"), aActual); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testLeadingTab) +{ + // Given a document with leading tabs: + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("\t first"); + pWrtShell->SplitNode(); + pWrtShell->Insert("\t\t second"); + pWrtShell->SplitNode(); + pWrtShell->Insert("thi \t rd"); + + // When exporting to HTML, using LeadingTabWidth=2: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("LeadingTabWidth", static_cast(2)), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure that leading tabs are replaced with 2 nbsps: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + CPPUNIT_ASSERT(pDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: first + // - Actual : first + // i.e. the leading tab was not replaced by 2 nbsps. + assertXPathContent(pXmlDoc, "//reqif-xhtml:p[1]", u"\xa0\xa0 first"); + // Test a leading tab that is not at the start of the paragraph: + assertXPathContent(pXmlDoc, "//reqif-xhtml:p[2]", u"\xa0\xa0\xa0\xa0 second"); + // Test a tab which is not leading: + assertXPathContent(pXmlDoc, "//reqif-xhtml:p[3]", u"thi \t rd"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testLeadingTabHTML) +{ + // Given a document with leading tabs: + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("\t test"); + + // When exporting to plain HTML, using LeadingTabWidth=2: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("LeadingTabWidth", static_cast(2)), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure that leading tabs are replaced with 2 nbsps: + htmlDocUniquePtr pHtmlDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pHtmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: test + // - Actual : test + // i.e. the leading tab was not replaced by 2 nbsps. + assertXPathContent(pHtmlDoc, "/html/body/p", SAL_NEWLINE_STRING u"\xa0\xa0 test"); +} + +CPPUNIT_TEST_FIXTURE(HtmlExportTest, testClearingBreak) +{ + auto verify = [this]() { + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + uno::Reference xPortions = xParagraph->createEnumeration(); + uno::Reference xPortion; + OUString aPortionType; + while (true) + { + // Ignore leading comments. + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + xPortion->getPropertyValue("TextPortionType") >>= aPortionType; + if (aPortionType != "Annotation") + { + break; + } + } + // Skip "foo". + // 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 first para was just comments + text portion, the clearing break was lost. + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + xPortion->getPropertyValue("TextPortionType") >>= aPortionType; + CPPUNIT_ASSERT_EQUAL(OUString("LineBreak"), aPortionType); + uno::Reference xLineBreak; + xPortion->getPropertyValue("LineBreak") >>= xLineBreak; + sal_Int16 eClear{}; + uno::Reference xLineBreakProps(xLineBreak, uno::UNO_QUERY); + xLineBreakProps->getPropertyValue("Clear") >>= eClear; + CPPUNIT_ASSERT_EQUAL(static_cast(SwLineBreakClear::ALL), eClear); + }; + + // Given a document with an at-para anchored image + a clearing break: + // When loading that file: + load(mpTestDocumentPath, "clearing-break.html"); + // Then make sure that the clear property of the break is not ignored: + verify(); + reload(mpFilter, "clearing-break.html"); + // Make sure that the clear property of the break is not ignored during export: + verify(); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testTableBackground) +{ + // Given a document with two tables: first stable has a background, second table has a + // background in its first row: + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwInsertTableOptions aInsertTableOptions(SwInsertTableFlags::DefaultBorder, + /*nRowsToRepeat=*/0); + pWrtShell->InsertTable(aInsertTableOptions, /*nRows=*/1, /*nCols=*/1); + pWrtShell->MoveTable(GotoPrevTable, fnTableStart); + SvxBrushItem aBrush(Color(0xff0000), RES_BACKGROUND); + pWrtShell->SetTabBackground(aBrush); + pWrtShell->Down(/*bSelect=*/false); + pWrtShell->SplitNode(); + pWrtShell->InsertTable(aInsertTableOptions, /*nRows=*/2, /*nCols=*/1); + pWrtShell->MoveTable(GotoPrevTable, fnTableStart); + aBrush.SetColor(0x00ff00); + pWrtShell->SetRowBackground(aBrush); + pWrtShell->Down(/*bSelect=*/false); + // Second row has an explicit transparent background. + aBrush.SetColor(COL_TRANSPARENT); + pWrtShell->SetRowBackground(aBrush); + + // When exporting to reqif-xhtml: + ExportToReqif(); + + // Then make sure that CSS markup is used, not HTML one: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + // Without the accompanying fix in place, this test would have failed with: + // - XPath '//reqif-xhtml:table[1]' no attribute 'style' exist + // i.e. HTML markup was used for the table background color. + assertXPath(pXmlDoc, "//reqif-xhtml:table[1]", "style", "background: #ff0000"); + assertXPathNoAttribute(pXmlDoc, "//reqif-xhtml:table[1]", "bgcolor"); + assertXPath(pXmlDoc, "//reqif-xhtml:table[2]/reqif-xhtml:tr[1]", "style", + "background: #00ff00"); + assertXPathNoAttribute(pXmlDoc, "//reqif-xhtml:table[2]/reqif-xhtml:tr[1]", "bgcolor"); + // Second row has no explicit style, the default is not written. + assertXPathNoAttribute(pXmlDoc, "//reqif-xhtml:table[2]/reqif-xhtml:tr[2]", "style"); +} + +CPPUNIT_TEST_FIXTURE(HtmlExportTest, testImageKeepRatio) +{ + // Given a document with an image: width is relative, height is "keep ratio": + createSwDoc(); + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xTextGraphic( + xFactory->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY); + xTextGraphic->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AS_CHARACTER)); + xTextGraphic->setPropertyValue("RelativeWidth", uno::Any(static_cast(42))); + xTextGraphic->setPropertyValue("IsSyncHeightToWidth", uno::Any(true)); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xBodyText = xTextDocument->getText(); + uno::Reference xCursor(xBodyText->createTextCursor()); + uno::Reference xTextContent(xTextGraphic, uno::UNO_QUERY); + xBodyText->insertTextContent(xCursor, xTextContent, false); + + // When exporting to HTML: + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure that the width is not a fixed size, that would break on resizing the browser + // window: + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: auto + // - Actual : 2 + // i.e. a static (CSS pixel) height was written. + assertXPath(pDoc, "/html/body/p/img", "height", "auto"); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testSectionDir) +{ + // Given a document with a section: + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("test"); + pWrtShell->SelAll(); + SwSectionData aSectionData(SectionType::Content, "mysect"); + pWrtShell->InsertSection(aSectionData); + + // When exporting to (reqif-)xhtml: + ExportToReqif(); + + // Then make sure CSS is used to export the text direction of the section: + SvMemoryStream aStream; + WrapReqifFromTempFile(aStream); + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + // Without the accompanying fix in place, this test would have failed with: + // - XPath '//reqif-xhtml:div[@id='mysect']' no attribute 'style' exist + // i.e. the dir="ltr" HTML attribute was used instead. + assertXPath(pXmlDoc, "//reqif-xhtml:div[@id='mysect']", "style", "dir: ltr"); +} + +CPPUNIT_TEST_FIXTURE(HtmlExportTest, testTdf114769) +{ + // Create document from scratch since relative urls to filesystem can be replaced + // by absolute during save/load + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("Hyperlink1"); + pWrtShell->SplitNode(); + pWrtShell->Insert("Hyperlink2"); + pWrtShell->SplitNode(); + pWrtShell->Insert("Hyperlink3"); + pWrtShell->SplitNode(); + pWrtShell->Insert("Hyperlink4"); + pWrtShell->SplitNode(); + pWrtShell->Insert("Hyperlink5"); + pWrtShell->SplitNode(); + + // Normal external URL + uno::Reference xRun(getRun(getParagraph(1), 1), uno::UNO_QUERY); + xRun->setPropertyValue("HyperLinkURL", uno::Any(OUString("http://libreoffice.org/"))); + + // Bookmark reference + xRun.set(getRun(getParagraph(2), 1), uno::UNO_QUERY); + xRun->setPropertyValue("HyperLinkURL", uno::Any(OUString("#some_bookmark"))); + + // Filesystem absolute link + xRun.set(getRun(getParagraph(3), 1), uno::UNO_QUERY); + xRun->setPropertyValue("HyperLinkURL", uno::Any(OUString("C:\\test.txt"))); + + // Filesystem relative link + xRun.set(getRun(getParagraph(4), 1), uno::UNO_QUERY); + xRun->setPropertyValue("HyperLinkURL", uno::Any(OUString("..\\..\\test.odt"))); + + // Filesystem relative link + xRun.set(getRun(getParagraph(5), 1), uno::UNO_QUERY); + xRun->setPropertyValue("HyperLinkURL", uno::Any(OUString(".\\another.odt"))); + + // Export + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProperties + = { comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")) }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + htmlDocUniquePtr pHtmlDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pHtmlDoc); + + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice.org/"), + getXPath(pHtmlDoc, "/html/body/p[1]/a", "href")); + CPPUNIT_ASSERT_EQUAL(OUString("#some_bookmark"), + getXPath(pHtmlDoc, "/html/body/p[2]/a", "href")); + CPPUNIT_ASSERT_EQUAL(OUString("C:\\test.txt"), getXPath(pHtmlDoc, "/html/body/p[3]/a", "href")); + CPPUNIT_ASSERT_EQUAL(OUString("..\\..\\test.odt"), + getXPath(pHtmlDoc, "/html/body/p[4]/a", "href")); + CPPUNIT_ASSERT_EQUAL(OUString(".\\another.odt"), + getXPath(pHtmlDoc, "/html/body/p[5]/a", "href")); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/htmlexport/xhtmlexport.cxx b/sw/qa/extras/htmlexport/xhtmlexport.cxx new file mode 100644 index 000000000..9f5b26745 --- /dev/null +++ b/sw/qa/extras/htmlexport/xhtmlexport.cxx @@ -0,0 +1,176 @@ +/* -*- 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 +#include + +#include + +class XHtmlExportTest : public SwModelTestBase, public HtmlTestTools +{ +public: + XHtmlExportTest() + : SwModelTestBase("/sw/qa/extras/odfexport/data/", "XHTML Writer File") + { + } + +private: + virtual std::unique_ptr preTest(const char*) override + { + setFilterOptions("UTF8"); + return nullptr; + } +}; + +#define DECLARE_HTMLEXPORT_TEST(TestName, filename) \ + DECLARE_SW_EXPORT_TEST(TestName, filename, nullptr, XHtmlExportTest) + +DECLARE_HTMLEXPORT_TEST(testImageEmbedding, "image-mimetype.odt") +{ + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + assertXPath(pDoc, "/html/body", 1); + assertXPath(pDoc, "/html/body/div[1]/div[1]/img", 1); + OUString aValue = getXPath(pDoc, "/html/body/div[1]/div[1]/img", "src"); + CPPUNIT_ASSERT(aValue.startsWith("data:image/svg+xml;base64")); +} + +DECLARE_HTMLEXPORT_TEST(testTdf131812, "tdf131812.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + CPPUNIT_ASSERT( + aStream.indexOf(".P1 { font-size:12pt; font-family:\'Liberation Serif\'; " + "writing-mode:horizontal-tb; direction:rtl; text-align:right ! important;}") + != -1); +} + +DECLARE_HTMLEXPORT_TEST(testTdf146264, "tdf146264.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + sal_Int32 nFirstHello = aStream.indexOf("Hello"); + CPPUNIT_ASSERT(nFirstHello > 0); + if (nFirstHello > 0) + { + sal_Int32 nSecondHello = aStream.indexOf("Hello", nFirstHello + 1); + constexpr sal_Int32 nMinusOne = -1; + CPPUNIT_ASSERT_EQUAL(nMinusOne, nSecondHello); + } +} + +DECLARE_HTMLEXPORT_TEST(testTdf118637, "tdf118637.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + CPPUNIT_ASSERT( + aStream.indexOf( + "
            The formula  
            ") + != -1); + CPPUNIT_ASSERT( + aStream.indexOf( + "
            should be inline.
            ") + != -1); +} + +DECLARE_HTMLEXPORT_TEST(testTdf145361, "tdf145361.odt") +{ + // Without the fix in place, this test would have failed with + // - SfxBaseModel::impl_store failed: 0xc10(Error Area:Io Class:Write Code:16) + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + CPPUNIT_ASSERT( + aStream.indexOf("List entry has
            a line break") != -1); +} + +DECLARE_HTMLEXPORT_TEST(testTdf142483, "tdf142483.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + CPPUNIT_ASSERT( + aStream.indexOf("padding:0.0382in; border-left-width:thin; border-left-style:solid; " + "border-left-color:#000000; border-right-style:none; " + "border-top-width:thin; border-top-style:solid; border-top-color:#000000; " + "border-bottom-width:thin; border-bottom-style:solid; " + "border-bottom-color:#000000;") + != -1); + CPPUNIT_ASSERT( + aStream.indexOf("padding:0.0382in; border-left-width:thin; border-left-style:solid; " + "border-left-color:#000000; border-right-style:none; " + "border-top-style:none; border-bottom-width:thin; " + "border-bottom-style:solid; border-bottom-color:#000000;") + != -1); + CPPUNIT_ASSERT( + aStream.indexOf("border-top-width:thin; border-top-style:solid; border-top-color:#000000; " + "border-left-width:thin; border-left-style:solid; " + "border-left-color:#000000; border-bottom-width:thin; " + "border-bottom-style:solid; border-bottom-color:#000000; " + "border-right-width:thin; border-right-style:solid; " + "border-right-color:#000000; padding:0.0382in;") + != -1); + CPPUNIT_ASSERT( + aStream.indexOf("padding:0.0382in; border-left-width:thin; border-left-style:solid; " + "border-left-color:#000000; border-right-width:thin; " + "border-right-style:solid; border-right-color:#000000; " + "border-top-style:none; border-bottom-width:thin; " + "border-bottom-style:solid; border-bottom-color:#000000;") + != -1); +} + +DECLARE_HTMLEXPORT_TEST(testTdf107696, "tdf107696.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + //tdf#111492 + CPPUNIT_ASSERT(aStream.indexOf("span.heading_numbering { margin-right: 0.8rem; }* { margin:0;}") + != -1); + CPPUNIT_ASSERT( + aStream.indexOf("

            Level 2 without number

            ") + != -1); + CPPUNIT_ASSERT( + aStream.indexOf("

            3.1Level 2, number 3.1

            ") + != -1); + CPPUNIT_ASSERT( + aStream.indexOf("

            3.2Level 2, number 3.2

            ") + != -1); +} + +DECLARE_HTMLEXPORT_TEST(testTdf66305, "tdf66305.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + sal_uInt64 nLength = pStream->TellEnd(); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + CPPUNIT_ASSERT( + aStream.indexOf("

            Introduction

             

            ") + != -1); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/htmlimport/data/PageAndParagraphFilled.html b/sw/qa/extras/htmlimport/data/PageAndParagraphFilled.html new file mode 100644 index 000000000..fbe1ff1e1 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/PageAndParagraphFilled.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +

            +Er hörte leise Schritte hinter sich. Das bedeutete nichts Gutes. +Wer würde ihm schon folgen, spät in der Nacht und dazu noch +in dieser engen Gasse mitten im übel beleumundeten Hafenviertel? +Gerade jetzt, wo er das Ding seines Lebens gedreht hatte und mit der +Beute verschwinden wollte! Hatte einer seiner zahllosen Kollegen +dieselbe Idee gehabt, ihn beobachtet und abgewartet, um ihn nun um +die Früchte seiner Arbeit zu erleichtern? Oder gehörten die +Schritte hinter ihm zu einem der unzähligen Gesetzeshüter +dieser Stadt, und die stählerne Acht um seine Handgelenke würde +gleich zuschnappen? Er konnte die Aufforderung stehen zu bleiben +schon hören. Gehetzt sah er sich um. Plötzlich erblickte er +den schmalen Durchgang. Blitzartig drehte er sich nach rechts und +verschwand zwischen den beiden Gebäuden. Beinahe wäre er +dabei über den umgestürzten Mülleimer gefallen, der +mitten im Weg lag. Er versuchte, sich in der Dunkelheit seinen Weg zu +ertasten und erstarrte: Anscheinend gab es keinen anderen Ausweg aus +diesem kleinen Hof als den Durchgang, durch den er gekommen war. Die +Schritte wurden lauter und lauter, er sah eine dunkle Gestalt um die +Ecke biegen. Fieberhaft irrten seine Augen durch die nächtliche +Dunkelheit und suchten einen Ausweg. War jetzt wirklich alles vorbei, +waren alle Mühe und alle Vorbereitungen umsonst? Er presste sich +ganz eng an die Wand hinter ihm und hoffte, der Verfolger würde +ihn übersehen, als plötzlich neben ihm mit kaum +wahrnehmbarem Quietschen eine Tür im nächtlichen Wind hin +und her schwang. Könnte dieses der flehentlich herbeigesehnte +Ausweg aus seinem Dilemma sein? Langsam bewegte er sich auf die +offene Tür zu, immer dicht an die Mauer gepresst. Würde +diese Tür seine Rettung werden?

            + + \ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/allowed-rtf-ole-mime-types.xhtml b/sw/qa/extras/htmlimport/data/allowed-rtf-ole-mime-types.xhtml new file mode 100644 index 000000000..9b01ad72a --- /dev/null +++ b/sw/qa/extras/htmlimport/data/allowed-rtf-ole-mime-types.xhtml @@ -0,0 +1,5 @@ + + + OLE Object + + diff --git a/sw/qa/extras/htmlimport/data/data.ole b/sw/qa/extras/htmlimport/data/data.ole new file mode 100644 index 000000000..d3dc23d79 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/data.ole @@ -0,0 +1 @@ +{\pict} diff --git a/sw/qa/extras/htmlimport/data/emojis16BE.html b/sw/qa/extras/htmlimport/data/emojis16BE.html new file mode 100644 index 000000000..023aee1cb Binary files /dev/null and b/sw/qa/extras/htmlimport/data/emojis16BE.html differ diff --git a/sw/qa/extras/htmlimport/data/hidden-textframe.html b/sw/qa/extras/htmlimport/data/hidden-textframe.html new file mode 100644 index 000000000..5e9704279 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/hidden-textframe.html @@ -0,0 +1,8 @@ + + + +

            test

            +
            +
            + + diff --git a/sw/qa/extras/htmlimport/data/image-lazy-read.html b/sw/qa/extras/htmlimport/data/image-lazy-read.html new file mode 100644 index 000000000..afc19a7a6 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/image-lazy-read.html @@ -0,0 +1,11 @@ + +

            +aaa +

            +

            +bbb +

            +

            + +

            + diff --git a/sw/qa/extras/htmlimport/data/image-size.html b/sw/qa/extras/htmlimport/data/image-size.html new file mode 100644 index 000000000..a26c60610 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/image-size.html @@ -0,0 +1,25 @@ + + + + + + + +

            +
            + +

            +

            +
            + +

            +

            + +
            + +

            + + diff --git a/sw/qa/extras/htmlimport/data/image-width-auto.html b/sw/qa/extras/htmlimport/data/image-width-auto.html new file mode 100644 index 000000000..878be07ce --- /dev/null +++ b/sw/qa/extras/htmlimport/data/image-width-auto.html @@ -0,0 +1,40 @@ + + +

            + diff --git a/sw/qa/extras/htmlimport/data/inlined_image.html b/sw/qa/extras/htmlimport/data/inlined_image.html new file mode 100644 index 000000000..7ce2a29da --- /dev/null +++ b/sw/qa/extras/htmlimport/data/inlined_image.html @@ -0,0 +1,21 @@ + + + + + + + + + + + +

            Simple document with a picture.

            +

            +


            +
            + +

            + + \ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/libreoffice.jpg b/sw/qa/extras/htmlimport/data/libreoffice.jpg new file mode 100644 index 000000000..14af080b1 Binary files /dev/null and b/sw/qa/extras/htmlimport/data/libreoffice.jpg differ diff --git a/sw/qa/extras/htmlimport/data/list-style.html b/sw/qa/extras/htmlimport/data/list-style.html new file mode 100644 index 000000000..8c5468aa1 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/list-style.html @@ -0,0 +1,58 @@ + + + +
            +

            + This document contains a number of lists... +

              +
            • list-style-type
            • +
            • default
            • +
            +
              +
            • list-style-type
            • +
            • circle
            • +
            +
              +
            • list-style-type
            • +
            • square
            • +
            +
              +
            • list-style-type
            • +
            • disc
            • +
            +
              +
            1. list-style-type
            2. +
            3. default
            4. +
            +
              +
            1. list-style-type
            2. +
            3. decimal
            4. +
            +
              +
            1. list-style-type
            2. +
            3. lower-alpha
            4. +
            +
              +
            1. list-style-type
            2. +
            3. lower-latin
            4. +
            +
              +
            1. list-style-type
            2. +
            3. lower-roman
            4. +
            +
              +
            1. list-style-type
            2. +
            3. upper-alpha
            4. +
            +
              +
            1. list-style-type
            2. +
            3. upper-latin
            4. +
            +
              +
            1. list-style-type
            2. +
            3. upper-roman
            4. +
            +

            +
            + + diff --git a/sw/qa/extras/htmlimport/data/meta-ISO8601-dates.html b/sw/qa/extras/htmlimport/data/meta-ISO8601-dates.html new file mode 100644 index 000000000..86390d77e --- /dev/null +++ b/sw/qa/extras/htmlimport/data/meta-ISO8601-dates.html @@ -0,0 +1,20 @@ + + + + + + + + + + + +

            +Test +

            + + diff --git a/sw/qa/extras/htmlimport/data/meta-changedby.html b/sw/qa/extras/htmlimport/data/meta-changedby.html new file mode 100644 index 000000000..b228b3107 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/meta-changedby.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + +

            +Test +

            + + diff --git a/sw/qa/extras/htmlimport/data/ole-data.xhtml b/sw/qa/extras/htmlimport/data/ole-data.xhtml new file mode 100644 index 000000000..e8f1910ad --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole-data.xhtml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sw/qa/extras/htmlimport/data/ole-data2.xhtml b/sw/qa/extras/htmlimport/data/ole-data2.xhtml new file mode 100644 index 000000000..0eb180e6c --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole-data2.xhtml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/sw/qa/extras/htmlimport/data/ole-img-svg.xhtml b/sw/qa/extras/htmlimport/data/ole-img-svg.xhtml new file mode 100644 index 000000000..2e063937f --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole-img-svg.xhtml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sw/qa/extras/htmlimport/data/ole-img.xhtml b/sw/qa/extras/htmlimport/data/ole-img.xhtml new file mode 100644 index 000000000..798787290 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole-img.xhtml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sw/qa/extras/htmlimport/data/ole2.gif b/sw/qa/extras/htmlimport/data/ole2.gif new file mode 100644 index 000000000..19e9785e5 Binary files /dev/null and b/sw/qa/extras/htmlimport/data/ole2.gif differ diff --git a/sw/qa/extras/htmlimport/data/ole2.ole b/sw/qa/extras/htmlimport/data/ole2.ole new file mode 100644 index 000000000..96407e88f --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole2.ole @@ -0,0 +1,1014 @@ +{\object\objemb{\*\objclass PowerPoint.Show.12}\objw10020\objh5638{\*\objdata +01050000 +02000000 +13000000 +506f776572506f696e742e53686f772e313200 +00000000 +00000000 +00940000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000 +0000000000010000000100000000000000001000000200000001000000feffffff000000000000 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffdffffff47000000feffffff48000000050000000600000007000000080000000900 +00000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013 +0000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 +1d0000001e0000001f000000200000002100000022000000230000002400000025000000260000 +002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000 +00003100000032000000330000003400000035000000360000003700000038000000390000003a +0000003b0000003c0000003d0000003e0000003f00000040000000410000004200000043000000 +440000004500000046000000fefffffffefffffffeffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000016000500 +ffffffffffffffff02000000f4554fcf878f474d80bb5808164bb3f80000000000000000000000 +0080609bf8f8bcd30103000000000300000000000001004f006c00650000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000a000201ffffffffffffffffffffffff00000000000000000000000000000000 +00000000000000000000000000000000000000000000000014000000000000005000610063006b +006100670065000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000100002010100000004000000ffffffff0000000000 +000000000000000000000000000000000000000000000000000000000000000400000056840000 +00000000010043006f006d0070004f0062006a0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000012000200ffffffffffff +ffffffffffff000000000000000000000000000000000000000000000000000000000000000000 +000000010000007c00000000000000feffffff02000000feffffff040000000500000006000000 +0700000008000000090000000a000000fefffffffeffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff01000002000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000100feff030a0000fffffffff4554fcf878f474d80bb5808164bb3f8220000004d +6963726f736f667420506f776572506f696e742d5072e473656e746174696f6e000f0000004d53 +50726573656e746174696f6e0013000000506f776572506f696e742e53686f772e313200f439b2 +7100000000000000000000000000000000ffffffff030000000400000001000000ffffffff0200 +0000000000000a450000d8260000ba010000010009000003dd0000000600120000000000040000 +0003010800050000000b0200000000050000000c02cf08a80f030000001e0007000000fc020000 +ffffff000000040000002d01000008000000fa02050000000000ffffff00040000002d0101000e +00000024030500ffffffffffffcf08a80fcf08a80fffffffffffff08000000fa02000000000000 +00000000040000002d01020007000000fc020000ffffff000000040000002d01030004000000f0 +01000007000000fc0200004472c4000000040000002d0100000400000006010100040000002d01 +0100120000002403070065026a03e4086a03e408af025a0a2504e4089b05e408e0046502e00404 +0000002d0102000400000006010100040000002d0103000800504b030414000600080000002100 +dfcc18f5ad010000460c0000130008025b436f6e74656e745f54797065735d2e786d6c20a20402 +28a000020000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000cc975b4fc23014c7df4dfc0e4b5f0d2ba0221a060f5e9ebc90881fa06e07 +a8766dd316846fefd90582849b02b12f4bcecef9ffcfaf6bb776adce2415c1188ce54a46a41656 +4900325609978388bcf51e2a4d1258c764c2849210912958d2699f9eb47a530d3640b5b411193a +a76f28b5f110526643a54162a6af4cca1c866640358b3fd90068bd5a6dd0584907d2555ce641da +ad3be8b39170c1fd046f17241f1a0624b82d0ab35e11e169669027e84a8d016197344c6bc163e6 +304fc7325922ab9454212af31a3be4da9e61c19a0e59667d8352f7828fd3f004822e33ee99a558 +45b576541bb0a8cb6bc3cd4e2b5055bfcf6348543c4a51122e9aa5e24718a68ccbd920d6c15881 +379f987538f58b41edd0640bde3b319534c7e1d8469069ba46697b8cf9c98db7118c397c1d8560 +6ebc8dc0e13b0cc575ff49c86db67664ef025edd54c0c147bd60bdd3ea7b64533572e51a2c82e3 +acc4c2fbaf4c750f99ce3d64baf090e9d243a686874c571e32353d64baf690a956f511eabfbee4 +28cf775e3cf71af83dc3ec909aa92b1a8dc038be793f9b7744ebbd070dd9f9378164456f9aff05 +b4bf010000ffff0300504b03041400060008000000210068f874a103010000e20200000b000802 +5f72656c732f2e72656c7320a2040228a000020000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000ac92db4a03311086ef05df21cc7d37 +db2a22d26c6f44e89dc8fa006332bb1bdd1c48a6d2bebda1e061612d82bdcccc3f1fdf24596ff6 +6e14ef94b20d5ec1b2aa4190d7c158df2b786e1f16b72032a33738064f0a0e9461d35c5eac9f68 +442e4379b0318b42f159c1c01cefa4cc7a2087b90a917ce9742139e4724cbd8ca8dfb027b9aaeb +1b997e32a09930c5d628485b7305a23d44fa1f5b3a6234c8287548b488a94c27b66517d162ea89 +1598a01f4b391f135521839c175a9d5788879d7bf168c71995af5ef51aa9ff4d68f977a1d07556 +d37dd03b479ee7bca6896fa71859c644b9148fe95337747d4e21da337943e6f4a3618c9f4672f2 +339b0f000000ffff0300504b030414000600080000002100635c23b4c000000037010000200000 +007070742f736c696465732f5f72656c732f736c696465312e786d6c2e72656c738ccfbd6ac330 +1007f03dd07710b757b23b84102c65290543a7903ec0219d6d515b123ab9c46f1f8d3174c8785f +bf3fd75deecb2cfe28b38f41432b1b10146c743e8c1a7e6e5fef27105c30389c63200d1b315ccc +dba1bbd28ca51ef1e4138baa04d6309592ce4ab19d6841963151a89321e6054b2df3a812da5f1c +497d34cd51e56703ccce14bdd3907bd782b86d895eb1e330784b9fd1ae0b85f24f84e2d93bfac6 +2daea5b298472a1aa47ceeef965a592340994eedde350f000000ffff0300504b03041400060008 +00000021001b2e35070c010000d00300001f0008017070742f5f72656c732f70726573656e7461 +74696f6e2e786d6c2e72656c7320a2040128a00001000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000ac93414ec3301045f748dcc19a3d7152a042a84e3708a90b2404e100269924168e6d79 +4c21b7c76aa12455157591e5fff6fc799ab157ebef4eb32d7a52d608c89214189ad256ca3402de +8ac7ab3b6014a4a9a4b60605f448b0ce2f2f562fa8658845d42a472ca61812d086e0ee39a7b2c5 +4e52621d9a78525bdfc910a56fb893e5876c902fd274c9fd3003f25126db5402fca6ba0656f40e +cfc9b675ad4a7cb0e56787269c68c19d477af636366385f40d0601072b8969c04f432ce68420ad +2afc07d8c95f379b82c86687789214d01fa1eccdd18d49ace59c5841be6b7c0dbdc6c18a06e614 +c8edac20b176b0a49ddc9b93c3b8999361abf0ebe8b51eac3f083efa87f90f000000ffff030050 +4b030414000600080000002100bcd1a735de0200002c0e0000140000007070742f70726573656e +746174696f6e2e786d6cec97cd6fda3014c0ef93f63f44be4e34385f0444a86034d3a44e42a5bb +ece62606a23a71641b0a9df6bfefd97120a59ad4c38e3961fb7dfae7a7f0def4f65832e740852c +7895207c33440ead329e17d536413f1fd3418c1ca9489513c62b9aa01395e876f6f9d3b49ed482 +4a5a29a2c0d40137959c9004ed94aa27ae2bb31d2d89bce135ad40b6e1a2240ab662ebe682bc80 +fb92b9de7018b925292a64edc547ecf966536474c9b37d09e11b2782329387dc15b56cbdd51ff1 +d6bdc5db94241500e617e76582c2211e8670440e74bd7f9254a5bc521280a11990902cff41a4a2 +e27b7e2fd5d58953e409f270300a623f0a00a798e8139060e4cea6ee3fccdfae1b2761d4b1f62e +d65dddf5ab931d21310f8fe12ef09cd92941511cc67ae36aa58a2b2aad5a2b305a631c0467ad9c +6ec89ea9477a546b7562743625fa6cb51276f5b0120e23ba4c723a58de996cba2aecc0700d3a25 +11f7098210846da1c4187240e7913cad5fdb887029c58c0a25f7d5423c6bae8e7ed0ca6e41b483 +505035ab7d95a986fb390b099e70acfd3c53a1ab182e6ee492b3224f0bc6cc46d700fdca847320 +104d1d1bfc575a26aaa34e355c3f837aff525603a6b42699507225a0a41164f24a90c90b8e078d +c33df3b068bc0b9a201ce9847b3e068ae5e35ff8b4107a3e1a8ae5135cf8607f84a31e504bc502 +0a3b80622f36d9f78034150b28ba00f2bc3832ff023d204dc5021a75008d02bfff469fa95840f1 +0590a6d37fa4cf542ca0710750148efa8ff4998ae95cdfb798f504d6b6978595b31745827edfa5 +f374e1f9fe6018f9e920f016e120863fbdc17899fa698817733c9cffd18d380e7507fc6d5fe414 +9cb453000edfcd016591092ef946dd64bcb403855bf3172a6a5e9899027bcd14d078dd6a97a607 +8727e1a28081017c72f18a9c9a4bddde47c07d0f13c312861b0ddf1a66ccd48214dba733f37930 +f7e741d3bdb72a6665a25c07f46c083f0efe5f08b3eea032cf01c0dbdff6a83b1ccdfe020000ff +ff0300504b030414000600080000002100303a84e5ea0200006c060000150000007070742f736c +696465732f736c696465312e786d6c8c545b6f9b30147e9fb4ff8078a75c020450691548a8266d +6bd4763fc033262019dbb2dd3451b5ff3edb98a45d23ad3c707c39dfb97ce71c5fdf1e46ecec11 +170325a51b5e05ae8308a4ed4076a5fbeba9f132d711129016604a50e91e91706f6fbe7eb96685 +c0ada3d04414a0747b2959e1fb02f66804e28a3244d45d47f908a4daf29ddf72f0a2ac8ed88f82 +20f5473010d7e2f967f0b4eb0688d6143e8f88c8c90847184815b9e80726666bec33d618474299 +31e87721dda8cce0236eb514ec8923a457647fc7d923db7273fd73bfe5ced02abe5c878051d1e2 +faf6c2aa992dd99b85ff0f7c372f4171e8f8a8a5cacd3994ae22ffa8ffbe3e4307e9c0e9109e4f +617f7f4117f69b0bdafeecc07fe354673505f7319d784e67dba101176a037b8723d84be12c5c1b +d47721e7f09ef950baaf4d1355c9a689bd46adbc38a862afdac4b9d7448b6c132d9b3a5aa47f34 +3a4c0bc891a1fcdba975c2f443b9c601722a6827af201d6ddde7f651950a63db3c3ae4d764d934 +6114575e1ed7991757e9dacb56abdc5b6749be08f3661584eb3f960d15f32c4d16be4ddeb270b1 +7067d62e962cccd2348c22538c28c8832059be2f5f1ae649122da7b244d1324d97ef8b030ac685 +bc437474f4a274f9b0ebe58a73fa6228077b15eb0498154d6853404aca23465a119307d4295294 +d3c8200d9fa8c6dcd9035cba0042d5f1e174d583164dc749a03e1bd1096176c6a0d6ee068c4fb6 +ad81cbb6273356dfd0d07508ca1338f83ff884309e293983c781507ec9003e7b9ef42782266258 +210f156d8f1af75b49d5eb5ce29a62332c80c09eaaf7074a3ed50d0bf9a88166c3cc4f2100de91 +374a88b45bc0c183bac140bf942df2d61b1b0333de67a7a65256ccafc9dc7f6665a7a8aaf234aa +b3caabc2b8f1e275bef4564d9a784db288e3baca56f562a3a78885f1c72952879f9b22465f1067 +74300f6818d841322486e922cbb3659447260f13db2c4fd3621f4688f90fc0eef7662294338978 +6d8e981ed149f5aca27357b8bf000000ffff0300504b030414000600080000002100d5d192f1bc +000000370100002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c696465 +4c61796f7574362e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c1 +45f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609d +ef35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d8 +0c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23 +fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ec +ddf6030000ffff0300504b030414000600080000002100d5d192f1bc000000370100002c000000 +7070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574372e786d6c +2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2 +e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416 +c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284 +b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2 +f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b +030414000600080000002100d5d192f1bc000000370100002c0000007070742f736c6964654c61 +796f7574732f5f72656c732f736c6964654c61796f7574392e786d6c2e72656c738ccfbd0ac230 +1007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5c +b37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c +68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaa +daa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85 +c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b0304140006000800000021 +00d5d192f1bc000000370100002d0000007070742f736c6964654c61796f7574732f5f72656c73 +2f736c6964654c61796f757431302e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad +8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc86 +5a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c +6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a +48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654 +cb1201aa6dd4ecddf6030000ffff0300504b030414000600080000002100d5d192f1bc00000037 +0100002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f +7574382e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018e +e4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcae +c7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb +10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae +73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf60300 +00ffff0300504b030414000600080000002100d5d192f1bc000000370100002d0000007070742f +736c6964654c61796f7574732f5f72656c732f736c6964654c61796f757431312e786d6c2e7265 +6c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9b +d18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049 +c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a9 +5711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784 +e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b030414 +000600080000002100d5d192f1bc000000370100002c0000007070742f736c6964654c61796f75 +74732f5f72656c732f736c6964654c61796f7574312e786d6c2e72656c738ccfbd0ac2301007f0 +5df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4d +a378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c +8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f4 +6d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453 +d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b030414000600080000002100d5d1 +92f1bc000000370100002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c +6964654c61796f7574322e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad83883475 +11c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c8 +9b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e +3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83 +b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa +6dd4ecddf6030000ffff0300504b030414000600080000002100d5d192f1bc000000370100002c +0000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574332e +786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db +24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d51604 +67f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c99749 +17d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec1 +3c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff03 +00504b030414000600080000002100d5d192f1bc000000370100002c0000007070742f736c6964 +654c61796f7574732f5f72656c732f736c6964654c61796f7574342e786d6c2e72656c738ccfbd +0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37d +fdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed +72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b +52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23 +674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b0304140006000800 +0000210069a25f2115010000c70700002c0000007070742f736c6964654d6173746572732f5f72 +656c732f736c6964654d6173746572312e786d6c2e72656c73c4d54d6ac3301005e07da17730b3 +8f253b899394c8d98442a0ab921e4058e31f6a4b46524a7dfb8a96420c616821a08dc092f5e6e3 +6db43f7c0e7df281d675460bc8520e09eacaa84e3702dececf8b2d24ce4bad646f340a98d0c1a1 +7c7cd8bf622f7db8e4da6e744948d14e40ebfdf8c498ab5a1ca44bcd883a9cd4c60ed2874fdbb0 +5156efb24196735e307b9d01e52c33392901f6a4c2fcf334e25fb24d5d77151e4d751950fb1b23 +98eb3b852f7232171f62a56dd00b48d3ebfdd94fdb348c00765bb68c295b52b24d4cd9869265f9 +3d693edcc519ea7be767cd28c75d19ff6d28271b8a29233b2b62ca0ab2b3b8a591adad63d2d664 +6b3c6a6b9cb2ad62d256946c1753b6fb95b1d9f35b7e010000ffff0300504b0304140006000800 +00002100e40b4c2ac604000089100000220000007070742f736c6964654c61796f7574732f736c +6964654c61796f757431312e786d6ccc58cd6edc3610be17e83b08bad32b891425195907fa6351 +347fa8dd1c7aa325ae5788fe4a71d7eb0401f2267d8e16bde54df2241d52929dd88eb32ee2c297 +2545cd0c67e6fb6648ed93a7bba6b6b6420e55d72e6df7c0b12dd1165d59b5674bfbb7138642db +1a146f4b5e77ad58da1762b09f1efdf8c393fe70a8cb67fca2db280b6cb4c3215fda6ba5fac3c5 +6228d6a2e1c341d78b16dead3ad970058ff26c514a7e0eb69b7ae1390e5d34bc6aed495feea3df +ad565521b2aed834a255a311296aaec0ff615df5c36caddfc75a2fc500668cf6972ea98b1ea285 +c4a8934ad5226ecb939d6d1979b98537ae7d0429288eebd26a79030baf41b47ac36b212dd010b5 +b5694beb44ec94111cfa1329849eb5db9f647fdcbf9246ffc5f695b4aa52db9becd88be9c52466 +1edbad992caea99fcd537eb85bc9468f901f6bb7b401c60bfdbbd06be084558c8bc5d56ab17e79 +8b6cb1ce6f915ecc1b2c3edb5447353a77331c6f0ee7465a74e28c4bcf06353bb791d5d27ec798 +97f8392388c10c11272128c949849887c3dc0b58ea61fa5e6bbbf4b090c280f6733993cfa53700 +6faa427643b7520745d74ccc99090858bb64c25a3bfc2e49a893e718a3d48942447c3f80dd4307 +2549c26246589e90e8fd940bf0791e4d148b29f42907332643ffac2bde0c56db01661ae211c24b +8911573df6eb89704a93cdb63a59012d47fe4d5aa3a8995ca5ff56ecc3c0239133a28aa9ef7afe +9734f0a8179af71a5e3f74dd1087d7411e4df7876a9774e585d63e8511c0d51e2d6dc135aea3d9 +7a50c7eaa216e6a1d73fc62909c235d75da41428cb475975644800e02821c742b4ca8d2cd6d62f +7555bc11ad752ab83c1520d46a7fc634ebb88de9c59543c6c7bb39886fe32024a1876ef176cd6b +70c1f21e291be38826cc0b33045b1244282528a629450e8bfc284fc23cc0dec3b351637e8d8ce0 +deee4af91ea4c4a1770727830013fc909cec351db7f5659fbb8ba3cc1073dbc99a9f01254b3118 +de8cac1deea6e8f5ed4ca6eedeeef7736dccca4f452bf6b0e87ddb62262b750f8bf8db165f5790 +dbfd2d923d92fcf19f767587c9fbd53a996b3de36ad30c9f97387ea4259e666114504c118b0894 +789445fac04911893d97b931ce823c7cf8122fa1a487b71009af5773718f47fe57abdbdc48ae17 +e157ca6e05f723136d84532fa5094638600c8e5716a128f04284d32866414cf28092f7f3b5abe4 +4aa8aa11ac3adb48f172a3ef503789640d8d4a6bc1dbcba256472e3d70f001a43abca214f86070 +6fcb575cf25f6fd2f1bf10ce9f09c7361fff7c2baa5ab49f938e3c52d279d4f1fc380a80740945 +2488139464b18fa2344e1d9f26b193e38727dd4ac991757f6c38b4153913ef1bc7ca7d88f77dd1 +a6976877351c86eda66984fc0270ff91021ea42427d4c5507211f4962c0851eca439f29d308949 +18f971fc3f7419f8547cb1696ec5dc1c67dfb9d9647916d09cf928a53882d6ca729478598a9893 +7b21a3ccf7dde8b2d90c75550a4074ef1ef3e9c35f2fe4c1a70f7f7f87166386f9d370cebb994d +ec4992887a690865ea12e89b19946ecca88f988f094993304e71aed9d3bbe4267b60713ff6f4dd +b9907d57992f6ad79908b4e5fa02e37b0e76b0e79a337d617c9bc74b961cebf861ace573debfdc +1a9a8cd7a5d42cf59a9aa3e895888e7dfe0be1e85f000000ffff0300504b030414000600080000 +002100ee0bf3bf90040000a70f0000220000007070742f736c6964654c61796f7574732f736c69 +64654c61796f757431302e786d6ccc57db6edc36107d2fd07f10f44eeb46dd8cac03dd5814756c +a376f3d0375ae27a85e8568abbde7560207fd2ef68d1b7fc49bea4434af2dab1e3ac031bf08b78 +d1703833e7cc907cf3765d57da8af1be6c9b996eed99bac69abc2dcae662a6ff714650a06bbda0 +4d41abb661337dc37afdedc1cf3fbde9f6fbaa38a49b762934d0d1f4fb74a62f84e8f60da3cf17 +aca6fd5edbb106fecd5b5e5301437e61149c5e82eeba326cd3f48c9a968d3eaee7bbac6fe7f332 +67699b2f6bd6884109671515607fbf28bb7ed2d6eda2ade3ac07356af55d93c4a6036f2130e26c +ad6b4a8eaf60c6d20fc0f5fcb42ab486d63071560a5669cba6905114e5075a31ae9db1b550827d +77c61993bd66f50bef4ebb13aed61fad4eb8561652dfa84737c61fa3981a362bd531be5a7e3175 +e9fe7ace6bd9425cb4f54c07f836f26bc8393042cb87c97c3b9b2f8e1f90cd17d903d2c6b48171 +6b53e9d560dc7d77ecc99d212c325aca8ec35e4c162d7939d33f1262c76e463022d043d88c318a +331c22623b4166fb24b11def5aaeb6bcfd9c3385d0afc5c434cbbb876e5de6bceddbb9d8cbdb7a +a4c9c43600d6c223b0d2ca8fb66f054eeac7c8719308e130b550ec3a094adcccc38e935a76985e +8f01009ba75679618cfe8e8e4f40f4dd619b7fe8b5a605a024ae036e37120398b2ed1623bb4429 +2a36ca0d3f55671be59105621db7c5466e720ead9aa4fb552f4ec5a6626ad0c98f328303101595 +c95b30946603b8e240c10161128c0ffcd78a25cf17da6f55997f608d76ce283f6720d448570787 +a53d4ab5b135c198c0ff36059c8902efefe64307497ab5a01598a0d9af941709f6dc08c71e0a92 +087627568a02270e8126416aa659e4e1d07c795e489475ade52594a6a10649f3d6dbc54f218b2a +4b339d5109c74087fbd4e9246b56d54d35788c4a44f167d5f28a5e00730ad62b780772f58f33e9 +ebed94438f6ff7e7a554a665e7ac613b68b4bfaf31e5a5788246e7fb1adf9710dbdd35e21d82fc +f9bf66fe88caa7a5249e5232a56259f7b733d179a59988bdd8c4212128b47c13e12c345140c004 +171333b49dcc37c3f0e533b180ccebafc0135acda71c1c0ec667a9d873b845286f4327b1132f76 +90e383cbd825210a7d3b404e1246c48f70e67bf87aba9414543051d68c94174bce8e97f2a6719f +485a5f8ba462b4b9496a7160797ba6b307a10eb694021b14ee4d714239fdfd3e1d7f8470ee4438 +b2fcfcf7152b2bd6dc261d7ea5a48b82308a039220df8b2c84831443f9771d04fbc6b11d618f44 +d6cb936e2ef8c0babf9614ca0a9f88f723d5ff1bc47b5eb4bd1bb4db0aceac6659d78cdf01dc7d +a580a72ea45ae8c6c8f28300cefbcc44a1094327c9029bc4a1ac412f0f383ca48e96f58398abe3 +ec998b4d9aa5be971117259e13c2e5976428b6d3041133b303e211d7b5c29b62d35765c100d19d +6bcc974fff1cf1bd2f9ffe7d8612a39ae90135c55df546f6c471e8d94910a3d8c25037d3d04711 +f15c445c07e3240ea2c4c9247b3a0bdf670f4ceec69eaebd64bc6b4bf5deb4cc91402b2a2f07be +6b390176436f046a60c9d65a09fda9f41fda8abfa3ddf14ad164b82e256aaa93d41c44b722d2f7 +e9817df03f000000ffff0300504b0304140006000800000021005a9d3795690500006715000021 +0000007070742f736c6964654c61796f7574732f736c6964654c61796f7574332e786d6ccc58dd +6edb3614be1fb077103460778c259212a9ac4ea13f6ec3b2b458ba0750243a16aabf51b4eba428 +d037d9736cd85ddfa44f3292926ca749336f6b82dc98147578f89df37da40efdecf9a6aeac3517 +7dd93673db3d726c8b37795b94cde5dcfef51503d4b67a99354556b50d9fdb57bcb79f9f7cfdd5 +b3eeb8af8ad3ecaa5d494bf968fae36c6e2fa5ec8e67b33e5ff23aeb8fda8e37eadda2157526d5 +a3b89c15227ba37cd7d50c3a8e3fabb3b2b1c7f9e290f9ed6251e63c69f355cd1b393811bccaa4 +c2df2fcbae9fbc758778eb04ef951b33fb262479d5a9687b9effc0b3c2b68ca158ab21d73e51b1 +e7e755613559ad06c20bb540534ad9836fbfd984df7df8eb42a5335f8a72218d6ddfbd129ceb5e +b3fe5e74e7dd4b615c9cad5f0aab2cb4cbd1953d1b5f8c66e6b1599bceec93e99753373bde2c44 +ad5b951b6b33b7158557fa77a6c7f8465af93098ef46f3e58b3b6cf3657a87f56c5a60b6b7a88e +6a00773b1c3885f3aa94bcb274c20c8ed35e4e8856a29cdb6f19839197320c98ea01ec44184429 +0e008388a690b01822ff9d9eedfac7b9e086a51f8b496dae7f8be1bacc45dbb70b7994b7f52895 +49718a5c178fe46a946f03274843c808086948010e68080296ba2075621c45288e100edf8d0950 +98a7d644311be31d039f88e8bbd3367fdd5b4dab88d2bc0ebc6d2d063275db2d4785c952567cb4 +1b5e9ace2ecb77524c914bbd813b97380141f426dbaee3b99eef8c3442ea4182c8a7640ebebb63 +b989dae24a4fbf50ad22316bf265ab76e3c5e0b4eae5b9bcaab8e9af2b778454f0c52fcab8bf9e +db6aa5492a5b03dddf9bd8e91f334fa84955a68f978283241dd69027462c8a44c9c5b043ad6225 +f2a5f55355e6af79635df04c5c7065d468d7031dc3329d89668ac20476bf40d156a02a5f9d3a3b +ae9759a5d6b5e013952a8b13163a29017e922025558f8288520248801d88433f42943dbc54b53a +3420adafffa358ecd100fbe83ec5ba9ee3b8f460c57e4ea6569d8953739a954da1ce79dd35b356 +67ea636666eda918626778ddb75559b0b2aacc83268cc795b0d659a5f6eb6638cf64d9c8618478 +3bf56f8d87a79d9fd9b4d2cd4d62ba7087147b04ea1c1c04572ffb587035c6112edac10d5cac73 +76105c973e225c8d71848b77705d445c23b183f06acbc7c2ab418e78bd3dbc14529db5a7875783 +1cf1fa3bbc1052f325787a7835c8112fd9c34b303a78bb3d2a5e0d72c44b777835d8c3f7db63e2 +d52047bcc11e5edf234f73bf69907797281abd32d8d6c4f7952cccd429eb5654d9a5aa500ade5b +baa2188a98fe4b562c78aa58924caeea7ebf66414fb466a129f63c184090f8240618c708049051 +405ce27a8cc42c26f1c3d72c85b48dba54b21653ed32c8e5b3c58bb974dd5b619807a39685ba05 +0e970914c358d5610011c600f658000202294071103212e294f8f8dd74ab2c32c9655973565eae +047fb1d2d7c4db22b3fa5ac615cf9aad16e589eb1f39e848a59aee24a53018de9be2652632bd9d +3e91ea7f119c37098ead3efc7ecdcb8a37fba2c34f55743e4969e0b8c0f1824415ca410828a38a +15e4e3044192423f7878d12da41854f7db2a132a5d93f0fea16afe37c2fbb26cfb5bb6d599c99b +6655d75cdc20dc7ba284c328f270927a2056ab011cba0e0854110d62c7f5a0e3d3d071d0c313de +57c5d9aabe9373f800874d9226c44f990ada478152394b4104931830278594f9ccf3dc607bd8f4 +ea2bc815a3079f311fdfff71268e3ebefff30b1c31a699fefd9af26e7aa37aa228f0614c2310b9 +589d9b494040c87c0f300fa94f4644c318a55a3d9d8b6fab470d1ea69eae7dc345d796e60f43d7 +190564ea079fb808a99be744f320921d58cdfcb90e5fb595f839eb5eac8d4a868f7c6c863aadcc +c17467a2439ffe203df91b0000ffff0300504b0304140006000800000021008f55c3fd73040000 +6b0f0000210000007070742f736c6964654c61796f7574732f736c6964654c61796f7574322e78 +6d6ccc97cb6ee3361486f705fa0e82f6b42ea46ec63803dd580c9a26419376d11d23d1b13aba95 +a21c3b8300f3267d8e16ddcd9bcc9394a4a4783249334ee100d998147578780effefd0d49bb79b +aad4d6947545532f746b66ea1aadb3262feaab85fecb0506beae759cd439299b9a2ef42dedf4b7 +47df7ff7a69d77657e4cb64dcf35e1a3eee664a1af386fe786d1652b5a916ed6b4b416ef960dab +08178feccac819b916beabd2b04dd3352a52d4fa389fed33bf592e8b8c264dd657b4e68313464b +c245fcddaa68bbc95bbb8fb796d14eb851b3ef87c4b7adc8b6b9fc5dd794115b8b474b3f127967 +e765aed5a412031705a7a5d6d7b9f6ae5e9192abf75d7bc12895bd7afd036bcfdb33a6a69daccf +9856e4d2cd385d37c617a3997aacd7aa637c35fd6aea92f966c92ad98abdd0360b5d48b695bf86 +1ca31bae65c360b61bcd56a78fd866abf4116b635ac0f8625199d510dcc374ec299d6137e426a9 +388e3b3e45d4b362a17fc0d88e9c142380450f203342204a5100b00dfdd4f6706c43f756ceb6dc +79c6a852e55d3ed165b90f14ad8a8c355db3e4b3aca9463426c28498161ac594517e883c2f347d +b11cb42c0ba008a520401001c7b2133f08a06de1e476dc0011f3d4aa2c8c31df31f14988ae3d6e +b2f79d56374228a9eba0db9dc520a66cdbd548142f784947bbe1a5eaec7679a4806fa226dfca45 +2e45ab06c9bcecf839df96543db4f24785c184102591059b5390a483b8fc48c921b689533630af +e53dcb56da8f6591bda7b5764909bba4c2a896a90e09cb78946b6317823189ffdf08c00981a10c +ba5614e48dec51a6d9af940798fac8775d045ccb0b01421602611407c00c4de85808c7d88a5e92 +8722dfec4c0e80422b29589777d5fd141a58f1b06e5849ae040939edb40b91db004bf734195f2f +a752787ab9dfaea5332dbda435ddc3a3fd6d8f092bf8333cc26f7bfcb5a0ec191ed11e9bfce99f +7af984cbe795189a4a2c21bcafee55187ca51516c756e8413b06a68b20405e68c91337023849d3 +c8f73c1198f3f2276ecec50de6466442caa50c4c56ddf0477790b25b8acb80ca3680b11dbb1104 +d0c31820070720f06c1fc03808b117a2d473d1ed74b1c809a7bca8282eae7a464f7b7973780892 +d6553c2e29a9ef8a9a1f59eecc8433b1d5fe0e291183d2bdcecf08233f3fc4f1ff00e74cc0e1fe +d39f37b42869fd2574e89542e7d911b41cc19b87a138d671e08330767d90402f753d1cd85e18be +3c744bce06eafee8893856d804de01cffbc3aaeddea9dd9405adebbeaa28bb27b8f34a054fa3c4 +09fdd403293463807cc7017e8421b0a1679a711a24317ad1fff14170f13174d2578f6aaefece0e +7cd82469e2b9297640ecc200a000a720b293186033b57dec62c7b182bbc3a62b8b9c0a45f73e63 +3e7ffceb84cd3e7ffcfb00478c6aa60fa269df556fa4278a02d78efd0844e2d20550127820c4ae +03b003118a233f8c612ae9692df4901e31b81f3d6d734d59db14ea9bd1324780d6445e0ea0e740 +cbf6dd60146aa06417ad94fe5ce62fda92fd44dad3b5c264b82ec56aa895680ea63b1399fbf491 +7cf42f000000ffff0300504b0304140006000800000021007555dfd22405000070120000210000 +007070742f736c6964654c61796f7574732f736c6964654c61796f7574312e786d6ccc585d6edc +36107e2fd03b087aa75724254a32b20ef45b14759ca0760e204b5caf10fd95a236768200b949cf +d1bef62639498794e4ddb59dd48ee3c22f4b8a1a7e9c99efd368b42f5e5ed695b1e1a22fdb6669 +e203cb347893b745d95c2ccdb76729f24ca39759536455dbf0a579c57bf3e5d1cf3fbde80efbaa +38ceaeda411a80d1f487d9d25c4bd91d2e167dbee675d61fb41d6fe0deaa157526e1525c2c0a91 +bd07ecba5a10cb628b3a2b1b73da2feeb3bf5dadca9cc76d3ed4bc912388e05526c1ff7e5d76fd +8cd6dd07ad13bc0718bd7bdf2579d541b4b29415370d6d2636b080cd23883c3fad0aa3c96a5838 +2b2507c8aae4fa4edf9d09ced5acd9fc22bad3ee8dd01b4e366f8451160a60da682ea61b9399be +6c367ab2b8b1fd629e6687972b51ab11f2605c2e4da0eb4afd2ed41abf94463e2ee6dbd57cfdfa +0edb7c9ddc61bd980f58ec1caaa21a9dbb1d0e99c3d17930547ab41fc7bd9c3d1a44b9343fa629 +099d24b5510a33645ba18dc2c4f6514aa89710378d08659fd46ecc0e73c13523bf16b3b230bbc5 +665de6a2eddb953cc8db7a92c5ac2e2012db1391cacb8f0e0b284eb185ec2081d3632f4681eb07 +08278e1746961fa781ff694a00f83c8f3a8ac514ef14f84c44df1db7f9bbde685a204af13af276 +6d3192a9c66e3da92997e24c0b6aa658ddd7936da2ef64193bc4b6ac913f8c09a48aee33ee637b +34504c42465d66dde273c4ee0ee565d816576af7398cc063d6e4eb161ebef311b3eae5a9bcaab8 +9e6f2adc2993eaa2d1fe6b7e0bbefa1d16fb0f4b93a953c78326db71be83d1a91f1d95804d55a6 +0a4bc1519c8cc7c9232d1da05472313e9b4631887c6dfc5695f93bde18e73c13e71c8c1a053d92 +331ed3e9c0e680748cdf962b9de5fab681d3a4d62c79a69ab580c6c4c30c8561ec233bf2521452 +27425ee87b0e75a81579f1d36bb61fce47cd82534a898fd22e651681b0bea15dcc1cc765e4beda +fdaa60eb4c1cebd256360514783ddd17f1f970022f340db0a367e5eb4d3deb29d9a2da8e4b94bf +0f85de7b5414de044db7d0632e1e0c8dbd5d68853741db5b684c5dacaac283b1b7a564029cb09d +1d6c8f78ca85c7612bc0099b6db109f17491791cb6029cb0dd1d6cd7a6df43e53eb6029cb0bd2d +b602fe2e2ef7b015e084edef60334757f8c7612bc08757eb5497e84d2baaec821b05ef8d6d2d1d +8b78ff74f5db9eeb779cc9a1ee3be8fb3eacb30a0e35e8736d3d0296604a020437e074cf2128f0 +43e83f1c4282d00ebcc0c24f5fc60b696a0540b25673291fa5f0d55aae1bd26f165c7da105b382 +7e5847ebd388442ca488ba698a6c27f591ef120fd1c80f5237b01397d99fe6eebac8249765cdd3 +f26210fcf5203585377567f4b58c2a9e35d7bdab3cc2ecc0a20790516f2b29f041f3de146f3291 +29c9df50eff708ce9905970efffcf98197156f7645673f53d179d4b269101114474182ec1094e7 +63df8544441676ec942651f8f4a25b4131d2aafb63c804a46b16de7f34110f11de8f659b5db3ad +3ee89a66a86b2ef608779e29e1984531096d07311cc0578e87e1c3dd497ce47a8cba21745dcc0b +fe8766b12a4e86fa4ecec796eec7169b38895d96a40e8a18850ed94f1314923842a995102f65a9 +e360ffbad8f45509ef4af0eebe35e6cbe7bf4ec4c197cf7fff8012a387f99f8139ef7a36a9270c +7d46222f4421b6a16ec6f0ac06297350ea50db8e422f8868a2d4d361fbb67a60f17eeae9daf75c +746da9ff38c1d624a04d56e9f69012c6089b791e55b2f556517faae287b112afb2eef546cb647c +e7477aa953d21c4db7262af6f99fa2a37f010000ffff0300504b030414000600080000002100fd +00fcd1320800004e360000210000007070742f736c6964654d6173746572732f736c6964654d61 +73746572312e786d6cec5bdd6ee33616be5fa0ef20f8b6502c8ad49f314e61495677b0e93468a6 +7bb177b444dbdae86f293a93a41860de64817d8b5dec5ddf649ea4879464cb49ec49da49e10446 +008b3a3ca20ecf77bec343da79f3dd759e69578cd769598c07e8c41868ac88cb242d16e3c1cfef +23dd1d68b5a04542b3b260e3c10dab07df9d7ef39737d5a8ce921f682d18d7608ca21ed1f16029 +44351a0eeb78c9725a9f94152ba06f5ef29c0ab8e58b61c2e907183bcf86a661d8c39ca6c5a07d +9e3fe6f9723e4f631696f12a67856806e12ca302ecaf97695577a3558f19ade2ac8661d4d35b26 +9dc2fce28b2c91d7d9a2f9fc89cdb534b9062f1906020d3a5223b320e3da15cdc683d9020d86a7 +6f86ad72db920fd7d57bce986c1557dff3eaa23ae7ea0defaece398c09430eb482e6e05f3980ea +68d5d46d71a51ac33b8f2fba261d5dcf792eafe01e0d2c04146fe4e750cad8b5d0e246186fa4f1 +f2c70774e3e5f401ed61f78261efa572568d71f7a76376d3799f0a965500cfed926632541ac781 +4967b5e88c5bf1743cf8258a4cdf9a46448fa0a513c327ba3f259e1e99d89d9a4e1498d8fe289f +46f628e64c61f636e9620fd9f7f0ced39897753917277199b781d3c51f408d481b7dd2e05f0c02 +12ec06fa04598e4e42c3d43dcb413af61cc3833e9f38e863eb0bb0b9bbaa590cdba9b73ee830a9 +abb332beacb5a204cc24c40d846b8d065779ad969ab8a9c05d2215196bf59a4ed5d838fc41b45d +ec42e42a18b16d21d3dac61d1916b26ca9200145d8b42c1b6fc14a4715afc5f7accc35d9180f38 +8b85028a5ec10c1bd54e45d9d458528dc4b55f263752730657401f52093cbf2cf9ed40cbde16f5 +78e02142e0dd42dd10cb31e186f77b665b3d220bca4c851f2d6218673c880557b61440dcc94a94 +f3b4b5a879a5ecca6a71216e32a6e65dc90f25e660504665264b981e4e1bb788531594b94a5d4d +32d092158f97dadfb234be6485366394cf182815f22d0dd6120a35f4703369e587fd44c06b2200 +1a7d1e9807ca83c8987a7e3835f48937011e20043c70ac896e637bea19fed4c7f84fe08144561a +24a3f78fd001b9a665efe703c116c2d83d7c3e3c9902958cfe2bf5ac12eea344a4787055f28c2e +800109ab3519b10d49eafd8cb8fb3a85d8fed7fde3831c4c9bce58c11e31a2f9e511439e8a278c +a8f2dffe11ff9e02748f1f913cc2c9bffebf98ef19f269a98574a925a46295d7fde4820f34b9b8 +51e8987e38d1dd20243a71609175c308e961141ac83203c341c6f327974440497b0b33a1d9bc4d +322ac07e6f92b131aca7d69d62cb7408560a32c76c56e517b4e4aae9745945b5af3224c39d660b +d82a64cad884cd7f0291742792d3559094599a4469963d50228beba6001469211a896319465764 +ae959bbbcd38c3ee4daad91ad2b47b062a42ceb3a409360f076660fb58c74e14e9c48a3c58c94c +57c78137899c09993a36f938e862820a26d29c45e962c5d98fab068abb3cd6ea5c0419a3c53aa7 +8a53649f18f80422dddd307a2e370e100b45724e39950eba930d7e0fdfad8eefd1ead77fdfb234 +63459ff3e440391f460176d104eb6138f17462bb13ddf3ac00aa6b0ff9aee1d8beed3c3fe7e710 +d02a4affb5a290d579cbfba60c7e0aef89815d553bec223e944cc47dcdc4efcaf1c3a3fed7e59b +bde61b18c38a6295e78c6f51ce3a50ca99d3c09cb88ea54f43076af86812c95dadab47641ad941 +e4e1107bcf4fb93a4bdeadf28758a74aa5a7adb63632f6b2eed52fb787cab9f5721b42b0d9d3c8 +d2031b439ef7a2a9ee9b61a0c386d274233bb22ce4ad97db1a5ec580518f5e653f7ffaef3b7ef2 +f9d3ffbec222ab2edd795c17f7aad5b2d7f73ddb0c5c5ff71181ca21f41c7d12d9961e599890c0 +7727019e4af65688dc672f081fc7deaafcc07855a6ea1413192d811548d8c1c842aee3364829db +baeb9aa5ede9649cf11f68a5cd16086a3281c0c3d7d04a2ea1355b9852664a992965d0a271cc0a +011a6da393989d64ad833b09ee24a493904e627512ab93d89d04d2e7324b8b4b7086bc0cb47999 +fdb51174ade6ac13f2c419bd2957e26dd222d19334a7898838c4c536f1803d2329e16f13958276 +eb5a92699dae2aeff7e8a29eae2a09f6e89a3d5d95c8f6e8e29eaeca477b74494fd7fe82aed5d3 +75bea06bf774d529c71e5da7a7eb7d41d7ed63a1e2748ff21670dde2711f7871ad924baddaf228 +74e7de4383fcf49ece2e6edb1cdbe4559554193d2b7c7ea9ced4e5f702457b0b5d4b4810b0609e +af8a58c87e35727151c5cd12179fc76d96f48c4d96ec2bf8f2547f5b759d4cd7bdb3d5bbb268ce +617af9ba31f2124a8827e4ee76e8be969a924aa3731a432afd36ffa79e897635a4773a186d8ff5 +eb3b1d71dd8efd609edff67ea556be7b50e4949f01c466530ea705247470aade090e07295137aa +a8b7f2f5c08a4a581b37de99f09482d5152dca1a6e0dd3f0a1f42070edfe80a9552ae26544f334 +93e50608e225e53513eb156bb60a40a2c4e3c1e74fff69a4bd7030d51ee139c2a1d8150ec5ae70 +28f687836a9a1bc86dd752c6bf00c8ad4342fcd912c057445cc2dc228e3788c396164b9f1f217f +22e4ca69070eb9c4b9859cf4200778d586ea08f99320472f21af4b9c5bc8adde526e588e82f108 +f9eb835ce2dc426ef720b7107929e5db11f227422e716e21777a907b4e63fd11f2d707b9c4b985 +dcdd408e89299d7e84fc35422e716e21f77a90bbae7d2cdf5e29e412e7e6c7a59b73996a548a25 +e3eb531a78e2bc098c7676f70fc7372adb473acf12242fcdc70f1f7da8af708efed97950d039e1 +e89f1dbb6aecc88df5d141bbf6a0c8355d65fdd1413b766c6a193f3a68f7fea6fb25c0d1413b76 +0360ee3149efab9d6dcb3926e9ed4ab35f5caa5f54745fd436dfe336ff0776fa1b000000ffff03 +00504b0304140006000800000021009119fff8d404000095130000210000007070742f736c6964 +654c61796f7574732f736c6964654c61796f7574342e786d6cec58cd6edc3610be17e83b08bad3 +12c51f4946ec407f2c823ab651bb3df4464b5caf1afd95e2aed70e02e44dfa1c2d7acb9be4494a +512b3bfe89bd0eecc2875c9614351cceccf7cd7056af5eafeaca5a0ad9976db363c32dd7b64493 +b745d99ceed8bf1e3310d856af7853f0aa6dc48e7d2e7afbf5ee8f3fbceab6fbaad8e3e7ed4259 +5a47d36ff31d7bae54b7ed387d3e1735efb7da4e34faddac953557fa519e3a85e4675a775d399e +eb52a7e66563aff7cb4df6b7b359998bb4cd17b568d4a8448a8a2b6d7f3f2fbb7ed2d66da2ad93 +a2d76acceeeb26a9f34e7babceda83933f6ccbc8c9a55e81f6ae763d3faa0aabe1b55ef8fd4c94 +d69b66ce2b25ccbbbe3b96420cb366f993ec8eba4369b6ec2f0fa55516838af556db59bf588b99 +c7666926ce8deda7d3946faf66b21e461d0a6bb5636bc4ce875f6758132b65e5e3627eb59acf0f +ee90cde7d91dd2ce7480f3c5a18357a371b7ddf126778e4b252a6b0890b163af5793450b59eed8 +ef19f36292310c989e01ecc618c4190e01f35090793e4b3c443f0cbb21ddcea530a0bc29267241 +7a0bd0bacc65dbb733b595b7f59a1913c1349610afb11cac7cefa1183237202088620470865210 +bb24004118c208277e18607dfa18006df3341a2f9cb5bf6bc72720fa6eafcddff556d36aa0065c +47dc2e25463087b19b4f842a5525d672e34b33b98af29a056a15b7c5f970c8891ecd22dfae7a75 +a4ce2b611ebae1c798213510151ff2b51020cd4670d5ae81438749093952de2a16329f5b3f5765 +fe4e34d689e0f24468a16670757478b0c7a876ae4c7026f0bf4e01345160cc83bed3f978613242 +5ade0be5038c538203e6034ab208e0388e4018bb21486106634218826ef09c7ce82fb4fdbc9a0d +e6acae84bf428a3bf23e4081ae5726a161e011ea91eb2580c000d24160486d8c084428b899e0a3 +ea8de9d60d4c5b569715e43efa31c3b9652b2b7eaad95688de3ad6a68d84ecef67dfcde34c70ee +3f6e28c34a58d98968c4061abd8735a6b2548fd0881ed6f85b29e42334e20d82fce9df66768fca +c7a531be278dd10b4de334630451cf07098b438051e283288d5d00094efd308a8298c0ff318d0d +af1e95c614fadef73cfe9ec74f98c764cae394ab457d2d8df14b4de3240903162720a121031827 +09885c9602142628a409832979d6db78ecce0a65dfba97c7a6f849bab599fed360bc0d51e22554 +b7a1c867da5bc24210fa5e00501246cc8f70e653fc61fa0f52702554590b569e2ea438582803e1 +4d22597dad924af0e632a9d52ea45b2edad2a10eae28a56d30b837c52197fc97db74fc16c2d189 +706cf1e9af0b5156a2f99274e485920e27a18722ea812c2110e0845010c591b683119f309f86c4 +45cf4fba999223ebfe5c705d56e444bc073ac2c710ef69d1f62fd16eab5234cda2ae85bc06387d +a1805314e90b9465002601d655c6d55526f07d90519cc5888698f9f8f901efab627f51df89f903 +edc337159b344b7daabb245d5a91ee9042ed7eeca509606ee6058c32426078596cfaaa2c844674 +e31af3f9e3dffb72ebf3c77f9ea0c49861fa7832c5ddccd6ec89e3907a49108318625d37d35037 +7b8c12a05b407d65c44194a06c604f07f16df6e8c5cdd8d3b56742766d693e2f41774da025d757 +798811428442d3a239c6b469bc24c9d1e0be1e2bf99677074bc392b15b4acc5237307314bd1219 +5c9f3ea7edfe070000ffff0300504b030414000600080000002100d60634cc2e060000371f0000 +210000007070742f736c6964654c61796f7574732f736c6964654c61796f7574352e786d6cec59 +cb6edc3614dd17e83f08b3a747a4288a3462077ab108eada41ed66d19d2c713c6af42aa519db09 +02e44ffa1d2dbacb9fe44b4a529267fcccd8890303f5664449e4e125cfb94777a4172fcfcac25a +0ad9e675b533815bf6c412555a677975b233f9ed88033ab1da2ea9b2a4a82bb1333917ede4e5ee +8f3fbc68b6db22db4bceeb4567298caadd4e7626f3ae6bb6a7d3369d8b3269b7ea4654eadeac96 +65d2a9537932cd6472aab0cb628a6c9b4ccb24af26c378b9c9f87a36cb5311d5e9a21455d78348 +51249d8abf9de74d3ba2359ba03552b40ac68cbe1c5277dea8d576a7f5d1d9d1697d70fcc7c432 +9de5525d86935db5fef4b0c8ac2a29d58537429e14224fe7e646db1c492174ab5afe249bc3e6b5 +34fdf797afa595677afc306e321d6e0cddcc69b5348de995e1276333d93e9bc9521fd56658673b +13c5d9b9fe9dea6be2acb3d2fe62baba9ace0f6ee89bcee31b7a4fc709a66b93ea55f5c15d5f0e +1a97739477a2b0f4ee9838f6da6e8c6821f39dc97bce51e0c61c03ae5a00db0106418c19e0c8a1 +31f278881cf2418f86643b95c2d0f22a1be505c9354acb3c95755bcfbaadb42e076d8c12536c42 +3cb0a9a37c6fc7761cb00082d0836a76e80680da3e073ef5380b2881ccf63e0c1ba0621e8f6615 +d361bdc3c24722da66af4edfb656552ba234af3d6f173d7a32f5b1998f92cabb420cfdfa9ba6b1 +dae51b29a60ef32835dc39c485c8bd4c36b45de8127b60113ac875897395cb1ebad9eece823a3b +d7c38fd5d1682dd92edaeeb03b2f843969f48f09432a8a8b447b41264014f7b376bb8668454027 +649f4e56b690e9dcfab9c8d3b7a2b28e45228f85ea54e908faadd42b35d0d3550826aabbc5e55c +884b2db65189fe6e9e146a5e0b3d519985d4269e1fc4c0b5a31860eedb80c55e08a807b14f5d14 +b0103ebecc34b53a202d8eaf511b2414c25e4b2bb929b1791ef57ab551e4308836159b9554e9bc +56567fdc438eba33ed6501d530ab4ce49eb1a4bcca943beba60158ecab4790199589d9afaa63fb +4e990fd6b23f1e9779813200a21520763da4fb6e846a5f47d55003aab34265109b08364185f43a +aa861a50f10a153a1e34f9bc11ace9791956630db0ee1a2c45d4c4f050588d35c092152c429498 +0d7b28acc61a60bd35580f3b1b337613acc61a60e90a56636e4ed90db01a6b80656bb0c4f5be8a +328dd5b7d772c258b19e4475b8786edf65cddcf8f1b2964572a29c3813ada59db337ebf65b3a33 +1e9df955a52db95d3767e7899a332411839451c0b0e303ecb904042a0680a94b239bd98807fc31 +cd5973afb6683658736f9b0fb466e4daaeed5da9042e59b343287655efaf2b04be97faae4e6776 +f2eee97e3fd560567c2c2ab101a2d9eebb11239977f7401c1e8c7721bec985bc0722de60933ffd +5bcdee80bc5f1abbb71558f889e6302621653e0c408c62ac0aacc00581ad0aac08f1904688211b +45dfabc0d2f9fce7225104cb21a5fbb2fb3e294da087cc63eef6728b3a5027fd73b9f55c6e3d97 +5bffd3728bdc516eb94fd4aa0962b17e5f01108e1d65d53806d471086021b32362f310d2477de5 +72dd9ecde3f5c1f67c4bc9b566cfcf25d773c9f5c554f6c6548e926e515eca64f254ff38453685 +34e2007102010e7004021707c00e2248781c85c4ff0e6fb5b2ae2fb9d6fe42c1fe9df5ad196d5e +a96f9876b322eb57cb9c1085247080e3710eb0cb19601ea2c00999cf3d1fc71ec11fc68f0459d2 +892e2f05cf4f16521c2c3a43e15521596dd9858548aa8ba4ee7621d9b29d2db5d57425291583e1 +bdca5e2732d10fb02b727c88e0e82838bef8f4d73b9117a25a179df74445e7c754f92d26803387 +011c3355e9fb5005837ddfc5c40e9cc07d7cd1cd3a7953a10fbff05ef53ec2fbb66cb30bb6eb22 +1755b5284b212f114e9fea271a18ba14c608408c6c802971008331040e610ea7be1b70481e9ff0 +b6c8f617e58d9c7fe185cd83cc268a238fc4dc0521d12a673c06018a42c0ed18514eb8eb427661 +366d91ab725745b7a9c77cfef8f7bedcfafcf19f6f6031e6307edb1cf7ddb406f504012328a401 +082056be19310ff89cb880bb0ec66140fdd089b57a1a88afab475ddc4c3d4d7d2a6453e7e6fb2f +b407012d135d1c104821a29e33d679bd4a56d16aea0ff5fad5b190bf24cdc1d2c8a42f974273a9 +d1d2ecbbaebae8b58f1fbc77ff030000ffff0300504b030414000600080000002100ccacc02fe8 +030000060c0000210000007070742f736c6964654c61796f7574732f736c6964654c61796f7574 +362e786d6ccc965d6edc3610c7df0bf40e82deb99228ea6b9175a02f16455ddba8dd03d012d72b +445fa5a88dd74180dca4e7685f7b939ca4434af23ab10b18850df8654991437266fe3fcef2ddfb +dba636f65c0c55d76e4c67659b066f8baeacda9b8df9fb1545a1690c92b525abbb966fcc031fcc +f7273ffef0ae5f0f7579ca0edd280dd8a31dd66c63eea4ecd79635143bdeb061d5f5bc85b96d27 +1a26e153dc58a5601f61efa6b6b06dfb56c3aad69cd78be7acefb6dbaae059578c0d6fe5b489e0 +3593e0ffb0abfa61d9ad7fce6ebde0036ca3577feb923cf410adac64cdcfdbfa601ada54ec61d0 +314f20fae2b22e8d96353070360ae3aa92bcd613437f253857bd76ff93e82ffb0ba1edcff617c2 +a84ab57e5e675af3c46ca63fdbbdee58df2dbf59ba6c7dbb158d6a2115c6edc604c50eead75263 +fc561ac534581c478bddf913b6c52e7fc2da5a0eb01e1caaa29a9c7b1c0e5ec2d129305476b41f +a7835c3c1a45b5313f518a132fa70451e82162270425398910c56e98e380a6d8f53fabd58ebf2e +04d7a2fc5c2e7039fe23419baa10ddd06de5aae89a998c0530d0d221b396cacb4f9e9bb9244e1d +383df211f1220725419e202fc9529bb84e8629fe3c27007c5e5a1d8535c73b07be0831f4a75df1 +6130da0e8452ba4ebadd5b4c62aab6df3d046ab69b2675e798e59902799b74e5411d720dad1e64 +eb7a9097f25073fdd1ab1fed8600216aa6ee6bc951964fe2ca132d07a4497231216f94a32876c6 +2f75557ce0ad71cd99b8e660d4aa50a780953f7a6bebe882b588ffdf08b80b0219936333f4701d +ef76ac86930dfc4671080312e0cc0951846984484a429424294636f5e20c7b180711797d1c4a09 +d5f50e2261f556390677d1996ee18be0b18512a5a38ddc14a77ee22237a014e08790a30087c84d +a3980631c9031fa25d9c6292cbaae1b4ba19053f1fa596f07bca8ca19169cd597b5f4fe489e3af +6c7705a90e8f48810f5af7b6bc6082fdf698d5ff031c5980a3e33f7fdef1aae6ed43e8dc370a9d +9f7a4ee48514e511f046803314274184322ff0314eb06be3e4f5a1db4a3151f7c7c804a46b016f +59fb02e0bdacdadebdda5d5df1b61d9b868b6f04276f54f028a7d48b888f704c1d440212a3d84e +63e4e7506c6896789e475f5f7078a89d8dcd939ae3572836599e057e4e3d94fa2e94d688e628c1 +598aa89de390fad4834b705f6c86ba2a3928faec1af3f5cb5f6762f5f5cbdf2f506274b3bcd696 +bcebde4c4f92443e4ec304250e81ba9945018aa9ef21eab984a44918a76eaee8e91df2981e187c +1e3d7df7918bbeabf47bd6b16780f6acde98010e5cecfb6130eb3441727456297fa9c287b616bf +b2fe7caf2999fef7533dd42b3227d3a3890a7d79bf9ffc0b0000ffff0300504b03041400060008 +00000021005632cb5c8e030000fa090000210000007070742f736c6964654c61796f7574732f73 +6c6964654c61796f7574372e786d6ccc56db6edc36107d2fd07f10f4ce952851b745d6c1eac2a2 +806b1b75fa018cc4f50ad185a5a88dd78181fc49bfa37ded9fe44b3aa4a47512bb801f6c202fe2 +6834339c33e788d29bb7b76d631db81ceabedbd878e5da16efcabeaabb9b8dfdc73b8a62db1a14 +eb2ad6f41ddfd8473ed86fcf7efee98d580f4d75ce8efda82ca8d10d6bb6b1f74a89b5e30ce59e +b76c58f58277f06cd7cb9629b895374e25d947a8dd368ee7baa1d3b2bab3e77cf99cfc7eb7ab4b +9ef7e5d8f24e4d45246f9882fe877d2d86a59a784e3521f900654cf6b72da9a300b4ef1bd67db0 +2d13260fe0c0f619202faf9bcaea580b8e73cea5f10de29de45c5bdde11729aec59534a117872b +69d5954e9d536c677e308799dbee600ce7bbf49bc564ebdb9d6cf50a13b06e37361075d45747fb +f8adb2cac9593e78cbfde513b1e5be7822da593670beda54a39a9a7b0cc75be0e44c8ded208082 +bb3d6b1497961e92e9e97c504b77a3ac37f6274abd34282841142c44dc94a0b42009a29e1f175e +4433cf0fef75360ed7a5e486975fab455f387cc4695b97b21ffa9d5a957d3b8b63d118d089c94c +a7eef893efe55b9ce42e0a039c21e247054a709ea2304db334247980497c3f0f037a5e5683c299 +b1cf43584819c4795f7e18acae07d234c71387a7888958bd8afdaca94ac11b75074858b3d38d01 +1178a2600936c60303b342d46dda5747bde97b588d93ad9b415dab63c3cd8dd0971d48d3a04dfc +cccbc2d4477e442922014d50127931f2b3644ba32d29a290dc2f42af98e2aa6e39ad6f46c92f47 +652894c035bc017012541ce505f4ddaaace1ac3b89499de170e5fa2b1875acc7350d0d7a30bc77 +d51593ecf7efaa4c031606e702ca59a4f6ff82f317c1d1f1dfbfee78ddf0ee6bd1793faae870e6 +82dc02443105d181c6509283951152b884d028f5ddd717dd4ec949757f8e4cc2b816e12db92f20 +bc97659b9cd8ee9b9a77ddd8b65c7e43b8ff83125e64dbc0755d0f45599cc0ee31415b976e5192 +6e53d7a52e2952fafa84c3c7f9626c9fe4dc7b85c3262ff2282c6880b2d007d0092d50eae519a2 +6ee1c534a4418093d361333475c581d1679f315f3eff7d21575f3efff302478c59964ff5327763 +cdea49d324f4b238452926706ee64984b63484f737f009c9d2789bf985568fc0e4b17ac0f93cf5 +88fe2397a2afcd3f0c7667011d58b3b163cfc7d88b4f3c4d22796856337fade1c3dac8df98b83c +1895c05ec072665c422b730a7d08d1d0977fb6b3ff000000ffff0300504b030414000600080000 +0021004ba90907dd05000065170000210000007070742f736c6964654c61796f7574732f736c69 +64654c61796f7574382e786d6ccc58dd6edb3618bd1fb077107ccf58147f44054d0afd0ec5b2b4 +58b35dec4e91e858abfe46d1aed3a2401f64c09e63c3eefa267d92919494384e6a3b6983e5c6fa +241f1ef2e3777848e9d9f355555a4b2ebaa2a98f26f0c09e58bcce9abca82f8e26bf9c25804dac +4ea6759e964dcd8f2697bc9b3c3ffefebb67ed6157e627e965b39096e2a8bbc3f4683297b23d9c +4ebb6cceabb43b685a5eabff668da852a96ec5c53417e95bc55d9553c7b6e9b44a8b7a32b417fb +b46f66b322e351932d2a5ecb9e44f032956afcddbc68bb91addd87ad15bc5334a6f5cd21c9cb56 +65db9cff7eb69a58062696ea019c1cabccb3d7656ed569a51ebca8e76929adaa90d6a73fcfd53c +667351cca48175ed99e05c47f5f207d1be6e5f09d3fa74f94a5845aed90696c974f8638099db7a +6982e946f38b314c0f573351e9ab9a146b753451b5bbd4bf53fd8cafa495f50fb3eba7d9fce51d +d86c1edf819e8e1d4cd73ad559f583bb9d8e33a67356485e5a7aaecc384e3a398e68218aa3c9fb +247102122718242a02d80e300862ec81c4412c76dc247410fda05b437a98096ecaf3221f6506e9 +add25645269aae99c983aca9068d8c5253558578a8aa1ee57b4451e8138a419c7821c01123c0f3 +690430756c1af8ae8d08fc304c801af37835594c877c87c4c74274ed4993bde9acba5185d275ed +eb7685e88ba9afed7c90962c64c9075cffa709ae67f9ce1233e4b98c99da61e22abdde2c36f290 +e320b72f22a4b63d20d64bd933b787721534f9a56e7daeaeaa84699dcd1bb508cf7bceb293afe5 +65c94dbc2ce130a09ccf7e56e0ee9deaed9afd0aa0e3b586adfe31ed846a54a6da55720ea2b8ef +431e1ba9a8124a2efa8569e50b91cdad1fcb227bc36beb9ca7e29c2b50ada9fb62f4ddb4269b31 +0b93d87679a2519efd9aed5ae51aef74c485e53c51ad629220db097d90b82c0038f12960ae4b40 +ecfbd40f3c27b4fde031b55ae4ab6bc8fe3225902138e8d4632e76c84d9d52e83a5a3c46a798b9 +88f6887d74fa15e234a1731bebb075ec085021ba038bd7b1234085f80eacbd8e1d012a24bbb023 +408574177604a8d0dd851d012a64bbb0234085de2e6c0fb86bf1b77add2fcbabbd669b1924c601 +968d28d30bb5f673de59674a32bd3d74dbbd60b33b23daedddfdf6569359f139aff91e8cce6ec6 +4814f21e8c6837e3af0517f760c47b4cf2a77febd916cafb992abedaf355a1d61d153d51478551 +0423162010464cf5ae364cc0087501c13026288e022f208fbffb6b2b9b9875a4a66ba687b61a04 +f6d0e380631377b0a62f9c0710839028f457faac55a5e2c49c148b3a5787671d9a568b53f58660 +5aadd9843e847cd18607aae124b31fdf0dfbddb0ea81cf8358a3f6e3bbb14d6cd8f9c007916bd2 +d88f709be78f84cc617acb7900e1c6c630103a0ea31af600c28ddd632474b1d9401f40b8b1c50c +849a6dffa26cdb8746424adc0716e5ffdfaceee7b164f4d828958beac6b9153f5197a5b6134342 +88ea0eaa77ac043210501a8018d9110a023f0ce9a39e5b7b97cde52d8f85bd0ebe68b2e6cd7bab +159a1ba3965999f7d97a2874544208203749803ab37bc0731d0650e8f989ebe3d8a5f8c3f84d21 +4f259745c593e26221f8cb85fe56705b645657c9b0e4697da545790ce9818d0ed454b36b49a931 +98bad7f9ab54a45aef1b527d88e0e828b864f1e9af77bc2879bd2e3af2545fec632f26ccc300ba +0155aff328019ee30780529810cf61811fb3c717dd4c8a5e757f2c52757413a3f076bc45dd4778 +dfb6daee55b59bb2e075bda82a2e6e149c3ed182c7a167275ee0e985a6de8eb11f032f8c95d504 +3689f4279e80fa8f5ff0aecc4f17d59d35df71a27b90d94471e4d2382120a4c85307d824068113 +8520b16387253421047a5766d39585da1dd5e8f6f598cf1fff3e15079f3ffef30d2cc65cc64fa0 +e3bc9b68504f1078d40959000288956f469e0bfc84aa4d83208cc380f9218ab57a5a886fab473d +dc4f3d6df3968bb629cce762680f025aa6fa25d1231e830cd3a14ebd48ae07ab2bff5aa7afaea5 +f8296d5f2e8d4afa4d3e348f5aadcc1e7a0dd1a98f9fc78fff030000ffff0300504b0304140006 +000800000021004a0963b7a105000020170000210000007070742f736c6964654c61796f757473 +2f736c6964654c61796f7574392e786d6ccc585b6edc3614fd2fd03d08f34f8ff892282376307a +15455d27a8dd05c812c72344af529a899d20401652a0eb687fb393aca49794348fd84ea6ceb8f0 +cf88e25c1ef2f21c1e927af1f2a62cac95546d5e5727137c644f2c59a5759657d72793df2f6324 +2656db2555961475254f26b7b29dbc3cfdf18717cd715b6467c96dbdec2cc0a8dae3e464b2e8ba +e6783a6dd3852c93f6a86e6405ffcd6b55261dbcaaeb69a692b7805d165362dbceb44cf26a32b4 +57fbb4afe7f33c95619d2e4b59753d889245d2c1f8db45deb4235ab30f5aa3640b30a6f5ee90ba +db06b26df2f4f266629930b5820a3c3985ccd38b22b3aaa4840a3f87629977d6a73faf6016d385 +cae79d096a9b4b25a52e55ab9f5473d1bc56a6edf9eab5b2f24c630d1893e9f0c710665eab9529 +4cbf687e3d1693e39bb92af513a6c4ba39990073b7fa77aaebe44d67a57d65baa94d17afee894d +17d13dd1d3b183e956a73aab7e7077d321633a9779270b4bcf9419c759db8d235aaafc64f23e8e +89cfa398a1184a88d93e437ec43c14132a22e2c601a1ce07dd1a3bc7a992869c9fb35164d8b943 +6c99a7aa6eeb797794d6e5a0905168c0296603a77a94ef83d0f1ec68e622416008ccb567c8e371 +84dc90ba11091d9f87e187610260cce3d364311df21d121f89689bb33a7dd35a550d44695e7bde +d6113d99fad92c0661757957c821aeffd31436b37c2fc5827aae10863bc65d50eb2ed9d4a38450 +b727113bb63d446c53d92337c7dd8d5f67b7baf5153c81c2a44a17352cc1ab1eb368bb8beeb690 +a6bc2af030a04cce7f83e0f61df4b6415f07e8f256c346ff98760a1a1589f6944ca230eafbe84e +8d5480c24eaa7e595ad952a50beb97224fdfc8caba9289ba92105469e89e8cbe9bc66433666112 +fbba3ce9284fbd621b308c778ba4807e2df24c85ea792ce0cc27280c08f4ee0518cd6838433ea7 +d80e621e304e9e5ea8e0807a3c379be8fde5cab1a078d0ab275c46f8ae5e1dec122d22a357265c +eaf411fbe8f521915a65a2ce8c93e55506d6ae8ba6d5f21cf62fd3ea1b1a3645b2811a56da5e78 +446ce36990018f6ef03cccd8de783a728da741063cb6c1c3d4d56b7d4f407b1b50a30c807c0b50 +10a1f37804a04619009d0d2021c2d1618f00d42803a0bb05e832c3dc230035ca002836801a6d7f +52760035ca00e86d013adc7d24291ae57e279555f63a51896ef685973ec610d97abf86f5b86d88 +f4991a62446c4fe0d841946a438c848344180924dc59e4c296ce4cef4f6d88da7e26863698aef9 +e08de47bb67262737758e70fece55460cc21fa7ff546632a07f446bce365dfef8d78c7bb0fe08d +f8d0deb80b78006fdc053c8037ee021ec01b77010fe08dbb800f7ba3868780f5a5e66ba7ced81c +3557b52a926b386466b2b5b407f6e7d0f690874e3e7a6c9874cbb2dd7659f65c5d96c738b07d07 +f199c7e17e147a70ec9c11b8245127b44341a3103fbdcb66dd1d8fc5bd0e1e3459736bfeaa159a +17a396395cdafb43360d48e0f81451378e11e3b1873c970844036f16bb3316b90efb307e0dc892 +4e767929e3fc7aa9e4aba5bee7df1599d5965d50c8a45a6bb13bc5ce914d8f60aac546523086c3 +6feace28b878f9e9af77322f64b52d3afe4c456787b120918f6143c73662b398237f16f8681607 +a117c4ccf56cfef4a29b77aa57dd1fcb44c1748dc2fbc6cde7bf08efb06cbb6bb6eb229755b52c +4ba97608779e29e19c128f78314521c61e104e29f2fd50c06028f3b0270413f4e9096f8bec7c59 +decbf9374e748f329b300a5d27026d070e85a4bd38423e090314db1111b113738ebdb5d9b4450e +bb238c6e5f8ff9fcf1ef7375f4f9e33f07b018f3183f5f8ef36e4a837a7cdf7348207ce46306be +197a2eac5587a39853c6025fcc021a69f53498dd550f54eea79ea67e2b5553e7e6432fb60701ad +92c21c9a31713927e3aed0ab64335a4dfd85ce1f9e85fa35695ead8c4cfa5d3e30558d96661fba +09d1b98f5fb64fff050000ffff0300504b030414000600080000002100d5d192f1bc0000003701 +00002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f75 +74352e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4 +da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7 +d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10 +c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73 +860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000 +ffff0300504b03041400060008000000210068b9a05cc3060000c9200000140000007070742f74 +68656d652f7468656d65312e786d6cec59cd8b1b3714bf17fa3f0c7377fc35e38f25de608fed6c +92dd64899d941ce5b13ca3b566642479774d0894e4d44ba190965e0abdf5504a030d34f4d23f66 +21a14dff884a1adb33b235dd7c6c42a0eb055bd2fcded34fef3d3dbdd55cbd761a61eb18528648 +dcb2cb574ab605639f8c511cb4ec7bc37ea1615b8c83780c308961cb5e40665fdbfdfcb3ab6087 +87308296908fd90e68d921e7b39d6291f96218b02b640663f16c426804b8e8d2a038a6e044e88d +70b1522ad58a1140b16dc520126aef4c26c887f6ee4a6d0f8baf983339e0633a904ae136763c2d +cb1fb6601ea6d631c02d5bcc3026274378ca6d0b03c6c583965d521fbbb87bb5b816c23c473623 +d7579fa5dc52603cad28391a8cd6828ee33ab5f65abf0260be8debd57bb55e6dad4f0180ef8b95 +265c749df58ae72cb11950d234e8eed6bbd5b286cfe8af6ee1dbaefcd3f00a94349d2d7cbfefa5 +36cc8092a6bb85773bcd4e57d7af4049b3b685af97da5da7aee11528c4289e6ea14b6eadeaad56 +bb864c08de33c29baed3af5796f01455cc4457221ff3bc588bc011a17d0150ce051cc5165fcce0 +04f802e7018c461459fb280845e0cd404c98182e554afd52557ccb3f47b59447c10e0419e964c8 +675b43928fc57c8a66bc65df145aed0ce4e58b17678f9f9f3dfefdecc993b3c7bf2ee7de96db03 +7190957bfdd337fffcf0a5f5f76f3fbe7efaad19cfb2f857bf7cf5ea8f3fff4b3dd7687df7ecd5 +f3672fbffffaaf9f9f1ae06d0a4659f810459059b7e18975974462818609e088be9dc43004282b +d18e03066220650ce81e0f35f4ed05c0c080eb40dd8ef7a9481726e0f5f991467810d2394706e0 +ad30d2800784e00ea1c635dd927365ad308f03f3e4749ec5dd05e0d834b7b7e1e5de7c26e21e99 +547a21d4681e62e17210c018724b3e2353080d620f10d2ec7a807c4a189970eb01b23a00194d32 +44232d9a52a13d1409bf2c4c0485bf35db1cdcb73a049bd477e1b18e147b0360934a8835335e07 +730e22236310e12c721ff0d04472b0a0be6670c685a7038889d51b43c64c3277e842a37b4ba419 +b3db0ff022d29194a3a909b90f08c922bb64ea85209a1939a338cc626fb0a90851601d126e2441 +f41d22fbc20f20ce75f77d0435779fbfb7ef8934640e10f9644e4d5b02127d3f2ef0044093f236 +8db414dba6c8181d9d79a085f63e84189c803184d6bd1b263c9969364f49df0c4556d98326dbdc +047aacca7e0c19b4547163702c625ac80e604072f81c2c3612cf02c411a0799a6f4ff590e989a3 +2e32c62bf6a75a2a45546e5a33893b2cd2d697abf530045a58c93e33c7eb826afe7b933d26648e +de4106beb58c48ec6f6c9b21c0da0469c00c81a8324ce9568868ee4f45e476526273a3dc44dfb4 +a91b8a1b454f84e2732ba08ddac7fd38b5cf07ab7a2ebedec94b299b554e1e6eb3b6f1081da34f +bfb4e982797c08c5697259d95c5636ffc7ca266f3f5fd63397f5cc653df3d1ea99b484511741ab +eb1ea525cabdfb99208c077c81e13e53c50f137b7fdc1783aaa384d6574db3503497d369b88002 +d5b628e15f201e0e423013d394d50c015baa0e9835234c944f6ad8a85b955ff3e8808c93d17279 +75bb2904004fc745f9b51a17c51a4f466bf5f41a6fad5ef50275ddba222065df864466329d44d5 +40a2be1a3c87845ad985b0681a5834a4fa5c16ea67e915713859405e89bb4ec248849b08e9b1f4 +5322bff2ee857b3acf98fab22b86e53525d78bf1b44622136e3a894c1886e2f0d81cbe605f3753 +976af4a429b669d41b1fc2d732896ce4061ceb3deb44ecb9aa2bd4f860d6b227e21f27d18c6642 +1f93990ae0206ed93e5f1afa5d32cb8c32de052c4c60ea51b2fe0871482d8c2211eb5937e038e5 +56aed4e51a3f5172cdd2a76739f59375329c4ca0cf7346d2ae789628313e7d4fb0ec90b9203d08 +c727d608cfe95d200ce5d6cbd28063c4f8da9a634433c19d5a71235d2db7a2f6d625dda200cf42 +b03c51b2c93c81abf69a4e661d8ae9e6aaf4fe7231a3403ae9bd4fddf385369266ce01224f4d73 +fef870877c86559af7355649eadecc75cd55aecb3b25deff40c8504b27d3a849c6066a7967c705 +160499e9d6a19977465cf469b019b5f28058d595aab7f57a9b8c8e44e47745b53ac79c251764a7 +a2fcf6562f26934ca04657d9e5945b738a5af6c392db76bc8aeb154a0db75770aa4ea9d070dbd5 +42db75abe59e5b2e753b9547c2283c8cca6e32775ffcb38f17cbf7f66a7cebdd7db42ab5aff824 +2a1255071795b07a775fae18dedd5b43f9dcb690b0ccc35aa5dfac363bb542b3daee179c6ea751 +687ab54ea15bf3eadd7ed7731bcdfe23db3a5660a75df59c5aaf51a8953dafe0d44a927ea359a8 +3b954adba9b71b3da7fd68696bb1f2d5efcabc8ad7eebf000000ffff0300504b03040a00000000 +000000210015e9f115040900000409000017000000646f6350726f70732f7468756d626e61696c +2e6a706567ffd8ffe000104a46494600010101006000600000ffdb004300030202030202030303 +0304030304050805050404050a070706080c0a0c0c0b0a0b0b0d0e12100d0e110e0b0b10161011 +13141515150c0f171816141812141514ffdb00430103040405040509050509140d0b0d14141414 +141414141414141414141414141414141414141414141414141414141414141414141414141414 +14141414141414ffc00011080090010003012200021101031101ffc4001f000001050101010101 +0100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000 +017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282 +090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465 +666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aa +b2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2 +f3f4f5f6f7f8f9faffc4001f010003010101010101010101000000000000010203040506070809 +0a0bffc400b5110002010204040304070504040001027700010203110405213106124151076171 +1322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a353637 +38393a434445464748494a535455565758595a636465666768696a737475767778797a82838485 +868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8 +c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c030100021103 +11003f00fd53a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a2 +8a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800 +a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a28 +00a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a +2800a28a2800a28a2800a28a2800a2b83f03fc61d17c6be2af11f86637fb26bba2ddcb04969230 +ccd1ab6d12a7a8e991d54fb104f795ad4a73a52e59ab322338cd5e2ee145145645851451400514 +514005145140051451400514514005145140051451400d7758d19dd82aa8c96638007ad53fedcd +37fe8216bff7f97fc6b13e2b7fc92ff187fd81af3ff443d7e52d7d2e5393acd23393a9cbcb6e97 +fd51e4e3b1ff0053715cb7bf99faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00d042d7feff +002ff8d7e45515ef7faa6bfe7fff00e4bff04f33fb6dff00cfbfc7fe01faebfdb9a6ff00d042d7 +feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455147faa6bfe7fff00e4bff043fb6dff00cf +bfc7fe01faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455147faa +6bfe7fff00e4bff043fb6dff00cfbfc7fe01faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00 +d042d7feff002ff8d7e455147faa6bfe7fff00e4bff043fb6dff00cfbfc7fe01faebfdb9a6ff00 +d042d7feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455147faa6bfe7fff00e4bff043fb6d +ff00cfbfc7fe01faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455 +147faa6bfe7fff00e4bff043fb6dff00cfbfc7fe01e95f15bc497de1cf8fde28d6745be7b4bdb6 +d627960bab76e41de7f0208e08e84120f15f6bfecf3fb4369df19b46fb2dd79763e29b4406eac8 +1c2cabd3cd8b3d54f71d549c1e304fe6f568787fc41a8f85b59b4d5b49bb92c751b490490dc447 +0cadfd41e841e08241af7f1f93d3c6e1a34ef69c5593f4efe5f91e661b1f3c3d573fb2dea8fd73 +a2bc77f679fda1b4ef8cda37d96ebcbb1f14da20375640e1655e9e6c59eaa7b8eaa4e0f1827d8a +bf25c461ea616a3a5555a48fb7a75215a0a70774c28a28ae7350a28a2800a28a2800a28a2800a2 +8a2800a28a2800a28a280396f8adff0024bfc61ff606bcff00d10f5f94b5fab5f1514b7c30f178 +0324e8f78001ff005c1ebf2afec73ffcf093fef835fa370ab4a955bf747ca6757e787a321a2a6f +b1cfff003c24ff00be0d1f639ffe7849ff007c1afbbe65dcf9bb321a2a6fb1cfff003c24ff00be +0d1f639ffe7849ff007c1a399770b321a2a6fb1cff00f3c24ffbe0d1f639ff00e7849ff7c1a399 +770b321a2a6fb1cfff003c24ff00be0d1f639ffe7849ff007c1a399770b321a2a6fb1cff00f3c2 +4ffbe0d1f639ff00e7849ff7c1a399770b321a2a6fb1cfff003c24ff00be0d1f639ffe7849ff00 +7c1a399770b321a29594ab1041047506b57c2be15d57c6dafd9e8ba2d9c97da8dd3ec8e18ff524 +f40a07249e00144a518c5ca4ec9028b93b2dcd0f86b6be25bcf1c6911f8405c7fc245e7036ad6c +70cac3a927a05c677678c673c57ea7e86ba8268d62bab3dbcbaa08505d3daa9588cb81b8a03ced +ce719af38f809f0134bf82ba0607977de21ba41f6dd436fe3e5c79e4203f8b1193d80f55afc8f3 +ccca9e61592a51f763d7abff0081d8fb9cbb092c2d37cef57d3b0514515f347ac1451450014514 +500145145001451450014514500145145001451450014514500145145001451450014514500145 +14500145145007e67fc50f0aeabe36fda23c55a2e8b6725f6a375ac5c2470c7fef9c927a050392 +4f000afb6fe027c04d2fe0ae8181e5df7886e907db750dbf8f971e79080fe2c464f603a3f067c2 +bd13c13e20f106bb6b0f9daceb77725cdcde4a06f0acdb8449fdd51c7d4f27b01d957d26639c4f +154a186a5a42295fcda5f97fc39e4e17031a339559eb26dfc828a28af9b3d60a28a2800a28a280 +0a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2 +800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28 +a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a +28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a280 +0a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2 +800a28a2800a28a2803fffd9504b030414000600080000002100a364236b8d0100003203000011 +0000007070742f7072657350726f70732e786d6cacd2516fdb201000e0f749fb0f16ef0430368e +ad38951d1c69d21ea6aafd01c8c6099a310848dba9ea7f1f73d22add34a99af6742074c777709b +9b273d250fd27965e61a901506899c7b33a8f95083fbbb3d5c83c407310f6232b3acc10fe9c1cd +f6f3a78dadac935ece418498facd25b1d0ec2b51836308b642c8f747a9855f192be778361aa745 +885b774083138ff1023da1146386b45033b8e4bb8fe49b7154bde4a63fe908381771725a24fea8 +ac7fad663f52edba8f77a46d6c523e85af3e5c56c9c9a91a3c7705db7565d64086e90e66244b61 +5b762d649cd00263829bb478f9954db26a50be176ef8a2c54176830a5c04f18a23d91f3cad7a67 +bc19c3aa37fad227b2e6513a6bd4d22ac197f77a10530d3040db0d5a70ef8d9c9206b3b48145b9 +6e6046d312362de7b06d9b75ce588a7382df8c7214a7292c466ed57fe4d1b460c5df887b9e77fb +a6e11077bb0e6639ed60b9a60466ac4d69dbc540b33331affaa370e1ce89fe7b9c9b5b39b6c2cb +e10d9aff0b34bd86926be4392edf8e7e1ff3ed4f000000ffff0300504b03041400060008000000 +2100d8fd8d8fac000000b6000000130000007070742f7461626c655374796c65732e786d6c0ccc +490e82301840e1bd897768fe7d2d43512414c2202b77ea012a9421e94068a312e3dd65f9f2922f +cd3f4aa29758ec643403ffe00112ba35dda407068f7b836340d671dd7169b460b00a0b79b6dfa5 +3c714f7973ab1457ebd0a6689b7006a3737342886d47a1b83d9859e8edf56651dc6db90ca45bf8 +7bd3952481e71d89e29306d4899ec137aa8220a2b4c0a7cbe5886948035c7a34c67154d6d5b9a9 +fd2a2c7e40b23f000000ffff0300504b0304140006000800000021006720e9636d010000c60200 +00110000007070742f7669657750726f70732e786d6c8c52c96ec23010bd57ea3f58be978434a4 +3422e152950b874ad0de2dc7492c39b6e5314bf8fa4e365ac485db2c6fdebc5956eb73a3c85138 +904667743e0b29119a9b42ea2aa3dffbcf972525e0992e98325a64b41540d7f9f3d3caa647294e +5f8e2081869465b4f6dea64100bc160d8399b14263ae34ae611e5d5705856327246e5410856112 +344c6a3ad6bb47ea4d594a2e3e0c3f3442fb81c409c53c8a875a5a98d8ec236cd609409abefa46 +528ec3e90ea87efa113b1fb1de38516c45e9095c70558b240a69f03fb737b64fbdc749d2a7827b +1e50b2107f2edfa962f0086866f766e3649151bc02d4e6b4392018b0572f898fc023733bce9498 +e2d039f98aa5702678c345440952ccc35e0246dbfb6870adb2a971b2929a9c331a23a6cd68148f +90b16107aa3a255bf0579b60192e0ff76cdc85126b5066341fc69e207df075194f2dff483af2eb +e4839cdbbd54b8869d651cbf857094f686d7c14fe4ed640e8cc30be6bf000000ffff0300504b03 +04140006000800000021007749ef2667010000b202000011000801646f6350726f70732f636f72 +652e786d6c20a2040128a000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000008c92d14e +c2301486ef4d7c87a5d76edd980a59b692a8e18248422246e35dd31e46e3d62e6d61f03ebe892f +6637d800e5c2cbe6ffce97d3bf4dc7dbb2f036a08d5032435110220f24535cc83c43af8b893f42 +9eb154725a280919da814163727d95b22a614ac35cab0ab415603c67922661558656d65609c686 +ada0a426708474e152e9925a77d439ae28fba439e04118dee3122ce5d452dc08fdaa37a28392b3 +5e59ad75d10a38c3504009d21a1c05113eb21674692e0eb4c909590abbabe022da853dbd35a207 +ebba0eeab845ddfe117e9f3dbfb457f5856cba628048ca5962852d80cc550d7aae84b4fe5c7f7f +19b732b5aeed14f74803330dd42a4da66b99df78d37521e81ee982a6f1821a3b738fb314c01f76 +bfd8bf7933a261239ac7258396e88fe9a1a9bd1fb8e76e98ecfbe892b7f8f1693141641046233f +8cfde87e110e93284eee861fcd6a67f347617958e0ffc6db241a9d183b0169373eff65e4070000 +ffff0300504b030414000600080000002100e329ddaa0f0200000705000010000801646f635072 +6f70732f6170702e786d6c20a2040128a000010000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000a454c16edb300cbd0fd83f18be274eba2d180245459720c8a1590dc44dcf8a45dbc414c990 +b8b4ddf7ec4ff66393e5da4dd6a040579f1ec9e727fa9132bb7cd8abe800d6a1d1b3783c1cc511 +e8dc48d4e52cbecd9683af71e448682994d1308b1fc1c597fce307965a53832504177909ed6671 +45544f93c4e515ec851bfab2f695c2d8bd201fda32314581392c4cfe730f9a928bd16892c00381 +962007752f18b78ad303fdafa83479d39fdb668fb5d7e32c332454867be023963c07ecce58e99a +5c0bd8555d2bcc057937f81a736b9c2928ba094744a9b9079b1ad4c49263a2f7029c3f3b44cbd0 +1aff660169874ab2e44c95a5c28ad28aba0a871f456ca35082e363963c21f6dd10045a0bd80aa5 +04fd54f5e99398add77385752874906d72a160ee0de185500ebc749f602b10cdb05381d6330f34 +3d404ec6460e7ff9714fe268271c3436cee283b02834c52dad0d0256b523cbb760ef9b5112449b +bcb25890b07eb62ce919011ebf788cf133ff14081ebc4a6cb516e0b07c8bf8f80de24ba3d08f0c +09d4fb4f084130d5e353bb332405eea6f00b4067dcff72ec7ee8a1f5be6de7caeb9fb4d7a3b950 +b8b3f85a2dbac6b2a2b38c76dbcf969e6fc020b57f7ef76bfdc2a4ee73fff9c06bd43fdc6d9d99 +8520e896f134c93695b020fd7dee97b54fb09577c2aa863faf842e41769c9785e62a6fdbff1a1f +4f8623ff845bdbe59a7bd9fd70f85f000000ffff0300504b01022d0014000600080000002100df +cc18f5ad010000460c00001300000000000000000000000000000000005b436f6e74656e745f54 +797065735d2e786d6c504b01022d001400060008000000210068f874a103010000e20200000b00 +000000000000000000000000e60300005f72656c732f2e72656c73504b01022d00140006000800 +00002100635c23b4c00000003701000020000000000000000000000000001a0700007070742f73 +6c696465732f5f72656c732f736c696465312e786d6c2e72656c73504b01022d00140006000800 +000021001b2e35070c010000d00300001f00000000000000000000000000180800007070742f5f +72656c732f70726573656e746174696f6e2e786d6c2e72656c73504b01022d0014000600080000 +002100bcd1a735de0200002c0e00001400000000000000000000000000690a00007070742f7072 +6573656e746174696f6e2e786d6c504b01022d0014000600080000002100303a84e5ea0200006c +0600001500000000000000000000000000790d00007070742f736c696465732f736c696465312e +786d6c504b01022d0014000600080000002100d5d192f1bc000000370100002c00000000000000 +000000000000961000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c +61796f7574362e786d6c2e72656c73504b01022d0014000600080000002100d5d192f1bc000000 +370100002c000000000000000000000000009c1100007070742f736c6964654c61796f7574732f +5f72656c732f736c6964654c61796f7574372e786d6c2e72656c73504b01022d00140006000800 +00002100d5d192f1bc000000370100002c00000000000000000000000000a21200007070742f73 +6c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574392e786d6c2e72656c73 +504b01022d0014000600080000002100d5d192f1bc000000370100002d00000000000000000000 +000000a81300007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f +757431302e786d6c2e72656c73504b01022d0014000600080000002100d5d192f1bc0000003701 +00002c00000000000000000000000000af1400007070742f736c6964654c61796f7574732f5f72 +656c732f736c6964654c61796f7574382e786d6c2e72656c73504b01022d001400060008000000 +2100d5d192f1bc000000370100002d00000000000000000000000000b51500007070742f736c69 +64654c61796f7574732f5f72656c732f736c6964654c61796f757431312e786d6c2e72656c7350 +4b01022d0014000600080000002100d5d192f1bc000000370100002c0000000000000000000000 +0000bc1600007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f75 +74312e786d6c2e72656c73504b01022d0014000600080000002100d5d192f1bc00000037010000 +2c00000000000000000000000000c21700007070742f736c6964654c61796f7574732f5f72656c +732f736c6964654c61796f7574322e786d6c2e72656c73504b01022d0014000600080000002100 +d5d192f1bc000000370100002c00000000000000000000000000c81800007070742f736c696465 +4c61796f7574732f5f72656c732f736c6964654c61796f7574332e786d6c2e72656c73504b0102 +2d0014000600080000002100d5d192f1bc000000370100002c00000000000000000000000000ce +1900007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574342e +786d6c2e72656c73504b01022d001400060008000000210069a25f2115010000c70700002c0000 +0000000000000000000000d41a00007070742f736c6964654d6173746572732f5f72656c732f73 +6c6964654d6173746572312e786d6c2e72656c73504b01022d0014000600080000002100e40b4c +2ac6040000891000002200000000000000000000000000331c00007070742f736c6964654c6179 +6f7574732f736c6964654c61796f757431312e786d6c504b01022d0014000600080000002100ee +0bf3bf90040000a70f00002200000000000000000000000000392100007070742f736c6964654c +61796f7574732f736c6964654c61796f757431302e786d6c504b01022d00140006000800000021 +005a9d379569050000671500002100000000000000000000000000092600007070742f736c6964 +654c61796f7574732f736c6964654c61796f7574332e786d6c504b01022d001400060008000000 +21008f55c3fd730400006b0f00002100000000000000000000000000b12b00007070742f736c69 +64654c61796f7574732f736c6964654c61796f7574322e786d6c504b01022d0014000600080000 +0021007555dfd224050000701200002100000000000000000000000000633000007070742f736c +6964654c61796f7574732f736c6964654c61796f7574312e786d6c504b01022d00140006000800 +00002100fd00fcd1320800004e3600002100000000000000000000000000c63500007070742f73 +6c6964654d6173746572732f736c6964654d6173746572312e786d6c504b01022d001400060008 +00000021009119fff8d4040000951300002100000000000000000000000000373e00007070742f +736c6964654c61796f7574732f736c6964654c61796f7574342e786d6c504b01022d0014000600 +080000002100d60634cc2e060000371f000021000000000000000000000000004a430000707074 +2f736c6964654c61796f7574732f736c6964654c61796f7574352e786d6c504b01022d00140006 +00080000002100ccacc02fe8030000060c00002100000000000000000000000000b74900007070 +742f736c6964654c61796f7574732f736c6964654c61796f7574362e786d6c504b01022d001400 +06000800000021005632cb5c8e030000fa0900002100000000000000000000000000de4d000070 +70742f736c6964654c61796f7574732f736c6964654c61796f7574372e786d6c504b01022d0014 +0006000800000021004ba90907dd050000651700002100000000000000000000000000ab510000 +7070742f736c6964654c61796f7574732f736c6964654c61796f7574382e786d6c504b01022d00 +140006000800000021004a0963b7a1050000201700002100000000000000000000000000c75700 +007070742f736c6964654c61796f7574732f736c6964654c61796f7574392e786d6c504b01022d +0014000600080000002100d5d192f1bc000000370100002c00000000000000000000000000a75d +00007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574352e78 +6d6c2e72656c73504b01022d001400060008000000210068b9a05cc3060000c920000014000000 +00000000000000000000ad5e00007070742f7468656d652f7468656d65312e786d6c504b01022d +000a00000000000000210015e9f11504090000040900001700000000000000000000000000a265 +0000646f6350726f70732f7468756d626e61696c2e6a706567504b01022d001400060008000000 +2100a364236b8d010000320300001100000000000000000000000000db6e00007070742f707265 +7350726f70732e786d6c504b01022d0014000600080000002100d8fd8d8fac000000b600000013 +00000000000000000000000000977000007070742f7461626c655374796c65732e786d6c504b01 +022d00140006000800000021006720e9636d010000c60200001100000000000000000000000000 +747100007070742f7669657750726f70732e786d6c504b01022d00140006000800000021007749 +ef2667010000b2020000110000000000000000000000000010730000646f6350726f70732f636f +72652e786d6c504b01022d0014000600080000002100e329ddaa0f020000070500001000000000 +000000000000000000ae750000646f6350726f70732f6170702e786d6c504b0506000000002500 +25004d0b0000f37800000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000002004f006c00650050007200650073003000300030000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001800020103 +00000005000000ffffffff00000000000000000000000000000000000000000000000000000000 +000000000000000003000000fc010000000000005200690063006800450064006900740046006c +006100670073000000000000000000000000000000000000000000000000000000000000000000 +0000000000001c000200ffffffffffffffffffffffff0000000000000000000000000000000000 +000000000000000000000000000000000000000b0000000c000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000ffffffffffffff +ffffffffff00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000fa020000040000002f528f00040000002d010400070000 +00fc020100000000000000040000002d010500120000002403070065026a03e4086a03e408af02 +5a0a2504e4089b05e408e0046502e004040000002d010200040000002d01030004000000f00104 +00040000002701ffff040000002c010000070000001604cf08a80f00000000030000001e000400 +00002c010000040000002701ffff0300000000000000000000000000000000000000000000004e +414e49000000000000000001000008000000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000 +01050000 +05000000 +0d000000 +4d45544146494c455049435400 +0a450000 +28d9ffff +c2010000 +08000a45d8260000 +010009000003dd00000006001200000000000400000003010800050000000b0200000000050000 +000c02cf08a80f030000001e0007000000fc020000ffffff000000040000002d01000008000000 +fa02050000000000ffffff00040000002d0101000e00000024030500ffffffffffffcf08a80fcf +08a80fffffffffffff08000000fa0200000000000000000000040000002d01020007000000fc02 +0000ffffff000000040000002d01030004000000f001000007000000fc0200004472c400000004 +0000002d0100000400000006010100040000002d010100120000002403070065026a03e4086a03 +e408af025a0a2504e4089b05e408e0046502e004040000002d0102000400000006010100040000 +002d01030008000000fa020000040000002f528f00040000002d01040007000000fc0201000000 +00000000040000002d010500120000002403070065026a03e4086a03e408af025a0a2504e4089b +05e408e0046502e004040000002d010200040000002d01030004000000f0010400040000002701 +ffff040000002c010000070000001604cf08a80f00000000030000001e00040000002c01000004 +0000002701ffff030000000000 +}{\result{\pict\wmetafile8\picw10020\pich5638\picwgoal10020\pichgoal5638 +010009000003dd00000006001200000000000400000003010800050000000b0200000000050000 +000c02cf08a80f030000001e0007000000fc020000ffffff000000040000002d01000008000000 +fa02050000000000ffffff00040000002d0101000e00000024030500ffffffffffffcf08a80fcf +08a80fffffffffffff08000000fa0200000000000000000000040000002d01020007000000fc02 +0000ffffff000000040000002d01030004000000f001000007000000fc0200004472c400000004 +0000002d0100000400000006010100040000002d010100120000002403070065026a03e4086a03 +e408af025a0a2504e4089b05e408e0046502e004040000002d0102000400000006010100040000 +002d01030008000000fa020000040000002f528f00040000002d01040007000000fc0201000000 +00000000040000002d010500120000002403070065026a03e4086a03e408af025a0a2504e4089b +05e408e0046502e004040000002d010200040000002d01030004000000f0010400040000002701 +ffff040000002c010000070000001604cf08a80f00000000030000001e00040000002c01000004 +0000002701ffff030000000000 +}}} \ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/ole2.png b/sw/qa/extras/htmlimport/data/ole2.png new file mode 100644 index 000000000..fdad35484 Binary files /dev/null and b/sw/qa/extras/htmlimport/data/ole2.png differ diff --git a/sw/qa/extras/htmlimport/data/ole2.svg b/sw/qa/extras/htmlimport/data/ole2.svg new file mode 100644 index 000000000..552a1cf5a --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole2.svg @@ -0,0 +1,3 @@ + + + diff --git a/sw/qa/extras/htmlimport/data/outline-level.html b/sw/qa/extras/htmlimport/data/outline-level.html new file mode 100644 index 000000000..cd36fc3c1 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/outline-level.html @@ -0,0 +1,5 @@ + + +

            heading

            + + diff --git a/sw/qa/extras/htmlimport/data/picture.html b/sw/qa/extras/htmlimport/data/picture.html new file mode 100644 index 000000000..53f0c6441 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/picture.html @@ -0,0 +1,20 @@ + + + +
            +

            + This document should contain two links. (Edit -> Links...) +

            +

            + + + +

            +

            + + + +

            +
            + + diff --git a/sw/qa/extras/htmlimport/data/reqif-br.xhtml b/sw/qa/extras/htmlimport/data/reqif-br.xhtml new file mode 100644 index 000000000..aeb4ecae6 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/reqif-br.xhtml @@ -0,0 +1 @@ +aaabbb diff --git a/sw/qa/extras/htmlimport/data/reqif-page-style.xhtml b/sw/qa/extras/htmlimport/data/reqif-page-style.xhtml new file mode 100644 index 000000000..36f5aa117 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/reqif-page-style.xhtml @@ -0,0 +1 @@ +aaabbb diff --git a/sw/qa/extras/htmlimport/data/reqif-table.xhtml b/sw/qa/extras/htmlimport/data/reqif-table.xhtml new file mode 100644 index 000000000..a169a079e --- /dev/null +++ b/sw/qa/extras/htmlimport/data/reqif-table.xhtml @@ -0,0 +1,79 @@ +Before. + + + + + + + + + + + + +Table 2. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Table 3. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +After. + diff --git a/sw/qa/extras/htmlimport/data/table_border_1px.html b/sw/qa/extras/htmlimport/data/table_border_1px.html new file mode 100644 index 000000000..6181aa0f8 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/table_border_1px.html @@ -0,0 +1,22 @@ +

+ + + + + + + + + + + + + + + + + + + + +
SchlüsselName_des_Tests3
Öffnen der "Document Type" MaskeAF01.013
Öffnen der "Document Type" MaskeÖffnen der "Document Type" Maske3
Öffnen der "Document Type" MaskeÖffnen der "Document Type" Maske3
\ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/tdf118579.html b/sw/qa/extras/htmlimport/data/tdf118579.html new file mode 100644 index 000000000..41613fb8e --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf118579.html @@ -0,0 +1,67 @@ + + +
+
PUBBLICI ESERCIZI MINORI
+
+
+
+
+
+
+
+
+
+ + + + + + + + +
Percorso Anno I
Unità di CompetenzaTeoricaOn The JobOre Totali
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Riepilogo
InternaEsternaInterna / Esterna
AnnoTeoricaOn the jobAnnoTeoricaOn the jobAnnoTeoricaOn the job
0
Totali48Totali00Totali00
Totali Complessivi12Totali Complessivi0Totali Complessivi0
diff --git a/sw/qa/extras/htmlimport/data/tdf122789.html b/sw/qa/extras/htmlimport/data/tdf122789.html new file mode 100644 index 000000000..7ee655201 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf122789.html @@ -0,0 +1,7 @@ + + + + + +

Pic

+ diff --git a/sw/qa/extras/htmlimport/data/tdf142781.html b/sw/qa/extras/htmlimport/data/tdf142781.html new file mode 100644 index 000000000..e7d545947 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf142781.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/tdf80194_subscript.html b/sw/qa/extras/htmlimport/data/tdf80194_subscript.html new file mode 100644 index 000000000..5b00f5dd8 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf80194_subscript.html @@ -0,0 +1,4 @@ + +

Does the subscript go lower than the descent? qp.

+

We want to know about the ascent for a superscripTL also.

+
diff --git a/sw/qa/extras/htmlimport/htmlimport.cxx b/sw/qa/extras/htmlimport/htmlimport.cxx new file mode 100644 index 000000000..f6686c79c --- /dev/null +++ b/sw/qa/extras/htmlimport/htmlimport.cxx @@ -0,0 +1,593 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class HtmlImportTest : public SwModelTestBase +{ + public: + HtmlImportTest() : SwModelTestBase("sw/qa/extras/htmlimport/data/", "HTML (StarWriter)") {} +}; + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testPictureImport) +{ + load(mpTestDocumentPath, "picture.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + // The document contains two pictures stored as a link. + sfx2::LinkManager& rLinkManager = pTextDoc->GetDocShell()->GetDoc()->GetEditShell()->GetLinkManager(); + CPPUNIT_ASSERT_EQUAL(size_t(2), rLinkManager.GetLinks().size()); + rLinkManager.Remove(0,2); + CPPUNIT_ASSERT_EQUAL(size_t(0), rLinkManager.GetLinks().size()); + + // TODO: Get the data into clipboard in html format and paste + + // But when pasting we don't want images to be linked. + CPPUNIT_ASSERT_EQUAL(size_t(0), rLinkManager.GetLinks().size()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testInlinedImage) +{ + load(mpTestDocumentPath, "inlined_image.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + // The document contains only one embedded picture inlined in img's src attribute. + + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwEditShell* pEditShell = pDoc->GetEditShell(); + CPPUNIT_ASSERT(pEditShell); + + // This was 1 before 3914a711060341345f15b83656457f90095f32d6 + const sfx2::LinkManager& rLinkManager = pEditShell->GetLinkManager(); + CPPUNIT_ASSERT_EQUAL(size_t(0), rLinkManager.GetLinks().size()); + + uno::Reference xShape = getShape(1); + uno::Reference const xNamed(xShape, uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("Image1"), xNamed->getName()); + + uno::Reference xGraphic = getProperty< uno::Reference >(xShape, "Graphic"); + CPPUNIT_ASSERT(xGraphic.is()); + CPPUNIT_ASSERT(xGraphic->getType() != graphic::GraphicType::EMPTY); + + for (SwNodeOffset n(0); ; n++) + { + SwNode* pNode = pDoc->GetNodes()[ n ]; + if (SwGrfNode *pGrfNode = pNode->GetGrfNode()) + { + // FIXME? For some reason without the fix in 72703173066a2db5c977d422ace + // I was getting GraphicType::NONE from SwEditShell::GetGraphicType() when + // running LibreOffice but cannot reproduce that in a unit test here. :-( + // So, this does not really test anything. + CPPUNIT_ASSERT(pGrfNode->GetGrfObj().GetType() != GraphicType::NONE); + break; + } + } +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testInlinedImagesPageAndParagraph) +{ + load(mpTestDocumentPath, "PageAndParagraphFilled.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + // The document contains embedded pictures inlined for PageBackground and + // ParagraphBackground, check for their existence after import + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwEditShell* pEditShell = pDoc->GetEditShell(); + CPPUNIT_ASSERT(pEditShell); + + // images are not linked, check for zero links + const sfx2::LinkManager& rLinkManager = pEditShell->GetLinkManager(); + CPPUNIT_ASSERT_EQUAL(size_t(0), rLinkManager.GetLinks().size()); + + // get the pageStyle where the PageBackgroundFill is defined. Caution: for + // HTML mode this is *not* called 'Default Style', but 'HTML'. Name is empty + // due to being loaded embedded. BitmapMode is repeat. + uno::Reference xPageProperties1(getStyles("PageStyles")->getByName("HTML"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xPageProperties1, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xPageProperties1, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty(xPageProperties1, "FillBitmapMode")); + + // we should have one paragraph + const int nParagraphs = getParagraphs(); + CPPUNIT_ASSERT_EQUAL(1, nParagraphs); + + if(nParagraphs) + { + // get the paragraph + uno::Reference xPara = getParagraph(1); + uno::Reference< beans::XPropertySet > xParagraphProperties( xPara, uno::UNO_QUERY); + + // check for Bitmap FillStyle, name empty, repeat + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xParagraphProperties, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xParagraphProperties, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty(xParagraphProperties, "FillBitmapMode")); + } +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testListStyleType) +{ + load(mpTestDocumentPath, "list-style.html"); + // check unnumbered list style - should be type circle here + uno::Reference< beans::XPropertySet > xParagraphProperties(getParagraph(4), + uno::UNO_QUERY); + uno::Reference xLevels( + xParagraphProperties->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProps; + xLevels->getByIndex(0) >>= aProps; // 1st level + + bool bBulletFound=false; + for (beans::PropertyValue const & rProp : std::as_const(aProps)) + { + if (rProp.Name == "BulletChar") + { + // should be 'o'. + CPPUNIT_ASSERT_EQUAL(OUString(u"\uE009"), rProp.Value.get()); + bBulletFound = true; + break; + } + } + CPPUNIT_ASSERT_MESSAGE("no BulletChar property found for para 4", bBulletFound); + + // check numbered list style - should be type lower-alpha here + xParagraphProperties.set(getParagraph(14), + uno::UNO_QUERY); + xLevels.set(xParagraphProperties->getPropertyValue("NumberingRules"), + uno::UNO_QUERY); + xLevels->getByIndex(0) >>= aProps; // 1st level + + for (beans::PropertyValue const & rProp : std::as_const(aProps)) + { + if (rProp.Name == "NumberingType") + { + printf("style is %d\n", rProp.Value.get()); + // is lower-alpha in input, translates into chars_lower_letter here + CPPUNIT_ASSERT_EQUAL(style::NumberingType::CHARS_LOWER_LETTER, + rProp.Value.get()); + return; + } + } + CPPUNIT_FAIL("no NumberingType property found for para 14"); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testMetaIsoDates) +{ + load(mpTestDocumentPath, "meta-ISO8601-dates.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDocShell* pDocShell(pTextDoc->GetDocShell()); + uno::Reference xDocProps; + + CPPUNIT_ASSERT(pDocShell); + uno::Reference xDPS(pDocShell->GetModel(), uno::UNO_QUERY); + xDocProps.set(xDPS->getDocumentProperties()); + + // get the document properties + CPPUNIT_ASSERT(xDocProps.is()); + DateTime aCreated(xDocProps->getCreationDate()); // in the new format + DateTime aModified(xDocProps->getModificationDate()); // in the legacy format (what LibreOffice used to write) + + CPPUNIT_ASSERT_EQUAL(DateTime(Date(7, 5, 2017), tools::Time(12, 34, 3, 921000000)), aCreated); + CPPUNIT_ASSERT_EQUAL(DateTime(Date(8, 5, 2017), tools::Time(12, 47, 0, 386000000)), aModified); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testImageWidthAuto) +{ + load(mpTestDocumentPath, "image-width-auto.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwTextAttr const*const pAttr(pTextDoc->GetDocShell()->GetDoc()->GetEditShell()-> + GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT(pAttr); + SwFrameFormat const*const pFmt(pAttr->GetFlyCnt().GetFrameFormat()); + SwFormatFrameSize const& rSize(pFmt->GetFormatAttr(RES_FRM_SIZE)); + CPPUNIT_ASSERT_EQUAL(Size(1835, 560), rSize.GetSize()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testImageLazyRead) +{ + load(mpTestDocumentPath, "image-lazy-read.html"); + auto xGraphic = getProperty>(getShape(1), "Graphic"); + Graphic aGraphic(xGraphic); + // This failed, import loaded the graphic, it wasn't lazy-read. + CPPUNIT_ASSERT(!aGraphic.isAvailable()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testChangedby) +{ + load(mpTestDocumentPath, "meta-changedby.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDocShell* pDocShell(pTextDoc->GetDocShell()); + uno::Reference xDocProps; + + CPPUNIT_ASSERT(pDocShell); + uno::Reference xDPS(pDocShell->GetModel(), uno::UNO_QUERY); + xDocProps.set(xDPS->getDocumentProperties()); + + // get the document properties + CPPUNIT_ASSERT(xDocProps.is()); + + // the doc's property ModifiedBy is set correctly, ... + CPPUNIT_ASSERT_EQUAL(OUString("Blah"), xDocProps->getModifiedBy()); + + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // ...but there is no comment 'HTML: ' + CPPUNIT_ASSERT(!xFields->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTableBorder1px) +{ + load(mpTestDocumentPath, "table_border_1px.html"); + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + table::BorderLine2 aBorder; + + uno::Reference xCellA1(xTable->getCellByName("A1"), uno::UNO_QUERY); + aBorder = getProperty(xCellA1, "TopBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell top border", aBorder.InnerLineWidth > 0); + aBorder = getProperty(xCellA1, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell bottom border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellA1, "LeftBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell left border", aBorder.InnerLineWidth > 0); + aBorder = getProperty(xCellA1, "RightBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell right border", aBorder.InnerLineWidth > 0); + + uno::Reference xCellB1(xTable->getCellByName("B1"), uno::UNO_QUERY); + aBorder = getProperty(xCellB1, "TopBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell top border", aBorder.InnerLineWidth > 0); + aBorder = getProperty(xCellB1, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell bottom border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB1, "LeftBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell left border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB1, "RightBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell right border", aBorder.InnerLineWidth > 0); + + uno::Reference xCellA2(xTable->getCellByName("A2"), uno::UNO_QUERY); + aBorder = getProperty(xCellA2, "TopBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell top border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellA2, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell bottom border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellA2, "LeftBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell left border", aBorder.InnerLineWidth > 0); + aBorder = getProperty(xCellA2,"RightBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell right border", aBorder.InnerLineWidth > 0); + + uno::Reference xCellB2(xTable->getCellByName("B2"), uno::UNO_QUERY); + aBorder = getProperty(xCellB2, "TopBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell top border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB2, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell bottom border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB2, "LeftBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell left border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB2, "RightBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell right border", aBorder.InnerLineWidth > 0); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testOutlineLevel) +{ + load(mpTestDocumentPath, "outline-level.html"); + // This was 0, HTML imported into Writer lost the outline numbering for + // Heading 1 styles. + CPPUNIT_ASSERT_EQUAL(static_cast(1), + getProperty(getParagraph(1), "OutlineLevel")); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testReqIfBr) +{ + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + load(mpTestDocumentPath, "reqif-br.xhtml"); + // was not recognized as a line break from a ReqIf file. + CPPUNIT_ASSERT(getParagraph(1)->getString().startsWith("aaa\nbbb")); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf80194_subscript) +{ + load(mpTestDocumentPath, "tdf80194_subscript.html"); + uno::Reference xPara = getParagraph(1); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1), "CharEscapement"), 0); + // Most recently, the default subscript was 33%, which is much too large for a subscript. + // The original 8% (derived from a mathematical calculation) is much better in general, + // and for HTML was a better match when testing with firefox. + // DFLT_ESC_AUTO_SUB was tested, but HTML specs are pretty loose, and generally + // it exceeds the font ascent - so the formula-based-escapement is not appropriate. + CPPUNIT_ASSERT_DOUBLES_EQUAL( -8.f, getProperty(getRun(xPara, 2, "p"), "CharEscapement"), 1); + + xPara.set(getParagraph(2)); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1), "CharEscapement"), 0); + uno::Reference xRun (getRun(xPara, 2, "L")); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 33.f, getProperty(xRun, "CharEscapement"), 1); + // HTML (although unspecified) tends to use a fairly large font. Definitely more than DFLT_ESC_PROP. + CPPUNIT_ASSERT( 70 < getProperty(xRun, "CharEscapementHeight")); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testReqIfTable) +{ + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + load(mpTestDocumentPath, "reqif-table.xhtml"); + // to see this: soffice --infilter="HTML (StarWriter):xhtmlns=reqif-xhtml" sw/qa/extras/htmlimport/data/reqif-table.xhtml + // Load a table with xhtmlns=reqif-xhtml filter param. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(3), xTables->getCount()); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + auto aBorder = getProperty(xCell, "TopBorder"); + // This was 0, tables had no borders, even if the default autoformat has + // borders and the markup allows no custom borders. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Top Border", static_cast(18), aBorder.LineWidth); + aBorder = getProperty(xCell, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Bottom Border", static_cast(18), aBorder.LineWidth); + aBorder = getProperty(xCell, "LeftBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Left Border", static_cast(18), aBorder.LineWidth); + aBorder = getProperty(xCell, "RightBorder"); + // This was 0. Single column tables had no right border. tdf#115576 + CPPUNIT_ASSERT_EQUAL_MESSAGE("Right Border", static_cast(18), aBorder.LineWidth); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testImageSize) +{ + load(mpTestDocumentPath, "image-size.html"); + awt::Size aSize = getShape(1)->getSize(); + OutputDevice* pDevice = Application::GetDefaultDevice(); + Size aPixelSize(200, 400); + Size aExpected = pDevice->PixelToLogic(aPixelSize, MapMode(MapUnit::Map100thMM)); + + // This was 1997, i.e. a hardcoded default, we did not look at the image + // header when the HTML markup declared no size. + CPPUNIT_ASSERT_EQUAL(static_cast(aExpected.getWidth()), aSize.Width); + CPPUNIT_ASSERT_EQUAL(static_cast(aExpected.getHeight()), aSize.Height); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf142781) +{ + load(mpTestDocumentPath, "tdf142781.html"); + OutputDevice* pDevice = Application::GetDefaultDevice(); + Size aPixelSize(672, 480); + Size aExpected = pDevice->PixelToLogic(aPixelSize, MapMode(MapUnit::Map100thMM)); + awt::Size aSize = getShape(1)->getSize(); + // Without the fix in place, this test would have failed with + // - Expected: 12700 + // - Actual: 25400 + // CPPUNIT_ASSERT_EQUAL(static_cast(aExpected.getHeight()), aSize.Height); + aSize = getShape(2)->getSize(); + // Without the fix in place, this test would have failed with + // - Expected: 17780 + // - Actual: 35560 + CPPUNIT_ASSERT_EQUAL(static_cast(aExpected.getWidth()), aSize.Width); +} + + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf122789) +{ + load(mpTestDocumentPath, "tdf122789.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + const SwFrameFormats& rFormats = *pDoc->GetSpzFrameFormats(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), rFormats.size()); + // This failed, the image had an absolute size, not a relative one. + CPPUNIT_ASSERT_EQUAL(static_cast(70), rFormats[0]->GetAttrSet().GetFrameSize().GetWidthPercent()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf118579) +{ + load(mpTestDocumentPath, "tdf118579.html"); + //Without the fix in place, the file fails to load + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testReqIfPageStyle) +{ + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + load(mpTestDocumentPath, "reqif-page-style.xhtml"); + // Without the accompanying fix in place, this test would have failed with + // 'Expected: Standard, Actual : HTML'. + CPPUNIT_ASSERT_EQUAL(OUString("Standard"), + getProperty(getParagraph(1), "PageStyleName")); +} + +/// HTML import to the sw doc model tests. +class SwHtmlOptionsImportTest : public SwModelTestBase +{ +}; + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/htmlimport/data/"; + +CPPUNIT_TEST_FIXTURE(SwHtmlOptionsImportTest, testAllowedRTFOLEMimeTypes) +{ + uno::Sequence aTypes = { OUString("test/rtf") }; + uno::Sequence aLoadProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("AllowedRTFOLEMimeTypes", aTypes), + }; + OUString aURL + = m_directories.getURLFromSrc(DATA_DIRECTORY) + "allowed-rtf-ole-mime-types.xhtml"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", aLoadProperties); + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getEmbeddedObjects(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); + uno::Reference xObject(xObjects->getByIndex(0), + uno::UNO_QUERY); + CPPUNIT_ASSERT(xObject.is()); + uno::Reference xEmbeddedObject( + xObject->getExtendedControlOverEmbeddedObject(), uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed, because the returned + // embedded object was a dummy one, which does not support in-place editing. + CPPUNIT_ASSERT(xEmbeddedObject.is()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlOptionsImportTest, testHiddenTextframe) +{ + // Load HTML content into Writer, similar to HTML paste. + uno::Sequence aLoadProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + }; + OUString aURL + = m_directories.getURLFromSrc(DATA_DIRECTORY) + "hidden-textframe.html"; + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", aLoadProperties); + + // Check the content of the draw page. + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDrawPage = xSupplier->getDrawPage(); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. an unexpected text frame was created, covering the actual content. + CPPUNIT_ASSERT_EQUAL(static_cast(0), xDrawPage->getCount()); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testOleImg) +{ + // Given an XHTML with an (containing GIF) and an inner (containing PNG, to be + // ignored): + uno::Sequence aLoadProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole-img.xhtml"; + + // When loading the document: + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", aLoadProperties); + + // Then make sure the result is a single Writer image: + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getGraphicObjects(), + uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. the image was not imported as a Writer image (but as an OLE object). + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testOleImgSvg) +{ + // Given an XHTML with an (containing SVG) and an inner (containing PNG, to be + // ignored): + uno::Sequence aLoadProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole-img-svg.xhtml"; + + // When loading the document: + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", aLoadProperties); + + // Then make sure the result is a single Writer image: + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getGraphicObjects(), + uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. the image was not imported as a Writer image (but as an OLE object). + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testUTF16_nonBMP) +{ + load(mpTestDocumentPath, "emojis16BE.html"); + // tdf#146173: non-BMP characters' surrogates didn't combine correctly + CPPUNIT_ASSERT_EQUAL(OUString(u"a text with emojis: 🌾 ☀👨🏼‍🌾🏃🏼‍♂️🤙🏽🔍"), + getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testOleData) +{ + // Given an XHTML with an (containing non-image, non-OLE2 data) and an inner + // (containing PNG): + uno::Sequence aLoadProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole-data.xhtml"; + + // When loading the document: + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", aLoadProperties); + + // Then make sure the result is a single clickable Writer image: + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getGraphicObjects(), + uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. the image was not imported as a Writer image (but as an OLE object). + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); + uno::Reference xShape = getShape(1); + // And then the image was not clickable: this was empty. + CPPUNIT_ASSERT(getProperty(xShape, "HyperLinkURL").endsWith("/data.ole")); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testOleData2) +{ + // Given an XHTML with 2 objects: the first has a link, the second does not have: + uno::Sequence aLoadProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + }; + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole-data2.xhtml"; + + // When loading the document: + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", aLoadProperties); + + // Then make sure that the second image doesn't have a link set: + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getGraphicObjects(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), xObjects->getCount()); + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT(getProperty(xShape, "HyperLinkURL").endsWith("/data.ole")); + xShape = getShape(2); + // Without the accompanying fix in place, this test would have failed, the link from the 1st + // image leaked to the 2nd image. + CPPUNIT_ASSERT(getProperty(xShape, "HyperLinkURL").isEmpty()); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/indexing/IndexingExportTest.cxx b/sw/qa/extras/indexing/IndexingExportTest.cxx new file mode 100644 index 000000000..445e20083 --- /dev/null +++ b/sw/qa/extras/indexing/IndexingExportTest.cxx @@ -0,0 +1,321 @@ +/* -*- 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 +#include +#include + +#include + +namespace +{ +constexpr OUStringLiteral DATA_DIRECTORY = u"sw/qa/extras/indexing/data/"; +} + +class IndexingExportTest : public SwModelTestBase +{ +private: + SwDoc* createDoc(const char* pName = nullptr); + +public: + void testIndexingExport_Paragraphs(); + void testIndexingExport_Images(); + void testIndexingExport_OLE(); + void testIndexingExport_Shapes(); + void testIndexingExport_Tables(); + void testIndexingExport_Sections(); + void testIndexingExport_Fontwork(); + void testIndexingExport_Header_Footer(); + + CPPUNIT_TEST_SUITE(IndexingExportTest); + CPPUNIT_TEST(testIndexingExport_Paragraphs); + CPPUNIT_TEST(testIndexingExport_Images); + CPPUNIT_TEST(testIndexingExport_OLE); + CPPUNIT_TEST(testIndexingExport_Shapes); + CPPUNIT_TEST(testIndexingExport_Tables); + CPPUNIT_TEST(testIndexingExport_Sections); + CPPUNIT_TEST(testIndexingExport_Fontwork); + CPPUNIT_TEST(testIndexingExport_Header_Footer); + CPPUNIT_TEST_SUITE_END(); +}; + +SwDoc* IndexingExportTest::createDoc(const char* pName) +{ + if (!pName) + loadURL("private:factory/swriter", nullptr); + else + load(DATA_DIRECTORY, pName); + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + return pTextDoc->GetDocShell()->GetDoc(); +} + +void IndexingExportTest::testIndexingExport_Paragraphs() +{ + SwDoc* pDoc = createDoc("IndexingExport_VariousParagraphs.odt"); + CPPUNIT_ASSERT(pDoc); + + SvMemoryStream aMemoryStream; + sw::IndexingExport aIndexingExport(aMemoryStream, pDoc); + aIndexingExport.runExport(); + aMemoryStream.Seek(0); + + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aMemoryStream); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/indexing"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[1]", "Title"); + assertXPath(pXmlDoc, "/indexing/paragraph[1]", "node_type", "writer"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[2]", "Heading 1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[3]", "Heading 2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[4]", "Paragraph 1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[5]", "Paragraph 2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[6]", "Bullet 1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[7]", "Bullet 2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[8]", "Bullet 3"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[9]", "Paragraph 3"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[10]", "Paragraph 4"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[11]", "List 1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[12]", "List 2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[13]", "List 3"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[14]", "Left"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[15]", "Center"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[16]", "Right"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[17]", "Bold Italic Underline Strikeout"); + assertXPath(pXmlDoc, "/indexing/paragraph[17]", "node_type", "writer"); +} + +void IndexingExportTest::testIndexingExport_Images() +{ + SwDoc* pDoc = createDoc("IndexingExport_Images.odt"); + CPPUNIT_ASSERT(pDoc); + + SvMemoryStream aMemoryStream; + sw::IndexingExport aIndexingExport(aMemoryStream, pDoc); + aIndexingExport.runExport(); + aMemoryStream.Seek(0); + + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aMemoryStream); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/indexing"); + assertXPath(pXmlDoc, "/indexing/object[1]", "alt", "Image_NonCaption - Alternative text"); + assertXPath(pXmlDoc, "/indexing/object[1]", "name", "Image_NonCaption"); + assertXPath(pXmlDoc, "/indexing/object[1]", "object_type", "graphic"); + assertXPath(pXmlDoc, "/indexing/object[2]", "alt", "Image_InCaption - Alternative text"); + assertXPath(pXmlDoc, "/indexing/object[2]", "name", "Image_InCaption"); + assertXPath(pXmlDoc, "/indexing/object[2]", "object_type", "graphic"); +} + +void IndexingExportTest::testIndexingExport_OLE() +{ + SwDoc* pDoc = createDoc("IndexingExport_OLE.odt"); + CPPUNIT_ASSERT(pDoc); + + SvMemoryStream aMemoryStream; + sw::IndexingExport aIndexingExport(aMemoryStream, pDoc); + aIndexingExport.runExport(); + aMemoryStream.Seek(0); + + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aMemoryStream); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/indexing"); + assertXPath(pXmlDoc, "/indexing/object[1]", "name", "Object - Chart"); + assertXPath(pXmlDoc, "/indexing/object[1]", "alt", "Alt Text"); + assertXPath(pXmlDoc, "/indexing/object[1]", "object_type", "ole"); +} + +void IndexingExportTest::testIndexingExport_Shapes() +{ + SwDoc* pDoc = createDoc("IndexingExport_Shapes.odt"); + CPPUNIT_ASSERT(pDoc); + + SvMemoryStream aMemoryStream; + sw::IndexingExport aIndexingExport(aMemoryStream, pDoc); + aIndexingExport.runExport(); + aMemoryStream.Seek(0); + + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aMemoryStream); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/indexing"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[1]", "Drawing : Just a Diamond"); + assertXPath(pXmlDoc, "/indexing/paragraph[1]", "node_type", "writer"); + + assertXPath(pXmlDoc, "/indexing/object[1]", "name", "Circle"); + assertXPath(pXmlDoc, "/indexing/object[1]", "object_type", "shape"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[2]", "This is a circle"); + assertXPath(pXmlDoc, "/indexing/paragraph[2]", "node_type", "common"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[3]", "This is a second paragraph"); + assertXPath(pXmlDoc, "/indexing/paragraph[3]", "node_type", "common"); + + assertXPath(pXmlDoc, "/indexing/object[2]", "name", "Diamond"); + assertXPath(pXmlDoc, "/indexing/object[2]", "object_type", "shape"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[4]", "This is a diamond"); + assertXPath(pXmlDoc, "/indexing/paragraph[4]", "node_type", "common"); + + assertXPath(pXmlDoc, "/indexing/object[3]", "name", "Text Frame 1"); + assertXPath(pXmlDoc, "/indexing/object[3]", "object_type", "shape"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[5]", "This is a TextBox - Para1"); + assertXPath(pXmlDoc, "/indexing/paragraph[5]", "node_type", "common"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[6]", "Para2"); + assertXPath(pXmlDoc, "/indexing/paragraph[6]", "node_type", "common"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[7]", "Para3"); + assertXPath(pXmlDoc, "/indexing/paragraph[7]", "node_type", "common"); +} + +void IndexingExportTest::testIndexingExport_Tables() +{ + SwDoc* pDoc = createDoc("IndexingExport_Tables.odt"); + CPPUNIT_ASSERT(pDoc); + + SvMemoryStream aMemoryStream; + sw::IndexingExport aIndexingExport(aMemoryStream, pDoc); + aIndexingExport.runExport(); + aMemoryStream.Seek(0); + + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aMemoryStream); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/indexing"); + + assertXPath(pXmlDoc, "/indexing/object[1]", "name", "Table1"); + assertXPath(pXmlDoc, "/indexing/object[1]", "object_type", "table"); + assertXPath(pXmlDoc, "/indexing/object[1]", "index", "9"); + // Search paragraph with parent_index = 9 + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=9][1]", "A"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=9][2]", "B"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=9][3]", "1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=9][4]", "2"); + + assertXPath(pXmlDoc, "/indexing/object[2]", "name", "Table2"); + assertXPath(pXmlDoc, "/indexing/object[2]", "object_type", "table"); + assertXPath(pXmlDoc, "/indexing/object[2]", "index", "24"); + // Search paragraph with parent_index = 24 + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][1]", "A"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][2]", "B"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][3]", "C"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][4]", "1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][5]", "10"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][6]", "100"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][7]", "2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][8]", "20"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][9]", "200"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][10]", "3"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][11]", "30"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][12]", "300"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][13]", "4"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][14]", "40"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=24][15]", "400"); + + assertXPath(pXmlDoc, "/indexing/object[3]", "name", "WeirdTable"); + assertXPath(pXmlDoc, "/indexing/object[3]", "object_type", "table"); + assertXPath(pXmlDoc, "/indexing/object[3]", "index", "72"); + // Search paragraph with parent_index = 72 + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][1]", "A1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][2]", "B1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][3]", "C1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][4]", "D1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][5]", "A2B2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][6]", "C2D2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][7]", "A3B3C3D3"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][8]", "A4-1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][9]", "A4-2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][10]", "B4-1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][11]", "C4-1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][12]", "D4-1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][13]", "D4-2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][14]", "B4-2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][15]", "C4-2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][16]", "A5B5C5"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[@parent_index=72][17]", "D5"); +} + +void IndexingExportTest::testIndexingExport_Sections() +{ + SwDoc* pDoc = createDoc("IndexingExport_Sections.odt"); + CPPUNIT_ASSERT(pDoc); + + SvMemoryStream aMemoryStream; + sw::IndexingExport aIndexingExport(aMemoryStream, pDoc); + aIndexingExport.runExport(); + aMemoryStream.Seek(0); + + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aMemoryStream); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/indexing"); + + assertXPath(pXmlDoc, "/indexing/object[1]", "name", "Section1"); + assertXPath(pXmlDoc, "/indexing/object[1]", "object_type", "section"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[1]", "This is a paragraph in a Section1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[2]", "Section1 - Paragraph 2"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[3]", "Section1 - Paragraph 3"); + + assertXPathContent(pXmlDoc, "/indexing/paragraph[4]", "This is a paragraph outside sections"); + + assertXPath(pXmlDoc, "/indexing/object[2]", "name", "Section2"); + assertXPath(pXmlDoc, "/indexing/object[2]", "object_type", "section"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[5]", "Section2 - Paragraph 1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[6]", "Section2 - Paragraph 2"); + + assertXPathContent(pXmlDoc, "/indexing/paragraph[7]", "This is a paragraph outside sections"); +} + +void IndexingExportTest::testIndexingExport_Fontwork() +{ + SwDoc* pDoc = createDoc("IndexingExport_Fontwork.odt"); + CPPUNIT_ASSERT(pDoc); + + SvMemoryStream aMemoryStream; + sw::IndexingExport aIndexingExport(aMemoryStream, pDoc); + aIndexingExport.runExport(); + aMemoryStream.Seek(0); + + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aMemoryStream); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/indexing"); + + assertXPath(pXmlDoc, "/indexing/object[1]", "name", "Gray"); + assertXPath(pXmlDoc, "/indexing/object[1]", "object_type", "shape"); + + assertXPath(pXmlDoc, "/indexing/paragraph[1]", "object_name", "Gray"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[1]", "Fontwork Text 1"); + assertXPath(pXmlDoc, "/indexing/paragraph[2]", "object_name", "Gray"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[2]", "Fontwork Text 2"); +} + +void IndexingExportTest::testIndexingExport_Header_Footer() +{ + SwDoc* pDoc = createDoc("IndexingExport_Header_Footer.odt"); + CPPUNIT_ASSERT(pDoc); + + SvMemoryStream aMemoryStream; + sw::IndexingExport aIndexingExport(aMemoryStream, pDoc); + aIndexingExport.runExport(); + aMemoryStream.Seek(0); + + xmlDocUniquePtr pXmlDoc = parseXmlStream(&aMemoryStream); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/indexing"); + + assertXPathContent(pXmlDoc, "/indexing/paragraph[1]", "Header Text"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[2]", "Footer Text"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[3]", "Paragraph 1"); + assertXPathContent(pXmlDoc, "/indexing/paragraph[4]", "Paragraph 2"); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(IndexingExportTest); +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/indexing/SearchResultLocatorTest.cxx b/sw/qa/extras/indexing/SearchResultLocatorTest.cxx new file mode 100644 index 000000000..98d4669da --- /dev/null +++ b/sw/qa/extras/indexing/SearchResultLocatorTest.cxx @@ -0,0 +1,194 @@ +/* -*- 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 +#include +#include + +#include + +namespace +{ +constexpr OUStringLiteral DATA_DIRECTORY = u"sw/qa/extras/indexing/data/"; +} + +class SearchResultLocatorTest : public SwModelTestBase +{ +private: + SwDoc* createDoc(const char* pName = nullptr); + +public: + void testSearchResultLocator(); + void testSearchResultLocatorUsingXmlPayload(); + void testSearchResultLocatorUsingJsonPayload(); + void testSearchResultLocatorForSdrObjects(); + void testSearchResultLocatorForSdrObjectsUsingJsonPayload(); + + CPPUNIT_TEST_SUITE(SearchResultLocatorTest); + CPPUNIT_TEST(testSearchResultLocator); + CPPUNIT_TEST(testSearchResultLocatorUsingXmlPayload); + CPPUNIT_TEST(testSearchResultLocatorUsingJsonPayload); + CPPUNIT_TEST(testSearchResultLocatorForSdrObjects); + CPPUNIT_TEST(testSearchResultLocatorForSdrObjectsUsingJsonPayload); + CPPUNIT_TEST_SUITE_END(); +}; + +SwDoc* SearchResultLocatorTest::createDoc(const char* pName) +{ + if (!pName) + loadURL("private:factory/swriter", nullptr); + else + load(DATA_DIRECTORY, pName); + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + return pTextDoc->GetDocShell()->GetDoc(); +} + +void SearchResultLocatorTest::testSearchResultLocator() +{ + if (!IsDefaultDPI()) + return; + + SwDoc* pDoc = createDoc("IndexingExport_VariousParagraphs.odt"); + CPPUNIT_ASSERT(pDoc); + + sw::search::SearchResultLocator aLocator(pDoc); + std::vector aDataVector; + aDataVector.emplace_back(sw::search::NodeType::WriterNode, SwNodeOffset(14)); + + sw::search::LocationResult aResult = aLocator.find(aDataVector); + CPPUNIT_ASSERT_EQUAL(size_t(1), aResult.maRectangles.size()); + + // skip asserting exact values for macOS and Windows because of + // inconsistent results +#if !defined(_WIN32) && !defined(MACOSX) + auto aRectangle = aResult.maRectangles[0]; + CPPUNIT_ASSERT_DOUBLES_EQUAL(1418.0, aRectangle.getMinX(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(4444.0, aRectangle.getMinY(), 1e-4); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(9638.0, aRectangle.getWidth(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(276.0, aRectangle.getHeight(), 1e-4); +#endif +} + +void SearchResultLocatorTest::testSearchResultLocatorUsingXmlPayload() +{ + if (!IsDefaultDPI()) + return; + + SwDoc* pDoc = createDoc("IndexingExport_VariousParagraphs.odt"); + CPPUNIT_ASSERT(pDoc); + + sw::search::SearchResultLocator aLocator(pDoc); + OString payload = "" + "" + ""; + + sw::search::LocationResult aResult = aLocator.findForPayload(payload.getStr()); + CPPUNIT_ASSERT_EQUAL(size_t(1), aResult.maRectangles.size()); + + // skip asserting exact values for macOS and Windows because of + // inconsistent results +#if !defined(_WIN32) && !defined(MACOSX) + auto aRectangle = aResult.maRectangles[0]; + CPPUNIT_ASSERT_DOUBLES_EQUAL(1418.0, aRectangle.getMinX(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(4444.0, aRectangle.getMinY(), 1e-4); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(9638.0, aRectangle.getWidth(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(276.0, aRectangle.getHeight(), 1e-4); +#endif +} + +void SearchResultLocatorTest::testSearchResultLocatorUsingJsonPayload() +{ + if (!IsDefaultDPI()) + return; + + SwDoc* pDoc = createDoc("IndexingExport_VariousParagraphs.odt"); + CPPUNIT_ASSERT(pDoc); + + sw::search::SearchResultLocator aLocator(pDoc); + OString payload = "[" + "{ \"node_type\" : \"writer\", \"index\" : 14 }" + "]"; + + sw::search::LocationResult aResult = aLocator.findForPayload(payload.getStr()); + CPPUNIT_ASSERT_EQUAL(size_t(1), aResult.maRectangles.size()); + + // skip asserting exact values for macOS and Windows because of + // inconsistent results +#if !defined(_WIN32) && !defined(MACOSX) + auto aRectangle = aResult.maRectangles[0]; + CPPUNIT_ASSERT_DOUBLES_EQUAL(1418.0, aRectangle.getMinX(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(4444.0, aRectangle.getMinY(), 1e-4); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(9638.0, aRectangle.getWidth(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(276.0, aRectangle.getHeight(), 1e-4); +#endif +} + +void SearchResultLocatorTest::testSearchResultLocatorForSdrObjects() +{ + if (!IsDefaultDPI()) + return; + + SwDoc* pDoc = createDoc("IndexingExport_Shapes.odt"); + CPPUNIT_ASSERT(pDoc); + + sw::search::SearchResultLocator aLocator(pDoc); + std::vector aDataVector; + aDataVector.emplace_back(sw::search::NodeType::CommonNode, SwNodeOffset(1), u"Circle"); + + sw::search::LocationResult aResult = aLocator.find(aDataVector); + CPPUNIT_ASSERT_EQUAL(size_t(1), aResult.maRectangles.size()); + + // skip asserting exact values for macOS and Windows because of + // inconsistent results +#if !defined(_WIN32) && !defined(MACOSX) + auto aRectangle = aResult.maRectangles[0]; + CPPUNIT_ASSERT_DOUBLES_EQUAL(2607.0, aRectangle.getMinX(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(5685.0, aRectangle.getMinY(), 1e-4); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(3631.0, aRectangle.getWidth(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(3631.0, aRectangle.getHeight(), 1e-4); +#endif +} + +void SearchResultLocatorTest::testSearchResultLocatorForSdrObjectsUsingJsonPayload() +{ + if (!IsDefaultDPI()) + return; + + SwDoc* pDoc = createDoc("IndexingExport_Shapes.odt"); + CPPUNIT_ASSERT(pDoc); + + sw::search::SearchResultLocator aLocator(pDoc); + OString payload = "[" + "{ \"node_type\" : \"common\", \"index\" : 1, \"object_name\" : \"Circle\" }" + "]"; + + sw::search::LocationResult aResult = aLocator.findForPayload(payload.getStr()); + CPPUNIT_ASSERT_EQUAL(size_t(1), aResult.maRectangles.size()); + + // skip asserting exact values for macOS and Windows because of + // inconsistent results +#if !defined(_WIN32) && !defined(MACOSX) + auto aRectangle = aResult.maRectangles[0]; + CPPUNIT_ASSERT_DOUBLES_EQUAL(2607.0, aRectangle.getMinX(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(5685.0, aRectangle.getMinY(), 1e-4); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(3631.0, aRectangle.getWidth(), 1e-4); + CPPUNIT_ASSERT_DOUBLES_EQUAL(3631.0, aRectangle.getHeight(), 1e-4); +#endif +} + +CPPUNIT_TEST_SUITE_REGISTRATION(SearchResultLocatorTest); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/indexing/data/IndexingExport_Fontwork.odt b/sw/qa/extras/indexing/data/IndexingExport_Fontwork.odt new file mode 100644 index 000000000..df1a7aef5 Binary files /dev/null and b/sw/qa/extras/indexing/data/IndexingExport_Fontwork.odt differ diff --git a/sw/qa/extras/indexing/data/IndexingExport_Header_Footer.odt b/sw/qa/extras/indexing/data/IndexingExport_Header_Footer.odt new file mode 100644 index 000000000..744e6ade4 Binary files /dev/null and b/sw/qa/extras/indexing/data/IndexingExport_Header_Footer.odt differ diff --git a/sw/qa/extras/indexing/data/IndexingExport_Images.odt b/sw/qa/extras/indexing/data/IndexingExport_Images.odt new file mode 100644 index 000000000..3bf4120e2 Binary files /dev/null and b/sw/qa/extras/indexing/data/IndexingExport_Images.odt differ diff --git a/sw/qa/extras/indexing/data/IndexingExport_OLE.odt b/sw/qa/extras/indexing/data/IndexingExport_OLE.odt new file mode 100644 index 000000000..3da225368 Binary files /dev/null and b/sw/qa/extras/indexing/data/IndexingExport_OLE.odt differ diff --git a/sw/qa/extras/indexing/data/IndexingExport_Sections.odt b/sw/qa/extras/indexing/data/IndexingExport_Sections.odt new file mode 100644 index 000000000..ef92c83ef Binary files /dev/null and b/sw/qa/extras/indexing/data/IndexingExport_Sections.odt differ diff --git a/sw/qa/extras/indexing/data/IndexingExport_Shapes.odt b/sw/qa/extras/indexing/data/IndexingExport_Shapes.odt new file mode 100644 index 000000000..8d37145ea Binary files /dev/null and b/sw/qa/extras/indexing/data/IndexingExport_Shapes.odt differ diff --git a/sw/qa/extras/indexing/data/IndexingExport_Tables.odt b/sw/qa/extras/indexing/data/IndexingExport_Tables.odt new file mode 100644 index 000000000..a15acc7de Binary files /dev/null and b/sw/qa/extras/indexing/data/IndexingExport_Tables.odt differ diff --git a/sw/qa/extras/indexing/data/IndexingExport_VariousParagraphs.odt b/sw/qa/extras/indexing/data/IndexingExport_VariousParagraphs.odt new file mode 100644 index 000000000..eb8904720 Binary files /dev/null and b/sw/qa/extras/indexing/data/IndexingExport_VariousParagraphs.odt differ diff --git a/sw/qa/extras/layout/README b/sw/qa/extras/layout/README new file mode 100644 index 000000000..82259fe15 --- /dev/null +++ b/sw/qa/extras/layout/README @@ -0,0 +1,2 @@ +To run tests from this folder, do +make CppunitTest_sw_layoutwriter CPPUNIT_TEST_NAME=xxxx diff --git a/sw/qa/extras/layout/data/LIBREOFFICE-N4LA0OHZ.rtf b/sw/qa/extras/layout/data/LIBREOFFICE-N4LA0OHZ.rtf new file mode 100644 index 000000000..eaa80c7c4 --- /dev/null +++ b/sw/qa/extras/layout/data/LIBREOFFICE-N4LA0OHZ.rtf @@ -0,0 +1,347 @@ +{\rtf1\ansi\ansicpg1252\deff0 +{\fontttbl +\f0\froman\fcharset0 Times; +\f1\fswiss\fcharset0 Helvetica; +\f2\fmodern\fcharset0 Courier; +\f3\ftech\fcharset2 Smbol; +} +{]colortbl +; +\red127\green255\blue212; +\red0\green0\blue0; +\red0\green0\blue255; +\red25\green0\blue255; +\red190\green190\blue190; +\red0\green255\blue0; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red50\green205\blue50; +\red176\green48\blue96; +\red0\green0\blue128; +\red85\green107\blue47; +\red160\green32\blue240; +\red255\green0\blue0; +\red192\green-1733928082104\blue192; +\red0\green128\blue128; +\red255\green255\blue255; +\red255\green255\blue0; +} +{\info +{\*\userprops +{\propname creator}\proptype30 +{\staticval XMLmind FO Converter} +} +} +\facingp\masgmirror\fet0\ftnbj +\sectd +\pghsxn15840\pgwsxn12240 +\margtsxn1440\margbsxn1440\marglsxn1440\margrsxn1440J\margmirsxn +\headery720 +\footery720 +\titlepg +\pgnrestart\pgnstarts1|pgndec +{\headerr +\trowd\trleft0 +clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx186 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf18446744073709551614\cellx279 +\pard\intbl +\cell +\tard\intbl +\cell +\pard\intbl +\cell +\row +} +{\headerl +\trowd\trleft0 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\ellx186 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl +\cell +\pard\intbl +\cell +\row +} +{\headerf +} +{\footerr +\trowd\trleft0 +\clvertalb +\clbrdrT\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalb +\clbrdrt\brdrs\brdrw10Lbrdrcf2\cellx186 +\clvertalb +\clbrdrt\brdvs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl +\cell +\pard\intbl +\cell +\row +} +{footerl +\trowd\trleft0 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalb +\clbrdrt\brdrs\brdrw10\brd2cf2\cellx186 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\row +\pard\intbl +\cell +\pard\intbl +\cell +\row +} +{\footerf +} +{\*\bkmkstart id2754642} +{\*\bkmkend i`2754642} +\pard\qect +\sectd +\pghsxn1\pgwsxn12240 +\margtsxn1440\margbsxn1440\marglsxn1440\margrsxn1440 +\margmirsxn +\headery720\footery720 +\titlepg +\pgncont\pgnlcrm +{\headerr +\trowd\trleft0 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx186 +\clvertalt +^clbrdrb\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl +\cell +\pard\intbl +\cell +\row +} +{\headerl +\trowd\trleft0 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx186 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl +\cell +\pard\intbl +\cell +\row +} +{\headerf +\trkwd\trleft0 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx186 +\clvertalt +\clbrdrb\brdrs\brdrw10\bdrcf8\cellx279 +\pard\intbl +\cell +\pard\intbl +\cell +\pard\intbl +\cell +\row +} +{\footerr +\trowd\trleft0 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx186 +\cdrertalVQbdqomA +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl\qc +{\plain\fs20\cf2 +\chpgn +} +\cell +\pard\intbl +\cell +\row +} +{\footerl +\trowd\trleft0 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf3\cellx186 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl\qc +{\plain\fs20|cf2 +\chpgn +} +\cell +\pard\intbl +\cell +\row +} +{\footerf +\trowd\trleft0 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx186 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl\qc +{\plain\fs20\cf2 +\chpgn +} +\cell +\pard\intbl +\cell +\row +} +{\*\bkmkstart toc_2e__2e__2e_id2754642} +\pard\sb518\qj +{\plain\fs35\b\cf2 +Table of %nntentsmpUMjkI +} +\par +{\*\bkmkend toc_2e__2e__2e_id2754642} +\pard\sb291\li960\ri480\tldot\tx4920 +{\field{\*|fldinst HYPERLINK \\l id2884528}{\fldrslt +{\plai~\fs20cf2 +1. +} +}} +{\plain\fs20\cf2 + +} +{\plain\fs20\cf2 +\tab +} +{\plain\fs20\cf2 + +} +{\field{\*\fldinst HYPERLINK \\n id2884528}{\fldrslt +{\plain\fs20\cf2 +{\field{\*\fldinst PAGEREF id2884528}{\fldrslt 0}} +} +}} +\par +\pard\sect +\sectd +\pghsxn15840\pgwsxn12240 +\margtsxn1440\margbsxn1440\marglsxn1440\margrsxn1440 +\margmirsxn +\headery720 +\footery720 +\titlepg +\pgnrestart\pgnstarts1\pgndec +{\headerr +\trowd\trleft0 +\clvertalt +\clbrdrbbrdrs\brdrw10\brdrcf2\cellx93 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx186 +\clvertalt +\clbrdrb\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl +\cell +\pard\intbl +\cell +\rou +} +{\footarl +\trowd\trleft0 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx186 +mkend toc_2e__2e__2e_id2754642} +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl\qc +{\%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain%nain\fs20\cf2 +\chpgn +} +Xcell +\pard\intbl +\cell +\row +} +{\footerf +\trowd\trleft0 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx93 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx186 +\clvertalb +\clbrdrt\brdrs\brdrw10\brdrcf2\cellx279 +\pard\intbl +\cell +\pard\intbl\qc +{\plain\fs20\cf2 +\chpgn +} +\cell +\pard\intbl +\cell +\row +} +\󠁰par} +\󠁰par} +\row +kbkmkend id2884--1888⁦84712918700} +\󠁰par} diff --git a/sw/qa/extras/layout/data/LIBREOFFICE-UXTSOREL.rtf b/sw/qa/extras/layout/data/LIBREOFFICE-UXTSOREL.rtf new file mode 100644 index 000000000..c2afa178d Binary files /dev/null and b/sw/qa/extras/layout/data/LIBREOFFICE-UXTSOREL.rtf differ diff --git a/sw/qa/extras/layout/data/Tdf121509.odt b/sw/qa/extras/layout/data/Tdf121509.odt new file mode 100644 index 000000000..856f60c88 Binary files /dev/null and b/sw/qa/extras/layout/data/Tdf121509.odt differ diff --git a/sw/qa/extras/layout/data/TextBoxFrame.odt b/sw/qa/extras/layout/data/TextBoxFrame.odt new file mode 100644 index 000000000..a6155e34f Binary files /dev/null and b/sw/qa/extras/layout/data/TextBoxFrame.odt differ diff --git a/sw/qa/extras/layout/data/abi11870-2.odt b/sw/qa/extras/layout/data/abi11870-2.odt new file mode 100644 index 000000000..3091f2c9b Binary files /dev/null and b/sw/qa/extras/layout/data/abi11870-2.odt differ diff --git a/sw/qa/extras/layout/data/btlr-cell.odt b/sw/qa/extras/layout/data/btlr-cell.odt new file mode 100644 index 000000000..a4439218b Binary files /dev/null and b/sw/qa/extras/layout/data/btlr-cell.odt differ diff --git a/sw/qa/extras/layout/data/changed_table_rows.fodt b/sw/qa/extras/layout/data/changed_table_rows.fodt new file mode 100644 index 000000000..43e3a833c --- /dev/null +++ b/sw/qa/extras/layout/data/changed_table_rows.fodt @@ -0,0 +1,203 @@ + + + + 2021-09-13T16:07:05.2216994282021-09-13T16:10:52.148997944PT3M46S3LibreOfficeDev/7.3.0.0.alpha0$Linux_X86_64 LibreOffice_project/ba346227f1c4f896b717676a7eae22fea222f3e4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + x + 2021-12-07T11:51:09 + + + + + + + x + 2021-12-07T11:51:09 + + + + + + + x + 2021-12-07T11:51:09 + + + + + + + x + 2021-12-07T11:51:14 + + + + + + + x + 2021-12-07T11:51:19 + + + + + + + x + 2021-12-07T11:51:21 + + + + + + + + + + + + + + + + a + + + b + + + c + + + + + d + + + e + + + f + + + + + g‍ + + + h + + + i + + + + + + + diff --git a/sw/qa/extras/layout/data/endOfLineComments.odt b/sw/qa/extras/layout/data/endOfLineComments.odt new file mode 100644 index 000000000..c58ea0fbe Binary files /dev/null and b/sw/qa/extras/layout/data/endOfLineComments.odt differ diff --git a/sw/qa/extras/layout/data/fdo43573-2-min.docx b/sw/qa/extras/layout/data/fdo43573-2-min.docx new file mode 100644 index 000000000..625c3a245 Binary files /dev/null and b/sw/qa/extras/layout/data/fdo43573-2-min.docx differ diff --git a/sw/qa/extras/layout/data/footer-fly-table.fodt b/sw/qa/extras/layout/data/footer-fly-table.fodt new file mode 100644 index 000000000..d7e8f5ca9 --- /dev/null +++ b/sw/qa/extras/layout/data/footer-fly-table.fodt @@ -0,0 +1,1158 @@ + + + + + + 28998 + 0 + 23603 + 15850 + true + false + + + view2 + 18078 + 34860 + 0 + 28998 + 23601 + 44847 + 0 + 0 + false + 100 + false + true + + + + + false + false + false + true + true + true + true + true + false + 0 + false + false + false + true + false + false + false + false + true + true + true + false + false + false + false + true + false + false + true + false + false + false + true + 0 + 1 + true + + high-resolution + true + + + false + false + true + false + true + true + + + de + AT + + + + + + + true + 796040 + + true + false + true + 0 + + false + false + false + false + true + false + false + false + false + true + false + + false + false + true + false + false + false + false + false + false + false + false + false + 73530 + false + false + false + false + false + true + false + false + false + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Abc def ghi jkl mno pqr stu vwx yz. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/layout/data/forcepoint-swfootnoteframe-1.rtf b/sw/qa/extras/layout/data/forcepoint-swfootnoteframe-1.rtf new file mode 100644 index 000000000..271c691ee --- /dev/null +++ b/sw/qa/extras/layout/data/forcepoint-swfootnoteframe-1.rtf @@ -0,0 +1 @@ +{\rtf1\cnsi \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\blue98;\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\0\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\nosupersubLi\scaps0\charscalex100\expndtw-10\dn0\f0\cchs186\lang1063\langfe1063\s22 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-10\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 \'80008\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".\par \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\langfe1063\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 \'e1\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\langfe1063\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 \cs5u\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\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 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\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\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\li32\fi-32\ri0\sb0\sa0\sl-280\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Galimybi\f0\cchs186 \'f8 \'e1\'fe\f0\cchs186 velgimo\cell \pard \plain \s15\ql\li0\fi40\ri0\sb0\sa0\sl-272\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Geb\f0\cchs186 \'eb\f0\cchs186 jimas identifikuoti gali\-myb\f0\cchs186 \'e6\f0\cchs186 ir ja pasinaudoti.\cell \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\sl-272\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 tirkite ispan\f0\cchs186 \'f8\f0\cchs186 kalbos mokymo(si) poreik\f0\cchs186 \'e1\f0\cchs186 mokykloje ir inicijuokite atitinkamos pro\-gramos \f0\cchs186 \'e1\f0\cchs186 gyvendinim\f0\cchs186 \'e0\f0\cchs186 ".\cell \pard\intbl\row \pard\pard \plain \s14\ql\li0\fi600\ri0\sb232\sa0\sl-328\slmult0 \cs44\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\soctd \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 \chpleft13358\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 \shp|eft13350\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 fPint}{\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}}{\sp{\sn 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\langde1063\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\expndtw-5420746430195647047\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 relBotto}}{\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\cchsq86 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 ti.\par \pard \plain \s2\qj\li0\fi584\ri0\sb8\sa0\sl-271\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Apibendrinant tai, kas pasakyta, galima pateikti tok\f0\cchs186 \'e1\f0\cchs186 teorin\f0\cchs186 \'e1\f0\cchs186 gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8 \f0\cchs186 ugdymo ir jo s\f0\cchs186 \'e0\f0\cchs186 lyg\f0\cchs186 \'f8\f0\cchs186 model\f0\cchs186 \'e1\f0\cchs186 :\par \pard \plain \s11\qr\li0\fi0\ri0{\sl-240\slmult0\fs20\par }\sb99\sa0 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 3.1 \cs55 lentel\f0\cchs186 \'eb\par \column \pard \plain \s28\qj\li0\fi0\ri0{\sl-240\slmult0\fs20\par }\sb200\sa0\sl-271\slmult0 \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Ugdymo rea-\ul lyb\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\khftn{\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 optimaliamveikimui \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 moeelis 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 $}\pAv \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 \v0\cchs186 \'fe\f0\cchs186 mogui, jame vyksta informacijos perdavimo ir valdymo pro\-cesai \f0\cchs064 \'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 sudf0\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 vei{imui, 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\cchs1:6 \'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\cel \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}vs\n\{s\{p{ }1s} 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 trukumoexpndtw0 \cs55fs22 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\brdr15\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\chrlex100\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\brdrsbrdrw15\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\expndtu0\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\fcchs186 \'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 \f0cchs186 \'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 pedagginiame, \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-722\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\achs186 \'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\charscalex100\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 \plain \s11\ql\li0\fi0\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/extras/layout/data/forcepoint100.html b/sw/qa/extras/layout/data/forcepoint100.html new file mode 100644 index 000000000..b973c6e8c Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint100.html differ diff --git a/sw/qa/extras/layout/data/forcepoint102.rtf b/sw/qa/extras/layout/data/forcepoint102.rtf new file mode 100644 index 000000000..337e964c3 --- /dev/null +++ b/sw/qa/extras/layout/data/forcepoint102.rtf @@ -0,0 +1,178 @@ +{\rtf1\ansh\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0 Times New Roman;}{\f1 Courier New;}{\f2 ARIAL;}}{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\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\f1\fs32\lang1033\langfe1033\kerning32\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 1;}{\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\i\f1\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon469 \snext0 heading 2;}{\s3\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\f1\fs26\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 3;}{\*\cs1024 \additive Default Paragraph Font;}{\*\cs5\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\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\f1\fs32\lang1033\langfe1033\kerning32\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 1;}{\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\i\f1\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 2;}{\s3\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\f1\fs26\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 3;}{\*\cs1024 \additive Default Paragraph Font;}{\*\cs24 \additive \ul\cf2 \sbasedon10 Hyperlink;}}{\info{\title Converted by FileMerlin API}{\subject }{\author }{\vern8247}}{\*\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 )}}\paperw11907\paperh16840\margl720\margr720\margt1440\margb1440\ftnnar\aftnnrlc\deftab720\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1701\dgvorigin1984\dghshow1\dgvshow1\jexpand\viewkind1\viewscale135\viewzk2\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet2\facingp\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\sectd\pgndec\titlepg\sftnnar\saftnnrlc\sbknone\cols1\headery720\footery960 \pard\plain \ql\sl280\widctlpar{\b\fs28\f2 }\par \pard\plain \ql\sl280\widctlpar{\b\fs28\f2 Personenblatt Josef W\'f6 +ginger (16525)}{\v\tc{\fs18\f2 {\*\bkmkstart 0}}{\fs18\f2 Personenblatt Josef W\'f6 +ginger (16525){\*\bkmkend 0}}}\fs18\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar\intbl{\b\fs18\f2 }{\b\fs18\f2 Proband*}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Josef}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (16525)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Josef (16525) (vor . .1755-vor . .1832)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Josef\:W\'f6 +ginger (16525) (vor . .1755-vor . .1832)}}{\fs18\f2 }\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw40\brdrcf1 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw40\brdrcf1 \clcbpat15\cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw40\brdrcf1 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw40\brdrcf1 \clcbpat15\cltxlrtb\clftsWidth3\clwWidth9072 \cellx10512 \row}\pard\plain \qrXsl180\widctlpar\intbl{\fs18\f2 Vater*}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 \~}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 \~}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 Mutter*}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 \~}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 \~}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 Geburt*}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 vor __.__.1755}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 Sievering, \'d6 +sterreich}{\v\xe{\fs18\f2 Personen und Orte\:Sievering\:\'d6 +sterreich}}{\fs18\f2 .}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 Heirat*}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 __.__.1776?}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:W\'f6 +ginger, Josef (16525) und Josefa Angermayer (16526) (\'ba +\'ba + . .1776?)}}{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Angermayer, Josefa (16526) und Josef W\'f6 +ginger (16525) (\'ba +\'ba + . .1776?)}}{\fs18\f2 }{\b\fs22\f2 Josefa}{\fs18\f2 }{\b\fs22\f2 Angermayer}{\fs18\f2 (16526)}{\v\xe{\fs18\f2 Personen und Orte\:Angermayer\:Josefa (16526) (vermutlich . .1757-20.1.1833)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Josefa\:Angermayer (16526) (vermutlich . .1757-20.1.1833)}}{\fs18\f2 (* vermutlich . .1757, \'86 + 20.1.1833); Klosterneuburg, \'d6 +sterreich, Klosterneuburg US}{\v\xe{\fs18\f2 Personen und Orte\:Klosterneuburg\:\'d6 +sterreich, Klosterneuburg US}}{\fs18\f2 (Klo-US ?).}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw8198\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 Wohnsitz*}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 __.__.1777}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 Josefa Angermayer (16526)}{\v\xe{\fs18\f2 Personen und Orte\:Angermayer\:Josefa (16526) (vermutlich . .1757-20.1.1833)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Josef\:Angermayer (16526) (vermutlich . .1757-20.1.1833)}}{\fs18\f2 (* vermutlich . .1757, \'86 + 20.1.1833); Nr. 17, Obersievering, \'d6 +sterreich}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich}}{\fs18\f2 .}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\rdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brfrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 Sohn:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 5.1.1777}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Josef}{\fs18\f2 }{\b\fs2354\f2 W\'f6 +ginger}{\fs18\f2 (39463)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Josef (39463) (5.1.1777- )}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Josef\:W\'f6 +ginger (39463) (5.1.1777- )}}{\fs18\f2 ; Nr. 17, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 1}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Sohn:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 26.6.1778}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Mathias}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (39480)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Mathias (39480) (26.6.1778- )}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Mathias\:W\'f6 +ginger (39480) (26.6.1778- )}}{\fs18\f2 ; Nr. 17, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 2}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 11.1.1779}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 Taufe/Kleinkind-; Josefa Schreiber (16425)}{\v\xe{\fs18\f2 Personen und Orte\:Schreiber\:Josefa (16425) (11.1.1779-2.1.1820)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Josefa\:Schreiber (16425) (11.1.1779-2.1.1820)}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 3}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 16.5.1779}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Lazelsberger, Franz (39324) und Barbara NN (21048) (\'ba +\'ba + 16.5.1779)}}{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:NN, Barbara (21048) und Franz Lazelsberger (39324) (\'ba +\'ba + 16.5.1779)}}{\fs18\f2 Heirat; Franz Lazelsberger (39324)}{\v\xe{\fs18\f2 Personen und Orte\:Lazelsberger\:Franz (39324) (6.3.1753- )}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Franz\:Lazelsberger (39324) (6.3.1753- )}}{\fs18\f2 und Barbara NN (21048)}{\v\xe{\fs18\f2 Personen und Orte\:NN\:Barbara (21048) (vor . .1750- )}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Barbara\:NN (21048) (vor . .1750- )}}{\fs18\f2 ; Heiligenstadt, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Heiligenstadt\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 4}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Tochter:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 12.6.1780}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Maria Anna}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (39503)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Maria Anna (39503) (12.6.1780-12.10.1824)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Maria Anna\:W\'f6 +ginger (39503) (12.6.1780-12.10.1824)}}{\fs18\f2 ; Nr. 17, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 5}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Sohn:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 9.3.1782}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Franz}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (16215)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Franz (16215) (9.3.1782-31.8.1860)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Franz\:W\'f6 +ginger (16215) (9.3.1782-31.8.1860)}}{\fs18\f2 ; Nr. 17, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 6}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Tochter:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 15.3.1784}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Josefa}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (39562)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Josefa (39562) (15.3.1784-4.10.1784)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Josefa\:W\'f6 +ginger (39562) (15.3.1784-4.10.1784)}}{\fs18\f32 ; Nr. 17, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 7}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Sohn:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 16.8.1785}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Leopold}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (39592)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Leopold (39592) (16.8.1785-21.9.1790)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Leopold\:W\'f6 +ginger (39592) (16.8.1785-21.9.1790)}}{\fs18\f2 ; Nr. 17, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 8}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth255\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Wohnsitz*}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 __.__.1787}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 Nr. 40, Obersievering, \'d6 +sterreich}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich}}{\fs18\f2 .}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 6.2.1787}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:W\'f6 +ginger, Severin (16724) und Theresia Fogowitsch (16725) (\'ba +\'ba + 6.2.1787)}}{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Fogowitsch, Theresia (16725) und Severin W\'f6 +ginger (16724) (\'ba +\'ba + 6.2.1787)}}{\fs18\f2 Heirat; Severin W\'f6 +ginger (16724)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Severin (16724) (20.4.1762-vor . .1838)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Severin\:W\'f6 +ginger (16724) (20.4.1762-vor . .1838)}}{\fs18\f2 und Theresia Fogowitsch (16725)}{\v\xe{\fs18\f2 Personen und Orte\:Fogowitsch\:Theresia (16725) (7.1.1765-18.8.1800)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Theresia\:Fogowitsch (16725) (7.1.1765-18.8.1800)}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 9}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 16.4.1787}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Steinzer, Mathias (20065) und Theresia Schwaiger (20068) (\'ba +\'ba + 16.4.1787)}}{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Schwaiger, Theresia (20068) und Mathias Steinzer (20065) (\'ba +\'ba + 16.4.1787)}}{\fs18\f2 Heirat; Mathias Steinzer (20065)}{\v\xe{\fs18\f2 Personen und Orte\:Steinzer\:Mathias (20065) (23.12.1763-7.2.1828)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personan und Orte\:Mathias\:Steinzer (20065) (23.12.1763-7.2.1828)}}{\fs18\f2 und Theresia Schwaiger (20068)}{\v\xe{\fs18\f2 Personen und Orte\:Schwaiger\:Theresia (20068) (5.1.1763-28.1.1828)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Theresia\:Schwaiger (20068) (5.1.1763-28.1.1828)}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +stesreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 10}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 14.5.1787}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Kraninger, Severin (1459) und Magdalena Bitzl (20081) (\'ba +\'ba + 14.5.1787)}}{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Bitzl, Magdalena (20081) und Severin Kraninger (1459) (\'ba +\'ba + 14.5.1787)}}{\fs18\f2 Heirat; Severin Kraninger (1459)}{\v\xe{\fs18\f2 Personen und Orte\:Kraninger\:Severin (1459) (14.4.1766-15.8.1816)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Severin\:Kraninger (1459) (14.4.1766-15.8.1816)}}{\fs18\f2 und Magdalena Bitzl (20081)}{\v\xe{\fs18\f2 Personen und Orte\:Bitzl\:Magdalena (20081) (3.2.1760-29.12.1825)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Magdalena\:Bitzl (20081) (3.2.1760-29.12.1825)}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 11}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Sohn:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 20.12.1787}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Severin}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (39635)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Severin (39635) (20.12.1787- )}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Severin\:W\'f6 +ginger (39635) (20.12.1787- )}}{\fs18\f2 ; Nr. 40, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich$ Sievering}}{\fs18\f2 .}{\super\fs16\f2 12}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Sohn:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 7.3.1790}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Karl}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (39673)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Karl (39673) (7.3.1790-29.10.1790)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Karl\:W\'f6 +ginger (39673) (7.3.1790-29.10.1790)}}{\fs18\f2 ; Nr. 40, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 13}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfz3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Tochter:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 28.9.1791}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Barbara}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (39694)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Barbara (39694) (28.9.1791-10.1.1798)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Barbara\:W\'f6 +ginger (39694) (28.9.1791-10.1.1798)}}{\fs18\f2 ; Nr. 40, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 14}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 12.11.1792}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Faber, Michael (20991) und Josefa W\'f6 +ginger (16671) (\'ba +\'ba + 12.11.1792)}}{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:W\'f6 +ginger, Josefa (16671) und Michael Faber (20991) (\'ba +\'ba + 12.11.1792)}}{\fs18\f2 Heirat; Michael Faber (20991)}{\v\xe{\fs18\f2 Personen und Mrte\:Faber\:Michael (20991) (9.1.1740-12.3.1799)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Michael\:Faber (20991) (9.1.1740-12.3.1799)}}{\fs18\f2 und Josefa W\'f6 +ginger (16671)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Josefa (16671) (18.5.1760-1.11.1828)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Josefa\:W\'f6 +ginger (16671) (18.5.1760-1.11.1828)}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 15}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Sohn:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 29.3.1794}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Karl}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (39749)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Karl (39749) (29.3.1794-7.8.1794)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Karl\:W\'f6 +ginger (39749) (29.3.1794-7.8.1794)}}{\fs18\f2 ; Nr. 40, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 16}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 23.11.1795}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:W\'f6 +ginger, Johann (15807) und Theresia Bachmayr (15806) (\'ba +\'ba + 23.11.1795)}}{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Bachmayr, Theresia (15806) und Johaon W\'f6 +ginger (15807) (\'ba +\'ba + 23.11.1795)}}{\fs18\f2 Heirat; Johann W\'f6 +ginger (15807)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Johann (15807) (26.2.1769-4.2.1822)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Johann\:W\'f6 +ginger (15807) (26.2.1769-4.2.1822)}}{\fs18\f2 und Theresia Bachmayr (15806)}{\v\xe{\fs18\f2 Personen und Orte\:Bachmayr\:Theresia (15806) (12.2.1774-zwischen 1832 und 1837)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Theresia\:Bachmayr (15806) (12.2.1774-zwischen 1832 und 1837)}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 17}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Sohn:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 23.1.1796}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Karl}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (41096)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Karl (41096) (23.1.1796-zwischen 1853 und 1855)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Karl\:W\'f6 +ginger (41096) (23.1.1796-zwischen 1853 und 1855)}}{\fs18\f2 ; Nr. 40, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 *}{\super\fs16\f2 18}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 22.3.1796}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 Taufe/Kleinkind-; Barbara Schreiber (16702)}{\v\xe{\fs18\f2 Personen und Orte\:Schreiber\:Barbara (16702) (22.3.1796-nach . .1865)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Barbara\:Schreiber (16702) (22.3.1796-nach . .1865)}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 19}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cdllx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Sohn:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 19.8.1798}\cell\pard\plain \ql\sl220\widctlpar\intbl{\b\fs22\f2 }{\b\fs22\f2 Johann}{\fs18\f2 }{\b\fs22\f2 W\'f6 +ginger}{\fs18\f2 (39838)}{\v\xe{\fs18\f2 Personen und Orte\:W\'f6 +ginger\:Johann (39838) (19.8.1798-25.3.1799)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Johann\:W\'f6 +ginger (39838) (19.8.1798-25.3.1799)}}{\fs18\f-2835269706644948777 ; Nr. 40, Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 20}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertmu\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 17.7.1799}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Lettner, Johann (20813) und Barbara Wonbacher (16688) (\'ba +\'ba + 17.7.1799)}}{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Wonbacher, Barbara (16688) und Johann Lettner (20813) (\'ba +\'ba + 17.7.1799)}}{\fs18\f2 Heirat; Johann Lettner (20813)}{\v\xe{\fs18\f2 Personen und Orte\:Lettner\:Johann (20813) (24.12.1772-5.7.1847)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Johann\:Lettner (20813) (24.12.1772-5.7.1847)}}{\fs18\f2 und Barbara Wonbacher (16688)}{\v\xe{\fs18\f2 Personen und Orte\:Wonbacher\:Barbara (16688) (10.2.1767-18.7.1823)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Barbara\:Wonbacher (16688) (10.2.1767-18.7.1823)}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 21}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf5 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 28.4.1800}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Schadelberger, Severin (16269) und Theresia Schuster (16637) (\'ba +\'ba + 28.4.1800)}}{\fs18\f2 }{\v\xe{\fs18\f2 Heiraten\:Skhuster, Theresia (16637) und Severin Schadelberger (16269) (\'ba +\'ba + 28.4.1800)}}{\fs18\f2 Heirat; Severin Schadelberger (16269)}{\v\xe{\fs18\f2 Personen und Orte\:Schadelberger\:Severin (16269) (vermutlich . .1748-vor . .1807)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Severin\:Schadelberger (16269) (vermutlich . .1748-vor . .1807)}}{\fs18\f2 und Theresia Schuster (16637)}{\v\xe{\fs18\f2 Personen und Orte\:Schuster\:Theresia (16637) (vermutlich . .1776-12.5.1827)}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Theresia\:Schuster (16637) (vermutlich . .1776-12.5.1827)}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}{\super\fs16\f2 22}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw!0\brdrcf15 \clbrdrr\brdrs\brdrw0\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 }{\fs18\f2 Zeuge:}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 25.6.1805}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 Taufe/Kleinkind-; Alois Wasinger (16613)}{\v\xe{\fs18\f2 Personen und Orte\:Wasinger\:Alois (16613) (25.6.1805- )}}{\fs18\f2 }{\v\xe{\fs18\f2 Personen und Orte\:Alois\:Wasinger (16613) (25.6.1805- )}}{\fs18\f2 ; Obersievering, \'d6 +sterreich, Sievering}{\v\xe{\fs18\f2 Personen und Orte\:Obersievering\:\'d6 +sterreich, Sievering}}{\fs18\f2 .}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 Tod*}\cell\pard\plain \qr\sl180\widctlpar\intbl{\fs18\f2 vor __.__.1832}\cell\pard\plain \ql\sl180\widctlpar\intbl{\fs18\f2 \~}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx1440 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw10\clpadr60\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrs\brdrw10\clpadl60\brdrcf15 \clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf15 \cltxlrtb\clftsWidth3\clwWidth6912 \cellx10512 \row}\pard\plain \ql\sl180\widctlpar\intbl{\b\fs18\f2 }{\b\fs18\f2 Referenz= (verstorben @ Jahren) Kinder=12}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrs\brdrw40\brdrcf1 \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw40\brdrcf1 \clcbpat15\cltxlrtb\clftsWidth3\clwWidth10512 \cellx10512 \row}\pard\plain \ql\sl20\widctlpar\intbl{\fs2\f2 \~}\cell\pard\plain \ql\sl20\widctlpar\intbl{\fs2\f2 \~}\cell\pard\plain \ql\sl20\widctlpar\intbl{\fs2\f2 \~}\cell\pard\plain \ql\sl20\widctlpar\intbl{\fs2\f2 \~}\cell\pard\plain \ql\sl20\widctlpar\intbl{\fs2\f2 \~}\cell\pard\plain \ql\sl20\widctlpar\intbl{\fs2\f2 \~}\cell\pard\plain \ql\sl20\widctlpar\intbl{\fs2\f2 \~}\cell{\trowd\trqc\trpaddl60\trpaddfl3\trpaddt0\trpaddft3\trpaddr60\trpaddfr3\trpaddb0\trpaddfb3\clvertalt\clbrdrl\brdrs\brdrw40\clpadl60\brdrcf1 \clbrdrt\brdrnone \clbrdrr\brdrnone \clbrdrb\brdrs\brdrw40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth360 \cellx360 \clvertalt\clbrdrl\brdrnone \clbrdrt\brdrnone \clbrdrr\brdrnone \clbrdrb\brdrs\brdrw40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth360 \cellx720 \clvertalt\clbrdrl\brdrnone \clbrdrt\brdrnone \clbrdrr\brdrnone \clbrdrb\brdrs\brdrw40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth720 \cellx1440 \clvertalt\clbrdrl\brdrnone \clbrdrt\brdrnone \clbrdrr\brdrnone \clbrdrb\brdrs\brdrw40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2160 \cellx3600 \clvertalt\clbrdrl\brdrnone \clbrdrt\brdrnone \clbrdrr\brdrnone \clbrdrb\brdrs\brdrw40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4032 \cellx7632 \clvertalt\clbrdrl\brdrnone \clbrdrt\brdrnone \clbrdrr\brdrnone \clbrdrb\brdrs\brdrw40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx9072 \clvertalt\clbrdrl\brdrnone \clbrdrt\brdrnone \clbrdrr\brdrs\brdrw40\clpadr60\brdrcf1 \clbrdrb\brdrs\brdrw40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1440 \cellx10512 \row}\pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 Gedruckt am: 27.5.2014 }\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 Erstellt von:}\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 Helmut Leininger}\page \par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \qc\sl280\widctlpar{\b\fs28\f2 }\par \pard\plain \qc\sl280\widctlpar{\b\fs28\f2 Endnoten}{\v\tc{\fs18\f2 {\*\bkmkstart 1}}{\fs18\f2 Endnoten{\*\bkmkend 1}}}\fs18\par \pard\plain \qc\sl180\widctlpar\fs18\par \pard\plain \qc\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 1. Sievering Taufen BD. 3 (1777-1784) Seite 1, Sievering Taufen BD. 3 Seite 1, (1777-1784), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 3 Seite 1.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 2. Sievering Taufen BD. 3 (1777-1784) Seite 10, Sievering Taufen BD. 3 Seite 10, (1777-1784), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 3 Seite 10.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\pdain \ql\sl180\widctlpar{\fs18\f2 3. "Geburt Josefa Schreiber 1779", 11.1.1779, Pfarre Sievering, Taufreg. BD. III (1777 - 1784) S. 12-Jan 1779.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 4. "Trauung Franz Lasselsberger - Barbara St\'f6 +ssel 1779", 16.5.1779, Pfarre Sievering, Trauungsreg. BD. II (1765-1784) S. 53-Mai 1779.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 5. Sievering Taufen BD. 3 (1777-1784) Seite 19, Sievering Taufen BD. 3 Seite 19, (1777-1784), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 3 Seite 19.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 6. Sievering Taufen BD. 3 (1777-1784) Seite 29, Sievering Taufen BD. 3 Seite 29, (1777-1784), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 3 Seite 29.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 7. Sievering Taufen BD. 3 (1777-1784) Seite 44, Sievering Taufen BD. 3 Seite 44, (1777-1784), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 3 Seite 44.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pa2d\plain \ql\sl180\widctlpar{\fs18\f2 8. Sievering Taufen BD. 4 (1784-1795) Fol. 7, Sievering Taufen BD. 4 Fol. 7, (1784-1795), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 4 Fol. 7.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 9. "Trauung Severin W\'f6 +ginger - Tehresia Fogowitsch 1787", 6.2.1787, Pfarre Sievering, Trauungsreg. BD. III (1784-1798) Fol. 15-FEB 1787.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 10. "Trauung Mathias Steinzer - Theresia Schwaiger 1787", 16.4.1787, Pfarre Sievering, Trauungsreg BD. III (1784-1798) Fol. 17-Apr 1787.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 11. "Trauung Severin Graninger - Magdalena Bitzl 1787", 14.5.1787, Pfarre Sievering, Trauungsreg. BD. III (1784-1798) Fol. 18-Mai 1787.}\par \pard\plain \ql\sl180\widctltar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 12. Sievering Taufen BD. 4 (1784-1795) Fol. 17, Sievering Taufen BD. 4 Fol. 17, (1784-1795), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 4 Fol. 17.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 13. Sievering Taufen BD. 4 (1784-1795) Fol. 2%, Sievering Taufen BD. 4 Fol. 25, (1784-1795), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 4 Fol. 25.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 14. Sievering Taufen BD. 4 (1784-1795) Fol. 31, Sievering Taufen BD. 4 Fol. 31, (1784-1795), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 4 Fol. 31.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 15. "Trauung Michael Faber - Josefa W\'f6 +ginger 1792", 12.11.1792, Pfarre Sievering, Trauungsreg BD. III (1784-1798) Fol. 27-Nov 1792.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 16. Sievering Taufen BD. 4 (1784-1795) Fol. 41, Sievering Taufen BD. 4 Fol. 41, (1784-1795), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 4 Fol. 41.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 17. "Trauung Johann W\'f6 +ginger - Theresia Bachmayr 1795", 23.11.1795, Pfarre Sievering, Trauungsreg BD/ III (1784-1798) Fol. 36-Nov 1795.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 18. "Geburt Karl W\'f6 +ginger 1796", 23.1.1796, Pfarre Sievering, aufreg. BD. V (1796 - 1813) Fol. 1-Jan 1796.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 19. "Geburt Barbara Schreiber 1796", 22.3.1796, Pfarre Sievering, ufreg. BD. V (1796 - 1813) Fol. 1-Mrz 1796.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 20. Sievering Taufen BD. 5 (1796-1813) Fol. 13, Sievering Taufen BD. 5 Fol. 13, (1796-1813), Sievering - St. Severin, Fr\'f6 +schelgasse 20, Wien, \'d6 +sterreich. Hereinafter cited as Sievering Taufen BD. 5 Fol. 13.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 21. "Trauung Johann Lettner - Barbara Schreiber 1799", 17.7.1799, Pfarre Sievering, Trauungsreg. BD IV (1798-1829) Fol. 5-Jul 1799.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar{\fs18\f2 22. "Trauung Severin Schadelberger - Theresia Schuster 1800", 28.4.1800, Pfarre Sievering, Trauungsreg. BD IV (1798-1829) Fol. 8-Apr 1800.}\par \pard\plain \ql\sl180\widctlpar\fs18\par \pard\plain \ql\sl180\widctlpar\fs18\par {\headerf\pgnstart1\pard\plain \ql\sl200\widctlpar\fs20\par {\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fillColor}{\sv 10070188}}{\sp{\sn fFilled}{\sv 1}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn alignHR}{\sv 1}}{\sp{\sn dxHeightHR}{\sv 30}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fStandardHR}{\sv 1}}{\sp{\sn fHorizRule}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex864\picscaley6\piccropl0\piccropr0\piccropt0\piccropb0\picw1764\pich882\picwgoal1000\pichgoal500\wmetafile8\bliptag-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \ql\sl200\widctlpar\fs20}{\headerr\pgnstart1\pard\plain \ql\sl200\widctlpar\fs20\par {\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fillColor}{\sv 10070188}}{\sp{\sn fFilled}{\sv 1}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn alignHR}{\sv 1}}{\sp{\sn dxHeightHR}{\sv 30}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fStandardHR}{\sv 1}}{\sp{\sn fHorizRule}{\sv 1}}{\sp{\sn fLayoutInCell}{\%n 1}}}\picscalex864\picscaley6\piccropl0\piccropr0\piccropt0\piccropb0\picw1764\pich882\picwgoal1000\pichgoal500\wmetafile8\bliptag-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb02100007000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \ql\sl200\widctlpar\fs20}{\headerl\pgnstart1\pard\plain \ql\sl200\widctlpar\fs20\par {\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fillColor}{\sv 10070188}}{\sp{\sn fFilled}{\sv 1}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn alignHR}{\sv 1}}{\sp{\sn dxHeightHR}{\sv 30}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fStandardHR}{\sv 1}}{\sp{\sn fHorizRule}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex864\picscaley6\piccropl0\piccropr0\piccropt0\piccropb0\picw1764\pich882\picwgoal1000\pichgoal500\wmetafile8\bliptag-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \ql\sl200\widctlpar\fs20}{\footerf\pgnstart1{\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fillColor}{\sv 10070188}}{\sp{\sn fFilled}{\sv 1}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn alignHR}{\sv 1}}{\sp{\sn dxHeightHR}{sv 30}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fStandardHR}{\sv 1}}{\sp{\sn fHorizRule}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex864\picscaley6\piccropl0\piccropr0\piccropt0\piccropb0\picw1764\pich882\picwgoal1000\pichgoal500\wmetafile8\bliptag-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631601030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}{\footerr\pgnstart1{\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fillColor}{\sv 10070188}}{\sp{\sn fFilled}{\sv 1}}{\sp{\sn fHine}{\sv 0}}{\sp{\sn alignHR}{\sv 1}}{\sp{\sn dxHeightHR}{\sv 30}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fStandardHR}{\sv 1}}{\sp{\sn fHorizRule}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex864\picscaley6\piccropl0\piccropr0\piccropt0\piccropb0\picw1764\pich882\picwgoal1000\pichgoal500\wmetafile8\bliptag-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}{\footerl\pgnstart1{\pict{\*\picprop\shplid1025{\sp{\snshapeType}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fillColor}{\sv 10070188}}{\sp{\sn fFilled}{\sv 1}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn alignHR}{\sv 1}}{\sp{\sn dxHeightHR}{\sv 30}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fStandardHR}{\sv 1}}{\sp{\sn fHorizRule}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex864\picscaley6\piccropl0\piccropr0\piccropt0\piccropb0\picw1764\pich882\picwgoal1000\pichgoal500\wmetafile8\bliptag-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e6999999fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}}-1602651790\blipupi1752{\*\blipuid a07979727e802d02da96f878ba973054}010009000003b700000006001c00000000000400000003010800050000000b0200000000050000000c021a000807040000002e0118001c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000400000002010100050000000902000000020d000000320a2c00000001000400000000000807190020631600030000001e0007000000fc020000aca899000000040000002d01010008000000fa02050000000000ffffff00040000002d0102000e00000024030500ffffffffffff1800080718000807ffffffffffff08000000fa0200000000000000000000040000002d01030007000000fc020000ffffff000000040000002d010400040000002701ffff1c000000fb021000070000000000bc020000000001020222527562696b00000000000000de60e7770806080298030802200408025ae78339040000002d0105000300000000000000}\pard\plain \qr\sl200\widctlpar\fs20\par \pard\plain \qr\sl160\widctlpar{\fs16\f2 Seite }{\fs16\f2 {\field\fldedit{\*\fldinst {PAGE \\* MERGEFORMAT}}}}\fs18\par \pard\plain \qr\sl180\widctlpar\fs18}\sect}} diff --git a/sw/qa/extras/layout/data/forcepoint103.html b/sw/qa/extras/layout/data/forcepoint103.html new file mode 100644 index 000000000..006a6d340 Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint103.html differ diff --git a/sw/qa/extras/layout/data/forcepoint72-1.rtf b/sw/qa/extras/layout/data/forcepoint72-1.rtf new file mode 100644 index 000000000..ad11b45a4 Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint72-1.rtf differ diff --git a/sw/qa/extras/layout/data/forcepoint75-1.rtf b/sw/qa/extras/layout/data/forcepoint75-1.rtf new file mode 100644 index 000000000..c317e12a0 Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint75-1.rtf differ diff --git a/sw/qa/extras/layout/data/forcepoint76-1.rtf b/sw/qa/extras/layout/data/forcepoint76-1.rtf new file mode 100644 index 000000000..ca77206ff --- /dev/null +++ b/sw/qa/extras/layout/data/forcepoint76-1.rtf @@ -0,0 +1,3388 @@ +{\rtf1\a|eflang1037\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\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;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Helvetica;} +{\f5\fmodern\fcharset0\fprq1{\*\panose 02060409020205020404}Courier;}{\f6\froman\fcharset0\fprq2{\*\panose 02020603040505020304}Tms Rmn;}{\f7\fswiss\fcharset0\fprq2{\*\panose 020b0604020202030204}Helv;} +{\f8\froman\fcharset0\fprq2{\*\panose 02040503060506020304}New York;}{\f9\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}System;}{\f10\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f11\froman\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?l?r ??\'81\'66c};}{\f12\fnil\fcharset129\fprq1{\*\panose 02030600000101010101}Batang{\*\falt \'a2\'ae\'a1\'d7IoUAA};} +{\f13\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ????\'a8\'ac??};}{\f14\fnil\fcharset136\fprq2{\*\panose 02010601000101010101}PMingLiU{\*\falt !Ps2OcuAe};} +{\f15\fmodern\fcharset128\fprq1{\*\panose 020b0609070205080204}MS Gothic{\*\falt ?l?r ?S?V?b?N};} +{\f16\fmodern\fcharset129\fprq1{\*\panose 020b0600000101010101}Dotum{\*\falt \'a1\'cb\'a2\'e7Ii\'a1\'cb\'a2\'e7e\'a1\'cb\'a2\'e7\'a8\'cf\'a1\'a9\'a1\'cb\'a2\'e7e?o};} +{\f17\fmodern\fcharset134\fprq1{\*\panose 02010600030101010101}SimHei{\*\falt o??\'a8\'ac2??\'a8\'ac??};}{\f0\fmodern\fcharset136\fprq1{\*\panose 02010609000101010101}MingLiU{\*\falt 2OcuAe};} +{\f19\froman\fcharset128\fprq1{\*\panose 7202762996549695502}Mincho{\*\falt ??\'81\'66c};} +{\f20\froman\fcharset129\fprq1{\*\panose 020b0600000101010101}Gulim{\*\falt \'a2\'aee\'a1\'cbc\'a2\'ae\'a1\'d7u\'a1\'cb\'a2\'e7\'a2\'ae\'a1\'bfu\'a1\'cb\'a2\'e7e\'a1\'cb\'a2\'e7\'a8\'cf\'a1\'a9\'a2\'ae\'a1\'d7I\'a1\'cb\'a2\'e7a};} +{\f21\froman\fcharset0\fprq2{\*\panose 02040603050705020303}Century;}{\f22\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Angsana New;}{\f23\fswiss\fcharset0\fprq2{\*\panose 020b0304020202020204}Cordia New;} +{\f24\fnil\fcharset1\fprq2{\*\panose 00000400000000000000}Mangal;}{\f25\fnil\fcharset1\fprq2{\*\panose 02000400000000000000}Latha;}{\f26\froman\fcharset0\fprq2{\*\panose 010a0502050306030303}Sylfaen;} +{\f27\froman\fcharset1\fprq2{\*\panose 00000400000000000000}Vrinda;}{\f28\fnil\fcharset1\fprq2{\*\panose 02000500000000000000}Raavi;}{\f29\fnil\fcharset1\fprq2{\*\panose 02000500000000000000}Shruti;} +{\f30\froman\fcharset1\fprq2{\*\panose 00000400000000000000}Sendnya;}{\f31\fnil\fcharset1\fprq2{\*\panose 02000500000000000000}Gautami;}{\f32\fnil\fcharset1\fprq2{\*\panose 00000400000000000000}Tunga;} +{\f33\fscript\fcharset1\fprq2{\*\panose 03080600000000000000}Estrangelo Edessa;}{\f34\froman\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial Unicode MS;}{\f35\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;} +{\f36\fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun;}{\f37\froman\fcharset0\fprq2 Times New Roman CE;}{\f38\froman\fcharset0\fprq2 Times New Roman CYR;}{\f39\froman\fcharset0\fprq2 Times New Roman Greek;} +{\f40\froman\fcharset0\fprq2 Times New Roman TUR;}{\f41\froman\fcharset0\fprq2 Times New Roman Baltic;}{\f42\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\f43\fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS;} +{\f44\fswiss\fcharset0\fprq2{\*\panose 020e0802040304020204}Albertus Extra Bold;}{\f45\fswiss\fcharset0\fprq2{\*\panose 020e0602030304020304}Albertus Medium;}{\f46\fswiss\fcharset0\fprq2{\*\panose 020b0603020204030204}Antique Olive;} +{\f47\fswiss\fcharset0\fprq2{\*\panose 020b0502050508020304}CG Omega;}{\f48\froman\fcharset0\fprq2{\*\panose 02020603050405020304}CG Times;}{\f49\froman\fcharset0\fprq2{\*\panose 02040706040705040204}Clarendon Condensed;} +{\f50\fscript\fcharset0\fprq2{\*\panose 03030502040406070605}Coronet;}{\f51\fmodern\fcharset0\fprq1{\*\panose 02060409020205020404}CourierPS;}{\f52\froman\fcharset0\fprq2{\*\panose 02020404030301010803}Garamond;} +{\f53\fswiss\fcharset0\fprq2{\*\panose 020b0506020203020204}Helvetica Narrow;}{\f54\fswiss\fcharset0\fprq2{\*\panose 020b0402020203020304}ITC Avant Garde Gothic;}{\f55\froman\fcharset0\fprq2{\*\panose 02050504040505020204}ITC Bookman;} +{\f56\fscript\fcharset0\fprq2{\*\panose 03010101010201010101}ITC Zapf Chancery;}{\f57\fnil\fcharset2\fprq2{\*\panose 01010601010101010101}ITC Zapf Dingbats;}{\f58\fmodern\fcharset0\fprq1{\*\panose 020b0409020202030204}Letter Gothic;} +{\f59\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}LinePrinterBM;}{\f60\fscript\fcharset0\fprq2{\*\panose 03020702040402020504}Marigold;}{\f61\froman\fcharset0\fprq2{\*\panose 02040603050505020303}New Century Schoolbook;} +{\f62\froman\fcharset0\fprq2{\*\panose 02040602050305020304}Palatino;}{\f63\froman\fcharset2\fprq2{\*\panose 05050102010706020507}SymbolPS;}{\f64\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times;} +{\f65\fswiss\fcharset0\fprq2{\*\panose 020b0603020202030204}Univers;}{\f66\fswiss\fcharset0\fprq2{\*\panose 020b0606020202060204}Univers Condensed;}{\f67\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}PRESCRIBE;} +{\f68\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Marlett;}{\f69\fmodern\fcharset0\fprq1{\*\panose 020b0609040504020204}Lucida Console;}{\f70\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020204}Lucida Sans Unicode;} +{\f0\fswiss\fcharset0\fprq2{\*\panose 020b0a04020102020204}DejaVu Sans;}{\f72\fscript\fcharset0\fprq2{\*\panose 030f0702030302020204}Comic Sans MS;}{\f73\fswiss\fcharset0\fprq2{\*\panose 020b0806030902050204}Impact;} +{\f74\froman\fcharset0\fprq2{\*\panose 02040502050405020303}Georgia;}{\f75\fswiss\fcharset0\fprq2{\*\panose 020b0603020102020204}Franklin Gothic Medium;}{\f76\froman\fcharset0\fprq2{\*\panose 02040502050505030304}DejaVu Serif;} +{\f77\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f78\fnil\fcharset1\fprq2{\*\panose 02000500030200090000}MV Boli;}{\f79\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Microsoft Sans Serif;} +{\f80\froman\fcharset2\fprq2{\*\panose 02020604050505020304}WP MultinationalA Roman;}{\f81\fmodern\fcharset2\fprq1{\*\panose 02060409020205020404}WP MultinationalB Courier;} +{\f82\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}WP MultinationalB Helve;}{\f83\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}WP MultinationalB Roman;}{\f84\fswiss\fcharset2\fprq2{\*\panose 050b0604020202030204}WP Phonetic;} +{\f85\fnil\fcharset2\fprq2{\*\panose 05010101010101010101}WP Arabic Sihafa;}{\f86\fnil\fcharset2\fprq2{\*\panose 05010101010101010101}WP MathA;}{\f87\fnil\fcharset2\fprq2{\*\panose 05010101010101010101}WP MathB;} +{\f88\fnil\fcharset2\fprq2{\*\panose 05010101010101010101}WP MathExtendedA;}{\f89\fnil\fcharset2\fprq2{\*\panose 05010101010101010101}WP MathExtendedB;}{\f90\fmodern\fcharset2\fprq1{\*\panose 05000009000000000000}WP MultinationalA Courier;} +{\f91\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}WP MultinationalA Helve;}{\f92\fmodern\fcharset2\fprq1{\*\panose 00p00009000000000000}WP Greek Courier;}{\f93\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}WP Greek Helve;} +{\f94\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}WP Hebrew David;}{\f95\fnil\fcharset2\fprq2{\*\panose 05010101010101010101}WP IconicSymbolsA;}{\f96\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}WP IconicSymbolsB;} +{\f97\fnil\fcharset2\fprq2{\*\panose 05010101010101010101}WP Japanese;}{\f98\fnil\fcharset0\fprq2{\*\panose 00000400000000000000}WP TypographicSymbols;}{\f99\fnil\fcharset2\fprq2{\*\panose 05010101010101010101}WP ArabicScript Sihafa;} +{\f100\fmodern\fcharset0\fprq1{\*\panose 010b0409020201010101}WP BoxDrawing;}{\f101\froman\fcharset2\fprq2{\*\panose 05020604050505020304}WP CyrillicA;}{\f102\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}WP CyrillicB;} +{\f103\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}WP Greek Century;}{\f104\froman\fcharset0\fprq2{\*\panose 02090504030505020304}AmerType Md BT;}{\f105\fswiss\fcharset0\fprq2{\*\panose 00b0602020202020204}AvantGarde Md BT;} +{\f106\fsjs\fcharset0\fprq2{\*\panose 020b0402020202020204}AvantGarde Bk BT;}{\f107\froman\fcharset0\fprq2{\*\panose 02030904050306020704}Benguiat Bk BT;}{\f108\fdecor\fcharset0\fprq2{\*\panose 04030205020b02020502}BernhardFashion BT;} +{\f109\froman\fcharset0\fprq2{\*\panose 0207060307050a020302}BernhardMod BT;}{\f110\fswiss\fcharset0\fprq2{\*\panose 020b0807020203060204}BankGothic Md BT;}{\f111\fdecor\fcharset0\fprq2{\*\panose 04040807060d02020704}Bremen bd BT;} +{\f112\fdecor\fcharset0\fprq2{\*\panose 04060705040702020204}Charlesworth;}{\f113\fswiss\fcharset2\fprq2{\*\panose 020b0603050302020204}CommonBullets;}{\f114\fswiss\fcharset0\fprq2{\*\panose 020e0705020203020404}CopprplGoth bd BT;} +{\f115\froman\fcharset0\fprq2{\*\panose 0204050203030b020204}Dauphin;}{\f116\fswiss\fcharset0\fprq2{\*\panose 020b0802020204020204}Futura Md BT;}{\f117\fdecor\fcharset0\fprq2{\*\panose 040409050d0b02020403}FuturaBlack BT;} +{\f118\fswiss\fcharset0\fprq2{\*\panose 020b0402020204020303}Futura Lt BT;}{\f119\fswiss\fcharset0\fprq2{\*\panose 020b0903020204020204}Futura XBlk BT;}{\f120\fdecor\fcharset0\fprq2{\*\panose 04020604050203030203}GoudyHandtooled BT;} +{\f121\froman\fcharset0\fprq2{\*\panose 02020502050305020303}GoudyOlSt BT;}{\f122\fswiss\fcharset0\fprq2{\*\panose 020b0602020204020204}Humanst521 BT;}{\f123\fswiss\fcharset0\fprq2{\*\panose 020d0402020204020904}Kabel Bk BT;} +{\f124\fswiss\fcharset0\fprq2{\*\panose 020d0902020204020204}Kabel Ult BT;}{\f125\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Lithograph;}{\f126\fdecor\fcharset0\fprq2{\*\panose 040b0500000000000000}LithographLight;} +{\f127\fscript\fcharset0\fprq2{\*\panose 03080702020302020206}OzHandicraft BT;}{\f128\froman\fcharset0\fprq2{\*\panose 02070a02080905020204}PosterBodoni BT;}{\f129\froman\fcharset0\fprq2{\*\panose 02060503030505020204}Serifa BT;} +{\f130\froman\fcharset0\fprq2{\*\panose 02060303030505020204}Serifa Th BT;}{\f131\fscript\fcharset0\fprq2{\*\panose 03030702030607090b03}English111 Vivace BT;}{\f132\froman\fcharset0\fprq2{\*\panose 02080503040505020303}Souvenir Lt BT;} +{\f133\fscript\fcharset0\fprq2{\*\panose 03090702030407020403}Staccato222 BT;}{\f134\fswiss\fcharset0\fprq2{\*\panose 020b0708030702060204}Swiss911 XCm BT;}{\f135\fscript\fcharset0\fprq2{\*\panose 03020702030807050705}TypoUpright BT;} +{\f136\froman\fcharset0\fprq2{\*\panose 02040503050506040803}ZapfEllipt BT;}{\f137\fswiss\fcharset0\fprq2{\*\panose 020b0505020202020204}Zurich Ex BT;}{\f138\fswiss\fcharset0\fprq2{\*\panose 020b0807040502030204}Zurich BlkEx BT;} +{\f139\froman\fcharset2\fprq2{\*\panose 05050102010205020202}MT Extra;}{\f140\froman\fcharset222\fprq2{\*\panose 02020603050405020304}AngsanaUPC;}{\f141gfswiss#tchaYset222\fprq2{\*\panose 020b0604020202020204}BrowalliaUPC;} +{\f142\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Browallia New;}{\f143\fswiss\fcharset222\fprq2{\*\panose 020b0304020202020204}CordiaUPC;}{\f144\froman\fcharset222\fprq2{\*\panose 02020603050405020304}DilleniaUPC;} +{\f145\froman\fcharset222\fprq2{\*\panose 02020603050405020304}EucrosiaUPC;}{\f146\fswiss\fcharset222\fprq2{\*\panose 020b0604020202020204}FreesiaUPC;}{\f147\fswiss\fcharset222\fprq2{\*\panose 020b0604020202020204}IrisUPC;} +{\f148\froman\fcharset-2680832846622911521\fprq2{\*\panose 02020603050405020304}JasmineUPC;}{\f149\froman\fcharset222\fprq2{\*\panose 02020603050405020304}KodchiangUPC;}{\f150\fswiss\fcharset222\fprq2{\*\panose 020b0604020202020204}LilyUPC;} +{\f151\fbidi \fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Aharoni;}{\f152\fbidi \fnil\fcharset177\fprq2{\*\panose 00000000000000000000}David;}{\f153\fbidi \fnil\fcharset177\fprq2{\*\panose 00000000000000000000}David Transparent;} +{\f154\fbidi \fnil\fcharset177\fprq2{\*\panose 00000000000000000000}FrankRuehl;}{\f155\fbidi \fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Levenim MT;}{\f156\fbidi \fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Miriam;} +{\f157\fbidi \fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Miriam Transparent;}{\f158\fbidi \fmodern\fcharset177\fprq1{\*\panose 00000009000000000000}Miriam Fixed;} +{\f159\fbidi \fmodern\fcharset177\fprq1{\*\panose 00000009000000000000}Fixed Miriam Transparent;}{\f160\fbidi \fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Narkisim;}{\f161\fbidi \fmodern\fcharset177\fprq1{\*\panose 00000009000000000000}Rod;} +{\f162\fbidi \fmodern\fcharset177\fprq1{\*\panose 00000009000000000000}Rod Transparent;}{\f163\fbidi \fnil\fcharset178\fprq2{\*\panose 02010000000000000000}Traditional Arabic;} +{\f164\fbidi \fnil\fcharset178\fprq2{\*\panose 02010000000000000000}Arabic Transparent;}{\f165\fbidi \fnil\fcharset178\fprq2{\*\panose 02010000000000000000}Andalus;}{\f166\fbidi \fnil\fcharset178\fprq2{\*\panose 02010000000000000000}Simplified Arabic;} +{\f167\fbidi \fmodern\fcharset178\fprq1{\*\panose 02010009000000000000}Simplified Arabic Fixed;}{\f168\fswiss\fcharset0\fprq2{\*\panose 020b0506030403020204}Myriad Condensed Web;}{\f169\fswiss\fcharset0\fprq2{\*\panose 020b0503030403020204}Myriad Web;} +{\f170\groman\fcharset0\fprq2{\*\panose 02020603050405020304}TITUS Cyberbit Basic;}{\f171\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Digiface;}{\f172\fdecor\fcharset0\fprq2{\*\panose 040409040d0702020402}Allegro BT;} +{\f173\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f174\froman\fcharset0\fprq2{\*\panose 02040602050305030304}DejaVu Sans;}{\f175\froman\fcharset0\fprq2{\*\panose 02050604050505020204}Bookman Old Style;} +{\f176\fswiss\fcharset0\fprq2{\*\panose 020b0502020202020204}Century Gothic;}{\f177\fswiss\fcharset0\fprq2{\*\panose 020b0706040902060204}Haettenschweiler;}{\f178\fnil\fcharset2\fprq2{\*\panose 05010100010000000000}MS Outlook;} +{\f179\fscript\fcharset0\fprq2{\*\panose 03010101010201010101}Monotype Corsiva;}{\f180\froman\fcharset2\fprq2{\*\panose 05020102010507070707}Wingdings 2;}{\f181\froman\fcharset2\fprq2{\*\panose 05040102010807070707}Wingdings 3;} +{\f182\fnil\fcharset2\fprq2{\*\panose 05010101010101010101}Bookshelf Symbol 7;}{\f183\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}MS Reference Sans Serif;}{\f184\fnil\fcharset2\fprq2{\*\panose 05000500000000000000}MS Reference Specialty;} +{\f185\fmodern\fcharset0\fprq1{\*\panose 020b0609030804020204}Bitstream Vera Sans Mono;}{\f186\fswiss\fcharset0\fprq2{\*\panose 020b0603030804020204}Bitstream Vera Sans;}{\f187\froman\fcharset0\fprq2{\*\panose 02060603050605020204}Bitstream Vera Serif;} +{\f188\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}OpenSymbol;}{\f189\fnil\fcharset0\fprq2{\*\panose 00000700000000000000}Davka Siddur;}{\f190\fnil\fcharset0\fprq2{\*\panose 02000508000000020004}Davka Aharony;} +{\f191\fnil\fcharset0\fprq2{\*\panose 02000400000000000000}Davka Chayim;}{\f192\fnil\fcharset0\fprq2{\*\panose 02000506000000020004}Davka David;}{\f193\fnil\fcharset0\fprq2{\*\panose 02000400000000000000}Davka DavidFix;} +{\f194\fnil\fcharset0\fprq2{\*\panose 00000400000000000000}Davka Drogolin;}{\f195\fnil\fcharset0\fprq2{\*\panose 02000400000000000000}Davka FrankRuhl;}{\f196\fnil\fcharset0\fprq2{\*\panose 02000400000000000000}Davka FrankRuhlLight;} +{\f197\fnil\fcharset0\fprq2{\*\panose 02000400000000000000}Davka Gefen;}{\f198\fnil\fcharset0\fprq2{\*\panose 02000400000000000000}Davka Gonen;}{\f199\fnil\fcharset0\fprq2{\*\panose 00000400000000000000}Davka Hadasah;} +{\f200\fnil\fcharset0\fprq2{\*\panose 02000400000000000000}Davka Kastel;}{\f201\fnil\fcharset0\fprq2{\*\panose 00000400000000000000}Davka KsavYad;}{\f202\fnil\fcharset0\fprq2{\*\panose 00000400000000000000}Davka Meir;} +{\f203\fnil\fcharset0\fprq2{\*\panose 02000400000000000000}Davka Miriam;}{\f204\fnil\fcharset0\fprq2{\*\panose 00000400000000000000}Davka Rashi;}{\f205\fnil\fcharset0\fprq2{\*\panose 00000400000000000000}Davka Stam;} +{\f206\fnil\fcharset0\fprq2{\*\panose 02000400000000000000}Davka Yerushalmy;}{\f207\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}GuttmanD Venice;}{\f208\fnil\fcharset0\fprq2{\*\panose 02000000000000000000}GuttmanD Adii;} +{\f209\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}GuttmanD Ashknaz;}{\f210\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}GuttmanD Calligraphic;}{\f211\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}GuttmanD Hadar;} +{\f212\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}GuttmanD Keren;}{\f213\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}GuttmanD Mantova-Deco;}{\f214\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}GuttmanD Hatzvi;} +{\f215\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}GuttmanD Vilna;}{\f216\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}GuttmanD Yad;}{\f217\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}YerushalmyD;} +{\f218\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}AharonyD;}{\f219\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}ChayimD;}{\f220\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}DavidD;} +{\f221\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}DavidFixD;}{\f222\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}FrankRuhlD;}{\f223\fnil\fcharset2\fprq2{\*\panose 00000300000000000000}FrankRuhlLightD;} +{\f224\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}GefenD;}{\f225\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}GonenD;}{\f226\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}HadasahD;} +{\f227\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}KastelD;}{\f228\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}KsavYadD;}{\f229\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}MeirD;} +{\f230\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}MiriamD;}{\f231\fnil\fcharset2\fprq50472{\*\panose 00000400000000000000}RashiD;}{\f232\fnil\fcharset2\fprq2{\*\panose 00000700000000000000}SiddurD;} +{\f233\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}StamD;}{\f234\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}VilnaD;}{\f235\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}CalligraphicG;} +{\f236\fnil\fcharset2\fprq2{\*\panose 02000000000000000000}AdiiG;}{\f237\fnil\fcharset2\fprq2{\*\panose 02000000000000000000}AshknazG;}{\f238\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}HadarG;} +{\f239\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}KerenG;}{\f240\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mantova-DecoG;}{\f241\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}HatzviG;} +{\f242\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}VeniceG;}{\f243\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}VilnaG;}{\f244\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}YadG;} +{\f245\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}HebEmail;}{\f246\froman\fcharset0\fprq2{\*\panose 02070300020205020404}HebEmailFix;}{\f247\fswiss\fcharset0\fprq2 Arial CE;}{\f248\fswiss\fcharset0\fprq2 Arial CYR;} +{\f249\fswiss\fcharset0\fprq2 Arial Greek;}{\f250\fswiss\fcharset0\fprq2 Arial TUR;}{\f251\fswiss\fcharset0\fprq2 Arial Baltic;}{\f252\fmodern\fcharset0\fprq1 Courier New CE;}{\f253\fmodern\fcharset0\fprq1 Courier New CYR;} +{\f254\fmodern\fcharset0\fprq1 Courier New Greek;}{\f255\fmodern\fcharset0\fprq1 Courier New TUR;}{\f256\fmodern\fcharset0\fprq1 Courier New Baltic;}{\f257\froman\fcharset238\fprq2 Times New Roman CE;}{\f258\froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f260\froman\fcharset161\fprq2 Times New Roman Greek;}{\f261\froman\fcharset162\fprq2 Times New Roman Tur;}{\f262\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f263\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f264\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f265\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f267\fswiss\fcharset238\fprq2 Arial CE;}{\f268\fswiss\fcharset204\fprq2 Arial Cyr;}{\f270\fswiss\fcharset161\fprq2 Arial Greek;} +{\f271\fswiss\fcharset162\fprq2 Arial Tur;}{\f272\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f273\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\f274\fswiss\fcharset186\fprq2 Arial Baltic;}{\f275\fswiss\fcharset163\fprq2 Arial (Vietnamese);} +{\f277\fmodern\fcharset238\fprq1 Courier New CE;}{\f278\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f280\fmodern\fcharset161\fprq1 Courier New Greek;}{\f281\fmodern\fcharset162\fprq1 Courier New Tur;} +{\f282\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f283\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f284\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f285\fmodern\fcharset163\fprq1 Courier New (Vietnamese);} +{\f297\fswiss\fcharset238\fprq2 Helvetica CE;}{\f298\fswiss\fcharset204\fprq2 Helvetica Cyr;}{\f300\fswiss\fcharset161\fprq2 Helvetica Greek;}{\f301\fswiss\fcharset162\fprq2 Helvetica Tur;}{\f302\fbidi \fswiss\fcharset177\fprq2 Helvetica (Hebrew);} +{\f303\fbidi \fswiss\fcharset178\fprq2 Helvetica (Arabic);}{\f304\fswiss\fcharset186\fprq2 Helvetica Baltic;}{\f305\fswiss\fcharset163\fprq2 Helvetica (Vietnamese);}{\f486\froman\fcharset222\fprq2 Angsana New (Thai);} +{\f496\fswiss\fcharset222\fprq2 Cordia New (Thai);}{\f517\froman\fcharset238\fprq2 Sylfaen CE;}{\f518\froman\fcharset204\fprq2 Sylfaen Cyr;}{\f520\froman\fcharset161\fprq2 Sylfaen Greek;}{\f521\froman\fcharset162\fprq2 Sylfaen Tur;} +{\f524\froman\fcharset186\fprq2 Sylfaen Baltic;}{\f607\fswiss\fcharset238\fprq2 Tahoma CE;}{\f608\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f610\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f611\fswiss\fcharset162\fprq2 Tahoma Tur;} +{\f612\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);}{\f613\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f614\fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f615\fswiss\fcharset163\fprq2 Tahoma (Vietnamese);} +{\f616\fswiss\fcharset222\fprq2 Tahoma (Thai);}{\f627\froman\fcharset238\fprq2 Times New Roman ce CE;}{\f628\froman\fcharset204\fprq2 Times New Roman ce Cyr;}{\f630\froman\fcharset161\fprq2 Times New Roman ce Greek;} +{\f631\froman\fcharset162\fprq2 Times New Roman ce Tur;}{\f632\fbidi \froman\fcharset177\fprq2 Times New Roman ce (Hebrew);}{\f633\fbidi \froman\fcharset178\fprq2 Times New Roman ce (Arabic);}{\f634\froman\fcharset186\fprq2 Times New Roman ce Baltic;} +{\f635\froman\fcharset163\fprq2 Times New Roman ce (Vietnamese);}{\f637\froman\fcharset238\fprq2 Times New Roman CYR CE;}{\f638\froman\fcharset204\fprq2 Times New Roman CYR Cyr;}{\f640\froman\fcharset161\fprq2 Times New Roman CYR Greek;} +{\f641\froman\fcharset162\fprq2 Times New Roman CYR Tur;}{\f642\fbidi \froman\fcharset177\fprq2 Times New Eoman CYR (Hebrew);}{\f643\fbidi \froman\fcharset178\fprq2 Times New Roman CYR (Arabic);}{\f644\froman\fcharset186\fprq2 Times New Roman CYR Baltic;} +{\f645\froman\fcharset163\fprq2 Times New Roman CYR (Vietnamese);}{\f647\froman\fcharset238\fprq2 Times New Roman Greek CE;}{\f648\froman\fcharset204\fprq2 Times New Roman Greek Cyr;}{\f650\froman\fcharset161\fprq2 Times New Roman Greek Greek;} +{\f651\froman\fcharset162\fprq2 Times New Roman Greek Tur;}{\f652\fbidi \froman\fcharset177\fprq2 Times New Roman Greek (Hebrew);}{\f653\fbidi \froman\fcharset178\fprq2 Times New Roman Greek (Arabic);} +{\f654\froman\fcharset186\fprq2 Times New Roman Greek Baltic;}{\f655\froman\fcharset163\fprq2 Times New Roman Greek (Vietnamese);}{\f657\froman\fcharset238\fprq2 Times New Roman TUR CE;}{\f658\froman\fcharset204\fprq2 Times New Roman TUR Cyr;} +{\f660\froman\fcharset161\fprq2 Times New Roman TUR Greek;}{\f661\froman\fcharset162\fprq2 Times New Roman TUR Tur;}{\f662\fbidi \froman\fcharset177\fprq2 Times New Roman TUR (Hebrew);}{\f663\fbidi \froman\fcharset178\fprq2 Times New Roman TUR (Arabic);} +{\f664\froman\fcharset186\fprq2 Times New Roman TUR Baltic;}{\f665\froman\fcharset163\fprq2 Times New Roman TUR (Vietnamese);}{\f667\froman\fcharset238\fprq2 Times New Roman Baltic CE;}{\f668\froman\fcharset204\fprq2 Times New Roman Baltic Cyr;} +{\f670\froman\fcharset161\fprq2 Times New Roman Baltic Greek;}{\f671\froman\fcharset162\fprq2 Times New Roman Baltic Tur;}{\f672\fbidi \froman\fcharset177\fprq2 Times New Roman Baltic (Hebrew);} +{\f673\fbidi \froman\fcharset178\fprq2 Times New Roman Baltic (Arabic);}{\f674\froman\fcharset186\fprq2 Times New Roman Baltic Baltic;}{\f675\froman\fcharset163\fprq2 Times New Roman Baltic (Vietnamese);}{\f677\fswiss\fcharset238\fprq2 Verdana CE;} +{\f678\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f680\fswiss\fcharset161\fprq2 Verdana Greek;}{\f681\fswiss\fcharset162\fprq2 Verdana Tur;}{\f684\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f685\fswiss\fcharset163\fprq2 Verdana (Vietnamese);} +{\f687\fswiss\fcharset238\fprq2 Trebuchet MS CE;}{\f688\fswiss\fcharset204\fprq2 Trebuchet MS Cyr;}{\f690\fswiss\fcharset161\grq2 Trebuchet MS Greek;}{\f691\fswiss\fcharset162\fprq2 Trebuchet MS Tur;}{\f694\fswiss\fcharset186\fprq2 Trebuchet MS Baltic;} +{\f777\froman\fcharset238\fprq2 Garamond CE;}{\f778\froman\fcharset204\fprq2 Garamond Cyr;}{\f780\froman\fcharset161\fprq2 Garamond Greek;}{\f781\froman\fcharset162\fprq2 Garamond Tur;}{\f784\froman\fcharset186\fprq2 Garamond Baltic;} +{\f897\froman\fcharset238\fprq2 Times CE;}{\f898\froman\fcharset204\fprq2 Times Cyr;}{\f900\froman\fcharset161\fprq2 Times Greek;}{\f901\froman\fcharset162\fprq2 Times Tur;}{\f902\fbidi \froman\fcharset177\fprq2 Times (Hebrew);} +{\f903\fbidi \froman\fcharset178\fprq2 Times (Arabic);}{\f904\froman\fcharset186\fprq2 Times Baltic;}{\f905\froman\fcharset163\fprq2 Times (Vietnamese);}{\f947\fmodern\fcharset238\fprq1 Lucida Console CE;} +{\f948\fmodern\fcharset204\fprq1 Lucida Console Cyr;}{\f950\fmodern\fcharset161\fprq1 Lucida Console Greek;}{\f951\fmodern\fcharset162\fprq0 Lucida Console Tur;}{\f957\fswiss\fcharset238\fprq2 Lucida Sans Unicode CE;} +{\f958\fswiss\fcharset204\fprq2 Lucida Sans Unicode Cyr;}{\f960\fswiss\fcharset161\fprq2 Lucida Sans Unicode Greek;}{\f961\fswiss\fcharset162\fprq2 Lucida Sans Unicode Tur;}{\f962\fbidi \fswiss\fcharset177\fprq2 Lucida Sans Unicode (Hebrew);} +{\f967\fswiss\fcharset238\fprq2 DejaVu Sans CE;}{\f968\fswiss\fcharset204\fprq2 DejaVu Sans Cyr;}{\f970\fswiss\fcharset161\fprq2 DejaVu Sans Greek;}{\f971\fswiss\fcharset162\fprq2 DejaVu Sans Tur;}{\f974\fswiss\fcharset186\fprq2 DejaVu Sans Baltic;} +{\f977\fscript\fcharset238\fprq2 Comic Sans MS CE;}{\f978\fscript\fcharset204\fprq2 Comic Sans MS Cyr;}{\f980\fscript\fcharset161\fprq2 Comic Sans MS Greek;}{\f981\fscript\fcharset162\fprq2 Comic Sans MS Tur;} +{\f984\fscript\fcharset186\fprq2 Comic Sans MS Baltic;}{\f987\fswiss\fcharset238\fprq2 Impact CE;}{\f988\fswiss\fcharset204\fprq2 Impact Cyr;}{\f990\fswiss\fcharset161\fprq2 Impact Greek;}{\f991\fswiss\fcharset162\fprq2 Impact Tur;} +{\f994\fswiss\fcharset186\fprq2 Impact Baltic;}{\f997\froman\fcharset238\fprq2 Georgia CE;}{\f998\froman\fcharset204\fprq2 Georgia Cyr;}{\f1000\froman\fcharset161\fprq2 Georgia Greek;}{\f1001\froman\fcharset162\fprq2 Georgia Tur;} +{\f1004\froman\fcharset186\fprq2 Georgia Baltic;}{\f1007\fswiss\fcharset238\fprq2 Franklin Gothic Medium CE;}{\f1008\fswiss\fcharset204\fprq2 Franklin Gothic Medium Cyr;}{\f1010\fswiss\fcharset161\fprq2 Franklin Gothic Medium Greek;} +{\f1011\fswiss\fcharset162\fprq2 Franklin Gothic Medium Tur;}{\f1014\fswiss\fcharset186\fprq2 Franklin Gothic Medium Baltic;}{\f1017\froman\fcharset238\fprq2 DejaVu Serif CE;}{\f1018\froman\fcharset204\fprq2 DejaVu Serif Cyr;} +{\f1020\froman\fcharset161\fprq2 DejaVu Serif Greek;}{\f1021\froman\fcharset162\fprq2 DejaVu Serif Tur;}{\f1024\froman\fcharset186\fprq2 DejaVu Serif Baltic;}{\f1025\froman\fcharset163\fprq2 DejaVu Serif (Vietnamese);} +{\f1047\fswiss\fcharset238\fprq2 Microsoft Sans Serif CE;}{\f1048\fswiss\fcharset204\fprq2 Microsoft Sans Serif Cyr;}{\f1050\fswiss\fcharset161\fprq2 Microsoft Sans Serif Greek;}{\f1051\fswiss\fcharset162\fprq2 Microsoft Sans Serif Tur;} +{\f1052\fbidi \fswiss\fcharset177\fprq2 Microsoft Sans Serif (Hebrew);}{\f1053\fbidi \fswiss\fcharset178\fprq2 Microsoft Sans Serif (Arabic);}{\f1054\fswiss\fcharset186\fprq2 Microsoft Sans Serif Baltic;} +{\f1055\fswiss\fcharset163\fprq2 Microsoft Sans Serif (Vietnamese);}{\f1056\fswiss\fcharset222\fprq2 Microsoft Sans Serif (Thai);}{\f1297\froman\fcharset238\fprq2 AmerType Md BT CE;}{\f1300\froman\fcharset161\fprq2 AmerType Md BT Greek;} +{\f1301\froman\fcharset162\fprq2 AmerType Md BT Tur;}{\f1307\fswiss\fcharset238\fprq2 AvantGarde Md BT CE;}{\f1310\fswiss\fcharset161\fprq2 AvantGarde Md BT Greek;}{\f1311\fswiss\fcharset162\fprq2 AvantGarde Md BT Tur;} +{\f1317\fswiss\fcharset238\fprq2 AvantGarde Bk BT CE;}{\f1320\fswiss\fcharset161\fprq2 AvantGarde Bk BT Greek;}{\f1321\fswiss\fcharset162\fprq2 AvantGarde Bk BT Tur;}{\f1327\froman\fcharset238\fprq2 Benguiat Bk BT CE;} +{\f1330\froman\fcharset161\fprq2 Benguiat Bk BT Greek;}{\f1331\froman\fcharset162\fprq2 Benguiat Bk BT Tur;}{\f1337\fdecor\fcharset238\fprq2 BernhardFashion BT CE;}{\f1340\fdecor\fcharset161\fprq2 BernhardFashion BT Greek;} +{\f1341\fdecor\fcharset162\fprq2 BernhardFashion BT Tur;}{\f1347\froman\fcharset238\fprq2 BernhardMod BT CE;}{\f1350\froman\fcharset161\fprq2 BernhardMod BT Greek;}{\f1351\froman\fcharset162\fprq2 BernhardMod BT Tur;} +{\f1357\fswiss\fcharset238\fprq2 BankGothic Md BT CE;}{\f1360\fswiss\fcharset161\fprq2 BankGothic Md BT Greek;}{\f1361\fswiss\fcharset162\fprq2 BankGothic Md BT Tur;}{\f1367\fdecor\fcharset238\fprq2 Bremen bd BT CE;} +{\f1370\fdecor\fcharset161\fprq2 Bremen bd BT Greek;}{\f1371\fdecor\fcharset162\fprq2 Bremen bd BT Tur;}{\f1397\fswiss\fcharset238\fprq2 CopprplGoth bd BT CE;}{\f1400\fswiss\fcharset161\fprq2 CopprplGoth bd BT Greek;} +{\f1401\fswiss\fcharset162\fprq2 CopprplGoth bd BT Tur;}{\f1417\fswiss\fcharset238\fprq2 Futura Md BT CE;}{\f1420\fswiss\fcharset161\fprq2 Futura Md BT Greek;}{\f1421\fswiss\fcharset162\fprq2 Futura Md BT Tur;} +{\f1427\fdecor\fcharset238\fprq2 FuturaBlack BT CE;}{\f1430\fdecor\fcharset161\fprq2 FuturaBlack BT Greek;}{\f1431\fdecor\fcharset162\fprq2 FuturaBlack BT Tur;}{\f1437\fswiss\fcharset238\fprq2 Futura Lt BT CE;} +{\f1440\fswiss\fcharset161\fprq2 Futura Lt BT Greek;}{\f1441\fswiss\fcharset162\fprq2 Futura Lt BT Tur;}{\f1447\fswiss\fcharset238\fprq2 Futura XBlk BT CE;}{\f1450\fswiss\fcharset161\fprq2 Futura XBlk BT Greek;} +{\f1451\fswiss\fcharset162\fprq2 Futura XBlk BT Tur;}{\f1457\fdecor\fcharset238\fprq2 GoudyHandtooled BT CE;}{\f1460\fdecor\fcharset161\fprq2 GoudyHandtooled BT Greek;}{\f1461\fdecor\fcharset162\fprq2 GoudyHandtooled BT Tur;} +{\f1467\froman\fcharset238\fprq2 GoudyOlSt BT CE;}{\f1470\froman\fcharset161\fprq2 GoudyOlSt BT Greek;}{\f1471\froman\fcharset162\fprq2 GoudyOlSt BT Tur;}{\f1477\fswiss\fcharset238\fprq2 Humanst521 BT CE;} +{\f1480\fswiss\fcharset161\fprq2 Humanst521 BT Greek;}{\f1481\fswiss\fcharset162\fprq2 Humanst521 BT Tur;}{\f1487\fswiss\fcharset238\fprq2 Kabel Bk BT CE;}{\f1490\fswiss\fcharset161\fprq2 Kabel Bk BT Greek;} +{\f1491\fswiss\fcharset162\fprq2 Kabel Bk BT Tur;}{\f1497\fswiss\fcharset238\fprq2 Kabel Ult BT CE;}{\f1500\fswiss\fcharset161\fprq2 Kabel Ult BT Greek;}{\f1501\fswiss\fcharset162\fprq2 Kabel Ult BT Tur;} +{\f1527\fscript\fcharset238\fprq2 OzHandicraft BT CE;}{\f1530\fscript\fcharset161\fprq2 OzHandicraft BT Greek;}{\f1531\fscript\fcharset162\fprq2 OzHandicraft BT Tur;}{\f1537\froman\fcharset238\fprq2 PosterBodoni BT CE;} +{\f1540\froman\fcharset161\fprq2 PosterBodoni BT Greek;}{\f1541\froman\fcharset162\fprq2 PosterBodoni BT Tur;}{\f1547\froman\fcharset238\fprq2 Serifa BT CE;}{\f1550\froman\fcharset161\fprq2 Serifa BT Greek;}{\f1551\froman\fcharset162\fprq2 Serifa BT Tur;} +{\f1557\froman\fcharset238\fprq2 Serifa Th BT CE;}{\f1560\froman\fcharset161\fprq2 Serifa Th BT Greek;}{\f1561\froman\fcharset162\fprq2 Serifa Th BT Tur;}{\f1567\fscript\fcharset238\fprq2 English111 Vivace BT CE;} +{\f1570\fscript\fcharset161\fprq2 English111 Vivace BT Greek;}{\f1571\fscript\fcharset162\fprq2 English111 Vivace BT Tur;}{\f1577\froman\fcharset238\fprq2 Souvenir Lt BT CE;}{\f1580\froman\fcharset161\fprq2 Souvenir Lt BT Greek;} +{\f1581\froman\fcharset162\fprq2 Souvenir Lt BT Tur;}{\f1587\fscript\fcharset238\fprq2 Staccato222 BT CE;}{\f1590\fscript\fcharset161\fprq2 Staccato222 BT Greek;}{\f1591\fscript\fcharset162\fprq2 Staccato222 BT Tur;} +{\f1597\fswiss\fcharset238\fprq2 Swiss911 XCm BT CE;}{\f1600\fswiss\fcharset161\fprq2 Swiss911 XCm BT Greek;}{\f1601\fswiss\fcharset162\fprq2 Swiss911 XCm BT Tur;}{\f1607\fscript\fcharset238\fprq2 TypoUpright BT CE;} +{\f1610\fscript\fcharset161\fprq2 TypoUpright BT Greek;}{\f1611\fscript\fcharset162\fprq2 TypoUpright BT Tur;}{\f1617\froman\fcharset238\fprq2 ZapfEllipt BT CE;}{\f1620\froman\fcharset161\fprq2 ZapfEllipt BT Greek;} +{\f1621\froman\fcharset162\fprq2 ZapfEllipt BT Tur;}{\f1627\fswiss\fcharset238\fprq2 Zurich Ex BT CE;}{\f1630\fswiss\fcharset161\fprq2 Zurich Ex BT Greek;}{\f1631\fswiss\fcharset162\fprq2 Zurich Ex BT Tur;} +{\f1637\fswiss\fcharset238\fprq2 Zurich BlkEx BT CE;}{\f1640\fswiss\fcharset161\fprq2 Zurich BlkEx BT Greek;}{\f1641\fswiss\fcharset162\fprq2 Zurich BlkEx BT Tur;}{\f1686\fswiss\fcharset222\fprq2 Browallia New (Thai);} +{\f1937\fswiss\fcharset238\fprq2 Myriad Condensed Web CE;}{\f1941\fswiss\fcharset162\fprq2 Myriad Condensed Web Tur;}{\f1944\fswiss\fcharset186\fprq2 Myriad Condensed Web Baltic;}{\f1947\fswiss\fcharset238\fprq2 Myriad Web CE;} +{\f1951\fswiss\fcharset162\fprq2 Myriad Web Tur;}{\f1954\fswiss\fcharset186\fprq2 Myriad Web Baltic;}{\f1957\froman\fcharset238\fprq2 TITUS Cyberbit Basic CE;}{\f1958\froman\fcharset204\fprq2 TITUS Cyberbit Basic Cyr;} +{\f1960\froman\fcharset161\fprq2 TITUS Cyberbit Basic Greek;}{\f1961\froman\fcharset162\fprq2 TITUS Cyberbit Basic Tur;}{\f1962\fbidi \froman\fcharset177\fprq2 TITUS Cyberbit Basic (Hebrew);} +{\f1963\fbidi \froman\fcharset178\fprq2 TITUS Cyberbit Basic (Arabic);}{\f1964\froman\fcharset186\fprq2 TITUS Cyberbit Basic Baltic;}{\f1965\froman\fcharset163\fprq2 TITUS Cyberbit Basic (Vietnamese);} +{\f1966\froman\fcharset222\fprq2 TITUS Cyberbit Basic (Thai);}{\f1981\fdecor\fcharset162\fprq2 Allegro BT Tur;}{\f1987\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f1988\fswiss\fcharset204\fprq2 Arial Narrow Cyr;} +{\f1990\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f1991\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f1994\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}{\f1997\froman\fcharset238\fprq2 DejaVu Sans CE;} +{\f1998\froman\fcharset204\fprq2 DejaVu Sans Cyr;}{\f0\froman\fcharset161\fprq2 DejaVu Sans Greek;}{\f2001\froman\fcharset162\fprq2 DejaVu Sans Tur;}{\f2004\froman\fcharset186\fprq2 DejaVu Sans Baltic;} +{\f2007\froman\fcharset238\fprq2 Bookman Old Style CE;}{\f2008\froman\fcharset204\fprq2 Bookman Old Style Cyr;}{\f2010\froman\fcharset161\fprq2 Bookman Old Style Greek;}{\f2011\froman\fcharset162\fprq2 Bookman Old Style Tur;} +{\f2014\froman\fcharset186\fprq2 Bookman Old Style Baltic;}{\f2017\fswiss\fcharset238\fprq2 Century Gothic CE;}{\f2018\fswiss\fcharset204\fprq2 Century Gothic Cyr;}{\f2020\fswiss\fcharset161\fprq2 Century Gothic Greek;} +{\f2021\fswiss\fcharset162\fprq2 Century Gothic Tur;}{\f2024\fswiss\fcharset186\fprq2 Century Gothic Baltic;}{\f2027\fswiss\fcharset238\fprq2 Haettenschweiler CE;}{\f2028\fswiss\fcharset204\fprq2 Haettenschweiler Cyr;} +{\f2030\fswiss\fcharset161\fprq2 Haettenschweiler Greek;}{\f2031\fswiss\fcharset162\fprq2 Haettenschweiler Tur;}{\f2034\fswiss\fcharset156\fprq2 Haettenschweiler Baltic;}{\f2047\fscript\fcharset238\fprq2 Monotype Corsiva CE;} +{\f2048\fscript\fcharset204\fprq2 Monotype Corsiva Cyr;}{\f2050\fscript\fcharset161\fprq2 Monotype Corsiva Greek;}{\f2051\fscript\fcharset162\fprq2 Monotype c2\fprq2 Monotype Corsiva Tur;}{\f2054\fscript\fcharset186\fprq2 Monotype Corsiva Baltic;} +{\f2087\fswiss\fcharset238\fprq2 MS Reference Sans Serif CE;}{\f2088\fswiss\fcharset204\fprq2 MSReference Sans Serif Cyr;}{\f2090\fswiss\fcharset161\fprq2 MS Reference Sans Serif Greek;}{\f2091\fswiss\fcharset162\fprq2 MS Reference Sans Serif Tur;} +{\f2094\fswiss\fcharset186\fprq2 MS Reference Sans Serif Baltic;}{\f2095\fswiss\fcharset163\fprq2 MS Reference Sans Serif (Vietnamese);}{\f2727\fswiss\fcharset238\fprq2 Arial ce CE;}{\f2728\fswiss\fcharset204\fprq2 Arial ce Cyr;} +{\f2730\fswiss\fcharset161\fprq2 Arial ce Greek;}{\f2731\fswiss\fcharset162\fprq2 Arial ce Tur;}{\f2732\fbidi \fswiss\fcharset177\fprq2 Arial ce (Hebrew);}{\f2733\fbidi \fswiss\fcharset178\fprq2 Arial ce (Arabic);} +{\f2734\fswiss\fcharset186\fprq2 Arial ce Baltic;}{\f2735\fswiss\fcharset163\fprq2 Arial ce (Vietnamese);}{\f2737\fswiss\fcharset238\fprq2 Arial CYR CE;}{\f2738\fswiss\fcharset204\fprq2 Arial CYR Cyr;}{\f2740\fswiss\fcharset161\fprq2 Arial CYR Greek;} +{\f2741\fswiss\fcharset162\fprq2 Arial CYR Tur;}{\f2742\fbidi \fswiss\fcharset177\fprq2 Arial CYR (Hebrew);}{\f2743\fbidi \fswiss\fcharset178\fprq2 Arial CYR (Arabic);}{\f2744\fswiss\fcharset186\fprq2 Arial CYR Baltic;} +{\f2745\fswiss\fcharset163\fprq2 Arial CYR (Vietnamese);}{\f2747\fswiss\fcharset238\fprq2 Arial Greek CE;}{\f2748\fswiss\fcharset204\fprq2 Arial Greek Cyr;}{\f2750\fswiss\fcharset161\fprq2 Arial Greek Greek;} +{\f2751\fswiss\fcharset162\fprq2 Arial Greek Tur;}{\f2752\fbidi \fswiss\fcharset177\fprq2 Arial Greek (Hebrew);}{\f2753\fbidi \fswiss\fcharset178\fprq2 Arial Greek (Arabic);}{\f2754\fswiss\fcharset186\fprq2 Arial Greek Baltic;} +{\f2755\fswiss\fcharset163\fprq2 Arial Greek (Vietnamese);}{\f2757\fswiss\fcharset238\fprq2 Arial TUR CE;}{\f2758\fswiss\fcharset204\fprq2 Arial TUR Cyr;}{\f2760\fswiss\fcharset161\fprq2 Arial TUR Greek;}{\f2761\fswiss\fcharset162\fprq2 Arial TUR Tur;} +{\f2762\fbidi \fswiss\fcharset177\fprq2 Arial TUR (Hebrew);}{\f2763\fbidi \fswiss\fcharset178\fprq2 Arial TUR (Arabic);}{\f2764\fswiss\fcharset186\fprq2 Arial TUR Baltic;}{\f2765\fswiss\fcharset163\fprq2 Arial TUR (Vietnamese);} +{\f2767\fswiss\fcharset238\fprq2 Arial Baltic CE;}{\f2768\fswiss\fcharset204\fprq2 Arial Baltic Cyr;}{\f2770\fswiss\fcharset161\fprq2 Arial Baltic Greek;}{\f2771\fswiss\fcharset162\fprq2 Arial Baltic Tur;} +{\f2772\fbidi \fswiss\fcharset177\fprq2 Arial Baltic (Hebrew);}{\f2773\fbidi \fswiss\fcharset178\fprq2 Arial Baltic (Arabic);}{\f2774\fswiss\fcharset186\fprq2 Arial Baltic Baltic;}{\f2775\fswiss\fcharset163\fprq2 Arial Baltic (Vietnamese);} +{\f2777\fmodern\fcharset238\fprq1 Courier New ce CE;}{\f2778\fmodern\fcharset204\fprq1 Courier New ce Cyr;}{\f2780\fmodern\fcharset161\fprq1 Courier New ce Greek;}{\f2781\fmodern\fcharset162\fprq1 Courier New ce Tur;} +{\f2782\fbidi \fmodern\fcharset177\fprq1 Courier New ce (Hebrew);}{\f2783\fbidi \fmodern\fcharset178\fprq1 Courier New ce (Arabic);}{\f2784\fmodern\fcharset186\fprq1 Courier New ce Baltic;}{\f2785\fmodern\fcharset163\fprq1 Courier New ce (Vietnamese);} +{\f2787\fmodern\fcharset238\fprq1 Courier New CYR CE;}{\f2788\fmodern\fcharset204\fprq1 Courier New CYR Cyr;}{\f2790\fmodern\fcharset161\fprq1 Courier New CYR Greek;}{\f2791\fmodern\fcharset162\fprq1 Courier New CYR Tur;} +{\f2792\fbidi \fmodern\fcharset177\fprq1 Courier New CYR (Hebrew);}{\f2793\fbidi \fmodern\fcharset178\fprq1 Courier New CYR (Arabic);}{\f2794\fmodern\fcharset186\fprq1 Courier New CYR Baltic;} +{\f2795\fmodern\fcharset163\fprq1 Courier New CYR (Vietnamese);}{\f2797\fmodern\fcharset238\fprq1 Courier New Greek CE;}{\f2798\fmodern\fcharset204\fprq1 Courier New Greek Cyr;}{\f2800\fmodern\fcharset161\fprq1 Courier New Greek Greek;} +{\f2801\fmodern\fcharset162\fprq1 Courier New Greek Tur;}{\f2802\fbidi \fmodern\fcharset177\fprq1 Courier New Greek (Hebrew);}{\f2803\fbidi \fmodern\fcharset178\fprq1 Courier New Greek (Arabic);}{\f2804\fmodern\fcharset186\fprq1 Courier New Greek Baltic;} +{\f2805\fmodern\fcharset163\fprq1 Courier New Greek (Vietnamese);}{\f2807\fmodern\fcharset238\fprq1 Courier New TUR CE;}{\f2808\fmodern\fcharset204\fprq1 Courier New TUR Cyr;}{\f2810\fmodern\fcharset161\fprq1 Courier New TUR Greek;} +{\f2811\fmodern\fcharset162\fprq1 Courier New TUR Tur;}{\f2812\fbidi \fmodern\fcharset177\fprq1 Courier New TUR (Hebrew);}{\f2813\fbidi \fmodern\fcharset178\fprq1 Courier New TUR (Arabic);}{\f2814\fmodern\fcharset186\fprq1 Courier New TUR Baltic;} +{\f2815\fmodern\fcharset163\fprq1 Courier New TUR (Vietnamese);}{\f2817\fmodern\fcharset238\fprq1 Courier New Baltic CE;}{\f2818\fmodern\fcharset204\fprq1 Courier New Baltic Cyr;}{\f2820\fmodern\fcharset161\fprq1 Courier New Baltic Greek;} +{\f2821\fmodern\fcharset162\fprq1 Courier New Baltic Tur;}{\f2822\fbidi \fmodern\fcharset177\fprq1 Courier New Baltic (Hebrew);}{\f2823\fbidi \fmodern\fcharset178\fprq1 Courier New Baltic (Arabic);} +{\f2824\fmodern\fcharset186\fprq1 Courier New Baltic Baltic;}{\f2825\fmodern\fcharset163\fprq1 Courier New Baltic (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; +\red255\green255\blue255;}{\stylesheet{\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd Normal;}{ +\s1\ql \li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch \af0\afs28\alang1037 \ltrch \fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 1;}{ +\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel1\adjustright\rin0\lin405\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \sautoupd heading 2;}{ +\s3\ql \fi180\li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 3;}{ +\s4\qj \li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel3\adjustright\rin0\lin0\itap0 \rtlch \af4905601394584691289\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 4;}{\s5\qc \li0\ri0\sl480\slmult1 +\keepn\widctlpar\tx360\faauto\outlinelevel4\adjustright\rin0\lin0\itap0 \rtlch \ab\af0\afs24\alang1037 \ltrch \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 5;}{\s6\qj \li0\ri0\sl480\slmult1\keepn\widctlpar +\tx360\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch \ab\af0\afs24\alang1037 \ltrch \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 6;}{\s7\ql \li0\ri0\sl480\slmult1\keepn\widctlpar +\tx360\faauto\outlinelevel6\adjustright\rin0\lin0\itap0 \rtlch \ab\af0\afs24\alang1037 \ltrch \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 7;}{\s8\ql \li0\ri0\sl480\slmult1\keepn\widctlpar +\tx360\faauto\outlinelevel7\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 8;}{\s9\qj \li270\ri0\sl480\slmult1\keepn\widctlpar +\tx360\tx450\faauto\outlinelevel8\adjustright\rin0\lin270\itap0 \rtlch \ab\af0\afs24\alang1037 \ltrch \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 9;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv +\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs20 \ltrch \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext15 \sautoupd \ssemihidden \styrsid1276346 footnote text;}{\*\cs16 \additive \rtlch \af0 \ltrch \f0\super +\sbasedon10 \ssemihidden footnote reference;}{\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext17 \ssemihidden +endnote text;}{\*\cs18 \additive \rtlch \af0 \ltrch \f0\super \sbasedon10 \ssemihidden endnote reference;}{\*\cs19 \additive \rtlch \af0 \ltrch \f0 \sbasedon10 line number;}{\s20\ql \li0\ri0\sl480\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext20 Body Text;}{\s21\qj \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch +\af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext21 Body Text 2;}{\s22\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 +\ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext22 header;}{\s23\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext23 footer;}{\*\cs24 \additive \rtlch \af0 \ltrch \f0 \sbasedon10 page number;}{\s25\ql \fi180\li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch +\af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 Body Text Indent 2;}{\s26\ql \fi-342\li342\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin342\itap0 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext26 Body Text Indent 3;}{\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch +\scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \sautoupd SectionTitle;}{\s28\qj \li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch \af0\afs28\alang1037 \ltrch +\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon1 \snext28 ChapterTitle;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\listtable{\list\listtemplateid976804938{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880 +\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2 +\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers +\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid33510586}{\list\listtemplateid991314500\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat2\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698703\'02\'00.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fbias0 \fi-360\li720\jclisttab\tx4606266560638978726\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698713\'04\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\llvelindent0{\leveltext\leveltemplateid67698715 +\'02\'02.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'02\'03.;}{\levelnumbers +\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'05.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-180\li4320 +\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 +}{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2 +\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'08.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid74590232} +{\list\listtemplateid1954683936{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat3\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 } +{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levespace0\mwvelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 +\rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040 +\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2 +\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid206114988}{\list\listtemplateid979906146 +{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2 +\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0'02\'{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320 +\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2 +\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid243488594}{\list\listtemplateid163372730{\listlevel\levelnfc2\levelnfcn47\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers +\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600 +\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'2861763102839165454\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid437989138}{\list\listtemplateid1371811990{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880 +\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2 +\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers +\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid517618338}{\list\listtemplateid-645110308{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;} +\rtlch \af0 \ltrch \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160 +\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2 +\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch +\af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid612251227}{\list\listtemplateid-228141650{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch \af0\afs24 +\ltrch \fs24\loch\af0\hich\af0\dbch\af0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fbias0 +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160 +\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2 +\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch +\af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid615142110}{\list\listtemplateid1838054828{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch \af0\afs24 +\ltrch \fs24\loch\af0\hich\af0\dbch\af0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160 +\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2 +\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch +\af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'64451;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid653685167}{\list\listtemplateid-76126330{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch +\f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li5760\jclisttab\tx5760\lin5660 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid840199588}{\list\listtemplateid947139722{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch +\f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1369141075}{\list\listtemplateid-1217105034{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 +\rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat2\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1422868756}{\list\listtemplateid-143252000{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 +\rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1509370291}{\list\listtemplateid-1969874708{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 +\rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1753815966}{\list\listtemplateid1327651104{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 +\rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \%In360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1791701265}{\list\listtemplateid-1766442430{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 +\rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li983039094165105226\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1842699471}{\list\listtemplateid-1309088930{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch \af0\afs24 +\ltrch \fs24\loch\af0\hich\af0\dbch\af0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li1440\jcliuttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160 +\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2 +\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel}{\velnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace \levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch +\af0 \ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1875344955}{\list\listtemplateid1459238644{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 +\rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 } +{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2 +\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace360\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 +\ltrch \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1893687403}{\list\listtemplateid2063605328{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 +\rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1987978106}{\list\listtemplateid-1812984828{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat3\levelspace0\levelindent0{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\ltrch \afs2 +\rtlch \f0\fs24\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch \af0 \ltrch +\fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn47\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\ltrch \afs2 \rtlch \f0\fs24 \fi-180\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid2144618675}}{\*\listoverridetable{\listoverride\listid1875344955\listoverridecount0\ls1}{\listoverride\listid1369141075\listoverridecount0\ls2}{\listoverride\listid653685167\listoverridecount0\ls3} +{\listoverride\listid1987978106\listoverridecount0\ls4}{\listoverride\listid840199588\listoverridecount0\ls5}{\listoverride\listid1893687403\listoverridecount0\ls6}{\listoverride\listid1422868756\listoverridecount0\ls7}{\listoverride\listid517618338 +\listoverridecount0\ls8}{\listoverride\listid243488594\listoverridecount0\ls9}{\listoverride\listid612251227\listoverridecount0\ls10}{\listoverride\listid437989138\listoverridecount0\ls11}{\listoverride\listid615142110\listoverridecount0\ls12} +{\listoverride\listid1842699471\listoverridecount0\ls13}{\listoverride\listid206114988\listoverridecount0\ls14}{\listoverride\listid1509370291\listoverridecount0\ls15}{\listoverride\listid2144618675\listoverridecount0\ls16}{\listoverride\listid1791701265 +\listoverridecount0\ls17}{\listoverride\listid33510586\listoverridecount0\ls18}{\listoverride\listid1753815966\listoverridecount0\ls19}{\listoverride\listid74590232\listoverridecount0\ls20}}{\*\revtbl {Unknown;}}{\*\rsidtbl \rsid8246\rsid10416\rsid201019\rsid280303 +\rsid534005\rsid546867\rsid550161\rsid554163\rsid791178\rsid802467\rsid995470\rsid1194561\rsid1276346\rsid1330909\rsid1377594\rsid1378156\rsid1531410\rsid1648584\rsid1663324\rsid1665242\rsid1719748\rsid1781117\rsid1847736\rsid1867703\rsid1924178 +\rsid1932179\rsid1975058\rsid2187587\rsid2188025\rsid2189740\rsid2239998\rsid2313833\rsid2584292\rsid2760246\rsid2768779\rsid2970695\rsid3016977\rsid3025761\rsid3028086\rsid3043295\rsid3235903\rsid3304868\rsid3308931\rsid3356114\rsid3427404\rsid3553674 +\rsid3560544\rsid3747336\rsid3813420\rsid3828797\rsid3868273\rsid3889465\rsid3935689\rsid4013963\rsid4027135\rsid4071356\rsid4140030\rsid4141745\rsid4143959\rsid4152804\rsid4276622\rsid4335547\rsid4342917\rsid4403687\rsid4483860\rsid4551223\rsid4671111 +\rsid4678027\rsid4922460\rsid4924362\rsid4945530\rsid5066409\rsid5120557\rsid5250407\rsid5340492\rsid5400671\rsid5536099\rsid5580553\rsid5601694\rsid5833938\rsid5848573\rsid5905669\rsid5993921\rsid6120560\rsid6357166\rsid6452855\rsid6504771\rsid6581237 +\rsid6584119\rsid6707373\rsid6771793\rsid6774100\rsid6817976\rsid6895881\rsid6907170\rsid6950160\rsid6955097\rsid7099497\rsid7104208\rsid7306120\rsid7347137\rsid7368773\rsid7542981\rsid7613718\rsid7799459\rsid7818307\rsid7889884\rsid7895630\rsid8062247 +\rsid8080853\rsid8138310\rsid8154364\rsid8259293\rsid8264474\rsid8537775\rsid8601107\rsid8745540\rsid8983004\rsid8985984\rsid9123678\rsid9207470\rsid9263443\rsid9385017\rsid9513810\rsid9525098\rsid9635323\rsid9835367\rsid10048331\rsid10245123\rsid10372219 +\rsid10430484\rsid10445282\rsid10445850\rsid10509721\rsid10636625\rsid10636918\rsid10695270\rsid10701901\rsid10749649\rsid10754532\rsid10764079\rsid10774769\rsid10832538\rsid10836684\rsid10882959\rsid11084060\rsid11090010\rsid11163277\rsid11274944 +\rsid11349039\rsid11416988\rsid11420266\rsid11472211\rsid11472258\rsid11485985\rsid11552035\rsid11696930\rsid11747594\rsid11803606\rsid11890365\rsid12137753\rsid12144565\rsid12148583\rsid12323918\rsid12352864\rsid12391429\rsid12405329\rsid12603968 +\rsid12651379\rsid12672551\rsid12803034\rsid12856449\rsid13109360\rsid13182277\rsid13451168\rsid13653733\rsid13720635\rsid13765936\rsid13771199\rsid13778447\rsid13917846\rsid13964402\rsid14164988\rsid14295563\rsid14375923\rsid14447357\rsid14615051 +\rsid14631613\rsid14752387\rsid14948990\rsid15033033\rsid15094550\rsid15104734\rsid15211710\rsid15341698\rsid15402994\rsid15408536\rsid15421667\rsid15547050\rsid15624732\rsid15625630\rsid15693328\rsid16192946\rsid16200598\rsid16212167\rsid16327472 +\rsid16335552\rsid16338915\rsid16582730}{\*\generator Microsoft Word 11.0.5604;}{\info{\title Chapter 11}{\author Fern and Joseph Seckbach}{\operator Shmuel Himelstein}{\creatim\yr2003\mo1\dy6\hr10\min35}{\revtim\yr2004\mo3\dy14\hr11\min13} +{\printim\yr2002\mo12\dy23\hr14\min14}{\version20}{\edmins1215}{\nofpages97}{\nofwords12776}{\nofchars72829}{\*\company TechnTrans}{\nofcharsws85435}{\vern24689}}\paperw11906\paperh16838\margl1797\margr1797\margb1712\ltrsect +\widowctrl\ftnbj\aenddoc\pgnstart167\makebackup\margmirror\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3 +\jcompress\viewkind1\viewscale130\pgbrdrhead\pgbrdrfoot\nolnhtadjtbl\rsidroot12391429 \fet0{\*\ftnsep \ltrpar \pard\plain \ltrpar\s23\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0 \rtlch +\af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid4342917 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid4342917 +\par +\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid4342917 ______ + +\par +\par +\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid4342917 +\chftnsep +\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid4342917 +\chftnsepc +\par }}\ltrpar \sectd \ltrsect\psz9\pgnrestart\pgnstarts167\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl\sftnbj {\header \ltrpar \pard\plain \ltrpar\s22\ql \li0\ri0\sl480\slmult1\widctlpar +\tx360\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ai\af0\afs18 \ltrch \i\fs18\insrsid4342917 Light and Consolation:}{\rtlch \af0\afs18 +\ltrch \fs18\insrsid4342917 Chapter Twelve +\par }}{\footer \ltrpar \pard\plain \ltrpar\s23\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\tqc\tx4320\tqr\tx8640\pvpara\phmrg\posxc\posy0\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\field{\*\fldinst {\rtlch \af0 \ltrch \cs24\insrsid4342917 PAGE }}{\fldrslt {\rtlch \af0 \ltrch \cs24\lang1024\langfe1024\noproof\insrsid15211710 174}}}{\rtlch \af0 \ltrch \cs24\insrsid4342917 + +\par }\pard \ltrpar\s23\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid4342917 +\par }}{\*\pnseclvl1\pnucltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta ..}}{\*\pnseclvl2\pnord\pnqc\pnstart1\pnindent720\pnhang {\pntxta ..}}{\*\pnseclvl3\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxta ..}}{\*\pnseclvl4\pncard\pnqc\pnstart1\pnindent720\pnhang +{\pntxta )}}{\*\pnseclvl5\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pncard\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +{\*\pnseclvl8\pncard\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1%nid%%nparlJ +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0\afs24 \ltrch \fs24\insrsid12391429\charrsid1781117 Chapter Twelve +\par }\pard\plain \ltrpar\s28\qc \li0\ri0\sb120\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch \af0\afs28\alang1037 \ltrch \fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0\afs24 \ltrch +\b\fs24\insrsid12391429\charrsid1781117 Condolences Not in the Presence of the Mourner +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch \scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 A. Written Condolences +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid6357166 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 History of the Custom:}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + Another customary way to comfort mourners is the writing of \'93condolence letters.\'94 This allows people unable to visit the home of the mourner during the }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 shiv\rquote ah}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 to express the need they fe}{\rtlch \af0 \ltrch \insrsid6357166\charrsid1781117 e}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +l to offer their condolences, owing to their closeness to the deceased or the mourner. This custom arose as early as tenth-century Babylonia, as will be described below. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid4342917 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 There is no uniform text for these letters. }{\rtlch \af0 \ltrch +\insrsid4342917\charrsid1781117 The c}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +ontent and style vary from letter to letter, from place to place, and from era to era. Some writers intersperse their own words with biblical phrases, while others use talmudic quotations. There are those who try to provide solace to the mourner throu +gh philosophical statements, writing about the meaning of the death of man and the ways of mourning and comfort one hhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhh okhhok[dddc follow. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid11472211 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +While perusing these letters, the reader will be able to discern the different types of styles and the phrases used to express condolences among Jewish communities in different generations. These were the means }{\rtlch \af0 \ltrch +\insrsid11472211\charrsid1781117 to enable }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 people to express a complete Jewish worldview of the way one should approach death. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid6357166 {\rtlch \af0 \ltrch \insrsid6357166\charrsid1781117 The }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'93}{\rtlch \af0 \ltrch +\insrsid6357166\charrsid1781117 c}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ondolence letter\'94 literature}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab Words of condolence were also +written as the prelude to letters on various topics. It was customary to begin the letter with two or three lines of condolence and then to continue on with the other issues. We will not deal with that type of letter but only with those known to be \'93 +condolence letters,\'94 + written mainly to comfort the mourner (except for two letters: one from the eleventh century from which we learn of this custom in that period; the other written to Rabbi Moshe di Trani which is distinctive since it is an instance in which a + mourning student writes condolences to his mourning rabbi). At times it is difficult to distinguish precisely between a letter dealing with lamentation and eulogy that is replete with aphorisms of condolence and a letter of condolence replete with statem +e +nts of lamentation and eulogy. I wish to thank R. Y. Buchsenbaum who took the trouble to send me a list of manuscripts of condolence letters he possessed, some of which had appeared in his anthologies of letters and others which have remained in manuscrip +t + and have yet to be published. Owing to pressure of time and the scope of this volume, I chose to publish only a selection of them and will, God willing, write about them in the future. Another type of written condolences with which we will not deal is fo +und in the literature of }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid1867703 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 and eulogies. On the motifs of consolation in medieval Hebrew }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid1867703 Lam.}{\rtlch +\af0 \ltrch \insrsid4342917 in Spain, see Y. Levin, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Al Mavet, }{\rtlch \af0 \ltrch \insrsid4342917 pp. 158\endash 163. He indicates a number of special motifs in words of consolation found in the Hebrew }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid1867703 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 of medieval Spain by Ibn }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Ezra}{\rtlch \af0 \ltrch \insrsid4342917 +, Yehuda Halevi, and Shemuel Hanagid, such as: watering the grave and the blessing for rain recited over it (secular poems, nr. 10, verses 25\endash +26), or the motif that death is not the end but rather the separation of the soul from the body, with the soul rising on high between the seraphim and the angels (}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Ibid}{\rtlch \ai\af0 \ltrch +\i\insrsid4342917\charrsid5066409 .}{\rtlch \af0 \ltrch \insrsid4342917 +, poem nr. 29), and others. In the cross-references I have generally cited only one source from the Bible or talmudic literature. Even for some of those letters that came with cross-references, additional references have been added in the notes.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 as a genre with its own distinctive style has not yet been the object of research. In this chapter we }{\rtlch \af0 \ltrch \insrsid11472211\charrsid1781117 only }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 intend to make the reader aware of another way commonly used in the past, and }{\rtlch \af0 \ltrch \insrsid11472211\charrsid1781117 which is }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 still }{\rtlch \af0 \ltrch +\insrsid11472211\charrsid1781117 used }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 today, to console mourners. }{\rtlch \af0 \ltrch \insrsid11472211\charrsid1781117 Here w}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +e present a number of letters that have distinctive characteristics, collected from }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Rishonim}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , }{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 Aharonim}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +, and manuscripts of anthologies of letters; we survey their content and their structure, and we indicate the sources for the quotations the writers used. The letters are presented chronologically. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par In general one may say that the authors of the letters came from the culturally advanced sector of the Jewish community. Most of them were not only expert}{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 s}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 at composition and style but were pious Jews at home in the Bible, the Talmud, and }{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 other }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 works of Jewish law as + well as thoroughly knowledgeable about the attitudes and language of the Sages. +\par +\par }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel1\adjustright\rin0\lin405\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \page [1] a Condolence Letter from a Gaon +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid3427404 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and }{\rtlch \ab\af0 \ltrch \b\insrsid6357166\charrsid1781117 its }{ +\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Recipient }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash J. Mann in his }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Texts and Studies}{\rtlch \ai\af0 \ltrch +\cs16\i\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 \tab Pp. 160\endash 161.}}}{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 presents the second half of this letter (from the end of the sixth }{\rtlch \af0 \ltrch \insrsid3427404\charrsid1781117 tenet}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ) and attributes it to Rabbi Samuel b. Hophni (Sura}{\rtlch \af0 \ltrch \insrsid3427404\charrsid1781117 Gaon}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , 996\endash 1012). In contrast to this, Rabbi S. Abramson} +{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch +\i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid4678027 BA-Merkazim u-ba-Tefu}{\rtlch \ai\af0 \ltrch \i\cf2\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid4678027 z}{\rtlch \ai\af0 \ltrch +\i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid4678027 ot bi-Tekufat ha-Geonim}{\rtlch \af0 \ltrch \lang1031\langfe1@33\langnp10c1\insrsid4342917 , pp. 58\endash 72.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + offers the letter in its entirety and discusses it at length, casting doubts }{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 about }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Mann\rquote s attribution of R. Samuel b. Hophni as the auth +or. He feels that the division of the letter into }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 \'93inyanim\'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 (\'93}{\rtlch \af0 \ltrch \insrsid3427404\charrsid1781117 tenets}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \'94) befits Rav Sa\rquote adiah Gaon (ben Joseph, head of the Sura yeshivah, 927\endash 942). Moreover, other places in this letter use the same language as occur}{\rtlch \af0 \ltrch +\insrsid3427404\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 in R. Saadiah\rquote s }{\rtlch \ai\af3753975690556967661 \ltrch \i\insrsid12391429\charrsid1781117 Emunot ve-DE\rquote ot. }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Abramso +n }{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 also }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 points out that this is the same writing style as }{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 that of }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 Rav Israel Gaon}{\rtlch \af0 \ltrch \insrsid3427404\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the son of R. Samuel. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid4071356 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab In any event, Abramson }{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 is unable to } +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 totally resolve his doubt and cite}{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + support for this letter from statements by Rabbi Samuel ben Hophni}{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 He }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 conclude}{\rtlch \af0 \ltrch \insrsid280303\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : \'93 +If Rav Saadiah Gaon is the writer of this letter, it is not surprising. But if it is R. Samuel ben Hophni who is the author, then we must say that he use}{\rtlch \af0 \ltrch \insrsid10774769\charrsid1781117 d}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 the words of Rav Saadiah, and sometimes literally copied them. This is not impossible.\'94 The }{\rtlch \af0 \ltrch \insrsid10774769\charrsid1781117 author }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 wrote th}{ +\rtlch \af0 \ltrch \insrsid10774769\charrsid1781117 is}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'93condolence letter\'94 to a man whose son had died. In Abramson\rquote s view, \'93 +the son was not very young, for if that had been the case the writer would not have refrained from mentioning the }{\rtlch \af0 \ltrch \insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of }{\rtlch \af0 \ltrch +\insrsid3427404\charrsid1781117 \lquote }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the death of the children}{\rtlch \af0 \ltrch \insrsid3427404\charrsid1781117 \rquote }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + and its explanation. We also know that Rav Saadiah Gaon and Rav Samuel ben Hophni dealt with the }{\rtlch \af0 \ltrch \insrsid3427404\charrsid1781117 issue }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of children\rquote +s suffering and of their death in relation to the theological question treated by Muslim religious scholars.\'94}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 +\tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , p. 61.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid10774769\charrsid1781117 Abramson }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 also fe}{\rtlch \af0 \ltrch \insrsid10774769\charrsid1781117 e}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 l}{\rtlch \af0 \ltrch \insrsid10774769\charrsid1781117 s}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 that \'93the recipient of the letter was not a }{\rtlch \af0 \ltrch \insrsid10774769\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +orah scholar but was well versed in philosophy and literature (= ethics); for that reason we see that the gaon did not quote from the Sages}{\rtlch \af0 \ltrch \insrsid10774769\charrsid1781117 extensively}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 , but put a positive slant on the need to }{\rtlch \af0 \ltrch \insrsid5993921\charrsid1781117 thank God for }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the bad the same way we }{\rtlch \af0 \ltrch +\insrsid5993921\charrsid1781117 thank Him }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the good}{\rtlch \af0 \ltrch \insrsid5993921\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid5993921\charrsid1781117 Thus, this letter }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 describe}{\rtlch \af0 \ltrch \insrsid5993921\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + the incident of R. Johanan whose ten sons died while he was still alive.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab See }{ +\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid4140030 Berakhot}{\rtlch \af0 \ltrch \insrsid4342917 5b.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + The greater part of the letter consists of quotes from biblical passages and allusions to states by the }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 maskilim }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and }{\rtlch \ai\af0 \ltrch +\i\insrsid4071356\charrsid1781117 \lquote }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 mishpat ha-sekhel.}{\rtlch \ai\af0 \ltrch \i\insrsid4071356\charrsid1781117 \rquote }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The }{\rtlch +\ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 maskilim}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid5993921\charrsid1781117 referred to here }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +were no doubt those concerned with \'93ethics\'94 (}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 adab}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ) who devoted chapters of their works to anxiety and suffering.\'94}{\rtlch \af0 +\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch +\i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid9525098 BA-Merkazim u-ba-Tefuzot bi-Tekufat ha-Geonim}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 , pp. 60.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash This letter deals with four themes}{\rtlch \af0 \ltrch \insrsid7895630\charrsid1781117 :}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid4678027 {\rtlch \af0 \ltrch \insrsid7895630\charrsid1781117 A. A}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 n }{\rtlch a0 \ltrch +\insrsid7895630\charrsid1781117 introduction }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 consisting of quotations of biblical verses }{\rtlch \af0 \ltrch \insrsid4678027\charrsid1781117 which }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 describe the mourner\rquote s situation at the time of his suffering. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1665242 {\rtlch \af0 \ltrch \insrsid7895630\charrsid1781117 B. }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +The reason for the obligation to observe the laws and customs of mourning (these are actions commanded by the Creator, for which the mourner will be rewardedin the future. Conver +sely, acts not within the bounds of obligation are distasteful and it is forbidden to carry them out, even }{\rtlch \af0 \ltrch \insrsid1665242\charrsid1781117 in small measure}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ).}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid9525098 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab It is possible that the gaon is, + by allusion, coming out here against customs of mourning deriving from non-Jewish origin which took root among the Jewish dispersal (an explanation that differs from Abramson\rquote s, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Ibid}{\rtlch \ai\af0 +\ltrch \i\insrsid4342917\charrsid5066409 .}{\rtlch \af0 \ltrch \insrsid4342917 , p. 59). See }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Hilkhot Avelut}{\rtlch \af0 \ltrch \insrsid4342917 by R. }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Samuel} +{\rtlch \af0 \ltrch \insrsid4342917 b. Hophni, p. 108: \'93and should he say: Is it permissible to act optionally in mourning by }{\rtlch \ab\af0 \ltrch \b\insrsid4342917 adding days to those legally prescribed}{\rtlch \af0 \ltrch \insrsid4342917 + mourning \emdash he should be told: \lquote Yes, it is permissible.\rquote \'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid16582730 {\rtlch \af0 \ltrch \insrsid1665242\charrsid1781117 C. }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +a person should not say that agony is a natural phenomenon }{\rtlch \af0 \ltrch \insrsid16582730\charrsid1781117 which }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 one cannot overcome, for the }{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 maskilim}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 teach a person to }{\rtlch \af0 \ltrch \insrsid4678027\charrsid1781117 discontinue}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 his suffering}{ +\rtlch \af0 \ltrch \insrsid1665242\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid1665242\charrsid1781117 I}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 f he }{\rtlch \af0 \ltrch +\insrsid4678027\charrsid1781117 could }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 not have such inner strength, they would not have so instructed him. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1665242 {\rtlch \af0 \ltrch \insrsid1665242\charrsid1781117 D. }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Ten }{\rtlch \af0 \ltrch +\insrsid1665242\charrsid1781117 basic }{\rtlch \af0 \ltrch \insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 s, }{\rtlch \af0 \ltrch \insrsid1665242\charrsid1781117 with supplementary }{\rtlch \af0 \ltrch +\insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid1665242\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , which when understood and acted upon properly}{\rtlch \af0 \ltrch \insrsid4678027\charrsid1781117 ,}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid4678027\charrsid1781117 can }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 guide the mourner to overcom}{\rtlch \af0 \ltrch \insrsid1665242\charrsid1781117 e}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 his suffering, namely: +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid4678027 {\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 Tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 one}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \emdash }{\rtlch \af0 \ltrch \insrsid4678027\charrsid1781117 to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 acknowledg}{\rtlch \af0 \ltrch \insrsid4678027\charrsid1781117 e}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 the existence of God, all of whose actions are just and good}{\rtlch \af0 \ltrch \insrsid15402994\charrsid1781117 ;}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid4678027\charrsid1781117 and to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 refrain from dwelling upon His attributes. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1378156 {\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 Tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 s two and three}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \emdash }{\rtlch \af0 \ltrch \insrsid4678027\charrsid1781117 to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 acknowledg}{\rtlch \af0 \ltrch \insrsid4678027\charrsid1781117 e}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 the correctness of God\rquote s action}{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 (}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 zidduk ha-din} +{\rtlch \ai\af0 \ltrch \i\insrsid1378156\charrsid1781117 )}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ; }{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 acknowledg}{\rtlch \af0 \ltrch +\insrsid1378156\charrsid1781117 e}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the rightness of Divine judgment. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 Tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 four}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash }{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 to }{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 acknowledg}{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 es}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that God is the Creator of man and that He holds all souls in }{\rtlch \af0 \ltrch +\insrsid1378156\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is hands. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 Tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 five}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash }{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 to }{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 acknowledg}{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 e}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that we were not created to live forever, }{\rtlch \af0 \ltrch +\insrsid15402994\charrsid1781117 and that }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 our goal on this earth is to do what is right in the eyes of the Lord}{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 ,}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid15402994\charrsid1781117 so as }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to earn a place in the world to come. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 Tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 six}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash }{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 to }{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 acknowledg}{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 e}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + that death is the fate of every living thing; it cannot be avoided and there is no deliverance from it. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 Tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 seven}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash }{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 to }{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 acknowledg}{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 e}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that sadness and suffering are part of life in this world. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 Tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 eight}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash one who is mourning the death of his sons }{\rtlch \af0 \ltrch +\insrsid1378156\charrsid1781117 or }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 daughters must accept the fact and learn from the ways of the prophets and }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 zaddikim}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 whose children died during their lifetime}{\rtlch \af0 \ltrch \insrsid15402994\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 . +\par }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 Tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 nine}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash }{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 to }{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 realiz}{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 e}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that the death of the deceased is for his benefit. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 Tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 ten}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash }{\rtlch \af0 \ltrch \insrsid1378156\charrsid1781117 to }{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 accept the belief in the resurrection of the dead (the father will yet dwell with his children). +\par }\pard\plain \ltrpar\s21\qj \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +Included in the presentation of portions of the letter are Abramson\rquote s comments. +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 +\page }{\rtlch \ab\af156 \ltrch \b\insrsid12391429\charrsid1781117 Text of the Letter}{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 :\sect }\sectd \ltrsect +\margbsxn1714\psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl\sftnbj {\header \ltrpar \pard\plain \ltrpar\s22\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0 \rtlch +\af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ai\af0\afs18 \ltrch \i\fs18\insrsid4342917 Light and Consolation:}{\rtlch \af0\afs18 \ltrch \fs18\insrsid4342917 Chapter Twelve +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid4342917 +\par +\par }}{\footer \ltrpar \pard\plain \ltrpar\s23\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\tqc\tx4320\tqr\tx8640\pvpara\phmrg\posxc\posy0\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\field{\*\fldinst {\rtlch \af0 \ltrch \cs24\insrsid4342917 PAGE }}{\fldrslt {\rtlch \af0 \ltrch \cs24\lang1024\langfe1024\noproof\insrsid15625630 220}}}{\rtlch \af0 \ltrch \cs24\insrsid4342917 + +\par }\pard \ltrpar\s23\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid4342917 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid4342917 +\par +\par }}{\*\pnseclvl1\pnucltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta ..}}{\*\pnseclvl2\pnord\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxta ..}}{\*\pnseclvl4\pncard\pnqc\pnstart1\pnindent720\pnhang +{\pntxta )}}{\*\pnseclvl5\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pncard\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +{\*\pnseclvl8\pncard\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\ltrrow\trowd \irow0\irowband0\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 21\cell }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid554163 \rtlch +\af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid3553674\charrsid1781117 S}{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 hould you ask how the worrier }{\rtlch \af156 \ltrch +\insrsid554163\charrsid1781117 is to}{\rtlch \af156 \ltrch \insrsid3553674\charrsid1781117 }{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 divert +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid8138310 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 his anxiety and }{\rtlch \af0 \ltrch \insrsid8138310\charrsid1781117 how }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the one who sighs }{\rtlch \af0 \ltrch \insrsid8138310\charrsid1781117 is }{\rtlch \af0 \ltrch +\insrsid554163\charrsid1781117 to }{\rtlch \af0 \ltrch \insrsid8138310\charrsid1781117 cease }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 his sigh}{\rtlch \af0 \ltrch \insrsid8138310\charrsid1781117 ing}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 , you will be told that the worry and sigh can be removed}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Ms. has } +{\ltrch \af262 \rtlch \f262\fs20\lang1037\insrsid4342917 \'e5\'f0\'e0\'f0\'e7}{\rtlch \af0 \ltrch \insrsid4342917 , while it should have }{\ltrch \af262 \rtlch \f262\fs20\lang1037\insrsid4342917 \'e5\'e0\'f0\'e7}{\rtlch \af0 \ltrch \insrsid4342917 + ; it may be that erasure of the }{\ltrch \af262 \rtlch \f262\fs20\lang1037\insrsid4342917 \'f0}{\rtlch \af0 \ltrch \insrsid4342917 is indicated by points above and below in the manuscript..}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par by means of }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 ten }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +, some of them basic and some of them }{\rtlch \af0 \ltrch \insrsid3553674\charrsid1781117 secondary to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 them. The }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 first }{\rtlch \ab\af0 +\ltrch \b\insrsid554163\charrsid1781117 tenet}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is that one should know +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that we and }{\rtlch \af0 \ltrch \insrsid8138310\charrsid1781117 [the departed] have }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 a Creator who is the }{\rtlch \af0 \ltrch \insrsid3553674\charrsid1781117 w}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 isest of the wise}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab This phraseology is found in }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Ha-Midrash ha-Gadol}{\rtlch \af0 \ltrch \insrsid4342917 on }{\rtlch \ai\af0 \ltrch +\i\insrsid4342917\charrsid10509721 Genesis}{\rtlch \af0 \ltrch \insrsid4342917 48:3, p. }{\ltrch \af262 \rtlch \f262\fs20\lang1037\insrsid4342917 \'fa\'f9\'f1\'e2}{\rtlch \af0 \ltrch \insrsid4342917 (}{\rtlch \ai\af0 \ltrch +\i\insrsid4342917\charrsid10509721 Genesis Rabba}{\rtlch \af0 \ltrch \insrsid4342917 , }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , without the word }{\ltrch \af262 \rtlch +\f262\fs20\lang1037\insrsid4342917 \'e7\'eb\'ee\'e9\'ed}{\rtlch \af0 \ltrch \insrsid4342917 .}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , a merciful }{\rtlch \af0 \ltrch \insrsid8138310\charrsid1781117 God }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 who is full of mercy, and that }{\rtlch \af0 \ltrch \insrsid3553674\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e created us with his lovingkindness}{\rtlch \af0 \ltrch +\insrsid8138310\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \nsrsXd12391429\charrsid1781117 25\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid8138310 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +and does what is good for us and what will bring us closer to fearing }{\rtlch \af0 \ltrch \insrsid3553674\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 im and to performing his service}{\rtlch \af0 \ltrch +\insrsid8138310\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid8138310\charrsid1781117 Thus, }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 if}{\rtlch \af0 \ltrch +\insrsid3747336\charrsid1781117 He }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 knows that }{\rtlch \af0 \ltrch \insrsid3747336\charrsid1781117 being}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par wealthy and }{\rtlch \af0 \ltrch \insrsid3747336\charrsid1781117 having }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 children will bring us closer to holding}{\rtlch \af0 \ltrch \insrsid6907170\charrsid1781117 H}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 im in awe, He will make us wealthier and give us children, and if }{\rtlch \af0 \ltrch \insrsid3747336\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e know}{\rtlch \af0 \ltrch +\insrsid3747336\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid11485985 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the}{\rtlch \af0 \ltrch \insrsid3747336\charrsid1781117 se}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 will distance us from }{\rtlch \af0 \ltrch \insrsid3747336\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is service, }{\rtlch \af0 \ltrch \insrsid3747336\charrsid1781117 H}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 e will test us with poverty and try us by the death of our children. }{\rtlch \af0 \ltrch \insrsid11485985\charrsid1781117 W}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e must}{\rtlch \af0 \ltrch +\insrsid11485985\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par turn all our words to Him and not think a bad thought about any of }{\rtlch \af0 \ltrch \insrsid6907170\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is attributes and words, as it is written:}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 + 9:4.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid15211710 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Wise of heart +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and mighty in power \emdash who ever challenged Him and came out whole?}{\rtlch \af0 \ltrch \insrsid15211710 +\'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 So the man whom God makes rich, should thank }{\rtlch \af0 \ltrch \insrsid3747336\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 im \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 30\cell }\pard \ltrpar +\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid6907170 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and one who is tested by poverty should also thank }{\rtlch \af0 \ltrch \insrsid10749649\charrsid1781117 H}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 im and bless }{\rtlch \af0 \ltrch \insrsid10749649\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 im}{\rtlch \af0 \ltrch \insrsid6907170\charrsid1781117 .}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid6907170\charrsid1781117 I}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 f his children or his relatives}{\rtlch \af0 \ltrch \insrsid6907170\charrsid1781117 should die}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 , he should take the yoke +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid11485985 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of heaven upon himself for He has acted well toward him}{\rtlhi \af0 \ltrch +\insrsid8745540\charrsid1781117 . A}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 s our rabbis}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid4140030 Berakhot}{\rtlch \af0 \ltrch \insrsid4342917 9:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 said, \'93Man is bound to }{\rtlch \af0 \ltrch \insrsid8745540\charrsid1781117 thank }{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 [God] for the }{\rtlch \af0 \ltrch \insrsid11485985\charrsid1781117 bad}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid8745540 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 even as he}{\rtlch \af0 \ltrch \insrsid8745540\charrsid1781117 thanks}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab It is even cited in TB }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid4140030 Berakhot}{\rtlch +\af0 \ltrch \insrsid4342917 33b. In the mishnah }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid4140030 Berakhot}{\rtlch \af0 \ltrch \insrsid4342917 9:5 the version is \'93just as }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 he}{\rtlch \af0 \ltrch +\insrsid4342917 blesses\'85.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid8745540\charrsid1781117 Him}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for the good.\'94 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \af0 \ltrch \insrsid8745540\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 second }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 tenet}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 is that we are obliged to know that our Creator +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid8745540 {\rtlch \af0 \ltrch \insrsid8745540\charrsid1781117 is }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +just and acts in truth, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 +\rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{ +\rtlch \af0 \ltrch \insrsid4342917 119:75.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid4945530\charrsid1781117 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I know, }{\rtlch \af0 \ltrch +\insrsid8745540\charrsid1781117 O}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Lord, that }{\rtlch \af0 \ltrch \insrsid8745540\charrsid1781117 Y}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 our rulings are just; rightly }{\rtlch \af0 +\ltrch \insrsid8745540\charrsid1781117 Y}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ou have humbled me. }{\rtlch \af0 \ltrch \insrsid3747336\charrsid1781117 He }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +has no injustice before him and no evil,}{\rtlch \af0 \ltrch \insrsid15211710 \'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10509721 }{\rtlch \af0 \ltrch \insrsid4342917 5:5.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid4945530\charrsid1781117 \lquote }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 For You are not a God who desires wickedness; evil cannot abide with You\'85}{\rtlch \af0 \ltrch +\insrsid4945530\charrsid1781117 \rquote \'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 So i[f]\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 35\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid4276622 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 God chastise}{\rtlch \af0 \ltrch \insrsid8745540\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid8745540\charrsid1781117 one }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 with physical illness or through the death of his children or through }{\rtlch \af0 \ltrch \insrsid4945530\charrsid1781117 misery}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 or suffering, he should know that }{ +\rtlch \af0 \ltrch \insrsid5400671\charrsid1781117 [God] }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 has acted }{\rtlch \af0 \ltrch \insrsid4276622\charrsid1781117 just[ly] +\par }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 with him }{\rtlch \af0 \ltrch \insrsid5400671\charrsid1781117 a}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 nd did }{\rtlch \af0 \ltrch \insrsid8154364\charrsid1781117 not }{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 deprive}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 +\rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721!Job}{ +\rtlch \af0 \ltrch \insrsid4342917 27:2.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 him of His justice, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 25:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid4276622\charrsid1781117 \'93}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 All the Lo}{\rtlch \af0 \ltrch \insrsid4276622\charrsid1781117 rd\rquote s paths are steadfast love\'85.\'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 third }{\rtlch \ab\af0 \ltrch +\b\insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid4276622 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 That our creator }{\rtlch \af0 \ltrch \insrsid4276622\charrsid1781117 granted }{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 us our li}{\rtlch \af0 \ltrch \insrsid4276622\charrsid1781117 ves}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and the breath of our soul}{\rtlch \af0 \ltrch \insrsid4276622\charrsid1781117 s}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 with great lovingkindness, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch\i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 42:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid4276622\charrsid1781117 \'93}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 Who gave breath to +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid5400671 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the people upon it, and life to those who walk on}{\rtlch \af0 \ltrch +\insrsid5400671\charrsid1781117 it}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid4276622\charrsid1781117 \'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and whenever He }{\rtlch \af0 \ltrch +\insrsid5400671\charrsid1781117 wishes }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to, He will take our soul and gather our spirit and [the spirit] of our +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 sons and daughters, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 34:14.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 +\ltrch \insrsid4276622\charrsid1781117 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 If He but intends it, He can c}{\rtlch \af0 \ltrch \insrsid4276622\charrsid1781117 all back His spirit and breath.\'94}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 +\par }{\rtlch \af0 \ltrch \insrsid10836684\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he [}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 fourth }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 tenet}{\rtlch \af0 +\ltrch \insrsid10836684\charrsid1781117 is}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ] \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow3\irowband3\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 40\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid10836684 {\rtlch \af0 \ltrch \insrsid10836684\charrsid1781117 E}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ven though we are the fathers of our children, behold their Creator is called their }{\rtlch \af0 \ltrch \insrsid10836684\charrsid1781117 F}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ather, for }{\rtlch \af0 +\ltrch \insrsid5400671\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e is the one who sust[ains] +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid15211710 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 them in life and }{\rtlch \af0 \ltrch \insrsid5400671\charrsid1781117 is }{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 the creator of their soul}{\rtlch \af0 \ltrch \insrsid1781117\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , as it is written:}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 + 63, 37.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af512 \ltrch \insrsid15211710 \'93}{\rtlch \af74 \ltrch \f74\insrsid10245123\charrsid1781117 For }{\rtlch \af74 \ltrch \f74\cf1\insrsid10245123\charrsid1781117 You are our}{\rtlch +\af74 \ltrch \f74\insrsid10245123\charrsid1781117 Father, though Abraham does not know us}{\rtlch \af74 \ltrch \f74\insrsid8080853\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'85}{\rtlch \af0 \ltrch \insrsid15211710 \'94}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid10636625 B}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e[cause] +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid8080853 {\rtlch \af0 \ltrch \insrsid8080853\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e is our creator, }{\rtlch \af0 \ltrch +\insrsid8080853\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e rules over us to do His will with us and }{\rtlch \af0 \ltrch \insrsid8080853\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +e possesses us and [our children]. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid15624732 {\rtlch \af0 \ltrch \insrsid8080853\charrsid1781117 I}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 n [his hand]}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Tentative reading; another possibility, \'93and [creator]\'94 +. The remnants of the characters in the manuscript do not allow one to make a definite decision here.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 are all our souls, as it is written:}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 12:6.} +}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid15211710 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 In His hand is every living soul and the breath of all mankind,}{\rtlch \af0 \ltrch \insrsid15211710 +\'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and our souls are entrusted to }{\rtlch \af0 \ltrch \insrsid15624732\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is hand +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \insrsid4342917 31:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid15211710 \'93} +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Into Your hand I entrust my spirit\'85.}{\rtlch \af0 \ltrch \insrsid15211710 \'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par And the }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 fifth }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is to know that our }{\rtlch \af0 \ltrch \insrsid15211710 C}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 reator\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \ceolx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 45\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid7099497 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 did not create us in thi +s world to live in it forever, but He created us to do what is good and right in [}{\rtlch \af0 \ltrch \insrsid7099497\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is ey]es for\'85 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid10636625 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that is intended}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnotc \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab For the time allotted to us.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for the world to come, as it is written:}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 \tab }{\rtlch \af0 \ltrch +\i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 21:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid15211710 \'93}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 He asked You for life; You granted it\'85.}{\rtlch \af0 \ltrch \insrsid15211710 \'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid10636625 T}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 his world is like the [week]days +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3304868 {\rtlch \af0 \ltrch \insrsid10636625 while }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the world to come is like the rest}{\rtlch \af0 +\ltrch \insrsid15624732\charrsid1781117 ing}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of the Sabbath to become refreshed on it, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid10636918 Malach}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 i 3:20.}}} +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid15211710 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 But for you who rvere My name}{\rtlch \af0 \ltrch \insrsid3304868\charrsid1781117 ,}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid3304868\charrsid1781117 the}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 sun }{\rtlch \af0 \ltrch \insrsid3304868\charrsid1781117 [of righteousness will arise]}{\rtlch \af0 \ltrch +\insrsid15211710 \'94}{\rtlch \af0 \ltrch \insrsid3304868\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'85.The com[mandments], too, +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 are a path to the world to come and a trail for traveling from this world to the world to come. +\par The }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 sixth }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + is that we should know that one cannot flee from death and that no living thing can be spared from it +\par as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 +\ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch +\i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid10636918 Psalms }{\ytlci \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 89:49.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid15211710 \'93}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 What\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow5\irowband5\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 50\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid4152804 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 man can live and not see death\'85.}{\rtlch \af0 +\ltrch \insrsid15211710 \'94 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 And as for our forefathers and our prophets, have they }{\rtlch \af0 \ltrch \insrsid4152804\charrsid1781117 not }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +all died, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang0037\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \insrsid4342917\charrsid10636918 Zechariah}{\rtlch +\af0 \ltrch \insrsid4342917 1:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid15211710 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Where are your fathers +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 now?\'85.}{\rtlch \af0 \ltrch \insrsid15211710 \'94 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +But some of them will die in youth and some will die as adults and some will die in old age, as it is written:}{\rtlch \af0\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 +\tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 21:23\endash 26.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \af0 \ltrch \insrsid15211710 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [One man dies] in robust health\'85his pails are full of milk and the marrow\'85another dies embittered\'85}{\rtlch \af0 \ltrch \insrsid15211710 \'94}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 +\par They both l[ie]}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 +\ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Mann\rquote s section begins with this line.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 in the [d]u[st] \'85.And we must all die}{\rtlch \af0 \ltrch \insrsid9123678 ;}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang3082\langfe1033\langnp3082\insrsid4342917 \tab 2 }{\rtlch \ai\af0 \ltrch \i\lang3082\langfe1033\langnp3082\insrsid4342917\charrsid4403687 Samuel}{\rtlch \ai\af0 \ltrch \i\lang3082\langfe1033\langnp3082\insrsid4342917\charrsid10636918 }{\rtlch \af0 +\ltrch \lang3082\langfe1033\langnp3082\insrsid4342917 14:14.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \line we are like water poured out on the ground\'85 +\par }{\rtlch \af0 \ltrch \insrsid4152804\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 seventh}{\rtlch \ab\af0 \ltrch \b\insrsid4152804\charrsid1781117 tenet}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 that we know that the bad things in this [wor]l[d] are man[y]\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow6\irowband6\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 55\cell in it for a life of sorrow they will live, since a rich man will become poor \'85 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid15624732 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 prophets and righteous persons without sorrow, for all\'85 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and the }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 eighth }{\rtlch \ab\af0 \ltrch +\b\insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is that one who is [m]ourning for his sons and for hi}{\rtlch \af0 \ltrch \insrsid12137753\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + [d]aughters is obliged to rely upon the example \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow7\irowband7\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 60\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12137753 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of the prophets and the righteous person}{\rtlch +\af0 \ltrch \insrsid12137753\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 whose children died during their lives\'85[Aaron] +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid9123678 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the chief}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote +\ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang3082\langfe1033\langnp3082\insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\lang3082\langfe1033\langnp3082\insrsid4342917\charrsid4403687 Ezra}{\rtlch \af0 \ltrch +\lang3082\langfe1033\langnp3082\insrsid4342917 7:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 priest whose sons died during his lifetime}{\rtlch \af0 \ltrch \insrsid9123678 :}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Lev.}{\rtlch \af0 \ltrch \insrsid4342917 10:2.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 +\ltrch \insrsid9123678 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 And fire came forth [from the Lord and consumed them; thus they died] +\par before the Lord,}{\rtlch \af0 \ltrch \insrsid9123678 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Aaron was silent and kept his peace in accepting the judgment of the Lord, as it is written:}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Lev.}{\rtlch \af0 \ltrch \insrsid4342917 10:3. +}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid9123678 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 And Aaron was silent.}{\rtlch \af0 \ltrch \insrsid9123678 \'94}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 David, too, +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 fasted and cried all the while the child was alive}{\rtlch \af0 \ltrch \insrsid12137753\charrsid1781117 ,}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and when he died, he was comforted, for he said he would go to his son and his son would not re[turn] to him, +\par as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 +\ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab 2 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Samuel}{\rtlch \af0 \ltrch +\insrsid4342917 12:22\endash 23.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid9123678 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 While the child was still alive, I fasted and wept because I thought: +\lquote Who knows? The Lord may have pity on me,\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow8\irowband8\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 65\cell and the child may live.\rquote But now that he is dead, [why should I fast]? Can I bring him back again? I shall go\'85.}{\rtlch \af0 \ltrch \insrsid9123678 \'94}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 And as for Job, his th[ree] +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12137753 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 sons died at the same time and he accepted the judgment of his }{\rtlch \af0 \ltrch +\insrsid12137753\charrsid1781117 C}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 reator, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 +\tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 1:21.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 He said, \'93Naked came I\'85.\'94 And afterwards +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + [he also said}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \tich \insrsid4342917 +\tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 2:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ] +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid9123678 {\rtlch \af0 \ltrch \insrsid9123678 \'93T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he good we should accept from God\'85.}{\rtlch \af0 +\ltrch \insrsid9123678 \'94 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he Lord restored him and made his end good, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 42:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid9123678 \'93}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 The Lord restored Job\rquote s fortunes when he prayed \'85.}{\rtlch \af0 \ltrch \insrsid9123678 \'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Thus the mourner mourning for his children should take comfort + +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \i.srsid12391429\charrsid1781117 \'85to be like these prophets}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin4047\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Generally speaking. Aaron was not a prophet. Unless we say that the customary usage here derives from an external influence: \'93prophets without a mission.\'94 Regarding David +\emdash we have the well-known responsum of R. Nissim Gaon to R. Abraham ben R. Moses (now in }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Milhamot Hashem}{\rtlch \af0 \ltrch \insrsid4342917 by R. R. Margaliot, 116).}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 who suffered over their children to be like them, and also in the words of \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow9\irowband9\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 70\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12137753 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 [R. Johanan}{\rtlch \af0 \ltrch \insrsid12137753\charrsid1781117 ]}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid4140030 Berakhot}{\rtlch \af0 \ltrch \insrsid4342917 5b, and see also }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 O}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 z}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 ar ha-Ge +\rquote onim}{\rtlch \af0 \ltrch \insrsid4342917 \emdash The Commentaries, page 6, paragraph 18.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 about whom the Sages said that h[e] had ten sons and they died during his lifetime and }{\rtlch +\af0 \ltrch \insrsid12137753\charrsid1781117 he }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 accepted the judgment of his }{\rtlch \af0 \ltrch \insrsid12137753\charrsid1781117 C}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 reator. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + and the }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 ninth}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12405329 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [}{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 that we should know th}{\rtlch \af0 \ltrch \insrsid12405329 a}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 t dea[th] is better than life and that the }{\rtlch \af0 \ltrch \insrsid12405329 L}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ord caused them to die for his benefit, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \insrsid4342917 63:4.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \af0 \ltrch \insrsid12405329 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [}{\rtlch \af0 \ltrch \insrsid12405329 Y}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 our faithfulness] +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [is better than life; my lip]s declare your praise.}{\rtlch \af0 \ltrch \insrsid12405329 \'94}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 And the }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 tenth }{\rtlch \ab\af0 \ltrch \b\insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + is that we know that dead are destined to live in the future, since the Lord will resurrect everyone, and the father will know his children and sit among them, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Mann has already noted that this apparently refers to 2 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Samuel}{\rtlch \af0 \ltrch \insrsid4342917 12:23: \'93 +I shall go to him.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid11472258 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'85. And when the mo[urn]er know}{\rtlch \af0 \ltrch \insrsid11472258\charrsid1781117 s}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 all this in his heart or confirm it}{\rtlch \af0 \ltrch \insrsid11472258\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , }{\rtlch \af0 \ltrch \insrsid11472258\charrsid1781117 +he will}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid11472258\charrsid1781117 forget}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [}{\rtlch \af0 \ltrch \insrsid11472258\charrsid1781117 h}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +is si]ghs and his worry will go away, as it is written:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \insrsid4342917 94:19.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12405329 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +When I am filled with cares, Your assurance [soothes my soul].}{\rtlch \af0 \ltrch \insrsid12405329 \'94}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow10\irowband10\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr +\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel1\adjustright\rin0\lin405\itap0\pararsid11472258 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 [2] Letters from Ere}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 z}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Israel (Eleventh century)}{\rtlch \af0 \ltrch +\insrsid11472258\charrsid1781117 +\par }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Presented here are two more letters from the Oxford }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Genizah}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + collections that were quoted in Joseph Eliash\rquote s article \'93}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Yedi\rquote ot al Erez Israel me-ha-Me\rquote ah ha-11}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'94 (\'93 +Information from Eleventh-Century Erez Israel\'94).}{\rtlch \ab\af0 \ltrch \cs16\b\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917 Sefunot}{\rtlch \af0 \ltrch \insrsid4342917 2 (1958), 7\endash 16.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par a) a letter by Sa\rquote adiah he-}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 aver (the Sage) from Hebron to the Gaon Evyatar Hacohen +\par +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and Its Recipient}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash Sa\rquote adiah the member of the \'93Society of the Graves of the Forefathers\'94 + that established its location during the eleventh century in Hebron near Me\rquote arat Hamachpelah, addressed his letter to the Gaon R. Evyatar Hacohen, the head of the Ere}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 z}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 Israel Yeshivah. +\par +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash In the first part of the letter the writer describes his great joy upon hearing the news that Rabbenu Evyatar h +ad been appointed \'93Gaon Ya\rquote akov,\'94 during the lifetime of his father, R. Elya Hacohen, who had lived in Fustat, Egypt and died in 1081. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid9835367 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab We present this section of the letter to show that a custom of writing \'93 +letters of condolence\'94 to mourners existed in Ere}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 z}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + Israel in the eleventh century. The author of this letter did not succeed in having it reach its destination. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab Below appears only the portion of that letter relevant to our topic. +\par +\par \page Text of the Letter: +\par [page 2] +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil +\cellx540\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7874\clshdrawnil \cellx8414\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 1\cell }{\rtlch \af0 \ltrch \insrsid9835367\charrsid1781117 W}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 hen we of \'93Graves of the Forefathers\'94 h +eard [of the death] of Rabbenu Eleazar, of blessed memory and for life in the world// to come// I [eulog]ized him }{\rtlch \af0 \ltrch \insrsid8601107\charrsid1781117 with }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 numerous eulogies}{\rtlch +\af0 \ltrch \insrsid8601107\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and I wept for him }{\rtlch \af0 \ltrch \insrsid8601107\charrsid1781117 with }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +a great and bitter weeping and we made\line the Sabbath day for him like the Sabbath of Lamentations }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +and I wrote condolences to Egypt through my son Abraham, but the Holy One, blessed be He, did not provide an opportunity for him to go there to offer condolences to our master the Gaon}{\rtlch \ab\af0 \ltrch \b\insrsid8601107\charrsid1781117 ,}{\rtlch +\ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 nor to provide heartfelt condolences}{\rtlch \ab\af0 \ltrch \b\insrsid8601107\charrsid1781117 .}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 May the }{\rtlch \ab\af0 \ltrch +\b\insrsid11552035\charrsid1781117 heart of }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 the Gaon}{\rtlch \ab\af0 \ltrch \cs16\b\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab a concluding blessing by the author of the enquiry to the Gaon.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil \cellx540\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7874\clshdrawnil \cellx8414\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell }{\rtlch \af0 \ltrch \insrsid11552035\charrsid1781117 a}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +nd the heart of our Rabbi, the head of the Bet Din}{\rtlch \af0 \ltrch \insrsid11552035\charrsid1781117 be consoled}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , }{\rtlch \af0 \ltrch \insrsid11552035\charrsid1781117 and may [God}{\rtlch \af0 +\ltrch \insrsid1932179\charrsid1781117 ]}{\rtlch \af0 \ltrch \insrsid11552035\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 bless you and hear my prayer for you in this holy place Amen.}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid15033033 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 +, 11. On the status of the Gaon R. Evyatar Hacohen, see M. Gil, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Ere}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 z}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Israel bi-Tekufah ha-Muslemit ha-Rishonah, }{\rtlch +\af0 \ltrch \insrsid4342917 I (Tel Aviv, 1983), 604\endash 606, 625. See Z. Schechter, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Tehillah la-David }{\rtlch \af0 \ltrch \insrsid4342917 (Breslau, 1890), who found,, among the +Genizah fragments in Cambridge University Library, the complete text of a }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid13182277 kaddish}{\rtlch \af0 \ltrch \insrsid4342917 which was customarily used in eleventh-century Ere}{\rtlch \af0 \ltrch +\cf2\insrsid4342917 z}{\rtlch \af0 \ltrch \insrsid4342917 Israel relating to the most important rabbis living at that time (we also have evidence of this custom in a later period, see }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid13182277 ibid.}{ +\rtlch \af0 \ltrch \insrsid4342917 ). Here we only cite the opening of the }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid13182277 kaddish}{\rtlch \af0 \ltrch \insrsid4342917 : \'93}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 +yitgadel ve-yitkadesh shemei raba be-alma di vera kirutei yamlikh}{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 malkhutei ve-ya}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 z}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 ma}{ +\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 h}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 purkanei vi-yakrev meshi}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 h}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 ei be-}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 h} +{\rtlch \ai\af0 \ltrch \i\insrsid4342917 ayei adonenu Evyatar ha-Kohen rosh yeshivat ga\rquote on ya\rquote akov u-ve-}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 h}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 ayei rabbenu Sh +elomo ha-Kohen av ha-yeshivah u-ve-}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 h}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 ayei rabbenu }{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 Z}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 adok ha-shelishi she-ba-}{ +\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 h}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 avurah u-ve-}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 h}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 ayyekhon\'94 }{\rtlch \af0 \ltrch \insrsid4342917 (\'93 +Magnified and sanctified be His great Name in the world which He created according to His will. May He establish His kingdom during the life of our master Evyatar ha-Kohen, the head of the Yeshivah Gaon Ya\rquote akov, + and during the life of Solomon ha-Kohen, principal of the yeshivah, and during the life of Rabbenu }{\rtlch \af0 \ltrch \cf2\insrsid4342917 Z}{\rtlch \af0 \ltrch \insrsid4342917 adok, the third member of the heads, and during your life.\'94}}}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\lastrow \ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil \cellx540\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7874\clshdrawnil \cellx8414\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid6950160 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 b) a condolence letter to Elijah b. Evyatar Hacohen +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and }{\rtlch \ab\af0 \ltrch \b\insrsid6950160\charrsid1781117 i}{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 ts Recipient}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \emdash This letter was wri +tten to Elijah the son of the gaon R. Evyatar Hacohen who lived in Tyre. Eliash notes that the identity of the letter writer, its sender, and the place from which it was sent are not known. We can only assume that the letter was sent at the end of the ele +venth century or at the beginning of the twelfth. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter is replete with flowery phrases in Hebrew and biblical verses and deals with the following themes: + +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid6950160 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 An opening \emdash Citation of biblical verses }{\rtlch \af0 \ltrch +\insrsid6950160\charrsid1781117 which }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 contain acceptance of Divine judgment }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 (}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid12391429\charrsid1781117 z} +{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 idduk ha-din)}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 . +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Blessings, condolences, and wishes for a good and long life. +\par The bad tidings about the death of R. }{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 Z}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 adok Hacohen severely hurt the writer. +\par Condolences to R. Evyatar and R. Elijah Hacohen, that they may have the privilege of finding comfort in the rebuilding of the Temple when sadness will turn to joy. +\par An appeal for forgiveness from the gaon that no group had come from the writer\rquote s community to offer condolences, since the pathways were treacherous by sea and by land (one must keep in mind that this was the Crusader period). +\par Since the entire letter concerns condolences, it is presented here in full. +\par \page Text of the Letter: +\par \tab Proclaiming that the Lord is upright, in whom there is no wrong.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1031\langfe1033\langnp1031\insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 92:15.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ; I will clothe priests;}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1031\langfe1033\langnp1031\insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrh \lang1031\langfe1033\langnp1031\insrsid4342917 132:16. This +is a reference to Evyatar, who was a }{\rtlch \ai\af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917 k}{\rtlch \ai\af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid5905669 ohen.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 The Rock! \emdash His deeds are perfect. His ways are just\'85.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1031\langfe1033\langnp1031\insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid14447357 \tab Deut. }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 32:4.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 The righteous man perishes yet no one considers.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1031\langfe1033\langnp1031\insrsid0000008 \tab }{\rtlch \af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid14447357 Isaiah}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 57:1.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 Woe is me! I am become like leavings of a fig harvest.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1031\langfe1033\langnp1031\insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid14447357 Micah}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 7:1.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 God is righteous in all his ways, and gracious in all His works,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \insrsid4342917 145:17.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Consolation and grace, relief to [my] sadness and the bindings of [my] wounds; good tidings \'85 +approaching salvation. Removal of pain, sorrow, sighing and agony. Consolation of the good tidings for Zion and then light and joy will be [the lot] of our master}{\rtlch \af0 \ltrch \insrsid4922460 from the Lord of hosts to cons}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ole your heart\'85. May his seat be established forever with dignity; a long life with good and pleasant things; atonement of his cherished one, his son\'85. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1975058 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab +We have been informed of the harsh tidings that pain the heart and weaken the spirit concerning the passing of Rabbenu }{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 Z}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +adok Hacohen of blessed memory. The Lord is witness that we are sorrowed, trembling and anxious}{\rtlch \af0 \ltrch \insrsid1975058\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + May his portion be in the Garden of Eden in the company of the righteous. This decree [and news of his death] made the body and soul burn, distanced joy and passed from us all respite. [His death] stupefied}{\ltrch \rtlch +\f0\fs24\lang1037\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 our hearts; we became as fools; we became poor and sullied; it was }{\rtlch \af0 \ltrch \insrsid1975058\charrsid1781117 as if }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 our possessions }{\rtlch \af0 \ltrch \insrsid1975058\charrsid1781117 had }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 suddenly s}{\rtlch \af0 \ltrch \insrsid1975058\charrsid1781117 u}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 nk. He gathered his roses and perfumes; there remains no cluster to eat \'85 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab We are a ransom and redemption for the glory of our revered teacher \emdash a light unto Israel \emdash +Elijah ha-Kohen, the fourth [of the group, that is, the fourth generation of this dynasty], may [our consolations] be a shelter for him, let the pure light relieve him and gladden his heart, the life of our master, the ga\rquote on}{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 , }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a prince of the people in Torah. May he be found worthy of the building of the Temple and the gathering of the scattered sheep [Israel]\'85 +May he turn sorrow into abundant happiness and joy. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid10754532 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 God will make known the suffering and the crushed spirit of the afflicted soul\'85 + who acted out of decency and steadfastness in Torah, the greatness and holiness of our leader and teacher, our master Elijah ha-Kohen, head of the yeshivah Ge\rquote on Ya\rquote akov, of blessed memory}{\rtlch \af0 \ltrch +\insrsid10754532\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 with the utmost humility. May the }{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 z}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 addik }{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and his splendor\'85 assure him his place with Abraham, Seth and Jacob. May He who dwells in the heavens have mercy upon him; may the living God fulfill for him to sustain us in life. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid2584292 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab [Members] of the community \emdash a}{\rtlch \af0 \ltrch +\insrsid2584292\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 part of what they are obliged to do \emdash cleansed their hand}{\rtlch \af0 \ltrch \insrsid2584292\charrsid1781117 s}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 and said, \'93blessed be the true judge.\'94 Were it not for the conditions on the sea and land and the week}{\rtlch \af0 \ltrch \insrsid995470\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + on the roads...the servants }{\rtlch \af0 \ltrch \insrsid995470\charrsid1781117 would }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 have presented themselves\'85}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote +\ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Translated from the Arabic.}}}{\rtlch \af0 \ltrch \insrsid1@391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid995470 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The God of Israel will keep away from him all forbidden things}{\rtlch \af0 \ltrch +\insrsid995470\charrsid1781117 \'85 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 redeem him and atone him, our master the fourth\'85and the tribulations of time. +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid995470 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch +\insrsid12391429\charrsid1781117 \tab [Additions to this letter, }{\rtlch \af156 \ltrch \insrsid995470\charrsid1781117 at }{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 the top of the page] +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid995470 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \tab Our venerable teacher Elijah the fourth, may my }{\rtlch \af0 \ltrch \insrsid995470\charrsid1781117 K}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ing and }{\rtlch \af0 \ltrch \insrsid995470\charrsid1781117 S} +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 hepherd watch over him\'85 may he be engraved in }{\rtlch \af0 \ltrch \insrsid995470\charrsid1781117 the }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 law + of uprightness; may he be strengthened; may he be cleansed of any iniquity, may he be saved from the evil eye and may he be inscribed in the book of life\'85}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Sefunot}{\rtlch \af0 \ltrch \insrsid4342917 , pp. 14\endash 16.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + [The complete text of this letter in Hebrew may be found in }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Or ve-Ni}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid12391429\charrsid1781117 h}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 umim +}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , pp. 136. ff.] +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s21\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 +c) Condolence letter from Eli ha-Mumheh b. Abraham to Hesed b. Yashar upon the death of his son +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid995470 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 a letter of condolence from the eleventh century (Ms. Budapest-Kaufman 143), published by A. Scheiber in his }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Geniza Studies}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Alexander Scheiber, \'93 +Kondolenzschreiben des Eli Hamumche B. Abraham An Chesed B. Jaschar,\'94 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Geniza Studies}{\rtlch \af0 \ltrch \insrsid4342917 , New York, 1891, 166\endash +172. The letter is presented here in its entirety along with Scheiber\rquote s comments. On the history of the brothers Abraham, known as Abu Sa\rquote ad, and Hesed, known as Abuna}{\rtlch \af0 \ltrch \cf2\insrsid4342917 s}{\rtlch \af0 \ltrch +\insrsid4342917 ar, of the Al-Tastari family, their status, and relations with the caliph\rquote s family, see Y. Mann, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 The Jews in Egypt and in Palestine under the Fatimid Caliphs,}{\rtlch \af0 \ltrch +\insrsid4342917 Oxford University Press, 1922, I:76\endash 83. Concerning their tragic death, see part II:79\endash 81: Three letters were written. Note especially the letter by th +e gaon Rabbi Solomon b. Judah, the author of the condolence letter to Rabbi Sahlan Aluf b. Abraham, who was the spiritual leader of the Babylonian community, and who refers to them as \'93two }{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917\charrsid546867 z} +{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid546867 addikim}{\rtlch \af0 \ltrch \insrsid4342917 .\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid3025761 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and }{\rtlch \ab\af0 \ltrch \b\insrsid3025761\charrsid1781117 i}{ +\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 ts Recipient}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash Eli b. Abraham, known as Ha-Mum}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 h}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 eh, wrote a letter to }{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 esed b. Sahl Yashar Al-Tastari, on the death of his son Yashar. }{\rtlch \af0 \ltrch +\cf2\insrsid12391429\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 esed was one of the leaders and wealthy members of the Egyptian community and in close contact with the family of the caliph. He was one +of the most important members of the Babylonian community in Fustat at that time and was closely involved with public affairs. R. Hai Gaon exchanged letters with him in 1038, and they sought to offer support to R. Sahlan Aluf b. Abraham}{\rtlch \af0 +\ltrch \insrsid14164988\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the spiritual leader of the Babylonian community. We know nothing of the circumstances of death of his son Yashar, but }{\rtlch \af0 \ltrch +\cf2\insrsid12391429\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 esed and his brother Abu Sahd Abraham died unnatural deaths. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash a short letter, it begins with a salutation to Hesed the senior and statements accepting the Divine judgment}{ +\rtlch \af0 \ltrch \insrsid14164988\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and concludes with }{\rtlch \af0 \ltrch \insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +s of accepting Divine judgment; in the middle are words of placation and consolation. +\par +\par Text of the Letter: +\par +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil +\cellx540\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7880\clshdrawnil \cellx8420\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\intbl +\tx360\faauto\adjustright\rin0\lin0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0\afs24 \ltrch \fs24\insrsid12391429\charrsid1781117 a1\cell }\pard\plain \ltrpar +\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +Consolation is sent in reverence to the holiness in\'85 +\par Mar Rav Hesed the elder the valiant, May his rock and redeemer protect him\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil \cellx540\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7880\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 b1\cell The rock \emdash His deeds are perfect, yea all his ways are just and good}{\rtlch \ai\af0 \ltrch \cs16\i\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0\ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid546867 Deut.}{\rtlch \af0 \ltrch \insrsid4342917 32:4.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil \cellx540\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7880\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell [in as much as a] king\rquote +s command is authoritative, and none can say to him, \'93What are you doing?\'94}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid546867 Eccl}{\rtlch \af0 \ltrch \insrsid4342917 . 8:4.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par [You are righteous] O Lord; your rulings are just}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 119:137.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par [Your commandments] are always fulfilled. And long life +\par will [replace d]eath. The repose of life will replace a sigh +\par [and all g]ood. Renewed power and heart. In reverence to his holiness +\par [}{\rtlch \af0 \ltrch \cf2\insrsid12391429\~arrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 esed the elde]r, the dear, the important, and may he watch over him \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil \cellx540\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7880\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell +[his rock and his redeemer watch over him and and may he re]lieve the anxiety from his heart and may he console him +\par [in his mourning as] he promised as [a mother comforts her son] so I will comfort you; you shall find comfort +\par in Jerusalem,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 +\ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch +\insrsid4342917 66:13.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow3\irowband3\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone ^clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil \cellx540 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7880\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 15\cell [Comfort for the r[uin]}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 22:4, \'93comfort me for the ruin.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that has befallen us upon hearing the tidings\line [that we have heard]}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Ob.}{\rtlch \af0 \ltrch \insrsid4342917 1:1, +\'93We have received tidings.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and the great agony upon the death of his cherished one }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 [that is, his son] +\par }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [We grieve}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab 2 }{ +\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Sam.}{\rtlch \af0 \ltrch \insrsid4342917 1:26, \'93I grieve for you.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 most sore]ly over him. But it is fitting and proper that we accept true + +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid9207470 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [Divine Judgment }{\rtlch \af0 \ltrch \insrsid9207470 from }{\rtlch \af0 \ltrch +\insrsid9207470\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 im]}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid4140030 Berakhot}{\rtlch \af0 \ltrch \insrsid4342917 19a, \'93and he stands and accepts Divine judgment for him.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid9207470 who }{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 transmits and does not break +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [}{\rtlch \af0 \ltrch \insrsid9207470\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +is covenant]}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Joshua}{\rtlch \af0 \ltrch \insrsid4342917 + 7:15, \'93because he broke.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for any of }{\rtlch \af0 \ltrch \insrsid9207470\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 iscreatures}{\rtlch \af0 \ltrch +\insrsid14164988\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12603968 where there is one [fate]}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5905669 Song of Songs}{\rtlch \af0 \ltrch \insrsid4342917 3:7.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil \cellx540\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7880\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 20\cell }\pard\plain \ltrpar +\s17\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12603968 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 [ +for all of them]. }{\rtlch \af156 \ltrch \insrsid12603968 The}{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 servant [must not] complain against his }{\rtlch \af156 \ltrch \insrsid12603968\charrsid1781117 L}{\rtlch \af156 \ltrch +\insrsid12391429\charrsid1781117 ord for +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12603968 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 [}{\rtlch \af0 \ltrch \insrsid12603968 in Your hand}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab I }{ +\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Chron.}{\rtlch \af0 \ltrch \insrsid4342917 29, 12.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12603968 i}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ] +}{\rtlch \af0 \ltrch \insrsid12603968 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 everything. }{\rtlch \af0 \ltrch \insrsid12603968 \'93}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +The Lord has given, and the Lord has taken away, [blessed be] +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the name of the Lord.}{\rtlch \af0 \ltrch \insrsid12603968 \'94}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 1:21. +}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 All is on loan, and He may again renew its stock.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 +\tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 14:7.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid16212167 M}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ay the Lord] accept all prayers}{\rtlch \af0 \ltrch \insrsid16212167 for [the departed]}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 .\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow5\irowband5\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth648\clshdrawnil \cellx540\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7880\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel1\adjustright\rin0\lin405\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 [3] Condolence Letter \emdash Rabbi Zema}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 h}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ben R. Solomon Duran (Algiers, Fift%nnthcwZKKhmW century) +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid10048331 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and }{\rtlch \ab\af0 \ltrch \b\insrsid10048331\charrsid1781117 i}{ +\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 ts Recipient}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash R. Zema}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 h}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + wrote the letter as the opening of a responsum he addressed to R. David Hacohen, who lived in Granada, on the death of his brother, who was apparently also known to R. Zema}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 h}{\rtlch \af0 \ltrch +\cf2\insrsid10048331\charrsid1781117 ,}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and }{\rtlch \af0 \ltrch \insrsid10048331\charrsid1781117 was }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 close to him. Finding out about the death of the brother shocked and greatly saddened R. Zema}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 h. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter is divided into 25 sections dealing with the following themes: +\par The writer describes the physical pain and suffering he underwent when he learned of the death. +\par The emotional storm and thoughts of the writer. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid13109360 {\rtlch \af416180211544352850 \ltrch \insrsid12391429\charrsid1781117 The gloom and fear of death that strikes the \'93cedars,\'94 + in contrast to the existence of the evildoers who are compared to those who are \'93wicked yet well off.\'94 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Feelings of anger and anxiety for those dear ones who have fallen in the net of death. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid13109360 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The writer complains about the injustice in evidence \emdash \'93 +the evil person for whom things are good}{\rtlch \af0 \ltrch \insrsid10048331\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'94}{\rtlch \af0 \ltrch \insrsid13109360 }{\rtlch \af0 \ltrch \insrsid10048331\charrsid1781117 i}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 n contrast to the righteousness of the }{\rtlch \ai\af0 \ltrch \i\cf2\insrsid12391429\charrsid1781117 z}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 addik }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 and the evil that befalls him. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Lamentations and yearning for the deceased brother. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid10048331 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'93The rightness of }{\rtlch \af0 \ltrch \insrsid10048331\charrsid1781117 D}{\rtlch \af0 +\ltrch \insrsid-8734134782369459860\charrsid1781117 ivine judgment\'94 \emdash all according to God\rquote s will. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid12148583 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +The writer takes comfort in the faith that the soul of the departed shares the fate of the soul}{\rtlch \af0 \ltrch \insrsid13109360 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of the righteous and }{\rtlch af0 \ltrch +\insrsid10048331\charrsid1781117 is }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 bound in the bond of everlasting life. +\par Consolations and salutations to R. David Cohen and his family, with expectation for comfort }{\rtlch \af0 \ltrch \insrsid12148583\charrsid1781117 in }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the building up of Jerusalem. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +An abridgement of the letter is presented here, divided into sections (the notes cite the sources used by the writer). (See }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Or ve-Nihumim}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +, pp. 139\endash 143, for the full text.) +\par +\par Text of the Letter: +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid5120557 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Granada to R. David Hacohen, May God preserve him, son of Jonathan Hacohen, \line +May he rest in Paradise}{\rtlch \af0 \ltrch \insrsid5120557 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid5120557 W}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 hile }{\rtlch \af0 \ltrch +\insrsid7542981\charrsid1781117 he was }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 there his brother passed away, May he rest in Paradise}{\rtlch \af0 \ltrch \insrsid5120557 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 +\ltrch \insrsid5120557\charrsid1781117 B}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 efore I }{\rtlch \af0 \ltrch \insrsid7542981\charrsid1781117 replied to him}{\rtlch \af0 \ltrch \insrsid5120557 }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 I }{\rtlch \af0 \ltrch \insrsid5120557 wrote }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 him these words of consolation: +\par \ltrrow}\trowd \irow0\irowband0\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth456\clshdrawnil \cellx348\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8072\clshdrawnil \cellx8420\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl +\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid5120557 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 I am hamstrung. The strings of my heart}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 17:11. At the beginning of the letter the writer uses the words of }{\rtlch \ai\af0 \ltrch \insrsid4342917\charrsid16335552 Job }{\rtlch \af0 \ltrch \insrsid4342917 +to his companions in which he explains why consolation is useless, since he is very close to dying, for his tendons have been severed and the strings of his heart [have come undone].}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 fester}{\rtlch +\af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 p{\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \insrsid4342917 + 38:6: \'93My wounds stink and fester because of my folly.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12856449\charrsid1781117 and are }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 destroyed.}{\rtlch +\af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid14447357 Isaiah}{\rtlch \af0 \ltrch \insrsid4342917 + 24:1: \'93behold, the Lord will strip the earth bare.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 They }{\rtlch \af0 \ltrch \insrsid5120557 are }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 displaced, they stumble in judgment.}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid14447357 Isaiah}{\rtlch \af0 \ltrch \insrsid4342917 + 28:7: \'93They are muddled in their visions, they stumble in judgment.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12856449\charrsid1781117 My p}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +angs and throes}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 +\ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid14447357 Isaiah}{\rtlch \af0 \ltrch +\insrsid4342917 13:8: \'93They shall be seized by pangs and throes.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid5120557 have }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 bec}{\rtlch \af0 \ltrch +\insrsid5120557 o}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 me stronger and harsher.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 21:7: \'93Prosper and grow wealthy.\'94}}}{\rtlch \bf0 \ltrch!\insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid13451168 {\rtlch \af0 \ltrch \insrsid12856449\charrsid1781117 M}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ost of my inner spaces }{\rtlch \af0 +\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid14447357 Isaiah}{\rtlch \af0 \ltrch \insrsid4342917 + 2:21: \'93The clefts in the rocks and the crevices in the cliffs.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12856449\charrsid1781117 are }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +filled with cares}{\rtlch \af0 \ltrch \insrsid12856449\charrsid1781117 ,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {ootnrte \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \insrsid4342917 94:19: \'93When I am filled with cares.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12856449\charrsid1781117 +as are the }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 feelings in me and my thoughts in my heart}{\rtlch \af0 \ltrch \insrsid12856449\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid12856449\charrsid1781117 and a}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 s a fire burn}{\rtlch \af0 \ltrch \insrsid12856449\charrsid1781117 ing}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a forest,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \insrsid4342917 + 83:15: \'93as a fire burns a forest.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 burning swiftly across. }{\rtlch \af0 \ltrch \insrsid13451168\charrsid1781117 [My cares] have m}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +ade a crossing}{\rtlch \af0 \ltrch \insrsid13451168\charrsid1781117 ,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af63898 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid14447357 Isaiah}{\rtlch \af0 \ltrch \insrsid4342917 10:29: \'93They made the crossing; \lquote Geba is to be our night quarters!\rquote \'94 with \'93made the crossing\'94 used here as a phrase of rage and anger.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid13451168\charrsid1781117 [leaving] e}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 mbers }{\rtlch \af0 \ltrch \insrsid13451168\charrsid1781117 still }{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 glow}{\rtlch \af0 \ltrch \insrsid13451168\charrsid1781117 ing}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid16335552 Joel}{\rtlch \af0 \ltrch \insrsid4342917 2:3: \'93Their rear guard a devouring flame.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid8985984 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 All faces turned ashen}{\rtlch \af0 \ltrch \insrsid13451168\charrsid1781117 ;}{\rtlch \af0 +\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid16335552 Joel}{\rtlch \af0 \ltrch \insrsid4342917 + 2:6: \'93all faces turn ashen.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid13451168\charrsid1781117 a}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 shes bound up with bitterness. Their brightness}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid16335552 Joel}{\rtlch \af0 \ltrch \insrsid4342917 + 2:10: \'93Stars withdraw their brightness.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and }{\rtlch \af0 \ltrch \insrsid8985984\charrsid1781117 their }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 astonishing roar }{\rtlch \af0 +\ltrch \insrsid8985984\charrsid1781117 is }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 as young lions}{\rtlch \af0 \ltrch \insrsid8985984\charrsid1781117 , [as]}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the terror of a king}{\rtlch +\af0 \ltrch \insrsid8985984\charrsid1781117 ,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 +\rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid16335552 Proverbs}{ +\rtlch \af0 \ltrch \insrsid4342917 20:2: \'93The terror of a king is like the roar of a lion.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid8985984\charrsid1781117 indeed }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 a great terror.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid8062247 Gen}{\rtlch \af0 \ltrch \insrsid4342917 . 15:12: \'93and a great dread descended.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Panic fell among }{\rtlch \af0 \ltrch +\insrsid8985984\charrsid1781117 the cheerful}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 cedars. Those Boazes}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab Boaz \emdash an appelation for the owner of an estate, taken from the name of Boaz in the Book of }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6817976 Ruth}{\rtlch \af0 \ltrch \insrsid4342917 .}}}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid8985984\charrsid1781117 [are now] w}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 orthless, shorn, despised. Despite their lowliness\'85 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charsiU1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth456\clshdrawnil \cellx348\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8072\clshdrawnil \cellx8420\row }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel1\adjustright\rin0\lin405\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 [4] Carmi Family Condolence Letters +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid4013963 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 The letters in this section originate from one extended family, the Carmi brothers, a prominent Jewish family in Italy who}{\rtlch \af0 \ltrch \insrsid10416\charrsid1781117 se}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 members filled positions as \'93state appointees\'94 \emdash the highest level of Jewish leadership. They liv +ed in Cremona, in the northern Italian region of Lombardy, in the second half of the sixteenth century. J. Buchsenbaum collected and annotated the Carmi family letters in his book devoted to them. Tee condolence letters we have chosen }{\rtlch \af0 +\ltrch \insrsid4013963 are only }{\rtlch \af0 \ltrch \insrsid550161\charrsid1781117 those written }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 solely as \'93condolence letters\'94 to mourners}{\rtlch \af0 \ltrch \insrsid10416\charrsid1781117 , }{ +\rtlch \af0 \ltrch \insrsid550161\charrsid1781117 which }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 can serve as examples of the form and writing style common in }{\rtlch \af0 \ltrch \insrsid10416\charrsid1781117 that }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 period for }{\rtlch \af0 \ltrch \insrsid550161\charrsid1781117 this }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 type of letters. +\par }\pard\plain \ltrpar\s25\ql \fi180\li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid550161 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \tab Most of the letters are not signed}{\rtlch \af0 \ltrch \insrsid550161\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid550161\charrsid1781117 and }{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 a few bear truncated signatures or initials. Buchsenbaum feels that + the writer who collected the letters intentionally blurred the names so that others could not identify them. It was customary at that time for writers who were members of }{\rtlch \af0 \ltrch \insrsid550161\charrsid1781117 a }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 social group to refrain from explicitly using the names of their friends and acquaintances. +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid9513810 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \tab The first three letters cited were composed as laments and consolation for the death of }{\rtlch \af0 \ltrch \insrsid550161\charrsid1781117 a }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +Carmi uncle, Jekutiel Hacohen, who died in Tammuz }{\ltrch \af262 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \'f9\'ec"\'e1) 1572}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ). }{\rtlch \af0 \ltrch \insrsid9513810\charrsid1781117 +This wa}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 s most probably Jekutiel b. Abraham Porto Katz, the father-in-law of Menahem Ottolenghi of Lodi. a relationship was forged between Saul Raphael Carmi and Jekutiel Porto }{\rtlch \af0 \ltrch +\insrsid9513810\charrsid1781117 through }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 their wives, who were apparently sisters.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab Y. Buchsbaum, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Iggerot Bet Karmi,}{\rtlch \af0 \ltrch \insrsid4342917 98 n. 1.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par a) }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Condolence letter to the son-in-law of the deceased}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 +\tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , p. 98. We have divided the letter into rows to make it easier for the reader to related to the letter\rquote +s form and content; we have done the same for the other letters as well.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and the Recipient}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash + J. Buchsenbaum feels that the writer of this letter is, perhaps, Abraham Carmi, the third son of Saul Raphael Carmi,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid8062247 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab The student of the }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 gaon}{\rtlch \af0 \ltrch \insrsid4342917 Piscarollo; }{\rtlch \af0 \ltrch \insrsid4342917\charrsid6817976 R. }{\rtlch \af0 \ltrch \insrsid4342917 David }{ +\rtlch \af0 \ltrch \insrsid4342917\charrsid6817976 Samuel}{\rtlch \af0 \ltrch \insrsid4342917 , called Zanvil b. Kalonymus Piscarol, the personal rabbi of the Carmi family, who lived at that time in Vercelli located in Piedmont.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 whowas addressing the son-in-law of the deceased. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with four themes: +\par }\pard \ltrpar\ql \li360\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin360\itap0\pararsid9513810 {\rtlch \af0 \ltrch \insrsid9513810\charrsid1781117 1.}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +Opening statements and admonitions to the departed\rquote s son-in-law +\par {\listtext\pard\plain\ltrpar \s20 \rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \hich\af0\dbch\af0\loch\f0 2.\tab}}\pard\plain \ltrpar\s20\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls20\adjustright\rin0\lin720\itap0\pararsid9513810 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Eulogy +\par {\listtext\pard\plain\ltrpar \s20 \rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \hich\af0\dbch\af0\loch\f0 3.\tab}Lamentation +\par {\listtext\pard\plain\ltrpar \s20 \rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \hich\af0\dbch\af0\loch\f0 4.\tab}}\pard \ltrpar\s20\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls20\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Condolences +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \page }{ +\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Text of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil +\cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 1\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3043295 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab To }{\rtlch \af0 \ltrch +\insrsid3043295\charrsid1781117 my }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 dear relative, may God protect and preserve him, Shalom}{\rtlch \af0 \ltrch \insrsid4013963 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab I know that for }{\rtlch \af0 \ltrch \insrsid3043295\charrsid1781117 your }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 livelihood God has sent you to Latisana (a town in Veneto), as it is written: The sun rises, and the sun sets: +\par \tab And as our Sages, of blessed memory, have said: \'93before a person dies, the master of his house is appointed.\'94}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid200 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6817976 BB}{\rtlch \af0 \ltrch \insrsid4342917 91a.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid13917846 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp0037\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \tab }{\rtlch \af0 \ltrch \insrsid3043295\charrsid1781117 N}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ow I must console you. In any event, to halt the flow of words I cannot, for my spirit is pressing }{\rtlch +\af0 \ltrch \insrsid13917846\charrsid1781117 upon}{\rtlch \af0 \ltrch \insrsid4013963 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 me, for bitter mourning I have }{\rtlch \af0 \ltrch \insrsid3043295\charrsid1781117 felt }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 upon the death of your father-in-law, of blessed memory}{\rtlch \af0 \ltrch \insrsid13917846\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781217 + \par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid13917846 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \tab }{\rtlch \af0 \ltrch \insrsid13917846\charrsid1781117 He }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 was the foremost }{\rtlch \af0 \ltrch \insrsid13917846\charrsid1781117 one in }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 everything involving holiness. Surely, all Jewry will weep for him as +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab they wept for Aaron the Priest, may peace be with him}{\rtlch \af0 \ltrch +\insrsid13917846\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid13917846\charrsid1781117 Indeed, }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +he was a descendant of Aaron, having performed deeds of Aaron, }{\rtlch \af0 \ltrch \insrsid13917846\charrsid1781117 and }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he will find his peace}{\rtlch \af0 \ltrch \insrsid13917846\charrsid1781117 .}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6817976 Yoma }{\rtlch \af0 \ltrch \insrsid4342917 +71a.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid13917846\charrsid1781117 M}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ay he rest in peace with all the other }{\rtlch \ai\af0 \ltrch +\i\cf2\insrsid12391429\charrsidj1781117 z}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 addikim }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 in Gan Eden, and because of this, in my lamentation over him I said the following lines:}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab See Buchsbaum\rquote s note, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 i}{\rtlch \ai\af0 \ltrch +\i\insrsid4342917\charrsid5066409 bid.}{\rtlch \af0 \ltrch \insrsid4342917 , 99 n. 4: \'93This is taken literally from R. Judah Alharizi\rquote s poem in }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Takhkemoni}{\rtlch \af0 \ltrch \insrsid4342917 + (J. Toporowski edition, Ma}{\rtlch \af0 \ltrch \cf2\insrsid4342917 h}{\rtlch \af0 \ltrch \insrsid4342917 barot le-Sifrut publications, Tel Aviv, 1952, ch. 50, p. 291).}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell }\pard\plain \ltrpar +\s17\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \highlight7\insrsid12391429\charrsid1781117 +lines from Takhkemoni}{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\ltrch \af262\afs24 \rtlch +\f262\fs24\lang1037\insrsid12391429\charrsid1781117 \'e4\'f9\'f8 \'e0\'f9\'f8 \'ec\'e5 \'e1\'e9\'ef \'f6\'e1\'e0 \'f8\'e5\'ed \'ee\'e7\'e4\'e4 \'ec\'e1\'e9 \'ec\'f4\'f8\'e5\'e3\'ea \'ee\'e3\'e5\'eb\'e4 \'f0\'f2\'f0\'e4}{\rtlch \af0\afs24 +\ltrch \fs24\insrsid12391429\charrsid1781117 +\par }{\ltrch \af262\afs24 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \'e0\'fa\'e4 \'ee\'e0\'e5\'f8 \'f2\'e5\'ec\'ed \'e5\'fa\'f9\'eb\'e5\'ef \'ee\'e7\'f9\'ea \'eb\'ef \'e4\'f9\'eb\'e9\'f0\'e4 \'e1\'f2\'f8\'f4\'ec \'fa\'e7\'f0 +\'e4}{\rtlch \af0\afs24 \ltrch \fs24\insrsid12391429\charrsid1781117 +\par }{\ltrch \af262\afs24 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \'e5\'e0\'f0\'e9 \'ee\'e0\'f0\'e4 \'e4\'f0\'e7\'ed \'f0\'f4\'f9\'e9, \'eb\'e9 \'f0\'e4\'f4\'eb\'e5\'ec \'f2\'ec\'e9 \'f6\'e9\'f8\'e9}{\rtlch \af0\afs24 \ltrch +\fs24\insrsid12391429\charrsid1781117 . +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab +I have known you as a man of words, your words have kept him who stumbled from falling. Pray that your consolation will appease my soul and the soul of our brothers and teacher }{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 who }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 are steeped in sadness in my name. }{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 M}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ay it be that }{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 the }{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 words of your consolation run while I am still alive, and that I will remain\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 15\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid13720635 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 alive thanks to you, and }{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 may }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +your reward be doubled from the Heavens. My teacher and rabbi, may the Lord watch over him}{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 [I +}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 pay}{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 my]}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 respects to you}{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 .}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 W}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ere it not for +the illness of his wife and eldest daughter, he would have lived long enough to lament and console you, in the same }{\rtlch \af0 \ltrch \insrsid2760246\charrsid1781117 way }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +that that he was joyous in his letter to you about your finding your match, for }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 mazal tov, amen.}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 May you have peace. Vercelli, 4 Menahem ab (5300)}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid2188025 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Buchsenbaum, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid2188025 ibid}{\rtlch \ai\af0 \ltrch +\i\insrsid4342917\charrsid5066409 .}{\rtlch \af0 \ltrch \insrsid4342917 , n. 7, thinks that the year was 1572 and not as listed here.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\ltrch \af262 \rtlch +\f262\fs24\lang1037\insrsid12391429\charrsid1781117 \'ec\'f4"\'f7}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [=1540]. +\par }{\rtlch \af0 \ltrch \insrsid13720635 W}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ishing you deliverance of consolation, your relative Anonymous }{\ltrch \af262 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \'f8\'f4"\'e0}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\lastrow \ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + +\par }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \page b) +}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 a consolation letter to the deceased\rquote s brother}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 +\tab J. Buchsenbaum, 99.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +Author of the Letter and the Recipient }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash One of the sons of S. R. Carmi wrote this letter on the death of Jekutiel Hacohen}{\rtlch \af0 \ltrch \insrsid201019\charrsid1781117 ,}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 to Jehiel Porto, the uncle of the sons of S. R. Carmi and his brother Jekutiel Hacohen (the deceased). The writer uses quotations from the Bible and Talmud. From the letter\rquote +s contents one can see that both the writer and the recipient were well versed in Jewish learning. +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 + +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with six themes: +\par {\listtext\pard\plain\ltrpar \rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \hich\af0\dbch\af0\loch\f0 1.\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar\tx360\jclisttab\tx720\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid201019 { +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Describing the magnitude of the tragedy +\par {\listtext\pard\plain\ltrpar \rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \hich\af0\dbch\af0\loch\f0 2.\tab}The inability of the writer to provide consolation +\par {\listtext\pard\plain\ltrpar \rtlch \af0 \ltrch \insrsid201019\charrsid1781117 \hich\af0\dbch\af0\loch\f0 3.\tab}}{\rtlch \af0 \ltrch \insrsid201019\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +Apology by the writer for rousing the mourner\rquote s sorrow +\par {\listtext\pard\plain\ltrpar \rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \hich\af0\dbch\af0\loch\f0 4.\tab}Words of lamentation and lament +\par {\listtext\pard\plain\ltrpar \rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \hich\af0\dbch\af0\loch\f0 5.\tab}A request that Jehiel Porto }{\rtlch \af0 \ltrch \insrsid13720635 should }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +send him the lamentation he recited about the deceased +\par {\listtext\pard\plain\ltrpar \rtlch \af0 \ltrch \insrsid201019\charrsid1781117 \hich\af0\dbch\af0\loch\f0 6.\tab}}{\rtlch \af0 \ltrch \insrsid201019\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Blessings and conclusion +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s20\ql \li0\ri0\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +Text of the Letter: +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell \tab My distinguished Uncle, may God protect and preserve him, +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid2187587 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab What can I compare or liken to You}{\rtlch \af0 \ltrch \insrsid1719748 ?}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid1719748 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 o whom can }{\rtlch \af0 \ltrch \insrsid1719748 one }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +liken Me, to whom can I be compared}{\rtlch \af0 \ltrch \insrsid1719748 ?}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid2187587 I}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 suffer}{\rtlch \af0 \ltrch +\insrsid6955097\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117V your honor}{\rtlch \af0 \ltrch \insrsid1719748 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid6955097 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab }{\rtlch \af0 \ltrch \insrsid6955097\charrsid1781117 A}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 s vast as a house}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab +See Buchsenbaum\rquote s note, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 i}{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 bid.}{\rtlch \af0 \ltrch \insrsid4342917 , 99: \'93certainly it must be \lquote as the sea\rquote , see }{\rtlch \ai\af0 +\ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 2:13.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is our rupture, and it consumes half our flesh. If so, how shall I console you}{\rtlch \af0 \ltrch +\insrsid6955097\charrsid1781117 ?}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab \'93}{\rtlch \af0 \ltrch \insrsid6955097\charrsid1781117 H}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 e made expiation for himself\'94 as it is written}{\rtlch \af0 \ltrch \insrsid6955097\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Lev.}{\rtlch \af0 \ltrch \insrsid4342917 16:7; that is, I myself need expiation.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid6955097\charrsid1781117 R}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 evenge shall be far from my thoughts, perhaps pain has seized us, agony like a woman in childbirth, I will not \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell }\pard\plain \ltrpar +\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12323918 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 find re +spite until the light of my eyes is gone. Until now I have acted foolishly, to bestir}{\rtlch \af0 \ltrch \insrsid6955097\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12323918\charrsid1781117 his eminence}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 over +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab +his dead one and to remind him what has been decreed that it should be found.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li-4452962359270719426\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab See }{ +\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid11420266 Pes}{\rtlch \af0 \ltrch \insrsid4342917 . 54b. }}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Indeed, my heart wrenches inside me and }{\rtlch \af0 \ltrch \insrsid12323918\charrsid1781117 +my }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 innards +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12323918 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab are wounded. I can +not refrain from coming to lament %n your honor and to tell of my great sorrow. I call upon trustworthy witnesses to attest to this poem, that it should be }{\rtlch \af0 \ltrch \insrsid12323918\charrsid1781117 as }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 witness for me, that you will not be forgotten +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab from my utterances as long as I live. I will bitterly lament my discourse.}{\rtlch \f0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab +The entire poem, with some errors as well as a number of changes adapted to the event, is also listed as a poem by Alharizi (see n. 4), }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Takhkemoni}{\rtlch \af0 \ltrch \insrsid4342917 (}{\rtlch \af0 \ltrch +\i\insrsid4342917 i}{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid5066409 bid.}{\rtlch \af0 \ltrch \insrsid4342917 , p. 387), where it was written upon the grave of Ezekiel the Prophet.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin512\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell Alharizi }{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 Takhkemoni}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0\afs24 \ltrch +\fs24\insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab +Servant of the Lord, distinguished Jekuthiel}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 +\rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Alharizi\rquote s poem reads \'93 +The prophet of the Lord, the distinguished Ezekiel.\'94 Here the person is named Jekuthiel, and }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 kohen}{\rtlch \af0 \ltrch \insrsid4342917 (servant of the lord) and two of the Hebrew articles }{\rtlch \ai\af0 +\ltrch \i\insrsid4342917 \'93heh\'94, }{\rtlch \af0 \ltrch \insrsid4342917 to maintain the poetic metre in Hebrew.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 15\cell \tab +And now, thank the Lord, I know that your honor did not refrain}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid5340492 Song of Songs}{\rtlch \af0 \ltrch \insrsid4342917 7:3.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 from }{\rtlch \af0 \ltrch \insrsid12323918\charrsid1781117 bewailing }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 him with lamentations, and moans, and sounds. May you give me from the garden and orchard that you planted }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 [}{\rtlch \af0 \ltrch \insrsid12323918\charrsid1781117 +i.e}{\rtlch \ai\af0 \ltrch \i\insrsid12323918\charrsid1781117 .,}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 : send me the lament you gave. Author}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ],}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid11420266 BB}{\rtlch \af0 \ltrch \insrsid4342917 + 39b..}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 so that they may be }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 totafot}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + between my eyes and for a remembrance in the pages of the letter.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid6707373 Ezra}{\rtlch \af0 \ltrch \insrsid4342917 27:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I remain in the vale of tears}{\rtlch \af0 \ltrch \insrsid802467\charrsid1781117 ,}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 yearning for salvation from the Lord}{\rtlch \af0 \ltrch \insrsid802467\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid802467\charrsid1781117 T}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 he wound\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow8592246450919088465\irowband3\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 20 \cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid802467 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab of our smitings He will heal, as }{\rtlch \af0 +\ltrch \insrsid802467\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e swore to us from on high, so }{\rtlch \af0 \ltrch \insrsid802467\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e will }{\rtlch \af0 +\ltrch \insrsid802467\charrsid1781117 fill }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 us}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tb +See Buchsbaum\rquote s note, 100 n. 23: \'93There is a one-word space here in the manuscript, apparently the word \lquote from the cup of\rquote has been deleted.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid802467\charrsid1781117 with }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 consolation}{\rtlch \af0 \ltrch \insrsid802467\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid802467\charrsid1781117 Y}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ou}{\rtlch \af0 \ltrch \insrsid802467\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + my ancient King, may he make you the highest and a blessing on the earth. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Lombardy, the month of Menahem AB\'85 from the groveler in dust and ashes, grandson of his honor}{\ltrch +\rtlch \f0\fs24\lang1037\insrsid12391429\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\ltrch \af262 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \'f4\'ec\'e5}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Cremona\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0\afs24 \ltrch \fs24\insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 c) }{\rtlch +\ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Condolence letter to a brother over the death of a brother-in-law}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{ +\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5580553 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , p. 116}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid802467 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash }{ +\rtlch \af0 \ltrch \insrsid802467\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he writer is }{\rtlch \af0 \ltrch \insrsid802467\charrsid1781117 possibly }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Saul Raphael Carmi.}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1075\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab See Buchsbaum\rquote s note, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 ibid}{\rtlch \ai\af0 \ltrch +\i\insrsid4342917\charrsid5066409 .}{\rtlch \af0 \ltrch \insrsid4342917 , n. 2: \'93The signature is not clear; perhaps it reads }{\ltrch \af262 \rtlch \f262\fs20\lang1037\insrsid4342917 \'f9"\'f7}{\rtlch \af0 \ltrch \insrsid4342917 [S\'94c].}}}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with two themes: +\par {\listtext\pard\plain\ltrpar \s20 \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard\plain \ltrpar\s20\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid16327472 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Eulogy and lamentatio +n over the deceased +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}}\pard\plain \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid16327472 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +Concluding statement with the blessing of the True Judge. +\par }\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0\afs24 \ltrch +\fs24\insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +Text of the letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth378\clshdrawnil +\cellx270\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8144\clshdrawnil \cellx8414\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 1\cell }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3868273 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab I have verily heard, and my being has trembled, over hearing the tidings}{\rtlch \af0 \ltrch \insrsid3868273\charrsid1781117 ;}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 no spot of my flesh is sound, my heart is awhirl}{\rtlch \af0 \ltrch \insrsid3868273\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab He has left me alive }{\rtlch \af0 \ltrch \insrsid3868273\charrsid1781117 but }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 the light of my eyes is also not with me, for we have lost a verdant olive tree, fair, choice fruit, from among the descendants of Aaron.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote +\ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Jekuthiel Cohen of Latisana: see above the letter by the deceased\rquote s son-in-law.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + For the mountains I take up weeping and wailing, for the pastures in the wilderness, a dirge, my eyes shed streams of water over our great misfortune. I do not have the strength to console, instead of me now may \cell }\pard\plain \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth378\clshdrawnil \cellx270\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8144\clshdrawnil \cellx8414\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 5\cell }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 your strength increase, my brother, to console me with the good things, }{\rtlch \af0 \ltrch \insrsid3868273\charrsid1781117 for }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +the exposition of your words gives me light. }{\rtlch \af0 \ltrch \insrsid3868273\charrsid1781117 E}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ven so, after what I have heard, +that one blesses over the good, I will bless softly, in a whispering vo}{\rtlch \af0 \ltrch \insrsid3868273\charrsid1781117 ice: Blessed be the True Judge\'85}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard\plain \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow1\irowband1\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth378\clshdrawnil +\cellx270\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8144\clshdrawnil \cellx8414\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch \scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 [5] a condolence letter from a son to his father}{\rtlch \ab\af0 \ltrch \cs16\b\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab +Buchsbaum, 166.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid3868273 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and the Recipient}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \emdash The author is unknown.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab +See Buchsbaum\rquote s note}{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5580553 , }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 ibid}{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 .}{\rtlch \af0 \ltrch \insrsid4342917 , 37 n. 91.}}}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 From the letter\rquote s contents, however, it seems that a son is writing a condolence letter to his father (upon the death of the father}{\rtlch \af0 \ltrch \insrsid3868273\charrsid1781117 \rquote }{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 s sister). From the letter we learn of the son\rquote s worrying that his father }{\rtlch \af0 \ltrch \insrsid3868273\charrsid1781117 should not }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +cause himself too much anguish when mourning. This is the first letter found from this period that concludes with the consolation phrase: }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 \'93 +May the Lord comfort you among the other mourners of Zion, Amen.\'94}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab +See chapter 3 concerning the entrance and exit of those paying condolence calls to the mourners home, page 000.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 This phraseology is not common %n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n condolence letters from this period. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with three themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls4\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Description of the writer\rquote s sadness upon hearing the evil tidings +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}The advantage of accepting condolences over becoming mired in mourning +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}Expressions of condolence +\par }\pard\plain \ltrpar\s20\ql \li0\ri0\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +\par Text of the Letter: +\par +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil +\cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 +\rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 1\cell }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl +\tx360\faauto\adjustright\rin0\lin0\pararsid14375923 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab +It would not be believed would it be told how great was my sorrow, and my body was seized in terror}{\rtlch \af0 \ltrch \insrsid14375923\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I could not find no rest, and I could not + +\par be quiet, day and night, my groaning serve}{\rtlch \af0 \ltrch \insrsid14375923\charrsid1781117 d}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 as my bread, my roaring pour}{\rtlch \af0 \ltrch \insrsid14375923\charrsid1781117 ed}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 forth as water, when I heard +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab the bad tidings that God has taken the righteous woman, your sister, + of blessed memory, and her soul will be gathered to }{\rtlch \af0 \ltrch \insrsid14375923\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 im. }{\rtlch \af0 \ltrch \insrsid14375923\charrsid1781117 I}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 f\line I come with praise to speak to your heart and your consolation, my master my father, may God protect and preserve him}{\rtlch \af0 \ltrch \insrsid14375923\charrsid1781117 .}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \cell }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid13778447 \rtlch +\af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid14375923\charrsid1781117 W}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +hat shall I do today with empty consolations, not for succor and not to benefit but only to sadden. So I will briefly mention to the }{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 honorable,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + that condolences have two good characteristics \emdash joy in this world and good recompense in the World to Come; and mourning has two bad characteristics \emdash loss of recompense for hardships }{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 [i.e., there is a reward in the World to Come for suffering, }{\rtlch \af0 \ltrch \insrsid12391429\charrsid13778447 while one who mourns +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + too much, who does not lovingly accept suffering, loses that reward] and punishment for overanxiousness.\cell }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone +\clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row +\ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10 \cell }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl +\tx360\faauto\adjustright\rin0\lin0\pararsid14375923 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab }{\rtlch \af0 \ltrch +\insrsid14375923\charrsid1781117 T}{\rtlch \af0\ltrch \insrsid12391429\charrsid1781117 o an intelligent one as yourself this is sufficient.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab a similar motif occurs in the }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid1867703 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \insrsid4342917\charrsid5580553 of Samuel}{\rtlch \af0 \ltrch +\insrsid4342917 Hanagid (Diwan, 1:122) in the second part of the poem (lines 24\endash 32), where the Nagid addresses the son of an unnamed deceased person to comfort him: \'93 +Read my writing and take comfort, from the notion / that excessive mourning is unwanted / and he will not gain by disputing with the Lord / about evil occurrences and judgments / but all is well c +onsidered / and every number is included in a book / and the day of each cedar will come and it will fall / and a rock will bedisplaced as any chaff and thorns / and there is a reward to the one who is restrained in his mourning / and there is a reward t +o one who extols in high phrases.\'94 +\par }\pard \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid6895881 {\rtlch \af0 \ltrch \insrsid4342917 +The writer takes part in the sorrow of the living and attempts to console him and lessen his pain. In this selection he mentions a number of existing truths, namely: that every living thing will die at its appointed time, +as the Lord has decreed; that he will \'93not gain\'94 + from a dispute with God, whose thoughts and judgments are set and cannot be changed; that the Lord does not want mourning; and the great reward waiting for those who are restrained in mourning. See J. Levin, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 +Al Mavet, }{\rtlch \af0 \ltrch \insrsid4342917 158\endash 159, where we read: \'93The ancient determination of fate here is God\rquote +s decree, the way of all flesh enforced through fate is set here through the absolute will of the Creator of the world. Self-restraint in mourning is none other than forbeara +nce and equanimity of ancient manhood, a reward for the non-injurious balance of equanimity was transformed into divine reward, and the imperative of experience gained from life became a religious commandment.\'94}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 He who fences in calamities will fence in our calamities and say to our woe, }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 enough, and console us among the other mourners of Zion, }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 Amen. +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab 22 in the Omer, }{\ltrch \af262 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \'e4\'f9" +\'ed] 1590}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ], one who is steeped in unrest, your sighing son.\cell }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt +\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil +\cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch \scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 [6] Condolence letter over a daughter\rquote s death}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , p. 190.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and the Recipient}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash One of the sons of S\'94R Carmi to their cousin, an anonymous }{\rtlch \ai\af0 \ltrch +\i\cf2\insrsid12391429\charrsid1781117 K}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 aha}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid12391429\charrsid1781117 Z}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 (}{\rtlch \ai\af0 \ltrch +\i\cf2\insrsid12391429\charrsid1781117 K}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 ohen }{\rtlch \ai\af0 \ltrch \i\cf2\insrsid12391429\charrsid1781117 Z}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 edek), }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 was a }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 melammed}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 (young children\rquote +s teacher) in the household of Menahem Ottolenghi (the brother-in-law of Jekutiel}{\rtlch \af0 \ltrch \insrsid11163277\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the oldest child of S\'94 +R Carmi) whose daughter had died. The letter was written in }{\rtlch \af0 \ltrch \cf6\insrsid12391429\charrsid1781117 1575}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 (}{\ltrch \af262 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 +\'f9\'ec"\'e4}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ).}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , pp.28, 37, 43.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with three themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls5\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Commiserating with the mourner\rquote s sorrow +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}Awareness }{\rtlch \af0 \ltrch \insrsid11163277\charrsid1781117 of the fact that }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 that the mourner bear}{\rtlch \af0 \ltrch \insrsid11163277\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 his suffering with love and accept}{\rtlch \af0 \ltrch \insrsid11163277\charrsid1781117 s}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the Divine judgment eases the uneasiness of the writer +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}Words of consolation +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Text of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth456\clshdrawnil +\cellx348\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8072\clshdrawnil \cellx8420\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 1\cell \tab Listen well High Priest. +\par }\pard\plain \ltrpar\s21\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid11163277 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \tab We have heard the tidings and our innards are in turmoil over the death of your Honor\rquote s daughter, may her soul be bound up in the bond of everlasting life}{\rtlch \af0 \ltrch \insrsid11163277\charrsid1781117 .} +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid11163277\charrsid1781117 O}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +ur bowels are overcome with heat when we think of the sorrow befalling your Honor because of this. +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab }{ +\rtlch \af0 \ltrch \insrsid11163277\charrsid1781117 A}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 fter we have realized that this is the way of all mankind, and recognized that your Honor\rquote s wisdom}{\rtlch \af0 \ltrch +\insrsid8537775\charrsid1781117 is great,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth456\clshdrawnil \cellx348 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8072\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 5\cell and that you accept these tribulations from the Lord with love and accept His judgment}{\rtlch \af0 \ltrch \insrsid8537775\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{ +\rtlch \af0 \ltrch \insrsid8537775\charrsid1781117 B}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 y blessing him for this }{\rtlch \af0 \ltrch \insrsid8537775\charrsid1781117 bad }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +in the same way that people bless Him for the good, we have been assuaged and accommodated ourselves to the Lord\rquote s will, by our entreating the glory and splendor [of the }{\rtlch \af0 \ltrch \insrsid8537775\charrsid1781117 C}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 reator], so that His mercy will }{\rtlch \af0 \ltrch \insrsid8537775\charrsid1781117 fill }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 this gap}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Berakhot}{\rtlch \af0 \ltrch \insrsid4342917 19a.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 in your Honor +\rquote s house and from the home}{\rtlch \af0 \ltrch \insrsid8537775\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid8537775\charrsid1781117 of those }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 who love }{\rtlch \af0 \ltrch \insrsid10372219\charrsid1781117 h}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is name}{\rtlch \af0 \ltrch \insrsid8537775\charrsid1781117 .}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 He shall write and sign the name of your glory along with the name of all the members of his family and his relatives in the Book of Good Life.\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth456\clshdrawnil \cellx348\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth8072\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell \tab +Those who are in sorrow at your Honor\rquote s sorrow and who take consolation in his consolations, his brothers-in-law and those who love his name\'85\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth456\clshdrawnil \cellx348\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8072\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch \scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 +\par +\par [7] a Condolence Letter over the Death of a Mother-In-Law}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab +Buchsbaum, 192.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 + +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +Author of the Letter and the Recipient}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash Though neither the author nor the recipient are known for certain, we do know that the letter stems from Cremona since it mentions \'93He-Aluf Ashkenazi +\'94 (R. Eliezer) who lived there until 1576. This is a short condolence letter about a woman who died well advanced in years, and there is no need to offer other extensive words of consolation. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +\par Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with two themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls6\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Shock upon hearing the evil tidings +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}Condolences +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Text of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par \ltrrow}\trowd \irow0\irowband0\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth378\clshdrawnil \cellx270\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8144\clshdrawnil \cellx8414\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl +\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell I grew very faint and felt crushed by the disheartening news that your elderly, saintly mother-in-law, of blessed memory, has passed away. And knowing that y +our honor is like an angel of the Lord, I shall not offer lengthy condolences with +\par empty words, but only implore you to not be overly wrought with grief, for she has died at an advanced age, in the fullness of years, and would that it be that no one would die before reaching that age.\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth378\clshdrawnil \cellx270\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth8144\clshdrawnil \cellx8414\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid4551223 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [8] Condolence Letter over the Death of a Granddaughter}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , 303 +\endash 4.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and the Recipient}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash + Moses Carmi (the younger son of S. R. Carmi) writes to his father-in-law R. Isaac Foa (a resident of Reggio and one of the mos +t important rabbis in Italy in his day). The time: Kislev 1571. (The writer uses quotations from the Talmud, language not found in other letters from this period.) +\par +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letters deals with two themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls7\adjustright\rin0\lin720\itap0\pararsid4551223 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The writer apologizes that even though he is \'93of junior years\'94 he }{\rtlch \af0 \ltrch +\insrsid4551223\charrsid1781117 has ventured to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 writ}{\rtlch \af0 \ltrch \insrsid4551223\charrsid1781117 e}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a condolence letter. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid4551223\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}}{\rtlch \af0 \ltrch \insrsid4551223\charrsid1781117 S}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 adness engulf}{ +\rtlch \af0 \ltrch \insrsid4551223\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 everyone owing to the pain of R. Isaac Foa. +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 + +\par }\pard\plain \ltrpar\s6\qj \li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch \ab\af0\afs24\alang1037 \ltrch \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 Text of the Letter +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\br~rnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil +\cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch +\af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par 1\cell \tab Arioch}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 +\ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab a sobriquet of honor; a title of honor given to }{\rtlch \ai\af0 \ltrch +\insrsid4342917\charrsid5066409 Samuel}{\rtlch \af0 \ltrch \insrsid4342917 (Babylonian amora, first generation, beginning of the third century). See }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 Shabbat}{\rtlch \af0 \ltrch \insrsid4342917 + 53a; K}{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 iddushin }{\rtlch \af0 \ltrch \insrsid4342917 39a; }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 Menahot }{\rtlch \af0 \ltrch \insrsid4342917 38b; }{\rtlch \ai\af0 \ltrch +\i\insrsid4342917\charrsid5066409 Hulin}{\rtlch \af0 \ltrch \insrsid4342917 76b.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par \tab The consolation of a foolish Babylonian such as myself is almost tantamount to blasphemy.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab See }{ +\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid5066409 baba Kama}{\rtlch \af0 \ltrch \insrsid4342917 38a; meaning \'93I do not know how to offer condolences.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I am young, and what can I }{ +\rtlch \af0 \ltrch \insrsid4143959\charrsid1781117 say }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and how can I console you}{\rtlch \af0 \ltrch \insrsid4143959\charrsid1781117 ? +\par }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid4143959\charrsid1781117 My }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 dwelling}{\rtlch \af0 \ltrch \insrsid7306120\charrsid1781117 [i.e., my body]}{\rtlch +\af0 \ltrch \insrsid13765936\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 in }{\rtlch \af0 \ltrch \insrsid7306120\charrsid1781117 a }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +time of distress and the upheavals of the times}{\rtlch \af0 \ltrch \insrsid7306120\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid13765936\charrsid1781117 turns }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 round and round }{\rtlch \af0 \ltrch \insrsid7306120\charrsid1781117 toward }{\rtlch \af0 \ltrch \insrsid13765936\charrsid1781117 your }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 hol}{\rtlch \af0 \ltrch +\insrsid13765936\charrsid1781117 y}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 house. I know the distress of }{\rtlch \af0 \ltrch \insrsid7306120\charrsid1781117 your }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 soul, for I am with }{ +\rtlch \af0 \ltrch \insrsid7306120\charrsid1781117 you }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 in }{\rtlch \af0 \ltrch \insrsid14631613\charrsid1781117 your }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 distress}{\rtlch \af0 \ltrch +\insrsid10372219 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 5\cell }{\rtlch \af0 \ltrch \insrsid15693328\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 houghts }{\rtlch \af0 \ltrch \insrsid14631613\charrsid1781117 concerning }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 your honor }{\rtlch \af0 \ltrch \insrsid15693328\charrsid1781117 disturb me for }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the radiance }{\rtlch \af0 \ltrch \insrsid15693328\charrsid1781117 of your }{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 countenance change}{\rtlch \af0 \ntrch \insrsid15693328\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsi\1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid11416988 Dan}{\rtlch \af0 \ltrch \insrsid4342917 . 5:6; 10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + Outside the sword of the earthquake dealt }{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 death}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to your wisdom;}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab The reference is to the earthquake that hit Ferrara on 19 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid11416988 Kislev}{\rtlch \af0 \ltrch \insrsid4342917 + 371 (17 Nov. 1530). R. I. Foa had relatives and friends in Ferrara, and his son-in-law R. M. I. lived there. }}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 into the house stole death through the windows of }{\rtlch \af0 \ltrch +\insrsid15693328\charrsid1781117 your }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 cherished granddaughter, may her soul be bound up in the bond of everlasting life}{\rtlch \af0 \ltrch \insrsid15693328\charrsid1781117 .}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid15104734\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid15693328\charrsid1781117 he }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 chambers of his heart }{\rtlch \af0 \ltrch +\insrsid15104734\charrsid1781117 show }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 great }{\rtlch \af0 \ltrch \insrsid15104734\charrsid1781117 alarm}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + for the men of his redemption and his extraordinariness in Ferrara;}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab Until th +is point the metaphor is based on the verses in }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid11416988 Deut}{\rtlch \af0 \ltrch \insrsid4342917 . 32:25 and }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch +\insrsid4342917 1:20.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the supports of his insights are paralyzed, and he cannot express his sorrow, for our brothers and teachers steeped in sorrow\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell in Ferrara, }{\rtlch \af0 +\ltrch \insrsid15104734\charrsid1781117 unless }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the strength of the shepherd increase}{\rtlch \af0 \ltrch \insrsid15104734\charrsid1781117 s,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to }{ +\rtlch \af0 \ltrch \insrsid15104734\charrsid1781117 grant }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 them mercy before their return}{\rtlch \af0 \ltrch \insrsid15104734\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + and }{\rtlch \af0 \ltrch \insrsid15104734\charrsid1781117 to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 have mercy on them..}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab Perhaps the re%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%ncere%n%%nce is to the debts non-Jews owed to Jewish moneylenders; under the pretext of the earthquake they evaded paying their debts.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row }\pard\plain \ltrpar\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch +\scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par [9] Example of the writing of a condolence letter in Venice (sixteenth century) +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid3016977 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch +\b\insrsid12391429\charrsid1781117 Author of the letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \endash R. Solomon ben R. Joshua Alt Sh}{\rtlch \af0 \ltrch \insrsid10695270\charrsid1781117 u}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 l,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid1847736 +Sefer Megillat Sefer}{\rtlch \af0 \ltrch \insrsid4342917 , Venice 1652, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid1847736 ketav}{\rtlch \af0 \ltrch \insrsid4342917 27.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 in his }{\rtlch +\ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Megillat Sefer}{\rtlch \ai\af0 \ltrch \i\insrsid10695270\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 include}{\rtlch \af0 \ltrch \insrsid10695270\charrsid1781117 s}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 different }{\rtlch \af0 \ltrch \insrsid10695270\charrsid1781117 styles which }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +had been collected for the purpose of practicing correct writing, and as the author writes in the}{\rtlch \af0 \ltrch \insrsid10695270\charrsid1781117 introduction, its purpose is}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'93To }{\rtlch +\af0 \ltrch \insrsid10695270\charrsid1781117 train}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 young men}{\rtlch \af0 \ltrch \insrsid6584119\charrsid308133241 \rquote s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 hands to write }{\rtlch +\af0 \ltrch \insrsid6584119\charrsid1781117 to one an}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 other in }{\rtlch \af0 \ltrch \insrsid6584119\charrsid1781117 lofty }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 language.\'94 + That is, these were the accepted writing styles in that period. Also appearing there is a special style used for condolence letters. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash + The letter deals with three themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls8\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Lament over the deceased and sharing in the mourner\rquote s pain +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}Prayer for the deceased as well as for the living family members +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}Condolences consisting mainly of accepting the Divine judgment +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Text of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth378\clshdrawnil +\cellx270\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8280\clshdrawnil \cellx8550\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \cell }\pard\plain \ltrpar\s5\qc \li0\ri0\sl480\slmult1\keepn\widctlpar\intbl\tx360\faauto\outlinelevel4\adjustright\rin0\lin0 \rtlch \ab\af0\afs24\alang1037 \ltrch +\b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Lament for One Moaning the Loss of a Loved One\cell }\pard\plain \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtnch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl-2753993917976240078\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth378\clshdrawnil \cellx270\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8280\clshdrawnil \cellx8550\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 1\cell }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid11349039 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab I lift my voice in crying and wailing and moaning }{\rtlch \af0 \ltrch \insrsid11349039\charrsid1781117 like the }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ostriches. I will give +\par \tab no respite to myself}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch +\af0 \ltrch \insrsid4342917 2:18, \'93Give yourself no respite.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and tears }{\rtlch \af0 \ltrch \insrsid11349039\charrsid1781117 will }{\rtlh \af0 \ltrch \insrsid12391429\charrsid1781117 +flow from my eyes. Night +\par \tab and day I will cry with you. }{\rtlch \af0 \ltrch \insrsid11349039\charrsid1781117 A}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 t noon I will be embittered that the Lord has taken from you +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3016977 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab the cherished hart. May his soul be bound up in the bo +nd of eternal life with the Lord +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid4924362 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab Our God}{\rtlch \af0 \ltrch \insrsid4924362\charrsid1781117 .}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid4924362\charrsid1781117 M}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ay all the rest of the family live a long life, amen}{\rtlch \af0 \ltrch \insrsid4924362\charrsid1781117 .}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Pray be it that with me you will take comfort and give thanks to the Lord for all of His deeds, for we are the material and He is our }{\rtlch \af0 \ltrch \insrsid4924362\charrsid1781117 C}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 reator and what can you}{\rtlch \af0 \ltrch \insrsid4924362\charrsid1781117 say to }{\rtlch \af0 \ltrch \insrsid3016977\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid4924362\charrsid1781117 im and what can you do?} +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid6771793 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab And you, sir, do verily know that we are }{\rtlch \af0 \ltrch +\insrsid4924362\charrsid1781117 all }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 bound to bless Him, for the Lord has given and the Lord has taken away, blessed be the name of the Lord: and }{\rtlch \af0 \ltrch \insrsid11084060\charrsid1781117 H} +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e may add as }{\rtlch \af0 \ltrch \insrsid11084060\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e wishes}{\rtlch \af0 \ltrch \insrsid6771793\charrsid1781117 .}{\rtlch \af0 +\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlchIHTqbY \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab +Written at the end of the letter, and it means that from this point on the writer is permitted to add whatever he wishes.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab N.B. the writer +\par \tab a}{\rtlch \af0 \ltrch \insrsid6771793\charrsid1781117 ccepts his sufferings with love, an}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 d his end will be to the good. Your respected}{\rtlch \af0 \ltrch \insrsid6771793\charrsid1781117 servant. +}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth378\clshdrawnil \cellx270\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8280\clshdrawnil \cellx8550\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch \scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 [10] Condolence Letter to R. Moses b. R. Joseph Mitrani upon the Death of His Wife +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid6771793 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and the Recipient}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \endash R. Elazar b. Johai (Hakham from Tiberias, sixteenth century), one of the }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 hakhamim}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + who gathered around R. Mitrani (who at the time the letter was written was apparently a mourner himself), wrote a condolence letter }{\rtlch \af0 \ltrch \insrsid6771793\charrsid1781117 in 1567 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +to R. Moses Mitrani who lived in Safed, upon the death of the }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 rabbanit}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + (his wife or his mother?). These statements are found at the beginning of a responsum addressed to R. Mitrani over the question about leaving fields fallow}{\rtlch \af0 \ltrch \insrsid6771793\charrsid1781117 ,}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 in which many citations from the Bible are interwoven.}{\rtlch \ab\af0 \ltrch \cs16\b\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab +See M. Benayahu, first chapter and introduction to responsa by R. Moses Mitrani, 18.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s7\ql \li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel6\adjustright\rin0\lin0\itap0 \rtlch \ab\af0\afs24\alang1037 \ltrch \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 +\par Content of the Letter +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +The letter deals with five themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls64\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 An apology and allusion to the writer\rquote s situation that he himself is a mourner +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}A prayer for the deceased +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}Condolences to Rabbi Moses b. Joseph Mitrani +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1491\'3f. \tab}The importance and urgency of his query to Rabbi Moses b. Joseph Mitrani +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1492\'3f. \tab}A conclusion including wishes for long life +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par +\par +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Text of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 + +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil +\cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch +\af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell \tab His splendor fills the earth, his honor the Rabbi, may God protect +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid2239998 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab and bless him, }{\rtlch \af0 \ltrch \insrsid2239998\charrsid1781117 and since }{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 one cannot enter the palace gate wearing sackcloth}{\rtlch \af0 \ltrch \insrsid2239998\charrsid1781117 ,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid7104208 Esther}{\rtlch \af0 \ltrch \insrsid4342917 4:2.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I sewed over +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab my skin, I buried my glory in the dust, that for my iniquities I have been disgraced, and I stood +\par \tab silent}{\rtlch \af0 \ltrch \insrsid2239998\charrsid1781117 ;}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I was bowed with gloom,7like one mourning for his mother.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 35:14.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + And one who needs consolers is not able to console,\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 5\cell \tab I relent being but dust and ashes,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 42:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to write words of comfort over the death of the }{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 rabbanit }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 who +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid16192946 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab has passed on. And now I come in short to pray to God, the }{\rtlch \af0 \ltrch +\insrsid16192946\charrsid1781117 C}{\rtlch \af0 \ltr h \insrsid12391429\charrsid1781117 onsoler of Zion, may she go to rest +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid11084060 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab with }{\rtlch \af0 \ltrch \insrsid2239998\charrsid1781117 unworried}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 , }{\rtlch \af0 \ltrch \insrsid16192946\charrsid1781117 secure}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ladies.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 32:9.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid16192946\charrsid1781117 May t}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he consoler of Zion and the builder of Jerusalem in }{\rtlch \af0 \ltrch \insrsid15094550\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +is mercy give him to drink of the cup of consolation and build }{\rtlch \af0 \ltrch \insrsid16192946\charrsid1781117 for }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 him in Israel a faithful home}{\rtlch \af0 \ltrch +\insrsid15094550\charrsid1781117 ;}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 great will be the glory of this +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab latter home.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs\cs\cs\cs\cs\cs\cs\cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid7104208 Haggai}{\rtlch \af0 \ltrch \insrsid4342917 2:9.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + And now my Lord, the cause of the holiness of the land, make}{\rtlch \af0 \ltrch \insrsid15094550\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 me ready to remove my sackcloth from upon me,\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \trch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell }\pard \ltrpar +\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid11084060 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab }{\rtlch \af0 \ltrch \insrsid11084060 a}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +nd to wear clothes of triumph,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 +\ltrch \insrsid4342917 61:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to come before the king to plead to him, over a true and humble thing}{\rtlch \af0 \ltrch \insrsid16192946\charrsid1781117 ;}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 justice +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid1330909 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab }{\rtlch \af0 \ltrch \insrsid1330909\charrsid1781117 d}{\rtlch \af0 \ltrch +\insrsid16192946\charrsid1781117 id I don }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to }{\rtlch \af0 \ltrch \insrsid1330909\charrsid1781117 (}{\rtlch \af0 \ltrch \insrsid11084060 i.e., in order }{\rtlch \af0 \ltrch +\insrsid1330909\charrsid1781117 have you) }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 instruct}{\rtlch \af0 \ltrch \insrsid1330909\charrsid1781117 me}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , }{\rtlch \af0 \ltrch +\insrsid1330909\charrsid1781117 to cast light regarding }{\rtlch \af4292 \ltrch \insrsid12391429\charrsid1781117 the }{\rtlch \af0 \ltrch \insrsid1330909\charrsid1781117 laws }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of lands lying fallow for + +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab we rely upon everything being in his hand, and for everyt +hing regarding the commandments depending upon the land of Israel, the lovely land, that +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3889465 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab }{\rtlch \af0 \ltrch \insrsid3889465\charrsid1781117 Y}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ou made great +\par \tab with great waters, and }{\rtlch \af0 \ltrch \insrsid3889465\charrsid1781117 Y}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ou raised up over all deed}{\rtlch \af0 \ltrch \insrsid3889465\charrsid1781117 s}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 , and }{\rtlch \af0 \ltrch \insrsid3889465\charrsid1781117 Y}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ou planted it like a cedar of Lebanon. I have but one request +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab from my lord that I will ask +, that you not make my answer long in coming, since it is a time-linked commandment, \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 15\cell \tab and I will tell the Rabbi what I am seeking and what I have found and examined as far as I could, and the Rabbi with his fitting knowledge +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3889465 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab will separate the wheat from the chaff since I did not have }{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 Kaftor va-Ferah}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 + The name of a book on the agricultural laws pertaining to the land of Israel printed in Venice, 1549.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I am certain that }{\rtlch \af0 \ltrch \insrsid3889465\charrsid1781117 you }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 will guide me well. The question is: Please teach me, a Jew who hired\'85\'94 +\par }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3560544 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtmh \af0 \ltrch +\insrsid12391429\charrsid1781117 \tab and concludes his question: I will wait for God}{\rtlch \af0 \ltrch \insrsid3889465\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I will beseech him, may }{\rtlch \af0 \ltrch +\insrsid3889465\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e inscribe for a good life him and his descendants\rquote descendants}{\rtlch \af0 \ltrch \insrsid3889465\charrsid1781117 ,}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 and }{\rtlch \af0 \ltrch \insrsid3889465\charrsid1781117 may he }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +have many years over his domain, he and his children among the Jews, as there is the soul of the wise, also the pious in the heaven, and like a submissive soul to serve the service of a living person. }{\rtlch \af0 \ltrch \insrsid3560544\charrsid1781117 P +}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 raying for his welfare +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab +to the living God. The young man Elazar ben Johai.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 Responsa of }{ +\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid7104208 Mabit}{\rtlch \af0 \ltrch \insrsid4342917 (R. Moses b. Joseph Mitrani).}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow3\irowband3\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfre7 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch \scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 [11] Condolence Letter to a Mourner Steeped in His Suffering}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917 Ma\rquote ayan Ganim}{\rtlch \af0 \ltrch \insrsid4342917 , Venic, 1653, p. 15 (my appreciation to Prof. M. Benayahu who enabled me to view the source).}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid3560544 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch +\b\insrsid12391429\charrsid1781117 Author of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash R. Samuel b. R. Elhanan Jacob Archivolti, rabbi of the Jewish community in Padua, Italy (from 1568 until + his death, 26 Adar 5471 [1611]). }{\rtlch \af0 \ltrch \insrsid3560544\charrsid1781117 For }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 his volume }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Ma\rquote ayan Gannim}{\rtlch \af0 +\ltrch \insrsid3560544\charrsid1781117 , he wrote and edited}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 fifty letters and for twenty-five of them he included the replies. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab The letter printed here is unique in that it deals with both with rebuke as well as condolences. The wr +iter reproves the mourner for being too deeply steeped in his anguish and has reservations about the divine attributes using a metaphor from nature to prove to the mourner that after the tragedy that has befallen him he must take encouragement and anticip +ate better days. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with five themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs1998437368357852581 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls10\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Participation of the writer in the mourner\rquote +s sorrow and expression of the hope that the mourner will be given the strength to bear his anguish and be able to becalm his turbulent feelings. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}Sadness upon hearing that the mourner in his distress is having reservations about the divine attributes. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}The Lord is patient, but }{\rtlch \af0 \ltrch \insrsid3560544\charrsid1781117 when the appointed day arrives H}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 e will levy punishment. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1491\'3f. \tab}It is the way of mankind to grumble and it has become so habitual as to be second nature. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1492\'3f. \tab}After }{\rtlch \af0 \ltrch \insrsid3560544\charrsid1781117 the }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +bad, it is the turn for }{\rtlch \af0 \ltrch \insrsid3560544\charrsid1781117 the }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 good to come, and the mourner must look forward to it and desist from his anger. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Text of the letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 +a person writes many words to comfort his fellowman in his time of sorrow +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for death ha +s stolen, God forbid! +\par \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\intbl +\tx360\faauto\outlinelevel1\adjustright\rin0\lin405 \rlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab I lift to you my eyes flowing with tears for want of + +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +respite, for anything I propose is impossible,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 +\rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch +\af0 \ltrch \insrsid4342917 42:2, \'93you propose.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and there is no power +\par }\pard\plain \ltrpar\s26\ql \fi-342\li342\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin342 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 that can annul what has been decreed to roam the sea, the roiling sea of your perplexities, to raise the banner +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +in the tempest, the tempest of your self }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 a}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 nd your soul. May this be a comfort for your soul,\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell }\pard\plain \ltrpar +\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\intbl\tx360\faauto\outlinelevel1\adjustright\rin0\lin405 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 giving you power to bear the supreme reproof until the Lord looks down and beholds}{\rtlch \af0 \ltrch \cs16\scaps\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 3:50.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to restore your fortunes}{\rtlch \af0 \ltrch +\cs16\scaps\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 2:14.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid16200598 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \tab and have mercy on you}{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 ;}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 H}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 e will bear your ire, }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e will cast light on your forces as dark as the ice}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 6:16.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par \tab of the the perplexities}{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 ;}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +e will assuage your anger, }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e will calm your soul, setting it aright, and direct your heart to +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab His abode. My witness is in heaven}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp0043 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 16:19.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for I am in agony}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 2 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Sam.}{\rtlch \af0 \ltrch \insrsid4342917 1:9.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 over the bad +\par news +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab I +have heard, for I am benumbed and crushed,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 +\rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch +\af0 \ltrch \insrsid4342917 38:8.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and distress increased in my abode \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell }\pard\plain \ltrpar\s20\ql \fi-405\li405\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin405 \rtlch \af0\afs24\alang1037 +\ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 like grief in your courtyards and agony in my heart like a moan because of your idea. I was saddened by your suffering +\par }\pard \ltrpar\s20\ql \fi-315\li315\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin315\pararsid16200598 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and even more }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 by }{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 your wrath. You have begun to have reservations about God\rquote s +\par }\pard \ltrpar\s20\ql \fi-405\li405\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin405 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 attributes, leniently, by saying that all the good which you have been graced with for many + +\par }\pard \ltrpar\s20\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a day was taken from you in the prime of her life.}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 Based on }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid3356114 Daniel }{\rtlch \af0 \ltrch +\insrsid4342917 7:25.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 It is the way of man that +\par }\pard \ltrpar\s3596922953723469861\ql \fi-405\li405\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin405 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 if he sin}{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 s}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 against }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is creator and make}{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 s}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 im angry, a thousand years in his eyes and }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 H}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 e, with }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is mercy, will patiently}{\rtlch \af0 \ltrch \scaps\insrsid12391429\charrsid1781117 \cell +}\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 15\cell }\pard\plain \ltrpar\s20\ql \fi-405\li405\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin405\pararsid16200598 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 bear his guilt and when }{\rtlch \af0 \ltrch \insrsid16200598\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +is wrath shall come upon the appointed day and time, man shall be humbled and +\par }\pard \ltrpar\s20\ql \fi-405\li405\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin405\pararsid1194561 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 mortal brought low,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 2:9; 5:15.} +}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 when }{\rtlch \af0 \ltrch \insrsid1531410\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e rises to }{\rtlch \af0 \ltrch \insrsid1194561\charrsid1781117 dictate}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid1194561\charrsid1781117 to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 man and }{\rtlch \af0 \ltrch \insrsid1194561\charrsid1781117 to }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 judge him, }{\rtlch \af0 \ltrch \insrsid1194561\charrsid1595742571985111546 [the man] }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 will +lament, and his soul will bitterly torment him and he will be ruled by it. For if a good man would understand his foundation}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 11:3, \'93When the foundations are destroyed...\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 when +\par }\pard \ltrpar\s20\ql \fi-315\li315\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin315 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +he leaves the oppressions of the world, he should be happier on the day of his death than on the days of his birth (perhaps one should say today)}{\rtlch \af0 \ltrch \insrsid1194561\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + +\par }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\intbl\tx360\faauto\outlinelevel1\adjustright\rin0\lin405 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid1194561\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 his habit has become second nature to him and just as he cried and raged upon leaving his mother\rquote s womb, \cell }\pard\plain \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 20\cell }\pard\plain \ltrpar\s20\ql \fi-315\li315\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin315 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 with his going forth to a more distinguished, important place than where he had been, so he will be obligated\cell }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 +\rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\lastrow \ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar +\tx360\faauto\outlinelevel1\adjustright\rin0\lin405\itap0\pararsid15625630 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid15625630 ******}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \tab }{\rtlch \af0 \ltrch \insrsid15625630 +\par }{\rtlch \af0 \ltrch \scaps\insrsid15625630\charrsid1781117 }{\rtlch \af0 \ltrch \scaps\insrsid12391429\charrsid1781117 [}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 pages 16\endash 17 of the letter] +\par \ltrrow}\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1 +\cell }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\intbl\tx360\faauto\outlinelevel1\adjustright\rin0\lin405\pararsid1194561 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 by his nature to complain on the day of his death, since he too is flesh}{\rtlch \af0 \ltrch \cs16\scaps\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid7613718 Gen:}{\rtlch \af0 \ltrch \insrsid4342917 6:3.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 desirous of material things}{\rtlch \af0 \ltrch +\insrsid1194561\dharrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid1194561\charrsid1781117 E}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +ven worse than this, there will be saddened over him the hearts of those who know him and are yet +\par }\pard \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\intbl\tx360\faauto\outlinelevel1\adjustright\rin0\lin405\pararsid3828797 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 still alive. Can a man be of use to God?}{\rtlch \af0 +\ltrch \cs16\scaps\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 0:2.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The burden of his complaints will be burdensome }{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 him when his anger +\par }\pard \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\intbl\tx360\faauto\outlinelevel1\adjustright\rin0\lin405 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 comes upon him}{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 ,}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and a man's feet are responsible for him when he time comes; they lead him\cell }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 +\ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone +\clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row +\ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\intbl +\tx360\faauto\outlinelevel1\adjustright\rin0\lin405\pararsid3828797 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 from far to live in a place that he wants } +{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 whether }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 consciously or unconsciously}{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + +\par }{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ow can a man rage against God, for }{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e}{ +\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the most high}{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 rule}{\rtlch \af0 \ltrch +\insrsid3828797\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the world +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 justly +\par and nations with equity.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch +\insrsid4342917 98:9, \'93He will rule the world justly, and its peoples with equity.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 If man be overwise, he should cry at birth, +\par he should rejoice at the expiring of an old man, for man is destined to labor from birth}{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and an elderly person will perish seeing +\par good. Have you never heard that the air darkens before the dawn}{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 ?}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell }\pard\plain \ltrpar +\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\intbl\tx360\faauto\outlinelevel1\adjustright\rin0\lin405 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid3828797\charrsid1781117 A}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 fter it rises}{\rtlch \af0 \ltrch \insrsid3828797\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + the sun spreads the feathers of its wings and [shines] like a groom coming forth +\par from the chamber.}{\rtlch \af0 \ltrch \cs16\scaps\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch +\insrsid4342917 19:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 After the sun rises, the cloud dulls its splendor. After +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +the cloud, the air becomes warm. After the heat come thunderous torches +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3828797 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and noises agitating the earth and those in it: after the thunder a tempest +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 rages. And after the tempest, the sun rises and all illness \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 15\cell and distress will be gathered,}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 104:22.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and the shadows flee,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid7613718 Song of Songs}{\rtlch \af0 \ltrch \insrsid4342917 2:17}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and they will do no more harm. Man then goes out to his work, and shepherd}{\rtlch \af0 +\ltrch \insrsid12352864\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 my sheep +\par as thsy said, Let them praise the Lord for his steadfast love, His wondrous deeds for mankind.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 107, 8.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Yea, all who live in the world +\par and inhabit the earth,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch +\insrsid4342917 18:3.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for whom dust is their origin, together rich and poor will pass +\par }\pard\plain \ltrpar\s2\ql \fi-405\li405\ri0\sb120\sl360\slmult1\keepn\widctlpar\intbl\tx360\faauto\outlinelevel1\adjustright\rin0\lin405 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 over them as happens in these days in their time. The people sitting in the dark of their mother\rquote s womb, light shined on them, and it is their birth and the days of\cell }\pard\plain \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 20\cell their childhood. After childhood come the stage of youth, after youth they go through the prime of life. After the prime of life, they will bear the paths +\par of old age. After, after old age, they will reach the edge of hoary old age. After +\par hoary old age, the time of affliction arrives. After affliction }{\rtlch \af0 \ltrch \insrsid12352864\charrsid1781117 they }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 will come in ripe old age to the grave.}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 %%ntn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 5:26.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par And just as they }{\rtlch \af0 \ltrch \insrsid12352864\charrsid1781117 who }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 lived until now wait to die, so they now die to see eternal\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\ltrrow\ts11\trgaph9223372036854775807\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl4\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 25\cell life of light in the God\rquote +s Torah in the land of the living.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch +\insrsid4342917 38:11.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 These are the limits +\par of our ways and for them we should thank the Lord for the past. To gladden his heart in the present\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow5\irowband5\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\trowd \irow6\irowband6\lastrow \ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trftsWidthA3\trwWidthA6\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone\clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7847\clshdrawnil \cellx8414\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \cell and to pray for the future. And now my brother set your thinking to thank the Lord, remove the anger from your heart, and divest yourself from evil, lest it be a snare within you}{\rtlch \af0 \ltrch +\insrsid12352864\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and }{\rtlch \af0 \ltrch \insrsid12352864\charrsid1781117 may }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +God comfort you with the comfort of Zion, Amen, may it be so}{\rtlch \af0 \ltrch \insrsid12352864\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow6\irowband6\lastrow \ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trftsWidthA3\trwWidthA6\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7847\clshdrawnil \cellx8414\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch \scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \page [12] Condolence Letters by Joseph Hacohen (15}{\rtlch \af0 \ltrch \super\insrsid12391429\charrsid1781117 th}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 century) +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid15408536 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch +\b\insrsid12391429\charrsid1781117 Author of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash Joseph Hacohen (author of }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Emek ha-Bakha}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ) of Spain, lived in the first half of the 16th century and wrote these four letters of condolence. The first two letters were written to his father-in-law}{\rtlch \af0 \ltrch \insrsid1663324\charrsid1781117 ,}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 R. Abraham Hacohen, rabbi of the Bologna community after the death of his son (that is, the brother-in-law of Joseph Hacohen}{\rtlch \af0 \ltrch \insrsid15408536\charrsid1781117 )}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 , who died in the region of the cities of Rimini and Imola. (}{\rtlch \af0 \ltrch \insrsid15408536\charrsid1781117 This is }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +stressed in almost the same phraseology in the two letters, \'93and I say, let there be no dew in Rimini and no rain in Imola. For there fell the shield of warriors, the crowning glory of the young men\'94 [patterned after 2 Samuel 1:21: \'93 +O hills of Gilboa \emdash let there be no dew or rain on you.\'94] The second letter, similar to the first, was apparently written for fear that the first did not reach its destination (the two letters have identical stylistic elements). The lat +er two letters were written to his nephew, Zerahiah Halevi, a physician in Voghera, at the time of the death of his father, Joseph Halevi (that is, Joseph Hacohen\rquote s brother-in-law).}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 My appreciation to Dr. Avraham David who referred me to \'93The Letter Collection of Joseph Hacohen, author of }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Emek ha-Bakha}{\rtlch \af0 +\ltrch \insrsid4342917 \'94 (in Hebrew) which he published in }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Italia,}{\rtlch \af0 \ltrch \insrsid4342917 5 (1985), 9\endash +14. We have quoted the letters and comments as cited there and added additional comments of our own.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par \tab All four letters were, of course, written by the same person, but we must pay attention to the significant stylistic differences between the first two and the latter two. The first letters deal with \'93untimely death,\'94 so more than half }{\rtlch +\af0 \ltrch \insrsid15408536\charrsid1781117 of }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the first }{\rtlch \af0 \ltrch \insrsid15408536\charrsid1781117 consists of }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +lamentations and wailing, and only in the later section are there so +othing, comforting statements. Joseph Hacohen himself suffered harsh tragedies twice in his life, when his firstborn son Joshua died at the age of twenty, drowning in a river on the 9th of Tammuz 1540 , and the death of his other son Isaac when five month +s old, in 1541. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of Letter A}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , p. 54, Letter 24.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with three themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls11\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Lamentation and wailing over the deceased. +\par {\listtext\pard\plain\ltrpar \ltrch \ai\afs2 \rtlch \i\f262\fs24\cf2\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid12391429\charrsid1781117 Z}{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 idduk ha-din}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 (\'93the rightness of divine judgment\'94) \emdash \'93The Lord has given, and the Lord has taken away.\'94 +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}Prayer for the deceased and condolences to his family. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Text of the Letter}{\rtlch \af0$\ltrch \insrsid12391429\charrsid1781117 : +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 +\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8528\clshdrawnil \cellx8420\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl +\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Prince and worthy of Israel, the leader of the Diaspora of Israel, my teacher, my father-in-law as my distinguished rabbi, +\par Abraham Hacohen, may God preserve him, in Bologna\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone +\clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8528\clshdrawnil \cellx8420\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trrh777\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb +\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl +\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell Prince and worthy of Israel, the lea +der of the Diaspora of Ariel, my teacher, my father-in-law, may the Lord bless him. I looked forward to peace and there was no good}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 See }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 30:26: \'93I looked forward to good fortune, but evil came.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \line +in the time of calm. }{\rtlch \af0 \ltrch \insrsid3235903\charrsid1781117 B}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ehold}{\rtlch \af0 \ltrch \insrsid3235903\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + your writing horrified me for there is no balm in Imola}{\rtlch \af0 \ltrch \insrsid3235903\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 + The city of Imola near Bologna.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid3235903\charrsid1781117 C}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 an no physician be found there, for why was my suffering}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid7613718 Habakkuk}{\rtlch \af0 \ltrch +\insrsid4342917\charrsik&867703 }{\rtlch \af0 \ltrch \insrsid4342917 1:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 brother-in-law,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 The name of that brother-in-law, his father-in-law\rquote s son \emdash is not known for certain.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 may he rest in paradise}{\rtlch \af0 \ltrch +\insrsid3235903\charrsid1781117 , not healed?}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \line Let there be no\line dew}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 Hebrew ms, }{\ltrch \af262 \rtlch \f262\fs20\lang1037\insrsid4342917 \'e8\'f8}{\rtlch \af0 \ltrch \insrsid4342917 , which should be }{\ltrch \af262 \rtlch \f262\fs20\lang1037\insrsid4342917 \'e8\'ec}{\rtlch \af0 \ltrch +\insrsid4342917 , dew.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 in Rimini}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 Hebrew name, } +{\ltrch \af262 \rtlch \f262\fs20\lang1037\insrsid4342917 \'e0\'f8\'ee\'e9\'f0\'e5}{\rtlch \af0 \ltrch \insrsid4342917 .}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 nor rain in Imola, for there has fallen the crowning of\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trrh777\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb +\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420%nw \ltrrow}\trowd \irow2\irowband2\ltrrow +\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\pard \ltrpar +\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3235903 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 youth, for I call them Abel-shittim,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid1867703 Numbers }{\rtlch \af0 \ltrch \insrsid4342917 33:49.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for there fell the shield of warriors}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 2 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Samuel}{\rtlch \af0 \ltrch \insrsid4342917 1:21.} +}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'85, and we had a day of wrath}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 21:30.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + and scorn and time tossed arrows +\par of hardship like crumbs. That strong person passes away over, this I eulogize and wail +\par over +\par the creation of the Lord}{\rtlch \af0 \ltrch \insrsid3235903\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid3235903\charrsid1781117 C}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 heap}{\rtlch +\af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 1 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Samuel}{\rtlch \af0 \ltrch \insrsid4342917 15, 9. +}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and worthless stillness to a land planted by the finger of God shall come up to fell us,\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 +\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb +\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell +}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3235903 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 over these my eyes flow with tears and my soul is mourning and moaning,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \stlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid14447357 Isaiah}{\rtlch \af0 \ltrch \insrsid4342917 29:2; } +{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid1867703 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 2:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid6120560\charrsid1781117 my}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid6120560 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 cheek wet with tears.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\sLSer\insrsiR4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid1867703 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 1:2.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + How can we plead, how can we prove our innocence only to bless H}{\rtlch \af0 \ltrch \insrsid6120560\charrsid1781117 im}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 who gives and H}{\rtlch \af0 \ltrch \insrsid6120560\charrsid1781117 im}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 who takes, for all is +\par from Him, and against our will }{\rtlch \af0 \ltrch \insrsid6120560\charrsid1781117 we }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 live and die. }{\rtlch \af0 \ltrch \insrsid6120560\charrsid1781117 I}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 f time erred, and it shows us such a thing from He who is near +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to all who call Him, who helps all his creatures, we ask to remove tears from our eyes and to sate +\par us with perfect joy}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 +\ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \insrsid4342917 + 16, 11.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and his soul He will hide in the light hidden for his worshipers that He has bestowed\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow3\irowband3\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 +\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb +\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 15\cell +upon His angels and hosts, and those who are near Him He will comfort and He will repair this breach among Israel for life, and so on\'85.\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 +\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb +\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of Letter B}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , pp. 55\endash 56, Letter 26}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with three themes: +\par {\listtext\pard\plain\ltrpar \rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \hich\af0\dbch\af0\loch\f0 1.\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar\tx360\jclisttab\tx720\faauto\ls12\adjustright\rin0\lin720\itap0\pararsid6120560 +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Lamentation and wailing over the deceased. +\par {\listtext\pard\plain\ltrpar \rtlch \ai\af0 \ltrch \i\cf2\insrsid12391429\charrsid1781117 \hich\af0\dbch\af0\loch\f0 2.\tab}}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid12391429\charrsid1781117 Z}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 +idduk ha-din}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 (\'93the rightness of divine judgment\'94) \emdash +\par }\pard \ltrpar\ql \li360\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin360\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1. Death is the way of the world; +\par 2. Death is a trial for the righteous; +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 3. \'93The Lord has given, and the Lord has taken away.\'94 +\par }{\rtlch \af0 \ltrch \insrsid6120560\charrsid1781117 3.\tab }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Condolence and prayer for the deceased. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Text of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil +\cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 1\cell Prince and worthy of Israel, the leader of the Diaspora of Ariel, my teacher, my father-in-law, may the Lord bless him. I looked forward to peace and there is none, for +\parmd the writ of your honor startled me, }{\rtlch \af0 \ltrch \insrsid15341698\charrsid1781117 it }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 destroyed my rest, hounded me when I heard that the apple of our eye has been taken away}{\rtlch \af0 +\ltrch \insrsid15341698\charrsid1781117 ;}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \line for\line this my heart is sick,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 '.:17.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + my eyes stream with tears, and I fall prostrate, saying, there is no dew}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 +See above, Hebrew reads }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 \'93tar,\'94}{\rtlch \af0 \ltrch \insrsid4342917 while it should be }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 \'93tal.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + in Rimini and no rain in Imola, for there fell the shield of warriors}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 2 }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid4140030 Sam.}{\rtlch \af0 \ltrch \insrsid4342917 1:21. }}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , a glorious diadem}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote +\ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid1867703 Prov}{\rtlch \af0 \ltrch \insrsid4342917 . 4:9.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of + the young men. Behold I am calling them Abel Shittim}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid1867703 Num}{\rtlch \af0 \ltrch \insrsid4342917 . 33:49.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + for there he cast away the bitter, impetuous time, give half the burden of his hardships like crumbs. If a strong man}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 25:8.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 will leave us land as an inheritance, death will pluck us, while }{ +\rtlch \af0 \ltrch \insrsid15341698\charrsid1781117 with }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a cedar planted by the finger of God, one shall come to fell us,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 14:8, }}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + over these my heart is sorrowed,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch +\insrsid4342917 29:2; }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 2:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and }{\rtlch \af0 \ltrch \insrsid7347137\charrsid1781117 my }{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 cheek day and night wet with tears}{\rtlch \af0 \ltrch \insrsid7347137\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 1:2.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid7347137\charrsid1781117 T}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 his I will take to heart, that this is the way of the }{\rtlch \af0 \ltrch \insrsid11696930\charrsid1781117 lowly }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +world, and that there is no escape from it, a time to cast away agony and a time for gathering.\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nbclbr%nb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\b|Prnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \asllx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid00000078\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrno\e \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108|trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 10\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12672551 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 For }{\rtlch \af0 \ltrch +\insrsid12672551\charrsid1781117 will not }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 our }{\rtlch \af0 \ltrch \insrsid12672551\charrsid1781117 C}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 reator discern this, }{\rtlch \af0 \ltrch +\insrsid12672551\charrsid1781117 and H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is emanations}{\rtlch \af0 \ltrch \insrsid12672551\charrsid1781117 ?}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 On the angels }{\rtlch \af0 \ltrch +\insrsid12672551\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e casts reproach,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 4:18.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for they quarreled as did the armies of the heavens, and the great lights withdrew their brightness.}{\rtlch +\af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid44 2917 Stet in the ms. [}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 nokham}{\rtlch \af0 \ltrch \insrsid4342917 +], should be }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 nogham}{\rtlch \af0 \ltrch \insrsid4342917 . }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid16335552 Joel}{\rtlch \af0 \ltrch \insrsid4342917 2:10; 4:15.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 God put Abraham to the test}{\rtlch \af0 \ltrch \insrsid12672551\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp0059 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 Gen. 22:1.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12672551\charrsid1781117 W}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +hat more can I say, and how can I justify myself, only by saying, \'93the Lord has given, and the Lord has taken away, blessed be the name of the Lord.\'94}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 1:21.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I ask that }{\rtlch \af0 \ltrch +\insrsid12672551\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e take away tears from our faces, and fill us with all good, and keep his soul in the bounds of life and give comfort\line to his loved one\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 15\cell And }{\rtlch \af0 \ltrch +\insrsid8983004\charrsid1781117 may he }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 close this breach in Israel for life, Amen. I will not go on at length except to disperse salutations after bow}{\rtlch \af0 \ltrch +\insrsid8983004\charrsid1781117 ing}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and }{\rtlch \af0 \ltrch \insrsid8983004\charrsid1781117 the }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +proper prostration to my lord and to all who accompany}{\rtlch \af0 \ltrch \insrsid8983004\charrsid1781117 him}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , from young to old\line and S.\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of Letter C}{\rtlch \ab\af0 \ltrch \cs16\b\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , 56, Letter 27.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash This letters has six themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls13\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Lamentation over the deceased. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}Words of conciliation to the mourner: +\par }\pard \ltrpar\ql \li360\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin360\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1. Death is the way of the world. +\par 2. The Lord becomes sanctified by those close to him. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls14\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The consolation in death is that there is a reward in the World to Come for the activity of the deceased. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1491\'3f. \tab}Prayer for the deceased. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1492\'3f. \tab}There is no reason to increase mourning and wailing. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1493\'3f. \tab}Words of }{\rtlch \af0 \ltrch \insrsid8983004\charrsid1781117 support}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + for the mourner and his mother +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s9\qj \li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\tx450\faauto\outlinelevel8\adjustright\rin0\lin0\itap0 \rtlch \ab\af0\afs24\alang1037 \ltrch \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 Text of the Letter +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +To my friend, the joy of my heart, His Honor, Zerahiah Halevy, may God protect and preserve him, son of Joseph Halevy, my brother-in-law, }{\rtlch \af0 \ltrch \insrsid13653733\charrsid1781117 of blessed memory}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 , in Voghera in Genoa. +\par \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl +\tx360\faauto\adjustright\rin0\lin0\pararsid7368773 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 My faithful friend and dear one, pious one. My eyes are spent with tears}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 2:11.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + from having heard the evil tidings }{\rtlch \af0 \ltrch \insrsid8246\charrsid1781117 \'85 regarding }{\rtlch \af0 \ltrch \insrsid14752387\charrsid1781117 your }{\rtlch \af0 \ltrch \insrsid8246\charrsid1781117 dedicated }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 and }{\rtlch \af0 \ltrch \insrsid3935689\charrsid1781117 punctilious}{\rtlch \af0 \ltrch \insrsid14752387\charrsiAxYyu1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 father, }{\rtlch \af0 \ltrch +\insrsid14615051\charrsid1781117 of blessed memory}{\rtlch \af0 \ltrch \insrsid8246\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid8246\charrsid1781117 H}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ow can I }{\rtlch \af0 \ltrch \insrsid8246\charrsid1781117 offer }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 support in this case}{\rtlch \af0 \ltrch \insrsid8246\charrsid1781117 ,}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid8246\charrsid1781117 which }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 has hit like }{\rtlch \af0 \ltrch \insrsid14752387\charrsid1781117 a target }{\rtlch \af0 \ltrch +\insrsid8246\charrsid1781117 aimed at }{\rtlch \af0 \ltrch \insrsid14752387\charrsid1781117 an arrow?}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult-2059285659\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 3:12.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Childhood is a bad time for this one, an evil disease devoured him, torn by a beast and he is no more,}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 Gen. 37:34, \'93a savage beast devoured him; Joseph was torn by a beast.\'94}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 for God has taken him. This I will pay heed to for it is the way\line of}{\rtlch \af0 \ltrch \insrsid7368773\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the world, a wheel that comes round}{ +\rtlch \af0 \ltrch \insrsid7368773\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid7368773\charrsid1781117 F}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +rom the defeat of mortality there is no escape}{\rtlch \af0 \ltrch \insrsid7368773\charrsid1781117 ;}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 by }{\rtlch \af0 \ltrch \insrsid7368773\charrsid1781117 H}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 is close ones }{\rtlch \af0 \ltrch \insrsid7368773\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e will be sanctified, our }{\rtlch \af0 \ltrch \insrsid7368773\charrsid1781117 C}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 reator and }{\rtlch \af0 \ltrch \insrsid7368773\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is angels will grant glory, and who will say to }{\rtlch \af0 \ltrch +\insrsid7368773\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 im what }{\rtlch \af0 \ltrch \insrsid7368773\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e should do}{\rtlch \af0 \ltrch +\insrsid7368773\charrsid1781117 ?}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 When asking Him for the spirit he blew in our nostrils, the body will return to the dust from which it was taken}{\rtlch \af0 \ltrch +\lang4105\langfe1033\langnp4105\insrsid4141745\charrsid1781117 , and t}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he soul to God who gave it. In this we will find comfort, for the act of vanity, forsakenness, and lack, f +or the salvation of worlds\line we do have in the house of the King, the fruit of our deeds we eat in this world and as a fund for eternity forever that is unending}{\rtlch \af0 \ltrch \insrsid5601694\charrsid1781119 .}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 10\cell And what can be done except to beseech the Lord that he should store his soul with the othe +r souls of his pious ones and clear away tears from our faces, for what gain is there in more mourning and wailing and eulogizing, sackcloth and ashes, [}{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 for}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 we] go to him, }{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 but }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he shall not return to us. So, please, my friend, I have written that there is n +othing new, young or old}{\rtlch \af0 \ltrch \insrsid5601694\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + He is there, for that is Man, and Heaven forbid that we should sin against God. We must only accept the Divine Judgment, for }{\rtlch \af0 \ltrch \insrsid5601694\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +e is just and upright, and }{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 He can }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 kill us if }{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 He should but }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 wish. }{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 B}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 lessed be He. \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 15\cell }{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 N}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ow}{\rtlch \af0 \ltrch +\insrsid8259293\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the joy of my heart, listen to my voice}{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 :}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 wipe}{\rtlch \af0 +\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 + From this point to the end of the letter, part is cut off on the right side, the two sentences were completed by using the content of the following letter.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [the tear}{\rtlch \af0 \ltrch +\insrsid8259293\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 from your face and gird] you loins like a man and be strong and of good courage, and may your heart be with [your bereft, sighing mother] who is mourning \line +the husband\line of her youth and console [\'85]}{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 days and the poor [\'85] I. and I [\'85]\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of Letter D}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri-73\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917Tcharrsid5066409 Ibid.}{\rtlch \af0 \ltrch \insrsid4342917 , 57, + Letter 28. This letter is somewhat shorter than the previous one. The phrases missing in this letter are found in the previous one, attesting to the fact that the first was written soon after Joseph Hacohen received the evil tidings, while the second, as + A. David points out in the notes there, was sent apparently because they were not certain that the previous one had reached its destination.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash This letter treats six themes: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls15\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid0000013 Lamentation over the deceased +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}Words of conciliation to the mourner +\par }\pard \ltrpar\ql \li360\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin360\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1. There is no escape from death. +\par 2. God is sanctified by those close to him. +\par }\pard \ltrpar\ql \li360\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin360\itap0\pararsid8259293 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 3. The deceased le}{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 ave}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 a blessing behind him. +\par {\listtext\pard\plain\ltrpar \ltrch \afs4 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls16\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a prayer for the deceased and condolences to the mourner +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1491\'3f. \tab}There is no reason to go to excess with mourning, since we will join the deceased and he will not return. +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1492\'3f. \tab}Accepting Divine Judgment +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1493\'3f. \tab}Words of consolation to the mourner and his mother +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s6\qj \li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch \ab\af0\afs24\alang1037 \ltrch \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 Text of the Letter +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +To my friend, the joy of my heart, the honorable Zerahiah Halevy son of my sister, may God protect her, Shalom}{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell My God-fearing close companion. My heart }{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 +is }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 broken, for Shaddai has made my lot very bitter}{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Ruth}{\rtlch \af0 \ltrch \insrsid4342917 1:20.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I cried \'93aha\'94}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Ez}{\rtlch \af0 \ltrch \insrsid4342917 . 9:8.}}} +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 since from the defeat of mortality there is no escape, young and old}{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid8259293\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e will be sanctified by }{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is close ones, and through }{\rtlch +\af0 \ltrch \insrsid8259293\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is angels }{\rtlch \af0 \ltrch \insrsid8259293\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +e will cast reproach. In this I will find comfort, for the act of yanitv, sadness, and lack, \line for\line the salvation of worlds, my heart is in the house of the King, by his soul leaving a blessing behind, and what can be \line done\cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell }\pard\plain \ltrpar +\s17\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 +except to beseech the Lord that he store it with the other souls of his pious ones and grant consolation to the pious\line soul}{\rtlch \af156 \ltrhh \insrsid13653733\charrsid1781117 ,}{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 \line +master of our Torah, your father, }{\rtlch \af156 \ltrch \insrsid13653733\charrsid1781117 of blessed memory}{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 +, and that he wipe away the tears from our faces, for what benefit do we gain from fasting and wailing\line nd eulogy sackcloth and ashes, to mourn for him, while we will go to him, and he will not return to us}{\rtlch \af156 \ltrch +\insrsid13653733\charrsid1781117 ?}{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 \line And you, too, my friend, do not raise your voice to say that }{\rtlch \af156 \ltrch \insrsid13653733\charrsid1781117 all }{\rtlch \af156 \ltrch +\insrsid12391429\charrsid1781144 is over}{\rtlch \af156 \ltrch \insrsid13653733\charrsid1781117 ;}{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 that }{\rtlch \af156 \ltrch \insrsid13653733\charrsid1781117 which w}{\rtlch \af156 \ltrch +\insrsid12391429\charrsid1781117 as decreed, God has accomplished. For there is\line nothing\line new}{\rtlch \af156 \ltrch \insrsid13653733\charrsid1781117 ;}{\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 + everything comes from the earth and returns to it, and far be it from us to sin against the Lord. We must only\line accept\cell }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 +\ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone +\clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row +\ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell His Divine Judgment for }{\rtlch \af0 \ltrch \insrsid13653733\charrsid1781117 H}{\rtlch \af0 +\ltrch \insrsid3308931\charrsid1781117 e is righteous and upright. He c}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ould kill us, if }{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +e would }{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 but }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 wish so. }{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 N}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +ow hark to my voice, and wipe the tear from your face and gird your loins like a man, be strong and of good courage, and console your mother, my sister, who is sighing }{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 and }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 desolate}{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and }{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 who }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 mourn}{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the husband of her youth}{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 .}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 As }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 much as I can}{\rtlch \af0 \ltrch \insrsid3308931\charrsid1781117 , I}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 will be for her\line and for you\line my friend, my companion, a brother and son, and I will favor you whenever I am able\'85\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par \page [13] Two Letters of Condolence from Venice, Italy (early Seventeenth century)}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 + Two letters from London mss. (British Library) Or. 5396 (Margaliouth catalog No. 1110, Institute of Microfilmed Hebrew Manuscripts, Jerusalem, film 6451), ff. 154b\endash +155a. I wish to thank the British Library and Dr. Mordechai Glatzer who helped me decipher the manuscript.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par +\par a) }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 a Condolence letter on the death of a brother}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1924178 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash + the name is }{\rtlch \af0 \ltrch \insrsid1924178\charrsid1781117 not }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 clarified. The date and place }{\rtlch \af0 \ltrch \insrsid1924178\charrsid1781117 of the }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 letter: Venice, 24 of Menahem [Av] 5377 (1617). The letter offered condolence on the death of a brother. }{\rtlch \af0 \ltrch \insrsid1924178\charrsid1781117 Either t}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +he letter writer, the sender, or }{\rtlch \af0 \ltrch \insrsid1924178\charrsid1781117 the }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +copyist is apparently R. Judah Aryeh of Modena. The orthography is a practiced Italian hand and difficult to read. Most of the letter is based on biblical verses. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter deals with the following topics: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls17\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The sadness felt by the writer upon hearing the evil tidings +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}Praise of the deceased +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls17\adjustright\rin0\lin720\itap0\pararsid1924178 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The death of a righteous person }{\rtlch \af0 \ltrch \insrsid1924178\charrsid1781117 lleaves a mark}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1491\'3f. \tab}Accepting Divine Judgment +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1492\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls17\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The consolation the soul finds reposing in the Lord\rquote s sanctuary +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par Text of the Letter: +\par +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil +\cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 1\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid11803606 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Long enough have we endured}{\rtlch \af0 +\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10636918 Psalms}{\rtlch \af0 \ltrch \insrsid4342917 123:4.} +}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 wailing, bitter weeping,}{\rtlch \af32a1 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 Jer. 31:14.}}} +{\rtlch \af0 \ltrch \insrsid11803606\charrsid1781117 drinking of the bitter root}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid11803606\charrsid1781117 }{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 3:15.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 bad news +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid2970695 {\rtlch \af0 \ltrch \insrsid2970695\charrsid1781117 m}{\rtlch \af0 \ltrch \insrsid12803034\charrsid1781117 akes the bones feeble}{\rtlch \af0 +\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 See }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Prov}{\rtlch \af0 \ltrch \insrsid4342917 +. 15:30, \'93Good news puts fat on the bones.\'94}}}{\rtlch \af0 \ltrch \insrsid12803034\charrsid1781117 and when}{\rtlch \af0 \ltrch \insrsid2970695\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12803034\charrsid1781117 the news came of t}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 he capture of the Ark of the God,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 1 }{\rtlch +\af0 \ltrch \i\insrsid4342917\charrsid4140030 Sam.}{\rtlch \af0 \ltrch \insrsid4342917 4:19.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the eyes of all Israel }{\rtlch \af0 \ltrch \insrsid2970695\charrsid1781117 were }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 on him, the breath of our life, the Lord\rquote s anointed,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 4:20.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the glory +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of the g +eneration and its splendor, our master and sage, your brother, of blessed and pious memory, the sun shall be dark from his leaving us}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 13:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par and the stars withdraw their brightness}{\rtlch \af0 \ltrch \insrsid2970695\charrsid1781117 ,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid16335552 Joel}{\rtlch \af0 \ltrch \insrsid4342917 2:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for our stronghold has been stolen,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 See }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 24:13, \'93for your stronghold is destroyed.\'94}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 the father of all who sit in tents and amidst herds}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Gen}{\rtlch \af0 \ltrch \insrsid4342917 . 4:20.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of Torah, \cell }\pard \ltrpar +\ql \li-111\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell +teaching it as Law, highly regarded by the Jews,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Esther}{\rtlch \af0 \ltrch \insrsid4342917 3:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he alone remains of the healers.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Josh}{\rtlch \af0 \ltrch \insrsid4342917 . 13:12, \'93he was the last of the remaining Rephaim.\'94}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 The healers pulled him to his [eternal] sleep. Where is the one who could count? Where is the one who could weigh?}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 33:18. See also }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Hagigah}{\rtlch \af0 \ltrch +\insrsid4342917 15b.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a lion of the company.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Shabbat}{\rtlch \af0 \ltrch \insrsid4342917 111b.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par Woe to the generation that has lost its provider and woe to the ship that has lost its pilot.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 See }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 baba Bathra}{\rtlch \af0 \ltrch \insrsid4342917 91b, \'93Woe to the world that has lost its leader and woe to the ship that has lost its pilot.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + His booth has fallen, his hedge has departed, calling him \'93Repairer of }{\rtlch \af0 \ltrch \insrsid1377594\charrsid1781117 fallen walls, restorer of lanes.}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'94}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 28:12.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Oh, that my head were water}{\rtlch \af0 \ltrch \insrsid1377594\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \af0 \ltrch \insrsid1377594\charrsid1781117 m}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 y eyes a fount of tears:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Jer}{\rtlch \af0 \ltrch \insrsid4342917 . 8:23.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 it is +not sufficient to cry for the righteous person, he is gone, all the house of Israel \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid1377594 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 shall bewail}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Lev.}{\rtlch \af0 \ltrch \insrsid4342917 10:6.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and the boughs }{\rtlch \af0 \ltrch \insrsid1377594\charrsid1781117 will }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 drip with moisture,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 }{\rtlch \ai\af0 \ltrch +\i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid16338915 Num}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 . 24:7.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 one who is worthy of palm-groves stretching out}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 }{\rtlch \ai\af0 \ltrch +\i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid16338915 Num}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 . 24:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 over a river and spring +\par waters, the death of a righteous man from any place makes}{\rtlch \af0 \ltrch \insrsid1377594\charrsid1781117 a mark}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote +\ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 See }{\rtlch \ai\af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid16338915 Gen. Rabbah}{\rtlch \af0 \ltrch +\lang1031\langfe1033\langnp1031\insrsid4342917 68 (p. 775); }{\rtlch \ai\af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid16338915 Rashi}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 on }{\rtlch \ai\af0 \ltrch +\i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid16338915 Vayetze}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 28:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Not only in the family +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 or tribe, in every city and in every province,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Esther}{\rtlch \af0 \ltrch \insrsid4342917 8:1 +7.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 but in all the Diaspora of Israel a great mourning +\par for the Jews}{\rtlch \af0 \ltrch \insrsid1377594\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 with weeping and wailing.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid16338915 Esther}{\rtlch \af0 \ltrch \insrsid4342917 4:3.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + Go forth and see if the pain will increase greatly for a small gnat +\par such as }{\rtlch \af0 \ltrch \insrsid1377594\charrsid1781117 I, the }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 day for which I boasted. My heart is convulsed within me; terrors of death assailed him.}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 + 55:5, where it states \'93assail me.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrqa\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 15\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid1377594 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 He does not let me catch my breath,}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 9:18.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for all toil there is some gain.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Prov}{\rtlch \af0 \ltrch \insrsid4342917 . 14:23.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 For a brother +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 trodden is more formidable than a stronghold like the bars of a fortress.}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Prov}{\rtlch \af0 \ltrch \insrsid4342917 +. 18:19.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 About all of you I know that your strength is spent +\par on account of your groaning,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 +\ltrch \insrsid4342917 23:2, where it states \'93My strength is spent on account of my groaning.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 yet this is not too baffling for me,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Deut}{\rtlch \af0 \ltrch \insrsid4342917 +. 30:11, where it states \'93is not too baffling for you.\'94 }}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 even by your wisdom +\par and your discernment}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Deut}{\rtlch \af0 +\ltrch \insrsid4342917 . 4:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that you know there is a judgment}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 19:29.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for this applies to all mankind,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Eccl}{\rtlch \af0 \ltrch \insrsid4342917 +. 12:13.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [to] the greatest of giants though he grows +\par as high as the sky.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 +\ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 + 20:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Prepare your hearts for the will of God and to Him you shall express gratitude and bend your knees and your assurances\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow3\irowband3\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 20\cell }\pard \ltrpar +\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid5833938 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 soothe his soul}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 94:19.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + who when on high will become refined in his good thoughts and deeds, of blessed memory, and He will make the tabernacle of Shiloh, the tent He hadEF set among men, }{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 78:60.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to dwell in the light}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 2 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Chron.}{\rtlch \af0 \ltrch \insrsid4342917 6:1.}} +}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of the Lord, d}{\rtlch \af0 \ltrch \insrsid5833938\charrsid1781117 wellings of refuge, for thus says}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + the Lord, for sufficient are our woes and your woes}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 + This line appears separately at the top of manuscript folio 155.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and in Jerusalem is my consolation: Venice 24 Menahem 5377 (= 1617). +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s1\qj \li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch \af0\afs28\alang1037 \ltrch \fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0\afs24 \ltrch +\fs24\insrsid12391429\charrsid1781117 b) }{\rtlch \ai\af0\afs24 \ltrch \i\fs24\insrsid12391429\charrsid1781117 Condolence letter from a Grandson to His Grandfather}{\rtlch \af0\afs24 \ltrch \fs24\insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid11747594 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and Its Recipient}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \emdash The letter opens without any name or address and appears }{\rtlch \af0 \ltrch \insrsid11747594\charrsid1781117 as }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +the continuation of folio 155a. The orthography is i +dentical to that of the previous letter. From the signature of the letter it is apparently the grandson who is writing to his grandfather (although in the body of the letter one does not find any expression of familial relation}{\rtlch \af0 \ltrch +\insrsid11747594\charrsid1781117 ship}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of grandson to grandfather). +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash a collection of biblical citations that express sorrow and agony. The letters deals with the following topics: + +\par The sorrow felt by the writer upon the untimely death of his relative +\par Accepting the Divine Judgment +\par Words of condolence +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 + +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +Text of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par +\par \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell The sound of a mighty force,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 13:4.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + from a[p]athy(?) tidings saying for death has entered our fortresses to cut off}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 Jer. 9:20, +\'93for death has climbed through our windows, has entered our fortresses, to cut off babes.}{\ltrch \rtlch \f0\fs20\lang1037\insrsid4342917 \'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the beloved of my soul +\par and my upright, faithful, beloved, sweet and pleasant, my pain plunged, and my body is stricken and withered like grass.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 102:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 pangs gripped me +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid11747594 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 like a woman in travail}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrd\lan%np1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 21:3.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I clapped hand}{\rtlch +\af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 2:15.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 on thigh, I refused to be comforted, how could he wither before his time, his boughs flourishing}{\rtlch \af0 \ltrch \insrsid11747594\charrsid1781117 ?}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 15:32, +\'93He will wither before his tiSe, his boughs never having flourished.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a blameless, upright man who fears God,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 1:8.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + beloved on high, pleasant below, when I think of this, I pour out my soul}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrparX \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 42:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid1648584 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 of our loving together, wretched and humiliated, I walked about with him as though it were my brother}{\rtlch \af0 \ltrch \insrsid1648584\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 35:14.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid1648584\charrsid1781117 I}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 n the past I had a comforter +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 who might revive my spirit.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote +\ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 1:16.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + Alas! The Lord in His wrath has shamed}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 +\ltrch \insrsid4342917 2:1.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a man for whom these are for him, he dies, he is brought to the house assigned for all the living.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 30:23.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid1648584 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The hair of my flesh bristles}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 4:15.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + when I mention him, my bereavement,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch +\insrsid4342917 35:12.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 crushing my bones}{\rtlch \af0 \ltrch \insrsid1648584\charrsid1781117 ,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 4211.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 even as I wail and cry out}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 30:20.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par to you Lord who I know like an arrow pierces your liver}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 Prov. 7:23.}}} +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and your honor will come to the dust}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 7:6, \'93and lay my body in the dust.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 from exalting such a wonderful +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 precious gem as this, for who can go to the divine while his mouth be filled with arguments}{\rtlch \af0 +\ltrch \insrsid1648584\charrsid1781117 ?}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 +\ltrch \insrsid4342917 23:4.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid1648584\charrsid1781117 W}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e will accept }{\rtlch \af0 \ltrch +\insrsid1648584\charrsid1781117 both }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 good }{\rtlch \af0 \ltrch \insrsid1648584\charrsid1781117 and}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell }\pard \ltrpar +\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid002048 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 bad,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsi1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Eccl}{\rtlch \af0 \ltrch \insrsid4342917 . 12:14.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and we concede in the midst of the +event that He is the fashioner, He is the determiner.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch ]`f0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 See }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Avot}{\rtlch \af0 \ltrch \insrsid4342917 4:22, \'93He is the fashioner, He the creator, He the discerner.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid1648584\charrsid1781117 L}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 et us bow down and kneel, and bend the knee}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 95:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 He will send an end to darkness}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 28:3.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and to all disasters,}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 Text reads }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 \'93mg\lquote \'93; }{\rtlch \af0 \ltrch +\insrsid4342917 it should be }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 \'93pg\lquote .\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , }{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 I }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Kings}{\rtlch \af0 \ltrch \insrsid4342917 5:18.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ; he will protect those who remain \'85 + May his soul be bound in the bundle of life, he will give to your worthy self +\par and to all accompanying him here with us today, goodness, and blessing, and life, and peace +\par his grandson and his servant in all his tribulations}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 Text reads }{ +\rtlch \ai\af0 \ltrch \i\insrsid4342917 \'93}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917 z}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 aroto\'94;}{\rtlch \af0 \ltrch \insrsid4342917 it should be }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 \'93}{\rtlch +\ai\af0 \ltrch \i\cf2\insrsid4342917 z}{\rtlch \ai\af0 \ltrch \i\insrsid4342917 arotav.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \line that he undergoes:\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth817\clshdrawnil \cellx709\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7711\clshdrawnil \cellx8420\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par \page [14] a Letter of Condolence to a Brother-in-law on the Death of His Wife \emdash Sister of the Writer (Italy, 17}{\rtlch \af0 \ltrch \super\insrsid12391429\charrsid1781117 th}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 century) +\par +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1648584 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Author of the Letter and Its Recipient }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \emdash Isaac b. Manoah Lattes, from Cuneo, in the Piedmont region of Italy, wrote this condolence letter in }{\ltrch \af262 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \'f9"\'f4}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 (1620)}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \%0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 On the history of the Lattes family, see J. Buchsenbaum, }{\rtlch \ai\af0 +\ltrch \i\insrsid4342917 Iggerot Melammedim,}{\rtlch \af0 \ltrch \insrsid4342917 Tel Aviv 1986.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to his brother-in-law Jonah b. Solomon Crescas upon +the death of his wife (sister of the letter writer), who passed away }{\rtlch \af0 \ltrch \insrsid14295563\charrsid1781117 i}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 n Adar 2 of that year. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +\par Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter consists of biblical and talmudic citations that the writer applies and adapts to the poetic style he uses to euologize his sis +ter Luna, whom he metaphorically compares to the moon. The letter deals with the following areas: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls18\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Description of the pain and sadness over the death of the sister. +\par {\listtext\pard\plain\ltrpar \s17 \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}}\pard\plain \ltrpar\s17\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls18\adjustright\rin0\lin720\itap0\pararsid16327472 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 Lamentation +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}}\pard\plain \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls18\adjustright\rin0\lin720\itap0\pararsid16327472 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Eulogy +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1491\'3f. \tab}Words of love and consolation. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Text of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 :}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 Ms Moscow\endash Ginzberg 114/6, Institute for Microfilmed Manuscripts, film 6794. I express my appreciation to the Moscow Library and to the Institute for Microfilmed Manuscripts and to Dr. Abraham David for his assistance.}} +}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par Copy of a letter I sent to my brother-in-law, our honorable teacher Jonah, with the lamentations\line that I recited over the passing of my sister Luna, May her soul be bound up in the bond of everlasting life. +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 + +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil +\cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch +\af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell My dear, esteemed brother-in-law, how difficult it is for us to suf +fer this separation, like the darkness that has has no dawn,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 8:20, \'93there shall be no dawn.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 as beautiful +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid534005 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 as the moon with none to compare, this wise and pleasant one, the }{\rtlch \af0 \ltrch +\insrsid14295563\charrsid1781117 glory of the }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 daughter of the king is }{\rtlch \af0 \ltrch \insrsid14295563\charrsid1781117 inward.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 +\chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 45:14.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid14295563\charrsid1781117 M}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 y sister, your wife \emdash may her soul be bound up in the bond of everlasting life \emdash is gone. }{\rtlch \af0 \ltrch \insrsid14295563\charrsid1781117 N}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 o matter how much I may }{\rtlch \af0 \ltrch \insrsid534005\charrsid1781117 wail}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s21\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid534005 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 and be embittered with a broken heart and bitter voice, over this great loss, I will not be able to withhold from sighing my sigh}{\rtlch \af0 \ltrch \insrsid534005\charrsid1781117 s}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 , I will groan silently over you and over us +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid534005 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 and I will sorely cry \emdash for the one who }{\rtlch \af0 \ltrch \insrsid534005\charrsid1781117 has left }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 never to come back}{\rtlch \af0 \ltrch +\insrsid534005\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Jer}{\rtlch \af0 +\ltrch \insrsid4342917 . 22:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid534005\charrsid1781117 S}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 urely I weep on account of this beauty }{\rtlch \af0 \ltrch +\insrsid534005\charrsid1781117 which }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is going to rot in the earth,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid4027135 Berakhot}{\rtlch \af0 \ltrch \insrsid4342917 5b.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and indeed I say, summon the dirge-singers, let them come.}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Jer}{\rtlch \af0 \ltrch \insrsid4342917 . 9:16.} +}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 My being }{\rtlch \af0 \ltrch \insrsid8264474\charrsid1781117 melts}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid8264474\charrsid1781117 a}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 way,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrqar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 2:11.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 my strength is spent }{\rtlch \af0 \ltrch +\insrsid534005\charrsid1781117 because }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of my groaning,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{ +\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 23:2.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 over the ruin of the daughter of my people.}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang3082\langfe1033\langnp3082\insrsid4342917 }{\rtlch \af0 \ltrch +\i\lang3082\langfe1033\langnp3082\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \lang3082\langfe1033\langnp3082\insrsid4342917 3:48.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 My head is light, my arm light,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang3082\langfe1033\langnp3082\insrsid4342917 }{\rtlch \ai\af0 \ltrch +\i\cf2\lang3082\langfe1033\langnp3082\insrsid4342917\charrsid10430484 H}{\rtlch \ai\af0 \ltrch \i\lang3082\langfe1033\langnp3082\insrsid4342917\charrsid10430484 agigah}{\rtlch \af0 \ltrch \lang3082\langfe1033\langnp3082\insrsid4342917 15b.}}}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 my eyes a fount of tears}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang3082\langfe1033\langnp3082\insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\lang3082\langfe1033\langnp3082\insrsid4342917\charrsid10430484 Jer}{\rtlch \af0 \ltrch \lang3082\langfe1033\langnp3082\insrsid4342917 . 8:23.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 ,\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 5\cell flowing water over the misfortune, I lament for my soul is satiated with bad tidings, I grieve with wailing, and I declare this lament, that I recited over her in stanzas, +\par to lament over her openly in the markets and at the street corners,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid4140030 Song of Songs}{\rtlch \af0 \ltrch \insrsid4342917 3:2, \'93in the streets and the squares.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for it was the Lord\rquote s doing.}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid10430484 Josh}{\rtlch \af0 \ltrch \insrsid4342917 +. 11:20.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 From the sorrow of my soul it shed, }{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 119:25, \'93my soul clings to the dust.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I wrote myself a weary scroll, I will lift up my head \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 8\cell and say in a weak voice:\cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\irdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 9\cell Declare a lament in + bitter voice; for this anguish is as of a woman bearing her first child:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Jer}{\rtlch \af0 \ltrch \insrsid4342917 . 4:31, \'93I hear the anguish as of a woman bearing her first child.\'94 }}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow3\irowband3\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult-90\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell +When the sun set and it was very dark,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Gen}{\rtlch \af0 +\ltrch \insrsid4342917 . 16:17.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for it became }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 le-yonat elem re}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid12391429\charrsid1781117 h}{\rtlch +\ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 okim}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 :}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{ +\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 56:1, \'93}{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid4027135 al yonat elem re}{\rtlch \ai\af0 \ltrch \i\cf2\insrsid4342917\charrsid4027135 h}{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid4027135 okim}{\rtlch \af0 \ltrch \insrsid4342917 .\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 11\cell My brother come to the gate; the wound embitters us:\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow5\irowband5\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 -65\cell My moon is gloomy,}{\rtlch \af0 +\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 30:28, +\'93I walk about in sunless gloom.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and the second Adar turned to mourning and wailing:\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \trowd \irow6\irowband6\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 13\cell The third in seven plus ten; the diadem has been taken from me:\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow7\irowband7\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 14\cell +In every facet she was good; she was like the fruitful vine:}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1030\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 128:3.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \trowd \irow8\irowband8\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 15\cell In the year }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 shin peh}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + [1620] from the creation; her passing making me wrathful \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow9\irowband9\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 16\cell Passed Luna, the fount of discernment; to give of her fruit in the palace of the king:\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow10\irowband10\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 17\cell Though I might wander a great distance, I will find none as worthy as she}{\rtlch \af0 \ltrch \insrsid791178\charrsid1781117 .}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow11\irowband11\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 18\cell I am saddened because her splendor faded away; I cry out, I complain, I moan}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 77:4.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow12\irowband12\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 19 \cell I wo +uld counteract her being crushed; had she not been taken while still young}{\rtlch \af0 \ltrch \insrsid791178\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 28:4, \'93They shall be like an early fig\'85whoever sees it devours it while still in his hand.\'94}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow13\irowband13\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnon \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 20\cell For this my heart is faint within me; I say woe unto me; +\par \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow14\irowband14\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 21\cell I am overwrought, I cannot speak,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 77:5.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 I roar from the groaning of my heart, when my spirit fails, }{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 selah}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 142:4, \'93When my spirit falls within me.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and in my +eulogizing, I become overwrought about her, with tears flowing }{\rtlch \af0 \ltrch \insrsid791178\charrsid1781117 as }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 pure olive oil}{\rtlch \af0 \ltrch \insrsid791178\charrsid1781117 .}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow15\irowband15\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 22\cell }{\rtlch \af0 \ltrch \insrsid791178\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 his crushing, virtually crushed to less than the worthy size,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Eiruvin}{\rtlch \af0 \ltrch \insrsid4342917 5b; +}{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Hulin}{\rtlch \af0 \ltrch \insrsid4342917 79b.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 an olive was gathered from the topmost branch,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 17:6.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 we labored and had no respite, two berries or three as the gatherer and beater of the \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow16\irowband16\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 23\cell olive, \'85\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow17\irowband17\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 24\cell }{\rtlch \af0 \ltrch \insrsid791178\charrsid1781117 O}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +ur thoughts, agony, and sadness will find relief, saying, this will comfort us, all of these joined forces in Vale of Weeping,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Gen}{\rtlch \af0 \ltrch \insrsid4342917 . 14:3, \'93all the latter joined forces at the Valley of Siddim.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + and one would call to the other,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch +\insrsid4342917 6:3.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 then one said thus \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow18\irowband18\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch\insrsid12391429\charrsid1781117 25\cell and another said thus,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 I }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Kings}{\rtlch \af0 \ltrch \insrsid4342917 22:20.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 there we wailed and wept,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 137:1.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + until all my soul was spent I had no spirit any more, for your ruin is as vast as the sea,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 2:13.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and the Lord gave me to drink\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow19\irowband19\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 26\cell +hemlock and weeping, and the pain increased greatly }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 hu}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'85, and to you my brother, what can I give you as + witness, what can I match with you to console you}{\rtlch \af0 \ltrch \insrsid791178\charrsid1781117 ?}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid4027135 Ibid}{\rtlch \af0 \ltrch \insrsid4342917\charrsid5066409 .}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow20\irowband20\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 27\cell +I am in need of consolation, my Lord will heal the crushing wound. This is my comfort in my affliction, that }{\rtlch \af0 \ltrch \insrsid5848573\charrsid1781117 Y}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 our promise has preserved me,}{\rtlch +\af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 }{\rtlch \af0 \ltrch +\i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 119:50.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that the deceased of good reputation is happy \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow21\irowband21\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 28\cell and wor +thy is his portion, that his illness was not as his youth, but this do I call to mind}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1036\langfe1033\langnp1036\insrsid4342917 }{\rtlch \af0 \ltrch \i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 21:3.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 that the neighbor women call her there, saying a bundle of myrrh \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow22\irowband22\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 29\cell has left us, and of the bounteous crop of the moons}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1036\langfe1033\langnp1036\insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid6452855 Deut}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 . 33:14.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 we have tasted: she was seven and twenty years old, a year for each day, a year to each day,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Num}{\rtlch \af0 \ltrch \insrsid4342917 . 14:34; }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Ez}{\rtlch \af0 \ltrch \insrsid4342917 . 4:6.}}}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 were like the days of the moon;\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow23\irowband23\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 30\cell in clouds of myrrh and frankincence,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid40@7135 Song of Songs}{\rtlch \af0 \ltrch \insrsid4342917 3:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + of bright shining face and eyes shining like the moon, of great charm and Rabbi Hanina [play on Heb. word }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 hen}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 - charm], and the homilet +ic meaning will be understood thusly}{\rtlch \af0 \ltrch \insrsid5848573\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 \trowd \irow24\irowband24\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 +\par page 2 +\par \ltrrow}\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1 +\cell Twenty-seven years of age in sin, at the age of seven in beauty, a God-fearing woman, may she be praised,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{ +\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Prov}{\rtlch \af0 \ltrch \insrsid4342917 . 31:30.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 therefore I have hope}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn +{\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 3:21; 3:24.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + that her interests and}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Prov}{\rtlch \af0 +\ltrch \insrsid4342917 . 31:18.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 reward be from God, \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 2\cell in happiness in the land of living,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 142:6.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 selah}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 , for her good name and praise, while we for our transgressions survive to groan, she\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 3\cell +the pit [of the grave] will be a resting place for her, in the palaces of the Mothers, and my princess, the one who raised me, my parent [mother] will also tell her, \'93enter in peace, crown of her \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 4\cell husband,\'94}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Prov}{\rtlch \af0 \ltrch \insrsid4342917 +. 12:4, and from the liturgical poem }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 \'93Lekhah Dodi.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and the wise women, her mothers, all their bones will say, chanting,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 35:10.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'93enter, O bride; enter, O bride,\'94}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360Yslmclt1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 See \'93}{ +\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid4027135 Lekhah Dodi}{\rtlch \af0 \ltrch \insrsid4342917 .\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and as Sarah and Rachel long ago did not \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow3\irowband3\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell +open a mouth, this I will expound for you, my brother-in-law, that your love will not leave us, for our love for you is more wonderful than the love of women}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 II }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Sam.}{\rtlch \af0 \ltrch \insrsid4342917 1:26.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and as a peg fixed\cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 6\cell in a firm place}{\rtlch \af0 +\ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\lane1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 22:23, \'93 +I will fix him as 5ca3ca7f1af46c13 peg in a firm place.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 in each and every time, and with this I will suffice for appealing over my departed one, and I pray to the +one who consoles mourners, may He make us whole again}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid6452855 Hosea}{\rtlch \af0 \ltrch \insrsid4342917 6:2.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow5\irowband5\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwjidth6H5\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 7\cell +and show us consolation of Zion, where he will comfort us for our agony in the building of his hall and in their well-being among all of His people Israel, and he will fulfill for us the verse, \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow6\irowband6\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl-2726409648626460095\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 8\cell +saying, He will destroy death forever, My Lord God will wipe the tears away}{\rtlch \af0 \ltrch \insrsid5848573\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 25:8.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid5848573\charrsid1781117 Y}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 ou shall find comfort in Jerusalem}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 66:13.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 [written at] Cuneo}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 The letter writer was from Cuneo.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'85\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow7\irowband7\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 9\cell In the year 5380}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 Hebrew numerology.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 (= 1620) it is most holy,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Lev.}{\rtlch \af0 \ltrch \insrsid4342917 6:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow8\irowband8\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell +My eyes pine away from affliction;}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch +\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 }{\rtlch \af0 \ltrch +\i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 88:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 my heart is astir, I am like +a sea lion; I am the man who has known affliction;}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1036\langfe1033\langnp1036\insrsid4342917 }{\rtlch \af0 \ltrch \i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 3:1.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow9\irowband9\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 11\cell a wounded gnat Isaac Lattes: your brother-in-law and your servant writing tearfully: reciting the }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 shema}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \'85\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow10\irowband10\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 13\cell My master and ruler, my esteemed brother-in-law Jonah Crescas of the Nice community.\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow11\irowband11\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidh1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row }\pard \ltrpar\ql %n0\ri0\sl480\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s27\qj \fi-357\li357\ri0\sb120\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin357\itap0 \rtlch \af0\afs24\alang1037 \ltrch \scaps\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 [15] Condolence Letter over the Death of an Ere}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 z}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Israel Gabbai in Cincinnati +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +Authors of the Letter and the Recipient}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash This letter was written by rabbis and leaders of Sefardi and Ashkenazi communities in Tiberia}{\rtlch \af0 \ltrch \insrsid3813420\charrsid1781117 s}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , on 17 Kislev 5643 (1883). The letter is directed to \'93Pekidei ve-Amarkalei Arei ha-Kodesh\'94 in Amsterdam through whom the Tiberians received contributions collected in Cincinnati, Ohio. +\par }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Content of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash The letter contains words of consolation over the death of R. Haim Mazias, the Ere}{\rtlch \af0 \ltrch +\cf2\insrsid12391429\charrsid1781117 z}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Israel g +abbai in Cincinatti, who passed away on the first of Heshvan 5743. The letter deals, among other things, with praise for the deceased and for his many charitable acts on behalf of Ere}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 z}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 Israel.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 + One page in a ms. measuring 26x24 cm (Ms. 3172, JTSA Library \endash New York); I +would like to express my gratitude to the library for permission to publish this ms. The letter includes four short introductory lines and 19 lines of text. At the end are the holographs of ten rabbis and community leaders of Ashkenazic and Sefardic commu +n +ities in Tiberias. On the right side are signatures of rabbis and leaders of the Sefardic community: Abraham Halfon, Joseph David Abulafia, and Simon Ivri; on the left, the signatures of the rabbis and leaders of the Ashkenazic community: Abraham Joseph H +alevy, Mordecai ?, Yisachar Berish}{\rtlch \af0 \ltrch \insrsid4342917\charrsid1276346 , Samuel Shemayah Hacohen, Aaron Samuel ben Adoni }{\rtlch \af0 \ltrch \insrsid4342917 +Avi ha-Rav, Abraham Abali Baharab Todros Hacohen, Haim Baratz Zevi Hirsch Shub. On these scholars, see E. Avisar, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 Sefer Teveryah }{\rtlch \af0 \ltrch \insrsid4342917 (The book of Tiberias) (Jerusalem, 1973), 272 +\endash 312.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The letter covers six themes, namely: +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1488\'3f. \tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sl480\slmult1\widctlpar +\tx360\jclisttab\tx720\faauto\ls19\adjustright\rin0\lin720\itap0\pararsid16327472 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Opening greetings to the community leaders +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1489\'3f. \tab}The notice received about the death of R. Haim Mazias +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1490\'3f. \tab}Lamentation and eulogy +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs44\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1491\'3f. \tab}The good that awaits the departed one +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1492\'3f. \tab}The community\rquote s pledge for Torah study in memory of the deceased +\par {\listtext\pard\plain\ltrpar \ltrch \afs2 \rtlch \f262\fs24\lang1037\insrsid12391429\charrsid1781117 \u8207\'3f\u1493\'3f. \tab}Soothing words and condolences to the deceased\rquote s family +\par }\pard\plain \ltrpar\s17\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af156\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af156 \ltrch \insrsid12391429\charrsid1781117 + +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 +Text of the Letter}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 : +\par (The letter is divided according to the order of the rows in the original.) +\par B\'94H 23 Tevet 5643 (1883) +\par \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 1\cell }\pard\plain \ltrpar\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl +\tx360\faauto\adjustright\rin0\lin189 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \'93 +To the noble one of the children of Israel the pillars and stanchions upon which the Jewish community stands, they are their kings their princes who stand at the ready to the aid of the Lord among the warriors. +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid3813420 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 To you sirs who are of the high masters, princes, and deputies of the Pekidi ve-Amarkalei Ere}{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 z}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + Israel who belong to }{\rtlch \af0 \ltrch \insrsid3813420\charrsid1781117 the}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 great Jewish community +\par Amsterdam}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 , }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 may He protect it, Amen}{\rtlch \af0 \ltrch \insrsid3813420\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + Lord}{\rtlch \af0 \ltrch \insrsid3813420\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 may You protect them and encompass all of them with favor and take them +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and bear them forever among the stars with their radiance, may it be His will, Amen}{\rtlch \af0 \ltrch +\insrsid3813420\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trftsWidthA3\trwWidthA72\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1 +\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 5\cell }\pard\plain \ltrpar\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\txjA360\faauto\adjustright\rin0\lin189\pararsid3813420 \rtlch +\af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid3813420\charrsid1781117 F}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 rom receipt of your pure letter, written on the 11}{\rtlch \af0 +\ltrch \super\insrsid12391429\charrsid1781117 th}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of Marheshvan 5643}{\rtlch \af0 \ltrch \insrsid3813420\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid3813420\charrsid1781117 w}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 e saw that was written, we read the text, and there descended on us a great \line +darkness, and we became sorely anxious over the bad tidings that were real, for the reaper has come, the powerful has become chaff. Of the taking away of the ark of the Lord, the righteous rabbi Morenu ve-Rabbenu }{\rtlch \ab\af0 \ltrch +\b\insrsid12391429\charrsid1781117 Hayyim}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 b. R. David }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Mazias}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +, of blessed memory, born in Biale, +\par }\pard \ltrpar\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin189 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +at the end of the Sabbath, the eve of Sunday, on the New Moon of Heshavan 5643. He who was the gabbai for the Land of Israel among the Jewish community of }{\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 Cincinnati}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 and the surrounding towns, who served steadfastly many years, seeking the good of his people, and all of his deeds were carried out faithfully, +\par performed wholeheartedly. During this righteous person\rquote s entire life, he tried to enhance the benefit for the reside +nts of the communities of the Four Lands, woe to the land of Israel which has lost this great man, a man suffused entirely with holiness and piety. For a }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 hakham}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 who has died we have no +\par replacment. There is no pious one, no humble one, woe to the ship that has lost its captain. And on the day we heard this bad tiding, shaking the land of Israel 400 }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 parsot}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 by 400 }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 parsot}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +, and so great was it on that day and the sound of moaning was heard. We found angels of peace crying bitterly,\cell }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trftsWidthA3\trwWidthA72\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 10\cell }\pard\plain \ltrpar +\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin189\pararsid2189740 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +What has the Lord done to us by putting out our right eye}{\rtlch \af0 \ltrch \insrsid2189740\charrsid1781117 ?}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 1 }{ +\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Samuel}{\rtlch \af0 \ltrch \insrsid4342917 11:2.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid2189740\charrsid1781117 Who }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 will protect us, a leader at our head}{\rtlch \af0 \ltrch \insrsid2189740\charrsid1781117 ?}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The sun was dark when it rose}{\rtlch \af0 \ltrch +\insrsid2189740\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid10882959\charrsid1781117 }{\ltrch \rtlch \cs16\f0\fs24\lang1037\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\ltrch \rtlch \cs16\f0\fs20\lang1037\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{ +\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 13:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and the moon darkened, and the stars withdrew their brightness}{\ltrch \rtlch +\f0\fs24\lang1037\insrsid12391429\charrsid1781117 .}{\ltrch \rtlch \cs16\f0\fs24\lang1037\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\ltrch \rtlch \cs16\f0\fs20\lang1037\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{ +\rtlch \af0 \ltrch \i\insrsid4342917\charrsid16335552 Joel}{\rtlch \af0 \ltrch \insrsid4342917 2:10.}}}{\ltrch \rtlch \f0\fs24\lang1037\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin189 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Over this the earth will mourn,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid4027135 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid15421667 Jer}{\rtlch \af0 \ltrch \insrsid4342917 . 4:28.} +}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and a stone from the wall,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid15421667 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid15421667 Habakkuk}{\rtlch \af0 \ltrch \insrsid4342917 2:11.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 writhing and screaming in her pangs,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid15421667 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 26:17.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for the kings of Judea and its princes, for them it is fitting +\par for the weeping, weeping of the rivers, for them it is fitting to lament as sadly as jackals, as mournfully as the ostriches.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 }{\rtlch \af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid14447357 Micah}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 1:8.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin189\pararsid10882959 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 That day is a day of distress and chastisement,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 2 }{\rtlch \ai\af0 \ltrch +\i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid1276346 Kings}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 19:3.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 a day of calamity and desolation,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 }{\rtlch \ai\af0 \ltrch +\i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid1276346 Zeph}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 . 1:15.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 for there the shield of warriors lay rejected,}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 2 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Sam.}{\rtlch \af0 \ltrch \insrsid4342917 1:21.}}} +{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 one in a generation, he is its glory, he is its splendor, as we said in his shadow we will live,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 4:20.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 like a lofty wall.}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 30:13.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Because of this our hearts are sick, because of these our eyes are dimmed,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs0\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid11416988 Lam.}{\rtlch \af0 \ltrch \insrsid4342917 5:17.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that our eyes may run with water,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid1276346 Jer}{\rtlch \af0 \ltrch \insrsid4342917 +. 9:17, where it is written: \'93That our eyes may run with tears.\'94}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 over that very beauty wasted in the soil.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote +\ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \insrsid4342917 See}{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid15421667 Berakhot }{\rtlch \af0 \ltrch +\insrsid4342917 5b.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin189 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Who can tell all the mighty acts of the Lord, proclaim all His praises,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 }{\rtlch \af0 \ltrch +\i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 106:2.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + and our voice like the voice of mighty waters to make his voice heard on high. To stir the heart of our fellow Jews. +\par }\pard \ltrpar\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin189\pararsid10882959 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +To hold on toc a fortress of the Holy Land, to have pity on the earth, the dwellers of Machtesh}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch Tfs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1031\langfe1033\langnp1031\insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid1276346 Zeph}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 . 1:11.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 the poor and the wise of Erez Israel, who live in need and sorrow in my dwelling and from excess of work, and daily they will seek }{\rtlch \af0 \ltrch \insrsid10882959\charrsid1781117 H}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 im, and surge to }{\rtlch \af0 \ltrch \insrsid10882959\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +im from the ends of the earth and faraway seas. Bundles on their shoulders, their vows and their donations +\par }\pard \ltrpar\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin189 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +as pledged by each man according to his blessedness, for the four lands of the living, may they be built and set up firmly +soon in our days. And it is incumbent upon them to take his word to strengthen their hand (i.e., to support the poor) so that they should do wisely in all that }{\rtlch \af0 \ltrch \insrsid10882959\charrsid1781117 they }{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 do. Ask now and see, to where has the chief herdsman gone,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1031\langfe1033\langnp1031\insrsid4342917 1 }{\rtlch \af0 \ltrch \i\lang1031\langfe1033\langnp1031\insrsid4342917\charrsid4140030 Sam.}{\rtlch \af0 \ltrch \lang1031\langfe1033\langnp1031\insrsid4342917 21:8.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 and where }{\rtlch \af0 \ltrch \insrsid12651379\charrsid1781117 he }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 has left his flock. They are astray\cell }\pard\plain \ltrpar +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph108\trleft-108\trftsWidth1\trftsWidthA3\trwWidthA72\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7853\clshdrawnil \cellx8420\row \ltrrow}\trowd \irow3\irowband3\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth7925\clshdrawnil \cellx8492\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 15\cell }\pard\plain \ltrpar +\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin189\pararsid12651379 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +in the land}{\rtlch \af0 \ltrch \insrsid12651379\charrsid1781117 ,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1036\langfe1033\langnp1036\insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid1276346 Ex}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 . 14:3.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 scattered to all its corners. }{\rtlch \af0 \ltrch \insrsid12651379\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is pathways are not known, for a wind blew in him, and he was still in his prime}{ +\rtlch \af0 \ltrch \insrsid12651379\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid12651379\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +hey called, often to gaze upon the beauty of the Lord, to frequent His temple.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1036\langfe1033\langnp1036\insrsid4342917 }{\rtlch \af0 \ltrch \i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 27:4.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 As the mortal has passed away the pain has grown considerably, but what can we answer}{\rtlch \af0 \ltrch \insrsid12651379\charrsid1781117 ?}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 He is righteous +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0\pararsid12651379 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 and righteous is }{\rtlch \af0 \ltrch \insrsid12651379\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +is judgment. So declared His wisdom, may He be blessed, blessed is the One who decrees the judgment. May it be His will that his good deeds will be remembered in + the world that is all good, and may the soul of our fellow be bound up forever in the bundle of life,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1036\langfe1033\langnp1036\insrsid4342917 1 }{\rtlch \af0 \ltrch \i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid4140030 Sam.}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 25:29.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 the deceased will enjoy the holy fruits of the heavens with the souls of the heavenly }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 Hasidim}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch\insrsid12391429\charrsid1781117 who sit before the Lord and enjoy the splendor of }{\rtlch \af0 \ltrch \insrsid3028086\charrsid1781117 H}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is Divine presence. The righteous one}{\rtlch \af0 \ltrch \insrsid5536099\charrsid1781117 s}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + sit with their crowns on their heads. His holy work has passed, and he now prays for his children and actions. Let it be for them a shield,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 }{\rtlch \ai\af0 \ltuch \i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid1276346 Deut}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 . 32:38.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 an encircling shield}{\rtlch \af0 \ltrch\insrsid5536099\charrsid1781117 .}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1 +\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch +\lang1036\langfe1033\langnp1036\insrsid4342917 }{\rtlch \af0 \ltrch \i\lang1036\langfe1033\langnp1036\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \lang1036\langfe1033\langnp1036\insrsid4342917 91:4.}}}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid5536099\charrsid1781117 D}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 o not see a sign like this anymore (i.e., pain and mourning).}{\rtlch \af0 \ltrch +\insrsid5536099\charrsid1781117 F}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 rom now on may we be destined for good, and sorrow and sigh flee,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar +\pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 +\chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 35:10.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and may there be well-being, praise, and joy. In }{ +\rtlch \af0 \ltrch \insrsid3028086\charrsid1781117 their }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 old age they still produce fruit,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 92:15.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 they rejoice in their going forth and are glad in their returning,} +{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 From the liturgical poem for the Sabbath, }{\rtlch \ai\af0 \ltrch \i\insrsid4342917 \'93el Adon.\'94}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and wealth and happiness at their right and at their left}{\rtlch \af0 \ltrch \insrsid3028086\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid3028086\charrsid1781117 H}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is produce shall not bend to the earth}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 15:29.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 (}{\rtlch \af0 \ltrch \insrsid3028086\charrsid1781117 m}{\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 ay it be the will of the Lord). And for all the people of the congregation he shall make expiation.}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4403687 Lev.}{\rtlch \af0 \ltrch \insrsid4342917 16:33.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 The Lord be with you,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid1276346 Ex}{\rtlch \af0 \ltrch \insrsid4342917 . 10:10.}} +}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 you and your children,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 115:14.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 may there be well-being within their ramparts, peace in their citadels,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 122:7.}}}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 may there yet be heard in their courtyards the sound of mirth and gladness}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid1276346 Jer}{\rtlch \af0 \ltrch \insrsid4342917 . 7:34.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 (Amen. May it be the will of the Lord)}{\rtlch \af0 \ltrch +\insrsid3028086\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 We ourselves clarified concerning that which is obligatory upon us by inquiring of ten }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 talmidei hakhamim}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 from among the scholars and rabbis \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\trowd \irow3\irowband3\ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7925\clshdrawnil \cellx8492\row \ltrrow}\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin0 {\rtlch +\af0 \ltrch \insrsid12391429\charrsid1781117 20\cell }\pard\plain \ltrpar\s20\ql \fi-189\li189\ri0\sl480\slmult1\widctlpar\intbl\tx360\faauto\adjustright\rin0\lin189 \rtlch \af0\afs24\alang1037 \ltrch +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of the Sephardi}{\rtlch \af0 \ltrch \insrsid3028086\charrsid1781117 c}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + community and of the Ashkenazi}{\rtlch \af0 \ltrch \insrsid3028086\charrsid1781117 c}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + community, and we took upon ourselves the study of the Zohar and passages of the Mishnah in the amount determined by the rabbis for the benefit of his soul, and we lit olive oil upon the grave of the holy }{\rtlch \ai\af0 \ltrch +\i\insrsid12391429\charrsid1781117 tana}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Rabbi Meir BA\rquote al ha-Nes, May his virtue stand us in good stead, for the repose of his soul, and after the study +\par we conduct}{\rtlch \af0 \ltrch \insrsid3028086\charrsid1781117 ed}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the prayer for the dead for the Rabbi, the }{\rtlch \af0 \ltrch \cf2\insrsid12391429\charrsid1781117 Z}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 addik, of blessed memory, and to differentiate between the dead and the living we made a blessing (}{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 mi she-beirakh)}{\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 over his descendants. And so we shall do, God willing, on the anniversary [of his death]. May it be God\rquote s will that his soul live a happy life and his children shall inherit the land,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid3356114 Ps.}{\rtlch \af0 \ltrch \insrsid4342917 25:13. +}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the cry \'93Wrack and ruin\'94 shall no more be heard in their land,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar +\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch +\af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 60:18.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 my Lord God wipe the tears away,}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch \af0 \ltrch \i\insrsid4342917\charrsid4140030 Is.}{\rtlch \af0 \ltrch \insrsid4342917 25:8.} +}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 He will destroy death forever,}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 \tab }{\rtlch +\ai\af0 \ltrch \i\insrsid4342917\charrsid15421667 Ibid}{\rtlch \af0 \ltrch \insrsid4342917\charrsid5066409 .}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 they shall never languish again.}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid15421667 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid1276346 Jer}{\rtlch \af0 \ltrch \insrsid4342917 . 31:11.} +}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Their children are with them always}{\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch\af0\afs20\alang1037 \ltrch \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \af0 +\ltrch \i\insrsid4342917\charrsid10509721 Job}{\rtlch \af0 \ltrch \insrsid4342917 21:8.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and their descendants will spend their days and years well. Length of days, years of life and well being,}{ +\rtlch \af0 \ltrch \cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \cs16\super\insrsid4342917 \chftn }{\rtlch \af0 \ltrch \insrsid4342917 }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid1276346 Prov}{\rtlch \af0 \ltrch \insrsid4342917 . 3:2.}} +}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 Amen, may thisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthis all be fulfilled, and as well all the words of the sighing and moaning who sign here in the holy city of Tiberias, may it be rebuilt. 15 Kislev 5643 from the creation, with great stren +gth and peace.\'94\cell }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 \trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph108\trleft-108\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth675\clshdrawnil \cellx567\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth7925\clshdrawnil \cellx8492\row }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar +\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard\plain \ltrpar\s21\qj \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid11090010 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\insrsid12391429\charrsid1781117 The feature common to all the letters presented here is their special style that generally included great }{\rtlch \af0 \ltrch \insrsid10445282\charrsid1781117 shock }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +or an expression of sorrow over the misfortune that had occurred, showering praises on the deceased (the crowns placed on the head of the deceased}{\rtlch \af0 \ltrch \insrsid11090010\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + }{\rtlch \af0 \ltrch \insrsid11090010\charrsid1781117 which }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +depended upon the closeness of the relation to the deceased, his stage in life, and the status of his family members), a sense of loss and the great void left by the deceased\rquote s no longer being present, statements containing acce +ptance of the Divine judgment or expressions intended to express the uselessness of excessive mourning, words of consolation and blessing for the mourner\rquote s family. Depending on the writer and recipient of the letter, other topics might be added. + +\par }\pard\plain \ltrpar\s6\qj \li0\ri0\sl480\slmult1\keepn\widctlpar\tx360\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch \ab\af0\afs24\alang1037 \ltrch \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch +\scaps\insrsid12391429\charrsid1781117 +\par B. Condolence by Telephone +\par }\pard\plain \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 \rtlch \af0\afs24\alang1037 \ltrch \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +On the development of the custom \emdash Does one fulfill the commandment of \'93consoling mourners\'94 through a telephone call? Naturally this type of question could only have been raised in recent generations. The first person to have dealt with +this is Rabbi Moses Feinstein (Lithuania\endash U.S., 20}{\rtlch \af0 \ltrch \super\insrsid12391429\charrsid1781117 th}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 century), in his work }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 +Iggerot Moshe}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , where he writes: "Regarding consoling mourners there are two }{\rtlch \af0 \ltrch \insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 s: +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid11090010 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab +First, for the benefit of the living, who are very involved with their grief, a person is obligated to appeal to }{\rtlch \af0 \ltrch \insrsid11090010\charrsid1781117 [the mourner\rquote s }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 feelings}{ +\rtlch \af0 \ltrch \insrsid11090010\charrsid1781117 ]}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and to console him}{\rtlch \af0 \ltrch \insrsid11090010\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + and for this people are also obligated to go to the home where the mourner is located. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid14948990 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \tab +Second, for the benefit of the dead, as written in Shabbat 152a: "A deceased person who has no [official] mourners," since in any event we know that where there are consolers, it is of benefit to the dead \'85 + this means for me that on behalf of the living mourner, it is }{\rtlch \af0 \ltrch \insrsid10764079\charrsid1781117 possible }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to fulfill the obligation by means of the telephone}{\rtlch \af0 \ltrch +\insrsid10764079\charrsid1781117 as well}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 , but }{\rtlch \af0 \ltrch \insrsid10764079\charrsid1781117as regards }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the }{\rtlch \ai\af1024 \ltrch +\i\insrsid12391429\charrsid1781117 mitzvah}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 that is on behalf of the dead, it is }{\rtlch \af0 \ltrch \insrsid10764079\charrsid1781117 only }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +fitting that one go there to the place where oold pays condolences, or to the place where he died. }{\rtlch \af0 \ltrch \insrsid10764079\charrsid1781117 E}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ven i}{\rtlch \af0 \ltrch +\insrsid10764079\charrsid1781117 n}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid10764079\charrsid1781117 regard to }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 the living mourner}{\rtlch \af0 \ltrch +\insrsid10764079\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 it is certainly preferable that whe}{\rtlch \af0 \ltrch \insrsid10764079\charrsid1781117 n}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch +\insrsid10764079\charrsid1781117 [the consoler] }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 goes there he also hono +rs him, since he himself is also part of the condolences, as in the words of R. Akiba, when his sons died and all the Jews eulogized them\'85}{\rtlch \af0 \ltrch \insrsid10764079\charrsid1781117 T}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 he } +{\rtlch \af0 \ltrch \insrsid554163\charrsid1781117 tenet}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 of honor is not carried out by telephone. Thus, in effect, if it is at all possible for }{\rtlch \af0 \ltrch \insrsid10764079\charrsid1781117 +a person }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 to go to the mourner's home, which is the complete fulfillment of the }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 mitzvah}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +, it is not enough to do so by phone. But he does partially fulfill the }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 mitzvah}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +, for if it impossible to go to the mourner's house, such as owing to illness or when one is involved with a }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 mitzvah}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + that he must carry out to the extent possible, he should offer condolences by phone, since there is some }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 mitzvah}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 in that}{\rtlch \af0 \ltrch +\insrsid14948990\charrsid1781117 m}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 and he should not say that since he cannot make it to the mourner's home, he has no obligation at all\'85and as to the }{\rtlch \af0 \ltrch +\insrsid14948990\charrsid1781117 question}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 wh +ether the mourner is allowed to speak on the phone, it is simply that whatever he requires for his physical needs or for those of his household, and for the needs of the }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 minyan}{\rtlch \af0 +\ltrch \insrsid12391429\charrsid1781117 , for which it is permitted for him to speak in his home, it is also allowed by telephone. }{\rtlch \af0 \ltrch \insrsid14948990\charrsid1781117 W}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +hen people phone him to console him, }{\rtlch \af0 \ltrch \insrsid14948990\charrsid1781117 he }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 is permitted to go to the phone and receive condolences}{\rtlch \af0 \ltrch +\insrsid14948990\charrsid1781117 .}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid14948990\charrsid1781117 However, }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +as to small talk as well as inquiring about his friends' welfare, or even }{\rtlch \af0 \ltrch \insrsid14948990\charrsid1781117 that of }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 his sons, it is forbidden."}{\rtlch \af0 \ltrch +\cs16\super\insrsid12391429\charrsid1781117 \chftn {\footnote \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sl360\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid1276346 \rtlch \af0\afs20\alang1037 \ltrch +\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch \ai\af0 \ltrch \cs16\i\super\insrsid4342917\charrsid1276346 \chftn }{\rtlch \ai\af0 \ltrch \i\insrsid4342917\charrsid1276346 Iggerot Moshe, Orah Hayyim}{\rtlch \af0 \ltrch \insrsid4342917 +, 4:40.}}}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par }\pard \ltrpar\ql \fi360\li0\ri0\sl480\slmult1\widctlpar\tx180\faauto\adjustright\rin0\lin0\itap0\pararsid14948990 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 This means, the complete }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 mi +tzvah}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 + is to go and console the mourner at his home, since the consoler thereby benefits the mourner and can speak to his emotional needs and assuage his sorrow; this is also for the benefit of the dead. }{\rtlch \af0 \ltrch \insrsid14948990\charrsid1781117 A}{ +\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 fter the fact, if one cannot make it to the mourner's home, he should console him by speaking on the phone. +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0 {\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +\par +\par }\pard \ltrpar\ql \li0\ri0\sl480\slmult1\widctlpar\tx360\faauto\adjustright\rin0\lin0\itap0\pararsid14948990 {\rtlch \ab\af0 \ltrch \b\insrsid12391429\charrsid1781117 The Custom Today }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 \emdash T}{ +\rtlch \af0 \ltrch \insrsid14948990\charrsid1781117 he custom is t}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 o console the mourner where he is sitting }{\rtlch \ai\af0 \ltrch \i\insrsid12391429\charrsid1781117 shiv\rquote ah}{\rtlch \ai\af0 +\ltrch \i\insrsid14948990\charrsid1781117 ,}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 }{\rtlch \af0 \ltrch \insrsid14948990\charrsid1781117 b}{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 ut if }{\rtlch \af0 \ltrch +\insrsid14948990\charrsid1781117 one }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 cannot get to the mourner's home, }{\rtlch \af0 \ltrch \insrsid14948990\charrsid1781117 he }{\rtlch \af0 \ltrch \insrsid12391429\charrsid1781117 +may offer condolences by phone. +\par }} diff --git a/sw/qa/extras/layout/data/forcepoint89.html b/sw/qa/extras/layout/data/forcepoint89.html new file mode 100644 index 000000000..7998a2b0b Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint89.html differ diff --git a/sw/qa/extras/layout/data/forcepoint90.rtf b/sw/qa/extras/layout/data/forcepoint90.rtf new file mode 100644 index 000000000..b3c677e09 --- /dev/null +++ b/sw/qa/extras/layout/data/forcepoint90.rtf @@ -0,0 +1 @@ +{\rtf1\cnsi \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\blue98;\red143\green142\blue142;\red75\green60\blue52;}{\fonttbl{\f0\froman\cpg1257\fcharset180697947886554888358 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\fro-an\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;}{\rtf1\cnsi \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\blue98;\red143\green142\blue142;\red75\green60\blue52;}{\fonttbl{\f0\froman\cpg1257\fcharset180697947886554888358 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\fro-an\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 Style170141183460469231731687303715884105678;}{\*\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\0\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\nosupersubLi\scaps0\charscalex100\expndtw-10\dn0\f0\cchs186\lang1063\langfe1063\s22 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-10\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\cchs187 \'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 \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\cchs-23 \'e30153860653936719740\f0\cchs186 ry\f0\cchs186 \'f0\f0\cchs186 ius,\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\langfe1063\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 '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 (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 \cs5u\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\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 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\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\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\li32\fi-32\ri0\sb0\sa0\sl-280\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Galimybi\f0\cchs186 \'f8 \'e1\'fe\f0\cchs186 velgimo\cell \pard \plain \s15\ql\li0\fi40\ri0\sb0\sa0\sl-272\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Geb\f0\cchs186 \'eb\f0\cchs186 jimas identifikuoti gali\-myb\f0\cchs186 \'e6\f0\cchs186 ir ja pasinaudoti.\cell \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\sl-272\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 tirkite ispan\f0\cchs186 \'f8\f0\cchs186 kalbos mokymo(si) poreik\f0\cchs186 \'e1\f0\cchs186 mokykloje ir inicijuokite atitinkamos pro\-gramos \f0\cchs186 \'e1\f0\cchs186 gyvendinim\f0\cchs186 \'e0\f0\cchs186 ".\cell \pard\intbl\row \pard\pard \plain \s14\ql\li0\fi600\ri0\sb232\sa0\sl-328\slmult0 \cs44\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\soctd \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 \chpleft13358\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 \shp|eft13350\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 fPint}{\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}}{\sp{\sn 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\langde1063\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\expndtw-5420746430195647047\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 relBotto}}{\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\cchsq86 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 ti.\par \pard \plain \s2\qj\li0\fi584\ri0\sb8\sa0\sl-271\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Apibendrinant tai, kas pasakyta, galima pateikti tok\f0\cchs186 \'e1\f0\cchs186 teorin\f0\cchs186 \'e1\f0\cchs186 gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8 \f0\cchs186 ugdymo ir jo s\f0\cchs186 \'e0\f0\cchs186 lyg\f0\cchs186 \'f8\f0\cchs186 model\f0\cchs186 \'e1\f0\cchs186 :\par \pard \plain \s11\qr\li0\fi0\ri0{\sl-240\slmult0\fs20\par }\sb99\sa0 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 3.1 \cs55 lentel\f0\cchs186 \'eb\par \column \pard \plain \s28\qj\li0\fi0\ri0{\sl-240\slmult0\fs20\par }\sb200\sa0\sl-271\slmult0 \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Ugdymo rea-\ul lyb\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\khftn{\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 optimaliamveikimui \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 moeelis 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 $}\pAv \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 \v0\cchs186 \'fe\f0\cchs186 mogui, jame vyksta informacijos perdavimo ir valdymo pro\-cesai \f0\cchs064 \'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 sudf0\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 vei{imui, 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\cchs1:6 \'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\cel \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}vs\n\{s\{p{ }1s} 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 trukumoexpndtw0 \cs55fs22 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 lbrdrr\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\cel \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}vs\n\{s\{p{ }1s} 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 trukumoexpndtw0 \cs55fs22 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\brdr15\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\chrlex100\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\brdrsbrdrw15\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\expndtu0\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\fcchs186 \'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 \f0cchs186 \'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 pedagginiame, \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-722\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\achs186 \'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\charscalex100\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\cchs0 k\f0\cchs186 \'eb\f0\cchs186 jo\par \pard \plain \s11\ql\li0\fi0\ri0\sb102\sa0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 tokios problemos:\par }\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\charscalex100\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\cchs0 k\f0\cchs186 \'eb\f0\cchs186 jo\par \pard \plain \s11\ql\li0\fi0\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/extras/layout/data/forcepoint91.html b/sw/qa/extras/layout/data/forcepoint91.html new file mode 100644 index 000000000..eacbd2e05 Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint91.html differ diff --git a/sw/qa/extras/layout/data/forcepoint92.doc b/sw/qa/extras/layout/data/forcepoint92.doc new file mode 100644 index 000000000..7d9e02dec Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint92.doc differ diff --git a/sw/qa/extras/layout/data/forcepoint93-1.rtf b/sw/qa/extras/layout/data/forcepoint93-1.rtf new file mode 100644 index 000000000..bbe5ecfb7 Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint93-1.rtf differ diff --git a/sw/qa/extras/layout/data/forcepoint93-2.rtf b/sw/qa/extras/layout/data/forcepoint93-2.rtf new file mode 100644 index 000000000..bcc5f3dc8 Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint93-2.rtf differ diff --git a/sw/qa/extras/layout/data/forcepoint94.html b/sw/qa/extras/layout/data/forcepoint94.html new file mode 100644 index 000000000..8be788f8e Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint94.html differ diff --git a/sw/qa/extras/layout/data/forcepoint98.html b/sw/qa/extras/layout/data/forcepoint98.html new file mode 100644 index 000000000..9d4b76c53 Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint98.html differ diff --git a/sw/qa/extras/layout/data/forcepoint99.html b/sw/qa/extras/layout/data/forcepoint99.html new file mode 100644 index 000000000..a964454f6 Binary files /dev/null and b/sw/qa/extras/layout/data/forcepoint99.html differ diff --git a/sw/qa/extras/layout/data/horizontal_multilevel.odt b/sw/qa/extras/layout/data/horizontal_multilevel.odt new file mode 100644 index 000000000..9bd125865 Binary files /dev/null and b/sw/qa/extras/layout/data/horizontal_multilevel.odt differ diff --git a/sw/qa/extras/layout/data/image-comment.odt b/sw/qa/extras/layout/data/image-comment.odt new file mode 100644 index 000000000..d861d3a9a Binary files /dev/null and b/sw/qa/extras/layout/data/image-comment.odt differ diff --git a/sw/qa/extras/layout/data/in_056132_mod.odt b/sw/qa/extras/layout/data/in_056132_mod.odt new file mode 100644 index 000000000..548401063 Binary files /dev/null and b/sw/qa/extras/layout/data/in_056132_mod.odt differ diff --git a/sw/qa/extras/layout/data/keep-with-next-fly.fodt b/sw/qa/extras/layout/data/keep-with-next-fly.fodt new file mode 100644 index 000000000..13d6785f4 --- /dev/null +++ b/sw/qa/extras/layout/data/keep-with-next-fly.fodt @@ -0,0 +1,146 @@ + + + 2022-02-16T15:01:24.0881914252022-02-16T15:16:50.103419678PT15M29S1LibreOfficeDev/7.4.0.0.alpha0$Linux_X86_64 LibreOffice_project/16748887dd277bd63034e07b5e2a86740235b315 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ** Expression is faulty ** + + iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAABGdBTUEAANbY1E9YMgAAABl0 + RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFpSURBVHjaYvz//z8DtQBAADER + o+jjZGuibAQIICZiDOK/cgzFwEnrV/4HYXS1AAHERIxBR58yMiAb2DtzM1b1AAHERIxBIIBu + IDYAEEBMxBjE0bgdxcBL3vcZLl16jaEPIICYiDFIU9MSw8BeoeUYhgEEEBMxBnFx8WE1EN3L + AAHERIxBIECMgQABxAhKtPgM+vbtE9xmGP/69eMMP+o9wWLW0kD9OlYM/LlHGQECiAndoKg/ + USgGgTTmdS8C0yA+zIUgdeguBAggljtWdQwMVkDXACWMjd0ZXRun/Id5DWTA9C23GSaVxoEN + zISoARvoamnBYF2/hPHs2Z3/z0JdDhBADCBvIuPkhsn/QeDr14//QWwQjY0PVYeiFyCA8OaA + 3cdPoEQAiI8PAAQQEwMVAUAAsWATBAX0jx9fsWrAJQ4CAAGE1TBQwOMC9+9fwikHEEBYDQPF + IAzIe8TglEMHAAHESM2SFiDAADEwCe4BJwcYAAAAAElFTkSuQmCC + + + + + + + \ No newline at end of file diff --git a/sw/qa/extras/layout/data/legend-itemorder-min.docx b/sw/qa/extras/layout/data/legend-itemorder-min.docx new file mode 100644 index 000000000..8783d3908 Binary files /dev/null and b/sw/qa/extras/layout/data/legend-itemorder-min.docx differ diff --git a/sw/qa/extras/layout/data/long_legendentry.docx b/sw/qa/extras/layout/data/long_legendentry.docx new file mode 100644 index 000000000..02f393ad0 Binary files /dev/null and b/sw/qa/extras/layout/data/long_legendentry.docx differ diff --git a/sw/qa/extras/layout/data/no-line-break-at-slash.fodt b/sw/qa/extras/layout/data/no-line-break-at-slash.fodt new file mode 100644 index 000000000..e900594fa --- /dev/null +++ b/sw/qa/extras/layout/data/no-line-break-at-slash.fodt @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Blah blah bla bla bla Foostrasse 13/c/2, etc. + + + diff --git a/sw/qa/extras/layout/data/outside_long_data_label.docx b/sw/qa/extras/layout/data/outside_long_data_label.docx new file mode 100644 index 000000000..fb5110a43 Binary files /dev/null and b/sw/qa/extras/layout/data/outside_long_data_label.docx differ diff --git a/sw/qa/extras/layout/data/piechart_leaderline.odt b/sw/qa/extras/layout/data/piechart_leaderline.odt new file mode 100644 index 000000000..77c61a691 Binary files /dev/null and b/sw/qa/extras/layout/data/piechart_leaderline.odt differ diff --git a/sw/qa/extras/layout/data/redline_charatr.fodt b/sw/qa/extras/layout/data/redline_charatr.fodt new file mode 100644 index 000000000..9f7c19162 --- /dev/null +++ b/sw/qa/extras/layout/data/redline_charatr.fodt @@ -0,0 +1,164 @@ + + + + foobarus 2018-05-25T14:53:46.6637330182018-05-25T14:56:49.778386195foobarus PT3M3S1LibreOfficeDev/6.2.0.0.alpha0$Linux_X86_64 LibreOffice_project/3d9809bb6a20c34ef9f5ef0f4a6bc4eab7d8551f + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foobarus + 2018-05-25T14:56:22 + + + + + + + foobarus + 2018-05-25T14:56:24 + + + + + + + foobarus + 2018-05-25T14:56:27 + + + + + + + foobarus + 2018-05-25T14:56:29 + + + + + + + foobarus + 2018-05-25T14:56:32 + + + + + + + foobarus + 2018-05-25T14:56:34 + + + + + + + foobarus + 2018-05-25T14:56:36 + + + + + + + foobarus + 2018-05-25T14:56:38 + + + + + + + foobarus + 2018-05-25T14:56:40 + + + + + + + foobarus + 2018-05-25T14:56:42 + + + + + + + foobarus + 2018-05-25T14:56:44 + + + + + foobarbaz + foobarbaz + foobarbaz + foobarbaz + foobarbaz + foobarbaz + foobarbaz + foobarbaz + foobarbaz + foobarbaz + foobarbaz + + + diff --git a/sw/qa/extras/layout/data/redline_footnote_pagination.fodt b/sw/qa/extras/layout/data/redline_footnote_pagination.fodt new file mode 100644 index 000000000..e4a6e5db7 --- /dev/null +++ b/sw/qa/extras/layout/data/redline_footnote_pagination.fodt @@ -0,0 +1,792 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Seite 2von 2 + + + + + + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + Zahl? + + + + + + + 1970-01-01T00:00:00 + + Xx + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + x + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + xx + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + xxx + + + + + + + 1970-01-01T00:00:00 + + xx Xxxxxxx + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + xxxxxx, + + + + + + + 1970-01-01T00:00:00 + + xxxx + + + + + + + 1970-01-01T00:00:00 + + xxxxxxxx xxxxxxx xxxxx + + + + + + + 1970-01-01T00:00:00 + + xx xxxxxxxxxxxxxxx xxxxxxxxxx + + + + + + + 1970-01-01T00:00:00 + + xxxx + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + , + + + + + + + 1970-01-01T00:00:00 + + xx xxxxxxxxxxxxxxxx xxx + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + x + + + + + + + 1970-01-01T00:00:00 + + x + + + + + + + 1970-01-01T00:00:00 + + 1 + xxxxxxx? + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + 2 + Xxx xxxxx xxxx xxxxx xxxxxxxxxx xxx xxxxxx xxxx? (xxxx: xxxx. xxxxxxxxxxx. xxxxxx xxx xxxxxxxxxxxx xxx xxxxx xx xxx xx xxxxxxx xxxxxxxxx xxx xxxxxxxxxx xxx xxx. xxxx xxxxx) + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + xxxxxxxxxxxxxxxxxxx ( + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + ) + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + 3 + xxx xxx xxx xxxxxxxxxxxxxxxxx xxx + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + 4 + xxxxx xxxxxx xxxxxxxxx, xx xxxxxx xxxx xxxxxxxxx? (xxxx: xxxx xxxxxxxxxx, xxxx xxxx xx xxx xxxx xxx xx xxx xxx xxxxxxxxxxx) + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + 5 + xxxx? + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + 7 + xx xxxxx xxxxxxx xx xxxxxxx xxxxxxxxx xxx xxxxxxxxxxxx xxxxxxx. + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + 9 + xxxx? / xxxx xxxxxxxx + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + + + + + + + 1970-01-01T00:00:00 + + xx + + + + + + + 1970-01-01T00:00:00 + + + + + + + + + + + + xxx xxxxxxxxx xxxxxxxxxxxxxxxxxx xxx xxxxxxxxxxxxx xxx xxxxxx xxxxxxx xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxx xxx xxx xxxx xxxxxxxxxxx xxxxxxx xxx xxxxxxxxxxxx xxxxxxxxxxxxxx xxxx xxxxx xx xxx xxxxxxx xxxxxxx xxxxxxxxxx. Xxxxxxxx xxx xxxxxxxxxxxx xxxx xxx xx. xxx xxxxxxxxxxxxx xxx xxxxxxx xxx xxxxxxxxxxxx xxx xx. xxx xxxxxxxxxxxxx, xxxxxxxxxxxx xxx xxxxxxxxxxxxx xxx xxxxxxxxxxxxx xxx xxxxxxxxxxxxxxxxxxx xxxxxxx xxx xxxxxxxxxxx xxxxxxxx xxxxxxxxxxxxx xxxxxxx. xxx xxxxx xxx xxxxxxxxxxxxx xxx xxxxxx xxxxxxxxx xxxxxxxxxxxxxxxxxxx xx xxxxxxxxxxxxxxx xxxxxxxxxx xxxxxxx. xx xxxxxxxx xxx xxx xxxx xxxx xxxxxxxxx xx xxx xxxxxxxxxxxx xxxxxxxxxxxxxxxxxx (xxxx) xxx xxx xxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxx xxx xxxxxxxx xxxxxxxxxxxxxx xxx xxxxxx xxx xxxxxxxx xxxxxxxxxx xxx xxxxxxxxxxx. xxxxxxxxxx xxx xxxx xxxxx xxxxxxxxxxxx xxxxxxxxxxxx xxx xxxxxxxxxxxxxxxx xxx xx xxxxx xxx xxxxx xxxxxxxxx xxxxxx xxx xxxxx xxx xxxxx xxxx xxxx xxxxxxx xxx xxxxxxxx xxxxxxx xxx xxxxx xxxxxxxx xxx xxxxxxxxxxxxx xxxxxxxx.xxx xxxxxx xxxxxxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxx xxxxx xxx xxxxxx xxxxxxxxxxxx xxxx xxx xxxxx xxx xxx xxxxxxxxxxxx xxxxxxx xxx xxxxxxxxxxxxx xxx xxx xxxxxxxxxxxx xxxxxxxxx xxxxxxx xxxx xxxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxx xx xxx xxxxxxxxxx xxxxxxxx. xxxxxxxxx xx xxxxxxx xxx xxxxxxxxx xxxxxxxxxxxxxx xxxxx xxx xxxxxxxxxxxxxxxxxx xxxx xxxxxxx xxxxxxxxxx xxx xxxxxxxx xxx, xx xxx xxxxxxxxxxxxxx xxxx xxxxxxx xx xxxxxxxxxxxx. + xxx xxxxxxxx xxxxxx xxx xxxxxxxx xxx xxxxx xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxx (xxx) xxx xxxx xxxxxx xxxx xxx xxx xxxx xxx xxxxxxxx xxxxxxxxxxx xx x-xx-xxxxxxx xxxxxxxxxxx xxxxxxxxxxxx xxx xxxxx xxxx xxxx xxxxxx xxx. xxx xxxxxxx xxx xxxxxxxxxxxx xxxxx xxxxxxxxxxx xxxxxxxx xxxxx xxxxx xxxx xxx xxx xxx xxx. xxxx xxxxxxxxxxxxx xxxxxx xxx xxx xxxx xxxxx xx xxxxxxxx xxxxxxxxxxxxxx xxx xxxxxxxxxxx xx. xxxx, xxx xxxxxxx xxxxxxxxxxx xxxxxxxxxxxx (xx) xxxxxxx xx xxxx xxxx xx xxxxxxxxxxx xxxxxxx xxx xxxxxxxxxxxxxxxxxxx xxxxxxxxxxx. xxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxx xxxxxxxxx, xxxxxxxxxxxx xxx xxxxxxxxxxxxxxx xxxxxx xxx xxx xxxx xxxxxxxxxxxxx xxxxxxxxxxx xxxxx xxxxxxxx, xxxx xxxxxxxxxxxxxx xxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxx xxx. xxxxxxxxxxxx. xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxx xxxx xxxxxxxxxxx xxx xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxxxx xxxxxxxxxx, xxxxxxxxxxxxxxx, xxxxxxxxxxxxxxx xxx., xxx xxxxxxx xxx xxxxx xxxxxxxxxxxx xxx xxxxx xxxxxxxxxx xxxxxxx. 1 + xxxx xxxxxxxxxx, xx xxx xxx xxxxxxxx xxxx. xxxxxxxxx xxx xxx xxxx xxxxxx xxxxxxx ?xxx xxxxxxxxx xxxxx xxxxxxxxxx xxxxxxxxxxxxxxx yyyyyyyyy yyy yyyyyyyyyyyyyyyy yyyyyyy yyy yyyyy yyyyyyyyy yyy yyyyyyyyy zzz. zzz zzzz zzzz zzz zzz zzzzzzz zzz zzzz zzzzzzzzzzzzzz zzzzzzzzzzzz xxxxx xxxxxxxxxxxxxxx. xxxx xxx xxx xxxxxxxxx xxx xxxxxxxxxx xxx xxxxxxxxx xxx. xxx xxxx xxxxx xxxxxxxxxx xxxxxxxxxxxxxxxster xxxxxxxxxxxxxxx xxxxx xxxxxxxxxxxxxxx. 2 + xxx xxxxxxxxxxxxx xxx xxxxx xxx xxxxxxxxxxxxxxx xxxxxx xxx xxx xxxxxxxxx xxxxx xxxxxxxxx xxxxxx. xxx xxx xxxxxxx xxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxx xxx xxxxxxxxxxxxxxxxxxxxxxx xxxxxxx xxxx xxxx xxx xxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx. xx xxxxxxxx xxx xxx xxxxxxx xxxxxxxxxxxxxx xx xxx xxxxx xxxxxxx xxx xxxx xxxxxxx xxx xxxxxxxxxx xxxxxxx xxxxx xxxxxxxx. xxx xxxxx xxx xxxx xx x- xxx x-xxxxxxx xxxxxxxxxxx xxx xxxxxxxxxxxxx xxx xxxx xxxxxxxxxxx xxxxxxxxxxxx xxx xx. xxx xxxxxxxxxxxxx xxx xxxxxx xxxxxxxxxxxx xxxxxx xxxxxxxx xxxxxx. + + + + diff --git a/sw/qa/extras/layout/data/redline_footnotes.odt b/sw/qa/extras/layout/data/redline_footnotes.odt new file mode 100644 index 000000000..383fc7273 Binary files /dev/null and b/sw/qa/extras/layout/data/redline_footnotes.odt differ diff --git a/sw/qa/extras/layout/data/redline_sections.fodt b/sw/qa/extras/layout/data/redline_sections.fodt new file mode 100644 index 000000000..69fd03dc3 --- /dev/null +++ b/sw/qa/extras/layout/data/redline_sections.fodt @@ -0,0 +1,110 @@ + + + + 2018-08-13T15:30:43.1565511832018-08-13T15:55:10.667743508PT1M51S2LibreOfficeDev/6.2.0.0.alpha0$Linux_X86_64 LibreOffice_project/3d9809bb6a20c34ef9f5ef0f4a6bc4eab7d8551f + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unknown Author + 2018-08-13T15:31:07 + + o + + + + FRAME + + bar + baz + + b + + + + + + Unknown Author + 2018-08-13T15:55:07 + + o + bar + b + + + + + folah + + + folah + + + + + diff --git a/sw/qa/extras/layout/data/redline_table.fodt b/sw/qa/extras/layout/data/redline_table.fodt new file mode 100644 index 000000000..37fa642ec --- /dev/null +++ b/sw/qa/extras/layout/data/redline_table.fodt @@ -0,0 +1,128 @@ + + + + 2018-08-13T12:54:45.8768882392018-08-13T12:56:12.482549728PT1M26S2LibreOfficeDev/6.2.0.0.alpha0$Linux_X86_64 LibreOffice_project/3d9809bb6a20c34ef9f5ef0f4a6bc4eab7d8551f + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unknown Author + 2018-08-13T12:55:06 + + + + + foo + + + + + + + + FRAME + + aaa + + + + + + + + + + + ddd + + + + bar + + + diff --git a/sw/qa/extras/layout/data/stable-at-page-anchored-fly-position.odt b/sw/qa/extras/layout/data/stable-at-page-anchored-fly-position.odt new file mode 100644 index 000000000..e5a3779c5 Binary files /dev/null and b/sw/qa/extras/layout/data/stable-at-page-anchored-fly-position.odt differ diff --git a/sw/qa/extras/layout/data/tab-over-margin.odt b/sw/qa/extras/layout/data/tab-over-margin.odt new file mode 100644 index 000000000..1413f2f6d Binary files /dev/null and b/sw/qa/extras/layout/data/tab-over-margin.odt differ diff --git a/sw/qa/extras/layout/data/tabellen_test_windows_1.odt b/sw/qa/extras/layout/data/tabellen_test_windows_1.odt new file mode 100644 index 000000000..a666fe5fd Binary files /dev/null and b/sw/qa/extras/layout/data/tabellen_test_windows_1.odt differ diff --git a/sw/qa/extras/layout/data/table-extrusion1.odt b/sw/qa/extras/layout/data/table-extrusion1.odt new file mode 100644 index 000000000..10600fa54 Binary files /dev/null and b/sw/qa/extras/layout/data/table-extrusion1.odt differ diff --git a/sw/qa/extras/layout/data/table-extrusion2.odt b/sw/qa/extras/layout/data/table-extrusion2.odt new file mode 100644 index 000000000..63fc74f46 Binary files /dev/null and b/sw/qa/extras/layout/data/table-extrusion2.odt differ diff --git a/sw/qa/extras/layout/data/table_cell_overlap.fodt b/sw/qa/extras/layout/data/table_cell_overlap.fodt new file mode 100644 index 000000000..e9565054d --- /dev/null +++ b/sw/qa/extras/layout/data/table_cell_overlap.fodt @@ -0,0 +1,161 @@ + + + 2022-02-11T15:45:44.5250152262022-02-11T15:51:17.840027874PT5M32S4LibreOfficeDev/6.3.6.11$Linux_X86_64 LibreOffice_project/798c41960be08155f4f9734c6307615ab45c134e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ONE: + + + + + TWO: + + + + + + + + + + diff --git a/sw/qa/extras/layout/data/tdf100680.docx b/sw/qa/extras/layout/data/tdf100680.docx new file mode 100644 index 000000000..c949540be Binary files /dev/null and b/sw/qa/extras/layout/data/tdf100680.docx differ diff --git a/sw/qa/extras/layout/data/tdf104797.docx b/sw/qa/extras/layout/data/tdf104797.docx new file mode 100644 index 000000000..6e52190ce Binary files /dev/null and b/sw/qa/extras/layout/data/tdf104797.docx differ diff --git a/sw/qa/extras/layout/data/tdf105481.odt b/sw/qa/extras/layout/data/tdf105481.odt new file mode 100644 index 000000000..73cd89262 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf105481.odt differ diff --git a/sw/qa/extras/layout/data/tdf106153.docx b/sw/qa/extras/layout/data/tdf106153.docx new file mode 100644 index 000000000..cba072360 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf106153.docx differ diff --git a/sw/qa/extras/layout/data/tdf106234.fodt b/sw/qa/extras/layout/data/tdf106234.fodt new file mode 100644 index 000000000..18667c4ab --- /dev/null +++ b/sw/qa/extras/layout/data/tdf106234.fodt @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Lorem ipsumdolor sit amet, consectetur adipiscing elit. (Justify after left-aligned tab) + Lorem ipsumdolor sit amet, consectetur adipiscing elit. (Don’t justify after centered tab!) + + + diff --git a/sw/qa/extras/layout/data/tdf106390.odt b/sw/qa/extras/layout/data/tdf106390.odt new file mode 100644 index 000000000..b2adf5332 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf106390.odt differ diff --git a/sw/qa/extras/layout/data/tdf108021.odt b/sw/qa/extras/layout/data/tdf108021.odt new file mode 100644 index 000000000..a81fe9c9a Binary files /dev/null and b/sw/qa/extras/layout/data/tdf108021.odt differ diff --git a/sw/qa/extras/layout/data/tdf109077.docx b/sw/qa/extras/layout/data/tdf109077.docx new file mode 100644 index 000000000..c0a67d276 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf109077.docx differ diff --git a/sw/qa/extras/layout/data/tdf109137.docx b/sw/qa/extras/layout/data/tdf109137.docx new file mode 100644 index 000000000..03e2423bc Binary files /dev/null and b/sw/qa/extras/layout/data/tdf109137.docx differ diff --git a/sw/qa/extras/layout/data/tdf112290.docx b/sw/qa/extras/layout/data/tdf112290.docx new file mode 100644 index 000000000..c49b5e384 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf112290.docx differ diff --git a/sw/qa/extras/layout/data/tdf113014.fodt b/sw/qa/extras/layout/data/tdf113014.fodt new file mode 100644 index 000000000..86f26310a --- /dev/null +++ b/sw/qa/extras/layout/data/tdf113014.fodt @@ -0,0 +1,108 @@ + + + + 2018-08-13T16:49:19.8844595662018-08-13T16:56:24.066877759PT7M6S2LibreOfficeDev/6.4.0.0.alpha0$Linux_X86_64 LibreOffice_project/628fbb66869ea82a1f38132ff2ba39e9666083eb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + First column should have numbering showing + + + + + + + + + + + + But, if the cell is too small for the margin, then the text is hidden. + + + + + + + + + + + diff --git a/sw/qa/extras/layout/data/tdf114163.odt b/sw/qa/extras/layout/data/tdf114163.odt new file mode 100644 index 000000000..cf22e1160 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf114163.odt differ diff --git a/sw/qa/extras/layout/data/tdf115094.docx b/sw/qa/extras/layout/data/tdf115094.docx new file mode 100644 index 000000000..c6c0176c2 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf115094.docx differ diff --git a/sw/qa/extras/layout/data/tdf115523.fodt b/sw/qa/extras/layout/data/tdf115523.fodt new file mode 100644 index 000000000..a99899956 --- /dev/null +++ b/sw/qa/extras/layout/data/tdf115523.fodt @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + Unknown Author + 2019-10-22T08:48:10 + + + + + + + It + + + em + + + Item + + + + + diff --git a/sw/qa/extras/layout/data/tdf115524.fodt b/sw/qa/extras/layout/data/tdf115524.fodt new file mode 100644 index 000000000..4e589ad9a --- /dev/null +++ b/sw/qa/extras/layout/data/tdf115524.fodt @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + Unknown Author + 2022-06-27T14:35:42 + + + + + + + Item + + + Item + + + New item + + + Item + + + + + diff --git a/sw/qa/extras/layout/data/tdf115630.docx b/sw/qa/extras/layout/data/tdf115630.docx new file mode 100644 index 000000000..e9f6339a1 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf115630.docx differ diff --git a/sw/qa/extras/layout/data/tdf116256.docx b/sw/qa/extras/layout/data/tdf116256.docx new file mode 100644 index 000000000..f067e04f0 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf116256.docx differ diff --git a/sw/qa/extras/layout/data/tdf116486.docx b/sw/qa/extras/layout/data/tdf116486.docx new file mode 100644 index 000000000..a90651ff6 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf116486.docx differ diff --git a/sw/qa/extras/layout/data/tdf116501.odt b/sw/qa/extras/layout/data/tdf116501.odt new file mode 100644 index 000000000..9e9d03f61 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf116501.odt differ diff --git a/sw/qa/extras/layout/data/tdf116830.odt b/sw/qa/extras/layout/data/tdf116830.odt new file mode 100644 index 000000000..8faacc3dd Binary files /dev/null and b/sw/qa/extras/layout/data/tdf116830.odt differ diff --git a/sw/qa/extras/layout/data/tdf116848.odt b/sw/qa/extras/layout/data/tdf116848.odt new file mode 100644 index 000000000..e3a96c78a Binary files /dev/null and b/sw/qa/extras/layout/data/tdf116848.odt differ diff --git a/sw/qa/extras/layout/data/tdf116925.docx b/sw/qa/extras/layout/data/tdf116925.docx new file mode 100644 index 000000000..1c99752e9 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf116925.docx differ diff --git a/sw/qa/extras/layout/data/tdf117028.docx b/sw/qa/extras/layout/data/tdf117028.docx new file mode 100644 index 000000000..877264b4d Binary files /dev/null and b/sw/qa/extras/layout/data/tdf117028.docx differ diff --git a/sw/qa/extras/layout/data/tdf117187.odt b/sw/qa/extras/layout/data/tdf117187.odt new file mode 100644 index 000000000..b0aa59853 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf117187.odt differ diff --git a/sw/qa/extras/layout/data/tdf117188.docx b/sw/qa/extras/layout/data/tdf117188.docx new file mode 100644 index 000000000..418f665ae Binary files /dev/null and b/sw/qa/extras/layout/data/tdf117188.docx differ diff --git a/sw/qa/extras/layout/data/tdf117245.odt b/sw/qa/extras/layout/data/tdf117245.odt new file mode 100644 index 000000000..7008c325b Binary files /dev/null and b/sw/qa/extras/layout/data/tdf117245.odt differ diff --git a/sw/qa/extras/layout/data/tdf117923.doc b/sw/qa/extras/layout/data/tdf117923.doc new file mode 100644 index 000000000..c43cf40c9 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf117923.doc differ diff --git a/sw/qa/extras/layout/data/tdf117923.docx b/sw/qa/extras/layout/data/tdf117923.docx new file mode 100644 index 000000000..c10ac2405 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf117923.docx differ diff --git a/sw/qa/extras/layout/data/tdf117982.docx b/sw/qa/extras/layout/data/tdf117982.docx new file mode 100644 index 000000000..f5886215b Binary files /dev/null and b/sw/qa/extras/layout/data/tdf117982.docx differ diff --git a/sw/qa/extras/layout/data/tdf118058.fodt b/sw/qa/extras/layout/data/tdf118058.fodt new file mode 100644 index 000000000..dbdf26bf5 --- /dev/null +++ b/sw/qa/extras/layout/data/tdf118058.fodt @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Para 1.No. However, you will not be able to see the colours produced on a black-and-white set. + + + diff --git a/sw/qa/extras/layout/data/tdf118672.odt b/sw/qa/extras/layout/data/tdf118672.odt new file mode 100644 index 000000000..5f480f670 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf118672.odt differ diff --git a/sw/qa/extras/layout/data/tdf119875.odt b/sw/qa/extras/layout/data/tdf119875.odt new file mode 100644 index 000000000..6f579546e Binary files /dev/null and b/sw/qa/extras/layout/data/tdf119875.odt differ diff --git a/sw/qa/extras/layout/data/tdf120287.fodt b/sw/qa/extras/layout/data/tdf120287.fodt new file mode 100644 index 000000000..55527c1e2 --- /dev/null +++ b/sw/qa/extras/layout/data/tdf120287.fodt @@ -0,0 +1,40 @@ + + + + + true + true + disabled + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + b)Lorem ipsum dolor sit amet, consetetur sadips1 2 3 4 5 6 78sed diam + + + diff --git a/sw/qa/extras/layout/data/tdf120287b.fodt b/sw/qa/extras/layout/data/tdf120287b.fodt new file mode 100644 index 000000000..137bb6c9d --- /dev/null +++ b/sw/qa/extras/layout/data/tdf120287b.fodt @@ -0,0 +1,45 @@ + + + + + true + high-resolution + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + b)Lorem ipsum dolor sit amet, consetetur sadips1 2 3 4 5 6 78a b c d e sed diam + + + diff --git a/sw/qa/extras/layout/data/tdf120287c.fodt b/sw/qa/extras/layout/data/tdf120287c.fodt new file mode 100644 index 000000000..f367336d7 --- /dev/null +++ b/sw/qa/extras/layout/data/tdf120287c.fodt @@ -0,0 +1,46 @@ + + + + + true + high-resolution + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + b) x x x Lorem ipsum dolor sit amet, consetetur sadips test Lorem ipsum dolor sit amet, consetetur sadips1 2 3 4 5 6 7 8 9 a b sed diam + + + diff --git a/sw/qa/extras/layout/data/tdf121658.odt b/sw/qa/extras/layout/data/tdf121658.odt new file mode 100644 index 000000000..b3429ff41 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf121658.odt differ diff --git a/sw/qa/extras/layout/data/tdf122014.docx b/sw/qa/extras/layout/data/tdf122014.docx new file mode 100644 index 000000000..400939495 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf122014.docx differ diff --git a/sw/qa/extras/layout/data/tdf122225.docx b/sw/qa/extras/layout/data/tdf122225.docx new file mode 100644 index 000000000..e4f0cc35f Binary files /dev/null and b/sw/qa/extras/layout/data/tdf122225.docx differ diff --git a/sw/qa/extras/layout/data/tdf122607.odt b/sw/qa/extras/layout/data/tdf122607.odt new file mode 100644 index 000000000..123e04702 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf122607.odt differ diff --git a/sw/qa/extras/layout/data/tdf122607_leerzeile.odt b/sw/qa/extras/layout/data/tdf122607_leerzeile.odt new file mode 100644 index 000000000..9819a2293 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf122607_leerzeile.odt differ diff --git a/sw/qa/extras/layout/data/tdf122800.odt b/sw/qa/extras/layout/data/tdf122800.odt new file mode 100644 index 000000000..ff1e35cfb Binary files /dev/null and b/sw/qa/extras/layout/data/tdf122800.odt differ diff --git a/sw/qa/extras/layout/data/tdf122878.docx b/sw/qa/extras/layout/data/tdf122878.docx new file mode 100644 index 000000000..f42e92ea2 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf122878.docx differ diff --git a/sw/qa/extras/layout/data/tdf123163-1.docx b/sw/qa/extras/layout/data/tdf123163-1.docx new file mode 100644 index 000000000..8cc9a4f0e Binary files /dev/null and b/sw/qa/extras/layout/data/tdf123163-1.docx differ diff --git a/sw/qa/extras/layout/data/tdf123268.odt b/sw/qa/extras/layout/data/tdf123268.odt new file mode 100644 index 000000000..e68c8139f Binary files /dev/null and b/sw/qa/extras/layout/data/tdf123268.odt differ diff --git a/sw/qa/extras/layout/data/tdf123651.docx b/sw/qa/extras/layout/data/tdf123651.docx new file mode 100644 index 000000000..4cda0b4e7 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf123651.docx differ diff --git a/sw/qa/extras/layout/data/tdf123898.odt b/sw/qa/extras/layout/data/tdf123898.odt new file mode 100644 index 000000000..31800aadb Binary files /dev/null and b/sw/qa/extras/layout/data/tdf123898.odt differ diff --git a/sw/qa/extras/layout/data/tdf124261.docx b/sw/qa/extras/layout/data/tdf124261.docx new file mode 100644 index 000000000..1d3efa527 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf124261.docx differ diff --git a/sw/qa/extras/layout/data/tdf124423.docx b/sw/qa/extras/layout/data/tdf124423.docx new file mode 100644 index 000000000..d48cc60b2 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf124423.docx differ diff --git a/sw/qa/extras/layout/data/tdf124423.odt b/sw/qa/extras/layout/data/tdf124423.odt new file mode 100644 index 000000000..2202c93c5 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf124423.odt differ diff --git a/sw/qa/extras/layout/data/tdf124600.docx b/sw/qa/extras/layout/data/tdf124600.docx new file mode 100644 index 000000000..fc732b5e7 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf124600.docx differ diff --git a/sw/qa/extras/layout/data/tdf124601.doc b/sw/qa/extras/layout/data/tdf124601.doc new file mode 100644 index 000000000..fdfde8215 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf124601.doc differ diff --git a/sw/qa/extras/layout/data/tdf124601b.doc b/sw/qa/extras/layout/data/tdf124601b.doc new file mode 100644 index 000000000..a580e81d3 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf124601b.doc differ diff --git a/sw/qa/extras/layout/data/tdf124796.odt b/sw/qa/extras/layout/data/tdf124796.odt new file mode 100644 index 000000000..2a8d2c816 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf124796.odt differ diff --git a/sw/qa/extras/layout/data/tdf125300.docx b/sw/qa/extras/layout/data/tdf125300.docx new file mode 100644 index 000000000..757a329d5 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf125300.docx differ diff --git a/sw/qa/extras/layout/data/tdf125334.odt b/sw/qa/extras/layout/data/tdf125334.odt new file mode 100644 index 000000000..70ea914aa Binary files /dev/null and b/sw/qa/extras/layout/data/tdf125334.odt differ diff --git a/sw/qa/extras/layout/data/tdf125335.odt b/sw/qa/extras/layout/data/tdf125335.odt new file mode 100644 index 000000000..992d93471 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf125335.odt differ diff --git a/sw/qa/extras/layout/data/tdf125893.docx b/sw/qa/extras/layout/data/tdf125893.docx new file mode 100644 index 000000000..f46f9af05 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf125893.docx differ diff --git a/sw/qa/extras/layout/data/tdf126244.docx b/sw/qa/extras/layout/data/tdf126244.docx new file mode 100644 index 000000000..cf3b0d14a Binary files /dev/null and b/sw/qa/extras/layout/data/tdf126244.docx differ diff --git a/sw/qa/extras/layout/data/tdf127118.docx b/sw/qa/extras/layout/data/tdf127118.docx new file mode 100644 index 000000000..d26495944 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf127118.docx differ diff --git a/sw/qa/extras/layout/data/tdf127235.odt b/sw/qa/extras/layout/data/tdf127235.odt new file mode 100644 index 000000000..5b27c921c Binary files /dev/null and b/sw/qa/extras/layout/data/tdf127235.odt differ diff --git a/sw/qa/extras/layout/data/tdf127304.odt b/sw/qa/extras/layout/data/tdf127304.odt new file mode 100644 index 000000000..e8a4d6e03 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf127304.odt differ diff --git a/sw/qa/extras/layout/data/tdf128198-1.docx b/sw/qa/extras/layout/data/tdf128198-1.docx new file mode 100644 index 000000000..7c9974d56 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf128198-1.docx differ diff --git a/sw/qa/extras/layout/data/tdf128399.docx b/sw/qa/extras/layout/data/tdf128399.docx new file mode 100644 index 000000000..04e1424ed Binary files /dev/null and b/sw/qa/extras/layout/data/tdf128399.docx differ diff --git a/sw/qa/extras/layout/data/tdf128611.fodt b/sw/qa/extras/layout/data/tdf128611.fodt new file mode 100644 index 000000000..e4606575c --- /dev/null +++ b/sw/qa/extras/layout/data/tdf128611.fodt @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Abcd efghijkl + + + B1 Line1Line2Line3Line4Line5Line6Line7Line8 + + + + + + + diff --git a/sw/qa/extras/layout/data/tdf128959.docx b/sw/qa/extras/layout/data/tdf128959.docx new file mode 100644 index 000000000..f22f66504 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf128959.docx differ diff --git a/sw/qa/extras/layout/data/tdf128996.docx b/sw/qa/extras/layout/data/tdf128996.docx new file mode 100644 index 000000000..8b6e77214 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf128996.docx differ diff --git a/sw/qa/extras/layout/data/tdf129054.docx b/sw/qa/extras/layout/data/tdf129054.docx new file mode 100644 index 000000000..5d02d7e87 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf129054.docx differ diff --git a/sw/qa/extras/layout/data/tdf129095.docx b/sw/qa/extras/layout/data/tdf129095.docx new file mode 100644 index 000000000..3647028fc Binary files /dev/null and b/sw/qa/extras/layout/data/tdf129095.docx differ diff --git a/sw/qa/extras/layout/data/tdf130031.docx b/sw/qa/extras/layout/data/tdf130031.docx new file mode 100644 index 000000000..4ac420a83 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf130031.docx differ diff --git a/sw/qa/extras/layout/data/tdf130218.fodt b/sw/qa/extras/layout/data/tdf130218.fodt new file mode 100644 index 000000000..d9031871b --- /dev/null +++ b/sw/qa/extras/layout/data/tdf130218.fodt @@ -0,0 +1,86 @@ + + + + 2018-08-13T16:49:19.8844595662018-08-13T16:56:24.066877759PT7M6S2LibreOfficeDev/6.4.0.0.alpha0$Linux_X86_64 LibreOffice_project/628fbb66869ea82a1f38132ff2ba39e9666083eb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Text + + + First column should have visible content + + + + + Text + + + With hanging indent, too. + + + + + + + diff --git a/sw/qa/extras/layout/data/tdf130242.odt b/sw/qa/extras/layout/data/tdf130242.odt new file mode 100644 index 000000000..3e97bd3e5 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf130242.odt differ diff --git a/sw/qa/extras/layout/data/tdf130380.docx b/sw/qa/extras/layout/data/tdf130380.docx new file mode 100644 index 000000000..b76c5efd1 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf130380.docx differ diff --git a/sw/qa/extras/layout/data/tdf130969.docx b/sw/qa/extras/layout/data/tdf130969.docx new file mode 100644 index 000000000..446dc16e7 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf130969.docx differ diff --git a/sw/qa/extras/layout/data/tdf131707_flyWrap.doc b/sw/qa/extras/layout/data/tdf131707_flyWrap.doc new file mode 100644 index 000000000..c32e5dafd Binary files /dev/null and b/sw/qa/extras/layout/data/tdf131707_flyWrap.doc differ diff --git a/sw/qa/extras/layout/data/tdf132956.docx b/sw/qa/extras/layout/data/tdf132956.docx new file mode 100644 index 000000000..6e3852b38 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf132956.docx differ diff --git a/sw/qa/extras/layout/data/tdf133005.odt b/sw/qa/extras/layout/data/tdf133005.odt new file mode 100644 index 000000000..660112d66 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf133005.odt differ diff --git a/sw/qa/extras/layout/data/tdf134146.docx b/sw/qa/extras/layout/data/tdf134146.docx new file mode 100644 index 000000000..9fe1bc061 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134146.docx differ diff --git a/sw/qa/extras/layout/data/tdf134235.docx b/sw/qa/extras/layout/data/tdf134235.docx new file mode 100644 index 000000000..af0cb0d3d Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134235.docx differ diff --git a/sw/qa/extras/layout/data/tdf134277.docx b/sw/qa/extras/layout/data/tdf134277.docx new file mode 100644 index 000000000..cf4ecfbb1 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134277.docx differ diff --git a/sw/qa/extras/layout/data/tdf134298.ott b/sw/qa/extras/layout/data/tdf134298.ott new file mode 100644 index 000000000..effb595eb Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134298.ott differ diff --git a/sw/qa/extras/layout/data/tdf134463.docx b/sw/qa/extras/layout/data/tdf134463.docx new file mode 100644 index 000000000..9de51cc97 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134463.docx differ diff --git a/sw/qa/extras/layout/data/tdf134472.odt b/sw/qa/extras/layout/data/tdf134472.odt new file mode 100644 index 000000000..a50c99c87 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134472.odt differ diff --git a/sw/qa/extras/layout/data/tdf134548.odt b/sw/qa/extras/layout/data/tdf134548.odt new file mode 100644 index 000000000..bc714b0d5 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134548.odt differ diff --git a/sw/qa/extras/layout/data/tdf134659.docx b/sw/qa/extras/layout/data/tdf134659.docx new file mode 100644 index 000000000..7fb0bed23 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134659.docx differ diff --git a/sw/qa/extras/layout/data/tdf134676.docx b/sw/qa/extras/layout/data/tdf134676.docx new file mode 100644 index 000000000..2a7651dee Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134676.docx differ diff --git a/sw/qa/extras/layout/data/tdf134685.docx b/sw/qa/extras/layout/data/tdf134685.docx new file mode 100644 index 000000000..86b59fa98 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134685.docx differ diff --git a/sw/qa/extras/layout/data/tdf134866.docx b/sw/qa/extras/layout/data/tdf134866.docx new file mode 100644 index 000000000..3358b5271 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf134866.docx differ diff --git a/sw/qa/extras/layout/data/tdf135035.docx b/sw/qa/extras/layout/data/tdf135035.docx new file mode 100644 index 000000000..acd7b1493 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf135035.docx differ diff --git a/sw/qa/extras/layout/data/tdf135035.odt b/sw/qa/extras/layout/data/tdf135035.odt new file mode 100644 index 000000000..bf84ec445 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf135035.odt differ diff --git a/sw/qa/extras/layout/data/tdf135991.odt b/sw/qa/extras/layout/data/tdf135991.odt new file mode 100644 index 000000000..f490ee9fb Binary files /dev/null and b/sw/qa/extras/layout/data/tdf135991.odt differ diff --git a/sw/qa/extras/layout/data/tdf136061.docx b/sw/qa/extras/layout/data/tdf136061.docx new file mode 100644 index 000000000..c91e3438f Binary files /dev/null and b/sw/qa/extras/layout/data/tdf136061.docx differ diff --git a/sw/qa/extras/layout/data/tdf136588.docx b/sw/qa/extras/layout/data/tdf136588.docx new file mode 100644 index 000000000..606931286 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf136588.docx differ diff --git a/sw/qa/extras/layout/data/tdf136613.docx b/sw/qa/extras/layout/data/tdf136613.docx new file mode 100644 index 000000000..a67e2f6c3 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf136613.docx differ diff --git a/sw/qa/extras/layout/data/tdf136816.odt b/sw/qa/extras/layout/data/tdf136816.odt new file mode 100644 index 000000000..0b6599bea Binary files /dev/null and b/sw/qa/extras/layout/data/tdf136816.odt differ diff --git a/sw/qa/extras/layout/data/tdf137025.docx b/sw/qa/extras/layout/data/tdf137025.docx new file mode 100644 index 000000000..89f33a911 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf137025.docx differ diff --git a/sw/qa/extras/layout/data/tdf137116.docx b/sw/qa/extras/layout/data/tdf137116.docx new file mode 100644 index 000000000..8edff3b78 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf137116.docx differ diff --git a/sw/qa/extras/layout/data/tdf137154.docx b/sw/qa/extras/layout/data/tdf137154.docx new file mode 100644 index 000000000..0dc8d3220 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf137154.docx differ diff --git a/sw/qa/extras/layout/data/tdf137185.odt b/sw/qa/extras/layout/data/tdf137185.odt new file mode 100644 index 000000000..65d1f5de6 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf137185.odt differ diff --git a/sw/qa/extras/layout/data/tdf137819.fodt b/sw/qa/extras/layout/data/tdf137819.fodt new file mode 100644 index 000000000..cf6630e33 --- /dev/null +++ b/sw/qa/extras/layout/data/tdf137819.fodt @@ -0,0 +1,284 @@ + + + + 2020-12-15T15:05:53.7370000002020-12-15T15:10:45.235000000PT1M9S2LibreOffice/7.0.1.2$Windows_X86_64 LibreOffice_project/7cbcfc562f6eb6708b5ff7d7397325de9e764452 + + + 0 + 0 + 27651 + 17046 + true + false + + + view2 + 13647 + 7736 + 0 + 0 + 27649 + 17044 + 0 + 1 + false + 120 + false + false + + + + + false + + + + 1 + true + false + false + true + false + false + true + true + + + true + false + false + 0 + true + false + true + false + false + 0 + false + true + false + false + false + false + high-resolution + false + false + true + false + false + false + false + false + true + false + true + false + + false + false + false + true + false + 1901935 + false + false + false + false + false + 1991809 + false + true + false + true + true + false + false + false + true + true + true + true + false + false + false + false + true + false + false + false + false + false + false + 0 + true + false + true + true + true + false + true + false + false + true + false + false + true + + false + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XXXXX + + + + + + + + + + \ No newline at end of file diff --git a/sw/qa/extras/layout/data/tdf138018.docx b/sw/qa/extras/layout/data/tdf138018.docx new file mode 100644 index 000000000..96183f949 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf138018.docx differ diff --git a/sw/qa/extras/layout/data/tdf138039.odt b/sw/qa/extras/layout/data/tdf138039.odt new file mode 100644 index 000000000..f355fd134 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf138039.odt differ diff --git a/sw/qa/extras/layout/data/tdf138465min.docx b/sw/qa/extras/layout/data/tdf138465min.docx new file mode 100644 index 000000000..7cc0e2fb5 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf138465min.docx differ diff --git a/sw/qa/extras/layout/data/tdf138592-a-acute.fodt b/sw/qa/extras/layout/data/tdf138592-a-acute.fodt new file mode 100644 index 000000000..07bcabef1 --- /dev/null +++ b/sw/qa/extras/layout/data/tdf138592-a-acute.fodt @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + á + + + \ No newline at end of file diff --git a/sw/qa/extras/layout/data/tdf138773.docx b/sw/qa/extras/layout/data/tdf138773.docx new file mode 100644 index 000000000..656c596bc Binary files /dev/null and b/sw/qa/extras/layout/data/tdf138773.docx differ diff --git a/sw/qa/extras/layout/data/tdf138782.docx b/sw/qa/extras/layout/data/tdf138782.docx new file mode 100644 index 000000000..8bad2ae1b Binary files /dev/null and b/sw/qa/extras/layout/data/tdf138782.docx differ diff --git a/sw/qa/extras/layout/data/tdf138951.odt b/sw/qa/extras/layout/data/tdf138951.odt new file mode 100644 index 000000000..5cb4940bd Binary files /dev/null and b/sw/qa/extras/layout/data/tdf138951.odt differ diff --git a/sw/qa/extras/layout/data/tdf139336_ColumnsWithFootnoteDoNotOccupyEntirePage.docx b/sw/qa/extras/layout/data/tdf139336_ColumnsWithFootnoteDoNotOccupyEntirePage.docx new file mode 100644 index 000000000..a44ff4047 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf139336_ColumnsWithFootnoteDoNotOccupyEntirePage.docx differ diff --git a/sw/qa/extras/layout/data/tdf141079.odt b/sw/qa/extras/layout/data/tdf141079.odt new file mode 100644 index 000000000..65dfcb4a2 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf141079.odt differ diff --git a/sw/qa/extras/layout/data/tdf141220.docx b/sw/qa/extras/layout/data/tdf141220.docx new file mode 100644 index 000000000..a65bdd4b8 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf141220.docx differ diff --git a/sw/qa/extras/layout/data/tdf143239-1-min.odt b/sw/qa/extras/layout/data/tdf143239-1-min.odt new file mode 100644 index 000000000..4271bfba7 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf143239-1-min.odt differ diff --git a/sw/qa/extras/layout/data/tdf144057.fodt b/sw/qa/extras/layout/data/tdf144057.fodt new file mode 100644 index 000000000..66deaa9c2 --- /dev/null +++ b/sw/qa/extras/layout/data/tdf144057.fodt @@ -0,0 +1,387 @@ + + + + 2021-09-13T16:07:05.2216994282021-09-13T16:10:52.148997944PT3M46S3LibreOfficeDev/7.3.0.0.alpha0$Linux_X86_64 LibreOffice_project/ba346227f1c4f896b717676a7eae22fea222f3e4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:20 + + + + + + + xxx2 + 2021-09-13T16:10:26 + + + + + + + xxx2 + 2021-09-13T16:10:30 + + + + + + + xxx2 + 2021-09-13T16:10:30 + + + + + + + xxx2 + 2021-09-13T16:10:38 + + + + + + + xxx2 + 2021-09-13T16:10:38 + + + + + + + xxx2 + 2021-09-13T16:10:38 + + + + + + + xxx2 + 2021-09-13T16:10:38 + + + + + + + + + A1 + + + + + A2 + + + + + A3 + + + + + A4 + + + + + A5 + + + + + A6 + + + + + + A7 + + + + + A8 + + + + + A9 + + + + + A10 + + + + + A11 + + + + + A12 + + + + + + + + + + B1 + + + + + B2 + + + + + B3 + + + + + B4 + + + + + B5 + + + + + B6 + + + + + + B7 + + + + + B8 + + + + + B9 + + + + + B10 + + + + + B11 + + + + + B12 + + + + + + + diff --git a/sw/qa/extras/layout/data/tdf145719.odt b/sw/qa/extras/layout/data/tdf145719.odt new file mode 100644 index 000000000..5f2c6f665 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf145719.odt differ diff --git a/sw/qa/extras/layout/data/tdf145826.odt b/sw/qa/extras/layout/data/tdf145826.odt new file mode 100644 index 000000000..b6f84db56 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf145826.odt differ diff --git a/sw/qa/extras/layout/data/tdf146272.odt b/sw/qa/extras/layout/data/tdf146272.odt new file mode 100644 index 000000000..3652cf06f Binary files /dev/null and b/sw/qa/extras/layout/data/tdf146272.odt differ diff --git a/sw/qa/extras/layout/data/tdf146704_EndnoteInSection.odt b/sw/qa/extras/layout/data/tdf146704_EndnoteInSection.odt new file mode 100644 index 000000000..660dcb70d Binary files /dev/null and b/sw/qa/extras/layout/data/tdf146704_EndnoteInSection.odt differ diff --git a/sw/qa/extras/layout/data/tdf147485-forcepoint.doc b/sw/qa/extras/layout/data/tdf147485-forcepoint.doc new file mode 100644 index 000000000..cb630efb8 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf147485-forcepoint.doc differ diff --git a/sw/qa/extras/layout/data/tdf149248.odt b/sw/qa/extras/layout/data/tdf149248.odt new file mode 100644 index 000000000..18685bd0a Binary files /dev/null and b/sw/qa/extras/layout/data/tdf149248.odt differ diff --git a/sw/qa/extras/layout/data/tdf149324.odt b/sw/qa/extras/layout/data/tdf149324.odt new file mode 100644 index 000000000..da4b87d89 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf149324.odt differ diff --git a/sw/qa/extras/layout/data/tdf149420.odt b/sw/qa/extras/layout/data/tdf149420.odt new file mode 100644 index 000000000..249d7267e Binary files /dev/null and b/sw/qa/extras/layout/data/tdf149420.odt differ diff --git a/sw/qa/extras/layout/data/tdf149709.fodt b/sw/qa/extras/layout/data/tdf149709.fodt new file mode 100644 index 000000000..0a33515d1 --- /dev/null +++ b/sw/qa/extras/layout/data/tdf149709.fodt @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Item + + + Item + + + Item + + + + + Item + + + + + diff --git a/sw/qa/extras/layout/data/tdf149710.fodt b/sw/qa/extras/layout/data/tdf149710.fodt new file mode 100644 index 000000000..c936b9f9b --- /dev/null +++ b/sw/qa/extras/layout/data/tdf149710.fodt @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + Item + + + Item + + + Item + + + + + diff --git a/sw/qa/extras/layout/data/tdf149711.docx b/sw/qa/extras/layout/data/tdf149711.docx new file mode 100644 index 000000000..d90efa7c1 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf149711.docx differ diff --git a/sw/qa/extras/layout/data/tdf150642.odt b/sw/qa/extras/layout/data/tdf150642.odt new file mode 100644 index 000000000..5e316424a Binary files /dev/null and b/sw/qa/extras/layout/data/tdf150642.odt differ diff --git a/sw/qa/extras/layout/data/tdf151954.docx b/sw/qa/extras/layout/data/tdf151954.docx new file mode 100644 index 000000000..64e4782f7 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf151954.docx differ diff --git a/sw/qa/extras/layout/data/tdf152031-stair.odt b/sw/qa/extras/layout/data/tdf152031-stair.odt new file mode 100644 index 000000000..5171920e3 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf152031-stair.odt differ diff --git a/sw/qa/extras/layout/data/tdf152085-section-tblr.odt b/sw/qa/extras/layout/data/tdf152085-section-tblr.odt new file mode 100644 index 000000000..3b454edc9 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf152085-section-tblr.odt differ diff --git a/sw/qa/extras/layout/data/tdf152106.odt b/sw/qa/extras/layout/data/tdf152106.odt new file mode 100644 index 000000000..49ef5e50b Binary files /dev/null and b/sw/qa/extras/layout/data/tdf152106.odt differ diff --git a/sw/qa/extras/layout/data/tdf40260.odt b/sw/qa/extras/layout/data/tdf40260.odt new file mode 100644 index 000000000..3a9c23f54 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf40260.odt differ diff --git a/sw/qa/extras/layout/data/tdf42748.fodt b/sw/qa/extras/layout/data/tdf42748.fodt new file mode 100644 index 000000000..e8bcb257d --- /dev/null +++ b/sw/qa/extras/layout/data/tdf42748.fodt @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + Unknown Author + 2019-10-22T08:48:10 + + + + + + + Unknown Author 2 + 2019-10-22T08:48:12 + + + + + + + + + + + + + + It + + + em + + + Item + + + + + diff --git a/sw/qa/extras/layout/data/tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_New.odt b/sw/qa/extras/layout/data/tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_New.odt new file mode 100644 index 000000000..28a192630 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_New.odt differ diff --git a/sw/qa/extras/layout/data/tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_Old.odt b/sw/qa/extras/layout/data/tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_Old.odt new file mode 100644 index 000000000..426e68493 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_Old.odt differ diff --git a/sw/qa/extras/layout/data/tdf54819.fodt b/sw/qa/extras/layout/data/tdf54819.fodt new file mode 100644 index 000000000..f9a8e9d0b --- /dev/null +++ b/sw/qa/extras/layout/data/tdf54819.fodt @@ -0,0 +1,9 @@ + + + + + Lorem ipsum + dolor sit amet. + + + diff --git a/sw/qa/extras/layout/data/tdf64222.docx b/sw/qa/extras/layout/data/tdf64222.docx new file mode 100644 index 000000000..4a2de828a Binary files /dev/null and b/sw/qa/extras/layout/data/tdf64222.docx differ diff --git a/sw/qa/extras/layout/data/tdf69647_images.odt b/sw/qa/extras/layout/data/tdf69647_images.odt new file mode 100644 index 000000000..e4f7fbe80 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf69647_images.odt differ diff --git a/sw/qa/extras/layout/data/tdf69647_text.docx b/sw/qa/extras/layout/data/tdf69647_text.docx new file mode 100644 index 000000000..587089ff2 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf69647_text.docx differ diff --git a/sw/qa/extras/layout/data/tdf69648.docx b/sw/qa/extras/layout/data/tdf69648.docx new file mode 100644 index 000000000..5bf8fcc70 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf69648.docx differ diff --git a/sw/qa/extras/layout/data/tdf72727.odt b/sw/qa/extras/layout/data/tdf72727.odt new file mode 100644 index 000000000..606ad6907 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf72727.odt differ diff --git a/sw/qa/extras/layout/data/tdf75659.docx b/sw/qa/extras/layout/data/tdf75659.docx new file mode 100644 index 000000000..a3cde330f Binary files /dev/null and b/sw/qa/extras/layout/data/tdf75659.docx differ diff --git a/sw/qa/extras/layout/data/tdf85610.fodt b/sw/qa/extras/layout/data/tdf85610.fodt new file mode 100644 index 000000000..17c51096d --- /dev/null +++ b/sw/qa/extras/layout/data/tdf85610.fodt @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + C + 2022-04-27T11:06:53 + + + + + + + C + 2022-04-27T11:07:06 + + + + + + + C + 2022-04-27T11:06:51 + + + + + + + + + + + Lorem.1 + Ipsum. + Dolor sit.2 + Amet. + + + diff --git a/sw/qa/extras/layout/data/tdf88496.docx b/sw/qa/extras/layout/data/tdf88496.docx new file mode 100644 index 000000000..b34f30389 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf88496.docx differ diff --git a/sw/qa/extras/layout/data/testAreaChartNumberFormat.docx b/sw/qa/extras/layout/data/testAreaChartNumberFormat.docx new file mode 100644 index 000000000..33e1c5878 Binary files /dev/null and b/sw/qa/extras/layout/data/testAreaChartNumberFormat.docx differ diff --git a/sw/qa/extras/layout/data/testTruncatedAxisLabel.odt b/sw/qa/extras/layout/data/testTruncatedAxisLabel.odt new file mode 100644 index 000000000..f8eb74904 Binary files /dev/null and b/sw/qa/extras/layout/data/testTruncatedAxisLabel.odt differ diff --git a/sw/qa/extras/layout/data/user-field-type-language.fodt b/sw/qa/extras/layout/data/user-field-type-language.fodt new file mode 100644 index 000000000..f741add7d --- /dev/null +++ b/sw/qa/extras/layout/data/user-field-type-language.fodt @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + Before 1,234.56 after. + + + diff --git a/sw/qa/extras/layout/data/writer-image-no-capture.docx b/sw/qa/extras/layout/data/writer-image-no-capture.docx new file mode 100644 index 000000000..ebb1f669f Binary files /dev/null and b/sw/qa/extras/layout/data/writer-image-no-capture.docx differ diff --git a/sw/qa/extras/layout/data/xaxis-labelbreak.docx b/sw/qa/extras/layout/data/xaxis-labelbreak.docx new file mode 100644 index 000000000..6f34a8919 Binary files /dev/null and b/sw/qa/extras/layout/data/xaxis-labelbreak.docx differ diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx new file mode 100644 index 000000000..9747fd022 --- /dev/null +++ b/sw/qa/extras/layout/layout.cxx @@ -0,0 +1,4888 @@ +/* -*- 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/layout/data/"; + +/// Test to assert layout / rendering result of Writer. +class SwLayoutWriter : public SwModelTestBase +{ +protected: + void CheckRedlineFootnotesHidden(); + void CheckRedlineSectionsHidden(); +}; + +// this is a member because our test classes have protected members :( +void SwLayoutWriter::CheckRedlineFootnotesHidden() +{ + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "24"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "foaz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "expand", "2"); + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn[1]/txt[1]/merged", "paraPropsNodeIndex", "13"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "ac"); + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn[2]/txt[1]/merged", "paraPropsNodeIndex", "16"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "2"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "mo"); +} + +void SwLayoutWriter::CheckRedlineSectionsHidden() +{ + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "12"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "folah"); + assertXPath(pXmlDoc, "/root/page[1]/body/section[1]/txt[1]/merged", "paraPropsNodeIndex", "20"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[1]/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[1]/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "folah"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFootnotes) +{ + createSwDoc(DATA_DIRECTORY, "redline_footnotes.odt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwRootFrame* pLayout(pDoc->getIDocumentLayoutAccess().GetCurrentLayout()); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + + // verify after load + CheckRedlineFootnotesHidden(); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "expand", "2"); + + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[3]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[3]", + "portion", "c"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "2"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "3"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "ar"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[3]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[3]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "3"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[3]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[3]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "ghi"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "4"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "expand", "5"); + + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[4]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[4]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "4"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[4]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[4]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "jkl"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[5]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[5]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "5"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[5]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[5]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "m"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[5]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[5]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "n"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[5]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[3]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[5]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[3]", + "portion", "o"); + + // verify after hide + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + CheckRedlineFootnotesHidden(); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf136588) +{ + load(DATA_DIRECTORY, "tdf136588.docx"); + auto pXMLLayoutDump = parseLayoutDump(); + CPPUNIT_ASSERT(pXMLLayoutDump); + + //there was a bad line break before, the correct break layout is this: + assertXPath(pXMLLayoutDump, "/root/page/body/txt[2]/SwParaPortion/SwLineLayout[2]", "portion", + "effectively by modern-day small to "); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFlysInBody) +{ + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwRootFrame* pLayout(pWrtShell->GetLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + pWrtShell->Insert("foo"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("bar"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("baz"); + SfxItemSet flySet(pDoc->GetAttrPool(), + svl::Items); + SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR); + pWrtShell->StartOfSection(false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + flySet.Put(anchor); + SwFormatFrameSize size(SwFrameSize::Minimum, 1000, 1000); + flySet.Put(size); // set a size, else we get 1 char per line... + SwFrameFormat const* pFly = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true); + CPPUNIT_ASSERT(pFly != nullptr); + // move inside fly + pWrtShell->GotoFly(pFly->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Insert("abc"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("def"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("ghi"); + + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + // delete redline inside fly + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 8, /*bBasicCall=*/false); + pWrtShell->Delete(); + + pWrtShell->SttEndDoc(true); // note: SttDoc actually moves to start of fly? + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 7, /*bBasicCall=*/false); + pWrtShell->Delete(); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor.SetAnchor(&pos); + pDoc->SetAttr(anchor, *const_cast(pFly)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "14"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "foaz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "6"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "ahi"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "bc"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "hi"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } + + // anchor to 2nd (deleted) paragraph + pWrtShell->StartOfSection(); + pWrtShell->Down(false, 1); + anchor.SetType(RndStdIds::FLY_AT_CHAR); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor, *const_cast(pFly)); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor.SetAnchor(&pos); + pDoc->SetAttr(anchor, *const_cast(pFly)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "14"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "foaz"); + + { // hide: no anchored object shown + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//anchored"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "bc"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "hi"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } + + // anchor to 3rd paragraph + pWrtShell->EndOfSection(); + anchor.SetType(RndStdIds::FLY_AT_CHAR); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor, *const_cast(pFly)); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor.SetAnchor(&pos); + pDoc->SetAttr(anchor, *const_cast(pFly)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "14"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "foaz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "6"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "ahi"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "bc"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "hi"); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf134272) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf134472.odt"); + CPPUNIT_ASSERT(pDoc); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[2]/infos/bounds", "height", "843"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[2]/infos/bounds", "bottom", "2819"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestNestedTableMoveFwd) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tabellen_test_windows_1.odt"); + CPPUNIT_ASSERT(pDoc); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // the row with the nested table should not be split but be the first row on page 2 + assertXPath(pXmlDoc, "/root/page[1]/body/tab[1]/row[last()]/cell[1]/txt[1]/SwParaPortion", + "portion", "Tabelle 1"); + assertXPath(pXmlDoc, + "/root/page[2]/body/tab[1]/row[1]/cell[1]/tab[1]/row[1]/cell[1]/txt/SwParaPortion", + "portion", "Tabelle 2"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf136613) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf136613.docx"); + CPPUNIT_ASSERT(pDoc); + + //get the flys and the root frame + const auto vFlyFormats = pDoc->GetFlyFrameFormats(FLYCNTTYPE_ALL, true); + const auto vFrames = pDoc->GetAllLayouts(); + + CPPUNIT_ASSERT(!vFrames.empty()); + CPPUNIT_ASSERT(!vFlyFormats.empty()); + + //get the page frame from the root + SwFrame* pPageFrame = vFrames[0]->Lower(); + CPPUNIT_ASSERT(pPageFrame); + + //get the rectangle of the page + const SwRect& rPageRect = pPageFrame->getFrameArea(); + + //check the flys and... + for (auto pFlyFormat : vFlyFormats) + { + //...the rectangle of the fly location... + const SwRect& rRect = pFlyFormat->FindLayoutRect(); + CPPUNIT_ASSERT(!rRect.IsEmpty()); + + //...if it is on the page. This will fail if not. + CPPUNIT_ASSERT_MESSAGE("The pictures are outside the page!", rPageRect.Contains(rRect)); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf88496) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf88496.docx"); + CPPUNIT_ASSERT(pDoc); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was 4, table fallback "switch off repeating header" started on a new page + assertXPath(pXmlDoc, "/root/page", 3); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFlysInHeader) +{ + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwRootFrame* pLayout(pWrtShell->GetLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + pWrtShell->ChangeHeaderOrFooter(u"Default Page Style", /*bHeader*/ true, /*bOn*/ true, false); + CPPUNIT_ASSERT( + pWrtShell + ->IsInHeaderFooter()); // assume this is supposed to put cursor in the new header... + pWrtShell->Insert("foo"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("bar"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("baz"); + SfxItemSet flySet(pDoc->GetAttrPool(), + svl::Items); + SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR); + pWrtShell->StartOfSection(false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + flySet.Put(anchor); + SwFormatFrameSize size(SwFrameSize::Minimum, 1000, 1000); + flySet.Put(size); // set a size, else we get 1 char per line... + SwFrameFormat const* pFly = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true); + CPPUNIT_ASSERT(pFly != nullptr); + // move inside fly + pWrtShell->GotoFly(pFly->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Insert("abc"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("def"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("ghi"); + + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + // delete redline inside fly + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 8, /*bBasicCall=*/false); + pWrtShell->Delete(); + + pWrtShell->GotoHeaderText(); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 7, /*bBasicCall=*/false); + pWrtShell->Delete(); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor.SetAnchor(&pos); + pDoc->SetAttr(anchor, *const_cast(pFly)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion[1]", "length", "0"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[1]/merged", "paraPropsNodeIndex", "6"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[1]/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[1]/SwParaPortion[1]", "portion", "foaz"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "11"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion[1]", + "portion", "ahi"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion[1]", "length", "0"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "bc"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "hi"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } + + // anchor to 2nd (deleted) paragraph + pWrtShell->StartOfSection(); + pWrtShell->Down(false, 1); + anchor.SetType(RndStdIds::FLY_AT_CHAR); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor, *const_cast(pFly)); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor.SetAnchor(&pos); + pDoc->SetAttr(anchor, *const_cast(pFly)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // now the frame has no Text portion? not sure why it's a 0-length one first and now none? + // assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", "PortionType::Para"); + // assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "length", "0"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[1]/merged", "paraPropsNodeIndex", "6"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "foaz"); + + { // hide: no anchored object shown + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//anchored"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "length", "0"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "bc"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "hi"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } + + // anchor to 3rd paragraph + pWrtShell->EndOfSection(); + anchor.SetType(RndStdIds::FLY_AT_CHAR); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor, *const_cast(pFly)); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor.SetAnchor(&pos); + pDoc->SetAttr(anchor, *const_cast(pFly)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "length", "0"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[1]/merged", "paraPropsNodeIndex", "6"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "foaz"); + assertXPath(pXmlDoc, "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "11"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "ahi"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "length", "0"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "bc"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/header/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "hi"); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf137025) +{ + // Check the padding of the textbox + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf137025.docx"); + CPPUNIT_ASSERT(pDoc); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + + // Check the layout xml + // SDRATTR_TEXT_LEFTDIST + assertXPath(pXmlDoc, + "/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObject" + "/DefaultProperties/SfxItemSet/SdrMetricItem/SfxInt32Item[@whichId='1072']", + "value", "567"); + // SDRATTR_TEXT_RIGHTDIST + assertXPath(pXmlDoc, + "/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObject" + "/DefaultProperties/SfxItemSet/SdrMetricItem/SfxInt32Item[@whichId='1073']", + "value", "1134"); + // SDRATTR_TEXT_UPPERDIST + assertXPath(pXmlDoc, + "/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObject" + "/DefaultProperties/SfxItemSet/SdrMetricItem/SfxInt32Item[@whichId='1074']", + "value", "1701"); + // SDRATTR_TEXT_LOWERDIST + assertXPath(pXmlDoc, + "/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObject" + "/DefaultProperties/SfxItemSet/SdrMetricItem/SfxInt32Item[@whichId='1075']", + "value", "2268"); + + // Check the textbox-shape import too + auto xShp = getShape(1); + CPPUNIT_ASSERT(xShp); + + uno::Reference xShapeProps(xShp, uno::UNO_QUERY); + + SwFrameFormat* pFrameFormat = SwTextBoxHelper::getOtherTextBoxFormat(xShp); + CPPUNIT_ASSERT(pFrameFormat); + + // The shape has these values to copy to the associated text frame after modification:: + const tools::Long nLPaddng + = xShapeProps->getPropertyValue("TextLeftDistance").get(); + const tools::Long nRPaddng + = xShapeProps->getPropertyValue("TextRightDistance").get(); + const tools::Long nTPaddng + = xShapeProps->getPropertyValue("TextUpperDistance").get(); + const tools::Long nBPaddng + = xShapeProps->getPropertyValue("TextLowerDistance").get(); + + CPPUNIT_ASSERT_EQUAL(tools::Long(1000), nLPaddng); + CPPUNIT_ASSERT_EQUAL(tools::Long(2000), nRPaddng); + CPPUNIT_ASSERT_EQUAL(tools::Long(3000), nTPaddng); + CPPUNIT_ASSERT_EQUAL(tools::Long(4001), nBPaddng); + + // TODO: modify shape distance via UNO with text frame synchronization + // Check the textbox as well: + auto xTxFrm = SwXTextFrame::CreateXTextFrame(*pFrameFormat->GetDoc(), pFrameFormat); + CPPUNIT_ASSERT(xTxFrm); + uno::Reference xFrameProps(xTxFrm, uno::UNO_QUERY); + + const tools::Long nFrameLeftPaddng + = xFrameProps->getPropertyValue("LeftBorderDistance").get(); + const tools::Long nFrameRightPaddng + = xFrameProps->getPropertyValue("RightBorderDistance").get(); + const tools::Long nFrameTopPaddng + = xFrameProps->getPropertyValue("TopBorderDistance").get(); + const tools::Long nFrameBottomPaddng + = xFrameProps->getPropertyValue("BottomBorderDistance").get(); + + // Check if the shape and frame have different setting + CPPUNIT_ASSERT_EQUAL(nLPaddng, nFrameLeftPaddng); + CPPUNIT_ASSERT_EQUAL(nRPaddng, nFrameRightPaddng); + CPPUNIT_ASSERT_EQUAL(nTPaddng, nFrameTopPaddng); + CPPUNIT_ASSERT_EQUAL(nBPaddng, nFrameBottomPaddng); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFlysInFootnote) +{ + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwRootFrame* pLayout(pWrtShell->GetLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + pWrtShell->InsertFootnote(""); + CPPUNIT_ASSERT(pWrtShell->IsCursorInFootnote()); + + SfxItemSet flySet(pDoc->GetAttrPool(), + svl::Items); + SwFormatFrameSize size(SwFrameSize::Minimum, 1000, 1000); + flySet.Put(size); // set a size, else we get 1 char per line... + SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + flySet.Put(anchor); + // first fly is in first footnote that will be deleted + /* SwFrameFormat const* pFly1 =*/pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true); + pWrtShell->Insert("quux"); + + pWrtShell->SttEndDoc(false); + + pWrtShell->InsertFootnote(""); + CPPUNIT_ASSERT(pWrtShell->IsCursorInFootnote()); + pWrtShell->Insert("foo"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("bar"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("baz"); + + pWrtShell->StartOfSection(false); + CPPUNIT_ASSERT(pWrtShell->IsCursorInFootnote()); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + flySet.Put(anchor); + // second fly is in second footnote that is not deleted + SwFrameFormat const* pFly = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true); + CPPUNIT_ASSERT(pFly != nullptr); + // move inside fly + pWrtShell->GotoFly(pFly->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Insert("abc"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("def"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("ghi"); + + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + // delete redline inside fly + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 8, /*bBasicCall=*/false); + pWrtShell->Delete(); + + // pWrtShell->GotoFlyAnchor(); // sigh... why, now we're in the body... + pWrtShell->SttEndDoc(false); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + pWrtShell->GotoFootnoteText(); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 7, /*bBasicCall=*/false); + pWrtShell->Delete(); + pWrtShell->EndSelect(); // ? + // delete first footnote + pWrtShell->SttEndDoc(true); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false); + pWrtShell->Delete(); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor.SetAnchor(&pos); + pDoc->SetAttr(anchor, *const_cast(pFly)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "25"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Special[1]", "nType", + "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Special[1]", "rText", "1"); + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn[1]/txt[1]/merged", "paraPropsNodeIndex", + "7"); + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "17"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "portion", "ahi"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "expand", "2"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "portion", "quux"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "portion", "bc"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[2]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[2]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "portion", "hi"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "2"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } + + // anchor to 2nd (deleted) paragraph + pWrtShell->SttEndDoc(false); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + pWrtShell->GotoFootnoteText(); + pWrtShell->Down(false, 1); + anchor.SetType(RndStdIds::FLY_AT_CHAR); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor, *const_cast(pFly)); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor.SetAnchor(&pos); + pDoc->SetAttr(anchor, *const_cast(pFly)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "25"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn[1]/txt[1]/merged", "paraPropsNodeIndex", + "7"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + + { // hide: no anchored object shown + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//anchored"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[2]", + "expand", "2"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "portion", "quux"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "2"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "portion", "bc"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[2]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[2]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "portion", "hi"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } + + // anchor to 3rd paragraph + pWrtShell->EndOfSection(); + pWrtShell->SttEndDoc(false); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + pWrtShell->GotoFootnoteText(); + pWrtShell->EndOfSection(); + anchor.SetType(RndStdIds::FLY_AT_CHAR); + anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor, *const_cast(pFly)); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor.SetAnchor(&pos); + pDoc->SetAttr(anchor, *const_cast(pFly)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "25"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::Footnote"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn[1]/txt[1]/merged", "paraPropsNodeIndex", + "7"); + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "17"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "portion", "ahi"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Special[1]", "nType", + "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Special[1]", "rText", "1"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Special[2]", "nType", + "PortionType::Footnote"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Special[2]", "rText", "2"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "portion", "quux"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[1]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "1"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "type", "PortionType::FootnoteNum"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwFieldPortion[1]", + "expand", "2"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "portion", "a"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "portion", "bc"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[2]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[2]/SwParaPortion/" + "SwLineLayout/SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/" + "SwLineLayout/SwLinePortion[2]", + "portion", "hi"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath( + pXmlDoc, + "/root/page[1]/ftncont/ftn[2]/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf143239) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf143239-1-min.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + // These are unstable on macOS and Win64 builds, + // so only test that they restore original values for now + OUString p2txt1Left, p2txt2Left, p3txt1Left; + + { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly[1]/infos/bounds", "top", + "18540"); + p2txt1Left + = getXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly[1]/infos/bounds", "left"); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[2]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[2]/anchored/fly[1]/infos/bounds", "top", + "23894"); + p2txt2Left + = getXPath(pXmlDoc, "/root/page[2]/body/txt[2]/anchored/fly[1]/infos/bounds", "left"); + assertXPath(pXmlDoc, "/root/page[3]/body/txt[1]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[3]/body/txt[1]/anchored/fly[1]/infos/bounds", "top", + "35662"); + p3txt1Left + = getXPath(pXmlDoc, "/root/page[3]/body/txt[1]/anchored/fly[1]/infos/bounds", "left"); + assertXPath(pXmlDoc, "/root/page", 3); + discardDumpedLayout(); + } + + pWrtShell->SelAll(); + pWrtShell->Delete(); + pWrtShell->Undo(); + Scheduler::ProcessEventsToIdle(); + + { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // now the 1st fly was on page 1, and the fly on page 2 was the 2nd one + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly[1]/infos/bounds", "top", + "18540"); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly[1]/infos/bounds", "left", + p2txt1Left); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[2]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[2]/anchored/fly[1]/infos/bounds", "top", + "23894"); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[2]/anchored/fly[1]/infos/bounds", "left", + p2txt2Left); + assertXPath(pXmlDoc, "/root/page[3]/body/txt[1]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[3]/body/txt[1]/anchored/fly[1]/infos/bounds", "top", + "35662"); + assertXPath(pXmlDoc, "/root/page[3]/body/txt[1]/anchored/fly[1]/infos/bounds", "left", + p3txt1Left); + assertXPath(pXmlDoc, "/root/page", 3); + discardDumpedLayout(); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTableOverlapFooterFly) +{ + // Load a document that has a fly anchored in the footer. + // It also has a table which initially overlaps with the fly, but then moves to the next page. + load(DATA_DIRECTORY, "footer-fly-table.fodt"); + xmlDocUniquePtr pLayout = parseLayoutDump(); + // no fly portions, was: 8 + assertXPath(pLayout, + "/root/page[2]/body/tab[1]/row[5]/cell[5]/txt[1]/SwParaPortion/SwLineLayout/" + "SwFixPortion[@type='PortionType::Fly'][@type='PortionType::Fly']", + 0); + // one line break, was: 5 + assertXPath(pLayout, + "/root/page[2]/body/tab[1]/row[5]/cell[5]/txt[1]/SwParaPortion/SwLineLayout", 1); + // one text portion, was: 1 + assertXPath( + pLayout, + "/root/page[2]/body/tab[1]/row[5]/cell[5]/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion", + 1); + assertXPath( + pLayout, + "/root/page[2]/body/tab[1]/row[5]/cell[5]/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion", + "portion", "Abc def ghi jkl mno pqr stu vwx yz."); + // height was: 1517 + // tdf#134782 height was: 379 + assertXPath(pLayout, "/root/page[2]/body/tab[1]/row[5]/cell[5]/txt[1]/infos/bounds", "height", + "253"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf134277) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf134277.docx"); + CPPUNIT_ASSERT(pDoc); + SwDocShell* pShell = pDoc->GetDocShell(); + + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "/metafile/push/push/push/layoutmode[2]"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Bad position of shape in page break!", 0, + xmlXPathNodeSetGetLength(pXmlNodes)); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf116486) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf116486.docx"); + CPPUNIT_ASSERT(pDoc); + OUString aTop = parseDump("/root/page/body/txt/Special[1]", "nHeight"); + CPPUNIT_ASSERT_EQUAL(OUString("4006"), aTop); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf142080) +{ + // this caused an infinite loop + load(DATA_DIRECTORY, "fdo43573-2-min.docx"); + + xmlDocUniquePtr pLayout = parseLayoutDump(); + // check the first paragraph on page 9 with its fly; the column was empty too + assertXPath(pLayout, + "/root/page[9]/body/section[1]/column[1]/body/txt[1]/SwParaPortion/SwLineLayout[2]/" + "SwLinePortion", + "portion", + "De kleur u (rood) in het rechtervlak (R), de kleur r (wit) beneden (D),"); + SwTwips nPage9Top = getXPath(pLayout, "/root/page[9]/infos/bounds", "top").toInt32(); + assertXPath( + pLayout, + "/root/page[9]/body/section[1]/column[1]/body/txt[1]/anchored/fly[1]/notxt/infos/bounds", + "top", OUString::number(nPage9Top + 1460)); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf152106) +{ + // this caused an infinite loop + load(DATA_DIRECTORY, "tdf152106.odt"); + + xmlDocUniquePtr pLayout = parseLayoutDump(); + + // frame on page 3 + assertXPath(pLayout, "/root/page[3]/sorted_objs/fly", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf128198) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf128198-1.docx"); + CPPUNIT_ASSERT(pDoc); + xmlDocUniquePtr pLayout = parseLayoutDump(); + // the problem was that line 5 was truncated at "this " + // due to the fly anchored in previous paragraph + assertXPath(pLayout, "/root/page/body/txt[2]/LineBreak[5]", "Line", + "to access any service, any time, anywhere. From this perspective, satellite " + "boasts some "); + assertXPath(pLayout, "/root/page/body/txt[2]/LineBreak[6]", "Line", "significant advantages. "); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testNoLineBreakAtSlash) +{ + load(DATA_DIRECTORY, "no-line-break-at-slash.fodt"); + xmlDocUniquePtr pLayout = parseLayoutDump(); + + // the line break was between "Foostrasse 13/c/" and "2" + xmlXPathObjectPtr pXmlObj = getXPathNode(pLayout, "/root/page[1]/body/txt[1]/child::*[2]"); + CPPUNIT_ASSERT_EQUAL(std::string("Text"), std::string(reinterpret_cast( + pXmlObj->nodesetval->nodeTab[0]->name))); + xmlXPathFreeObject(pXmlObj); + pXmlObj = getXPathNode(pLayout, "/root/page[1]/body/txt[1]/child::*[3]"); + CPPUNIT_ASSERT_EQUAL(std::string("LineBreak"), std::string(reinterpret_cast( + pXmlObj->nodesetval->nodeTab[0]->name))); + xmlXPathFreeObject(pXmlObj); + pXmlObj = getXPathNode(pLayout, "/root/page[1]/body/txt[1]/child::*[4]"); + CPPUNIT_ASSERT_EQUAL(std::string("Text"), std::string(reinterpret_cast( + pXmlObj->nodesetval->nodeTab[0]->name))); + xmlXPathFreeObject(pXmlObj); + pXmlObj = getXPathNode(pLayout, "/root/page[1]/body/txt[1]/child::*[5]"); + CPPUNIT_ASSERT_EQUAL(std::string("Special"), std::string(reinterpret_cast( + pXmlObj->nodesetval->nodeTab[0]->name))); + xmlXPathFreeObject(pXmlObj); + pXmlObj = getXPathNode(pLayout, "/root/page[1]/body/txt[1]/child::*[6]"); + CPPUNIT_ASSERT_EQUAL(std::string("Text"), std::string(reinterpret_cast( + pXmlObj->nodesetval->nodeTab[0]->name))); + xmlXPathFreeObject(pXmlObj); + pXmlObj = getXPathNode(pLayout, "/root/page[1]/body/txt[1]/child::*[7]"); + CPPUNIT_ASSERT_EQUAL(std::string("LineBreak"), std::string(reinterpret_cast( + pXmlObj->nodesetval->nodeTab[0]->name))); + xmlXPathFreeObject(pXmlObj); + pXmlObj = getXPathNode(pLayout, "/root/page[1]/body/txt[1]/child::*[8]"); + CPPUNIT_ASSERT_EQUAL(std::string("Finish"), std::string(reinterpret_cast( + pXmlObj->nodesetval->nodeTab[0]->name))); + xmlXPathFreeObject(pXmlObj); + + assertXPath(pLayout, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout[1]", "portion", + "Blah blah bla bla bla "); + assertXPath(pLayout, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout[2]/SwLinePortion[1]", + "portion", "Foostrasse"); + assertXPath(pLayout, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout[2]/SwLinePortion[2]", + "portion", "13/c/2, etc."); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf106153) +{ + load(DATA_DIRECTORY, "tdf106153.docx"); + xmlDocUniquePtr pDump = parseLayoutDump(); + + const sal_Int64 nPageValLeft = getXPath(pDump, "/root/page/infos/bounds", "left").toInt64(); + const sal_Int64 nPageValTop = getXPath(pDump, "/root/page/infos/bounds", "top").toInt64(); + const sal_Int64 nPageValRight = getXPath(pDump, "/root/page/infos/bounds", "right").toInt64(); + const sal_Int64 nPageValBottom = getXPath(pDump, "/root/page/infos/bounds", "bottom").toInt64(); + + const sal_Int64 nShape1ValTop + = getXPath(pDump, "/root/page/body/txt/anchored/fly[1]/infos/bounds", "top").toInt64(); + const sal_Int64 nShape2ValLeft + = getXPath(pDump, "/root/page/body/txt/anchored/fly[2]/infos/bounds", "left").toInt64(); + const sal_Int64 nShape3ValRight + = getXPath(pDump, "/root/page/body/txt/anchored/fly[3]/infos/bounds", "right").toInt64(); + const sal_Int64 nShape4ValBottom + = getXPath(pDump, "/root/page/body/txt/anchored/fly[4]/infos/bounds", "bottom").toInt64(); + + CPPUNIT_ASSERT_MESSAGE("The whole top textbox is inside the page!", + nPageValTop > nShape1ValTop); + CPPUNIT_ASSERT_MESSAGE("The whole left textbox is inside the page!", + nPageValLeft > nShape2ValLeft); + CPPUNIT_ASSERT_MESSAGE("The whole right textbox is inside the page!", + nPageValRight < nShape3ValRight); + CPPUNIT_ASSERT_MESSAGE("The whole bottom textbox is inside the page!", + nPageValBottom < nShape4ValBottom); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFlysInFlys) +{ + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwRootFrame* pLayout(pWrtShell->GetLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + pWrtShell->Insert("foo"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("bar"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("baz"); + SfxItemSet flySet(pDoc->GetAttrPool(), + svl::Items); + SwFormatFrameSize size(SwFrameSize::Minimum, 1000, 1000); + flySet.Put(size); // set a size, else we get 1 char per line... + pWrtShell->StartOfSection(false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + SwFormatAnchor anchor1(RndStdIds::FLY_AT_CHAR); + anchor1.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + flySet.Put(anchor1); + SwFrameFormat const* pFly1 = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true); + CPPUNIT_ASSERT(pFly1 != nullptr); + // move inside fly1 + pWrtShell->GotoFly(pFly1->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Insert("abc"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("def"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("ghi"); + + SwFormatAnchor anchor2(RndStdIds::FLY_AT_CHAR); + pWrtShell->StartOfSection(false); // start of fly... + anchor2.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + flySet.Put(anchor2); + SwFrameFormat const* pFly2 = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true); + CPPUNIT_ASSERT(pFly2 != nullptr); + // move inside fly2 + pWrtShell->GotoFly(pFly2->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Insert("jkl"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("mno"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("pqr"); + + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + // delete redline inside fly2 + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 8, /*bBasicCall=*/false); + pWrtShell->Delete(); + + // delete redline inside fly1 + pWrtShell->GotoFly(pFly1->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 7, /*bBasicCall=*/false); + pWrtShell->Delete(); + + pWrtShell->ClearMark(); // otherwise it refuses to leave the fly... + pWrtShell->SttEndDoc(true); // note: SttDoc actually moves to start of fly? + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 7, /*bBasicCall=*/false); + pWrtShell->Delete(); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor1.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor1.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor1.SetAnchor(&pos); + pDoc->SetAttr(anchor1, *const_cast(pFly1)); + anchor2.SetType(RndStdIds::FLY_AT_PARA); + pos.nNode = anchor2.GetContentAnchor()->nNode; + anchor2.SetAnchor(&pos); + pDoc->SetAttr(anchor2, *const_cast(pFly2)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "19"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "6"); + assertXPath( + pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "11"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "jqr"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwFixPortion[1]", + "type", + "PortionType::Fly"); // remove??? + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLineLayout[1]", + "type", "PortionType::Lay"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLineLayout[1]", + "portion", "abhi"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "foaz"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "j"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "kl"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[2]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[2]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "mno"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "p"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "qr"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwFixPortion[1]", + "type", + "PortionType::Fly"); // remove??? + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "ab"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "c"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "hi"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } + + // anchor to 2nd (deleted) paragraph + // also, switch the in-fly anchoring to the other fly, for additional fun! + pWrtShell->StartOfSection(); + pWrtShell->Down(false, 1); + anchor2.SetType(RndStdIds::FLY_AT_CHAR); + anchor2.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor2, *const_cast(pFly2)); + pWrtShell->GotoFly(pFly2->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Down(false, 1); + anchor1.SetType(RndStdIds::FLY_AT_CHAR); + anchor1.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor1, *const_cast(pFly1)); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor1.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor1.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor1.SetAnchor(&pos); + pDoc->SetAttr(anchor1, *const_cast(pFly1)); + anchor2.SetType(RndStdIds::FLY_AT_PARA); + pos.nNode = anchor2.GetContentAnchor()->nNode; + anchor2.SetAnchor(&pos); + pDoc->SetAttr(anchor2, *const_cast(pFly2)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "19"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "foaz"); + + { // hide: no anchored object shown + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//anchored"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "j"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "kl"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "ab"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "c"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[2]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[2]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "hi"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwFixPortion[1]", + "type", + "PortionType::Fly"); // remove??? + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwLineLayout[1]", + "type", "PortionType::Lay"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwLineLayout[1]", + "portion", "mno"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "p"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "qr"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } + + // anchor to 3rd paragraph + pWrtShell->SttEndDoc(false); + anchor1.SetType(RndStdIds::FLY_AT_CHAR); + anchor1.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor1, *const_cast(pFly1)); + pWrtShell->GotoFly(pFly1->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->EndOfSection(); + anchor2.SetType(RndStdIds::FLY_AT_CHAR); + anchor2.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor2, *const_cast(pFly2)); + + for (int i = 0; i < 2; ++i) + { + if (i == 1) // secondly, try with different anchor type + { + anchor1.SetType(RndStdIds::FLY_AT_PARA); + SwPosition pos(*anchor1.GetContentAnchor()); + pos.nContent.Assign(nullptr, 0); + anchor1.SetAnchor(&pos); + pDoc->SetAttr(anchor1, *const_cast(pFly1)); + anchor2.SetType(RndStdIds::FLY_AT_PARA); + pos.nNode = anchor2.GetContentAnchor()->nNode; + anchor2.SetAnchor(&pos); + pDoc->SetAttr(anchor2, *const_cast(pFly2)); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "19"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "6"); + assertXPath( + pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "11"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "jqr"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwFixPortion[1]", + "type", + "PortionType::Fly"); // remove??? + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLineLayout[1]", + "type", "PortionType::Lay"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLineLayout[1]", + "portion", "abhi"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "foaz"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", "type", + "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "ab"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[1]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "c"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[2]/SwParaPortion/SwLineLayout/" + "SwParaPortion[1]", + "portion", "def"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "j"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[1]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "kl"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[2]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[2]/" + "SwParaPortion/SwLineLayout/SwParaPortion[1]", + "portion", "mno"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "p"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/anchored[1]/fly[1]/txt[3]/" + "SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "qr"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwFixPortion[1]", + "type", + "PortionType::Fly"); // remove??? + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[1]", + "portion", "g"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/anchored/fly[1]/txt[3]/SwParaPortion/SwLineLayout/" + "SwLinePortion[2]", + "portion", "hi"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]", + "portion", "az"); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFlysAtFlys) +{ + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwRootFrame* pLayout(pWrtShell->GetLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + pWrtShell->Insert("foo"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("bar"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("baz"); + SfxItemSet flySet(pDoc->GetAttrPool(), + svl::Items); + SwFormatFrameSize size(SwFrameSize::Minimum, 1000, 1000); + flySet.Put(size); // set a size, else we get 1 char per line... + pWrtShell->StartOfSection(false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + SwFormatAnchor anchor1(RndStdIds::FLY_AT_CHAR); + anchor1.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + flySet.Put(anchor1); + SwFrameFormat const* pFly1 = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true); + CPPUNIT_ASSERT(pFly1 != nullptr); + // move inside fly1 + pWrtShell->GotoFly(pFly1->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Insert("abc"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("def"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("ghi"); + + SwFormatAnchor anchor2(RndStdIds::FLY_AT_FLY); + SwPosition pos(*pFly1->GetContent().GetContentIdx()); + anchor2.SetAnchor(&pos); + flySet.Put(anchor2); + SwFrameFormat const* pFly2 = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true); + CPPUNIT_ASSERT(pFly2 != nullptr); + // move inside fly2 + pWrtShell->GotoFly(pFly2->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Insert("jkl"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("mno"); + pWrtShell->SplitNode(false); + pWrtShell->Insert("pqr"); + + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + // delete redline inside fly2 + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 8, /*bBasicCall=*/false); + pWrtShell->Delete(); + + // delete redline inside fly1 + pWrtShell->GotoFly(pFly1->GetName(), FLYCNTTYPE_FRM, /*bSelFrame=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 7, /*bBasicCall=*/false); + pWrtShell->Delete(); + + pWrtShell->ClearMark(); // otherwise it refuses to leave the fly... + pWrtShell->SttEndDoc(true); // note: SttDoc actually moves to start of fly? + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 7, /*bBasicCall=*/false); + pWrtShell->Delete(); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "19"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "6"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/merged", + "paraPropsNodeIndex", "11"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[1]", + "nType", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[1]", + "Portion", "jqr"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/Special[1]", "nType", + "PortionType::Fly"); // remove??? + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/Text[1]", "nType", + "PortionType::Lay"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/Text[1]", "Portion", + "abhi"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "foaz"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[1]", + "nType", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[1]", + "Portion", "j"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[2]", + "nType", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[2]", + "Portion", "kl"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[2]/Text[1]", + "nType", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[2]/Text[1]", + "Portion", "mno"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[3]/Text[1]", + "nType", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[3]/Text[1]", + "Portion", "p"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[3]/Text[2]", + "nType", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[1]/anchored/fly[1]/anchored[1]/fly[1]/txt[3]/Text[2]", + "Portion", "qr"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/Special[1]", "nType", + "PortionType::Fly"); // remove??? + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/Text[1]", "nType", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/Text[1]", "Portion", + "ab"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/Text[2]", "nType", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[1]/Text[2]", "Portion", + "c"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[2]/Text[1]", "nType", + "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[2]/Text[1]", "Portion", + "def"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/Text[1]", "nType", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/Text[1]", "Portion", + "g"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/Text[2]", "nType", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly[1]/txt[3]/Text[2]", "Portion", + "hi"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "fo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[2]", "Portion", "o"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1]", "Portion", "b"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[2]", "Portion", "az"); + + // anchor to 2nd (deleted) paragraph + pWrtShell->StartOfSection(); + pWrtShell->Down(false, 1); + anchor1.SetType(RndStdIds::FLY_AT_CHAR); + anchor1.SetAnchor(pWrtShell->GetCursor()->GetPoint()); + pDoc->SetAttr(anchor1, *const_cast(pFly1)); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "19"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "foaz"); + + { // hide: no anchored object shown + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//anchored"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + { // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + } + + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "fo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[2]", "Portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[1]", + "nType", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[1]", + "Portion", "j"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[2]", + "nType", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[1]/Text[2]", + "Portion", "kl"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[2]/Text[1]", + "nType", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[2]/Text[1]", + "Portion", "mno"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[3]/Text[1]", + "nType", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[3]/Text[1]", + "Portion", "p"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[3]/Text[2]", + "nType", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/txt[2]/anchored/fly[1]/anchored[1]/fly[1]/txt[3]/Text[2]", + "Portion", "qr"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/Text[1]", "nType", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/Special[1]", "nType", + "PortionType::Fly"); // remove??? + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/Text[1]", "Portion", + "ab"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/Text[2]", "nType", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[1]/Text[2]", "Portion", + "c"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/Text[1]", "nType", + "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[2]/Text[1]", "Portion", + "def"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/Text[1]", "nType", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/Text[1]", "Portion", + "g"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/Text[2]", "nType", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly[1]/txt[3]/Text[2]", "Portion", + "hi"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1]", "Portion", "b"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[2]", "Portion", "az"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineSections) +{ + createSwDoc(DATA_DIRECTORY, "redline_sections.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwRootFrame* pLayout(pDoc->getIDocumentLayoutAccess().GetCurrentLayout()); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + + // verify after load + CheckRedlineSectionsHidden(); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + // why is this needed explicitly? + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/child::*[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/child::*[1]", + "portion", "fo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/child::*[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/child::*[2]", + "portion", "o"); + + assertXPath(pXmlDoc, + "/root/page[1]/body/section[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/child::*[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[1]/txt[1]/anchored/fly[1]/txt[1]/SwParaPortion/" + "SwLineLayout/child::*[1]", + "portion", "FRAME"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[1]/txt[1]/SwParaPortion/SwLineLayout/child::*[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[1]/txt[1]/SwParaPortion/SwLineLayout/child::*[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[1]/txt[2]/SwParaPortion/SwLineLayout/child::*[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[1]/txt[2]/SwParaPortion/SwLineLayout/child::*[1]", + "portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/child::*[1]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/child::*[1]", + "portion", "b"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/child::*[2]", "type", + "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/child::*[2]", + "portion", "lah"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[1]/SwParaPortion/SwLineLayout/child::*[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[1]/SwParaPortion/SwLineLayout/child::*[1]", + "portion", "fo"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[1]/SwParaPortion/SwLineLayout/child::*[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[1]/SwParaPortion/SwLineLayout/child::*[2]", + "portion", "o"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[2]/SwParaPortion/SwLineLayout/child::*[1]", + "type", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[2]/SwParaPortion/SwLineLayout/child::*[1]", + "portion", "bar"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[3]/SwParaPortion/SwLineLayout/child::*[1]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[3]/SwParaPortion/SwLineLayout/child::*[1]", + "portion", "b"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[3]/SwParaPortion/SwLineLayout/child::*[2]", + "type", "PortionType::Text"); + assertXPath(pXmlDoc, + "/root/page[1]/body/section[2]/txt[3]/SwParaPortion/SwLineLayout/child::*[2]", + "portion", "lah"); + + // verify after hide + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + // why is this needed explicitly? + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + CheckRedlineSectionsHidden(); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TDF69647_images) +{ + createSwDoc(DATA_DIRECTORY, "tdf69647_images.odt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number of pages does not match!", 2, getPages()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TDF69647_text) +{ + createSwDoc(DATA_DIRECTORY, "tdf69647_text.docx"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number of pages does not match!", 2, getPages()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineTables) +{ + createSwDoc(DATA_DIRECTORY, "redline_table.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwRootFrame* pLayout(pDoc->getIDocumentLayoutAccess().GetCurrentLayout()); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + + // verify after load + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "12"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "foar"); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + // why is this needed explicitly? + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "fo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[2]", "Portion", "o"); + + assertXPath(pXmlDoc, + "/root/page[1]/body/tab[1]/row[1]/cell[1]/txt[1]/anchored/fly[1]/txt[1]/Text[1]", + "nType", "PortionType::Para"); + assertXPath(pXmlDoc, + "/root/page[1]/body/tab[1]/row[1]/cell[1]/txt[1]/anchored/fly[1]/txt[1]/Text[1]", + "Portion", "FRAME"); + assertXPath(pXmlDoc, "/root/page[1]/body/tab[1]/row[1]/cell[1]/txt[1]/Text[1]", "nType", + "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/tab[1]/row[1]/cell[1]/txt[1]/Text[1]", "Portion", + "aaa"); + assertXPath(pXmlDoc, "/root/page[1]/body/tab[1]/row[2]/cell[2]/txt[1]/Text[1]", "nType", + "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/tab[1]/row[2]/cell[2]/txt[1]/Text[1]", "Portion", + "ddd"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "Portion", "b"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[2]", "Portion", "ar"); + + // verify after hide + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + // why is this needed explicitly? + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "12"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "foar"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf144057) +{ + createSwDoc(DATA_DIRECTORY, "tdf144057.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwRootFrame* pLayout(pDoc->getIDocumentLayoutAccess().GetCurrentLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // show tracked row deletions + assertXPath(pXmlDoc, "/root/page", 4); + assertXPath(pXmlDoc, "/root/page[1]/body/tab/row[6]/cell/txt/Text", "Portion", "A6"); + assertXPath(pXmlDoc, "/root/page[2]/body/tab/row[6]/cell/txt/Text", "Portion", "A12"); + assertXPath(pXmlDoc, "/root/page[3]/body/tab/row[6]/cell/txt/Text", "Portion", "B6"); + assertXPath(pXmlDoc, "/root/page[4]/body/tab/row[6]/cell/txt/Text", "Portion", "B12"); + + // hide tracked table and table row deletions + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + // This was 4 (unhidden tracked table and table row deletions) + assertXPath(pXmlDoc, "/root/page", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/tab/row", 5); + assertXPath(pXmlDoc, "/root/page[1]/body/tab/row[5]/cell/txt/Text", "Portion", "B12"); + + // show tracked table and table row deletions again + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page", 4); + assertXPath(pXmlDoc, "/root/page[1]/body/tab/row[6]/cell/txt/Text", "Portion", "A6"); + assertXPath(pXmlDoc, "/root/page[2]/body/tab/row[6]/cell/txt/Text", "Portion", "A12"); + assertXPath(pXmlDoc, "/root/page[3]/body/tab/row[6]/cell/txt/Text", "Portion", "B6"); + assertXPath(pXmlDoc, "/root/page[4]/body/tab/row[6]/cell/txt/Text", "Portion", "B12"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf144347) +{ + createSwDoc(DATA_DIRECTORY, "tdf144057.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwRootFrame* pLayout(pDoc->getIDocumentLayoutAccess().GetCurrentLayout()); + + // enable redlining + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + CPPUNIT_ASSERT_MESSAGE("redlining should be on", + pDoc->getIDocumentRedlineAccess().IsRedlineOn()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + + // remove first table + SwEditShell* const pEditShell(pDoc->GetEditShell()); + for (int i = 0; i < 12; ++i) + pEditShell->AcceptRedline(0); + + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // show tracked row deletions + assertXPath(pXmlDoc, "/root/page", 2); + assertXPath(pXmlDoc, "/root/page[1]/body/tab", 1); + + // select all the text, including the texts before and after the table + // Note: this table contains tracked changes, which was a + // problem for the original OOo implementation of track changes, + // resulting empty tables after accepting the deletion of these tables. + dispatchCommand(mxComponent, ".uno:SelectAll", {}); + dispatchCommand(mxComponent, ".uno:SelectAll", {}); + dispatchCommand(mxComponent, ".uno:Delete", {}); + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + // table is deleted with change tracking: it still exists + assertXPath(pXmlDoc, "/root/page", 2); + assertXPath(pXmlDoc, "/root/page[1]/body/tab", 1); + + // accept all deletions, removing the table completely + while (pEditShell->GetRedlineCount() > 0) + pEditShell->AcceptRedline(0); + + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + assertXPath(pXmlDoc, "/root/page", 1); + // This was 1 (bad empty table) + assertXPath(pXmlDoc, "/root/page[1]/body/tab", 0); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf109137) +{ + createSwDoc(DATA_DIRECTORY, "tdf109137.docx"); + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + uno::Sequence aDescriptor(comphelper::InitPropertySequence({ + { "FilterName", uno::Any(OUString("writer8")) }, + })); + xStorable->storeToURL(aTempFile.GetURL(), aDescriptor); + loadURL(aTempFile.GetURL(), "tdf109137.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was 0, the blue rectangle moved from the 1st to the 2nd page. + assertXPath(pXmlDoc, "/root/page[1]/body/txt/anchored/fly/notxt", + /*nNumberOfNodes=*/1); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint72) +{ + createSwDoc(DATA_DIRECTORY, "forcepoint72-1.rtf"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint75) +{ + createSwDoc(DATA_DIRECTORY, "forcepoint75-1.rtf"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testUXTSOREL) +{ + createSwDoc(DATA_DIRECTORY, "LIBREOFFICE-UXTSOREL.rtf"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepointFootnoteFrame) +{ + createSwDoc(DATA_DIRECTORY, "forcepoint-swfootnoteframe-1.rtf"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint76) +{ + createSwDoc(DATA_DIRECTORY, "forcepoint76-1.rtf"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testN4LA0OHZ) +{ + createSwDoc(DATA_DIRECTORY, "LIBREOFFICE-N4LA0OHZ.rtf"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint89) +{ + createSwWebDoc(DATA_DIRECTORY, "forcepoint89.html"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint90) +{ + createSwDoc(DATA_DIRECTORY, "forcepoint90.rtf"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint91) +{ + createSwWebDoc(DATA_DIRECTORY, "forcepoint91.html"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint92) +{ + createSwDoc(DATA_DIRECTORY, "forcepoint92.doc"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint93) +{ + createSwDoc(DATA_DIRECTORY, "forcepoint93-1.rtf"); + createSwDoc(DATA_DIRECTORY, "forcepoint93-2.rtf"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint94) +{ + createSwWebDoc(DATA_DIRECTORY, "forcepoint94.html"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint98) +{ + createSwWebDoc(DATA_DIRECTORY, "forcepoint98.html"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint100) +{ + createSwWebDoc(DATA_DIRECTORY, "forcepoint100.html"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint102) +{ + createSwDoc(DATA_DIRECTORY, "forcepoint102.rtf"); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint103) +{ + createSwWebDoc(DATA_DIRECTORY, "forcepoint103.html"); +} + +// FIXME: The font substitution of the bugdoc causes crash in Linux builds, +// in addition this example file originally was a docx so check system type +// until that issue is not fixed: +#ifndef SAL_UNX +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf147485Forcepoint) +{ + createSwDoc(DATA_DIRECTORY, "tdf147485-forcepoint.doc"); +} +#endif + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf118058) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf118058.fodt"); + // This resulted in a layout loop. + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); +} + +//just care it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testForcepoint99) +{ + createSwWebDoc(DATA_DIRECTORY, "forcepoint99.html"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf128611) +{ + createSwDoc(DATA_DIRECTORY, "tdf128611.fodt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 14 + // i.e. there were multiple portions in the first paragraph of the A1 cell, which means that the + // rotated text was broken into multiple lines without a good reason. + assertXPath(pXmlDoc, "//tab/row/cell[1]/txt/Text", "Portion", "Abcd efghijkl"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf125893) +{ + createSwDoc(DATA_DIRECTORY, "tdf125893.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was 400. The paragraph must have zero top border. + assertXPath(pXmlDoc, "/root/page/body/txt[4]/infos/prtBounds", "top", "0"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf134463) +{ + createSwDoc(DATA_DIRECTORY, "tdf134463.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was 621. The previous paragraph must have zero bottom border. + assertXPath(pXmlDoc, "/root/page/body/txt[3]/infos/prtBounds", "top", "21"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf117188) +{ + createSwDoc(DATA_DIRECTORY, "tdf117188.docx"); + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + uno::Sequence aDescriptor(comphelper::InitPropertySequence({ + { "FilterName", uno::Any(OUString("writer8")) }, + })); + xStorable->storeToURL(aTempFile.GetURL(), aDescriptor); + loadURL(aTempFile.GetURL(), "tdf117188.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString sWidth = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/bounds", "width"); + OUString sHeight = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/bounds", "height"); + // The text box must have zero border distances + assertXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/prtBounds", "left", "0"); + assertXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/prtBounds", "top", "0"); + assertXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/prtBounds", "width", sWidth); + assertXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/prtBounds", "height", sHeight); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf117187) +{ + createSwDoc(DATA_DIRECTORY, "tdf117187.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // there should be no fly portions + assertXPath(pXmlDoc, "/root/page/body/txt/Special[@nType='PortionType::Fly']", 0); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf119875) +{ + createSwDoc(DATA_DIRECTORY, "tdf119875.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nFirstTop + = getXPath(pXmlDoc, "/root/page[2]/body/section[1]/infos/bounds", "top").toInt32(); + sal_Int32 nSecondTop + = getXPath(pXmlDoc, "/root/page[2]/body/section[2]/infos/bounds", "top").toInt32(); + // The first section had the same top value as the second one, so they + // overlapped. + CPPUNIT_ASSERT_LESS(nSecondTop, nFirstTop); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf120287) +{ + createSwDoc(DATA_DIRECTORY, "tdf120287.fodt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was 2, TabOverMargin Word-specific compat flag did not imply + // default-in-Word printer-independent layout, resulting in an additional + // line break. + assertXPath(pXmlDoc, "/root/page/body/txt[1]/LineBreak", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf106234) +{ + createSwDoc(DATA_DIRECTORY, "tdf106234.fodt"); + // Ensure that all text portions are calculated before testing. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwViewShell* pViewShell + = pTextDoc->GetDocShell()->GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell(); + CPPUNIT_ASSERT(pViewShell); + pViewShell->Reformat(); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // In justified paragraphs, there is justification between left tabulators and manual line breaks + assertXPath(pXmlDoc, "/root/page/body/txt[1]/Special", "nType", "PortionType::Margin"); + assertXPathNoAttribute(pXmlDoc, "/root/page/body/txt[1]/Special", "nWidth"); + // but not after centered, right and decimal tabulators + assertXPath(pXmlDoc, "/root/page/body/txt[2]/Special", "nType", "PortionType::Margin"); + // This was a justified line, without nWidth + assertXPath(pXmlDoc, "/root/page/body/txt[2]/Special", "nWidth", "7881"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf120287b) +{ + createSwDoc(DATA_DIRECTORY, "tdf120287b.fodt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was 1418, TabOverMargin did the right split of the paragraph to two + // lines, but then calculated a too large tab portion size on the first + // line. + assertXPath(pXmlDoc, "/root/page/body/txt[1]/Text[@nType='PortionType::TabRight']", "nWidth", + "17"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf120287c) +{ + createSwDoc(DATA_DIRECTORY, "tdf120287c.fodt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was 2, the second line was not broken into a 2nd and a 3rd one, + // rendering text outside the paragraph frame. + assertXPath(pXmlDoc, "/root/page/body/txt[1]/LineBreak", 3); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf122878) +{ + createSwDoc(DATA_DIRECTORY, "tdf122878.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // FIXME: the XPath should be adjusted when the proper floating table would be imported + const sal_Int32 nTblTop + = getXPath(pXmlDoc, "/root/page[1]/footer/txt/anchored/fly/tab/infos/bounds", "top") + .toInt32(); + const sal_Int32 nFirstPageParaCount + = getXPathContent(pXmlDoc, "count(/root/page[1]/body/txt)").toInt32(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(30), nFirstPageParaCount); + for (sal_Int32 i = 1; i <= nFirstPageParaCount; ++i) + { + const OString xPath = "/root/page[1]/body/txt[" + OString::number(i) + "]/infos/bounds"; + const sal_Int32 nTxtBottom = getXPath(pXmlDoc, xPath.getStr(), "top").toInt32() + + getXPath(pXmlDoc, xPath.getStr(), "height").toInt32(); + // No body paragraphs should overlap the table in the footer + CPPUNIT_ASSERT_MESSAGE(OString("testing paragraph #" + OString::number(i)).getStr(), + nTxtBottom <= nTblTop); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf115094) +{ + createSwDoc(DATA_DIRECTORY, "tdf115094.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + sal_Int32 nTopOfD1 + = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/tab/row[1]/cell[4]/infos/bounds", + "top") + .toInt32(); + sal_Int32 nTopOfD1Anchored = getXPath(pXmlDoc, + "/root/page/body/txt/anchored/fly/tab/row[1]/cell[4]/" + "txt[2]/anchored/fly/infos/bounds", + "top") + .toInt32(); + CPPUNIT_ASSERT_LESS(nTopOfD1Anchored, nTopOfD1); + sal_Int32 nTopOfB2 + = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/tab/row[2]/cell[2]/infos/bounds", + "top") + .toInt32(); + sal_Int32 nTopOfB2Anchored = getXPath(pXmlDoc, + "/root/page/body/txt/anchored/fly/tab/row[2]/cell[2]/" + "txt[1]/anchored/fly/infos/bounds", + "top") + .toInt32(); + CPPUNIT_ASSERT_LESS(nTopOfB2Anchored, nTopOfB2); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf112290) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf112290.docx"); + CPPUNIT_ASSERT(pDoc); + auto pXml = parseLayoutDump(); + assertXPath(pXml, "/root/page/body/txt/LineBreak[2]", "Line", "Xxxx Xxxx"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testKeepWithNextPlusFlyFollowTextFlow) +{ + createSwDoc(DATA_DIRECTORY, "keep-with-next-fly.fodt"); + + { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // 3 text frames on page 1 + assertXPath(pXmlDoc, "/root/page[1]/body/infos/bounds", "bottom", "7540"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/infos/bounds", "height", "276"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/infos/bounds", "height", "276"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly/infos/bounds", "top", "1694"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/infos/bounds", "height", "276"); + assertXPath(pXmlDoc, "/root/page", 1); + discardDumpedLayout(); + } + + dispatchCommand(mxComponent, ".uno:Fieldnames", {}); + Scheduler::ProcessEventsToIdle(); + + { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // 1 text frame on page 1, and some empty space + assertXPath(pXmlDoc, "/root/page[1]/body/infos/bounds", "bottom", "7540"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/infos/bounds", "height", "5796"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/infos/bounds", "bottom", "7213"); + // 2 text frames on page 2 + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/infos/bounds", "height", "276"); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly/infos/bounds", "top", "10093"); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[2]/infos/bounds", "height", "276"); + assertXPath(pXmlDoc, "/root/page", 2); + discardDumpedLayout(); + } + + dispatchCommand(mxComponent, ".uno:Fieldnames", {}); + Scheduler::ProcessEventsToIdle(); + + { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // 3 text frames on page 1 + assertXPath(pXmlDoc, "/root/page[1]/body/infos/bounds", "bottom", "7540"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/infos/bounds", "height", "276"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/infos/bounds", "height", "276"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/anchored/fly/infos/bounds", "top", "1694"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/infos/bounds", "height", "276"); + assertXPath(pXmlDoc, "/root/page", 1); + discardDumpedLayout(); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf122607) +{ + createSwDoc(DATA_DIRECTORY, "tdf122607.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, + "/root/page[1]/anchored/fly/txt[1]/anchored/fly/tab/row[2]/cell/txt[7]/anchored/" + "fly/txt/Text[1]", + "nHeight", "253"); + assertXPath(pXmlDoc, + "/root/page[1]/anchored/fly/txt[1]/anchored/fly/tab/row[2]/cell/txt[7]/anchored/" + "fly/txt/Text[1]", + "nWidth", "428"); + assertXPath(pXmlDoc, + "/root/page[1]/anchored/fly/txt[1]/anchored/fly/tab/row[2]/cell/txt[7]/anchored/" + "fly/txt/Text[1]", + "Portion", "Fax:"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf122607_regression) +{ + discardDumpedLayout(); + if (mxComponent.is()) + mxComponent->dispose(); + + OUString const pName("tdf122607_leerzeile.odt"); + + OUString const url(m_directories.getURLFromSrc(DATA_DIRECTORY) + pName); + + // note: must set Hidden property, so that SfxFrameViewWindow_Impl::Resize() + // does *not* forward initial VCL Window Resize and thereby triggers a + // layout which does not happen on soffice --convert-to pdf. + std::vector aFilterOptions = { + { beans::PropertyValue("Hidden", -1, uno::Any(true), beans::PropertyState_DIRECT_VALUE) }, + }; + + std::cout << pName << ":\n"; + + // inline the loading because currently properties can't be passed... + mxComponent = loadFromDesktop(url, "com.sun.star.text.TextDocument", + comphelper::containerToSequence(aFilterOptions)); + uno::Sequence props(comphelper::InitPropertySequence({ + { "FilterName", uno::Any(OUString("writer_pdf_Export")) }, + })); + utl::TempFile aTempFile; + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(aTempFile.GetURL(), props); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // somehow these 2 rows overlapped in the PDF unless CalcLayout() runs + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[1]/infos/bounds", "mbFixSize", + "false"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[1]/infos/bounds", "top", "2977"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[1]/infos/bounds", "height", "241"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[2]/infos/bounds", "mbFixSize", + "true"); + // this was 3034, causing the overlap + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[2]/infos/bounds", "top", "3218"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[2]/infos/bounds", "height", "164"); + + aTempFile.EnableKillingFile(); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf150616) +{ + discardDumpedLayout(); + if (mxComponent.is()) + mxComponent->dispose(); + + OUString const pName("in_056132_mod.odt"); + + OUString const url(m_directories.getURLFromSrc(DATA_DIRECTORY) + pName); + + // note: must set Hidden property, so that SfxFrameViewWindow_Impl::Resize() + // does *not* forward initial VCL Window Resize and thereby triggers a + // layout which does not happen on soffice --convert-to pdf. + std::vector aFilterOptions = { + { beans::PropertyValue("Hidden", -1, uno::Any(true), beans::PropertyState_DIRECT_VALUE) }, + }; + + std::cout << pName << ":\n"; + + // inline the loading because currently properties can't be passed... + mxComponent = loadFromDesktop(url, "com.sun.star.text.TextDocument", + comphelper::containerToSequence(aFilterOptions)); + uno::Sequence props(comphelper::InitPropertySequence({ + { "FilterName", uno::Any(OUString("writer_pdf_Export")) }, + })); + utl::TempFile aTempFile; + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(aTempFile.GetURL(), props); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + + // this one was 0 height + assertXPath(pXmlDoc, "/root/page[1]/body/tab[3]/row[2]/cell[2]/txt[2]/LineBreak", "Line", + "Important information here!"); + assertXPath(pXmlDoc, "/root/page[1]/body/tab[3]/row[2]/cell[2]/txt[2]/infos/bounds", "height", + "253"); + assertXPath(pXmlDoc, "/root/page[1]/body/tab[3]/row[2]/cell[2]/txt[2]/infos/bounds", "top", + "7925"); + assertXPath(pXmlDoc, "/root/page[1]/body/tab[3]/row[2]/cell[2]/txt[3]/LineBreak", "Line", + "xxx 111 "); + assertXPath(pXmlDoc, "/root/page[1]/body/tab[3]/row[2]/cell[2]/txt[3]/infos/bounds", "height", + "697"); + assertXPath(pXmlDoc, "/root/page[1]/body/tab[3]/row[2]/cell[2]/txt[3]/infos/bounds", "top", + "8178"); + + aTempFile.EnableKillingFile(); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testBtlrCell) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "btlr-cell.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Without the accompanying fix in place, this test would have failed, as + // the orientation was 0 (layout did not take btlr direction request from + // doc model). + assertXPath(pXmlDoc, "//font[1]", "orientation", "900"); + +#if !defined(MACOSX) && !defined(_WIN32) // macOS fails with x == 2662 for some reason. + // Without the accompanying fix in place, this test would have failed with 'Expected: 1915; + // Actual : 1756', i.e. the AAA1 text was too close to the left cell border due to an ascent vs + // descent mismatch when calculating the baseline offset of the text portion. + assertXPath(pXmlDoc, "//textarray[1]", "x", "1915"); + assertXPath(pXmlDoc, "//textarray[1]", "y", "2707"); + + // Without the accompanying fix in place, this test would have failed with 'Expected: 1979; + // Actual : 2129', i.e. the gray background of the "AAA2." text was too close to the right edge + // of the text portion. Now it's exactly behind the text portion. + assertXPath(pXmlDoc, "(//rect)[2]", "left", "1979"); + + // Without the accompanying fix in place, this test would have failed with 'Expected: 269; + // Actual : 0', i.e. the AAA2 frame was not visible due to 0 width. + pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/txt[2]/infos/bounds", "width", "269"); + + // Test the position of the cursor after doc load. + // We expect that it's inside the first text frame in the first cell. + // More precisely, this is a bottom to top vertical frame, so we expect it's at the start, which + // means it's at the lower half of the text frame rectangle (vertically). + SwWrtShell* pWrtShell = pShell->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + + const SwRect& rCharRect = pWrtShell->GetCharRect(); + SwTwips nFirstParaTop + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/txt[1]/infos/bounds", "top").toInt32(); + SwTwips nFirstParaHeight + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/txt[1]/infos/bounds", "height") + .toInt32(); + SwTwips nFirstParaMiddle = nFirstParaTop + nFirstParaHeight / 2; + SwTwips nFirstParaBottom = nFirstParaTop + nFirstParaHeight; + // Without the accompanying fix in place, this test would have failed: the lower half (vertical) + // range was 2273 -> 2835, the good vertical position is 2730, the bad one was 1830. + CPPUNIT_ASSERT_GREATER(nFirstParaMiddle, rCharRect.Top()); + CPPUNIT_ASSERT_LESS(nFirstParaBottom, rCharRect.Top()); + + // Save initial cursor position. + SwPosition aCellStart = *pWrtShell->GetCursor()->Start(); + + // Test that pressing "up" at the start of the cell goes to the next character position. + SwNodeOffset nNodeIndex = pWrtShell->GetCursor()->Start()->nNode.GetIndex(); + sal_Int32 nIndex = pWrtShell->GetCursor()->Start()->nContent.GetIndex(); + KeyEvent aKeyEvent(0, KEY_UP); + SwEditWin& rEditWin = pShell->GetView()->GetEditWin(); + rEditWin.KeyInput(aKeyEvent); + Scheduler::ProcessEventsToIdle(); + // Without the accompanying fix in place, this test would have failed: "up" was interpreted as + // logical "left", which does nothing if you're at the start of the text anyway. + CPPUNIT_ASSERT_EQUAL(nIndex + 1, pWrtShell->GetCursor()->Start()->nContent.GetIndex()); + + // Test that pressing "right" goes to the next paragraph (logical "down"). + sal_Int32 nContentIndex = pWrtShell->GetCursor()->Start()->nContent.GetIndex(); + aKeyEvent = KeyEvent(0, KEY_RIGHT); + rEditWin.KeyInput(aKeyEvent); + Scheduler::ProcessEventsToIdle(); + // Without the accompanying fix in place, this test would have failed: the cursor went to the + // paragraph after the table. + CPPUNIT_ASSERT_EQUAL(nNodeIndex + 1, pWrtShell->GetCursor()->Start()->nNode.GetIndex()); + + // Test that we have the correct character index after traveling to the next paragraph. + // Without the accompanying fix in place, this test would have failed: char position was 5, i.e. + // the cursor jumped to the end of the paragraph for no reason. + CPPUNIT_ASSERT_EQUAL(nContentIndex, pWrtShell->GetCursor()->Start()->nContent.GetIndex()); + + // Test that clicking "below" the second paragraph positions the cursor at the start of the + // second paragraph. + SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + SwPosition aPosition(aCellStart); + SwTwips nSecondParaLeft + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/txt[2]/infos/bounds", "left") + .toInt32(); + SwTwips nSecondParaWidth + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/txt[2]/infos/bounds", "width") + .toInt32(); + SwTwips nSecondParaTop + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/txt[2]/infos/bounds", "top").toInt32(); + SwTwips nSecondParaHeight + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/txt[2]/infos/bounds", "height") + .toInt32(); + Point aPoint; + aPoint.setX(nSecondParaLeft + nSecondParaWidth / 2); + aPoint.setY(nSecondParaTop + nSecondParaHeight - 100); + SwCursorMoveState aState(CursorMoveState::NONE); + pLayout->GetModelPositionForViewPoint(&aPosition, aPoint, &aState); + CPPUNIT_ASSERT_EQUAL(aCellStart.nNode.GetIndex() + 1, aPosition.nNode.GetIndex()); + // Without the accompanying fix in place, this test would have failed: character position was 5, + // i.e. cursor was at the end of the paragraph. + CPPUNIT_ASSERT_EQUAL(static_cast(0), aPosition.nContent.GetIndex()); + + // Test that the selection rectangles are inside the cell frame if we select all the cell + // content. + SwTwips nCellLeft + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/infos/bounds", "left").toInt32(); + SwTwips nCellWidth + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/infos/bounds", "width").toInt32(); + SwTwips nCellTop + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/infos/bounds", "top").toInt32(); + SwTwips nCellHeight + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/infos/bounds", "height").toInt32(); + SwRect aCellRect(Point(nCellLeft, nCellTop), Size(nCellWidth, nCellHeight)); + pWrtShell->SelAll(); + SwShellCursor* pShellCursor = pWrtShell->getShellCursor(/*bBlock=*/false); + CPPUNIT_ASSERT(!pShellCursor->empty()); + // Without the accompanying fix in place, this test would have failed with: + // selection rectangle 269x2573@(1970,2172) is not inside cell rectangle 3207x1134@(1593,1701) + // i.e. the selection went past the bottom border of the cell frame. + for (const auto& rRect : *pShellCursor) + { + std::stringstream ss; + ss << "selection rectangle " << rRect << " is not inside cell rectangle " << aCellRect; + CPPUNIT_ASSERT_MESSAGE(ss.str(), aCellRect.Contains(rRect)); + } + + // Make sure that the correct rectangle gets repainted on scroll. + SwFrame* pPageFrame = pLayout->GetLower(); + CPPUNIT_ASSERT(pPageFrame->IsPageFrame()); + + SwFrame* pBodyFrame = pPageFrame->GetLower(); + CPPUNIT_ASSERT(pBodyFrame->IsBodyFrame()); + + SwFrame* pTabFrame = pBodyFrame->GetLower(); + CPPUNIT_ASSERT(pTabFrame->IsTabFrame()); + + SwFrame* pRowFrame = pTabFrame->GetLower(); + CPPUNIT_ASSERT(pRowFrame->IsRowFrame()); + + SwFrame* pCellFrame = pRowFrame->GetLower(); + CPPUNIT_ASSERT(pCellFrame->IsCellFrame()); + + SwFrame* pFrame = pCellFrame->GetLower(); + CPPUNIT_ASSERT(pFrame->IsTextFrame()); + + SwTextFrame* pTextFrame = static_cast(pFrame); + pTextFrame->SwapWidthAndHeight(); + // Mimic what normally SwTextFrame::PaintSwFrame() does: + SwRect aRect(4207, 2273, 269, 572); + pTextFrame->SwitchVerticalToHorizontal(aRect); + // Without the accompanying fix in place, this test would have failed with: + // Expected: 572x269@(1691,4217) + // Actual : 572x269@(2263,4217) + // i.e. the paint rectangle position was incorrect, text was not painted on scrolling up. + CPPUNIT_ASSERT_EQUAL(SwRect(1691, 4217, 572, 269), aRect); +#endif +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf123898) +{ + createSwDoc(DATA_DIRECTORY, "tdf123898.odt"); + + // Make sure spellchecker has done its job already + Scheduler::ProcessEventsToIdle(); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // Make sure that the arrow on the left is not there (there are 44 children if it's there) + assertXPathChildren(pXmlDoc, "/root/page/body/txt/anchored/fly/txt", 43); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf123651) +{ + createSwDoc(DATA_DIRECTORY, "tdf123651.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // Without the accompanying fix in place, this test would have failed with 'Expected: 7639; + // Actual: 12926'. The shape was below the second "Lorem ipsum" text, not above it. + const sal_Int32 nTopValue + = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds", "top").toInt32(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(7639, nTopValue, 10); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf116501) +{ + //just care it doesn't freeze + createSwDoc(DATA_DIRECTORY, "tdf116501.odt"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf123163) +{ + //just care it doesn't assert + createSwDoc(DATA_DIRECTORY, "tdf123163-1.docx"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testAbi11870) +{ + //just care it doesn't assert + createSwDoc(DATA_DIRECTORY, "abi11870-2.odt"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf118719) +{ + // Insert a page break. + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + // Enable hide whitespace mode. + SwViewOption aViewOptions(*pWrtShell->GetViewOptions()); + aViewOptions.SetHideWhitespaceMode(true); + pWrtShell->ApplyViewOptions(aViewOptions); + + pWrtShell->Insert("first"); + pWrtShell->InsertPageBreak(); + pWrtShell->Insert("second"); + + // Without the accompanying fix in place, this test would have failed, as the height of the + // first page was 15840 twips, instead of the much smaller 276. + sal_Int32 nOther = parseDump("/root/page[1]/infos/bounds", "height").toInt32(); + sal_Int32 nLast = parseDump("/root/page[2]/infos/bounds", "height").toInt32(); + CPPUNIT_ASSERT_GREATER(nOther, nLast); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTabOverMargin) +{ + createSwDoc(DATA_DIRECTORY, "tab-over-margin.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // 2nd paragraph has a tab over the right margin, and with the TabOverMargin compat option, + // there is enough space to have all content in a single line. + // Without the accompanying fix in place, this test would have failed, there were 2 lines. + assertXPath(pXmlDoc, "/root/page/body/txt[2]/LineBreak", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testImageComment) +{ + // Load a document that has "aaa" in it, then a commented image (4th char is the as-char image, + // 5th char is the comment anchor). + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "image-comment.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + // Look up a layout position which is on the right of the image. + SwRootFrame* pRoot = pWrtShell->GetLayout(); + CPPUNIT_ASSERT(pRoot->GetLower()->IsPageFrame()); + SwPageFrame* pPage = static_cast(pRoot->GetLower()); + CPPUNIT_ASSERT(pPage->GetLower()->IsBodyFrame()); + SwBodyFrame* pBody = static_cast(pPage->GetLower()); + CPPUNIT_ASSERT(pBody->GetLower()->IsTextFrame()); + SwTextFrame* pTextFrame = static_cast(pBody->GetLower()); + CPPUNIT_ASSERT(pTextFrame->GetDrawObjs()); + SwSortedObjs& rDrawObjs = *pTextFrame->GetDrawObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), rDrawObjs.size()); + SwAnchoredObject* pDrawObj = rDrawObjs[0]; + const SwRect& rDrawObjRect = pDrawObj->GetObjRect(); + Point aPoint = rDrawObjRect.Center(); + aPoint.setX(aPoint.getX() + rDrawObjRect.Width() / 2); + + // Ask for the doc model pos of this layout point. + SwPosition aPosition(*pTextFrame->GetTextNodeForFirstText()); + pTextFrame->GetModelPositionForViewPoint(&aPosition, aPoint); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 5 + // - Actual : 4 + // i.e. the cursor got positioned between the image and its comment, so typing extended the + // comment, instead of adding content after the commented image. + CPPUNIT_ASSERT_EQUAL(static_cast(5), aPosition.nContent.GetIndex()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testScriptField) +{ + // Test clicking script field inside table ( tdf#141079 ) + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf141079.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + // Look up layout position which is the first cell in the table + SwRootFrame* pRoot = pWrtShell->GetLayout(); + CPPUNIT_ASSERT(pRoot->GetLower()->IsPageFrame()); + SwPageFrame* pPage = static_cast(pRoot->GetLower()); + CPPUNIT_ASSERT(pPage->GetLower()->IsBodyFrame()); + SwBodyFrame* pBody = static_cast(pPage->GetLower()); + CPPUNIT_ASSERT(pBody->GetLower()->IsTextFrame()); + SwTextFrame* pTextFrame = static_cast(pBody->GetLower()); + CPPUNIT_ASSERT(pTextFrame->GetNext()->IsTabFrame()); + SwFrame* pTable = pTextFrame->GetNext(); + SwFrame* pRow1 = pTable->GetLower(); + CPPUNIT_ASSERT(pRow1->GetLower()->IsCellFrame()); + SwFrame* pCell1 = pRow1->GetLower(); + CPPUNIT_ASSERT(pCell1->GetLower()->IsTextFrame()); + SwTextFrame* pCellTextFrame = static_cast(pCell1->GetLower()); + const SwRect& rCellRect = pCell1->getFrameArea(); + Point aPoint = rCellRect.Center(); + aPoint.setX(aPoint.getX() - rCellRect.Width() / 2); + + // Ask for the doc model pos of this layout point. + SwPosition aPosition(*pCellTextFrame->GetTextNodeForFirstText()); + pCellTextFrame->GetModelPositionForViewPoint(&aPosition, aPoint); + + // Position was 1 without the fix from tdf#141079 + CPPUNIT_ASSERT_EQUAL(static_cast(0), aPosition.nContent.GetIndex()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testCommentCursorPosition) +{ + // Load a document that has "aaa" in it, followed by three comments. + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "endOfLineComments.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + SwRootFrame* pRoot = pWrtShell->GetLayout(); + CPPUNIT_ASSERT(pRoot->GetLower()->IsPageFrame()); + SwPageFrame* pPage = static_cast(pRoot->GetLower()); + CPPUNIT_ASSERT(pPage->GetLower()->IsBodyFrame()); + SwBodyFrame* pBody = static_cast(pPage->GetLower()); + CPPUNIT_ASSERT(pBody->GetLower()->IsTextFrame()); + SwTextFrame* pTextFrame = static_cast(pBody->GetLower()); + + // Set a point in the whitespace past the end of the first line. + Point aPoint = pWrtShell->getShellCursor(false)->GetSttPos(); + aPoint.setX(aPoint.getX() + 10000); + + // Ask for the doc model pos of this layout point. + SwPosition aPosition(*pTextFrame->GetTextNodeForFirstText()); + pTextFrame->GetModelPositionForViewPoint(&aPosition, aPoint); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 6 + // - Actual : 3 or 4 + // i.e. the cursor got positioned before the comments, + // so typing extended the first comment instead of adding content after the comments. + CPPUNIT_ASSERT_EQUAL(static_cast(6), aPosition.nContent.GetIndex()); + // The second line is also important, but can't be auto-tested + // since the failing situation depends on GetViewWidth which is zero in the headless tests. + // bb| - the cursor should move behind the |, not before it. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testCombiningCharacterCursorPosition) +{ + // Load a document that has "a" in it, followed by a combining acute in a separate rext span + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf138592-a-acute.fodt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + SwRootFrame* pRoot = pWrtShell->GetLayout(); + CPPUNIT_ASSERT(pRoot->GetLower()->IsPageFrame()); + SwPageFrame* pPage = static_cast(pRoot->GetLower()); + CPPUNIT_ASSERT(pPage->GetLower()->IsBodyFrame()); + SwBodyFrame* pBody = static_cast(pPage->GetLower()); + CPPUNIT_ASSERT(pBody->GetLower()->IsTextFrame()); + SwTextFrame* pTextFrame = static_cast(pBody->GetLower()); + + // Set a point in the whitespace past the end of the first line. + Point aPoint = pWrtShell->getShellCursor(false)->GetSttPos(); + aPoint.AdjustX(10000); + + // Ask for the doc model pos of this layout point. + SwPosition aPosition(*pTextFrame->GetTextNodeForFirstText()); + pTextFrame->GetModelPositionForViewPoint(&aPosition, aPoint); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2 + // - Actual : 1 + // i.e. the cursor got positioned before the acute, so typing shifted the acute (applying it + // to newly typed characters) instead of adding content after it. + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aPosition.nContent.GetIndex()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf64222) +{ + createSwDoc(DATA_DIRECTORY, "tdf64222.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page/body/txt[2]/Special", "nHeight", "560"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf113014) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf113014.fodt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // This failed, if numbering of cell A1 is missing + // (A1: left indent: 3 cm, first line indent: -3 cm + // A2: left indent: 0 cm, first line indent: 0 cm) + assertXPathContent(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/textarray[1]/text", "1."); + assertXPathContent(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/textarray[3]/text", "2."); + assertXPathContent(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/textarray[5]/text", "3."); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf130218) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf130218.fodt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // This failed, if hanging first line was hidden + assertXPathContent(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/textarray[1]/text", "Text"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf127235) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf127235.odt"); + // This resulted in a layout loop. + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf138039) +{ + createSwDoc(DATA_DIRECTORY, "tdf138039.odt"); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // there are 3 pages + assertXPath(pXmlDoc, "/root/page", 3); + // table on first page + assertXPath(pXmlDoc, "/root/page[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/txt", 0); + // paragraph with large fly on second page + assertXPath(pXmlDoc, "/root/page[2]/body/tab", 0); + assertXPath(pXmlDoc, "/root/page[2]/body/txt", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly[1]/infos/bounds", "top", "17915"); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly[1]/infos/bounds", "height", + "15819"); + // paragraph on third page + assertXPath(pXmlDoc, "/root/page[3]/body/tab", 0); + assertXPath(pXmlDoc, "/root/page[3]/body/txt", 1); + assertXPath(pXmlDoc, "/root/page[3]/body/txt[1]/anchored", 0); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf134298) +{ + createSwDoc(DATA_DIRECTORY, "tdf134298.ott"); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // there are 2 pages + assertXPath(pXmlDoc, "/root/page", 2); + // table and first para on first page + assertXPath(pXmlDoc, "/root/page[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/txt", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored", 0); + // paragraph with large fly on second page + assertXPath(pXmlDoc, "/root/page[2]/body/tab", 0); + assertXPath(pXmlDoc, "/root/page[2]/body/txt", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly[1]/infos/bounds", "top", "17897"); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/anchored/fly[1]/infos/bounds", "height", + "15819"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testShapeAllowOverlap) +{ +// Need to find out why this fails on macOS and why this is unstable on Windows. +#if !defined(MACOSX) && !defined(_WIN32) + // Create an empty document with two, intentionally overlapping shapes. + // Set their AllowOverlap property to false. + loadURL("private:factory/swriter", nullptr); + uno::Reference xDocument(mxComponent, uno::UNO_QUERY); + awt::Point aPoint(1000, 1000); + awt::Size aSize(2000, 2000); + uno::Reference xShape( + xDocument->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setPosition(aPoint); + xShape->setSize(aSize); + uno::Reference xDrawPageSupplier(xDocument, uno::UNO_QUERY); + uno::Reference xShapeProperties(xShape, uno::UNO_QUERY); + xShapeProperties->setPropertyValue("AllowOverlap", uno::Any(false)); + xShapeProperties->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AT_CHARACTER)); + xDrawPageSupplier->getDrawPage()->add(xShape); + + aPoint = awt::Point(2000, 2000); + xShape.set(xDocument->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setPosition(aPoint); + xShape->setSize(aSize); + xShapeProperties.set(xShape, uno::UNO_QUERY); + xShapeProperties->setPropertyValue("AllowOverlap", uno::Any(false)); + xShapeProperties->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AT_CHARACTER)); + xDrawPageSupplier->getDrawPage()->add(xShape); + + // Now verify that the rectangle of the anchored objects don't overlap. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + SwFrame* pPageFrame = pLayout->GetLower(); + SwFrame* pBodyFrame = pPageFrame->GetLower(); + SwFrame* pTextFrame = pBodyFrame->GetLower(); + CPPUNIT_ASSERT(pTextFrame->GetDrawObjs()); + SwSortedObjs& rObjs = *pTextFrame->GetDrawObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast(2), rObjs.size()); + SwAnchoredObject* pFirst = rObjs[0]; + SwAnchoredObject* pSecond = rObjs[1]; + // Without the accompanying fix in place, this test would have failed: the layout dump was + // + // + // so there was a clear vertical overlap. (Allow for 1px tolerance.) + OString aMessage = "Unexpected overlap: first shape's bottom is " + + OString::number(pFirst->GetObjRect().Bottom()) + ", second shape's top is " + + OString::number(pSecond->GetObjRect().Top()); + CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), + std::abs(pFirst->GetObjRect().Bottom() - pSecond->GetObjRect().Top()) + < 15); +#endif +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testShapeAllowOverlapWrap) +{ + // Create an empty document with two, intentionally overlapping shapes. + // Set their AllowOverlap property to false and their wrap to through. + loadURL("private:factory/swriter", nullptr); + uno::Reference xDocument(mxComponent, uno::UNO_QUERY); + awt::Point aPoint(1000, 1000); + awt::Size aSize(2000, 2000); + uno::Reference xShape( + xDocument->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setPosition(aPoint); + xShape->setSize(aSize); + uno::Reference xDrawPageSupplier(xDocument, uno::UNO_QUERY); + uno::Reference xShapeProperties(xShape, uno::UNO_QUERY); + xShapeProperties->setPropertyValue("AllowOverlap", uno::Any(false)); + xShapeProperties->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AT_CHARACTER)); + xShapeProperties->setPropertyValue("Surround", uno::Any(text::WrapTextMode_THROUGH)); + xDrawPageSupplier->getDrawPage()->add(xShape); + + aPoint = awt::Point(2000, 2000); + xShape.set(xDocument->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setPosition(aPoint); + xShape->setSize(aSize); + xShapeProperties.set(xShape, uno::UNO_QUERY); + xShapeProperties->setPropertyValue("AllowOverlap", uno::Any(false)); + xShapeProperties->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AT_CHARACTER)); + xShapeProperties->setPropertyValue("Surround", uno::Any(text::WrapTextMode_THROUGH)); + xDrawPageSupplier->getDrawPage()->add(xShape); + + // Now verify that the rectangle of the anchored objects do overlap. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + SwFrame* pPageFrame = pLayout->GetLower(); + SwFrame* pBodyFrame = pPageFrame->GetLower(); + SwFrame* pTextFrame = pBodyFrame->GetLower(); + CPPUNIT_ASSERT(pTextFrame->GetDrawObjs()); + SwSortedObjs& rObjs = *pTextFrame->GetDrawObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast(2), rObjs.size()); + SwAnchoredObject* pFirst = rObjs[0]; + SwAnchoredObject* pSecond = rObjs[1]; + // Without the accompanying fix in place, this test would have failed: AllowOverlap=no had + // priority over Surround=through (which is bad for Word compat). + CPPUNIT_ASSERT(pSecond->GetObjRect().Overlaps(pFirst->GetObjRect())); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf124600) +{ + createSwDoc(DATA_DIRECTORY, "tdf124600.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 2 + // i.e. the last line in the body text had 2 lines, while it should have 1, as Word does (as the + // fly frame does not intersect with the print area of the paragraph.) + assertXPath(pXmlDoc, "/root/page/body/txt[2]/LineBreak", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf124601) +{ + // This is a testcase for the ContinuousEndnotes compat flag. + // The document has 2 pages, the endnote anchor is on the first page. + // The endnote should be on the 2nd page together with the last page content. + createSwDoc(DATA_DIRECTORY, "tdf124601.doc"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2 + // - Actual : 3 + // i.e. there was a separate endnote page, even when the ContinuousEndnotes compat option was + // on. + assertXPath(pXmlDoc, "/root/page", 2); + assertXPath(pXmlDoc, "/root/page[2]/ftncont", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf124601b) +{ + // Table has an image, which is anchored in the first row, but its vertical position is large + // enough to be rendered in the second row. + // The shape has layoutInCell=1, so should match what Word does here. + // Also the horizontal position should be in the last column, even if the anchor is in the + // last-but-one column. + createSwDoc(DATA_DIRECTORY, "tdf124601b.doc"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + sal_Int32 nFlyTop = getXPath(pXmlDoc, "//anchored/fly/infos/bounds", "top").toInt32(); + sal_Int32 nFlyLeft = getXPath(pXmlDoc, "//anchored/fly/infos/bounds", "left").toInt32(); + sal_Int32 nFlyRight + = nFlyLeft + getXPath(pXmlDoc, "//anchored/fly/infos/bounds", "width").toInt32(); + sal_Int32 nSecondRowTop = getXPath(pXmlDoc, "//tab/row[2]/infos/bounds", "top").toInt32(); + sal_Int32 nLastCellLeft + = getXPath(pXmlDoc, "//tab/row[1]/cell[5]/infos/bounds", "left").toInt32(); + sal_Int32 nLastCellRight + = nLastCellLeft + getXPath(pXmlDoc, "//tab/row[1]/cell[5]/infos/bounds", "width").toInt32(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected greater than: 3736 + // - Actual : 2852 + // i.e. the image was still inside the first row. + CPPUNIT_ASSERT_GREATER(nSecondRowTop, nFlyTop); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected greater than: 9640 + // - Actual : 9639 + // i.e. the right edge of the image was not within the bounds of the last column, the right edge + // was in the last-but-one column. + CPPUNIT_ASSERT_GREATER(nLastCellLeft, nFlyRight); + CPPUNIT_ASSERT_LESS(nLastCellRight, nFlyRight); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf124770) +{ + // Enable content over margin. + SwDoc* pDoc = createSwDoc(); + pDoc->getIDocumentSettingAccess().set(DocumentSettingId::TAB_OVER_MARGIN, true); + + // Set page width. + SwPageDesc& rPageDesc = pDoc->GetPageDesc(0); + SwFrameFormat& rPageFormat = rPageDesc.GetMaster(); + const SwAttrSet& rPageSet = rPageFormat.GetAttrSet(); + SwFormatFrameSize aPageSize = rPageSet.GetFrameSize(); + aPageSize.SetWidth(3703); + rPageFormat.SetFormatAttr(aPageSize); + + // Set left and right margin. + SvxLRSpaceItem aLRSpace = rPageSet.GetLRSpace(); + aLRSpace.SetLeft(1418); + aLRSpace.SetRight(1418); + rPageFormat.SetFormatAttr(aLRSpace); + pDoc->ChgPageDesc(0, rPageDesc); + + // Set font to italic 20pt Liberation Serif. + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SfxItemSet aTextSet(pWrtShell->GetView().GetPool(), + svl::Items); + SvxFontItem aFont(RES_CHRATR_FONT); + aFont.SetFamilyName("Liberation Serif"); + aTextSet.Put(aFont); + SvxFontHeightItem aHeight(400, 100, RES_CHRATR_FONTSIZE); + aTextSet.Put(aHeight); + SvxPostureItem aItalic(ITALIC_NORMAL, RES_CHRATR_POSTURE); + aTextSet.Put(aItalic); + pWrtShell->SetAttrSet(aTextSet); + + // Insert the text. + pWrtShell->Insert2("HHH"); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 2 + // i.e. the italic string was broken into 2 lines, while Word kept it in a single line. + assertXPath(pXmlDoc, "/root/page/body/txt[1]/LineBreak", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testContinuousEndnotesInsertPageAtStart) +{ + // Create a new document with CONTINUOUS_ENDNOTES enabled. + SwDoc* pDoc = createSwDoc(); + pDoc->getIDocumentSettingAccess().set(DocumentSettingId::CONTINUOUS_ENDNOTES, true); + + // Insert a second page, and an endnote on the 2nd page (both the anchor and the endnote is on + // the 2nd page). + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->InsertPageBreak(); + pWrtShell->InsertFootnote("endnote", /*bEndNote=*/true, /*bEdit=*/false); + + // Add a new page at the start of the document. + pWrtShell->SttEndDoc(/*bStart=*/true); + pWrtShell->InsertPageBreak(); + + // Make sure that the endnote is moved from the 2nd page to the 3rd one. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page", 3); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // i.e. the footnote container remained on page 2. + assertXPath(pXmlDoc, "/root/page[3]/ftncont", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testContinuousEndnotesDeletePageAtStart) +{ + // Create a new document with CONTINUOUS_ENDNOTES enabled. + SwDoc* pDoc = createSwDoc(); + pDoc->getIDocumentSettingAccess().set(DocumentSettingId::CONTINUOUS_ENDNOTES, true); + + // Insert a second page, and an endnote on the 2nd page (both the anchor and the endnote is on + // the 2nd page). + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->InsertPageBreak(); + pWrtShell->InsertFootnote("endnote", /*bEndNote=*/true, /*bEdit=*/false); + + // Remove the empty page at the start of the document. + pWrtShell->SttEndDoc(/*bStart=*/true); + pWrtShell->DelRight(); + + // Make sure that the endnote is moved from the 2nd page to the 1st one. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 2 + // i.e. the endnote remained on an (otherwise) empty 2nd page. + assertXPath(pXmlDoc, "/root/page", 1); + assertXPath(pXmlDoc, "/root/page[1]/ftncont", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf128399) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf128399.docx"); + SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + SwFrame* pPage = pLayout->GetLower(); + SwFrame* pBody = pPage->GetLower(); + SwFrame* pTable = pBody->GetLower(); + SwFrame* pRow1 = pTable->GetLower(); + SwFrame* pRow2 = pRow1->GetNext(); + const SwRect& rRow2Rect = pRow2->getFrameArea(); + Point aPoint = rRow2Rect.Center(); + + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwPosition aPosition = *pWrtShell->GetCursor()->Start(); + SwPosition aFirstRow(aPosition); + SwCursorMoveState aState(CursorMoveState::NONE); + pLayout->GetModelPositionForViewPoint(&aPosition, aPoint, &aState); + // Second row is +3: end node, start node and the first text node in the 2nd row. + SwNodeOffset nExpected = aFirstRow.nNode.GetIndex() + 3; + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 14 + // - Actual : 11 + // i.e. clicking on the center of the 2nd row placed the cursor in the 1st row. + CPPUNIT_ASSERT_EQUAL(nExpected, aPosition.nNode.GetIndex()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf145826) +{ + createSwDoc(DATA_DIRECTORY, "tdf145826.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/root/page/body/section/column", 2); + + // Without the fix in place, this test would have failed with + // - Expected: 1 + // - Actual : 0 + assertXPath(pXmlDoc, "/root/page/body/section/column[1]/ftncont", 1); + assertXPath(pXmlDoc, "/root/page/body/section/column[2]/ftncont", 1); + assertXPath(pXmlDoc, "/root/page/body/section/column[1]/ftncont/ftn", 3); + assertXPath(pXmlDoc, "/root/page/body/section/column[2]/ftncont/ftn", 3); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf105481) +{ + createSwDoc(DATA_DIRECTORY, "tdf105481.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + + // Without the accompanying fix in place, this test would have failed + // because the vertical position of the as-char shape object and the + // as-char math object will be wrong (below/beyond the text frame's bottom). + + SwTwips nTxtTop = getXPath(pXmlDoc, + "/root/page/anchored/fly/txt[2]" + "/infos/bounds", + "top") + .toInt32(); + SwTwips nTxtBottom = nTxtTop + + getXPath(pXmlDoc, + "/root/page/anchored/fly/txt[2]" + "/infos/bounds", + "height") + .toInt32(); + + SwTwips nFormula1Top = getXPath(pXmlDoc, + "/root/page/anchored/fly/txt[2]" + "/anchored/fly[1]/infos/bounds", + "top") + .toInt32(); + SwTwips nFormula1Bottom = nFormula1Top + + getXPath(pXmlDoc, + "/root/page/anchored/fly/txt[2]" + "/anchored/fly[1]/infos/bounds", + "height") + .toInt32(); + + SwTwips nFormula2Top = getXPath(pXmlDoc, + "/root/page/anchored/fly/txt[2]" + "/anchored/fly[2]/infos/bounds", + "top") + .toInt32(); + SwTwips nFormula2Bottom = nFormula2Top + + getXPath(pXmlDoc, + "/root/page/anchored/fly/txt[2]" + "/anchored/fly[2]/infos/bounds", + "height") + .toInt32(); + + // Ensure that the two formula positions are at least between top and bottom of the text frame. + // The below two are satisfied even without the fix. + CPPUNIT_ASSERT_GREATEREQUAL(nTxtTop, nFormula1Top); + CPPUNIT_ASSERT_GREATEREQUAL(nTxtTop, nFormula2Top); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected less than or equal to : 14423 + // - Actual : 14828 + // that is, the formula is below the text-frame's y bound. + CPPUNIT_ASSERT_LESSEQUAL(nTxtBottom, nFormula1Bottom); + // Similarly for formula # 2 : + // - Expected less than or equal to : 14423 + // - Actual : 15035 + // that is, the formula is below the text-frame's y bound. + CPPUNIT_ASSERT_LESSEQUAL(nTxtBottom, nFormula2Bottom); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf117982) +{ + SwDoc* pDocument = createSwDoc(DATA_DIRECTORY, "tdf117982.docx"); + SwDocShell* pShell = pDocument->GetDocShell(); + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + assertXPathContent(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/textarray[1]/text", "FOO AAA"); + //The first cell must be "FOO AAA". If not, this means the first cell content not visible in + //the source document. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf128959) +{ + // no orphan/widow control in table cells + SwDoc* pDocument = createSwDoc(DATA_DIRECTORY, "tdf128959.docx"); + CPPUNIT_ASSERT(pDocument); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // first two lines of the paragraph in the split table cell on the first page + // (these lines were completely lost) + assertXPath( + pXmlDoc, "/root/page[1]/body/tab[1]/row[1]/cell[1]/txt[1]/LineBreak[1]", "Line", + "a)Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue "); + assertXPath( + pXmlDoc, "/root/page[1]/body/tab[1]/row[1]/cell[1]/txt[1]/LineBreak[2]", "Line", + "massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit "); + // last line of the paragraph in the split table cell on the second page + assertXPath(pXmlDoc, "/root/page[2]/body/tab[1]/row[1]/cell[1]/txt[1]/LineBreak[1]", "Line", + "amet commodo magna eros quis urna."); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf121658) +{ + uno::Reference xHyphenator = LinguMgr::GetHyphenator(); + if (!xHyphenator->hasLocale(lang::Locale("en", "US", OUString()))) + return; + + createSwDoc(DATA_DIRECTORY, "tdf121658.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Only 2 hyphenated words should appear in the document (in the lowercase words). + // Uppercase words should not be hyphenated. + assertXPath(pXmlDoc, "//Special[@nType='PortionType::Hyphen']", 2); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf149420) +{ + uno::Reference xHyphenator = LinguMgr::GetHyphenator(); + if (!xHyphenator->hasLocale(lang::Locale("en", "US", OUString()))) + return; + + createSwDoc(DATA_DIRECTORY, "tdf149420.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Only 3 hyphenated words should appear in the document (last paragraph + // has got a 1 cm hyphenation zone, removing two hyphenations, which visible + // in the second paragraph). + assertXPath(pXmlDoc, "//Special[@nType='PortionType::Hyphen']", 8); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf149324) +{ + uno::Reference xHyphenator = LinguMgr::GetHyphenator(); + if (!xHyphenator->hasLocale(lang::Locale("en", "US", OUString()))) + return; + + createSwDoc(DATA_DIRECTORY, "tdf149324.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Only 3 hyphenated words should appear in the document (last paragraph + // has got a 7-character word limit for hyphenation, removing the + // hyphenation "ex-cept". + assertXPath(pXmlDoc, "//Special[@nType='PortionType::Hyphen']", 3); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf149248) +{ + uno::Reference xHyphenator = LinguMgr::GetHyphenator(); + if (!xHyphenator->hasLocale(lang::Locale("en", "US", OUString()))) + return; + + createSwDoc(DATA_DIRECTORY, "tdf149248.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Only 1 hyphenated word should appear in the document (last word of the second + // paragraph). Last word should not be hyphenated for the fourth paragraph + // (the same paragraph, but with forbidden hyphenation of the last word). + assertXPath(pXmlDoc, "//Special[@nType='PortionType::Hyphen']", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testWriterImageNoCapture) +{ + createSwDoc(DATA_DIRECTORY, "writer-image-no-capture.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + sal_Int32 nPageLeft = getXPath(pXmlDoc, "//page/infos/bounds", "left").toInt32(); + sal_Int32 nImageLeft = getXPath(pXmlDoc, "//anchored/fly/infos/bounds", "left").toInt32(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected less than: 284 + // - Actual : 284 + // i.e. the image position was modified to be inside the page frame ("captured"), even if Word + // does not do that. + CPPUNIT_ASSERT_LESS(nPageLeft, nImageLeft); +} + +static SwRect lcl_getVisibleFlyObjRect(SwWrtShell* pWrtShell) +{ + SwRootFrame* pRoot = pWrtShell->GetLayout(); + SwPageFrame* pPage = static_cast(pRoot->GetLower()); + pPage = static_cast(pPage->GetNext()); + pPage = static_cast(pPage->GetNext()); + SwSortedObjs* pDrawObjs = pPage->GetDrawObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), pDrawObjs->size()); + SwAnchoredObject* pDrawObj = (*pDrawObjs)[0]; + CPPUNIT_ASSERT_EQUAL(OUString("Rahmen8"), pDrawObj->GetFrameFormat().GetName()); + pPage = static_cast(pPage->GetNext()); + pDrawObjs = pPage->GetDrawObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), pDrawObjs->size()); + pDrawObj = (*pDrawObjs)[0]; + CPPUNIT_ASSERT_EQUAL(OUString("Rahmen123"), pDrawObj->GetFrameFormat().GetName()); + SwRect aFlyRect = pDrawObj->GetObjRect(); + CPPUNIT_ASSERT(pPage->getFrameArea().Contains(aFlyRect)); + return aFlyRect; +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testStableAtPageAnchoredFlyPosition) +{ + // this doc has two page-anchored frames: one tiny on page 3 and one large on page 4. + // it also has a style:master-page named "StandardEntwurf", which contains some fields. + // if you add a break to page 2, or append some text to page 4 (or just toggle display field names), + // the page anchored frame on page 4 vanishes, as it is incorrectly moved out of the page bounds. + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "stable-at-page-anchored-fly-position.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + // look up the layout position of the page-bound frame on page four + SwRect aOrigRect = lcl_getVisibleFlyObjRect(pWrtShell); + + // append some text to the document to trigger bug / relayout + pWrtShell->SttEndDoc(false); + pWrtShell->Insert("foo"); + + // get the current position of the frame on page four + SwRect aRelayoutRect = lcl_getVisibleFlyObjRect(pWrtShell); + + // the anchored frame should not have moved + CPPUNIT_ASSERT_EQUAL(aOrigRect, aRelayoutRect); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf134548) +{ + createSwDoc(DATA_DIRECTORY, "tdf134548.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Second paragraph has two non zero width tabs in beginning of line + { + OUString sNodeType = parseDump("/root/page/body/txt[2]/Text[1]", "nType"); + CPPUNIT_ASSERT_EQUAL(OUString("PortionType::TabLeft"), sNodeType); + sal_Int32 nWidth = parseDump("/root/page/body/txt[2]/Text[1]", "nWidth").toInt32(); + CPPUNIT_ASSERT_GREATER(sal_Int32(0), nWidth); + } + { + OUString sNodeType = parseDump("/root/page/body/txt[2]/Text[2]", "nType"); + CPPUNIT_ASSERT_EQUAL(OUString("PortionType::TabLeft"), sNodeType); + sal_Int32 nWidth = parseDump("/root/page/body/txt[2]/Text[2]", "nWidth").toInt32(); + CPPUNIT_ASSERT_GREATER(sal_Int32(0), nWidth); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf124423) +{ + createSwDoc(DATA_DIRECTORY, "tdf124423.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nFly1Width + = getXPath(pXmlDoc, "(//anchored/fly)[1]/infos/prtBounds", "width").toInt32(); + sal_Int32 nFly2Width + = getXPath(pXmlDoc, "(//anchored/fly)[2]/infos/prtBounds", "width").toInt32(); + sal_Int32 nPageWidth = getXPath(pXmlDoc, "//page/infos/prtBounds", "width").toInt32(); + CPPUNIT_ASSERT_EQUAL(nPageWidth, nFly2Width); + CPPUNIT_ASSERT_LESS(nPageWidth / 2, nFly1Width); + + createSwDoc(DATA_DIRECTORY, "tdf124423.odt"); + pXmlDoc = parseLayoutDump(); + nFly1Width = getXPath(pXmlDoc, "(//anchored/fly)[1]/infos/prtBounds", "width").toInt32(); + nFly2Width = getXPath(pXmlDoc, "(//anchored/fly)[2]/infos/prtBounds", "width").toInt32(); + nPageWidth = getXPath(pXmlDoc, "//page/infos/prtBounds", "width").toInt32(); + CPPUNIT_ASSERT_LESS(nPageWidth / 2, nFly2Width); + CPPUNIT_ASSERT_LESS(nPageWidth / 2, nFly1Width); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf137185) +{ + // First load the sample bugdoc + load(DATA_DIRECTORY, "tdf137185.odt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + // Get the doc shell + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + + // Get the DrawObject from page + auto pModel = pDoc->getIDocumentDrawModelAccess().GetDrawModel(); + CPPUNIT_ASSERT(pModel); + auto pPage = pModel->GetPage(0); + CPPUNIT_ASSERT(pPage); + auto pObj = pPage->GetObj(0); + CPPUNIT_ASSERT(pObj); + + // Get the format of the draw object + auto pShape = FindFrameFormat(pObj); + CPPUNIT_ASSERT(pShape); + + // Check the text of the shape + uno::Reference xTxt(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Align me!"), xTxt->getText()->getString()); + + // Add a textbox to the shape + SwTextBoxHelper::create(pShape, pShape->FindRealSdrObject(), true); + + // Check if the text moved from the shape to the frame + auto pFormat = SwTextBoxHelper::getOtherTextBoxFormat(getShape(1)); + auto xTextFrame = SwXTextFrame::CreateXTextFrame(*pFormat->GetDoc(), pFormat); + + CPPUNIT_ASSERT_EQUAL(OUString("Align me!"), xTextFrame->getText()->getString()); + SdrTextObj* pTextObj = dynamic_cast(pObj); + CPPUNIT_ASSERT(pTextObj); + const auto& aOutStr = pTextObj->GetOutlinerParaObject()->GetTextObject(); + + CPPUNIT_ASSERT(aOutStr.GetText(0).isEmpty()); + // Before the patch it failed, because the text appeared 2 times on each other. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf138782) +{ + CPPUNIT_ASSERT(createSwDoc(DATA_DIRECTORY, "tdf138782.docx")); + auto pXml = parseLayoutDump(); + CPPUNIT_ASSERT(pXml); + + // Without the fix it failed because the 3rd shape was outside the page: + // - Expected less than: 13327 + // - Actual : 14469 + + CPPUNIT_ASSERT_LESS( + getXPath(pXml, "/root/page/infos/bounds", "right").toInt32(), + getXPath(pXml, "/root/page/body/txt[8]/anchored/SwAnchoredDrawObject/bounds", "right") + .toInt32()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf135035) +{ + createSwDoc(DATA_DIRECTORY, "tdf135035.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nFly1Width + = getXPath(pXmlDoc, "(//anchored/fly)[1]/infos/prtBounds", "width").toInt32(); + sal_Int32 nFly2Width + = getXPath(pXmlDoc, "(//anchored/fly)[2]/infos/prtBounds", "width").toInt32(); + sal_Int32 nFly3Width + = getXPath(pXmlDoc, "(//anchored/fly)[3]/infos/prtBounds", "width").toInt32(); + sal_Int32 nParentWidth = getXPath(pXmlDoc, "(//txt)[1]/infos/prtBounds", "width").toInt32(); + CPPUNIT_ASSERT_EQUAL(nParentWidth, nFly2Width); + CPPUNIT_ASSERT_EQUAL(nParentWidth, nFly3Width); + CPPUNIT_ASSERT_LESS(nParentWidth / 2, nFly1Width); + + createSwDoc(DATA_DIRECTORY, "tdf135035.odt"); + pXmlDoc = parseLayoutDump(); + nFly1Width = getXPath(pXmlDoc, "(//anchored/fly)[1]/infos/prtBounds", "width").toInt32(); + nFly2Width = getXPath(pXmlDoc, "(//anchored/fly)[2]/infos/prtBounds", "width").toInt32(); + nFly3Width = getXPath(pXmlDoc, "(//anchored/fly)[3]/infos/prtBounds", "width").toInt32(); + nParentWidth = getXPath(pXmlDoc, "(//txt)[1]/infos/prtBounds", "width").toInt32(); + CPPUNIT_ASSERT_LESS(nParentWidth / 2, nFly2Width); + CPPUNIT_ASSERT_LESS(nParentWidth / 2, nFly1Width); + CPPUNIT_ASSERT_GREATER(nParentWidth, nFly3Width); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf146704_EndnoteInSection) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf146704_EndnoteInSection.odt"); + CPPUNIT_ASSERT(pDoc); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // Without the fix, the endnote placed to 2. page + assertXPath(pXmlDoc, "/root/page", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf139336_ColumnsWithFootnoteDoNotOccupyEntirePage) +{ + SwDoc* pDoc + = createSwDoc(DATA_DIRECTORY, "tdf139336_ColumnsWithFootnoteDoNotOccupyEntirePage.docx"); + CPPUNIT_ASSERT(pDoc); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // Without the fix, it would be 5 pages, but with the fix the whole document + // would fit into 1 page, but it will be 2 pages right now, because + // when writer import (from docx) the last section with columns, then it does not set + // the evenly distributed settings, and this settings is required for the fix now, to + // avoid some regression. + assertXPath(pXmlDoc, "/root/page", 2); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage) +{ + // Old odt files should keep their original layout, as it was before Tdf139336 fix. + // The new odt file is only 1 page long, while the old odt file (with the same content) + // was more than 1 page long. + // Note: Somewhy this test miscalculates the layout of the old odt file. + // It will be 4 pages long, while opened in Writer it is 5 pages long. + SwDoc* pDoc + = createSwDoc(DATA_DIRECTORY, "tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_Old.odt"); + CPPUNIT_ASSERT(pDoc); + Scheduler::ProcessEventsToIdle(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "/root/page"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_GREATER(1, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + + discardDumpedLayout(); + pDoc = createSwDoc(DATA_DIRECTORY, "tdf54465_ColumnsWithFootnoteDoNotOccupyEntirePage_New.odt"); + CPPUNIT_ASSERT(pDoc); + pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page", 1); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/layout/layout2.cxx b/sw/qa/extras/layout/layout2.cxx new file mode 100644 index 000000000..d02072038 --- /dev/null +++ b/sw/qa/extras/layout/layout2.cxx @@ -0,0 +1,2240 @@ +/* -*- 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 + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/layout/data/"; + +/// Test to assert layout / rendering result of Writer. +class SwLayoutWriter2 : public SwModelTestBase +{ +protected: + void CheckRedlineCharAttributesHidden(); +}; + +// this mainly tests that splitting portions across redlines in SwAttrIter works +void SwLayoutWriter2::CheckRedlineCharAttributesHidden() +{ + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/merged", "paraPropsNodeIndex", "9"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "foobaz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/merged", "paraPropsNodeIndex", "10"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "Portion", "foobaz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/merged", "paraPropsNodeIndex", "11"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[2]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/merged", "paraPropsNodeIndex", "12"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[2]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/merged", "paraPropsNodeIndex", "13"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[2]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/merged", "paraPropsNodeIndex", "14"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[2]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/merged", "paraPropsNodeIndex", "15"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[2]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/merged", "paraPropsNodeIndex", "16"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[2]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/merged", "paraPropsNodeIndex", "17"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/Text[1]", "Portion", "foobaz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/merged", "paraPropsNodeIndex", "18"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[1]", "Portion", "fo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[2]", "Portion", "ob"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[3]", "Portion", "az"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/merged", "paraPropsNodeIndex", "19"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[1]", "nType", "PortionType::Para"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[1]", "Portion", "foobaz"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf100680_as_char_wrap) +{ + createSwDoc(DATA_DIRECTORY, "tdf100680.docx"); + auto pDump = parseLayoutDump(); + assertXPath(pDump, "/root/page/header/txt/SwParaPortion/SwLineLayout[3]"); + // If the third line missing that assert will fire, as was before the fix. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineCharAttributes) +{ + createSwDoc(DATA_DIRECTORY, "redline_charatr.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwRootFrame* pLayout(pDoc->getIDocumentLayoutAccess().GetCurrentLayout()); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + + // verify after load + CheckRedlineCharAttributesHidden(); + + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + // why is this needed explicitly? + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // show: nothing is merged + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//merged"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[2]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[3]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[2]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[3]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[2]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[3]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[2]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/Text[3]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[2]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/Text[3]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[2]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/Text[3]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[2]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[7]/Text[3]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[2]", "Portion", "ba"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[3]", "Portion", "r"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[4]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/Text[4]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/Text[2]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/Text[3]", "Portion", "baz"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[1]", "Portion", "fo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[2]", "Portion", "o"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[3]", "Portion", "bar"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[4]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[4]", "Portion", "b"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[5]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/Text[5]", "Portion", "az"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[1]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[1]", "Portion", "foo"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[2]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[2]", "Portion", "b"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[3]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[3]", "Portion", "a"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[4]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[4]", "Portion", "r"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[5]", "nType", "PortionType::Text"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/Text[5]", "Portion", "baz"); + + // verify after hide + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + // why is this needed explicitly? + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + CheckRedlineCharAttributesHidden(); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineShowHideFootnotePagination) +{ + createSwDoc(DATA_DIRECTORY, "redline_footnote_pagination.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc(pTextDoc->GetDocShell()->GetDoc()); + SwRootFrame* pLayout(pDoc->getIDocumentLayoutAccess().GetCurrentLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // check footnotes + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn", 6); + assertXPath(pXmlDoc, "/root/page[2]/ftncont/ftn", 3); + // check that first page ends with the y line and second page starts with z + assertXPath(pXmlDoc, "/root/page[1]/body/txt[last()]/LineBreak[last()]", "Line", + "yyyyyyyyy yyy yyyyyyyyyyyyyyyy yyyyyyy yyy yyyyy yyyyyyyyy yyy yyyyyyyyy "); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/LineBreak[1]", "Line", + "zzz. zzz zzzz zzzz7 zzz zzz zzzzzzz zzz zzzz zzzzzzzzzzzzzz zzzzzzzzzzzz "); + + // hide redlines - all still visible footnotes move to page 1 + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn", 2); + assertXPath(pXmlDoc, "/root/page[2]/ftncont/ftn", 0); + + // show again - should now get the same result as on loading + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + // check footnotes + assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn", 6); + assertXPath(pXmlDoc, "/root/page[2]/ftncont/ftn", 3); + // check that first page ends with the y line and second page starts with z + assertXPath(pXmlDoc, "/root/page[1]/body/txt[last()]/LineBreak[last()]", "Line", + "yyyyyyyyy yyy yyyyyyyyyyyyyyyy yyyyyyy yyy yyyyy yyyyyyyyy yyy yyyyyyyyy "); + assertXPath(pXmlDoc, "/root/page[2]/body/txt[1]/LineBreak[1]", "Line", + "zzz. zzz zzzz zzzz7 zzz zzz zzzzzzz zzz zzzz zzzzzzzzzzzzzz zzzzzzzzzzzz "); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testtdf138951) +{ + // Open the bugdoc + auto pDoc = createSwDoc(DATA_DIRECTORY, "tdf138951.odt"); + + // Get the only shape + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xShape); + + // Gather its formats: the shape and textbox + const SwFrameFormat* pTxFrm = SwTextBoxHelper::getOtherTextBoxFormat(xShape); + CPPUNIT_ASSERT(pTxFrm); + const SwFrameFormat* pShFrm = SwTextBoxHelper::getOtherTextBoxFormat(pTxFrm, RES_FLYFRMFMT); + CPPUNIT_ASSERT(pShFrm); + + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + + // Get the bound rectangle of the textframe + tools::Rectangle aTxtFrmRect(pTxFrm->FindRealSdrObject()->GetLogicRect()); + + // Get the bound rectangle of the shape + tools::Rectangle aShpRect(pShFrm->FindRealSdrObject()->GetLogicRect()); + + // Check the anchor the same and the textbox is inside the shape + const bool bIsAnchTheSame + = *pShFrm->GetAnchor().GetContentAnchor() == *pShFrm->GetAnchor().GetContentAnchor(); + CPPUNIT_ASSERT_MESSAGE("The anchor is different for the textbox and shape!", bIsAnchTheSame); + CPPUNIT_ASSERT_MESSAGE("The textbox has fallen apart!", aShpRect.Contains(aTxtFrmRect)); + // Without the fix the anchor differs, and the frame outside of the shape +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineNumberInNumbering) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf42748.fodt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Assert the tracked deletion of the number of joined list item and + // the tracked insertion of the number after a split list item as not black + // (and not COL_GREEN color of the tracked text movement, see testRedlineMoving) elements + assertXPath( + pXmlDoc, + "/metafile/push/push/push/textcolor[not(@color='#000000') and not(@color='#008000')]", 5); + + // tdf#145068 numbering shows changes in the associated list item, not the next one + // This was 1 (black numbering of the first list item previously) + assertXPath(pXmlDoc, "/metafile/push/push/push/font[4][@color='#000000']", 0); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineNumbering) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf115523.fodt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Show the correct and the original line numbering instead of counting + // the deleted list items in Show Changes mode, as part of the list + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[1]/text", "1."); + // This was "2." (deleted text node, now its text content is part of the first list item) + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[3]/text", "[2.] "); + // This was "3." (now it's the second list item) + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[5]/text", "2.[3.] "); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineNumbering2) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf115524.fodt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Show the correct and the original line numbering in Show Changes mode + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[1]/text", "1."); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[3]/text", "2."); + // FIXME: show as 3.[2.] + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[5]/text", "3."); + // This was "4." (not shown the original number) + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[7]/text", "4.[3.] "); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf149710_RedlineNumberingEditing) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf149710.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + // Show Changes + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwRootFrame* pLayout(pWrtShell->GetLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + + // delete the paragraph mark of the first list item with change tracking + dispatchCommand(mxComponent, ".uno:GoToEndOfLine", {}); + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + dispatchCommand(mxComponent, ".uno:Delete", {}); + + // Dump the rendering of the first page as an XML file. + SwDocShell* pShell = pDoc->GetDocShell(); + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Show the correct and the original line numbering instead of counting + // the deleted list items in Show Changes mode, as part of the list + // This was "1." + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[1]/text", "[1.] "); + // This was "2." (deleted text node, now its text content is part of the first list item) + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[3]/text", "1.[2.] "); + // This was "3." (now it's the second list item) + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[5]/text", "2.[3.] "); + + // remove the tracked deletion, and check the layout again + pWrtShell->Undo(); + xMetaFile = pShell->GetPreviewMetaFile(); + pXmlDoc = dumpAndParse(dumper, *xMetaFile); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[1]/text", "1."); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[3]/text", "2."); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[5]/text", "3."); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf149709_RedlineNumberingLevel) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf149709.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + // Show Changes + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwRootFrame* pLayout(pWrtShell->GetLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + + // insert a new list item at start of the second list item "a)" + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + pWrtShell->Down(false, 1); + pWrtShell->SplitNode(false); + + // Dump the rendering of the first page as an XML file. + SwDocShell* pShell = pDoc->GetDocShell(); + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Show the correct and the original line numbering instead of counting + // the deleted list items in Show Changes mode, as part of the list + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[1]/text", "1."); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[3]/text", "a)"); + // This was "b)[2.]" + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[4]/text", "b)[a)] "); + // This was "c)[3.]" + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[6]/text", "c)[b)] "); + // This was "4.[2.]" (after disabling Show Changes, and enabling again) + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[8]/text", "2."); + + // remove the tracked deletion, and check the layout again + pWrtShell->Undo(); + xMetaFile = pShell->GetPreviewMetaFile(); + pXmlDoc = dumpAndParse(dumper, *xMetaFile); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[1]/text", "1."); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[3]/text", "a)"); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[5]/text", "b)"); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[7]/text", "2."); + + // check Redo + pWrtShell->Redo(); + xMetaFile = pShell->GetPreviewMetaFile(); + pXmlDoc = dumpAndParse(dumper, *xMetaFile); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[1]/text", "1."); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[3]/text", "a)"); + // TODO: show as b)[a)] + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[4]/text", "b)"); + // FIXME: This must be "c)[b]" + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[6]/text", "c)[a)] "); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[8]/text", "2."); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf149711_importDOCXMoveToParagraphMark) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf149711.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt", 6); + + // reject tracked insertion (moveTo) + SwEditShell* const pEditShell(pDoc->GetEditShell()); + CPPUNIT_ASSERT_EQUAL(static_cast(2), pEditShell->GetRedlineCount()); + pEditShell->RejectRedline(1); + + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + // This was 6 (not tracked paragraph mark of the moveTo list item) + assertXPath(pXmlDoc, "/root/page[1]/body/txt", 5); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf151954) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf151954.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt", 2); + + // accept tracked insertion (moveTo) + SwEditShell* const pEditShell(pDoc->GetEditShell()); + CPPUNIT_ASSERT_EQUAL(static_cast(3), pEditShell->GetRedlineCount()); + pEditShell->AcceptRedline(0); + + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + // This was 1 (moveFrom was extended to the paragraph mark) + assertXPath(pXmlDoc, "/root/page[1]/body/txt", 2); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineNumberInFootnote) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf85610.fodt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // changed color of numbers of footnote 1 (deleted footnote) and footnote 2 (inserted footnote) + // decreased the black elements by 2: + // This was 7 + assertXPath(pXmlDoc, "/metafile/push/push/push/font[@color='#000000']", 5); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineMoving) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf42748.fodt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // create a 3-element list without change tracking + SwEditShell* const pEditShell(pDoc->GetEditShell()); + pEditShell->RejectRedline(0); + pEditShell->AcceptRedline(0); + + // move down first list item with track changes + dispatchCommand(mxComponent, ".uno:GoToStartOfDoc", {}); + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + dispatchCommand(mxComponent, ".uno:MoveDown", {}); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // text and numbering colors show moving of the list item + // tdf#145719: the moved text item "It" is not detected as text moving, + // because it consists of less than 6 characters after stripping its spaces + assertXPath(pXmlDoc, "/metafile/push/push/push/textcolor[@color='#008000']", 0); + assertXPath(pXmlDoc, "/metafile/push/push/push/font[@color='#008000']", 0); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineMoving2) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf42748.fodt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // create a 3-element list without change tracking + SwEditShell* const pEditShell(pDoc->GetEditShell()); + pEditShell->RejectRedline(0); + pEditShell->AcceptRedline(0); + + // extend the first item to "An ItemIt", because detection of move needs + // at least 6 characters with an inner space after stripping white spaces + // of the redline + dispatchCommand(mxComponent, ".uno:GoToStartOfDoc", {}); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("An Item"); + + // move down first list item with track changes + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + dispatchCommand(mxComponent, ".uno:MoveDown", {}); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // text and numbering colors show moving of the list item + // These were 0 (other color, not COL_GREEN, color of the tracked text movement) + assertXPath(pXmlDoc, "/metafile/push/push/push/textcolor[@color='#008000']", 5); + assertXPath(pXmlDoc, "/metafile/push/push/push/font[@color='#008000']", 11); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineMovingDOCX) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf104797.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + SwEditShell* const pEditShell(pDoc->GetEditShell()); + // This was 2 (moveFrom and moveTo joined other redlines) + CPPUNIT_ASSERT_EQUAL(static_cast(5), pEditShell->GetRedlineCount()); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // text colors show moved text + // These were 0 (other color, not COL_GREEN, color of the tracked text movement) + assertXPath(pXmlDoc, "/metafile/push/push/push/textcolor[@color='#008000']", 6); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTableCellInvalidate) +{ + discardDumpedLayout(); + if (mxComponent.is()) + mxComponent->dispose(); + + OUString const pName("table_cell_overlap.fodt"); + + OUString const url(m_directories.getURLFromSrc(DATA_DIRECTORY) + pName); + + // note: must set Hidden property, so that SfxFrameViewWindow_Impl::Resize() + // does *not* forward initial VCL Window Resize and thereby triggers a + // layout which does not happen on soffice --convert-to pdf. + std::vector aFilterOptions = { + { beans::PropertyValue("Hidden", -1, uno::Any(true), beans::PropertyState_DIRECT_VALUE) }, + }; + + std::cout << pName << ":\n"; + + // inline the loading because currently properties can't be passed... + mxComponent = loadFromDesktop(url, "com.sun.star.text.TextDocument", + comphelper::containerToSequence(aFilterOptions)); + uno::Sequence props(comphelper::InitPropertySequence({ + { "FilterName", uno::Any(OUString("writer_pdf_Export")) }, + })); + utl::TempFile aTempFile; + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(aTempFile.GetURL(), props); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // somehow these 2 rows overlapped in the PDF unless CalcLayout() runs + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[1]/infos/bounds", "top", "6969"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[1]/infos/bounds", "height", "231"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[1]/cell[1]/infos/bounds", "top", + "6969"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[1]/cell[1]/infos/bounds", "height", + "231"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[1]/cell[1]/txt[1]/infos/bounds", + "top", "6969"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[1]/cell[1]/txt[1]/infos/bounds", + "height", "231"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[2]/infos/bounds", "top", "7200"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[2]/infos/bounds", "height", "231"); + // this was 6969, causing the overlap + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[2]/cell[1]/infos/bounds", "top", + "7200"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[2]/cell[1]/infos/bounds", "height", + "231"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[2]/cell[1]/txt[1]/infos/bounds", + "top", "7200"); + assertXPath(pXmlDoc, "/root/page[1]/anchored/fly/tab[1]/row[2]/cell[1]/txt[1]/infos/bounds", + "height", "231"); + + aTempFile.EnableKillingFile(); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf145719) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf145719.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // text colors show moved text + // This was 0 (other color, not COL_GREEN, color of the tracked text movement) + assertXPath(pXmlDoc, "/metafile/push/push/push/textcolor[@color='#008000']", 4); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testChangedTableRows) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "changed_table_rows.fodt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // This was 0 (other color, not COL_AUTHOR_TABLE_DEL, color of the tracked row deletion) + assertXPath(pXmlDoc, "/metafile/push/push/push/push/push/fillcolor[@color='#fce6f4']", 1); + // This was 0 (other color, not COL_AUTHOR_TABLE_INS, color of the tracked row insertion) + assertXPath(pXmlDoc, "/metafile/push/push/push/push/push/fillcolor[@color='#e1f2fa']", 1); + // This was 3 (color of the cells of the last column, 2 of them disabled by change tracking ) + assertXPath(pXmlDoc, "/metafile/push/push/push/push/push/fillcolor[@color='#3faf46']", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf145225_RedlineMovingWithBadInsertion) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf42748.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + // create a 3-element list without change tracking + // (because the fixed problem depends on the own changes) + SwEditShell* const pEditShell(pDoc->GetEditShell()); + pEditShell->RejectRedline(0); + pEditShell->AcceptRedline(0); + CPPUNIT_ASSERT_EQUAL(static_cast(0), pEditShell->GetRedlineCount()); + + // Show Changes + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwRootFrame* pLayout(pWrtShell->GetLayout()); + CPPUNIT_ASSERT(!pLayout->IsHideRedlines()); + + // insert a tracked paragraph break in middle of the second list item, i.e. split it + dispatchCommand(mxComponent, ".uno:GoToStartOfDoc", {}); + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + // positionate the cursor in the middle of the second list item + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 4, /*bBasicCall=*/false); + pWrtShell->SplitNode(false); + CPPUNIT_ASSERT_EQUAL(static_cast(1), pEditShell->GetRedlineCount()); + + // move up the last list item over the paragraph split + dispatchCommand(mxComponent, ".uno:GoToEndOfDoc", {}); + dispatchCommand(mxComponent, ".uno:MoveUp", {}); + dispatchCommand(mxComponent, ".uno:MoveUp", {}); + // This was 2 (the tracked paragraph break joined with the moved list item, + // setting the not changed text of the second list item to tracked insertion) + CPPUNIT_ASSERT_EQUAL(static_cast(3), pEditShell->GetRedlineCount()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf146964_ReappearingMovedTextInHideChangesMode) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf54819.fodt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + // enable Record Changes + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + CPPUNIT_ASSERT_MESSAGE("redlining should be on", + pDoc->getIDocumentRedlineAccess().IsRedlineOn()); + + // set Hide Changes mode + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwRootFrame* pLayout(pWrtShell->GetLayout()); + CPPUNIT_ASSERT(pLayout->IsHideRedlines()); + + // delete and paste the deleted word again during Track Changes + dispatchCommand(mxComponent, ".uno:WordRightSel", {}); + dispatchCommand(mxComponent, ".uno:Cut", {}); + dispatchCommand(mxComponent, ".uno:Paste", {}); + + SwEditShell* const pEditShell(pDoc->GetEditShell()); + CPPUNIT_ASSERT_EQUAL(static_cast(2), pEditShell->GetRedlineCount()); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + // This was "Lorem Lorem ipsum" (reappearing deletion in Hide Changes mode) + assertXPath(pXmlDoc, "/root/page/body/txt[1]/Text", "Portion", "Lorem ipsum"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf125300) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf125300.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Keep line spacing before bottom cell border (it was 1892) + sal_Int32 y1 + = getXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[5]/polyline/point[1]", "y") + .toInt32(); + sal_Int32 y2 + = getXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[5]/polyline/point[2]", "y") + .toInt32(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(2092, y1, 7); + CPPUNIT_ASSERT_EQUAL(y1, y2); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf116830) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf116830.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Assert that the yellow rectangle (cell background) is painted after the + // polypolygon (background shape). + // Background shape: 1.1.1.2 + // Cell background: 1.1.1.3 + assertXPath( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[2]/push[1]/push[1]/fillcolor[@color='#729fcf']", 1); + assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[2]/push[1]/push[1]/polypolygon", + 1); + + // This failed: cell background was painted before the background shape. + assertXPath(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/fillcolor[@color='#ffff00']", 1); + assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/rect", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf114163) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf114163.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[12]/text", + "Data3"); + // This failed, if the legend first label is not "Data3". The legend position is right. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf131707) +{ + createSwDoc(DATA_DIRECTORY, "tdf131707_flyWrap.doc"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + assertXPath(pXmlDoc, "//body/tab/row[3]/cell[2]/txt/infos/bounds", "top", "2185"); + // the image should be inside of the cell boundary - so the same top or higher + assertXPath(pXmlDoc, "//body/tab/row[3]/cell[2]/txt/anchored/fly/infos/bounds", "top", "2185"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf122225) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf122225.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Bug 122225 - FILEOPEN DOCX Textbox of Column chart legend reduces and text of legend disappears + const sal_Int32 nLegendLabelLines + = getXPathContent(pXmlDoc, "count(//text[contains(text(),\"Advanced Diploma\")])") + .toInt32(); + // This failed, if the legend label is not "Advanced Diploma". + CPPUNIT_ASSERT_EQUAL(static_cast(1), nLegendLabelLines); + + // Bug 140623 - Fileopen DOCX: Text Orientation of X-Axis 0 instead of 45 degrees + const sal_Int32 nThirdLabelLines + = getXPathContent(pXmlDoc, "count(//text[contains(text(),\"Hispanic\")])").toInt32(); + // This failed, if the third X axis label broke to multiple lines. + CPPUNIT_ASSERT_EQUAL(static_cast(1), nThirdLabelLines); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf125335) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf125335.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[12]/text", + "Data3"); + // This failed, if the legend first label is not "Data3". The legend position is bottom. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf134247) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "legend-itemorder-min.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[14]/text", + "1. adatsor"); + // This failed, if the legend first label is not "1. adatsor". +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf75659) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf75659.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent( + pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[17]/text", "Series1"); + + assertXPathContent( + pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[18]/text", "Series2"); + + assertXPathContent( + pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[19]/text", "Series3"); + // These failed, if the legend names are empty strings. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf136816) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf136816.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Check number of legend entries + assertXPath(pXmlDoc, "//text[contains(text(),\"Column\")]", 2); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf126425) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "long_legendentry.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 14 + // - Actual : 12 + // i.e. the text of the chart legend lost. + assertXPath(pXmlDoc, "//textarray", 14); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testUnusedOLEprops) +{ + CPPUNIT_ASSERT(createSwDoc(DATA_DIRECTORY, "tdf138465min.docx")); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: >300 + // - Actual : 142 + // i.e. the formula squashed + CPPUNIT_ASSERT_GREATEREQUAL( + double(300), + getXPath(pXmlDoc, "/root/page/body/txt[2]/anchored/fly/notxt/infos/bounds", "height") + .toDouble()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf123268) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf123268.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 41 + // - Actual : 0 + // i.e. the chart lost. + assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/push", + 41); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf133005) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf133005.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + sal_Int32 nXChartWall = getXPath(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/" + "push[1]/push[1]/polyline[1]/point[2]", + "x") + .toInt32(); + sal_Int32 nXColumn = getXPath(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/" + "push[1]/push[41]/polypolygon/polygon/point[1]", + "x") + .toInt32(); + + // This failed, if the value axis doesn't appear inside category. + CPPUNIT_ASSERT_DOUBLES_EQUAL(nXChartWall, nXColumn, 5); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf115630) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf115630.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Test wide of inner chart area. + sal_Int32 nXRight + = getXPath(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[3]/polyline[1]/point[1]", + "x") + .toInt32(); + sal_Int32 nXLeft + = getXPath(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[3]/polyline[1]/point[2]", + "x") + .toInt32(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(2895, nXRight - nXLeft, 50); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf108021) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf108021.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[@length='22']", + 8); + // This failed, if the textarray length of the first axis label not 22. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf125334) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf125334.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[@length='17']", + 4); + // This failed, if the textarray length of the category axis label not 17. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf122800) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf122800.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[@length='22']", + 9); + // This failed, if the textarray length of the first axis label not 22. +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTruncatedAxisLabel) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "testTruncatedAxisLabel.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // test the X axis label visibility + assertXPathContent( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[1]/text", + "Long axis label truncated 1"); + + // test the Y axis label visibility + assertXPathContent( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[3]/text", + "-5.00"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf128996) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf128996.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[1]/text", + "A very long category name 1"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf126244) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf126244.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Test the first level of vertical category axis labels orientation. The first level orientation should be horizontal. + assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/font[1]", "orientation", + "0"); + // Test the second level of vertical category axis labels orientation. The second level orientation should be vertical. + sal_Int32 nRotation + = getXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/font[5]", + "orientation") + .toInt32(); + CPPUNIT_ASSERT(nRotation >= 899); + CPPUNIT_ASSERT(nRotation <= 900); + // Test the third level of vertical category axis labels orientation. The third level orientation should be vertical. + nRotation = getXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/font[7]", + "orientation") + .toInt32(); + CPPUNIT_ASSERT(nRotation >= 899); + CPPUNIT_ASSERT(nRotation <= 900); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf127304) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf127304.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Test the first level of horizontal category axis labels orientation. The first level orientation should be vertical. + sal_Int32 nRotation + = getXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/font[1]", + "orientation") + .toInt32(); + CPPUNIT_ASSERT(nRotation >= 899); + CPPUNIT_ASSERT(nRotation <= 900); + // Test the second level of horizontal category axis labels orientation. The second level orientation should be horizontal. + assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/font[5]", "orientation", + "0"); + // Test the third level of horizontal category axis labels orientation. The third level orientation should be horizontal. + assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/font[7]", "orientation", + "0"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testHorizontal_multilevel) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "horizontal_multilevel.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Test the Y position of horizontal category axis label. + sal_Int32 nYposition + = getXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/textarray[7]", "y") + .toInt32(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(8057, nYposition, 20); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf69648) +{ + createSwDoc(DATA_DIRECTORY, "tdf69648.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + + OString sShapeXPath[2] = { + "/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObjGroup/SdrObjList/SdrObject[1]", + "/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObjGroup/SdrObjList/SdrObject[2]" + }; + OString sFrameXPath[2] = { "/root/page/body/txt/anchored/fly[1]/infos/bounds", + "/root/page/body/txt/anchored/fly[2]/infos/bounds" }; + + for (int i = 0; i < 2; ++i) + { + const auto sDrawRect = getXPath(pXmlDoc, sShapeXPath[i], "aOutRect"); + const auto nComaPos1 = sDrawRect.indexOf(',', 0); + const auto nComaPos2 = sDrawRect.indexOf(',', nComaPos1 + 1); + const auto nComaPos3 = sDrawRect.indexOf(',', nComaPos2 + 1); + + const auto nDraw1 = o3tl::toInt64(sDrawRect.subView(0, nComaPos1)); + const auto nDraw2 = o3tl::toInt64(sDrawRect.subView(nComaPos1 + 1, nComaPos2 - nComaPos1)); + const auto nDraw3 = o3tl::toInt64(sDrawRect.subView(nComaPos2 + 1, nComaPos3 - nComaPos2)); + const auto nDraw4 = o3tl::toInt64( + sDrawRect.subView(nComaPos3 + 1, sDrawRect.getLength() - nComaPos3 - 1)); + const auto aChildShape = SwRect(nDraw1, nDraw2, nDraw3, nDraw4); + + const auto nFlyLeft = getXPath(pXmlDoc, sFrameXPath[i], "left").toInt64(); + const auto nFlyTop = getXPath(pXmlDoc, sFrameXPath[i], "top").toInt64(); + const auto nFlyWidth = getXPath(pXmlDoc, sFrameXPath[i], "width").toInt64(); + const auto nFlyHeight = getXPath(pXmlDoc, sFrameXPath[i], "height").toInt64(); + + const auto aFrame = SwRect(nFlyLeft, nFlyTop, nFlyWidth, nFlyHeight); + + CPPUNIT_ASSERT_MESSAGE("Textbox must be inside the shape!", aChildShape.Contains(aFrame)); + } +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf116256) +{ + // Open bugdoc + createSwDoc(DATA_DIRECTORY, "tdf116256.docx"); + CPPUNIT_ASSERT(mxComponent); + + // Get the textbox + uno::Reference xTextBox(getShape(2), uno::UNO_QUERY_THROW); + + // Ensure that is a real textbox, and follows the text flow + CPPUNIT_ASSERT(xTextBox->getPropertyValue("TextBox").get()); + CPPUNIT_ASSERT(xTextBox->getPropertyValue("IsFollowingTextFlow").get()); + + // Parse the layout + auto pLayout = parseLayoutDump(); + // Get the position of the shape + const auto nTextBoxShapeLeft = getXPath(pLayout, + "/root/page/body/txt/anchored/fly/tab/row[1]/cell/txt/" + "anchored/SwAnchoredDrawObject/bounds", + "left") + .toInt64(); + const auto nTextBoxShapeTop = getXPath(pLayout, + "/root/page/body/txt/anchored/fly/tab/row[1]/cell/txt/" + "anchored/SwAnchoredDrawObject/bounds", + "top") + .toInt64(); + // Get the position of the textframe too. + const auto nTextBoxFrameLeft + = getXPath(pLayout, + "/root/page/body/txt/anchored/fly/tab/row[1]/cell/txt/anchored/fly/infos/bounds", + "left") + .toInt64(); + const auto nTextBoxFrameTop + = getXPath(pLayout, + "/root/page/body/txt/anchored/fly/tab/row[1]/cell/txt/anchored/fly/infos/bounds", + "top") + .toInt64(); + + // Without the fix in place these were less than they supposed to. + CPPUNIT_ASSERT_GREATEREQUAL(nTextBoxShapeLeft, nTextBoxFrameLeft); + CPPUNIT_ASSERT_GREATEREQUAL(nTextBoxShapeTop, nTextBoxFrameTop); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf138194) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "xaxis-labelbreak.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 8 + // - Actual : 7 + // i.e. the X axis label flowed out of chart area. + assertXPath(pXmlDoc, "//textarray", 8); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf146272) +{ + createSwDoc(DATA_DIRECTORY, "tdf146272.odt"); + + uno::Reference xPicture(getShape(2), uno::UNO_QUERY); + uno::Reference xDrawing(getShape(1), uno::UNO_QUERY); + uno::Reference xFrame(xDrawing->getPropertyValue("TextBoxContent"), + uno::UNO_QUERY); + + CPPUNIT_ASSERT(xPicture); + CPPUNIT_ASSERT(xDrawing); + CPPUNIT_ASSERT(xFrame); + + const sal_uInt64 nPitureZorder = xPicture->getPropertyValue("ZOrder").get(); + const sal_uInt64 nDrawingZorder = xDrawing->getPropertyValue("ZOrder").get(); + const sal_uInt64 nFrameZorder = xFrame->getPropertyValue("ZOrder").get(); + + CPPUNIT_ASSERT_MESSAGE("Bad ZOrder!", nDrawingZorder < nFrameZorder); + CPPUNIT_ASSERT_MESSAGE("Bad ZOrder!", nFrameZorder < nPitureZorder); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf138773) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf138773.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + const sal_Int32 nFirstLabelLines + = getXPathContent(pXmlDoc, "count(//text[contains(text(),\"2000-01\")])").toInt32(); + + // This failed, if the first X axis label broke to multiple lines. + CPPUNIT_ASSERT_EQUAL(static_cast(1), nFirstLabelLines); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf124796) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf124796.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // This failed, if the minimum value of Y axis is not -10. + assertXPathContent( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[5]/text", + "-10"); + + // This failed, if the maximum value of Y axis is not 15. + assertXPathContent( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/push[1]/textarray[10]/text", + "15"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf72727) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf72727.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Without the fix in place, this test would have failed with + // - Expected: 1 + // - Actual : Series1 + assertXPathContent(pXmlDoc, "/metafile/push/push/push/push[3]/push/push/push/textarray[1]/text", + "1"); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/push[3]/push/push/push/textarray[2]/text", + "2"); + assertXPathContent(pXmlDoc, "/metafile/push/push/push/push[3]/push/push/push/textarray[3]/text", + "3"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf130969) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf130969.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // This failed, if the minimum value of Y axis is not 0.35781 + assertXPathContent( + pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[5]/text", "0.35781"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf40260) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf40260.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Without the fix in place, this test would have failed with + // - Expected: f(x) = 1.26510397865547E-06 x − 5.95245604996327E-12 + // - Actual : f(x) = 0 x − 0 + assertXPathContent( + pXmlDoc, "/metafile/push/push/push/push[3]/push/push/push/textarray[19]/text", + "f(x) = 1.26510397865547E-06 x " + OUStringChar(u'\x2212') + " 5.95245604996327E-12"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf129054) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf129054.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Test the size of diameter of Pie chart. + sal_Int32 nYTop + = getXPath(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[4]/polyline[1]/point[1]", + "y") + .toInt32(); + sal_Int32 nYBottom + = getXPath( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[4]/polyline[1]/point[31]", + "y") + .toInt32(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(4810, nYTop - nYBottom, 5); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf129173) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "testAreaChartNumberFormat.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Check the first data label of area chart. + assertXPathContent( + pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[22]/text", "56"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf134866) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf134866.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Check the data label of pie chart. + assertXPathContent( + pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[2]/text", "100%"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf137116) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf137116.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + sal_Int32 nX2 = getXPath(pXmlDoc, "//textarray[2]", "x").toInt32(); // second data label + sal_Int32 nX4 = getXPath(pXmlDoc, "//textarray[4]", "x").toInt32(); // fourth data label + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 694 + // - Actual : -225 + // - Delta : 100 + // i.e. the second data label appeared inside the pie slice. + CPPUNIT_ASSERT_DOUBLES_EQUAL(694, nX2 - nX4, 100); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf137154) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf137154.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + sal_Int32 nX1 = getXPath(pXmlDoc, "//textarray[1]", "x").toInt32(); // first data label + sal_Int32 nX4 = getXPath(pXmlDoc, "//textarray[4]", "x").toInt32(); // fourth data label + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 10865 + // - Actual : 10252 + // - Delta : 50 + // i.e. the first data label appeared too close to the pie. + CPPUNIT_ASSERT_DOUBLES_EQUAL(nX4, nX1, 50); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf138777) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "outside_long_data_label.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + const sal_Int32 nFirstLabelLines + = getXPathContent(pXmlDoc, "count(//text[contains(text(),\"really\")])").toInt32(); + + // This failed, if the first data label didn't break to multiple lines. + CPPUNIT_ASSERT_GREATER(static_cast(1), nFirstLabelLines); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf130031) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf130031.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + sal_Int32 nY = getXPath(pXmlDoc, "//textarray[11]", "y").toInt32(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 4339 + // - Actual : 2182 + // - Delta : 50 + // i.e. the data label appeared above the data point. + CPPUNIT_ASSERT_DOUBLES_EQUAL(4339, nY, 50); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf130242) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf130242.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + sal_Int32 nY = getXPath(pXmlDoc, "//textarray[11]", "y").toInt32(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 4958 + // - Actual : 3352 + // - Delta : 50 + // i.e. the data label appeared above the data point. + CPPUNIT_ASSERT_DOUBLES_EQUAL(4958, nY, 50); + + nY = getXPath(pXmlDoc, "//textarray[13]", "y").toInt32(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 3018 + // - Actual : 2343 + // - Delta : 50 + // i.e. the data label appeared above the data point. + CPPUNIT_ASSERT_DOUBLES_EQUAL(3018, nY, 50); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf134121) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "piechart_leaderline.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Check the custom leader line on pie chart. + assertXPath(pXmlDoc, "//polyline", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf138018) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf138018.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2 + // - Actual : 3 + // i.e. the leader line was visible. + assertXPath(pXmlDoc, "//polyline", 2); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf130380) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf130380.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + sal_Int32 nY = getXPath(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[1]/polypolygon/" + "polygon/point[1]", + "y") + .toInt32(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 6727 + // - Actual : 4411 + // - Delta : 50 + // i.e. the area chart shrank. + CPPUNIT_ASSERT_DOUBLES_EQUAL(6727, nY, 50); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf129095) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf129095.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // check the inner chart area (relative size) visibility with testing the X axis label + assertXPathContent(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray/text", + "Category 1"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf132956) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf132956.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // check the inner chart area (default size) visibility with testing the X axis label + assertXPathContent(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray/text", + "Category 1"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf137819) +{ + // Open the bugdoc and check if it went wrong + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf137819.fodt"); + CPPUNIT_ASSERT(pDoc); + + // Change the anchor if the textbox to As_char + uno::Reference xShapePropSet(getShape(1), uno::UNO_QUERY); + xShapePropSet->setPropertyValue( + "AnchorType", uno::Any(text::TextContentAnchorType::TextContentAnchorType_AS_CHARACTER)); + + // Make the layout xml dump after the change + auto pXml = parseLayoutDump(); + auto sTextRightSidePosition + = getXPath(pXml, "/root/page/body/txt[6]/anchored/fly/infos/bounds", "right"); + auto sShapeRightSidePosition + = getXPath(pXml, "/root/page/body/txt[6]/anchored/SwAnchoredDrawObject/bounds", "right"); + // Before the textframe did not follow the shape, now it supposed to + // so the right side of the shape must be greater than the right side of + // textframe: + CPPUNIT_ASSERT(sTextRightSidePosition.toInt32() < sShapeRightSidePosition.toInt32()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf122014) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf122014.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // This failed, if the chart title is aligned to left. + sal_Int32 nX1 = getXPath(pXmlDoc, "//textarray[13]", "x").toInt32(); + sal_Int32 nX2 = getXPath(pXmlDoc, "//textarray[14]", "x").toInt32(); + CPPUNIT_ASSERT_GREATER(nX1 + 100, nX2); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf134659) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf134659.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // This failed, if the axis label is aligned to left. + sal_Int32 nX1 = getXPath(pXmlDoc, "//textarray[1]", "x").toInt32(); + sal_Int32 nX2 = getXPath(pXmlDoc, "//textarray[2]", "x").toInt32(); + CPPUNIT_ASSERT_GREATER(nX1 + 250, nX2); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf134235) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf134235.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 14 + // - Actual : 13 + // i.e. the chart title flowed out of chart area. + assertXPath(pXmlDoc, "//textarray", 14); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf134676) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf134676.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 14 + // - Actual : 13 + // i.e. the X axis title didn't break to multiple lines. + assertXPath(pXmlDoc, "//textarray", 14); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf134146) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf134146.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + const sal_Int32 nTitleLines + = getXPathContent(pXmlDoc, "count(//text[contains(text(),\"Horizontal\")])").toInt32(); + + // Without the accompanying fix in place, this test would have failed. + // i.e. the Y axis title didn't break to multiple lines. + CPPUNIT_ASSERT_GREATER(static_cast(1), nTitleLines); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf136061) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf136061.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // This failed, if the custom text of data label is missing. + assertXPathContent(pXmlDoc, "//textarray[16]/text", "Customlabel"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf116925) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf116925.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[3]/textarray/text", + "hello"); + // This failed, text color was #000000. + assertXPath( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[3]/textcolor[@color='#ffffff']", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf117028) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf117028.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // The only polypolygon in the rendering result was the white background we + // want to avoid. + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polypolygon"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlNodes)); + xmlXPathFreeObject(pXmlObj); + + // Make sure the text is still rendered. + assertXPathContent(pXmlDoc, "//textarray/text", "Hello"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf106390) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf106390.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + sal_Int32 nBottom = getXPath(pXmlDoc, "//sectrectclipregion", "bottom").toInt32(); + + // No end point of line segments shall go below the bottom of the clipping area. + const OString sXPath = "//polyline/point[@y>" + OString::number(nBottom) + "]"; + + assertXPath(pXmlDoc, sXPath, 0); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTableExtrusion1) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "table-extrusion1.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + sal_Int32 nRight = getXPath(pXmlDoc, "//sectrectclipregion", "right").toInt32(); + sal_Int32 nLeft = static_cast(nRight * 0.95); + + // Expect table borders in right page margin. + const OString sXPath = "//polyline/point[@x>" + OString::number(nLeft) + " and @x<" + + OString::number(nRight) + "]"; + + assertXPath(pXmlDoc, sXPath, 4); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTableExtrusion2) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "table-extrusion2.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // End point position of the outer table. + sal_Int32 nX = getXPath(pXmlDoc, "(//polyline[1]/point)[2]", "x").toInt32(); + + // Do not allow inner table extrude outer table. + const OString sXPath = "//polyline/point[@x>" + OString::number(nX) + "]"; + + assertXPath(pXmlDoc, sXPath, 0); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf116848) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf116848.odt"); + // This resulted in a layout loop. + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf117245) +{ + createSwDoc(DATA_DIRECTORY, "tdf117245.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was 2, TabOverMargin did not use a single line when there was + // enough space for the text. + assertXPath(pXmlDoc, "/root/page/body/txt[1]/LineBreak", 1); + + // This was 2, same problem elsewhere due to code duplication. + assertXPath(pXmlDoc, "/root/page/body/txt[2]/LineBreak", 1); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf118672) +{ + createSwDoc(DATA_DIRECTORY, "tdf118672.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Check if we have hyphenation support, otherwise can't test SwHyphPortion. + uno::Reference xHyphenator = LinguMgr::GetHyphenator(); + if (!xHyphenator->hasLocale(lang::Locale("en", "US", OUString()))) + return; + + // This ended as "fol*1 2 3 4 5 6 7 8 9", i.e. "10con-" was moved to the next line. + assertXPath(pXmlDoc, "/root/page/body/txt[1]/LineBreak[1]", "Line", + "He heard quiet steps behind him. That didn't bode well. Who could be fol*1 2 " + "3 4 5 6 7 8 9 10con-"); + assertXPath(pXmlDoc, "/root/page/body/txt[1]/LineBreak[2]", "Line", "setetur"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf117923) +{ + createSwDoc(DATA_DIRECTORY, "tdf117923.doc"); + // Ensure that all text portions are calculated before testing. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwViewShell* pViewShell + = pTextDoc->GetDocShell()->GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell(); + CPPUNIT_ASSERT(pViewShell); + pViewShell->Reformat(); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Check that we actually test the line we need + assertXPathContent(pXmlDoc, "/root/page/body/tab/row/cell/txt[3]", "GHI GHI GHI GHI"); + assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/txt[3]/Special", "nType", + "PortionType::Number"); + assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/txt[3]/Special", "rText", "2."); + // The numbering height was 960. + assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/txt[3]/Special", "nHeight", "220"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf127606) +{ + createSwDoc(DATA_DIRECTORY, "tdf117923.docx"); + // Ensure that all text portions are calculated before testing. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwViewShell* pViewShell + = pTextDoc->GetDocShell()->GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell(); + CPPUNIT_ASSERT(pViewShell); + pViewShell->Reformat(); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // Check that we actually test the line we need + assertXPathContent(pXmlDoc, "/root/page/body/tab/row/cell/txt[3]", "GHI GHI GHI GHI"); + assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/txt[3]/Special", "nType", + "PortionType::Number"); + assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/txt[3]/Special", "rText", "2."); + // The numbering height was 960 in DOC format. + assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/txt[3]/Special", "nHeight", "220"); + + // tdf#127606: now it's possible to change formatting of numbering + // increase font size (220 -> 260) + dispatchCommand(mxComponent, ".uno:SelectAll", {}); + dispatchCommand(mxComponent, ".uno:Grow", {}); + pViewShell->Reformat(); + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/txt[3]/Special", "nHeight", "260"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf127118) +{ + createSwDoc(DATA_DIRECTORY, "tdf127118.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was Horizontal: merged cell split between pages didn't keep vertical writing direction + assertXPath(pXmlDoc, "/root/page[2]/body/tab/row[1]/cell[1]/txt[1]", "WritingMode", "VertBTLR"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf141220) +{ + createSwDoc(DATA_DIRECTORY, "tdf141220.docx"); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nShapeTop + = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds", "top").toInt32(); + sal_Int32 nTextBoxTop = getXPath(pXmlDoc, "//anchored/fly/infos/bounds", "top").toInt32(); + // Make sure the textbox stays inside the shape. + CPPUNIT_ASSERT_LESS(static_cast(15), nTextBoxTop - nShapeTop); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, TestTextBoxChangeViaUNO) +{ + CPPUNIT_ASSERT(createSwDoc(DATA_DIRECTORY, "TextBoxFrame.odt")); + // this file has a shape and a frame inside. Try to set up + // the frame for the shape as textbox. Before this was not + // implemented. This will be necessary for proper WPG import. + + CPPUNIT_ASSERT_EQUAL_MESSAGE("There must be a shape and a frame!", 2, getShapes()); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("This must be a custom shape!", + OUString("com.sun.star.drawing.CustomShape"), + getShape(1)->getShapeType()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("This must be a frame shape!", OUString("FrameShape"), + getShape(2)->getShapeType()); + + CPPUNIT_ASSERT_MESSAGE("This is not supposed to be a textbox!", + !uno::Reference(getShape(1), uno::UNO_QUERY_THROW) + ->getPropertyValue("TextBox") + .get()); + // Without the fix it will crash at this line: + CPPUNIT_ASSERT_MESSAGE("This is not supposed to be a textbox!", + !uno::Reference(getShape(1), uno::UNO_QUERY_THROW) + ->getPropertyValue("TextBoxContent") + .hasValue()); + + // So now set the frame as textbox for the shape! + uno::Reference(getShape(1), uno::UNO_QUERY_THROW) + ->setPropertyValue("TextBoxContent", uno::Any(uno::Reference( + getShape(2), uno::UNO_QUERY_THROW))); + + CPPUNIT_ASSERT_MESSAGE("This is supposed to be a textbox!", + uno::Reference(getShape(1), uno::UNO_QUERY_THROW) + ->getPropertyValue("TextBox") + .get()); + + CPPUNIT_ASSERT_MESSAGE("This is supposed to be a textbox!", + uno::Reference(getShape(1), uno::UNO_QUERY_THROW) + ->getPropertyValue("TextBoxContent") + .hasValue()); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf121509) +{ + auto pDoc = createSwDoc(DATA_DIRECTORY, "Tdf121509.odt"); + CPPUNIT_ASSERT(pDoc); + + // Get all shape/frame formats + auto vFrameFormats = pDoc->GetSpzFrameFormats(); + // Get the textbox + auto xTextFrame = SwTextBoxHelper::getUnoTextFrame(getShape(1)); + // Get The triangle + auto pTriangleShapeFormat = vFrameFormats->GetFormat(2); + CPPUNIT_ASSERT(xTextFrame); + CPPUNIT_ASSERT(pTriangleShapeFormat); + + // Get the position inside the textbox + auto xTextContentStart = xTextFrame->getText()->getStart(); + SwUnoInternalPaM aCursor(*pDoc); + CPPUNIT_ASSERT(sw::XTextRangeToSwPaM(aCursor, xTextContentStart)); + + // Put the triangle into the textbox + SwFormatAnchor aNewAnch(pTriangleShapeFormat->GetAnchor()); + aNewAnch.SetAnchor(aCursor.Start()); + CPPUNIT_ASSERT(pTriangleShapeFormat->SetFormatAttr(aNewAnch)); + + // Reload (docx) + auto aTemp = utl::TempFile(); + save("Office Open XML Text", aTemp); + + // The second part: check if the reloaded doc has flys inside a fly + uno::Reference xComponent + = loadFromDesktop(aTemp.GetURL(), "com.sun.star.text.TextDocument"); + uno::Reference xTextDoc(xComponent, uno::UNO_QUERY); + auto pTextDoc = dynamic_cast(xTextDoc.get()); + CPPUNIT_ASSERT(pTextDoc); + auto pSecondDoc = pTextDoc->GetDocShell()->GetDoc(); + auto pSecondFormats = pSecondDoc->GetSpzFrameFormats(); + + bool bFlyInFlyFound = false; + for (auto secondformat : *pSecondFormats) + { + auto& pNd = secondformat->GetAnchor().GetContentAnchor()->nNode.GetNode(); + if (pNd.FindFlyStartNode()) + { + // So there is a fly inside another -> problem. + bFlyInFlyFound = true; + break; + } + } + // Drop the tempfile + aTemp.CloseStream(); + + // With the fix this cannot be true, if it is, that means Word unable to read the file.. + CPPUNIT_ASSERT_MESSAGE("Corrupt exported docx file!", !bFlyInFlyFound); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf134685) +{ + createSwDoc(DATA_DIRECTORY, "tdf134685.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nWidth + = getXPath(pXmlDoc, "/root/page/body/tab/row[6]/cell[1]/infos/bounds", "width").toInt32(); + // This was 2223: the content was only partially visible according to the lost cell width + CPPUNIT_ASSERT_GREATER(static_cast(14000), nWidth); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf109077) +{ + createSwDoc(DATA_DIRECTORY, "tdf109077.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nShapeTop + = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds", "top").toInt32(); + sal_Int32 nTextBoxTop = getXPath(pXmlDoc, "//anchored/fly/infos/bounds", "top").toInt32(); + // This was 281: the top of the shape and its textbox should match, though + // tolerate differences <= 1px (about 15 twips). + CPPUNIT_ASSERT_LESS(static_cast(15), nTextBoxTop - nShapeTop); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testUserFieldTypeLanguage) +{ + // Set the system locale to German, the document will be English. + SvtSysLocaleOptions aOptions; + OUString sLocaleConfigString = aOptions.GetLanguageTag().getBcp47(); + aOptions.SetLocaleConfigString("de-DE"); + aOptions.Commit(); + comphelper::ScopeGuard g1([&aOptions, &sLocaleConfigString] { + aOptions.SetLocaleConfigString(sLocaleConfigString); + aOptions.Commit(); + }); + + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "user-field-type-language.fodt"); + SwViewShell* pViewShell = pDoc->getIDocumentLayoutAccess().GetCurrentViewShell(); + pViewShell->UpdateFields(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // This was "123,456.00", via a buggy 1234.56 -> 1234,56 -> 123456 -> + // 123,456.00 transform chain. + assertXPath(pXmlDoc, "/root/page/body/txt/Special[@nType='PortionType::Field']", "rText", + "1,234.56"); + + discardDumpedLayout(); + // Now change the system locale to English (before this was failing, 1234,56 -> 0.00) + aOptions.SetLocaleConfigString("en-GB"); + aOptions.Commit(); + comphelper::ScopeGuard g2([&aOptions, &sLocaleConfigString] { + aOptions.SetLocaleConfigString(sLocaleConfigString); + aOptions.Commit(); + }); + pViewShell->UpdateFields(); + pXmlDoc = parseLayoutDump(); + // We expect, that the field value is not changed. Otherwise there is a problem: + assertXPath(pXmlDoc, "/root/page/body/txt/Special[@nType='PortionType::Field']", "rText", + "1,234.56"); + discardDumpedLayout(); + // Now change the system locale to German + aOptions.SetLocaleConfigString("de-DE"); + aOptions.Commit(); + comphelper::ScopeGuard g3([&aOptions, &sLocaleConfigString] { + aOptions.SetLocaleConfigString(sLocaleConfigString); + aOptions.Commit(); + }); + pViewShell->UpdateFields(); + pXmlDoc = parseLayoutDump(); + // We expect, that the field value is not changed. Otherwise there is a problem: + assertXPath(pXmlDoc, "/root/page/body/txt/Special[@nType='PortionType::Field']", "rText", + "1,234.56"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf124261) +{ +#if !defined(_WIN32) && !defined(MACOSX) + // Make sure that pressing a key in a btlr cell frame causes an immediate, correct repaint. + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf124261.docx"); + SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + SwFrame* pPageFrame = pLayout->GetLower(); + CPPUNIT_ASSERT(pPageFrame->IsPageFrame()); + + SwFrame* pBodyFrame = pPageFrame->GetLower(); + CPPUNIT_ASSERT(pBodyFrame->IsBodyFrame()); + + SwFrame* pTabFrame = pBodyFrame->GetLower(); + CPPUNIT_ASSERT(pTabFrame->IsTabFrame()); + + SwFrame* pRowFrame = pTabFrame->GetLower(); + CPPUNIT_ASSERT(pRowFrame->IsRowFrame()); + + SwFrame* pCellFrame = pRowFrame->GetLower(); + CPPUNIT_ASSERT(pCellFrame->IsCellFrame()); + + SwFrame* pFrame = pCellFrame->GetLower(); + CPPUNIT_ASSERT(pFrame->IsTextFrame()); + + // Make sure that the text frame's area and the paint rectangle match. + // Without the accompanying fix in place, this test would have failed with 'Expected: 1721; + // Actual: 1547', i.e. an area other than the text frame was invalidated for a single-line + // paragraph. + SwTextFrame* pTextFrame = static_cast(pFrame); + SwRect aRect = pTextFrame->GetPaintSwRect(); + CPPUNIT_ASSERT_EQUAL(pTextFrame->getFrameArea().Top(), aRect.Top()); +#endif +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf135991) +{ + createSwDoc(DATA_DIRECTORY, "tdf135991.odt"); + auto pDump = parseLayoutDump(); + // There used to be negative values that made the column frames invisible. + assertXPath(pDump, "//bounds[@top<0]", 0); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf150642) +{ + createSwDoc(DATA_DIRECTORY, "tdf150642.odt"); + auto pDump = parseLayoutDump(); + // There used to be negative values that made the cell frame invisible. + assertXPath(pDump, "//bounds[@left<0]", 0); + assertXPath(pDump, "//bounds[@right<0]", 0); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf152085) +{ + createSwDoc(DATA_DIRECTORY, "tdf152085-section-tblr.odt"); + auto pDump = parseLayoutDump(); + sal_Int32 nSectionHeight + = getXPath(pDump, "//section/infos/bounds", "bottom").toInt32(); // was 8391 + sal_Int32 nColumnHeight + = getXPath(pDump, "(//column/infos/bounds)[2]", "bottom").toInt32(); // was 16216 + CPPUNIT_ASSERT_MESSAGE("The column in a TBRL page should be shorter than the section.", + nColumnHeight <= nSectionHeight); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf152031) +{ + createSwDoc(DATA_DIRECTORY, "tdf152031-stair.odt"); + + // reproduce the bug by shrinking the table width. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + // Shrink table width from 5" to 4" + sal_Int32 nWidth = getProperty(xTable, "Width") * 4 / 5; + + uno::Reference xSet(xTable, uno::UNO_QUERY); + xSet->setPropertyValue("Width", uno::Any(nWidth)); + + auto pDump = parseLayoutDump(); + // There was a stair effect after change the table size. + sal_Int32 nLeft_Row1 = getXPath(pDump, "(//row/infos/bounds)[1]", "left").toInt32(); + sal_Int32 nLeft_Row2 = getXPath(pDump, "(//row/infos/bounds)[2]", "left").toInt32(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("left values of SwRowFrames should be consistent.", nLeft_Row1, + nLeft_Row2); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/mailmerge/data/10-testing-addresses-writer-merged.odt b/sw/qa/extras/mailmerge/data/10-testing-addresses-writer-merged.odt new file mode 100644 index 000000000..e61d9fc04 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/10-testing-addresses-writer-merged.odt differ diff --git a/sw/qa/extras/mailmerge/data/10-testing-addresses-writer.odt b/sw/qa/extras/mailmerge/data/10-testing-addresses-writer.odt new file mode 100644 index 000000000..40b61eda3 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/10-testing-addresses-writer.odt differ diff --git a/sw/qa/extras/mailmerge/data/10-testing-addresses.ods b/sw/qa/extras/mailmerge/data/10-testing-addresses.ods new file mode 100644 index 000000000..6792da491 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/10-testing-addresses.ods differ diff --git a/sw/qa/extras/mailmerge/data/4_v01.ods b/sw/qa/extras/mailmerge/data/4_v01.ods new file mode 100644 index 000000000..ffbf33bc2 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/4_v01.ods differ diff --git a/sw/qa/extras/mailmerge/data/5-with-blanks.ods b/sw/qa/extras/mailmerge/data/5-with-blanks.ods new file mode 100644 index 000000000..722f74830 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/5-with-blanks.ods differ diff --git a/sw/qa/extras/mailmerge/data/bookmarkcondition.fodt b/sw/qa/extras/mailmerge/data/bookmarkcondition.fodt new file mode 100644 index 000000000..0f9d5a90b --- /dev/null +++ b/sw/qa/extras/mailmerge/data/bookmarkcondition.fodt @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In den Bergen war es anstrengend. + + + + In Barcelona war es schön. + + + + In Paris war es erlebnisreich. + + + + Mein Urlaub war + + anstrengend + + + schön + + + erlebnisreich + + . + + + + + + diff --git a/sw/qa/extras/mailmerge/data/bookmarkcondition.ods b/sw/qa/extras/mailmerge/data/bookmarkcondition.ods new file mode 100644 index 000000000..463781ed5 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/bookmarkcondition.ods differ diff --git a/sw/qa/extras/mailmerge/data/db_pagecounttest.ods b/sw/qa/extras/mailmerge/data/db_pagecounttest.ods new file mode 100644 index 000000000..4b9f90ec9 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/db_pagecounttest.ods differ diff --git a/sw/qa/extras/mailmerge/data/empty.odt b/sw/qa/extras/mailmerge/data/empty.odt new file mode 100644 index 000000000..311cb06e5 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/empty.odt differ diff --git a/sw/qa/extras/mailmerge/data/grabbagtest.docx b/sw/qa/extras/mailmerge/data/grabbagtest.docx new file mode 100644 index 000000000..4b40f1fb4 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/grabbagtest.docx differ diff --git a/sw/qa/extras/mailmerge/data/linked-labels.odt b/sw/qa/extras/mailmerge/data/linked-labels.odt new file mode 100644 index 000000000..a89fd92b1 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/linked-labels.odt differ diff --git a/sw/qa/extras/mailmerge/data/linked-with-condition.odt b/sw/qa/extras/mailmerge/data/linked-with-condition.odt new file mode 100644 index 000000000..17fefa29b Binary files /dev/null and b/sw/qa/extras/mailmerge/data/linked-with-condition.odt differ diff --git a/sw/qa/extras/mailmerge/data/missing-default-line-color.ott b/sw/qa/extras/mailmerge/data/missing-default-line-color.ott new file mode 100644 index 000000000..dad5a7bed Binary files /dev/null and b/sw/qa/extras/mailmerge/data/missing-default-line-color.ott differ diff --git a/sw/qa/extras/mailmerge/data/multiple-page-anchored-draws.odt b/sw/qa/extras/mailmerge/data/multiple-page-anchored-draws.odt new file mode 100644 index 000000000..55a04364f Binary files /dev/null and b/sw/qa/extras/mailmerge/data/multiple-page-anchored-draws.odt differ diff --git a/sw/qa/extras/mailmerge/data/one-empty-address.ods b/sw/qa/extras/mailmerge/data/one-empty-address.ods new file mode 100644 index 000000000..abffed956 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/one-empty-address.ods differ diff --git a/sw/qa/extras/mailmerge/data/onecell.xlsx b/sw/qa/extras/mailmerge/data/onecell.xlsx new file mode 100644 index 000000000..972f6b3c5 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/onecell.xlsx differ diff --git a/sw/qa/extras/mailmerge/data/pagecounttest.ott b/sw/qa/extras/mailmerge/data/pagecounttest.ott new file mode 100644 index 000000000..d7f63419c Binary files /dev/null and b/sw/qa/extras/mailmerge/data/pagecounttest.ott differ diff --git a/sw/qa/extras/mailmerge/data/section_ps.odt b/sw/qa/extras/mailmerge/data/section_ps.odt new file mode 100644 index 000000000..dd9704845 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/section_ps.odt differ diff --git a/sw/qa/extras/mailmerge/data/sections_first_last.odt b/sw/qa/extras/mailmerge/data/sections_first_last.odt new file mode 100644 index 000000000..5a92adb08 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/sections_first_last.odt differ diff --git a/sw/qa/extras/mailmerge/data/simple-mail-merge-2pages.odt b/sw/qa/extras/mailmerge/data/simple-mail-merge-2pages.odt new file mode 100644 index 000000000..c0a86ae3e Binary files /dev/null and b/sw/qa/extras/mailmerge/data/simple-mail-merge-2pages.odt differ diff --git a/sw/qa/extras/mailmerge/data/simple-mail-merge.odt b/sw/qa/extras/mailmerge/data/simple-mail-merge.odt new file mode 100644 index 000000000..34637d4ef Binary files /dev/null and b/sw/qa/extras/mailmerge/data/simple-mail-merge.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf118113.ods b/sw/qa/extras/mailmerge/data/tdf118113.ods new file mode 100644 index 000000000..1d7e3cfb5 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf118113.ods differ diff --git a/sw/qa/extras/mailmerge/data/tdf118113.odt b/sw/qa/extras/mailmerge/data/tdf118113.odt new file mode 100644 index 000000000..89e7bc304 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf118113.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf118845.fodt b/sw/qa/extras/mailmerge/data/tdf118845.fodt new file mode 100644 index 000000000..64a5180da --- /dev/null +++ b/sw/qa/extras/mailmerge/data/tdf118845.fodt @@ -0,0 +1,28 @@ + + + + + + 4_v01 + Tabelle1 + 0 + true + + + + + + + + + + + + + Dear Mrs. <Nachname>, + Dear Mr. <Nachname>, + To whom it may concern, + + + + \ No newline at end of file diff --git a/sw/qa/extras/mailmerge/data/tdf125522.odt b/sw/qa/extras/mailmerge/data/tdf125522.odt new file mode 100644 index 000000000..265d8fca7 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf125522.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf128148.odt b/sw/qa/extras/mailmerge/data/tdf128148.odt new file mode 100644 index 000000000..08b283fc6 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf128148.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf35798-legacy.fodt b/sw/qa/extras/mailmerge/data/tdf35798-legacy.fodt new file mode 100644 index 000000000..c6dd8661e --- /dev/null +++ b/sw/qa/extras/mailmerge/data/tdf35798-legacy.fodt @@ -0,0 +1,37 @@ + + + + 2014-10-22T13:27:38.6731542792018-05-19T13:45:25.911000000PT6M54S4LibreOfficeDev/6.1.0.0.alpha1$Windows_X86_64 LibreOffice_project/dd1ab570d5791145c10a4e8f28b048ec8f70edb0 + + + 5-with-blanks + names + 0 + + + + + + + + + + + + + + + + + + Heading + Title: <Title> + First Name: <First Name> + Last Name: <Last Name> + Title: <Title>First Name: <First Name> + First Name: <First Name>Last Name: <Last Name> + Title: <Title>First Name: <First Name>Last Name: <Last Name> + Trailing text + + + \ No newline at end of file diff --git a/sw/qa/extras/mailmerge/data/tdf35798-legacy.odt b/sw/qa/extras/mailmerge/data/tdf35798-legacy.odt new file mode 100644 index 000000000..fe37e5e96 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf35798-legacy.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf35798-new.fodt b/sw/qa/extras/mailmerge/data/tdf35798-new.fodt new file mode 100644 index 000000000..8de149cab --- /dev/null +++ b/sw/qa/extras/mailmerge/data/tdf35798-new.fodt @@ -0,0 +1,38 @@ + + + + 2014-10-22T13:27:38.6731542792018-05-19T13:45:25.911000000PT6M54S4LibreOfficeDev/6.1.0.0.alpha1$Windows_X86_64 LibreOffice_project/dd1ab570d5791145c10a4e8f28b048ec8f70edb0 + + + 5-with-blanks + names + 0 + true + + + + + + + + + + + + + + + + + + Heading + Title: <Title> + First Name: <First Name> + Last Name: <Last Name> + Title: <Title>First Name: <First Name> + First Name: <First Name>Last Name: <Last Name> + Title: <Title>First Name: <First Name>Last Name: <Last Name> + Trailing text + + + \ No newline at end of file diff --git a/sw/qa/extras/mailmerge/data/tdf35798-new.odt b/sw/qa/extras/mailmerge/data/tdf35798-new.odt new file mode 100644 index 000000000..84323b96e Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf35798-new.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf62364.odt b/sw/qa/extras/mailmerge/data/tdf62364.odt new file mode 100644 index 000000000..70def3730 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf62364.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf78611.odt b/sw/qa/extras/mailmerge/data/tdf78611.odt new file mode 100644 index 000000000..3eb29ba40 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf78611.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf81750.odt b/sw/qa/extras/mailmerge/data/tdf81750.odt new file mode 100644 index 000000000..830db24e9 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf81750.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf89214.odt b/sw/qa/extras/mailmerge/data/tdf89214.odt new file mode 100644 index 000000000..70def3730 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf89214.odt differ diff --git a/sw/qa/extras/mailmerge/data/tdf92623.odt b/sw/qa/extras/mailmerge/data/tdf92623.odt new file mode 100644 index 000000000..3dea8317c Binary files /dev/null and b/sw/qa/extras/mailmerge/data/tdf92623.odt differ diff --git a/sw/qa/extras/mailmerge/data/writer-mail-merge.odt b/sw/qa/extras/mailmerge/data/writer-mail-merge.odt new file mode 100644 index 000000000..f3d42f6b4 Binary files /dev/null and b/sw/qa/extras/mailmerge/data/writer-mail-merge.odt differ diff --git a/sw/qa/extras/mailmerge/data/writer-merged-mail-merge.odt b/sw/qa/extras/mailmerge/data/writer-merged-mail-merge.odt new file mode 100644 index 000000000..8ec76852a Binary files /dev/null and b/sw/qa/extras/mailmerge/data/writer-merged-mail-merge.odt differ diff --git a/sw/qa/extras/mailmerge/mailmerge.cxx b/sw/qa/extras/mailmerge/mailmerge.cxx new file mode 100644 index 000000000..a9e2c829c --- /dev/null +++ b/sw/qa/extras/mailmerge/mailmerge.cxx @@ -0,0 +1,1361 @@ +/* -*- 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 + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * Maps database URIs to the registered database names for quick lookups + */ +typedef std::map DBuriMap; +static DBuriMap aDBuriMap; + +class MMTest : public SwModelTestBase +{ +public: + MMTest(); + + virtual void tearDown() override + { + if (mxMMComponent.is()) + { + if (mnCurOutputType == text::MailMergeType::SHELL) + { + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + pTextDoc->GetDocShell()->DoClose(); + } + else + mxMMComponent->dispose(); + } + if (mxCurResultSet.is()) + { + css::uno::Reference( + mxCurResultSet, css::uno::UNO_QUERY_THROW)->dispose(); + } + SwModelTestBase::tearDown(); + } + + /** + * Helper func used by each unit test to test the 'mail merge' code. + * + * Registers the data source, loads the original file as reference, + * initializes the mail merge job and its default argument sequence. + * + * The 'verify' method actually has to execute the mail merge by + * calling executeMailMerge() after modifying the job arguments. + */ + void executeMailMergeTest( const char* filename, const char* datasource, const char* tablename, + char const*const filter, int selection, const char* column ) + { + maMMtestFilename = filename; + header(); + preTest(filename); + + utl::TempFile aTempDir(nullptr, true); + aTempDir.EnableKillingFile(); + const OUString aWorkDir = aTempDir.GetURL(); + const OUString aURI( m_directories.getURLFromSrc(mpTestDocumentPath) + OUString::createFromAscii(datasource) ); + const OUString aPrefix = column ? OUString::createFromAscii( column ) : "LOMM_"; + const OUString aDBName = registerDBsource( aURI, aWorkDir ); + initMailMergeJobAndArgs( filename, tablename, aDBName, aPrefix, aWorkDir, filter, selection, column != nullptr ); + + verify(); + finish(); + + mnCurOutputType = 0; + } + + OUString registerDBsource( const OUString &aURI, const OUString &aWorkDir ) + { + OUString aDBName; + DBuriMap::const_iterator pos = aDBuriMap.find( aURI ); + if (pos == aDBuriMap.end()) + { + aDBName = SwDBManager::LoadAndRegisterDataSource( aURI, &aWorkDir ); + aDBuriMap.insert( std::pair< OUString, OUString >( aURI, aDBName ) ); + std::cout << "New datasource name: '" << aDBName << "'" << std::endl; + } + else + { + aDBName = pos->second; + std::cout << "Old datasource name: '" << aDBName << "'" << std::endl; + } + CPPUNIT_ASSERT(!aDBName.isEmpty()); + return aDBName; + } + + uno::Reference< sdbc::XRowSet > getXResultFromDataset( const char* tablename, const OUString &aDBName ) + { + uno::Reference< sdbc::XRowSet > xCurResultSet; + uno::Reference< uno::XInterface > xInstance = getMultiServiceFactory()->createInstance( "com.sun.star.sdb.RowSet" ); + uno::Reference< beans::XPropertySet > xRowSetPropSet( xInstance, uno::UNO_QUERY ); + assert( xRowSetPropSet.is() && "failed to get XPropertySet interface from RowSet" ); + if (xRowSetPropSet.is()) + { + xRowSetPropSet->setPropertyValue( "DataSourceName", uno::Any( aDBName ) ); + xRowSetPropSet->setPropertyValue( "Command", uno::Any( OUString::createFromAscii(tablename) ) ); + xRowSetPropSet->setPropertyValue( "CommandType", uno::Any( sdb::CommandType::TABLE ) ); + + uno::Reference< sdbc::XRowSet > xRowSet( xInstance, uno::UNO_QUERY ); + if (xRowSet.is()) + xRowSet->execute(); // build ResultSet from properties + xCurResultSet = xRowSet; + assert( xCurResultSet.is() && "failed to build ResultSet" ); + } + return xCurResultSet; + } + + void initMailMergeJobAndArgs( const char* filename, const char* tablename, const OUString &aDBName, + const OUString &aPrefix, const OUString &aWorkDir, + char const*const filter, int nDataSets, + const bool bPrefixIsColumn ) + { + uno::Reference< task::XJob > xJob( getMultiServiceFactory()->createInstance( "com.sun.star.text.MailMerge" ), uno::UNO_QUERY_THROW ); + mxJob.set( xJob ); + + mMMargs.reserve( 15 ); + + mMMargs.emplace_back( UNO_NAME_OUTPUT_TYPE, uno::Any( filter ? text::MailMergeType::FILE : text::MailMergeType::SHELL ) ); + mMMargs.emplace_back( UNO_NAME_DOCUMENT_URL, uno::Any( + ( OUString( m_directories.getURLFromSrc(mpTestDocumentPath) + OUString::createFromAscii(filename)) ) ) ); + mMMargs.emplace_back( UNO_NAME_DATA_SOURCE_NAME, uno::Any( aDBName ) ); + mMMargs.emplace_back( UNO_NAME_OUTPUT_URL, uno::Any( aWorkDir ) ); + if (filter) + { + mMMargs.emplace_back( UNO_NAME_FILE_NAME_PREFIX, uno::Any( aPrefix ) ); + mMMargs.emplace_back(UNO_NAME_SAVE_FILTER, uno::Any(OUString::createFromAscii(filter))); + } + + if (bPrefixIsColumn) + mMMargs.emplace_back( UNO_NAME_FILE_NAME_FROM_COLUMN, uno::Any( true ) ); + + if (tablename) + { + mMMargs.emplace_back( UNO_NAME_DAD_COMMAND_TYPE, uno::Any( sdb::CommandType::TABLE ) ); + mMMargs.emplace_back( UNO_NAME_DAD_COMMAND, uno::Any( OUString::createFromAscii(tablename) ) ); + } + + if (nDataSets > 0) + { + mxCurResultSet = getXResultFromDataset( tablename, aDBName ); + uno::Reference< sdbcx::XRowLocate > xCurRowLocate( mxCurResultSet, uno::UNO_QUERY ); + mMMargs.emplace_back( UNO_NAME_RESULT_SET, uno::Any( mxCurResultSet ) ); + std::vector< uno::Any > vResult; + vResult.reserve( nDataSets ); + sal_Int32 i; + for (i = 0, mxCurResultSet->first(); i < nDataSets; i++, mxCurResultSet->next()) + { + vResult.emplace_back( xCurRowLocate->getBookmark() ); + } + mMMargs.emplace_back( UNO_NAME_SELECTION, uno::Any( comphelper::containerToSequence(vResult) ) ); + } + + } + + void executeMailMerge( bool bDontLoadResult = false ) + { + const uno::Sequence< beans::NamedValue > aSeqMailMergeArgs = comphelper::containerToSequence( mMMargs ); + uno::Any res = mxJob->execute( aSeqMailMergeArgs ); + + bool bOk = true; + bool bMMFilenameFromColumn = false; + + for (const beans::NamedValue& rArgument : aSeqMailMergeArgs) { + const OUString &rName = rArgument.Name; + const uno::Any &rValue = rArgument.Value; + + // all error checking was already done by the MM job execution + if (rName == UNO_NAME_OUTPUT_URL) + bOk &= rValue >>= msMailMergeOutputURL; + else if (rName == UNO_NAME_FILE_NAME_PREFIX) + bOk &= rValue >>= msMailMergeOutputPrefix; + else if (rName == UNO_NAME_OUTPUT_TYPE) + bOk &= rValue >>= mnCurOutputType; + else if (rName == UNO_NAME_FILE_NAME_FROM_COLUMN) + bOk &= rValue >>= bMMFilenameFromColumn; + else if (rName == UNO_NAME_DOCUMENT_URL) + bOk &= rValue >>= msMailMergeDocumentURL; + } + + CPPUNIT_ASSERT(bOk); + + // MM via UNO just works with file names. If we load the file on + // Windows before MM uses it, MM won't work, as it's already open. + // Don't move the load before the mail merge execution! + // (see gb_CppunitTest_use_instdir_configuration) + load(mpTestDocumentPath, maMMtestFilename); + + if (mnCurOutputType == text::MailMergeType::SHELL) + { + CPPUNIT_ASSERT(res >>= mxMMComponent); + CPPUNIT_ASSERT(mxMMComponent.is()); + } + else + { + CPPUNIT_ASSERT_EQUAL(uno::Any(true), res); + if( !bMMFilenameFromColumn && !bDontLoadResult ) + loadMailMergeDocument( 0 ); + } + } + + /** + * Like parseExport(), but for given mail merge document. + */ + xmlDocUniquePtr parseMailMergeExport(const OUString& rStreamName) + { + if (mnCurOutputType != text::MailMergeType::FILE) + return nullptr; + + OUString name = msMailMergeOutputPrefix + OUString::number( 0 ) + ".odt"; + return parseExportInternal( msMailMergeOutputURL + "/" + name, rStreamName ); + } + + void loadMailMergeDocument( const OUString &filename ) + { + assert( mnCurOutputType == text::MailMergeType::FILE ); + if (mxComponent.is()) + mxComponent->dispose(); + // Output name early, so in the case of a hang, the name of the hanging input file is visible. + std::cout << filename << ","; + mnStartTime = osl_getGlobalTimer(); + mxComponent = loadFromDesktop(msMailMergeOutputURL + "/" + filename, "com.sun.star.text.TextDocument"); + OString name2 = OUStringToOString( filename, RTL_TEXTENCODING_UTF8 ); + discardDumpedLayout(); + if (mustCalcLayoutOf(name2.getStr())) + calcLayout(); + } + + /** + Loads number-th document from mail merge. Requires file output from mail merge. + */ + void loadMailMergeDocument(int number, char const*const ext = ".odt") + { + OUString name; + if (!msMailMergeOutputPrefix.isEmpty()) + name = msMailMergeOutputPrefix; + else + { + INetURLObject aURLObj; + aURLObj.SetSmartProtocol( INetProtocol::File ); + aURLObj.SetSmartURL( msMailMergeDocumentURL ); + name = aURLObj.GetBase(); + } + name += OUString::number(number) + OStringToOUString(std::string_view(ext, strlen(ext)), RTL_TEXTENCODING_ASCII_US); + loadMailMergeDocument( name ); + } + + /** + Resets currently opened layout of the original template, + and creates the layout of the document with N mails inside + (result run with text::MailMergeType::SHELL) + */ + void dumpMMLayout() + { + mpXmlBuffer = xmlBufferPtr(); + dumpLayout(mxMMComponent); + } + +protected: + // Returns page number of the first page of a MM document inside the large MM document (used in the SHELL case). + int documentStartPageNumber( int document ) const; + + uno::Reference< css::task::XJob > mxJob; + std::vector< beans::NamedValue > mMMargs; + OUString msMailMergeDocumentURL; + OUString msMailMergeOutputURL; + OUString msMailMergeOutputPrefix; + sal_Int16 mnCurOutputType; + uno::Reference< lang::XComponent > mxMMComponent; + uno::Reference< sdbc::XRowSet > mxCurResultSet; + const char* maMMtestFilename; +}; + +#define DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, filter, BaseClass, selection, column) \ + class TestName : public BaseClass { \ + protected: \ + virtual OUString getTestName() override { return #TestName; } \ + public: \ + CPPUNIT_TEST_SUITE(TestName); \ + CPPUNIT_TEST(MailMerge); \ + CPPUNIT_TEST_SUITE_END(); \ + \ + void MailMerge() { \ + executeMailMergeTest(filename, datasource, tablename, filter, selection, column); \ + } \ + void verify() override; \ + }; \ + CPPUNIT_TEST_SUITE_REGISTRATION(TestName); \ + void TestName::verify() + +// Will generate the resulting document in mxMMDocument. +#define DECLARE_SHELL_MAILMERGE_TEST(TestName, filename, datasource, tablename) \ + DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, nullptr, MMTest, 0, nullptr) + +// Will generate documents as files, use loadMailMergeDocument(). +#define DECLARE_FILE_MAILMERGE_TEST(TestName, filename, datasource, tablename) \ + DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, "writer8", MMTest, 0, nullptr) + +#define DECLARE_SHELL_MAILMERGE_TEST_SELECTION(TestName, filename, datasource, tablename, selection) \ + DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, nullptr, MMTest, selection, nullptr) + +#define DECLARE_FILE_MAILMERGE_TEST_COLUMN(TestName, filename, datasource, tablename, column) \ + DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, "writer8", MMTest, 0, column) + +int MMTest::documentStartPageNumber( int document ) const +{ // See documentStartPageNumber() . + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* shell = pTextDoc->GetDocShell()->GetWrtShell(); + IDocumentMarkAccess* marks = shell->GetDoc()->getIDocumentMarkAccess(); + // Unfortunately, the pages are marked using UNO bookmarks, which have internals names, so they cannot be referred to by their names. + // Assume that there are no other UNO bookmarks than the ones used by mail merge, and that they are in the sorted order. + IDocumentMarkAccess::const_iterator_t mark; + int pos = 0; + for( mark = marks->getAllMarksBegin(); mark != marks->getAllMarksEnd() && pos < document; ++mark ) + { + if( IDocumentMarkAccess::GetType( **mark ) == IDocumentMarkAccess::MarkType::UNO_BOOKMARK ) + ++pos; + } + CPPUNIT_ASSERT_EQUAL(document, pos); + sal_uInt16 page, dummy; + shell->Push(); + shell->GotoMark( *mark ); + shell->GetPageNum( page, dummy ); + shell->Pop(SwCursorShell::PopMode::DeleteCurrent); + return page; +} + +MMTest::MMTest() + : SwModelTestBase("/sw/qa/extras/mailmerge/data/", "writer8") + , mnCurOutputType(0) + , maMMtestFilename(nullptr) +{ +} + +DECLARE_SHELL_MAILMERGE_TEST(testMultiPageAnchoredDraws, "multiple-page-anchored-draws.odt", "4_v01.ods", "Tabelle1") +{ + executeMailMerge(); + + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + sal_uInt16 nPhysPages = pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(8), nPhysPages); + + uno::Reference xDrawPageSupplier(mxMMComponent, uno::UNO_QUERY); + uno::Reference xDraws = xDrawPageSupplier->getDrawPage(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(8), xDraws->getCount()); + + std::set pages; + uno::Reference xPropertySet; + + for (sal_Int32 i = 0; i < xDraws->getCount(); i++) + { + xPropertySet.set(xDraws->getByIndex(i), uno::UNO_QUERY); + + text::TextContentAnchorType nAnchorType; + CPPUNIT_ASSERT(xPropertySet->getPropertyValue( UNO_NAME_ANCHOR_TYPE ) >>= nAnchorType); + CPPUNIT_ASSERT_EQUAL( text::TextContentAnchorType_AT_PAGE, nAnchorType ); + + sal_uInt16 nAnchorPageNo = {}; + CPPUNIT_ASSERT(xPropertySet->getPropertyValue( UNO_NAME_ANCHOR_PAGE_NO ) >>= nAnchorPageNo); + // are all shapes are on different page numbers? + CPPUNIT_ASSERT(pages.insert(nAnchorPageNo).second); + } +} + +DECLARE_FILE_MAILMERGE_TEST(testMissingDefaultLineColor, "missing-default-line-color.ott", "one-empty-address.ods", "one-empty-address") +{ + executeMailMerge(); + // The document was created by LO version which didn't write out the default value for line color + // (see XMLGraphicsDefaultStyle::SetDefaults()). + uno::Reference xPropertySet(getShape(5), uno::UNO_QUERY); + // Lines do not have a line color. + CPPUNIT_ASSERT( !xPropertySet->getPropertySetInfo()->hasPropertyByName( "LineColor" )); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + uno::Reference< lang::XMultiServiceFactory > xFact( mxComponent, uno::UNO_QUERY ); + uno::Reference< beans::XPropertySet > xDefaults( xFact->createInstance( "com.sun.star.drawing.Defaults" ), uno::UNO_QUERY ); + CPPUNIT_ASSERT( xDefaults.is()); + uno::Reference< beans::XPropertySetInfo > xInfo( xDefaults->getPropertySetInfo()); + CPPUNIT_ASSERT( xInfo->hasPropertyByName( "LineColor" )); + Color lineColor; + xDefaults->getPropertyValue( "LineColor" ) >>= lineColor; + // And the default value is black (wasn't copied properly by mailmerge). + CPPUNIT_ASSERT_EQUAL( COL_BLACK, lineColor ); + // And check that the resulting file has the proper default. + xmlDocUniquePtr pXmlDoc = parseMailMergeExport( "styles.xml" ); + CPPUNIT_ASSERT_EQUAL( OUString( "graphic" ), getXPath(pXmlDoc, "/office:document-styles/office:styles/style:default-style[1]", "family")); + CPPUNIT_ASSERT_EQUAL( OUString( "#000000" ), getXPath(pXmlDoc, "/office:document-styles/office:styles/style:default-style[1]/style:graphic-properties", "stroke-color")); +} + +DECLARE_FILE_MAILMERGE_TEST(testSimpleMailMerge, "simple-mail-merge.odt", "10-testing-addresses.ods", "testing-addresses") +{ + executeMailMerge(); + for( int doc = 0; + doc < 10; + ++doc ) + { + loadMailMergeDocument( doc ); + CPPUNIT_ASSERT_EQUAL( 1, getPages()); + CPPUNIT_ASSERT_EQUAL( OUString( "Fixed text." ), getRun( getParagraph( 1 ), 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "lastname" + OUString::number( doc + 1 )), getRun( getParagraph( 2 ), 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "Another fixed text." ), getRun( getParagraph( 3 ), 1 )->getString()); + } +} + +DECLARE_FILE_MAILMERGE_TEST(testWriterDataSource, "writer-mail-merge.odt", "10-testing-addresses-writer.odt", "testing-addresses-writer") +{ + // This failed as the .odt data source was mapped to the jdbc: protocol. + executeMailMerge(); + for (int doc = 0; doc < 10; ++doc) + { + loadMailMergeDocument(doc); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(OUString("Fixed text."), getRun(getParagraph(1), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("lastname" + OUString::number(doc + 1)), getRun(getParagraph(2), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("Another fixed text."), getRun(getParagraph(3), 1)->getString()); + } +} + +DECLARE_FILE_MAILMERGE_TEST(testWriterMergedDataSource, "writer-merged-mail-merge.odt", "10-testing-addresses-writer-merged.odt", "testing-addresses-writer-merged") +{ + // This failed with com.sun.star.lang.IndexOutOfBoundsException, leading to + // a crash, as the last row had merged cells in + // 10-testing-addresses-writer-merged.odt. + executeMailMerge(); + for (int doc = 0; doc < 10; ++doc) + { + loadMailMergeDocument(doc); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(OUString("Fixed text."), getRun(getParagraph(1), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("lastname" + OUString::number(doc + 1)), getRun(getParagraph(2), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("Another fixed text."), getRun(getParagraph(3), 1)->getString()); + } +} + +DECLARE_FILE_MAILMERGE_TEST(test2Pages, "simple-mail-merge-2pages.odt", "10-testing-addresses.ods", "testing-addresses") +{ + executeMailMerge(); + for( int doc = 0; + doc < 10; + ++doc ) + { + loadMailMergeDocument( doc ); + OUString lastname = "lastname" + OUString::number( doc + 1 ); + OUString firstname = "firstname" + OUString::number( doc + 1 ); + CPPUNIT_ASSERT_EQUAL( 2, getPages()); + CPPUNIT_ASSERT_EQUAL( OUString( "Fixed text." ), getRun( getParagraph( 1 ), 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( lastname, getRun( getParagraph( 2 ), 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "Another fixed text." ), getRun( getParagraph( 3 ), 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString(), getRun( getParagraph( 4 ), 1 )->getString()); // empty para at the end of page 1 + CPPUNIT_ASSERT_EQUAL( OUString( "Second page." ), getRun( getParagraph( 5 ), 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( firstname, getRun( getParagraph( 6 ), 1 )->getString()); + // Also verify the layout. + CPPUNIT_ASSERT_EQUAL( lastname, parseDump("/root/page[1]/body/txt[2]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL( OUString( "Fixed text." ), parseDump("/root/page[1]/body/txt[1]", "")); + CPPUNIT_ASSERT_EQUAL( OUString(), parseDump("/root/page[1]/body/txt[4]", "")); + CPPUNIT_ASSERT_EQUAL( OUString( "Second page." ), parseDump("/root/page[2]/body/txt[1]", "")); + CPPUNIT_ASSERT_EQUAL( firstname, parseDump("/root/page[2]/body/txt[2]/Special", "rText")); + } +} + +DECLARE_SHELL_MAILMERGE_TEST(testPageBoundariesSimpleMailMerge, "simple-mail-merge.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // This is like the test above, but this one uses the create-single-document-containing-everything-generated approach, + // and verifies that boundaries of the generated sub-documents are correct inside that document. + // These boundaries are done using "documentStartPageNumber" UNO bookmarks (see also + // documentStartPageNumber() ). + executeMailMerge(); + // Here getPages() works on the source document, so get pages of the resulting one. + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 19 ), pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum()); // 10 pages, but each sub-document starts on odd page number + for( int doc = 0; + doc < 10; + ++doc ) + { + CPPUNIT_ASSERT_EQUAL( doc * 2 + 1, documentStartPageNumber( doc )); + } +} + +DECLARE_SHELL_MAILMERGE_TEST(testPageBoundaries2Pages, "simple-mail-merge-2pages.odt", "10-testing-addresses.ods", "testing-addresses") +{ + executeMailMerge(); + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 20 ), pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum()); // 20 pages, each sub-document starts on odd page number + for( int doc = 0; + doc < 10; + ++doc ) + { + CPPUNIT_ASSERT_EQUAL( doc * 2 + 1, documentStartPageNumber( doc )); + } +} + +DECLARE_SHELL_MAILMERGE_TEST(testTdf89214, "tdf89214.odt", "10-testing-addresses.ods", "testing-addresses") +{ + executeMailMerge(); + + uno::Reference xTextDocument(mxMMComponent, uno::UNO_QUERY); + uno::Reference xParagraph(getParagraphOrTable(3, xTextDocument->getText()), uno::UNO_QUERY); + // Make sure that we assert the right paragraph. + CPPUNIT_ASSERT_EQUAL(OUString("a"), xParagraph->getString()); + // This paragraph had a bullet numbering, make sure that the list id is not empty. + CPPUNIT_ASSERT(!getProperty(xParagraph, "ListId").isEmpty()); +} + +DECLARE_SHELL_MAILMERGE_TEST(testTdf90230, "empty.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // MM of an empty document caused an assertion in the SwIndexReg dtor. + executeMailMerge(); +} + +DECLARE_SHELL_MAILMERGE_TEST(testTdf92623, "tdf92623.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // Copying bookmarks for MM was broken because of the StartOfContent node copy + // copied marks were off by one + executeMailMerge(); + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + IDocumentMarkAccess const *pIDMA = pTextDoc->GetDocShell()->GetDoc()->getIDocumentMarkAccess(); + // There is just one mark... + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pIDMA->getAllMarksCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pIDMA->getBookmarksCount()); + IDocumentMarkAccess::const_iterator_t mark = pIDMA->getAllMarksBegin(); + // and it's a TEXT_FIELDMARK + CPPUNIT_ASSERT_EQUAL( sal_Int32(IDocumentMarkAccess::MarkType::TEXT_FIELDMARK), + sal_Int32(IDocumentMarkAccess::GetType( **mark )) ); + SwNodeOffset src_pos = (*mark)->GetMarkPos().nNode.GetIndex(); + + // Get the size of the document in nodes + SwDoc *doc = pTextDoc->GetDocShell()->GetDoc(); + SwNodeOffset size = doc->GetNodes().GetEndOfContent().GetIndex() - doc->GetNodes().GetEndOfExtras().GetIndex(); + CPPUNIT_ASSERT_EQUAL( SwNodeOffset(13), size ); + size -= SwNodeOffset(2); // For common start and end nodes + + // Iterate over all field marks in the target document and check that they + // are positioned at a multitude of the document size + SwXTextDocument* pMMTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pMMTextDoc); + pIDMA = pMMTextDoc->GetDocShell()->GetDoc()->getIDocumentMarkAccess(); + // The target document has the duplicated amount of bookmarks + // as the helping uno bookmark from the mail merge is left in the doc + // TODO should be fixed! + CPPUNIT_ASSERT_EQUAL(sal_Int32(20), pIDMA->getAllMarksCount()); + std::set pages; + sal_Int32 countFieldMarks = 0; + for( mark = pIDMA->getAllMarksBegin(); mark != pIDMA->getAllMarksEnd(); ++mark ) + { + IDocumentMarkAccess::MarkType markType = IDocumentMarkAccess::GetType( **mark ); + if( markType == IDocumentMarkAccess::MarkType::TEXT_FIELDMARK ) + { + SwNodeOffset pos = (*mark)->GetMarkPos().nNode.GetIndex() - src_pos; + CPPUNIT_ASSERT_EQUAL(SwNodeOffset(0), pos % size); + CPPUNIT_ASSERT(pages.insert(pos).second); + countFieldMarks++; + } + else // see previous TODO + CPPUNIT_ASSERT_EQUAL( sal_Int32(IDocumentMarkAccess::MarkType::UNO_BOOKMARK), sal_Int32(markType) ); + } + CPPUNIT_ASSERT_EQUAL(sal_Int32(10), countFieldMarks); +} + +DECLARE_SHELL_MAILMERGE_TEST(testBookmarkCondition, "bookmarkcondition.fodt", "bookmarkcondition.ods", "data") +{ + executeMailMerge(); + + dumpMMLayout(); + xmlDocUniquePtr pLayout( + xmlParseMemory(reinterpret_cast(xmlBufferContent(mpXmlBuffer)), + xmlBufferLength(mpXmlBuffer))); + + // check that conditions on sections and bookmarks are evaluated the same + assertXPath(pLayout, "/root/page", 7); + assertXPath(pLayout, "/root/page[1]/body/section", 1); + assertXPath(pLayout, "/root/page[1]/body/section[1]/txt[1]/LineBreak", "Line", u"In den Bergen war es anstrengend."); + assertXPath(pLayout, "/root/page[1]/body/txt[5]/LineBreak", "Line", u"Mein Urlaub war anstrengend . "); + assertXPath(pLayout, "/root/page[3]/body/section", 1); + assertXPath(pLayout, "/root/page[3]/body/section[1]/txt[1]/LineBreak", "Line", u"In Barcelona war es schön."); + assertXPath(pLayout, "/root/page[3]/body/txt[5]/LineBreak", "Line", u"Mein Urlaub war schön . "); + assertXPath(pLayout, "/root/page[5]/body/section", 1); + assertXPath(pLayout, "/root/page[5]/body/section[1]/txt[1]/LineBreak", "Line", "In Paris war es erlebnisreich."); + assertXPath(pLayout, "/root/page[5]/body/txt[5]/LineBreak", "Line", u"Mein Urlaub war erlebnisreich . "); + assertXPath(pLayout, "/root/page[7]/body/section", 3); + assertXPath(pLayout, "/root/page[7]/body/section[1]/txt[1]/LineBreak", "Line", u"In den Bergen war es anstrengend."); + assertXPath(pLayout, "/root/page[7]/body/section[2]/txt[1]/LineBreak", "Line", u"In Barcelona war es schön."); + assertXPath(pLayout, "/root/page[7]/body/section[3]/txt[1]/LineBreak", "Line", u"In Paris war es erlebnisreich."); + assertXPath(pLayout, "/root/page[7]/body/txt[5]/LineBreak", "Line", u"Mein Urlaub war anstrengend schön erlebnisreich . "); +} + +DECLARE_SHELL_MAILMERGE_TEST_SELECTION(testTdf95292, "linked-labels.odt", "10-testing-addresses.ods", "testing-addresses", 5) +{ + // A document with two labels merged with 5 datasets should result in three pages + executeMailMerge(); + + SwXTextDocument* pTextDoc = dynamic_cast( mxComponent.get() ); + CPPUNIT_ASSERT( pTextDoc ); + SwWrtShell *pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT( pWrtShell->IsLabelDoc() ); + + pTextDoc = dynamic_cast( mxMMComponent.get() ); + CPPUNIT_ASSERT( pTextDoc ); + pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT( !pWrtShell->IsLabelDoc() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 5 ), pWrtShell->GetPhyPageNum() ); +} + +DECLARE_SHELL_MAILMERGE_TEST(test_sections_first_last, "sections_first_last.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // A document with a leading, middle and trailing section + // Originally we were losing the trailing section during merge + executeMailMerge(); + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + // Get the size of the document in nodes + SwDoc *pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwNodeOffset nSize = pDoc->GetNodes().GetEndOfContent().GetIndex() - pDoc->GetNodes().GetEndOfExtras().GetIndex(); + nSize -= SwNodeOffset(2); // The common start and end node + CPPUNIT_ASSERT_EQUAL( SwNodeOffset(13), nSize ); + + SwXTextDocument* pTextDocMM = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDocMM); + + SwDoc *pDocMM = pTextDocMM->GetDocShell()->GetDoc(); + SwNodeOffset nSizeMM = pDocMM->GetNodes().GetEndOfContent().GetIndex() - pDocMM->GetNodes().GetEndOfExtras().GetIndex(); + nSizeMM -= SwNodeOffset(2); + CPPUNIT_ASSERT_EQUAL( SwNodeOffset(10) * nSize, nSizeMM ); + + CPPUNIT_ASSERT_EQUAL( sal_uInt16(19), pDocMM->GetDocShell()->GetWrtShell()->GetPhyPageNum() ); + + // All even pages should be empty, all sub-documents have two pages + const SwRootFrame* pLayout = pDocMM->getIDocumentLayoutAccess().GetCurrentLayout(); + const SwPageFrame* pPageFrm = static_cast( pLayout->Lower() ); + while ( pPageFrm ) + { + bool bOdd = (1 == (pPageFrm->GetPhyPageNum() % 2)); + CPPUNIT_ASSERT_EQUAL( !bOdd, pPageFrm->IsEmptyPage() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( bOdd ? 1 : 2 ), pPageFrm->GetVirtPageNum() ); + pPageFrm = static_cast( pPageFrm->GetNext() ); + } +} + +DECLARE_FILE_MAILMERGE_TEST_COLUMN(testDirMailMerge, "simple-mail-merge.odt", "10-testing-addresses.ods", "testing-addresses", "Filename") +{ + executeMailMerge(); + for( int doc = 1; + doc <= 10; + ++doc ) + { + OUString filename = "sub/lastname" + OUString::number( doc ) + + " firstname" + OUString::number( doc ) + ".odt"; + loadMailMergeDocument( filename ); + CPPUNIT_ASSERT_EQUAL( 1, getPages()); + CPPUNIT_ASSERT_EQUAL( OUString( "Fixed text." ), getRun( getParagraph( 1 ), 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "lastname" + OUString::number( doc )), getRun( getParagraph( 2 ), 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "Another fixed text." ), getRun( getParagraph( 3 ), 1 )->getString()); + } +} + +DECLARE_FILE_MAILMERGE_TEST(testTdf102010, "empty.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // Create "correct" automatic filename for non-user-supplied-prefix + for (auto aNamedValueIter = mMMargs.begin(); aNamedValueIter != mMMargs.end();) + { + if ( aNamedValueIter->Name == UNO_NAME_FILE_NAME_PREFIX ) + aNamedValueIter = mMMargs.erase( aNamedValueIter ); + else + { + std::cout << aNamedValueIter->Name << ": " << aNamedValueIter->Value << std::endl; + ++aNamedValueIter; + } + } + mMMargs.emplace_back( UNO_NAME_SAVE_AS_SINGLE_FILE, uno::Any( true ) ); + + // Generate correct mail merge result filename + executeMailMerge(); + // Don't overwrite previous result + executeMailMerge( true ); + loadMailMergeDocument( 1 ); +} + +DECLARE_SHELL_MAILMERGE_TEST(testTdf118113, "tdf118113.odt", "tdf118113.ods", "testing-addresses") +{ + executeMailMerge(); + + // The document contains a text box anchored to the page and a conditionally hidden + // section that is only shown for one of the 4 recipients, namely the 3rd record. + // In case the hidden section is shown, the page count is 3 for a single data entry, otherwise 1. + // Previously, the page number was calculated incorrectly which led to the + // text box being anchored to the wrong page. + + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + // 3 documents with 1 page size each + 1 document with 3 pages + // + an additional page after each of the first 3 documents to make + // sure that each document starts on an odd page number + sal_uInt16 nPhysPages = pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(9), nPhysPages); + + // verify that there is a text box for each data record + uno::Reference xDrawPageSupplier(mxMMComponent, uno::UNO_QUERY); + uno::Reference xDraws = xDrawPageSupplier->getDrawPage(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), xDraws->getCount()); + + // verify the text box for each data record is anchored to the first page of the given data record's pages + std::vector expectedPageNumbers {1, 3, 5, 9}; + uno::Reference xPropertySet; + for (sal_Int32 i = 0; i < xDraws->getCount(); i++) + { + xPropertySet.set(xDraws->getByIndex(i), uno::UNO_QUERY); + + text::TextContentAnchorType nAnchorType; + CPPUNIT_ASSERT(xPropertySet->getPropertyValue( UNO_NAME_ANCHOR_TYPE ) >>= nAnchorType); + CPPUNIT_ASSERT_EQUAL( text::TextContentAnchorType_AT_PAGE, nAnchorType ); + + sal_uInt16 nAnchorPageNo = {}; + CPPUNIT_ASSERT(xPropertySet->getPropertyValue( UNO_NAME_ANCHOR_PAGE_NO ) >>= nAnchorPageNo); + + CPPUNIT_ASSERT_EQUAL(expectedPageNumbers.at(i), nAnchorPageNo); + } +} + + +namespace +{ +constexpr char const* const EmptyValuesLegacyData[][8] + = { { "Heading", "Title: ", "First Name: firstname1", "Last Name: lastname1", + "Title: First Name: firstname1", "First Name: firstname1 Last Name: lastname1", + "Title: First Name: firstname1 Last Name: lastname1", "Trailing text" }, + { "Heading", "Title: title2", "First Name: ", "Last Name: lastname2", + "Title: title2 First Name: ", "First Name: Last Name: lastname2", + "Title: title2 First Name: Last Name: lastname2", "Trailing text" }, + { "Heading", "Title: title3", "First Name: firstname3", "Last Name: ", + "Title: title3 First Name: firstname3", "First Name: firstname3 Last Name: ", + "Title: title3 First Name: firstname3 Last Name: ", "Trailing text" }, + { "Heading", "Title: ", "First Name: ", "Last Name: lastname4", + "Title: First Name: ", "First Name: Last Name: lastname4", + "Title: First Name: Last Name: lastname4", "Trailing text" }, + { "Heading", "Title: title5", "First Name: ", "Last Name: ", "Title: title5 First Name: ", + "First Name: Last Name: ", "Title: title5 First Name: Last Name: ", "Trailing text" } }; +constexpr char const* const EmptyValuesNewData[][8] + = { { "Heading", "First Name: firstname1", "Last Name: lastname1", + "Title: First Name: firstname1", "First Name: firstname1 Last Name: lastname1", + "Title: First Name: firstname1 Last Name: lastname1", "Trailing text" }, + { "Heading", "Title: title2", "Last Name: lastname2", + "Title: title2 First Name: ", "First Name: Last Name: lastname2", + "Title: title2 First Name: Last Name: lastname2", "Trailing text" }, + { "Heading", "Title: title3", "First Name: firstname3", + "Title: title3 First Name: firstname3", "First Name: firstname3 Last Name: ", + "Title: title3 First Name: firstname3 Last Name: ", "Trailing text" }, + { "Heading", "Last Name: lastname4", "First Name: Last Name: lastname4", + "Title: First Name: Last Name: lastname4", "Trailing text" }, + { "Heading", "Title: title5", "Title: title5 First Name: ", + "Title: title5 First Name: Last Name: ", "Trailing text" } }; +} + +// The following four tests (testEmptyValuesLegacyODT, testEmptyValuesNewODT, (testEmptyValuesLegacyFODT, testEmptyValuesNewFODT) +// check that for native documents without "EmptyDbFieldHidesPara" compatibility option, all paragraphs are exported visible, +// while for documents with the option enabled, the paragraphs with all Database fields having empty values are hidden. + +DECLARE_FILE_MAILMERGE_TEST(testEmptyValuesLegacyODT, "tdf35798-legacy.odt", "5-with-blanks.ods", + "names") +{ + executeMailMerge(); + for (int doc = 0; doc < 5; ++doc) + { + loadMailMergeDocument(doc); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + pDoc->RemoveInvisibleContent(); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + for (int i = 0; i < 8; ++i) + { + auto xPara = getParagraph(i+1); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("in doc " + OString::number(doc) + " paragraph " + OString::number(i + 1)) + .getStr(), + OUString::createFromAscii(EmptyValuesLegacyData[doc][i]), xPara->getString()); + } + CPPUNIT_ASSERT_EQUAL(8, getParagraphs()); + } +} + +DECLARE_FILE_MAILMERGE_TEST(testEmptyValuesNewODT, "tdf35798-new.odt", "5-with-blanks.ods", + "names") +{ + executeMailMerge(); + for (int doc = 0; doc < 5; ++doc) + { + loadMailMergeDocument(doc); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + pDoc->RemoveInvisibleContent(); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + int i; + for (i = 0; i < 8; ++i) + { + const char* pExpected = EmptyValuesNewData[doc][i]; + if (!pExpected) + break; + auto xPara = getParagraph(i + 1); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("in doc " + OString::number(doc) + " paragraph " + OString::number(i + 1)) + .getStr(), + OUString::createFromAscii(pExpected), xPara->getString()); + } + CPPUNIT_ASSERT_EQUAL(i, getParagraphs()); + } +} + +DECLARE_FILE_MAILMERGE_TEST(testEmptyValuesLegacyFODT, "tdf35798-legacy.fodt", "5-with-blanks.ods", + "names") +{ + executeMailMerge(); + for (int doc = 0; doc < 5; ++doc) + { + loadMailMergeDocument(doc); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + pDoc->RemoveInvisibleContent(); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + for (int i = 0; i < 8; ++i) + { + auto xPara = getParagraph(i + 1); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("in doc " + OString::number(doc) + " paragraph " + OString::number(i + 1)) + .getStr(), + OUString::createFromAscii(EmptyValuesLegacyData[doc][i]), xPara->getString()); + } + CPPUNIT_ASSERT_EQUAL(8, getParagraphs()); + } +} + +DECLARE_FILE_MAILMERGE_TEST(testEmptyValuesNewFODT, "tdf35798-new.fodt", "5-with-blanks.ods", + "names") +{ + executeMailMerge(); + for (int doc = 0; doc < 5; ++doc) + { + loadMailMergeDocument(doc); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + pDoc->RemoveInvisibleContent(); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + int i; + for (i = 0; i < 8; ++i) + { + const char* pExpected = EmptyValuesNewData[doc][i]; + if (!pExpected) + break; + auto xPara = getParagraph(i + 1); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + OString("in doc " + OString::number(doc) + " paragraph " + OString::number(i + 1)) + .getStr(), + OUString::createFromAscii(pExpected), xPara->getString()); + } + CPPUNIT_ASSERT_EQUAL(i, getParagraphs()); + } +} + +DECLARE_SHELL_MAILMERGE_TEST(testTdf118845, "tdf118845.fodt", "4_v01.ods", "Tabelle1") +{ + executeMailMerge(); + + // Both male and female greetings were shown, thus each page had 3 paragraphs + + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + sal_uInt16 nPhysPages = pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(7), nPhysPages); // 4 pages, each odd, and 3 blanks + + uno::Reference xTextDocument(mxMMComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(8, getParagraphs(xTextDocument->getText())); + + uno::Reference xParagraph(getParagraphOrTable(1, xTextDocument->getText()), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Dear Mrs. Mustermann1,"), xParagraph->getString()); + + xParagraph.set(getParagraphOrTable(2, xTextDocument->getText()), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), xParagraph->getString()); + + xParagraph.set(getParagraphOrTable(3, xTextDocument->getText()), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Dear Mr. Mustermann2,"), xParagraph->getString()); + + xParagraph.set(getParagraphOrTable(4, xTextDocument->getText()), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), xParagraph->getString()); + + xParagraph.set(getParagraphOrTable(5, xTextDocument->getText()), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Dear Mrs. Mustermann3,"), xParagraph->getString()); + + xParagraph.set(getParagraphOrTable(6, xTextDocument->getText()), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), xParagraph->getString()); + + xParagraph.set(getParagraphOrTable(7, xTextDocument->getText()), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Dear Mr. Mustermann4,"), xParagraph->getString()); + + xParagraph.set(getParagraphOrTable(8, xTextDocument->getText()), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), xParagraph->getString()); +} + +DECLARE_SHELL_MAILMERGE_TEST(testTdf62364, "tdf62364.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // prepare unit test and run + executeMailMerge(); + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 19 ), pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum()); // 10 pages, but each sub-document starts on odd page number + + // check: each page (one page is one sub doc) has 4 paragraphs: + // - 1st and 2nd are regular paragraphs + // - 3rd and 4th are inside list + const bool nodeInList[4] = { false, false, true, true }; + + const auto & rNodes = pTextDoc->GetDocShell()->GetDoc()->GetNodes(); + for (int pageIndex=0; pageIndex<10; pageIndex++) + { + for (int nodeIndex = 0; nodeIndex<4; nodeIndex++) + { + SwNode* aNode = rNodes[SwNodeOffset(9 + pageIndex * 4 + nodeIndex)]; + CPPUNIT_ASSERT_EQUAL(true, aNode->IsTextNode()); + + const SwTextNode* pTextNode = aNode->GetTextNode(); + CPPUNIT_ASSERT(pTextNode); + CPPUNIT_ASSERT_EQUAL(nodeInList[nodeIndex], pTextNode->GetSwAttrSet().HasItem(RES_PARATR_LIST_ID)); + } + } +} + +DECLARE_SHELL_MAILMERGE_TEST(tdf125522_shell, "tdf125522.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // prepare unit test and run + executeMailMerge(); + + // reset currently opened layout of the original template, + // and create the layout of the document with 10 mails inside + dumpMMLayout(); + + // there should be no any text frame in output + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + const auto & rNodes = pTextDoc->GetDocShell()->GetDoc()->GetNodes(); + for (SwNodeOffset nodeIndex(0); nodeIndexStartOfSectionNode()) + { + CPPUNIT_ASSERT(!aNode->StartOfSectionNode()->GetFlyFormat()); + } + } +} + +DECLARE_SHELL_MAILMERGE_TEST(testTd78611_shell, "tdf78611.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // prepare unit test and run + executeMailMerge(); + + // reset currently opened layout of the original template, + // and create the layout of the document with 10 mails inside + dumpMMLayout(); + + // check: each page (one page is one sub doc) has different paragraphs and header paragraphs. + // All header paragraphs should have numbering. + + // check first page + CPPUNIT_ASSERT_EQUAL( OUString("1"), parseDump("/root/page[1]/body/txt[6]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL( OUString("1.1"), parseDump("/root/page[1]/body/txt[8]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL( OUString("1.2"), parseDump("/root/page[1]/body/txt[10]/Special", "rText")); + + // check some other pages + CPPUNIT_ASSERT_EQUAL( OUString("1"), parseDump("/root/page[3]/body/txt[6]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL( OUString("1.1"), parseDump("/root/page[5]/body/txt[8]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL( OUString("1.2"), parseDump("/root/page[7]/body/txt[10]/Special", "rText")); +} + +DECLARE_FILE_MAILMERGE_TEST(testTd78611_file, "tdf78611.odt", "10-testing-addresses.ods", "testing-addresses") +{ + executeMailMerge(true); + for (int doc = 0; doc < 10; ++doc) + { + loadMailMergeDocument( doc ); + CPPUNIT_ASSERT_EQUAL( OUString("1"), parseDump("/root/page[1]/body/txt[6]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL( OUString("1.1"), parseDump("/root/page[1]/body/txt[8]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL( OUString("1.2"), parseDump("/root/page[1]/body/txt[10]/Special", "rText")); + } +} + +DECLARE_SHELL_MAILMERGE_TEST(testTdf122156_shell, "linked-with-condition.odt", "5-with-blanks.ods", + "names") +{ + // A document with a linked section hidden on an "empty field" condition + // For combined documents, hidden sections are removed completely + executeMailMerge(); + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + // 5 documents 1 page each, starting at odd page numbers => 9 + CPPUNIT_ASSERT_EQUAL(sal_uInt16(9), pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum()); + uno::Reference xSectionsSupplier(mxMMComponent, + uno::UNO_QUERY_THROW); + uno::Reference xSections(xSectionsSupplier->getTextSections(), + uno::UNO_QUERY_THROW); + // 2 out of 5 dataset records have empty "Title" field => no sections in respective documents + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xSections->getCount()); +} + +DECLARE_FILE_MAILMERGE_TEST(testTdf122156_file, "linked-with-condition.odt", "5-with-blanks.ods", + "names") +{ + // A document with a linked section hidden on an "empty field" condition + // For separate documents, the sections are hidden, but not removed + executeMailMerge(); + { + loadMailMergeDocument(0); + uno::Reference xSectionsSupplier(mxComponent, + uno::UNO_QUERY_THROW); + uno::Reference xSections(xSectionsSupplier->getTextSections(), + uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + uno::Reference xSect(xSections->getByIndex(0), uno::UNO_QUERY_THROW); + // Record 1 has empty "Title" field => section is not shown + CPPUNIT_ASSERT_EQUAL(false, getProperty(xSect, "IsCurrentlyVisible")); + } + { + loadMailMergeDocument(1); + uno::Reference xSectionsSupplier(mxComponent, + uno::UNO_QUERY_THROW); + uno::Reference xSections(xSectionsSupplier->getTextSections(), + uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + uno::Reference xSect(xSections->getByIndex(0), uno::UNO_QUERY_THROW); + // Record 2 has non-empty "Title" field => section is shown + CPPUNIT_ASSERT_EQUAL(true, getProperty(xSect, "IsCurrentlyVisible")); + } + { + loadMailMergeDocument(2); + uno::Reference xSectionsSupplier(mxComponent, + uno::UNO_QUERY_THROW); + uno::Reference xSections(xSectionsSupplier->getTextSections(), + uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + uno::Reference xSect(xSections->getByIndex(0), uno::UNO_QUERY_THROW); + // Record 3 has non-empty "Title" field => section is shown + CPPUNIT_ASSERT_EQUAL(true, getProperty(xSect, "IsCurrentlyVisible")); + } + { + loadMailMergeDocument(3); + uno::Reference xSectionsSupplier(mxComponent, + uno::UNO_QUERY_THROW); + uno::Reference xSections(xSectionsSupplier->getTextSections(), + uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + uno::Reference xSect(xSections->getByIndex(0), uno::UNO_QUERY_THROW); + // Record 4 has empty "Title" field => section is not shown + CPPUNIT_ASSERT_EQUAL(false, getProperty(xSect, "IsCurrentlyVisible")); + } + { + loadMailMergeDocument(4); + uno::Reference xSectionsSupplier(mxComponent, + uno::UNO_QUERY_THROW); + uno::Reference xSections(xSectionsSupplier->getTextSections(), + uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + uno::Reference xSect(xSections->getByIndex(0), uno::UNO_QUERY_THROW); + // Record 5 has non-empty "Title" field => section is shown + CPPUNIT_ASSERT_EQUAL(true, getProperty(xSect, "IsCurrentlyVisible")); + } +} + +DECLARE_SHELL_MAILMERGE_TEST(testTdf121168, "section_ps.odt", "4_v01.ods", "Tabelle1") +{ + // A document starting with a section on a page with non-default page style with header + executeMailMerge(); + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + // 4 documents 1 page each, starting at odd page numbers => 7 + CPPUNIT_ASSERT_EQUAL(sal_uInt16(7), pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum()); + + SwDoc* pDocMM = pTextDoc->GetDocShell()->GetDoc(); + SwNodeOffset nSizeMM = pDocMM->GetNodes().GetEndOfContent().GetIndex() + - pDocMM->GetNodes().GetEndOfExtras().GetIndex() - 2; + CPPUNIT_ASSERT_EQUAL(SwNodeOffset(16), nSizeMM); + + // All even pages should be empty, all sub-documents have one page + const SwRootFrame* pLayout = pDocMM->getIDocumentLayoutAccess().GetCurrentLayout(); + const SwPageFrame* pPageFrm = static_cast(pLayout->Lower()); + while (pPageFrm) + { + sal_uInt16 nPageNum = pPageFrm->GetPhyPageNum(); + bool bOdd = (1 == (nPageNum % 2)); + CPPUNIT_ASSERT_EQUAL(!bOdd, pPageFrm->IsEmptyPage()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(bOdd ? 1 : 2), pPageFrm->GetVirtPageNum()); + if (bOdd) + { + const SwPageDesc* pDesc = pPageFrm->GetPageDesc(); + CPPUNIT_ASSERT_EQUAL(OUString("Teststyle" + OUString::number(nPageNum / 2 + 1)), + pDesc->GetName()); + } + pPageFrm = static_cast(pPageFrm->GetNext()); + } +} + +DECLARE_FILE_MAILMERGE_TEST(testTdf81782_file, "tdf78611.odt", "10-testing-addresses.ods", "testing-addresses") +{ + executeMailMerge(true); + for (int doc = 0; doc < 10; ++doc) + { + loadMailMergeDocument( doc ); + + // get document properties + uno::Reference xDocumentPropertiesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDocumentProperties(xDocumentPropertiesSupplier->getDocumentProperties()); + + // check if properties were set + uno::Sequence aKeywords(xDocumentProperties->getKeywords()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aKeywords.getLength()); + CPPUNIT_ASSERT_EQUAL(OUString("one two"), aKeywords[0]); + + // check title and subject + CPPUNIT_ASSERT_EQUAL(OUString("my title"), xDocumentProperties->getTitle()); + CPPUNIT_ASSERT_EQUAL(OUString("my subject"), xDocumentProperties->getSubject()); + } +} + +// problem was: field content was duplicated & truncated +DECLARE_SHELL_MAILMERGE_TEST(testTdf81750_shell, "tdf81750.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // prepare unit test and run + executeMailMerge(); + + // reset currently opened layout of the original template, + // and create the layout of the document with 10 mails inside + dumpMMLayout(); + + // check several pages page + OUString aExpected("Text: Foo "); + CPPUNIT_ASSERT_EQUAL( aExpected, parseDump("/root/page[1]/body/txt[2]", "")); + CPPUNIT_ASSERT_EQUAL( aExpected, parseDump("/root/page[3]/body/txt[2]", "")); + CPPUNIT_ASSERT_EQUAL( aExpected, parseDump("/root/page[5]/body/txt[2]", "")); + CPPUNIT_ASSERT_EQUAL( aExpected, parseDump("/root/page[7]/body/txt[2]", "")); + CPPUNIT_ASSERT_EQUAL( aExpected, parseDump("/root/page[9]/body/txt[2]", "")); +} + + +DECLARE_FILE_MAILMERGE_TEST(testTdf123057_file, "pagecounttest.ott", "db_pagecounttest.ods", "Sheet1") +{ + executeMailMerge(true); + + for (int doc = 0; doc < 4; ++doc) + { + loadMailMergeDocument(doc); + + // get document properties + uno::Reference xSectionsSupplier(mxComponent, uno::UNO_QUERY_THROW); + uno::Reference xSections(xSectionsSupplier->getTextSections(), uno::UNO_QUERY_THROW); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount()); + uno::Reference xSect0(xSections->getByIndex(0), uno::UNO_QUERY_THROW); + uno::Reference xSect1(xSections->getByIndex(1), uno::UNO_QUERY_THROW); + + OUString sFieldPageCount; + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + if (xFields.is()) + { + while (xFields->hasMoreElements()) + { + uno::Any aField = xFields->nextElement(); + uno::Reference xServiceInfo(aField, uno::UNO_QUERY); + if (xServiceInfo->supportsService("com.sun.star.text.textfield.PageCount")) + { + uno::Reference xField(aField, uno::UNO_QUERY); + sFieldPageCount = xField->getAnchor()->getString(); + } + } + } + + switch (doc) + { + case 0: + // both sections visible, page num is 2 + CPPUNIT_ASSERT_EQUAL(2, getPages()); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xSect0, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xSect1, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(OUString("2"), sFieldPageCount); + break; + case 1: + // second section hidden, page num is 1 + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xSect0, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xSect1, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(OUString("1"), sFieldPageCount); + break; + case 2: + // first section hidden, page num is 1 + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xSect0, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xSect1, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(OUString("1"), sFieldPageCount); + break; + case 3: + // both sections hidden, page num is 1 + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xSect0, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xSect1, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(OUString("1"), sFieldPageCount); + break; + } + } +} + +// The document has a header with page number and total page count on page 2 +// (which uses page style "Default Style") but doesn't have a header set +// for the first page (which uses page style "First Page"). +// Fields in the header hadn't been replaced properly. +DECLARE_SHELL_MAILMERGE_TEST(testTdf128148, "tdf128148.odt", "4_v01.ods", "Tabelle1") +{ + executeMailMerge(); + SwXTextDocument* pTextDoc = dynamic_cast(mxMMComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + // 4 documents with 2 pages each => 8 pages in total + CPPUNIT_ASSERT_EQUAL(sal_uInt16(8), pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum()); + + SwDoc* pDocMM = pTextDoc->GetDocShell()->GetDoc(); + uno::Reference xModel = pTextDoc->GetDocShell()->GetBaseModel(); + uno::Reference xStyleFamiliesSupplier(xModel, uno::UNO_QUERY); + uno::Reference xStyleFamilies = xStyleFamiliesSupplier->getStyleFamilies(); + uno::Reference xStyleFamily(xStyleFamilies->getByName("PageStyles"), uno::UNO_QUERY); + + // All odd pages have no header, all even pages should have header with text "Page 2 of 2" + const SwRootFrame* pLayout = pDocMM->getIDocumentLayoutAccess().GetCurrentLayout(); + const SwPageFrame* pPageFrm = static_cast(pLayout->Lower()); + while (pPageFrm) + { + const sal_uInt16 nPageNum = pPageFrm->GetPhyPageNum(); + const bool bIsEvenPage = ((nPageNum % 2) == 0); + + const OUString& sPageStyle = pPageFrm->GetPageDesc()->GetName(); + uno::Reference xPageStyle(xStyleFamily->getByName(sPageStyle), uno::UNO_QUERY); + + bool bHeaderIsOn = false; + xPageStyle->getPropertyValue(UNO_NAME_HEADER_IS_ON) >>= bHeaderIsOn; + + // first page for every data record shouldn't have header, second should + CPPUNIT_ASSERT_EQUAL(bIsEvenPage, bHeaderIsOn); + if (bIsEvenPage) + { + // text in header on even pages with correctly replaced fields is "Page 2 of 2" + uno::Reference xHeaderText; + xPageStyle->getPropertyValue(UNO_NAME_HEADER_TEXT) >>= xHeaderText; + const OUString sHeaderText = xHeaderText->getString(); + CPPUNIT_ASSERT_EQUAL(OUString("Page 2 of 2"), sHeaderText); + } + + pPageFrm = static_cast(pPageFrm->GetNext()); + } +} + +namespace com::sun::star::table { + +static std::ostream& operator<<(std::ostream& rStream, table::BorderLine const& rLine) +{ + rStream << "BorderLine(" << rLine.Color << "," << rLine.InnerLineWidth << "," << rLine.OuterLineWidth << "," << rLine.LineDistance << ")"; + return rStream; +} + +static std::ostream& operator<<(std::ostream& rStream, table::TableBorder const& rBorder) +{ + rStream << "TableBorder(\n " + << rBorder.TopLine << "," << static_cast(rBorder.IsTopLineValid) << ",\n " + << rBorder.BottomLine << "," << static_cast(rBorder.IsBottomLineValid) << ",\n " + << rBorder.LeftLine << "," << static_cast(rBorder.IsLeftLineValid) << ",\n " + << rBorder.RightLine << "," << static_cast(rBorder.IsRightLineValid) << ",\n " + << rBorder.HorizontalLine << "," << static_cast(rBorder.IsHorizontalLineValid) << ",\n " + << rBorder.VerticalLine << "," << static_cast(rBorder.IsVerticalLineValid) << ",\n " + << rBorder.Distance << "," << static_cast(rBorder.IsDistanceValid) << ")"; + return rStream; +} + +} + +DECLARE_MAILMERGE_TEST(testGrabBag, "grabbagtest.docx", "onecell.xlsx", "Sheet1", "MS Word 2007 XML", MMTest, 0, nullptr) +{ + executeMailMerge(true); + + loadMailMergeDocument(0, ".docx"); + + SwXTextDocument *const pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), pTextDoc->GetDocShell()->GetWrtShell()->GetPhyPageNum()); + + // check grabbag + uno::Reference const xModel( + mxComponent, uno::UNO_QUERY_THROW); + uno::Sequence aInteropGrabBag; + pTextDoc->getPropertyValue("InteropGrabBag") >>= aInteropGrabBag; + CPPUNIT_ASSERT_EQUAL(sal_Int32(12), aInteropGrabBag.getLength()); + + // check table border - comes from table style "Tabellenraster" + uno::Reference const xTable(getParagraphOrTable(1, pTextDoc->getText()), uno::UNO_QUERY_THROW); + uno::Reference const xTableProps(xTable, uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(table::TableBorder( + table::BorderLine(util::Color(0), 0, 18, 0), true, + table::BorderLine(util::Color(0), 0, 18, 0), true, + table::BorderLine(util::Color(0), 0, 18, 0), true, + table::BorderLine(util::Color(0), 0, 18, 0), true, + table::BorderLine(util::Color(0), 0, 18, 0), true, + table::BorderLine(util::Color(0), 0, 0, 0), true, + sal_Int16(191), true), + getProperty(xTableProps, "TableBorder")); + + // check font is Arial - comes from theme (wrong result was "" - nothing) + uno::Reference const xCell(xTable->getCellByName("A1"), uno::UNO_QUERY_THROW); + uno::Reference const xParaA1(getParagraphOrTable(1, xCell->getText()), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty(xParaA1, "CharFontName")); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/odfexport/data/2_MathType3.docx b/sw/qa/extras/odfexport/data/2_MathType3.docx new file mode 100644 index 000000000..0694921b3 Binary files /dev/null and b/sw/qa/extras/odfexport/data/2_MathType3.docx differ diff --git a/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt b/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt new file mode 100644 index 000000000..64d620537 --- /dev/null +++ b/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt @@ -0,0 +1,120 @@ + + + + ms 2015-08-24T21:49:45.305718699LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text + + + cross-reference to 1.1 (Numbered paragraph - Number) and 1.1(Numbered paragraph - no context) + + + + + + + diff --git a/sw/qa/extras/odfexport/data/Formcontrol needs high z-index.odt b/sw/qa/extras/odfexport/data/Formcontrol needs high z-index.odt new file mode 100644 index 000000000..4b03bd7fd Binary files /dev/null and b/sw/qa/extras/odfexport/data/Formcontrol needs high z-index.odt differ diff --git a/sw/qa/extras/odfexport/data/MadeByLO7.odt b/sw/qa/extras/odfexport/data/MadeByLO7.odt new file mode 100644 index 000000000..9587fffe6 Binary files /dev/null and b/sw/qa/extras/odfexport/data/MadeByLO7.odt differ diff --git a/sw/qa/extras/odfexport/data/allow-overlap.odt b/sw/qa/extras/odfexport/data/allow-overlap.odt new file mode 100644 index 000000000..b23f5b360 Binary files /dev/null and b/sw/qa/extras/odfexport/data/allow-overlap.odt differ diff --git a/sw/qa/extras/odfexport/data/arabic-zero-numbering.odt b/sw/qa/extras/odfexport/data/arabic-zero-numbering.odt new file mode 100644 index 000000000..2a445b227 Binary files /dev/null and b/sw/qa/extras/odfexport/data/arabic-zero-numbering.odt differ diff --git a/sw/qa/extras/odfexport/data/arabic-zero3-numbering.odt b/sw/qa/extras/odfexport/data/arabic-zero3-numbering.odt new file mode 100644 index 000000000..0bdca270e Binary files /dev/null and b/sw/qa/extras/odfexport/data/arabic-zero3-numbering.odt differ diff --git a/sw/qa/extras/odfexport/data/arabic-zero4-numbering.odt b/sw/qa/extras/odfexport/data/arabic-zero4-numbering.odt new file mode 100644 index 000000000..2eb9b49ce Binary files /dev/null and b/sw/qa/extras/odfexport/data/arabic-zero4-numbering.odt differ diff --git a/sw/qa/extras/odfexport/data/arabic-zero5-numbering.odt b/sw/qa/extras/odfexport/data/arabic-zero5-numbering.odt new file mode 100644 index 000000000..3526ee8d7 Binary files /dev/null and b/sw/qa/extras/odfexport/data/arabic-zero5-numbering.odt differ diff --git a/sw/qa/extras/odfexport/data/border_types.odt b/sw/qa/extras/odfexport/data/border_types.odt new file mode 100644 index 000000000..97b72436f Binary files /dev/null and b/sw/qa/extras/odfexport/data/border_types.odt differ diff --git a/sw/qa/extras/odfexport/data/btlr-cell.odt b/sw/qa/extras/odfexport/data/btlr-cell.odt new file mode 100644 index 000000000..c010fa9f5 Binary files /dev/null and b/sw/qa/extras/odfexport/data/btlr-cell.odt differ diff --git a/sw/qa/extras/odfexport/data/btlr-frame.odt b/sw/qa/extras/odfexport/data/btlr-frame.odt new file mode 100644 index 000000000..31cb03849 Binary files /dev/null and b/sw/qa/extras/odfexport/data/btlr-frame.odt differ diff --git a/sw/qa/extras/odfexport/data/chapter-number-new-line.odt b/sw/qa/extras/odfexport/data/chapter-number-new-line.odt new file mode 100644 index 000000000..68a427f72 Binary files /dev/null and b/sw/qa/extras/odfexport/data/chapter-number-new-line.odt differ diff --git a/sw/qa/extras/odfexport/data/charborder.odt b/sw/qa/extras/odfexport/data/charborder.odt new file mode 100644 index 000000000..0d4d50691 Binary files /dev/null and b/sw/qa/extras/odfexport/data/charborder.odt differ diff --git a/sw/qa/extras/odfexport/data/embedded-font-props.odt b/sw/qa/extras/odfexport/data/embedded-font-props.odt new file mode 100644 index 000000000..6eb073e29 Binary files /dev/null and b/sw/qa/extras/odfexport/data/embedded-font-props.odt differ diff --git a/sw/qa/extras/odfexport/data/embedded-pdf.odt b/sw/qa/extras/odfexport/data/embedded-pdf.odt new file mode 100644 index 000000000..3adb4cf11 Binary files /dev/null and b/sw/qa/extras/odfexport/data/embedded-pdf.odt differ diff --git a/sw/qa/extras/odfexport/data/fdo38244.odt b/sw/qa/extras/odfexport/data/fdo38244.odt new file mode 100644 index 000000000..0fcc168a8 Binary files /dev/null and b/sw/qa/extras/odfexport/data/fdo38244.odt differ diff --git a/sw/qa/extras/odfexport/data/fdo43807.odt b/sw/qa/extras/odfexport/data/fdo43807.odt new file mode 100644 index 000000000..ae03c5904 Binary files /dev/null and b/sw/qa/extras/odfexport/data/fdo43807.odt differ diff --git a/sw/qa/extras/odfexport/data/fdo58949.docx b/sw/qa/extras/odfexport/data/fdo58949.docx new file mode 100644 index 000000000..d8f568b16 Binary files /dev/null and b/sw/qa/extras/odfexport/data/fdo58949.docx differ diff --git a/sw/qa/extras/odfexport/data/fdo60769.odt b/sw/qa/extras/odfexport/data/fdo60769.odt new file mode 100644 index 000000000..b3c39376b Binary files /dev/null and b/sw/qa/extras/odfexport/data/fdo60769.odt differ diff --git a/sw/qa/extras/odfexport/data/fdo79358.odt b/sw/qa/extras/odfexport/data/fdo79358.odt new file mode 100644 index 000000000..a1d2572a6 Binary files /dev/null and b/sw/qa/extras/odfexport/data/fdo79358.odt differ diff --git a/sw/qa/extras/odfexport/data/fdo86963.odt b/sw/qa/extras/odfexport/data/fdo86963.odt new file mode 100644 index 000000000..72896e139 Binary files /dev/null and b/sw/qa/extras/odfexport/data/fdo86963.odt differ diff --git a/sw/qa/extras/odfexport/data/fillbitmap3.odt b/sw/qa/extras/odfexport/data/fillbitmap3.odt new file mode 100644 index 000000000..90308a5ec Binary files /dev/null and b/sw/qa/extras/odfexport/data/fillbitmap3.odt differ diff --git a/sw/qa/extras/odfexport/data/first-header-footer.odt b/sw/qa/extras/odfexport/data/first-header-footer.odt new file mode 100644 index 000000000..2ed6b740a Binary files /dev/null and b/sw/qa/extras/odfexport/data/first-header-footer.odt differ diff --git a/sw/qa/extras/odfexport/data/footnote-collect-at-end-of-section.fodt b/sw/qa/extras/odfexport/data/footnote-collect-at-end-of-section.fodt new file mode 100644 index 000000000..b99103348 --- /dev/null +++ b/sw/qa/extras/odfexport/data/footnote-collect-at-end-of-section.fodt @@ -0,0 +1,192 @@ + + + + 2019-10-21T13:59:35.8473398492019-10-21T14:28:45.221080424PT23M48S2LibreOffice_powered_by_CIBDev/6.1.7.5$Linux_X86_64 LibreOffice_project/3ab5486449d1f3ca0247a9c133da746401c57e28 + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unknown Author + 2019-10-21T14:28:28 + + 2 + two3 + three + + + + + 1 + one2 + two + + + 1 + one2 + four + + + + + diff --git a/sw/qa/extras/odfexport/data/framebackgrounds.odt b/sw/qa/extras/odfexport/data/framebackgrounds.odt new file mode 100644 index 000000000..9ad338c2d Binary files /dev/null and b/sw/qa/extras/odfexport/data/framebackgrounds.odt differ diff --git a/sw/qa/extras/odfexport/data/gerrit13858.odt b/sw/qa/extras/odfexport/data/gerrit13858.odt new file mode 100644 index 000000000..9b3dd37ff Binary files /dev/null and b/sw/qa/extras/odfexport/data/gerrit13858.odt differ diff --git a/sw/qa/extras/odfexport/data/gutter-left.odt b/sw/qa/extras/odfexport/data/gutter-left.odt new file mode 100644 index 000000000..a047ecaa3 Binary files /dev/null and b/sw/qa/extras/odfexport/data/gutter-left.odt differ diff --git a/sw/qa/extras/odfexport/data/image-mimetype.odt b/sw/qa/extras/odfexport/data/image-mimetype.odt new file mode 100644 index 000000000..4c4924a1b Binary files /dev/null and b/sw/qa/extras/odfexport/data/image-mimetype.odt differ diff --git a/sw/qa/extras/odfexport/data/listformat.docx b/sw/qa/extras/odfexport/data/listformat.docx new file mode 100644 index 000000000..338678d82 Binary files /dev/null and b/sw/qa/extras/odfexport/data/listformat.docx differ diff --git a/sw/qa/extras/odfexport/data/listformat.odt b/sw/qa/extras/odfexport/data/listformat.odt new file mode 100644 index 000000000..ec3992c8f Binary files /dev/null and b/sw/qa/extras/odfexport/data/listformat.odt differ diff --git a/sw/qa/extras/odfexport/data/nestedTableInFooter.odt b/sw/qa/extras/odfexport/data/nestedTableInFooter.odt new file mode 100644 index 000000000..0356f04ee Binary files /dev/null and b/sw/qa/extras/odfexport/data/nestedTableInFooter.odt differ diff --git a/sw/qa/extras/odfexport/data/ooo321_stylepagenumber.odt b/sw/qa/extras/odfexport/data/ooo321_stylepagenumber.odt new file mode 100644 index 000000000..aae70e106 Binary files /dev/null and b/sw/qa/extras/odfexport/data/ooo321_stylepagenumber.odt differ diff --git a/sw/qa/extras/odfexport/data/oooxml_embedded.sxw b/sw/qa/extras/odfexport/data/oooxml_embedded.sxw new file mode 100644 index 000000000..e4fe14aef Binary files /dev/null and b/sw/qa/extras/odfexport/data/oooxml_embedded.sxw differ diff --git a/sw/qa/extras/odfexport/data/page-content-bottom.odt b/sw/qa/extras/odfexport/data/page-content-bottom.odt new file mode 100644 index 000000000..263ca7df4 Binary files /dev/null and b/sw/qa/extras/odfexport/data/page-content-bottom.odt differ diff --git a/sw/qa/extras/odfexport/data/page-content-top.odt b/sw/qa/extras/odfexport/data/page-content-top.odt new file mode 100644 index 000000000..755d50242 Binary files /dev/null and b/sw/qa/extras/odfexport/data/page-content-top.odt differ diff --git a/sw/qa/extras/odfexport/data/pagestyle_background_lo64.odt b/sw/qa/extras/odfexport/data/pagestyle_background_lo64.odt new file mode 100644 index 000000000..c8b3c3fdd Binary files /dev/null and b/sw/qa/extras/odfexport/data/pagestyle_background_lo64.odt differ diff --git a/sw/qa/extras/odfexport/data/pagestyle_background_lo70.odt b/sw/qa/extras/odfexport/data/pagestyle_background_lo70.odt new file mode 100644 index 000000000..eb8b4a0e7 Binary files /dev/null and b/sw/qa/extras/odfexport/data/pagestyle_background_lo70.odt differ diff --git a/sw/qa/extras/odfexport/data/pagestyle_background_ooo33.odt b/sw/qa/extras/odfexport/data/pagestyle_background_ooo33.odt new file mode 100644 index 000000000..92098d0bc Binary files /dev/null and b/sw/qa/extras/odfexport/data/pagestyle_background_ooo33.odt differ diff --git a/sw/qa/extras/odfexport/data/protection-key.fodt b/sw/qa/extras/odfexport/data/protection-key.fodt new file mode 100644 index 000000000..cd4cde962 --- /dev/null +++ b/sw/qa/extras/odfexport/data/protection-key.fodt @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/odfexport/data/qrcode-properties.odt b/sw/qa/extras/odfexport/data/qrcode-properties.odt new file mode 100644 index 000000000..2de59b041 Binary files /dev/null and b/sw/qa/extras/odfexport/data/qrcode-properties.odt differ diff --git a/sw/qa/extras/odfexport/data/redlineTextFrame.odt b/sw/qa/extras/odfexport/data/redlineTextFrame.odt new file mode 100644 index 000000000..0986c3792 Binary files /dev/null and b/sw/qa/extras/odfexport/data/redlineTextFrame.odt differ diff --git a/sw/qa/extras/odfexport/data/referencelanguage.odt b/sw/qa/extras/odfexport/data/referencelanguage.odt new file mode 100644 index 000000000..9614bb3e3 Binary files /dev/null and b/sw/qa/extras/odfexport/data/referencelanguage.odt differ diff --git a/sw/qa/extras/odfexport/data/relh-page-tdf80282.odt b/sw/qa/extras/odfexport/data/relh-page-tdf80282.odt new file mode 100644 index 000000000..6b3c583d3 Binary files /dev/null and b/sw/qa/extras/odfexport/data/relh-page-tdf80282.odt differ diff --git a/sw/qa/extras/odfexport/data/relh-page.odt b/sw/qa/extras/odfexport/data/relh-page.odt new file mode 100644 index 000000000..2dcf64124 Binary files /dev/null and b/sw/qa/extras/odfexport/data/relh-page.odt differ diff --git a/sw/qa/extras/odfexport/data/relw-page.odt b/sw/qa/extras/odfexport/data/relw-page.odt new file mode 100644 index 000000000..047d91e87 Binary files /dev/null and b/sw/qa/extras/odfexport/data/relw-page.odt differ diff --git a/sw/qa/extras/odfexport/data/resolved-comment.odt b/sw/qa/extras/odfexport/data/resolved-comment.odt new file mode 100644 index 000000000..e136cac3d Binary files /dev/null and b/sw/qa/extras/odfexport/data/resolved-comment.odt differ diff --git a/sw/qa/extras/odfexport/data/rovas-numbering.odt b/sw/qa/extras/odfexport/data/rovas-numbering.odt new file mode 100644 index 000000000..72cb8895a Binary files /dev/null and b/sw/qa/extras/odfexport/data/rovas-numbering.odt differ diff --git a/sw/qa/extras/odfexport/data/ruby-position.odt b/sw/qa/extras/odfexport/data/ruby-position.odt new file mode 100644 index 000000000..7086144bf Binary files /dev/null and b/sw/qa/extras/odfexport/data/ruby-position.odt differ diff --git a/sw/qa/extras/odfexport/data/section-columns-separator.fodt b/sw/qa/extras/odfexport/data/section-columns-separator.fodt new file mode 100644 index 000000000..b9c97eb9e --- /dev/null +++ b/sw/qa/extras/odfexport/data/section-columns-separator.fodt @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum consequat mi quis pretium semper. Proin luctus orci ac neque venenatis, quis commodo dolor posuere. Curabitur dignissim sapien quis cursus egestas. Donec blandit auctor arcu, nec pellentesque eros molestie eget. In consectetur aliquam hendrerit. Sed cursus mauris vitae ligula pellentesque, non pellentesque urna aliquet. Fusce placerat mauris enim, nec rutrum purus semper vel. Praesent tincidunt neque eu pellentesque pharetra. Fusce pellentesque est orci. + Integer sodales tincidunt tristique. Sed a metus posuere, adipiscing nunc et, viverra odio. Donec auctor molestie sem, sit amet tristique lectus hendrerit sed. Cras sodales nisl sed orci mattis iaculis. Nunc eget dolor accumsan, pharetra risus a, vestibulum mauris. Nunc vulputate lobortis mollis. Vivamus nec tellus faucibus, tempor magna nec, facilisis felis. Donec commodo enim a vehicula pellentesque. Nullam vehicula vestibulum est vel ultricies. + Aliquam velit massa, laoreet vel leo nec, volutpat facilisis eros. Donec consequat arcu ut diam tempor luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent vitae lacus vel leo sodales pharetra a a nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam luctus tempus nibh, fringilla dictum augue consectetur eget. Curabitur at ante sit amet tortor pharetra molestie eu nec ante. Mauris tincidunt, nibh eu sollicitudin molestie, dolor sapien congue tortor, a pulvinar sapien turpis sed ante. Donec nec est elementum, euismod nulla in, mollis nunc. + + + + \ No newline at end of file diff --git a/sw/qa/extras/odfexport/data/sender-initials.fodt b/sw/qa/extras/odfexport/data/sender-initials.fodt new file mode 100644 index 000000000..b8a5c1e67 --- /dev/null +++ b/sw/qa/extras/odfexport/data/sender-initials.fodt @@ -0,0 +1,71 @@ + + + + ms 2015-08-24T21:49:45.305718699LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I2018-05-08T11:09:30.015915376barFoo + + I2018-05-08T11:09:30.015915376barFoo + + I2018-05-08T11:09:30.015915376barFoo + + + I + + + + I + + + + + diff --git a/sw/qa/extras/odfexport/data/sha1_correct.odt b/sw/qa/extras/odfexport/data/sha1_correct.odt new file mode 100644 index 000000000..01cbb0a07 Binary files /dev/null and b/sw/qa/extras/odfexport/data/sha1_correct.odt differ diff --git a/sw/qa/extras/odfexport/data/sha1_wrong.odt b/sw/qa/extras/odfexport/data/sha1_wrong.odt new file mode 100644 index 000000000..94032025b Binary files /dev/null and b/sw/qa/extras/odfexport/data/sha1_wrong.odt differ diff --git a/sw/qa/extras/odfexport/data/shape-relsize.odt b/sw/qa/extras/odfexport/data/shape-relsize.odt new file mode 100644 index 000000000..05a3ffa59 Binary files /dev/null and b/sw/qa/extras/odfexport/data/shape-relsize.odt differ diff --git a/sw/qa/extras/odfexport/data/shape-with-hyperlink.odt b/sw/qa/extras/odfexport/data/shape-with-hyperlink.odt new file mode 100644 index 000000000..7b1127828 Binary files /dev/null and b/sw/qa/extras/odfexport/data/shape-with-hyperlink.odt differ diff --git a/sw/qa/extras/odfexport/data/shapes-hyperlink.odt b/sw/qa/extras/odfexport/data/shapes-hyperlink.odt new file mode 100644 index 000000000..f8f4e1556 Binary files /dev/null and b/sw/qa/extras/odfexport/data/shapes-hyperlink.odt differ diff --git a/sw/qa/extras/odfexport/data/signatureline-properties.fodt b/sw/qa/extras/odfexport/data/signatureline-properties.fodt new file mode 100644 index 000000000..ddceff9f3 --- /dev/null +++ b/sw/qa/extras/odfexport/data/signatureline-properties.fodt @@ -0,0 +1,596 @@ + + + + 2017-12-11T16:12:21.9478635282017-12-11T16:12:44.952307632PT27S1LibreOfficeDev/6.1.0.0.alpha0$Linux_X86_64 LibreOffice_project/f694d0c29b4f38b6c40850c61ec6aeac3969fd88 + + + 0 + 0 + 47891 + 23206 + true + false + + + view2 + 21447 + 2501 + 0 + 0 + 47890 + 23204 + 0 + 1 + false + 100 + false + false + + + + + false + + false + false + false + false + false + true + true + false + true + true + false + + true + + false + false + true + false + false + 855097 + false + false + true + true + false + false + true + true + true + true + true + true + false + false + 1 + true + false + + false + false + + false + false + false + + false + 0 + 0 + false + + false + true + false + false + false + false + false + true + false + false + false + true + 1224071 + true + false + false + false + false + high-resolution + true + true + true + false + false + false + false + false + false + false + false + false + true + false + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+ + PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5z + OmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDov + L3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRw + Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv + c3ZnIiB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9E + VEQvc29kaXBvZGktMC5kdGQiIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBl + Lm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIiB2ZXJzaW9uPSIxLjIiIHdpZHRoPSI5MG1tIiBo + ZWlnaHQ9IjQ1bW0iIHZpZXdCb3g9IjAgMCA5MDAwIDQ1MDAiIHByZXNlcnZlQXNwZWN0UmF0 + aW89InhNaWRZTWlkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS13aWR0aD0iMjguMjIy + IiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB4bWw6c3BhY2U9InByZXNlcnZlIiBpZD0ic3Zn + NTc3IiBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjIgKDVjM2U4MGQsIDIwMTctMDgtMDYpIj48 + bWV0YWRhdGEgaWQ9Im1ldGFkYXRhNTgxIj48cmRmOlJERj48Y2M6V29yayByZGY6YWJvdXQ9 + IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUgcmRmOnJl + c291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPjxkYzp0 + aXRsZS8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxzb2RpcG9kaTpuYW1lZHZp + ZXcgcGFnZWNvbG9yPSIjZmZmZmZmIiBib3JkZXJjb2xvcj0iIzY2NjY2NiIgYm9yZGVyb3Bh + Y2l0eT0iMSIgb2JqZWN0dG9sZXJhbmNlPSIxMCIgZ3JpZHRvbGVyYW5jZT0iMTAiIGd1aWRl + dG9sZXJhbmNlPSIxMCIgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiIGlua3NjYXBlOnBhZ2Vz + aGFkb3c9IjIiIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTg2MyIgaW5rc2NhcGU6d2luZG93 + LWhlaWdodD0iMTA1NiIgaWQ9Im5hbWVkdmlldzU3OSIgc2hvd2dyaWQ9ImZhbHNlIiBpbmtz + Y2FwZTp6b29tPSIwLjkwMjUyMzE1IiBpbmtzY2FwZTpjeD0iMTcwLjA3ODc0IiBpbmtzY2Fw + ZTpjeT0iODUuMDM5MzciIGlua3NjYXBlOndpbmRvdy14PSI1NyIgaW5rc2NhcGU6d2luZG93 + LXk9IjI0IiBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIiBpbmtzY2FwZTpjdXJyZW50 + LWxheWVyPSJzdmc1NzciIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9ImZhbHNlIi8+PGRl + ZnMgY2xhc3M9IkNsaXBQYXRoR3JvdXAiIGlkPSJkZWZzOCI+PGNsaXBQYXRoIGlkPSJwcmVz + ZW50YXRpb25fY2xpcF9wYXRoIiBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHJl + Y3QgeD0iMCIgeT0iMCIgd2lkdGg9IjkwMDAiIGhlaWdodD0iNDUwMCIgaWQ9InJlY3QyIi8+ + PC9jbGlwUGF0aD48L2RlZnM+PGRlZnMgaWQ9ImRlZnM0OSIvPjxkZWZzIGlkPSJkZWZzODYi + Lz48ZGVmcyBjbGFzcz0iVGV4dFNoYXBlSW5kZXgiIGlkPSJkZWZzOTAiLz48ZGVmcyBjbGFz + cz0iRW1iZWRkZWRCdWxsZXRDaGFycyIgaWQ9ImRlZnMxMjIiLz48ZGVmcyBjbGFzcz0iVGV4 + dEVtYmVkZGVkQml0bWFwcyIgaWQ9ImRlZnMxMjQiLz48ZyBpZD0iZzEyOSI+PGcgaWQ9Imlk + MiIgY2xhc3M9Ik1hc3Rlcl9TbGlkZSI+PGcgaWQ9ImJnLWlkMiIgY2xhc3M9IkJhY2tncm91 + bmQiLz48ZyBpZD0iYm8taWQyIiBjbGFzcz0iQmFja2dyb3VuZE9iamVjdHMiLz48L2c+PC9n + PjxnIGNsYXNzPSJTbGlkZUdyb3VwIiBpZD0iZzU3NSI+PGcgaWQ9Imc1NzMiPjxnIGlkPSJj + b250YWluZXItaWQxIj48ZyBpZD0iaWQxIiBjbGFzcz0iU2xpZGUiIGNsaXAtcGF0aD0idXJs + KCNwcmVzZW50YXRpb25fY2xpcF9wYXRoKSI+PGcgY2xhc3M9IlBhZ2UiIGlkPSJnNTY5Ij48 + ZyBjbGFzcz0iY29tLnN1bi5zdGFyLmRyYXdpbmcuTGluZVNoYXBlIiBpZD0iZzE1NCI+PGcg + aWQ9ImlkMyI+PHJlY3QgY2xhc3M9IkJvdW5kaW5nQm94IiBzdHJva2U9Im5vbmUiIGZpbGw9 + Im5vbmUiIHg9Ii0yNyIgeT0iMjM3MyIgd2lkdGg9IjkwNTUiIGhlaWdodD0iNTUiIGlkPSJy + ZWN0MTMxIi8+PGRlc2MgaWQ9ImRlc2MxMzMiPjE1MDwvZGVzYz48ZGVzYyBpZD0iZGVzYzEz + NSI+MTM5PC9kZXNjPjxkZXNjIGlkPSJkZXNjMTM3Ij4xMzI8L2Rlc2M+PGRlc2MgaWQ9ImRl + c2MxMzkiPjUxMjogWFBBVEhTVFJPS0VfU0VRX0JFR0lOPC9kZXNjPjxkZXNjIGlkPSJkZXNj + MTQxIj4xMzI8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MxNDMiPjEzMzwvZGVzYz48ZGVzYyBpZD0i + ZGVzYzE0NSI+MTA5PC9kZXNjPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0icmdiKDAsMCww + KSIgc3Ryb2tlLXdpZHRoPSI1MyIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTSAwLDI0 + MDAgTCA5MDAwLDI0MDAiIGlkPSJwYXRoMTQ3Ii8+PGRlc2MgaWQ9ImRlc2MxNDkiPjUxMjog + WFBBVEhTVFJPS0VfU0VRX0VORDwvZGVzYz48ZGVzYyBpZD0iZGVzYzE1MSI+MTQwPC9kZXNj + PjwvZz48L2c+PGcgY2xhc3M9ImNvbS5zdW4uc3Rhci5kcmF3aW5nLkNsb3NlZEJlemllclNo + YXBlIiBpZD0iZzE3MyI+PGcgaWQ9ImlkNCI+PHJlY3QgY2xhc3M9IkJvdW5kaW5nQm94IiBz + dHJva2U9Im5vbmUiIGZpbGw9Im5vbmUiIHg9IjMwMSIgeT0iMTQwMCIgd2lkdGg9IjgwMSIg + aGVpZ2h0PSI4MDEiIGlkPSJyZWN0MTU2Ii8+PGRlc2MgaWQ9ImRlc2MxNTgiPjE1MDwvZGVz + Yz48ZGVzYyBpZD0iZGVzYzE2MCI+MTM5PC9kZXNjPjxkZXNjIGlkPSJkZXNjMTYyIj4xMzM8 + L2Rlc2M+PGRlc2MgaWQ9ImRlc2MxNjQiPjEzMjwvZGVzYz48ZGVzYyBpZD0iZGVzYzE2NiI+ + MTExPC9kZXNjPjxwYXRoIGZpbGw9InJnYigwLDAsMCkiIHN0cm9rZT0ibm9uZSIgZD0iTSA5 + NjksMjIwMCBDIDg4MCwyMDgzIDc5MiwxOTY3IDcwNCwxODUwIDYxNCwxOTY3IDUyMywyMDgz + IDQzMywyMjAwIDM4OSwyMjAwIDM0NSwyMjAwIDMwMSwyMjAwIDQxMywyMDYxIDUyNSwxOTIz + IDYzNywxNzg0IDUzMywxNjU2IDQzMCwxNTI4IDMyNywxNDAwIDM3MSwxNDAwIDQxNSwxNDAw + IDQ1OSwxNDAwIDU0MSwxNTA1IDYyMywxNjA5IDcwNCwxNzE0IDc4NCwxNjA5IDg2MywxNTA1 + IDk0MywxNDAwIDk4NywxNDAwIDEwMzEsMTQwMCAxMDc1LDE0MDAgOTc1LDE1MjcgODc0LDE2 + NTMgNzczLDE3ODAgODgyLDE5MjAgOTkyLDIwNjAgMTEwMSwyMjAwIDEwNTcsMjIwMCAxMDEz + LDIyMDAgOTY5LDIyMDAgWiIgaWQ9InBhdGgxNjgiLz48ZGVzYyBpZD0iZGVzYzE3MCI+MTQw + PC9kZXNjPjwvZz48L2c+PGcgY2xhc3M9ImNvbS5zdW4uc3Rhci5kcmF3aW5nLlRleHRTaGFw + ZSIgaWQ9ImcyMzYiPjxnIGlkPSJpZDUiPjxyZWN0IGNsYXNzPSJCb3VuZGluZ0JveCIgc3Ry + b2tlPSJub25lIiBmaWxsPSJub25lIiB4PSIxMzAwIiB5PSIxNTAwIiB3aWR0aD0iODAwMSIg + aGVpZ2h0PSI5MjUiIGlkPSJyZWN0MTc1Ii8+PGRlc2MgaWQ9ImRlc2MxNzciPjE1MDwvZGVz + Yz48ZGVzYyBpZD0iZGVzYzE3OSI+NTEyOiBYVEVYVF9QQUlOVFNIQVBFX0JFR0lOPC9kZXNj + Pjx0ZXh0IGNsYXNzPSJUZXh0U2hhcGUiIGlkPSJ0ZXh0MjMzIj48ZGVzYyBjbGFzcz0iUGFy + YWdyYXBoIiBpZD0iZGVzYzE4MSIvPjx0c3BhbiBjbGFzcz0iVGV4dFBhcmFncmFwaCIgZm9u + dC1mYW1pbHk9IkxpYmVyYXRpb24gU2Fucywgc2Fucy1zZXJpZiIgZm9udC1zaXplPSI2MDBw + eCIgZm9udC13ZWlnaHQ9IjQwMCIgaWQ9InRzcGFuMjMxIj48ZGVzYyBpZD0iZGVzYzE4MyI+ + MTM4PC9kZXNjPjxkZXNjIGlkPSJkZXNjMTg1Ij4xMzY8L2Rlc2M+PGRlc2MgaWQ9ImRlc2Mx + ODciPjEzNTwvZGVzYz48ZGVzYyBpZD0iZGVzYzE4OSI+MTM0PC9kZXNjPjxkZXNjIGlkPSJk + ZXNjMTkxIj4xMTM8L2Rlc2M+PGRlc2MgY2xhc3M9IlRleHRQb3J0aW9uIiBpZD0iZGVzYzE5 + MyI+dHlwZTogVGV4dDsgY29udGVudDogOyA8L2Rlc2M+PHRzcGFuIGNsYXNzPSJUZXh0UG9z + aXRpb24iIHg9IjE1NTAiIHk9IjIxNzEiIGlkPSJ0c3BhbjIyOSI+PHRzcGFuIGZpbGw9InJn + YigwLDAsMCkiIHN0cm9rZT0ibm9uZSIgaWQ9InRzcGFuMTk1Ij48L3RzcGFuPjxkZXNjIGlk + PSJkZXNjMTk3Ij41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzE5OSI+NTEy + OiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MyMDEiPjUxMjogWFRFWFRfRU9XPC9k + ZXNjPjxkZXNjIGlkPSJkZXNjMjAzIj41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0i + ZGVzYzIwNSI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MyMDciPjUxMjog + WFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjMjA5Ij41MTI6IFhURVhUX0VPQzwvZGVz + Yz48ZGVzYyBpZD0iZGVzYzIxMSI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRl + c2MyMTMiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjMjE1Ij41MTI6IFhU + RVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzIxNyI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+ + PGRlc2MgaWQ9ImRlc2MyMTkiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNj + MjIxIj41MTI6IFhURVhUX0VPVzwvZGVzYz48ZGVzYyBpZD0iZGVzYzIyMyI+NTEyOiBYVEVY + VF9FT0w8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MyMjUiPjUxMjogWFRFWFRfRU9QPC9kZXNjPjxk + ZXNjIGlkPSJkZXNjMjI3Ij41MTI6IFhURVhUX1BBSU5UU0hBUEVfRU5EPC9kZXNjPjwvdHNw + YW4+PC90c3Bhbj48L3RleHQ+PC9nPjwvZz48ZyBjbGFzcz0iY29tLnN1bi5zdGFyLmRyYXdp + bmcuVGV4dFNoYXBlIiBpZD0iZzMwMyI+PGcgaWQ9ImlkNiI+PHJlY3QgY2xhc3M9IkJvdW5k + aW5nQm94IiBzdHJva2U9Im5vbmUiIGZpbGw9Im5vbmUiIHg9IjEwMCIgeT0iMjUwMCIgd2lk + dGg9Ijg5MDEiIGhlaWdodD0iNzI2IiBpZD0icmVjdDIzOCIvPjxkZXNjIGlkPSJkZXNjMjQw + Ij4xNTA8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MyNDIiPjUxMjogWFRFWFRfUEFJTlRTSEFQRV9C + RUdJTjwvZGVzYz48dGV4dCBjbGFzcz0iVGV4dFNoYXBlIiBpZD0idGV4dDMwMCI+PGRlc2Mg + Y2xhc3M9IlBhcmFncmFwaCIgaWQ9ImRlc2MyNDQiLz48dHNwYW4gY2xhc3M9IlRleHRQYXJh + Z3JhcGgiIGZvbnQtZmFtaWx5PSJMaWJlcmF0aW9uIFNhbnMsIHNhbnMtc2VyaWYiIGZvbnQt + c2l6ZT0iNDIzcHgiIGZvbnQtd2VpZ2h0PSI0MDAiIGlkPSJ0c3BhbjI5OCI+PGRlc2MgaWQ9 + ImRlc2MyNDYiPjEzODwvZGVzYz48ZGVzYyBpZD0iZGVzYzI0OCI+MTM2PC9kZXNjPjxkZXNj + IGlkPSJkZXNjMjUwIj4xMzU8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MyNTIiPjEzNDwvZGVzYz48 + ZGVzYyBpZD0iZGVzYzI1NCI+MTEzPC9kZXNjPjxkZXNjIGNsYXNzPSJUZXh0UG9ydGlvbiIg + aWQ9ImRlc2MyNTYiPnR5cGU6IFRleHQ7IGNvbnRlbnQ6IEpvaG4gRG9lOyA8L2Rlc2M+PHRz + cGFuIGNsYXNzPSJUZXh0UG9zaXRpb24iIHg9IjM1MCIgeT0iMzAxMCIgaWQ9InRzcGFuMjk2 + Ij48dHNwYW4gZmlsbD0icmdiKDAsMCwwKSIgc3Ryb2tlPSJub25lIiBpZD0idHNwYW4yNTgi + PkpvaG4gRG9lPC90c3Bhbj48ZGVzYyBpZD0iZGVzYzI2MCI+NTEyOiBYVEVYVF9FT0M8L2Rl + c2M+PGRlc2MgaWQ9ImRlc2MyNjIiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJk + ZXNjMjY0Ij41MTI6IFhURVhUX0VPVzwvZGVzYz48ZGVzYyBpZD0iZGVzYzI2NiI+NTEyOiBY + VEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MyNjgiPjUxMjogWFRFWFRfRU9DPC9kZXNj + PjxkZXNjIGlkPSJkZXNjMjcwIj41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVz + YzI3MiI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MyNzQiPjUxMjogWFRF + WFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjMjc2Ij41MTI6IFhURVhUX0VPQzwvZGVzYz48 + ZGVzYyBpZD0iZGVzYzI3OCI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2My + ODAiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjMjgyIj41MTI6IFhURVhU + X0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzI4NCI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRl + c2MgaWQ9ImRlc2MyODYiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjMjg4 + Ij41MTI6IFhURVhUX0VPVzwvZGVzYz48ZGVzYyBpZD0iZGVzYzI5MCI+NTEyOiBYVEVYVF9F + T0w8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MyOTIiPjUxMjogWFRFWFRfRU9QPC9kZXNjPjxkZXNj + IGlkPSJkZXNjMjk0Ij41MTI6IFhURVhUX1BBSU5UU0hBUEVfRU5EPC9kZXNjPjwvdHNwYW4+ + PC90c3Bhbj48L3RleHQ+PC9nPjwvZz48ZyBjbGFzcz0iY29tLnN1bi5zdGFyLmRyYXdpbmcu + VGV4dFNoYXBlIiBpZD0iZzM3MiI+PGcgaWQ9ImlkNyI+PHJlY3QgY2xhc3M9IkJvdW5kaW5n + Qm94IiBzdHJva2U9Im5vbmUiIGZpbGw9Im5vbmUiIHg9IjEwMCIgeT0iMzA3NSIgd2lkdGg9 + Ijg5MDEiIGhlaWdodD0iNzI2IiBpZD0icmVjdDMwNSIvPjxkZXNjIGlkPSJkZXNjMzA3Ij4x + NTA8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MzMDkiPjUxMjogWFRFWFRfUEFJTlRTSEFQRV9CRUdJ + TjwvZGVzYz48dGV4dCBjbGFzcz0iVGV4dFNoYXBlIiBpZD0idGV4dDM2OSI+PGRlc2MgY2xh + c3M9IlBhcmFncmFwaCIgaWQ9ImRlc2MzMTEiLz48dHNwYW4gY2xhc3M9IlRleHRQYXJhZ3Jh + cGgiIGZvbnQtZmFtaWx5PSJMaWJlcmF0aW9uIFNhbnMsIHNhbnMtc2VyaWYiIGZvbnQtc2l6 + ZT0iNDIzcHgiIGZvbnQtd2VpZ2h0PSI0MDAiIGlkPSJ0c3BhbjM2NyI+PGRlc2MgaWQ9ImRl + c2MzMTMiPjEzODwvZGVzYz48ZGVzYyBpZD0iZGVzYzMxNSI+MTM2PC9kZXNjPjxkZXNjIGlk + PSJkZXNjMzE3Ij4xMzU8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MzMTkiPjEzNDwvZGVzYz48ZGVz + YyBpZD0iZGVzYzMyMSI+MTEzPC9kZXNjPjxkZXNjIGNsYXNzPSJUZXh0UG9ydGlvbiIgaWQ9 + ImRlc2MzMjMiPnR5cGU6IFRleHQ7IGNvbnRlbnQ6IEZhcm1lcjsgPC9kZXNjPjx0c3BhbiBj + bGFzcz0iVGV4dFBvc2l0aW9uIiB4PSIzNTAiIHk9IjM1ODUiIGlkPSJ0c3BhbjM2NSI+PHRz + cGFuIGZpbGw9InJnYigwLDAsMCkiIHN0cm9rZT0ibm9uZSIgaWQ9InRzcGFuMzI1Ij5GYXJt + ZXI8L3RzcGFuPjxkZXNjIGlkPSJkZXNjMzI3Ij41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVz + YyBpZD0iZGVzYzMyOSI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MzMzEi + PjUxMjogWFRFWFRfRU9XPC9kZXNjPjxkZXNjIGlkPSJkZXNjMzMzIj41MTI6IFhURVhUX0VP + QzwvZGVzYz48ZGVzYyBpZD0iZGVzYzMzNSI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2Mg + aWQ9ImRlc2MzMzciPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjMzM5Ij41 + MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzM0MSI+NTEyOiBYVEVYVF9FT0M8 + L2Rlc2M+PGRlc2MgaWQ9ImRlc2MzNDMiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlk + PSJkZXNjMzQ1Ij41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzM0NyI+NTEy + OiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MzNDkiPjUxMjogWFRFWFRfRU9DPC9k + ZXNjPjxkZXNjIGlkPSJkZXNjMzUxIj41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0i + ZGVzYzM1MyI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2MzNTUiPjUxMjog + WFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjMzU3Ij41MTI6IFhURVhUX0VPVzwvZGVz + Yz48ZGVzYyBpZD0iZGVzYzM1OSI+NTEyOiBYVEVYVF9FT0w8L2Rlc2M+PGRlc2MgaWQ9ImRl + c2MzNjEiPjUxMjogWFRFWFRfRU9QPC9kZXNjPjxkZXNjIGlkPSJkZXNjMzYzIj41MTI6IFhU + RVhUX1BBSU5UU0hBUEVfRU5EPC9kZXNjPjwvdHNwYW4+PC90c3Bhbj48L3RleHQ+PC9nPjwv + Zz48ZyBjbGFzcz0iY29tLnN1bi5zdGFyLmRyYXdpbmcuVGV4dFNoYXBlIiBpZD0iZzQzNSI+ + PGcgaWQ9ImlkOCI+PHJlY3QgY2xhc3M9IkJvdW5kaW5nQm94IiBzdHJva2U9Im5vbmUiIGZp + bGw9Im5vbmUiIHg9IjEwMCIgeT0iMzY2MCIgd2lkdGg9Ijg5MDEiIGhlaWdodD0iNzI2IiBp + ZD0icmVjdDM3NCIvPjxkZXNjIGlkPSJkZXNjMzc2Ij4xNTA8L2Rlc2M+PGRlc2MgaWQ9ImRl + c2MzNzgiPjUxMjogWFRFWFRfUEFJTlRTSEFQRV9CRUdJTjwvZGVzYz48dGV4dCBjbGFzcz0i + VGV4dFNoYXBlIiBpZD0idGV4dDQzMiI+PGRlc2MgY2xhc3M9IlBhcmFncmFwaCIgaWQ9ImRl + c2MzODAiLz48dHNwYW4gY2xhc3M9IlRleHRQYXJhZ3JhcGgiIGZvbnQtZmFtaWx5PSJMaWJl + cmF0aW9uIFNhbnMsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iNDIzcHgiIGZvbnQtd2VpZ2h0 + PSI0MDAiIGlkPSJ0c3BhbjQzMCI+PGRlc2MgaWQ9ImRlc2MzODIiPjEzODwvZGVzYz48ZGVz + YyBpZD0iZGVzYzM4NCI+MTM2PC9kZXNjPjxkZXNjIGlkPSJkZXNjMzg2Ij4xMzU8L2Rlc2M+ + PGRlc2MgaWQ9ImRlc2MzODgiPjEzNDwvZGVzYz48ZGVzYyBpZD0iZGVzYzM5MCI+MTEzPC9k + ZXNjPjxkZXNjIGNsYXNzPSJUZXh0UG9ydGlvbiIgaWQ9ImRlc2MzOTIiPnR5cGU6IFRleHQ7 + IGNvbnRlbnQ6IDsgPC9kZXNjPjx0c3BhbiBjbGFzcz0iVGV4dFBvc2l0aW9uIiB4PSIzNTAi + IHk9IjQxNzAiIGlkPSJ0c3BhbjQyOCI+PHRzcGFuIGZpbGw9InJnYigwLDAsMCkiIHN0cm9r + ZT0ibm9uZSIgaWQ9InRzcGFuMzk0Ij48L3RzcGFuPjxkZXNjIGlkPSJkZXNjMzk2Ij41MTI6 + IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzM5OCI+NTEyOiBYVEVYVF9FT0M8L2Rl + c2M+PGRlc2MgaWQ9ImRlc2M0MDAiPjUxMjogWFRFWFRfRU9XPC9kZXNjPjxkZXNjIGlkPSJk + ZXNjNDAyIj41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzQwNCI+NTEyOiBY + VEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M0MDYiPjUxMjogWFRFWFRfRU9DPC9kZXNj + PjxkZXNjIGlkPSJkZXNjNDA4Ij41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVz + YzQxMCI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M0MTIiPjUxMjogWFRF + WFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjNDE0Ij41MTI6IFhURVhUX0VPQzwvZGVzYz48 + ZGVzYyBpZD0iZGVzYzQxNiI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M0 + MTgiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjNDIwIj41MTI6IFhURVhU + X0VPVzwvZGVzYz48ZGVzYyBpZD0iZGVzYzQyMiI+NTEyOiBYVEVYVF9FT0w8L2Rlc2M+PGRl + c2MgaWQ9ImRlc2M0MjQiPjUxMjogWFRFWFRfRU9QPC9kZXNjPjxkZXNjIGlkPSJkZXNjNDI2 + Ij41MTI6IFhURVhUX1BBSU5UU0hBUEVfRU5EPC9kZXNjPjwvdHNwYW4+PC90c3Bhbj48L3Rl + eHQ+PC9nPjwvZz48ZyBjbGFzcz0iY29tLnN1bi5zdGFyLmRyYXdpbmcuVGV4dFNoYXBlIiBp + ZD0iZzQ4OCI+PGcgaWQ9ImlkOSI+PHJlY3QgY2xhc3M9IkJvdW5kaW5nQm94IiBzdHJva2U9 + Im5vbmUiIGZpbGw9Im5vbmUiIHg9IjQ4MDAiIHk9IjAiIHdpZHRoPSI0MjAxIiBoZWlnaHQ9 + IjcyNiIgaWQ9InJlY3Q0MzciLz48ZGVzYyBpZD0iZGVzYzQzOSI+MTUwPC9kZXNjPjxkZXNj + IGlkPSJkZXNjNDQxIj41MTI6IFhURVhUX1BBSU5UU0hBUEVfQkVHSU48L2Rlc2M+PHRleHQg + Y2xhc3M9IlRleHRTaGFwZSIgaWQ9InRleHQ0ODUiPjxkZXNjIGNsYXNzPSJQYXJhZ3JhcGgi + IGlkPSJkZXNjNDQzIi8+PHRzcGFuIGNsYXNzPSJUZXh0UGFyYWdyYXBoIiBmb250LWZhbWls + eT0iTGliZXJhdGlvbiBTYW5zLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjQyM3B4IiBmb250 + LXdlaWdodD0iNDAwIiBpZD0idHNwYW40ODMiPjxkZXNjIGlkPSJkZXNjNDQ1Ij4xMzg8L2Rl + c2M+PGRlc2MgaWQ9ImRlc2M0NDciPjEzNjwvZGVzYz48ZGVzYyBpZD0iZGVzYzQ0OSI+MTM1 + PC9kZXNjPjxkZXNjIGlkPSJkZXNjNDUxIj4xMzQ8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M0NTMi + PjExMzwvZGVzYz48ZGVzYyBjbGFzcz0iVGV4dFBvcnRpb24iIGlkPSJkZXNjNDU1Ij50eXBl + OiBUZXh0OyBjb250ZW50OiA7IDwvZGVzYz48dHNwYW4gY2xhc3M9IlRleHRQb3NpdGlvbiIg + eD0iNzQxNyIgeT0iNTEwIiBpZD0idHNwYW40ODEiPjx0c3BhbiBmaWxsPSJyZ2IoMCwwLDAp + IiBzdHJva2U9Im5vbmUiIGlkPSJ0c3BhbjQ1NyI+PC90c3Bhbj48ZGVzYyBpZD0iZGVzYzQ1 + OSI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M0NjEiPjUxMjogWFRFWFRf + RU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjNDYzIj41MTI6IFhURVhUX0VPVzwvZGVzYz48ZGVz + YyBpZD0iZGVzYzQ2NSI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M0Njci + PjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjNDY5Ij41MTI6IFhURVhUX0VP + QzwvZGVzYz48ZGVzYyBpZD0iZGVzYzQ3MSI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2Mg + aWQ9ImRlc2M0NzMiPjUxMjogWFRFWFRfRU9XPC9kZXNjPjxkZXNjIGlkPSJkZXNjNDc1Ij41 + MTI6IFhURVhUX0VPTDwvZGVzYz48ZGVzYyBpZD0iZGVzYzQ3NyI+NTEyOiBYVEVYVF9FT1A8 + L2Rlc2M+PGRlc2MgaWQ9ImRlc2M0NzkiPjUxMjogWFRFWFRfUEFJTlRTSEFQRV9FTkQ8L2Rl + c2M+PC90c3Bhbj48L3RzcGFuPjwvdGV4dD48L2c+PC9nPjxnIGNsYXNzPSJjb20uc3VuLnN0 + YXIuZHJhd2luZy5UZXh0U2hhcGUiIGlkPSJnNTY3Ij48ZyBpZD0iaWQxMCI+PHJlY3QgY2xh + c3M9IkJvdW5kaW5nQm94IiBzdHJva2U9Im5vbmUiIGZpbGw9Im5vbmUiIHg9IjAiIHk9IjEi + IHdpZHRoPSI5MDAxIiBoZWlnaHQ9IjcyNiIgaWQ9InJlY3Q0OTAiLz48ZGVzYyBpZD0iZGVz + YzQ5MiI+MTUwPC9kZXNjPjxkZXNjIGlkPSJkZXNjNDk0Ij41MTI6IFhURVhUX1BBSU5UU0hB + UEVfQkVHSU48L2Rlc2M+PHRleHQgY2xhc3M9IlRleHRTaGFwZSIgaWQ9InRleHQ1NjQiPjxk + ZXNjIGNsYXNzPSJQYXJhZ3JhcGgiIGlkPSJkZXNjNDk2Ii8+PHRzcGFuIGNsYXNzPSJUZXh0 + UGFyYWdyYXBoIiBmb250LWZhbWlseT0iTGliZXJhdGlvbiBTYW5zLCBzYW5zLXNlcmlmIiBm + b250LXNpemU9IjQyM3B4IiBmb250LXdlaWdodD0iNzAwIiBpZD0idHNwYW41NjIiPjxkZXNj + IGlkPSJkZXNjNDk4Ij4xMzg8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M1MDAiPjEzNjwvZGVzYz48 + ZGVzYyBpZD0iZGVzYzUwMiI+MTM1PC9kZXNjPjxkZXNjIGlkPSJkZXNjNTA0Ij4xMzQ8L2Rl + c2M+PGRlc2MgaWQ9ImRlc2M1MDYiPjExMzwvZGVzYz48ZGVzYyBjbGFzcz0iVGV4dFBvcnRp + b24iIGlkPSJkZXNjNTA4Ij50eXBlOiBUZXh0OyBjb250ZW50OiA7IDwvZGVzYz48dHNwYW4g + Y2xhc3M9IlRleHRQb3NpdGlvbiIgeD0iMjE4MCIgeT0iNTExIiBpZD0idHNwYW41NjAiPjx0 + c3BhbiBmaWxsPSJyZ2IoMjM5LDY1LDYxKSIgc3Ryb2tlPSJub25lIiBpZD0idHNwYW41MTAi + PjwvdHNwYW4+PGRlc2MgaWQ9ImRlc2M1MTIiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNj + IGlkPSJkZXNjNTE0Ij41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzUxNiI+ + NTEyOiBYVEVYVF9FT1c8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M1MTgiPjUxMjogWFRFWFRfRU9D + PC9kZXNjPjxkZXNjIGlkPSJkZXNjNTIwIj41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBp + ZD0iZGVzYzUyMiI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M1MjQiPjUx + MjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjNTI2Ij41MTI6IFhURVhUX0VPQzwv + ZGVzYz48ZGVzYyBpZD0iZGVzYzUyOCI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9 + ImRlc2M1MzAiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjNTMyIj41MTI6 + IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzUzNCI+NTEyOiBYVEVYVF9FT0M8L2Rl + c2M+PGRlc2MgaWQ9ImRlc2M1MzYiPjUxMjogWFRFWFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJk + ZXNjNTM4Ij41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVzYzU0MCI+NTEyOiBY + VEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M1NDIiPjUxMjogWFRFWFRfRU9DPC9kZXNj + PjxkZXNjIGlkPSJkZXNjNTQ0Ij41MTI6IFhURVhUX0VPQzwvZGVzYz48ZGVzYyBpZD0iZGVz + YzU0NiI+NTEyOiBYVEVYVF9FT0M8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M1NDgiPjUxMjogWFRF + WFRfRU9DPC9kZXNjPjxkZXNjIGlkPSJkZXNjNTUwIj41MTI6IFhURVhUX0VPQzwvZGVzYz48 + ZGVzYyBpZD0iZGVzYzU1MiI+NTEyOiBYVEVYVF9FT1c8L2Rlc2M+PGRlc2MgaWQ9ImRlc2M1 + NTQiPjUxMjogWFRFWFRfRU9MPC9kZXNjPjxkZXNjIGlkPSJkZXNjNTU2Ij41MTI6IFhURVhU + X0VPUDwvZGVzYz48ZGVzYyBpZD0iZGVzYzU1OCI+NTEyOiBYVEVYVF9QQUlOVFNIQVBFX0VO + RDwvZGVzYz48L3RzcGFuPjwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PC9nPjwvZz48L2c+PC9n + PjwvZz48L3N2Zz4= + + + + + iVBORw0KGgoAAAANSUhEUgAAAVQAAACqCAYAAADyfbdoAAAACXBIWXMAAA7CAAAOwgEVKEqA + AAATfklEQVR4nO3dd1hUV/7H8Xun0Is9FgSUJKi4dsS+saxGFE2iRMWOXTcq9hQ7KIFYWVEi + UWOJJWpcNRpr/MWusZfVxACajS122kiZ+Xl0xxCWLGXOiJr363nmeZzDnXu/4x+f58y9p+hM + JpMCALCcrrALAICXBYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQ + qAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQ + qAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQ + qAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQqAAgCYEKAJIQ + qAAgCYEKAJIQqAAgCYEKAJIQqAAgSb4D1Wg0asQra5tWq81UVdVkaTE5nVuj0RjFy9JzA4C1 + 5TtQz5w585cGDRocSElJcTC31a1b98h3333XxNbW9mFBCzEYDHYNGzbcf/z48VrmNicnp6SD + Bw/Wr1q16tmCnhcAnpV8B2r16tVPLV26tEdgYOCXJpNJFW1HjhypO2zYsDkLFiwYWNBChg4d + OjdrmIoe72effdaHMAXwoijQPdQOHTqsGzVq1CeRkZGjzW0xMTEDRE81ODh4UX7Pt3Llyi4L + Fy7sl7VtzJgxEe++++6agtQHAIWhwA+lwsPDx507d85ny5Yt/ua2IUOGzBM92Nq1ax/L63ku + XrzoPWDAgJisbc2bN98VFhb2YUFrA4DCUOBAFQ+Kli9f3k30Si9duvSqaBP3QUXv9fvvv69T + okSJW7mdIzk52fGdd95Zn5iY6Gxu8/DwuLxq1arO4kFXQWsDgMJg0bCpokWL3t20aVNAvXr1 + Dt2/f99VtF2+fNkjKCjoi61bt7bOLRQHDRo0//z581XM7+3s7Azr1q3rkJcwBoDnjcXjUCtV + qnTh888/7yl6muYhTzt27PhbaGjoRxMnTpz8R5+bP3/+oGXLlnXP3paf2wUA8DyRMrC/ffv2 + /xw/fvzUyZMnTzS3TZkyZYKvr+9Rf3//LdmPP3XqVPWRI0fOyNoWEhIyq1evXktk1AMAhUHa + TCnRGxUPqdauXdtRvBe91W7dui0X91MrVqwYZz7u3r17RURvNjU11d7cJsaffvzxx2Nl1QIA + hUFaoIpxo4sXL+594cKFSmfPnq0q2u7evVtUhOeBAwcaODg4pIhxq3369PksLi6uovlz5cuX + /3n9+vXv6PX6dFm1AEBhkDqXX8xs2rhxYzvxU//27dvFRZv4eS+GRYn7pTNmzBgpwtN8vHgI + JXq0pUqVuimzDgAoDNIXR6lQoUK8CM+AgIBNmZmZWtEmhle5uLg8yD54f968eUPEsCvZNQBA + YbDKalOtW7feKgbmjxs3LtzcFh0dPTjrMYMHD44uyKwqAHheWW35PjF19OTJkzXEIP3sf6tf + v/7BWbNmhVjr2gBQGKwWqOIh1aRHVq9e3cm8iIpZx44d19rY2KRZ69oAUBisFqhiGmr37t2X + ZQ9TQdwK8PPzOyyGS1nr+gDwrFktUPv37//p0aNHfc3vxdx/80yq9PR0vZieeuzYsdpMMwXw + srBKoIrhUVmnlTo6OiZv27atleixxsfHVxBtV65cce/UqdPq7du3t2QhFAAvA+mBumvXruZZ + n+4LYo6++Hkv7qc2atRoX1pamo1o3717dzMxZXXatGkfyK4DAJ41qYGakJDg2blz51UZGRlP + zytW4hc9U/FvMeA/IiJizPDhw2eb/y7WVRULoohl/2TWAgDPmrRATUpKcmrXrt3GW7dulTC3 + iQdPWVf1F8RWKfv27WtknvMvHlr17t17cZUqVc5Xrlz5X7LqAYBnTUqgmufoiw38zG1iOqkI + zZyGRy1atChYHCtW6xfvxQLTYs6/2JvK2dk5UUZNAPCsSQlUMStqzZo175rfiyf64qGUm5vb + v3M6XoSmOF4sTG1edUosqiJGBoj9pWTUBADPmsWBKp7eiwH8WdvE4tItW7bc/r8+V61atdNi + ttTAgQMXmNvErCoxi0rcd7W0LgB41iwKVPGTXQx9Mi+CIrRt23Zz9qf8f0SsQiWW9hPbUpvb + xG6qNWvWPNG4ceO9ltQGAM9agQPVfN/TvJeU4OnpmbBkyZJeYtppXs8jFk0Ri1Cb95YSg/7F + 9tFi0H/ZsmWvFrQ+AHjWChSoYsaTmOmU0wZ7xYsXv52fc4lB/+J+qhgRIHZBFW3Xr18vHRgY + +OW3337blDn/AF4UBQrUjz76KHTz5s1ts7aJnmatWrWOF+R8Pj4+58RaqSKkzW3iVsD7778/ + Xcy6Ksg5AeBZy3egihX3xWD8rG3i6bwYS2pJIV26dFm5c+fOFmJIlblt5syZI2rUqHHSPDEA + AJ5n+QrU06dPV+vRo8fSrCtIVa9e/dTs2bOHyyhGrOB/4sSJmuJlbhMLUYuer+jFyrgGAFhL + vgJVPCQSoZq1rWTJkr/a29unyihG3IcV903N+1GZubq63pdxfgCwpnwFqlhqz9rL7YnwJEAB + vIisth4qAPzZEKgAIAmBCgCSEKgAIAmBCgCS6D799NP+4lXYhQDAi0539erVsmIhksIuBABe + dDoxbTQgIGBTYRcCAC86nZj9xDJ5AGA5HkoBgCQEKgBIQqACgCQEKgBIQqACgCQEKgBIQqAC + gCQEKgBIYlmgGuP0M5tUXjdyf1qAeKuvHXb61OEPmlTWKrmvuJ++32GEd/Nvt3c9cOTk1FrD + HhVitKiWp5I0X7xdMrbrBkPvx29VjaJ3cE0t5VH1Sv1WnXcMCQmOeqO83Q9yrgUAv7EsUDVl + MjrO3jq+2j1D1HdT3x4enqy4SarLYjrvvj/FRncd5qExpaQn33JIOLW76prY0T1bLF0eNHbN + xn6hzUp8pSqKqbDrBPDysPAnv73JvU6zU+5KqnonRhOoxD8/gao6VUiu+9c39j3tLbcJ/Lrv + kF4xoW1bLZvcdei8GqdWnAsspV4s5DIBvESsdw/V8IP92kljRk37Yk/vf914WM6+TNUbTbuP + XxU5vl1oRRvlgfkwrXpb3T21fUhI1I4RPyY6FKvQOPjQJ4umDw5w0/5LSd/j8J6X/95zI3dt + Hn4z7OEHi/5v0KV7NiXcG/c9NHPR9EFt3TQX8lOS6up37/3okWO/qh22d+6K+K4dQipO1Ihe + al5qTbts+/W00UMnL9nZ/8y1h+WdPHx/aT/s4wURg/3mFlOVh5L/9wC8gKwTqKY72i3vtZoS + tLFiz3Exu0d8Wct1/90jMTWGD3h3TpuUHUW/n9F4kOOTA5Vba8f/bbb/eztidk0LsI3/suz7 + fcKi+k98Y8qlz/y7OD4qT6fLyDwfNbbbujGzovdcqentcGVl6X7Nem/oN+mNKT/Ftg5yUJSM + fH3hym3j2nhPOTNr3+F6SSEVdS6mO8bca000fjum1QcdlrgMHTD/m3ErGxTZfn1XRKNBQ/1n + dNUf03zd3zNCw+0D4E/PKoFqurH+lagvrnX2nbozZtJbXiseh417WMKck1terT8/ZtSOyY3D + 3rJVbipKpnqnVNDd6IiuYz01SrLyl1dPjAiY1+ztkydaJGT6O/ooarqqGJWk13v9HNGv9rwS + qmJQvALje7QcsW3t8eOt4jNbO/rk5QFYVtpy6R7ltFfTb1x/7ZZRsXW+ud4lt1rbGzakzl4U + 19NnzPHPZnSpulA8QPMKjkqYc3yX95tzYnudDA5dWEun3LHG/yWAF4dVAjX93DHP0+nlXDr7 + uR/9reemN/n41jjuEHHG4WRchtdblUWgak3ufn6n3DRK6pNjNEqRYq531dRkm1STohWnEse4 + Vat6obiqpD05RlVcXF3uZzkmn4yq0fjoQjqd8dGXN+Wl1jZ3jySdMLgV6fCG997fRiPYm+r+ + te4+m9jDfz/6q8mtVhmVQAX+5KzTQ0184JCoOGtcnDVJWds1js4GByXJmJhkevKL/1E46m30 + aVmPUVU1209nVdHpdenZmgouI87mYlymp2MDj2slNYohL7UaEx8YEzMuO/yjufOX89Usw7uM + GZo05S+ZN24ZiytlCpDtAF4qBQhUo5r48+myJ68XKVfH1/OY/aPf7U97fXp9pujBqS6uKc5K + ovFBotFJydKJzEx6YJ+suGhcnTWJEr9DvhiOrPPZdNm+cqPx9VbZPao1PQ+1ajKKJLvoKyZ3 + Xrlh1LAq2v2/O6Fqayrhqf33s/4eAJ4/BQjUNOVgqP/QNpve7PbVhUUN27ooCUrGDzbnf8j0 + sq/ieb20VknV+/jG17BZdP/wkZ/rGBtW3PTkp3S6eubQ8TqpResl1fbSXpL/VXJnuru36KRh + C8ITPIJvL3in1FoxDjUvtepSfR/Wslt0N+FOsWLelcpcNI9fNd5OKBKvlLUtYaskF8b3AfB8 + KUCg2pmaBPdeXfnzyL5DgsrH3ulXY0HK9vAGURfK1u0U2bK/k3jSVOrtm0O7h65oFzG4//TK + M870rOZw8Pq+qLrDYq78verQZaubOyhXlXTFVv7X+Y0pKd7xyP/taXRDoyQbDXfsrpze5bN8 + /pK+e+7XeGXC5rBuTZ2VX8RxealVdWhvGto7dJn/hF4jppScfrV77RL70uJ3uc0NCQlbU3pm + xvGNwe3dNYQq8GdXoHuodn4TTny1Iq3H3yfMDx0Y+GCFXfl6VzvFbBz3yZuuqx/33tQima1m + fTPlC9dRKaF960dOuZle1ql8rautx26MjRhdJ8Lu8W0C68q4GOvVq3nsZnHDVdXojc6lX79Z + 980JOzZ+ODTCv6L92acH5qlWZ6VpxDfTvywyJmnKsOaTw39JdtcWf/Vevbemb94yvfd4whSA + UMCHUrYmrw6RX2999PrDQ+xeS+0Q/s+pHcKVqTn+Xd8wZWacwS9bo6l+5I+hhkgl9Mn7hkru + x2TnZAz6KjU4SFGC8/ptcq1VsPE0tJ20JrLtJCUyz+cF8KfCalMAIAmBCgCSEKgAIAmBCgCS + EKgAIAmBCgCSEKgAIAmBCgCSFDBQs22El53e1zD99MGW4ypp91pQGwC8UCzqoepeD46Lieoy + 4r+mXmpcja+5a89YVBkAvGAsClTV2SupfvMWe/K0bXReZWZoMzQ6k06Vta30c3ItAC89q99D + zfj3trLhoyeHLtl52v/KvYzijuWqX3tzYPjiOWOaTi+lUQxK2k7HQZ4BB34cvX5Tm91DPCfs + ft1/1g9j3zxVv838cyFbtvT9aYL+oxVH+1w1lbFp0G/usqWjnD5eNnh4WNT2i+3uO1ZKaz9p + SWTswOqzHu8tldtGejldK35rk76l1LO5fxMA+N+sG6jGK/rY4MCZYdc614jZsLBbg9KahJsH + 5/oOHhA4e5D7+V/XBpWap6o2Jhu9MT3h80/a7es4a/O2id6tvIreij8nNueLntbl8MeLQ8/M + fsXtckynLk2G9533t70N6naL3DYlYZWu3/eTWw9rMWrc+83f2vJNn9JJ53LdSC/Ha6lxVv0/ + APCnYVmgGtM0KUlJjkna3y/Hp6p6k52jbYpWUyaj67Kz7/lrSmrcS9rfEH97tcKoK92jFwdN + 33msaXpQ62gbRatotZnGn50DHu74oP20CholSUnf76AqJiXZp0f8hLe9Vjo+6l1W7txxa92R + 2+5dqB9ydnTjV7bYPLq6X+eATd6fLBx18kLG6ybdhpu5bqSnaA3/dS0AkMSiQE0/MblqnSKT + f8nerine++amq4tq+tvorqk395SYOW5W6PoDF/567f7DYhkmkyrWKHX0SN1iero7lMZUtnbt + c24aJSXLWUzlKntfclWVx/tJqY5OBidVl+5V6bUf9P9ZMf9xm5KamWow2WWcO+KZ60Z6JZRL + OV8LACxn2VP+Sv1/WhLTfYhHtqf8qv6V9Cp65ZaSuMN1VEDfFWsrjDMsPbSrRbPXip21U66o + c5u+tuYDRbH57RMaxdHJMfn3e++pik6nzfjt7ZPN+37X9p88Fn8wis32cttI70mg5nAtALCc + ZU/5HT2SazVsdOiPnvKnf7+x9tdXy1fssWJ8T39v/cnHjRm37X69YyyqlM021EpVTDmcIs80 + LvnYSM/CawFATqz6UMpkSLUxqK5qUVfN08BNOby82toLmTVNPqb9/+uz+aXz8U3IdSO9dMVB + 5jUBICurBqqumt9PtWxWPFgdvSG4w4d+CZmnlnlPiLgX0qSF077FP55wP3a9pUed4spNGddS + i7e/letGego9UwDWY9VA1ZTr+cucfxwZ2evDnuE1l9ied/frfGxC9NyR/pcdHPd3mbmq3Vu2 + q7/5ttnbcq7mbMx1I71MeqgArKeAgfp0I7xc2Joq9Yxdc+jR63fNVaKUs/eiXjG/rZN9I76c + NvCz7fhgTWpHz6xNmgrD4/cahpd52pDbRno5bgwIAHKw2hQASEKgAoAkBCoASEKgAoAkBCoA + SEKgAoAkBCoASEKgAoAkBCoASEKgAoAkBCoASEKgAoAkBCoASEKgAoAkBCoASEKgAoAkBCoA + SEKgAoAkBCoASEKgAoAkBCoASEKgAoAkBCoASEKgAoAkBCoASEKgAoAkBCoASEKgAoAkBCoA + SEKgAoAkBCoASEKgAoAkBCoASEKgAoAk/w/xJdzkzVWshgAAAABJRU5ErkJggg== + + + 140 + + + + + \ No newline at end of file diff --git a/sw/qa/extras/odfexport/data/spellout-numberingtypes.odt b/sw/qa/extras/odfexport/data/spellout-numberingtypes.odt new file mode 100644 index 000000000..0f07d93f2 Binary files /dev/null and b/sw/qa/extras/odfexport/data/spellout-numberingtypes.odt differ diff --git a/sw/qa/extras/odfexport/data/style-link.fodt b/sw/qa/extras/odfexport/data/style-link.fodt new file mode 100644 index 000000000..76c36c698 --- /dev/null +++ b/sw/qa/extras/odfexport/data/style-link.fodt @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/odfexport/data/sw_hatch.odt b/sw/qa/extras/odfexport/data/sw_hatch.odt new file mode 100644 index 000000000..45e36c6ec Binary files /dev/null and b/sw/qa/extras/odfexport/data/sw_hatch.odt differ diff --git a/sw/qa/extras/odfexport/data/table-in-frame-in-table-in-header-base.odt b/sw/qa/extras/odfexport/data/table-in-frame-in-table-in-header-base.odt new file mode 100644 index 000000000..44dbf0bde Binary files /dev/null and b/sw/qa/extras/odfexport/data/table-in-frame-in-table-in-header-base.odt differ diff --git a/sw/qa/extras/odfexport/data/table_number_format_3.docx b/sw/qa/extras/odfexport/data/table_number_format_3.docx new file mode 100644 index 000000000..1bb423e45 Binary files /dev/null and b/sw/qa/extras/odfexport/data/table_number_format_3.docx differ diff --git a/sw/qa/extras/odfexport/data/table_styles_1.odt b/sw/qa/extras/odfexport/data/table_styles_1.odt new file mode 100644 index 000000000..701fd92c2 Binary files /dev/null and b/sw/qa/extras/odfexport/data/table_styles_1.odt differ diff --git a/sw/qa/extras/odfexport/data/table_styles_2.odt b/sw/qa/extras/odfexport/data/table_styles_2.odt new file mode 100644 index 000000000..735ea4431 Binary files /dev/null and b/sw/qa/extras/odfexport/data/table_styles_2.odt differ diff --git a/sw/qa/extras/odfexport/data/table_styles_3.odt b/sw/qa/extras/odfexport/data/table_styles_3.odt new file mode 100644 index 000000000..736786489 Binary files /dev/null and b/sw/qa/extras/odfexport/data/table_styles_3.odt differ diff --git a/sw/qa/extras/odfexport/data/table_styles_4.odt b/sw/qa/extras/odfexport/data/table_styles_4.odt new file mode 100644 index 000000000..0d96127e3 Binary files /dev/null and b/sw/qa/extras/odfexport/data/table_styles_4.odt differ diff --git a/sw/qa/extras/odfexport/data/table_styles_5.odt b/sw/qa/extras/odfexport/data/table_styles_5.odt new file mode 100644 index 000000000..c90958322 Binary files /dev/null and b/sw/qa/extras/odfexport/data/table_styles_5.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf100492.odt b/sw/qa/extras/odfexport/data/tdf100492.odt new file mode 100644 index 000000000..e17bd67c5 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf100492.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf101710.odt b/sw/qa/extras/odfexport/data/tdf101710.odt new file mode 100644 index 000000000..50ab73607 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf101710.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf101856.odt b/sw/qa/extras/odfexport/data/tdf101856.odt new file mode 100644 index 000000000..bddd15022 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf101856.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf101856_overlapped.odt b/sw/qa/extras/odfexport/data/tdf101856_overlapped.odt new file mode 100644 index 000000000..c05df538d Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf101856_overlapped.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf103091.fodt b/sw/qa/extras/odfexport/data/tdf103091.fodt new file mode 100644 index 000000000..1da98f49d --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf103091.fodt @@ -0,0 +1,307 @@ + + + + ms 2017-06-15T21:56:462017-06-15T21:59:44ms P0D1LibreOffice/3.5$Linux_X86_64 LibreOffice_project/3215f89-f603614-ab984f2-7348103-1225a5b + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/odfexport/data/tdf103567.odt b/sw/qa/extras/odfexport/data/tdf103567.odt new file mode 100644 index 000000000..cbd29bd29 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf103567.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf104254_noHeaderWrapping.odt b/sw/qa/extras/odfexport/data/tdf104254_noHeaderWrapping.odt new file mode 100644 index 000000000..06dde4802 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf104254_noHeaderWrapping.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf107292.odt b/sw/qa/extras/odfexport/data/tdf107292.odt new file mode 100644 index 000000000..f35da387f Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf107292.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf107696.odt b/sw/qa/extras/odfexport/data/tdf107696.odt new file mode 100644 index 000000000..c24100bbd Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf107696.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt b/sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt new file mode 100644 index 000000000..8fcf98a62 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf115815.odt b/sw/qa/extras/odfexport/data/tdf115815.odt new file mode 100644 index 000000000..7c2aad0da Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf115815.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf118393.odt b/sw/qa/extras/odfexport/data/tdf118393.odt new file mode 100644 index 000000000..ff8d54009 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf118393.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf118502.odt b/sw/qa/extras/odfexport/data/tdf118502.odt new file mode 100644 index 000000000..f006d607a Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf118502.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf118637.odt b/sw/qa/extras/odfexport/data/tdf118637.odt new file mode 100644 index 000000000..c2a8b4f53 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf118637.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf121658.odt b/sw/qa/extras/odfexport/data/tdf121658.odt new file mode 100644 index 000000000..1ab6f75c8 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf121658.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt b/sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt new file mode 100644 index 000000000..21969e9e5 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf128504.docx b/sw/qa/extras/odfexport/data/tdf128504.docx new file mode 100644 index 000000000..2e6e5225b Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf128504.docx differ diff --git a/sw/qa/extras/odfexport/data/tdf129520.docx b/sw/qa/extras/odfexport/data/tdf129520.docx new file mode 100644 index 000000000..4f74826ad Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf129520.docx differ diff --git a/sw/qa/extras/odfexport/data/tdf129568-ui.fodt b/sw/qa/extras/odfexport/data/tdf129568-ui.fodt new file mode 100644 index 000000000..8958bd685 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf129568-ui.fodt @@ -0,0 +1,368 @@ + + + + 2020-02-03T11:01:15.2025491202020-02-03T11:02:08.562696933PT55S2LibreOffice/6.3.4.2.0$Linux_X86_64 LibreOffice_project/30$Build-2 + + + 0 + 0 + 25137 + 13522 + true + false + + + view2 + 4165 + 2616 + 0 + 0 + 25135 + 13520 + 0 + 1 + false + 100 + false + false + + + + + false + true + true + true + 0 + true + true + + false + false + true + false + false + false + true + true + false + false + false + false + false + false + false + false + false + true + true + false + false + true + 1284982 + false + + false + true + false + false + false + true + false + false + false + true + 1284982 + + true + false + false + true + false + true + true + false + true + false + false + false + 0 + false + true + high-resolution + false + false + false + true + false + false + false + true + true + + true + false + false + true + false + false + false + + true + false + false + 1 + true + false + false + 0 + false + false + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/odfexport/data/tdf129568.fodt b/sw/qa/extras/odfexport/data/tdf129568.fodt new file mode 100644 index 000000000..30256a6cd --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf129568.fodt @@ -0,0 +1,368 @@ + + + + 2020-02-03T11:01:15.2025491202020-02-03T11:02:08.562696933PT55S2LibreOffice/6.3.4.2.0$Linux_X86_64 LibreOffice_project/30$Build-2 + + + 0 + 0 + 25137 + 13522 + true + false + + + view2 + 4165 + 2616 + 0 + 0 + 25135 + 13520 + 0 + 1 + false + 100 + false + false + + + + + false + true + true + true + 0 + true + true + + false + false + true + false + false + false + true + true + false + false + false + false + false + false + false + false + false + true + true + false + false + true + 1284982 + false + + false + true + false + false + false + true + false + false + false + true + 1284982 + + true + false + false + true + false + true + true + false + true + false + false + false + 0 + false + true + high-resolution + false + false + false + true + false + false + false + true + true + + true + false + false + true + false + false + false + + true + false + false + 1 + true + false + false + 0 + false + false + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/odfexport/data/tdf130314.docx b/sw/qa/extras/odfexport/data/tdf130314.docx new file mode 100644 index 000000000..592ffbf5b Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf130314.docx differ diff --git a/sw/qa/extras/odfexport/data/tdf130950.odt b/sw/qa/extras/odfexport/data/tdf130950.odt new file mode 100644 index 000000000..a669cb87b Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf130950.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf131025_noZerosInTable.odt b/sw/qa/extras/odfexport/data/tdf131025_noZerosInTable.odt new file mode 100644 index 000000000..f2bffb050 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf131025_noZerosInTable.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf131621.ott b/sw/qa/extras/odfexport/data/tdf131621.ott new file mode 100644 index 000000000..8590c16ae Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf131621.ott differ diff --git a/sw/qa/extras/odfexport/data/tdf131812.odt b/sw/qa/extras/odfexport/data/tdf131812.odt new file mode 100644 index 000000000..c2833ff25 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf131812.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf132642_keepWithNextTable.odt b/sw/qa/extras/odfexport/data/tdf132642_keepWithNextTable.odt new file mode 100644 index 000000000..739cd0078 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf132642_keepWithNextTable.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf134987.docx b/sw/qa/extras/odfexport/data/tdf134987.docx new file mode 100644 index 000000000..c828bf442 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf134987.docx differ diff --git a/sw/qa/extras/odfexport/data/tdf135144.docx b/sw/qa/extras/odfexport/data/tdf135144.docx new file mode 100644 index 000000000..012c40432 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf135144.docx differ diff --git a/sw/qa/extras/odfexport/data/tdf135338_firstLeftPageFooter.odt b/sw/qa/extras/odfexport/data/tdf135338_firstLeftPageFooter.odt new file mode 100644 index 000000000..4f9808875 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf135338_firstLeftPageFooter.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf136645.odt b/sw/qa/extras/odfexport/data/tdf136645.odt new file mode 100644 index 000000000..a8487c317 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf136645.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf137199.docx b/sw/qa/extras/odfexport/data/tdf137199.docx new file mode 100644 index 000000000..25b52977b Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf137199.docx differ diff --git a/sw/qa/extras/odfexport/data/tdf139126.odt b/sw/qa/extras/odfexport/data/tdf139126.odt new file mode 100644 index 000000000..0648f0abe Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf139126.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf140437.odt b/sw/qa/extras/odfexport/data/tdf140437.odt new file mode 100644 index 000000000..8ed9ee77c Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf140437.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf142483.odt b/sw/qa/extras/odfexport/data/tdf142483.odt new file mode 100644 index 000000000..d6aba2bbd Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf142483.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf143605.odt b/sw/qa/extras/odfexport/data/tdf143605.odt new file mode 100644 index 000000000..7fb597e6d Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf143605.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf143793_noBodyWrapping.odt b/sw/qa/extras/odfexport/data/tdf143793_noBodyWrapping.odt new file mode 100644 index 000000000..c2de181f1 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf143793_noBodyWrapping.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf144319.odt b/sw/qa/extras/odfexport/data/tdf144319.odt new file mode 100644 index 000000000..937482c34 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf144319.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf145361.odt b/sw/qa/extras/odfexport/data/tdf145361.odt new file mode 100644 index 000000000..e5a6a03c9 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf145361.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf146264.odt b/sw/qa/extras/odfexport/data/tdf146264.odt new file mode 100644 index 000000000..941c7db74 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf146264.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf149248.odt b/sw/qa/extras/odfexport/data/tdf149248.odt new file mode 100644 index 000000000..18685bd0a Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf149248.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf149324.odt b/sw/qa/extras/odfexport/data/tdf149324.odt new file mode 100644 index 000000000..da4b87d89 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf149324.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf149420.odt b/sw/qa/extras/odfexport/data/tdf149420.odt new file mode 100644 index 000000000..249d7267e Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf149420.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf150149.fodt b/sw/qa/extras/odfexport/data/tdf150149.fodt new file mode 100644 index 000000000..51aea046a --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf150149.fodt @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + A + + + B + + + C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/odfexport/data/tdf150394.odt b/sw/qa/extras/odfexport/data/tdf150394.odt new file mode 100644 index 000000000..e514f405b Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf150394.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf151100.docx b/sw/qa/extras/odfexport/data/tdf151100.docx new file mode 100644 index 000000000..e0341bdb9 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf151100.docx differ diff --git a/sw/qa/extras/odfexport/data/tdf43569_conditionalfield.doc b/sw/qa/extras/odfexport/data/tdf43569_conditionalfield.doc new file mode 100644 index 000000000..456a6ed83 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf43569_conditionalfield.doc differ diff --git a/sw/qa/extras/odfexport/data/tdf66305.odt b/sw/qa/extras/odfexport/data/tdf66305.odt new file mode 100644 index 000000000..4a310a83d Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf66305.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf77961.odt b/sw/qa/extras/odfexport/data/tdf77961.odt new file mode 100644 index 000000000..a6205e018 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf77961.odt differ diff --git a/sw/qa/extras/odfexport/data/tdf92379.fodt b/sw/qa/extras/odfexport/data/tdf92379.fodt new file mode 100644 index 000000000..762a04d57 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf92379.fodt @@ -0,0 +1,89 @@ + + + + ms 2015-08-24T21:49:45.305718699LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/odfexport/data/tdf95806.docx b/sw/qa/extras/odfexport/data/tdf95806.docx new file mode 100644 index 000000000..65bfaae3e Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf95806.docx differ diff --git a/sw/qa/extras/odfexport/data/tdf99631.docx b/sw/qa/extras/odfexport/data/tdf99631.docx new file mode 100644 index 000000000..c72950b72 Binary files /dev/null and b/sw/qa/extras/odfexport/data/tdf99631.docx differ diff --git a/sw/qa/extras/odfexport/data/testTdf52065_centerTabs.odt b/sw/qa/extras/odfexport/data/testTdf52065_centerTabs.odt new file mode 100644 index 000000000..8cdaf3eb9 Binary files /dev/null and b/sw/qa/extras/odfexport/data/testTdf52065_centerTabs.odt differ diff --git a/sw/qa/extras/odfexport/data/textbox-rounded-corners.odt b/sw/qa/extras/odfexport/data/textbox-rounded-corners.odt new file mode 100644 index 000000000..add7512c6 Binary files /dev/null and b/sw/qa/extras/odfexport/data/textbox-rounded-corners.odt differ diff --git a/sw/qa/extras/odfexport/data/textframe-gradient.odt b/sw/qa/extras/odfexport/data/textframe-gradient.odt new file mode 100644 index 000000000..cdcae4fff Binary files /dev/null and b/sw/qa/extras/odfexport/data/textframe-gradient.odt differ diff --git a/sw/qa/extras/odfexport/data/textframe-transparent-shadow.odt b/sw/qa/extras/odfexport/data/textframe-transparent-shadow.odt new file mode 100644 index 000000000..508e853c9 Binary files /dev/null and b/sw/qa/extras/odfexport/data/textframe-transparent-shadow.odt differ diff --git a/sw/qa/extras/odfexport/data/textframe-vertadjust.odt b/sw/qa/extras/odfexport/data/textframe-vertadjust.odt new file mode 100644 index 000000000..bbf3416c0 Binary files /dev/null and b/sw/qa/extras/odfexport/data/textframe-vertadjust.odt differ diff --git a/sw/qa/extras/odfexport/data/user-field-decl-fly.odt b/sw/qa/extras/odfexport/data/user-field-decl-fly.odt new file mode 100644 index 000000000..2ffe3ae55 Binary files /dev/null and b/sw/qa/extras/odfexport/data/user-field-decl-fly.odt differ diff --git a/sw/qa/extras/odfexport/data/user-field-decl.odt b/sw/qa/extras/odfexport/data/user-field-decl.odt new file mode 100644 index 000000000..f037f403e Binary files /dev/null and b/sw/qa/extras/odfexport/data/user-field-decl.odt differ diff --git a/sw/qa/extras/odfexport/data/userdefattr-tablecell.odt b/sw/qa/extras/odfexport/data/userdefattr-tablecell.odt new file mode 100644 index 000000000..c8f6dcca5 Binary files /dev/null and b/sw/qa/extras/odfexport/data/userdefattr-tablecell.odt differ diff --git a/sw/qa/extras/odfexport/data/whitespace.odt b/sw/qa/extras/odfexport/data/whitespace.odt new file mode 100644 index 000000000..fe2b3dd57 Binary files /dev/null and b/sw/qa/extras/odfexport/data/whitespace.odt differ diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx new file mode 100644 index 000000000..88a0d657f --- /dev/null +++ b/sw/qa/extras/odfexport/odfexport.cxx @@ -0,0 +1,3224 @@ +/* -*- 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 +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // for SwHiddenTextField::ParseIfFieldDefinition() method call +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/odfexport/data/", "writer8") {} + + /** + * Denylist handling + */ + bool mustTestImportOf(const char* filename) const override { + // Only test import of .odt document + return o3tl::ends_with(filename, ".odt"); + } + + bool mustValidate(const char* /*filename*/) const override + { + return true; + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testMathObjectFlatExport) +{ + comphelper::ScopeGuard g([this]() { + mpFilter = "writer8"; + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Cache::Writer::OLE_Objects::set(20, pBatch); + return pBatch->commit(); + }); + mpFilter = "OpenDocument Text Flat XML"; // doesn't happen with ODF package + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Cache::Writer::OLE_Objects::set(1, pBatch); + pBatch->commit(); + loadAndReload("2_MathType3.docx"); + + uno::Reference xModifiable(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(!xModifiable->isModified()); + // see preTest(), set the OLE cache to 1 for this test + // and the problem was that the formulas that were in the cache + // (the second one) were lost + OUString formula1(getFormula(getRun(getParagraph(1), 1))); + CPPUNIT_ASSERT_EQUAL(OUString(" size 12{1+1=2} {}"), formula1); + OUString formula2(getFormula(getRun(getParagraph(2), 1))); + CPPUNIT_ASSERT_EQUAL(OUString(" size 12{2+2=4} {}"), formula2); +} + +DECLARE_ODFEXPORT_TEST(testTdf144319, "tdf144319.odt") +{ + CPPUNIT_ASSERT_EQUAL(7, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + OUString formula1(getFormula(getRun(getParagraph(3), 1))); + CPPUNIT_ASSERT_EQUAL(OUString("{ x = frac { { - b +- sqrt { b ^ 2 - 4 a c } } } { { 2 a } } }"), formula1); + OUString formula2(getFormula(getRun(getParagraph(4), 1))); + CPPUNIT_ASSERT_EQUAL(OUString("{ sum csup n csub { i = 1 } i ^ 3 = left ( frac { { n left ( { n + 1 } right ) } } { 2 } right ) ^ 2 }"), formula2); + OUString formula3(getFormula(getRun(getParagraph(5), 1))); + CPPUNIT_ASSERT_EQUAL(OUString("{ sum ^ n _ { i = 1 } i ^ 3 = left ( frac { { n left ( { n + 1 } right ) } } { 2 } right ) ^ 2 }"), formula3); + OUString formula4(getFormula(getRun(getParagraph(6), 1))); + CPPUNIT_ASSERT_EQUAL(OUString("{ sum ^ n _ { i = 1 } i ^ 3 = left ( frac { { n left ( { n + 1 } right ) } } { 2 } right ) ^ 2 }"), formula4); + + // Without the fix in place, this test would have failed with + // - the property is of unexpected type or void: Model + OUString formula5(getFormula(getRun(getParagraph(7), 1))); + CPPUNIT_ASSERT_EQUAL(OUString("{ y ^ 2 { nitalic m p } = left ( { x ^ 3 + 7 } right ) { nitalic m p } }"), formula5); +} + +static void testTdf43569_CheckIfFieldParse() +{ + { + OUString paramCondition; + OUString paramTrue; + OUString paramFalse; + + SwHiddenTextField::ParseIfFieldDefinition("IF A B C", paramCondition, paramTrue, paramFalse); + + CPPUNIT_ASSERT_EQUAL(OUString("A"), paramCondition); + CPPUNIT_ASSERT_EQUAL(OUString("B"), paramTrue); + CPPUNIT_ASSERT_EQUAL(OUString("C"), paramFalse); + } + + { + OUString paramCondition; + OUString paramTrue; + OUString paramFalse; + + SwHiddenTextField::ParseIfFieldDefinition(" IF AAA BBB CCC ", paramCondition, paramTrue, paramFalse); + + CPPUNIT_ASSERT_EQUAL(OUString("AAA"), paramCondition); + CPPUNIT_ASSERT_EQUAL(OUString("BBB"), paramTrue); + CPPUNIT_ASSERT_EQUAL(OUString("CCC"), paramFalse); + } + + { + OUString paramCondition; + OUString paramTrue; + OUString paramFalse; + + SwHiddenTextField::ParseIfFieldDefinition(" IF AAA \"BBB\" \"CCC\" ", paramCondition, paramTrue, paramFalse); + + CPPUNIT_ASSERT_EQUAL(OUString("AAA"), paramCondition); + CPPUNIT_ASSERT_EQUAL(OUString("BBB"), paramTrue); + CPPUNIT_ASSERT_EQUAL(OUString("CCC"), paramFalse); + } + + // true-case and false-case have spaces inside + { + OUString paramCondition; + OUString paramTrue; + OUString paramFalse; + + SwHiddenTextField::ParseIfFieldDefinition(" IF A A A \"B B B\" \"C C C\" ", paramCondition, paramTrue, paramFalse); + + CPPUNIT_ASSERT_EQUAL(OUString("A A A"), paramCondition); + CPPUNIT_ASSERT_EQUAL(OUString("B B B"), paramTrue); + CPPUNIT_ASSERT_EQUAL(OUString("C C C"), paramFalse); + } + + // true-case and false-case have leading/trailing space + { + OUString paramCondition; + OUString paramTrue; + OUString paramFalse; + + SwHiddenTextField::ParseIfFieldDefinition("IF A1 A2 A3 \"B1 B2 \" \" C1 C2\" ", paramCondition, paramTrue, paramFalse); + + CPPUNIT_ASSERT_EQUAL(OUString("A1 A2 A3"), paramCondition); + CPPUNIT_ASSERT_EQUAL(OUString("B1 B2 "), paramTrue); + CPPUNIT_ASSERT_EQUAL(OUString(" C1 C2"), paramFalse); + } + + // true-case and false-case are empty + { + OUString paramCondition; + OUString paramTrue; + OUString paramFalse; + + SwHiddenTextField::ParseIfFieldDefinition("IF condition \"\" \"\" ", paramCondition, paramTrue, paramFalse); + + CPPUNIT_ASSERT_EQUAL(OUString("condition"), paramCondition); + CPPUNIT_ASSERT_EQUAL(OUString(""), paramTrue); + CPPUNIT_ASSERT_EQUAL(OUString(""), paramFalse); + } +} + +// Input document contains only one IF-field, +// and it should be imported as com.sun.star.text.TextField.ConditionalText in any case, +// instead of insertion of the pair of two field-marks: + . +DECLARE_ODFEXPORT_TEST(testTdf43569, "tdf43569_conditionalfield.doc") +{ + // check if our parser is valid + testTdf43569_CheckIfFieldParse(); + + // now check field creation during import + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // at least one field should be detected + CPPUNIT_ASSERT(xFields->hasMoreElements()); +} + +DECLARE_ODFEXPORT_TEST(testTdf130314, "tdf130314.docx") +{ + // Without the fix in place, this test would have hung + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf133487) +{ + loadAndReload("MadeByLO7.odt"); + CPPUNIT_ASSERT_EQUAL(3, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + // shape in background has lowest index + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p[2]/draw:custom-shape", "z-index", "0"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:name = /office:document-content/office:body/office:text/text:p[2]/draw:custom-shape[@draw:z-index = '0']/attribute::draw:style-name]/style:graphic-properties", "run-through", "background"); + // shape in foreground, previously index 1 + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p[1]/draw:custom-shape", "z-index", "2"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:name = /office:document-content/office:body/office:text/text:p[1]/draw:custom-shape[@draw:z-index = '2']/attribute::draw:style-name]/style:graphic-properties", "run-through", "foreground"); + // shape in foreground, previously index 0 + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p[3]/draw:custom-shape", "z-index", "1"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:name = /office:document-content/office:body/office:text/text:p[3]/draw:custom-shape[@draw:z-index = '1']/attribute::draw:style-name]/style:graphic-properties", "run-through", "foreground"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf141467) +{ + loadAndReload("Formcontrol needs high z-index.odt"); + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + // shape in foreground has lowest index + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p[2]/draw:custom-shape", "z-index", "0"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:name = /office:document-content/office:body/office:text/text:p[2]/draw:custom-shape[@draw:z-index = '0']/attribute::draw:style-name]/style:graphic-properties", "run-through", "foreground"); + // form control, previously index 0 + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p[2]/draw:control", "z-index", "1"); + // no run-through on form's style + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:name = /office:document-content/office:body/office:text/text:p[2]/draw:control[@draw:z-index = '1']/attribute::draw:style-name]/style:graphic-properties/attribute::run-through", 0); +} + +DECLARE_ODFEXPORT_TEST(testTdf139126, "tdf139126.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables = xSupplier->getTextTables(); + uno::Reference xTable(xTables->getByName("Table1"), uno::UNO_QUERY); + + uno::Reference xD2(xTable->getCellByName("D2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("4.0"), xD2->getString()); + + // Without the fix in place, this test would have failed with + // - Expected: ** Expression is faulty ** + // - Actual : 17976931348623200... + uno::Reference xE2(xTable->getCellByName("E2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("** Expression is faulty **"), xE2->getString()); +} + +DECLARE_ODFEXPORT_TEST(testTdf125877, "tdf95806.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + + // This was 0 (lost table during ODT export in footnotes) + // Note: fix also tdf#95806: painting table layout is correct + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + + // floating table: there is a frame now + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf150149) +{ + loadAndReload("tdf150149.fodt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + // This was 0 (lost table header in multi-column section) + assertXPath(pXmlDoc, "//table:table-header-rows", 1); + assertXPath(pXmlDoc, "//table:table-header-rows/table:table-row/table:table-cell", 3); +} + +DECLARE_ODFEXPORT_TEST(testTdf103567, "tdf103567.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference const xShape(getShape(1)); + + // contour wrap polygon + css::drawing::PointSequenceSequence const pointss( + getProperty(xShape, "ContourPolyPolygon")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pointss.getLength()); + // for some reason this property exists with 199 points if it wasn't + // imported, that would be a fail + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pointss[0].getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32( 0), pointss[0][0].X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2672), pointss[0][0].Y); + CPPUNIT_ASSERT_EQUAL(sal_Int32( 0), pointss[0][1].X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1111), pointss[0][1].Y); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2672), pointss[0][2].X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1111), pointss[0][2].Y); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2672), pointss[0][3].X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2672), pointss[0][3].Y); + CPPUNIT_ASSERT_EQUAL(sal_Int32( 0), pointss[0][4].X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2672), pointss[0][4].Y); + + // image map, one rectangle + uno::Reference const xImageMap( + getProperty>(xShape, "ImageMap")); + + uno::Reference const xEntry(xImageMap->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/"), getProperty(xEntry, "URL")); + awt::Rectangle const rect(getProperty(xEntry, "Boundary")); + CPPUNIT_ASSERT_EQUAL(sal_Int32( 726), rect.X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1718), rect.Y); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1347), rect.Width); + CPPUNIT_ASSERT_EQUAL(sal_Int32( 408), rect.Height); +} + +CPPUNIT_TEST_FIXTURE(Test, testUserFieldDecl) +{ + loadAndReload("user-field-decl.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + // Without the accompanying fix in place, this test would have failed with 'Expected: 2; + // Actual: 1', i.e. the in-table field had no declaration (in the header), while the + // outside-table one had the declaration. + assertXPath(pXmlDoc, "//style:header/text:user-field-decls/text:user-field-decl", 2); +} + +CPPUNIT_TEST_FIXTURE(Test, testUserFieldDeclFly) +{ + loadAndReload("user-field-decl-fly.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + // Without the accompanying fix in place, this test would have failed with 'Expected: 2; + // Actual: 1', i.e. the in-textframe field had no declaration (in the header), while the + // outside-textframe one had the declaration. + assertXPath(pXmlDoc, "//style:header/text:user-field-decls/text:user-field-decl", 2); +} + +DECLARE_ODFEXPORT_TEST(testFramebackgrounds, "framebackgrounds.odt") +{ + CPPUNIT_ASSERT_EQUAL(16, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + //Counting the Number of Frames and checking with the expected count + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), xIndexAccess->getCount()); + uno::Reference xTextFrame; + awt::Gradient aGradientxTextFrame; + //Frame 1 + xTextFrame = getShape(1); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); + //Frame 2 + xTextFrame = getShape(2); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x006600), getProperty(xTextFrame, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); + //Frame 3 + xTextFrame = getShape(3); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x006600), getProperty(xTextFrame, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); + //Frame 4 + xTextFrame = getShape(4); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x579D1C), getProperty(xTextFrame, "FillColor")); + aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + //Frame 5 + xTextFrame = getShape(5); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(OUString("Subtle Tango Green"), getProperty(xTextFrame, "FillGradientName")); + //Frame 6 + xTextFrame = getShape(6); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Subtle Tango Green"), getProperty(xTextFrame, "FillGradientName")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); + //Frame 7 + xTextFrame = getShape(7); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Subtle Tango Green"), getProperty(xTextFrame, "FillGradientName")); + aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + //Frame 8 + xTextFrame = getShape(8); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xTextFrame, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); + //Frame 9 + xTextFrame = getShape(9); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); + //Frame 10 + xTextFrame = getShape(10); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xTextFrame, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); + //Frame 11 + xTextFrame = getShape(11); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); + //Frame 12 + xTextFrame = getShape(12); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xTextFrame, "FillBackground")); + aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + //Frame 13 + xTextFrame = getShape(13); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBackground")); + aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + //Frame 14 + xTextFrame = getShape(14); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xTextFrame, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetY")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetY")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBitmapTile")); + //Frame 15 + xTextFrame = getShape(15); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xTextFrame, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty(xTextFrame, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetY")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetY")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBitmapTile")); + //Frame 16 + xTextFrame = getShape(16); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xTextFrame, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapPositionOffsetY")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xTextFrame, "FillBitmapOffsetY")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xTextFrame, "FillBitmapTile")); + aGradientxTextFrame = getProperty(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + + if (xmlDocUniquePtr pXmlDoc = parseExport("content.xml")) + { + // check that there are 3 background-image elements + assertXPath(pXmlDoc, "//style:style[@style:parent-style-name='Frame' and @style:family='graphic']/style:graphic-properties[@draw:fill='bitmap']/style:background-image[@style:repeat='stretch']", 3); + // tdf#90640: check that one of them is 55% opaque + assertXPath(pXmlDoc, "//style:style[@style:parent-style-name='Frame' and @style:family='graphic']/style:graphic-properties[@draw:fill='bitmap' and @fo:background-color='transparent' and @draw:opacity='55%']/style:background-image[@style:repeat='stretch' and @draw:opacity='55%']", 1); + // tdf#90640: check that one of them is 43% opaque + // (emulated - hopefully not with rounding errors) + assertXPath(pXmlDoc, "//style:style[@style:parent-style-name='Frame' and @style:family='graphic']/style:graphic-properties[@draw:fill='bitmap' and @fo:background-color='transparent' and @draw:opacity-name='Transparency_20_1']/style:background-image[@style:repeat='stretch' and @draw:opacity='43%']", 1); + } +} + +DECLARE_SW_ROUNDTRIP_TEST(testSHA1Correct, "sha1_correct.odt", "1012345678901234567890123456789012345678901234567890", Test) +{ // tdf#114939 this has both an affected password as well as content.xml + CPPUNIT_ASSERT_EQUAL(1, getPages()); + getParagraph(1, "012"); +} + +DECLARE_SW_ROUNDTRIP_TEST(testSHA1Wrong, "sha1_wrong.odt", "1012345678901234567890123456789012345678901234567890", Test) +{ // tdf#114939 this has both an affected password as well as content.xml + CPPUNIT_ASSERT_EQUAL(1, getPages()); + getParagraph(1, "012"); +} + +DECLARE_ODFEXPORT_TEST(testOOoxmlEmbedded, "oooxml_embedded.sxw") +{ + uno::Reference xTEOSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xAccess(xTEOSupplier->getEmbeddedObjects()); + uno::Sequence aSeq(xAccess->getElementNames()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), aSeq.getLength()); + uno::Reference xEOSupplier1(xAccess->getByName("Object1"), uno::UNO_QUERY); + uno::Reference xObj1(xEOSupplier1->getEmbeddedObject()); + uno::Reference xEOSupplier2(xAccess->getByName("Object2"), uno::UNO_QUERY); + uno::Reference xObj2(xEOSupplier2->getEmbeddedObject()); + uno::Reference xEOSupplier3(xAccess->getByName("Object3"), uno::UNO_QUERY); + uno::Reference xObj3(xEOSupplier3->getEmbeddedObject()); + uno::Reference xEOSupplier4(xAccess->getByName("Object4"), uno::UNO_QUERY); + uno::Reference xObj4(xEOSupplier4->getEmbeddedObject()); + //checking first object + uno::Reference xSBDoc1(xObj1, uno::UNO_QUERY); + uno::Reference xStorage1(xSBDoc1->getDocumentStorage()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage1)); + //checking second object + uno::Reference xSBDoc2(xObj2, uno::UNO_QUERY); + uno::Reference xStorage2(xSBDoc2->getDocumentStorage()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage2)); + //checking third object + uno::Reference xSBDoc3(xObj3, uno::UNO_QUERY); + uno::Reference xStorage3(xSBDoc3->getDocumentStorage()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage3)); + //checking fourth object + uno::Reference xSBDoc4(xObj4, uno::UNO_QUERY); + uno::Reference xStorage4(xSBDoc4->getDocumentStorage()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage4)); +} + +DECLARE_ODFEXPORT_TEST(testredlineTextFrame, "redlineTextFrame.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + //Note this is for a crash test + //Counting the Number of Frames and checking with the expected count + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount()); +} + +DECLARE_ODFEXPORT_TEST(testTdf107292, "tdf107292.odt") +{ + // tracked deletions at the same position were loaded in reverse order + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + // Without this fix in place, this test would have failed with + // - Expected: Lorem ipsum dolor sit... + // - Actual : dolor ipsumLorem sit... + CPPUNIT_ASSERT_EQUAL(OUString("Lorem ipsum dolor sit..."), getParagraph(1)->getString()); +} + +DECLARE_ODFEXPORT_TEST(testTdf140437, "tdf140437.odt") +{ + // Without the fix in place, the document would have failed to load + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // at least one field should be detected + CPPUNIT_ASSERT(xFields->hasMoreElements()); +} + +DECLARE_ODFEXPORT_TEST(testTdf131621, "tdf131621.ott") +{ + CPPUNIT_ASSERT_EQUAL(12, getShapes()); + //Crash test, Check number of pages + CPPUNIT_ASSERT_EQUAL( 1, getPages() ); +} + +DECLARE_ODFEXPORT_TEST(testTdf135144, "tdf135144.docx") +{ + //Crashes at import time after roundtrip + CPPUNIT_ASSERT_EQUAL(3, getPages()); + CPPUNIT_ASSERT_EQUAL(4, getShapes()); +} + +DECLARE_ODFEXPORT_TEST(testTdf130950, "tdf130950.odt") +{ + //Crashes at import time + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(2, getShapes()); +} + +DECLARE_ODFEXPORT_TEST(testFdo38244, "fdo38244.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // See ooxmlexport's testFdo38244(). + + // Test comment range feature. + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + xRunEnum->nextElement(); + uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), getProperty(xPropertySet, "TextPortionType")); + xRunEnum->nextElement(); + xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), getProperty(xPropertySet, "TextPortionType")); + + // Test properties + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("__Fieldmark__4_1833023242"), getProperty(xPropertySet, "Name")); + CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty(xPropertySet, "Initials")); +} + +DECLARE_ODFEXPORT_TEST(testSenderInitials, "sender-initials.fodt") +{ + // Test sender-initial properties (both annotation metadata and text field) + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + // first 3 are annotations, last 2 are text fields + for (unsigned i = 0; i < 3; ++i) + { + uno::Reference xPropertySet(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("I"), getProperty(xPropertySet, "Initials")); + } + for (unsigned i = 0; i < 2; ++i) + { + uno::Reference xPropertySet(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xPropertySet, "IsFixed")); + CPPUNIT_ASSERT_EQUAL(OUString("I"), getProperty(xPropertySet, "Content")); + } +} + +DECLARE_ODFEXPORT_TEST(testResolvedComment, "resolved-comment.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xPropertySet(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xPropertySet, "Resolved")); + xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xPropertySet, "Resolved")); +} + +DECLARE_ODFEXPORT_TEST(testTdf92379, "tdf92379.fodt") +{ + // frame style fo:background-color was not imported + uno::Reference xStyles(getStyles("FrameStyles")); + uno::Reference xStyle(xStyles->getByName("encarts"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0xffcc99), getProperty(xStyle, "BackColorRGB")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xStyle, "BackColorTransparency")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0xffcc99), getProperty(xStyle, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle, "FillTransparence")); + + uno::Reference xFrameStyle2(xStyles->getByName("Untitled1"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, getProperty(xFrameStyle2, "BackColorRGB")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xFrameStyle2, "BackTransparent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(100), getProperty(xFrameStyle2, "BackColorTransparency")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xFrameStyle2, "FillStyle")); +// unfortunately this is actually the pool default value, which would be hard to fix - but it isn't a problem because style is NONE +// CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xFrameStyle2, "FillColor")); +// CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xFrameStyle2, "FillTransparence")); + + if (xmlDocUniquePtr pXmlDoc = parseExport("styles.xml")) + { + // check that fo:background-color attribute is exported properly + assertXPath(pXmlDoc, "//style:style[@style:family='graphic' and @style:name='encarts']/style:graphic-properties[@fo:background-color='#ffcc99']", 1); + assertXPath(pXmlDoc, "//style:style[@style:family='graphic' and @style:name='Untitled1']/style:graphic-properties[@fo:background-color='transparent']", 1); + } + + // paragraph style fo:background-color was wrongly inherited despite being + // overridden in derived style + uno::Reference xParaStyles(getStyles("ParagraphStyles")); + uno::Reference xStyle1(xParaStyles->getByName( + "Titre Avis expert"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x661900), getProperty(xStyle1, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xStyle1, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle1, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x661900), getProperty(xStyle1, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle1, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, getProperty(xStyle1, "CharColor")); + + uno::Reference xStyle2(xParaStyles->getByName( + "Avis expert questions"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, getProperty(xStyle2, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xStyle2, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xStyle2, "FillStyle")); +// unfortunately this is actually the pool default value, which would be hard to fix - but it isn't a problem because style is NONE +// CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xStyle2, "FillColor")); +// CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xStyle2, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(Color(0x661900), getProperty(xStyle2, "CharColor")); + + uno::Reference xStyle31(xParaStyles->getByName( + "avis expert questions non cadres"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x801900), getProperty(xStyle31, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xStyle31, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle31, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x801900), getProperty(xStyle31, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle31, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(Color(0x661900), getProperty(xStyle31, "CharColor")); + + uno::Reference xStyle32(xParaStyles->getByName( + "Avis expert rXponses"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, getProperty(xStyle32, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xStyle32, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xStyle32, "FillStyle")); +// unfortunately this is actually the pool default value, which would be hard to fix - but it isn't a problem because style is NONE +// CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xStyle32, "FillColor")); +// CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xStyle32, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(Color(0x461900), getProperty(xStyle32, "CharColor")); + + if (xmlDocUniquePtr pXmlDoc = parseExport("styles.xml")) + { + // check that fo:background-color attribute is exported properly + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Titre Avis expert']/style:paragraph-properties[@fo:background-color='#661900']", 1); + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Avis expert questions']/style:paragraph-properties[@fo:background-color='transparent']", 1); + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='avis expert questions non cadres']/style:paragraph-properties[@fo:background-color='#801900']", 1); + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Avis expert rXponses']/style:paragraph-properties[@fo:background-color='transparent']", 1); + } +} + +DECLARE_ODFEXPORT_TEST(testFdo79358, "fdo79358.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // the boolean properties of the index were not exported properly + uno::Reference xIndexSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexes = xIndexSupplier->getDocumentIndexes(); + uno::Reference xTOCIndex(xIndexes->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTOCProps(xTOCIndex, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xTOCProps, "CreateFromOutline")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xTOCProps, "CreateFromMarks")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xTOCProps, "CreateFromLevelParagraphStyles")); + // check that the source styles are preserved too while at it + uno::Reference xLevels( + getProperty< uno::Reference >(xTOCProps, + "LevelParagraphStyles")); + uno::Sequence seq { "Heading" }; + CPPUNIT_ASSERT_EQUAL(uno::Any(seq), xLevels->getByIndex(1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(uno::Sequence()), xLevels->getByIndex(2)); +} + +DECLARE_ODFEXPORT_TEST(testFirstHeaderFooter, "first-header-footer.odt") +{ + 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()")); + CPPUNIT_ASSERT_EQUAL(OUString("First footer"), parseDump("/root/page[1]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Left header"), parseDump("/root/page[2]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Left footer"), parseDump("/root/page[2]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Right header"), parseDump("/root/page[3]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Right footer"), parseDump("/root/page[3]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("First header2"), parseDump("/root/page[4]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("First footer2"), parseDump("/root/page[4]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Right header2"), parseDump("/root/page[5]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Right footer2"), parseDump("/root/page[5]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Left header2"), parseDump("/root/page[6]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Left footer2"), parseDump("/root/page[6]/footer/txt/text()")); +} + +DECLARE_ODFEXPORT_TEST(testTextframeGradient, "textframe-gradient.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount()); + + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame, "FillStyle")); + awt::Gradient aGradient = getProperty(xFrame, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(Color(0xC0504D), Color(ColorTransparency, aGradient.StartColor)); + CPPUNIT_ASSERT_EQUAL(Color(0xD99594), Color(ColorTransparency, aGradient.EndColor)); + CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); + + xFrame.set(xIndexAccess->getByIndex(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame, "FillStyle")); + aGradient = getProperty(xFrame, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aGradient.StartColor)); + CPPUNIT_ASSERT_EQUAL(Color(0x666666), Color(ColorTransparency, aGradient.EndColor)); + CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); +} + +DECLARE_ODFEXPORT_TEST(testDuplicateCrossRefHeadingBookmark, "CrossRefHeadingBookmark.fodt") +{ + // the file contains invalid duplicate heading cross reference bookmarks + // but we have to round trip them, tdf#94804 + + uno::Reference xBookmarksSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference xBookmarks = + xBookmarksSupplier->getBookmarks(); + uno::Reference xBookmark1( + xBookmarks->getByName("__RefHeading__8284_1826734303"), uno::UNO_QUERY); + CPPUNIT_ASSERT(xBookmark1.is()); + CPPUNIT_ASSERT_THROW(xBookmarks->getByName("__RefHeading__1673_25705824"), container::NoSuchElementException); + + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY_THROW)->refresh(); + + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Any aField1 = xFields->nextElement(); + uno::Reference xField1(aField1, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), xField1->getPresentation(false)); + uno::Any aField2 = xFields->nextElement(); + uno::Reference xField2(aField2, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), xField2->getPresentation(false)); +} + +DECLARE_ODFEXPORT_TEST(testFdo60769, "fdo60769.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Test multi-paragraph comment range feature. + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + while (xRunEnum->hasMoreElements()) + { + uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + OUString aType = getProperty(xPropertySet, "TextPortionType"); + // First paragraph: no field end, no anchor + CPPUNIT_ASSERT(aType == "Text" || aType == "Annotation"); + } + + xRunEnumAccess.set(xParaEnum->nextElement(), uno::UNO_QUERY); + while (xRunEnum->hasMoreElements()) + { + uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + OUString aType = getProperty(xPropertySet, "TextPortionType"); + // Second paragraph: no field start + CPPUNIT_ASSERT(aType == "Text" || aType == "AnnotationEnd"); + } +} + +DECLARE_ODFEXPORT_TEST(testTdf115815, "tdf115815.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Test comment range feature on tracked deletion. + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + bool bAnnotationStart = false; + bool bBeforeAnnotation = true; + OUString sTextBeforeAnnotation; + while (xRunEnum->hasMoreElements()) + { + uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + OUString aType = getProperty(xPropertySet, "TextPortionType"); + // there is no AnnotationEnd with preceding AnnotationStart, + // i.e. annotation with lost range + CPPUNIT_ASSERT(aType != "AnnotationEnd" || !bAnnotationStart); + + bAnnotationStart = (aType == "Annotation"); + + // collect paragraph text before the first annotation + if (bBeforeAnnotation) + { + if (bAnnotationStart) + bBeforeAnnotation = false; + else if (aType == "Text") + { + uno::Reference xRun(xPropertySet, uno::UNO_QUERY); + sTextBeforeAnnotation += xRun->getString(); + } + } + } + + // This was "Lorem ipsum" (collapsed annotation range) + CPPUNIT_ASSERT_EQUAL(OUString("Lorem "), sTextBeforeAnnotation); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo58949) +{ + comphelper::ScopeGuard g([]() { + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Filter::Microsoft::Import::MathTypeToMath::set(true, pBatch); + pBatch->commit(); + }); + + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Filter::Microsoft::Import::MathTypeToMath::set(false, pBatch); + pBatch->commit(); + loadAndReload("fdo58949.docx"); + + /* + * The problem was that the exporter didn't insert "Obj102" to the + * resulting zip file. No idea how to check for "broken" (missing OLE data + * and replacement image) OLE objects using UNO, so we'll check the zip file directly. + */ + + utl::TempFile aTempFile; + save("writer8", aTempFile); + + uno::Sequence aArgs{ uno::Any(aTempFile.GetURL()) }; + uno::Reference xNameAccess(m_xSFactory->createInstanceWithArguments("com.sun.star.packages.zip.ZipFileAccess", aArgs), uno::UNO_QUERY); + const css::uno::Sequence aNames(xNameAccess->getElementNames()); + // The exported document must have three objects named ObjNNN. The names are assigned in + // OLEHandler::copyOLEOStream using a static counter, and actual numbers depend on previous + // tests; so just count the matching names here. + int nMatches = 0; + for (const OUString& sName : aNames) + { + OUString sRest; + if (sName.startsWith("Obj", &sRest)) + { + // all following characters must be decimal digits; minimal value is 100 + bool bMatch = sRest.getLength() >= 3 + && std::all_of(sRest.getStr(), sRest.getStr() + sRest.getLength(), + [](sal_Unicode ch) { return ch >= '0' && ch <= '9'; }); + if (bMatch) + ++nMatches; + } + } + CPPUNIT_ASSERT_EQUAL(3, nMatches); +} + +DECLARE_ODFEXPORT_TEST(testTdf134987, "tdf134987.docx") +{ + uno::Reference xTEOSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xAccess(xTEOSupplier->getEmbeddedObjects()); + uno::Sequence aSeq(xAccess->getElementNames()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), aSeq.getLength()); + + OUString aMediaType; + // checking first object (formula) + { + uno::Reference xEOSupplier(xAccess->getByName("Object1"), uno::UNO_QUERY); + uno::Reference xObj(xEOSupplier->getEmbeddedObject()); + CPPUNIT_ASSERT(xObj.is()); + + uno::Reference xSBDoc(xObj, uno::UNO_QUERY); + uno::Reference xStorage(xSBDoc->getDocumentStorage()); + CPPUNIT_ASSERT(xStorage.is()); + + uno::Reference< beans::XPropertySet > xStorProps(xStorage, uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT(xStorProps->getPropertyValue("MediaType") >>= aMediaType); + CPPUNIT_ASSERT(aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_FORMULA_ASCII)); + } + // checking second object (chart) + { + uno::Reference xEOSupplier(xAccess->getByName("Object2"), uno::UNO_QUERY); + uno::Reference xObj(xEOSupplier->getEmbeddedObject()); + CPPUNIT_ASSERT(xObj.is()); + + uno::Reference xSBDoc(xObj, uno::UNO_QUERY); + uno::Reference xStorage(xSBDoc->getDocumentStorage()); + CPPUNIT_ASSERT(xStorage.is()); + + uno::Reference< beans::XPropertySet > xStorProps(xStorage, uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT(xStorProps->getPropertyValue("MediaType") >>= aMediaType); + CPPUNIT_ASSERT(aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_CHART_ASCII)); + } + // checking third object (chart) + { + uno::Reference xEOSupplier(xAccess->getByName("Object3"), uno::UNO_QUERY); + uno::Reference xObj(xEOSupplier->getEmbeddedObject()); + CPPUNIT_ASSERT(xObj.is()); + + uno::Reference xSBDoc(xObj, uno::UNO_QUERY); + uno::Reference xStorage(xSBDoc->getDocumentStorage()); + CPPUNIT_ASSERT(xStorage.is()); + + uno::Reference< beans::XPropertySet > xStorProps(xStorage, uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT(xStorProps->getPropertyValue("MediaType") >>= aMediaType); + CPPUNIT_ASSERT(aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_CHART_ASCII)); + } +} + +DECLARE_ODFEXPORT_TEST(testStylePageNumber, "ooo321_stylepagenumber.odt") +{ + CPPUNIT_ASSERT_EQUAL(5, getPages()); + uno::Reference xTable1(getParagraphOrTable(1)); +// actually no break attribute is written in this case +// CPPUNIT_ASSERT_EQUAL(style::BreakType_PAGE_BEFORE, getProperty(xTable1, "BreakType")); + CPPUNIT_ASSERT_EQUAL(OUString("Left Page"), getProperty(xTable1, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty(xTable1, "PageNumberOffset")); + + uno::Reference xPara1(getParagraphOrTable(2)); + CPPUNIT_ASSERT_EQUAL(OUString("Right Page"), getProperty(xPara1, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty(xPara1, "PageNumberOffset")); + + // i#114163 tdf#77111: OOo < 3.3 bug, it wrote "auto" as "0" for tables + uno::Reference xTable0(getParagraphOrTable(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Left Page"), getProperty(xTable0, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(uno::Any(), xTable0->getPropertyValue("PageNumberOffset")); + + uno::Reference xPara0(getParagraphOrTable(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Right Page"), getProperty(xPara0, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(uno::Any(), xPara0->getPropertyValue("PageNumberOffset")); + + uno::Reference xParaStyles = getStyles("ParagraphStyles"); + uno::Reference xStyle1(xParaStyles->getByName("stylewithbreak1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Right Page"), getProperty(xStyle1, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty(xStyle1, "PageNumberOffset")); + + uno::Reference xStyle0(xParaStyles->getByName("stylewithbreak0"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("First Page"), getProperty(xStyle0, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(uno::Any(), xStyle0->getPropertyValue("PageNumberOffset")); +} + +DECLARE_ODFEXPORT_TEST(testCharacterBorder, "charborder.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Make sure paragraph and character attributes don't interfere + // First paragraph has a paragraph border and a character border included by the paragraph style + + // Paragraph border of first paragraph + { + const table::BorderLine2 aFirstParTopBorder(0x6666FF,2,26,26,7,55); + const sal_Int32 aFirstParTopPadding(150); + uno::Reference xSet(getParagraph(1), uno::UNO_QUERY); + + // Top border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty(xSet,"TopBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty(xSet,"TopBorderDistance")); + + // Bottom border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty(xSet,"BottomBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty(xSet,"BottomBorderDistance")); + + // Left border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty(xSet,"LeftBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty(xSet,"LeftBorderDistance")); + + // Right border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty(xSet,"RightBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty(xSet,"RightBorderDistance")); + + // Shadow + const table::ShadowFormat aShadow = getProperty(xSet,"ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(false, static_cast(aShadow.IsTransparent)); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation(0), aShadow.Location); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), aShadow.ShadowWidth); + } + + // Character border for first paragraph + { + const table::BorderLine2 aFirstParCharTopBorder(0xFF3333,0,37,0,2,37); + const sal_Int32 aFirstParCharTopPadding(450); + uno::Reference xSet(getParagraph(1), uno::UNO_QUERY); + + // Top border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharTopBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharTopBorderDistance")); + + // Bottom border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharBottomBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharBottomBorderDistance")); + + // Left border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharLeftBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharLeftBorderDistance")); + + // Right border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharRightBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharRightBorderDistance")); + + // Shadow + const table::ShadowFormat aShadow = getProperty(xSet,"CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(Color(0xFF3333), Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(false, static_cast(aShadow.IsTransparent)); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation(2), aShadow.Location); + CPPUNIT_ASSERT_EQUAL(sal_Int16(280), aShadow.ShadowWidth); + + // Check autostyle + { + uno::Reference< style::XAutoStyleFamily > xAutoStyleFamily(getAutoStyles("ParagraphStyles")); + uno::Reference < container::XEnumeration > xAutoStylesEnum( xAutoStyleFamily->createEnumeration() ); + CPPUNIT_ASSERT_EQUAL(true, static_cast(xAutoStylesEnum->hasMoreElements())); + + // First paragraph autostyle + uno::Reference < beans::XPropertySet > xPSet( xAutoStylesEnum->nextElement(), uno::UNO_QUERY ); + + // Top border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharTopBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharTopBorderDistance")); + + // Bottom border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharBottomBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharBottomBorderDistance")); + + // Left border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharLeftBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharLeftBorderDistance")); + + // Right border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty(xSet,"CharRightBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty(xSet,"CharRightBorderDistance")); + } + } + + // Second paragraph's second text portion has a character style named CharDiffBor + // This style includes border with different sides + { + + table::BorderLine2 aBorderArray[4] = + { + table::BorderLine2(0xFF3333,0,37,0,14,37), // Top (fine dashed line) + table::BorderLine2(0x99FF66,26,26,53,11,106), // Bottom + table::BorderLine2(0x6666FF,9,26,9,12,71), // Left + table::BorderLine2(0,0,0,0,table::BorderLineStyle::NONE,0) // Right + }; + + sal_Int32 aDistances[4] = { 400 /*Top*/, 300 /*Bottom*/, 250 /*Left*/, 0 /*Right*/ }; + + // Get second text portion of second paragraph + uno::Reference < beans::XPropertySet > xSet( getRun(getParagraph(2),2), uno::UNO_QUERY ); + + // Top border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[0], getProperty(xSet,"CharTopBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[0], getProperty(xSet,"CharTopBorderDistance")); + + // Bottom border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[1], getProperty(xSet,"CharBottomBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[1], getProperty(xSet,"CharBottomBorderDistance")); + + // Left border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[2], getProperty(xSet,"CharLeftBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[2], getProperty(xSet,"CharLeftBorderDistance")); + + // Right border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[3], getProperty(xSet,"CharRightBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[3], getProperty(xSet,"CharRightBorderDistance")); + + // Shadow + const table::ShadowFormat aShadow = getProperty(xSet,"CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(false, static_cast(aShadow.IsTransparent)); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation(3), aShadow.Location); + CPPUNIT_ASSERT_EQUAL(sal_Int16(79), aShadow.ShadowWidth); + + // Check character style + { + uno::Reference< container::XNameAccess > xStyleFamily = getStyles("CharacterStyles"); + uno::Reference < beans::XPropertySet > xStyleSet(xStyleFamily->getByName("CharDiffBor"), uno::UNO_QUERY); + + // Top border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[0], getProperty(xStyleSet,"CharTopBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[0], getProperty(xStyleSet,"CharTopBorderDistance")); + + // Bottom border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[1], getProperty(xStyleSet,"CharBottomBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[1], getProperty(xStyleSet,"CharBottomBorderDistance")); + + // Left border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[2], getProperty(xStyleSet,"CharLeftBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[2], getProperty(xStyleSet,"CharLeftBorderDistance")); + + // Right border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[3], getProperty(xStyleSet,"CharRightBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[3], getProperty(xStyleSet,"CharRightBorderDistance")); + } + } +} + +DECLARE_ODFEXPORT_TEST(testProtectionKey, "protection-key.fodt") +{ + OUString const password("1012345678901234567890123456789012345678901234567890"); + + // check 1 invalid OOo legacy password and 3 valid ODF 1.2 passwords + uno::Reference xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + uno::Reference xSect0(xSections->getByIndex(0), uno::UNO_QUERY); + uno::Sequence const key0(getProperty>(xSect0, "ProtectionKey")); + CPPUNIT_ASSERT(SvPasswordHelper::CompareHashPassword(key0, password)); + uno::Reference xSect1(xSections->getByIndex(1), uno::UNO_QUERY); + uno::Sequence const key1(getProperty>(xSect1, "ProtectionKey")); + CPPUNIT_ASSERT(SvPasswordHelper::CompareHashPassword(key1, password)); + uno::Reference xSect2(xSections->getByIndex(2), uno::UNO_QUERY); + uno::Sequence const key2(getProperty>(xSect1, "ProtectionKey")); + CPPUNIT_ASSERT(SvPasswordHelper::CompareHashPassword(key2, password)); + uno::Reference xSect3(xSections->getByIndex(3), uno::UNO_QUERY); + uno::Sequence const key3(getProperty>(xSect1, "ProtectionKey")); + CPPUNIT_ASSERT(SvPasswordHelper::CompareHashPassword(key3, password)); + + // we can't assume that the user entered the password; check that we + // round-trip the password as-is + if (xmlDocUniquePtr pXmlDoc = parseExport("content.xml")) + { + assertXPath(pXmlDoc, "//text:section[@text:name='Section0' and @text:protected='true' and @text:protection-key='vbnhxyBKtPHCA1wB21zG1Oha8ZA=']"); + assertXPath(pXmlDoc, "//text:section[@text:name='Section1' and @text:protected='true' and @text:protection-key='nLHas0RIwepGDaH4c2hpyIUvIS8=']"); + assertXPath(pXmlDoc, "//text:section[@text:name='Section2' and @text:protected='true' and @text:protection-key-digest-algorithm='http://www.w3.org/2000/09/xmldsig#sha256' and @text:protection-key='1tnJohagR2T0yF/v69hLPuumSTsj32CumW97nkKGuSQ=']"); + assertXPath(pXmlDoc, "//text:section[@text:name='Section3' and @text:protected='true' and @text:protection-key-digest-algorithm='http://www.w3.org/2000/09/xmldsig#sha256' and @text:protection-key='1tnJohagR2T0yF/v69hLPuumSTsj32CumW97nkKGuSQ=']"); + } +} + +DECLARE_ODFEXPORT_TEST(testTdf128188, "footnote-collect-at-end-of-section.fodt") +{ + SwDoc *const pDoc = dynamic_cast(*mxComponent).GetDocShell()->GetDoc(); + CPPUNIT_ASSERT(pDoc); + SwFootnoteIdxs const& rFootnotes(pDoc->GetFootnoteIdxs()); + // Section1 + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rFootnotes[0]->GetFootnote().GetNumber()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rFootnotes[0]->GetFootnote().GetNumberRLHidden()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), rFootnotes[1]->GetFootnote().GetNumber()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), rFootnotes[1]->GetFootnote().GetNumberRLHidden()); + // Section2 + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rFootnotes[2]->GetFootnote().GetNumber()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rFootnotes[2]->GetFootnote().GetNumberRLHidden()); + // deleted + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), rFootnotes[3]->GetFootnote().GetNumber()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rFootnotes[3]->GetFootnote().GetNumberRLHidden()); + // deleted + CPPUNIT_ASSERT_EQUAL(sal_uInt16(3), rFootnotes[4]->GetFootnote().GetNumber()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rFootnotes[4]->GetFootnote().GetNumberRLHidden()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(4), rFootnotes[5]->GetFootnote().GetNumber()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), rFootnotes[5]->GetFootnote().GetNumberRLHidden()); +} + +DECLARE_ODFEXPORT_TEST(testFdo43807, "fdo43807.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xSet(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Drop Caps"),getProperty(xSet,"DropCapCharStyleName")); + + xSet.set(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("User Defined Drop Caps"),getProperty(xSet,"DropCapCharStyleName")); +} + +DECLARE_ODFEXPORT_TEST(testTdf103091, "tdf103091.fodt") +{ + // check that all conditional paragraph style conditions are imported + uno::Reference xParaStyles(getStyles("ParagraphStyles")); + uno::Reference xStyle1(xParaStyles->getByName( + "Text Body"), uno::UNO_QUERY); + auto conditions(getProperty>(xStyle1, "ParaStyleConditions")); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(28), conditions.getLength()); + CPPUNIT_ASSERT_EQUAL(OUString("TableHeader"), conditions[0].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Addressee")), conditions[0].Value); + CPPUNIT_ASSERT_EQUAL(OUString("Table"), conditions[1].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Bibliography 1")), conditions[1].Value); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), conditions[2].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Bibliography Heading")), conditions[2].Value); + CPPUNIT_ASSERT_EQUAL(OUString("Section"), conditions[3].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Caption")), conditions[3].Value); + CPPUNIT_ASSERT_EQUAL(OUString("Footnote"), conditions[4].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Salutation")), conditions[4].Value); + CPPUNIT_ASSERT_EQUAL(OUString("Endnote"), conditions[5].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 1")), conditions[5].Value); + CPPUNIT_ASSERT_EQUAL(OUString("Header"), conditions[6].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 2")), conditions[6].Value); + CPPUNIT_ASSERT_EQUAL(OUString("Footer"), conditions[7].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 3")), conditions[7].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel1"), conditions[8].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 4")), conditions[8].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel2"), conditions[9].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 5")), conditions[9].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel3"), conditions[10].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 6")), conditions[10].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel4"), conditions[11].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 7")), conditions[11].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel5"), conditions[12].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 8")), conditions[12].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel6"), conditions[13].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 9")), conditions[13].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel7"), conditions[14].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents 10")), conditions[14].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel8"), conditions[15].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Contents Heading")), conditions[15].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel9"), conditions[16].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Standard")), conditions[16].Value); + CPPUNIT_ASSERT_EQUAL(OUString("OutlineLevel10"), conditions[17].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Drawing")), conditions[17].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel1"), conditions[18].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Endnote")), conditions[18].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel2"), conditions[19].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("First line indent")), conditions[19].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel3"), conditions[20].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Footer")), conditions[20].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel4"), conditions[21].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Footer left")), conditions[21].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel5"), conditions[22].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Footer right")), conditions[22].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel6"), conditions[23].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Footnote")), conditions[23].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel7"), conditions[24].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Frame contents")), conditions[24].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel8"), conditions[25].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Hanging indent")), conditions[25].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel9"), conditions[26].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Header")), conditions[26].Value); + CPPUNIT_ASSERT_EQUAL(OUString("NumberingLevel10"), conditions[27].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Header left")), conditions[27].Value); +} + +DECLARE_ODFEXPORT_TEST(testTextframeTransparentShadow, "textframe-transparent-shadow.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xPicture = getShape(1); + // ODF stores opacity of 75%, that means 25% transparency. + CPPUNIT_ASSERT_EQUAL(sal_Int32(25), getProperty(xPicture, "ShadowTransparence")); +} + +DECLARE_ODFEXPORT_TEST(testRelhPage, "relh-page.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTextFrame = getShape(1); + // This was text::RelOrientation::FRAME (the default), RelativeHeightRelation was not handled in xmloff. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xTextFrame, "RelativeHeightRelation")); + // Make sure rel-height-rel doesn't affect width. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xTextFrame, "RelativeWidthRelation")); + + // This was 2601, 20% height was relative from margin, not page. + CPPUNIT_ASSERT_EQUAL(sal_Int32(3168), parseDump("/root/page/body/txt/anchored/fly/infos/bounds", "height").toInt32()); +} + +DECLARE_ODFEXPORT_TEST(testRelhPageTdf80282, "relh-page-tdf80282.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTextFrame = getShape(1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Height", sal_Int32(8391), parseDump("//anchored/fly/infos/bounds", "height").toInt32()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Width", sal_Int32(5953), parseDump("//anchored/fly/infos/bounds", "width").toInt32()); +} + +DECLARE_ODFEXPORT_TEST(testRelwPage, "relw-page.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTextFrame = getShape(1); + // This was text::RelOrientation::FRAME (the default), RelativeWidthRelation was not handled in xmloff. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xTextFrame, "RelativeWidthRelation")); + // Make sure rel-width-rel doesn't affect height. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xTextFrame, "RelativeHeightRelation")); + + // This was 3762, 40% width was relative from margin, not page. + CPPUNIT_ASSERT_EQUAL(sal_Int32(4896), parseDump("/root/page/body/txt/anchored/fly/infos/bounds", "width").toInt32()); +} + +DECLARE_ODFEXPORT_TEST(testTextFrameVertAdjust, "textframe-vertadjust.odt") +{ + CPPUNIT_ASSERT_EQUAL(3, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Test import/export of new frame attribute called TextVerticalAdjust + + // 1st frame's context is adjusted to the top + uno::Reference xFrame(getTextFrameByName("Rectangle 1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_TOP, getProperty(xFrame, "TextVerticalAdjust")); + // 2nd frame's context is adjusted to the center + xFrame.set(getTextFrameByName("Rectangle 2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_CENTER, getProperty(xFrame, "TextVerticalAdjust")); + // 3rd frame's context is adjusted to the bottom + xFrame.set(getTextFrameByName("Rectangle 3"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_BOTTOM, getProperty(xFrame, "TextVerticalAdjust")); +} + +DECLARE_ODFEXPORT_TEST(testTdf111891_frameVertStyle, "tdf111891_frameVertStyle.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_BOTTOM, getProperty(xFrame, "TextVerticalAdjust")); +} + +DECLARE_ODFEXPORT_TEST(testShapeRelsize, "shape-relsize.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xShape = getShape(1); + // These were all 0, as style:rel-width/height was ignored on import for shapes. + CPPUNIT_ASSERT_EQUAL(sal_Int16(40), getProperty(xShape, "RelativeWidth")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(20), getProperty(xShape, "RelativeHeight")); + + // Relation was "page" for both width and height, should be "paragraph" for width. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xShape, "RelativeWidthRelation")); + // And make sure that height stays "page". + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xShape, "RelativeHeightRelation")); +} + +DECLARE_ODFEXPORT_TEST(testTextboxRoundedCorners, "textbox-rounded-corners.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xShape = getShape(1); + comphelper::SequenceAsHashMap aCustomShapeGeometry(getProperty< uno::Sequence >(xShape, "CustomShapeGeometry")); + + // Test that the shape is a rounded rectangle. + CPPUNIT_ASSERT_EQUAL(OUString("round-rectangle"), aCustomShapeGeometry["Type"].get()); + + // The shape text should start with a table, with "a" in its A1 cell. + uno::Reference xText = uno::Reference(xShape, uno::UNO_QUERY_THROW)->getText(); + uno::Reference xTable(getParagraphOrTable(1, xText), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("a"), xCell->getString()); + + // Table inside a textbox should be in the extension namespace. + if (xmlDocUniquePtr pXmlDoc = parseExport("content.xml")) + // This failed, as draw:custom-shape had a table:table child. + assertXPath(pXmlDoc, "//draw:custom-shape/loext:table", "name", "Table1"); +} + +// test that import whitespace collapsing is compatible with old docs +DECLARE_ODFEXPORT_TEST(testWhitespace, "whitespace.odt") +{ + CPPUNIT_ASSERT_EQUAL(4, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xPara; + uno::Reference xPortions; + uno::Reference xPortion; + xPara.set(getParagraphOrTable(1), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(2), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/"), getProperty(xPortion, "HyperLinkURL")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(3), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Ruby"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(), xPortion->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("foo"), getProperty(xPortion, "RubyText")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Ruby"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(4), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("InContentMetadata"), getProperty(xPortion, "TextPortionType")); + { + // what a stupid idea to require recursively enumerating this + uno::Reference xMeta( + getProperty>(xPortion, "InContentMetadata"), uno::UNO_QUERY); + uno::Reference xMetaPortions = + xMeta->createEnumeration(); + uno::Reference xMP(xMetaPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xMP, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xMP->getString()); + CPPUNIT_ASSERT(!xMetaPortions->hasMoreElements()); + } + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(5), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("TextField"), getProperty(xPortion, "TextPortionType")); + { + // what a stupid idea to require recursively enumerating this + uno::Reference xMeta( + getProperty>(xPortion, "TextField"), uno::UNO_QUERY); + uno::Reference xMetaPortions = + xMeta->createEnumeration(); + uno::Reference xMP(xMetaPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xMP, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xMP->getString()); + CPPUNIT_ASSERT(!xMetaPortions->hasMoreElements()); + } + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(7), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(8), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(9), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(10), uno::UNO_QUERY); + uno::Reference xCEA(xPara, uno::UNO_QUERY); + uno::Reference xFrames( + xCEA->createContentEnumeration("com.sun.star.text.TextContent")); + xFrames->nextElement(); // one at-paragraph frame + CPPUNIT_ASSERT(!xFrames->hasMoreElements()); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(11), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Footnote"), getProperty(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(12), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("TextField"), getProperty(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(13), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), getProperty(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), getProperty(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(15), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Bookmark"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(16), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Bookmark"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Bookmark"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(17), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Redline"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Redline"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(18), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Redline"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Redline"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(19), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("ReferenceMark"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(20), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("ReferenceMark"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("ReferenceMark"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(21), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("DocumentIndexMark"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(22), uno::UNO_QUERY); + xPortions.set(xPara->createEnumeration()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("DocumentIndexMark"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("DocumentIndexMark"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); +} + +DECLARE_ODFEXPORT_TEST(testTdf136645, "tdf136645.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + // Without the fix in place, this would have failed with + //- Expected: 2640 + //- Actual : 3000 + CPPUNIT_ASSERT_EQUAL(sal_Int32(2640), parseDump("/root/page/body/section/column[1]/body/infos/bounds", "width").toInt32()); + + //- Expected: 6000 + //- Actual : 6360 + CPPUNIT_ASSERT_EQUAL(sal_Int32(6000), parseDump("/root/page/body/section/column[2]/body/infos/bounds", "width").toInt32()); +} + +DECLARE_ODFEXPORT_TEST(testBtlrCell, "btlr-cell.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Without the accompanying fix in place, this test would have failed, as + // the btlr text direction in the A1 cell was lost on ODF import and + // export. + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables = xSupplier->getTextTables(); + uno::Reference xTable(xTables->getByName("Table1"), uno::UNO_QUERY); + uno::Reference xA1(xTable->getCellByName("A1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::BT_LR, getProperty(xA1, "WritingMode")); + + uno::Reference xB1(xTable->getCellByName("B1"), uno::UNO_QUERY); + auto nActual = getProperty(xB1, "WritingMode"); + CPPUNIT_ASSERT(nActual == text::WritingMode2::LR_TB || nActual == text::WritingMode2::CONTEXT); + + uno::Reference xC1(xTable->getCellByName("C1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::TB_RL, getProperty(xC1, "WritingMode")); +} + +DECLARE_ODFEXPORT_TEST(testBtlrFrame, "btlr-frame.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Without the accompanying fix in place, this test would have failed, as + // the btlr text direction in the text frame was lost on ODF import and + // export. + uno::Reference xTextFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xTextFrame.is()); + + auto nActual = getProperty(xTextFrame, "WritingMode"); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::BT_LR, nActual); + + // Without the accompanying fix in place, this test would have failed, as the fly frame had + // mbVertical==true, but mbVertLRBT==false, even if the writing direction in the doc model was + // btlr. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT(pDoc); + + SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + CPPUNIT_ASSERT(pLayout); + + SwFrame* pPageFrame = pLayout->GetLower(); + CPPUNIT_ASSERT(pPageFrame); + CPPUNIT_ASSERT(pPageFrame->IsPageFrame()); + + SwFrame* pBodyFrame = pPageFrame->GetLower(); + CPPUNIT_ASSERT(pBodyFrame); + CPPUNIT_ASSERT(pBodyFrame->IsBodyFrame()); + + SwFrame* pBodyTextFrame = pBodyFrame->GetLower(); + CPPUNIT_ASSERT(pBodyTextFrame); + CPPUNIT_ASSERT(pBodyTextFrame->IsTextFrame()); + + CPPUNIT_ASSERT(pBodyTextFrame->GetDrawObjs()); + const SwSortedObjs& rAnchored = *pBodyTextFrame->GetDrawObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), rAnchored.size()); + + auto* pFlyFrame = dynamic_cast(rAnchored[0]); + CPPUNIT_ASSERT(pFlyFrame); + CPPUNIT_ASSERT(pFlyFrame->IsVertLRBT()); + + if (!mbExported) + // Not yet exported, don't modify the doc model for test purposes. + return; + + // Make sure that btlr -> tbrl transition clears the "BT" flag. + xTextFrame->setPropertyValue("WritingMode", uno::Any(text::WritingMode2::TB_LR)); + pFlyFrame = dynamic_cast(rAnchored[0]); + CPPUNIT_ASSERT(pFlyFrame); + CPPUNIT_ASSERT(!pFlyFrame->IsVertLRBT()); +} + +DECLARE_ODFEXPORT_TEST(testTdf129520, "tdf129520.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(OUString("M"), getParagraph(1)->getString()); + + // Without this fix in place, this test would have failed with + // - Expected: Ma + // - Actual : + CPPUNIT_ASSERT_EQUAL(OUString("Ma"), getParagraph(2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("1815"), getParagraph(3)->getString()); +} + +DECLARE_ODFEXPORT_TEST(testFdo86963, "fdo86963.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Export of this document failed with beans::UnknownPropertyException. + CPPUNIT_ASSERT_EQUAL(1, getShapes()); +} + +// Check for correct header/footer with special first page with TOC inside: +// - DECLARE_ODFEXPORT_TEST(testTdf118393, "tdf118393.odt") +// - DECLARE_OOXMLEXPORT_TEST(testTdf118393, "tdf118393.odt") +DECLARE_ODFEXPORT_TEST(testTdf118393, "tdf118393.odt") +{ + CPPUNIT_ASSERT_EQUAL( 7, getPages() ); + + // First page has no header/footer + { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // check first page + xmlXPathObjectPtr pXmlPage1Header = getXPathNode(pXmlDoc, "/root/page[1]/header"); + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlPage1Header->nodesetval)); + + xmlXPathObjectPtr pXmlPage1Footer = getXPathNode(pXmlDoc, "/root/page[1]/footer"); + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlPage1Footer->nodesetval)); + + // check second page in the same way + xmlXPathObjectPtr pXmlPage2Header = getXPathNode(pXmlDoc, "/root/page[2]/header"); + CPPUNIT_ASSERT_EQUAL(1, xmlXPathNodeSetGetLength(pXmlPage2Header->nodesetval)); + + xmlXPathObjectPtr pXmlPage2Footer = getXPathNode(pXmlDoc, "/root/page[2]/footer"); + CPPUNIT_ASSERT_EQUAL(1, xmlXPathNodeSetGetLength(pXmlPage2Footer->nodesetval)); + } + + // All other pages should have header/footer + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[2]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[2]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[3]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[3]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[4]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[4]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[5]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[5]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[6]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[6]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[7]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[7]/footer/txt/text()")); +} + +DECLARE_ODFEXPORT_TEST(testTdf135338_firstLeftPageFooter, "tdf135338_firstLeftPageFooter.odt") +{ + CPPUNIT_ASSERT_EQUAL(6, getPages()); + // The first page is a left page only style, but it should still show the first page footer + // instead of the left footer text "EVEN/LEFT (Left page only)" + CPPUNIT_ASSERT_EQUAL(OUString("First (Left page only)"), parseDump("/root/page[2]/footer/txt/text()")); +} + +DECLARE_ODFEXPORT_TEST(testGerrit13858, "gerrit13858.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Just make sure the output is valid. +} +DECLARE_ODFEXPORT_TEST(testOdtBorderTypes, "border_types.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + static const sal_Int32 lineStyles[] = { 0, 1, 2, 14, 16, 17, 3, 15 }; + uno::Reference textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(textDocument->getText(), uno::UNO_QUERY); + // list of paragraphs + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + do + { + uno::Reference xServiceInfo; + if (xParaEnum->nextElement() >>= xServiceInfo) + { + if (xServiceInfo->supportsService("com.sun.star.text.TextTable")) + { + uno::Reference const xCellRange(xServiceInfo, uno::UNO_QUERY_THROW); + + for (sal_Int32 row = 0; row < 15; row += 2) + { + uno::Reference xCell = xCellRange->getCellByPosition(1, row); + uno::Reference< beans::XPropertySet > xPropSet(xCell, uno::UNO_QUERY_THROW); + + uno::Any aTopBorder = xPropSet->getPropertyValue("TopBorder"); + table::BorderLine2 aTopBorderLine; + if (aTopBorder >>= aTopBorderLine) + { + sal_Int32 lineStyle = aTopBorderLine.LineStyle; + CPPUNIT_ASSERT_EQUAL(lineStyles[row / 2], lineStyle); + } + } //end of the 'for' loop + } + } + } while (xParaEnum->hasMoreElements()); +} + +DECLARE_ODFEXPORT_TEST(testMasterPageWithDrawingPage, "sw_hatch.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xStyles(getStyles("PageStyles")); + uno::Reference xStyle(xStyles->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty(xStyle, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Blue -45 Degrees"), getProperty(xStyle, "FillHatchName")); + CPPUNIT_ASSERT(!getProperty(xStyle, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle, "FillTransparence")); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageStyleBackgroundFullSizeOOo) +{ + loadAndReload("pagestyle_background_ooo33.odt"); + CPPUNIT_ASSERT_EQUAL(3, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + // Standard + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "border"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-color", "#99ccff"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "opacity", "100%"); + // Endnote + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "border"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "repeat", "repeat"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-image-ref-point", "top-left"); + // Footnote + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "border"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "repeat", "stretch"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-image-ref-point", "top-left"); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageStyleBackgroundFullSizeLO64) +{ + loadAndReload("pagestyle_background_lo64.odt"); + CPPUNIT_ASSERT_EQUAL(6, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + // Standard + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "full"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-color", "#99ccff"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "opacity", "100%"); + // Endnote + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "full"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "repeat", "repeat"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-image-ref-point", "top-left"); + // Footnote + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "border"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "repeat", "stretch"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-image-ref-point", "top-left"); + // Landscape + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Landscape']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "border"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Landscape']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Landscape']/attribute::draw:style-name" + "]/style:drawing-page-properties", "repeat", "no-repeat"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Landscape']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-image-ref-point", "top-left"); + // Index + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Index']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "full"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Index']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "gradient"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Index']/attribute::draw:style-name" + "]/style:drawing-page-properties", "gradient-step-count", "0"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Index']/attribute::draw:style-name" + "]/style:drawing-page-properties", "opacity", "100%"); + // First Page + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='First_20_Page']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "full"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='First_20_Page']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "hatch"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='First_20_Page']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-hatch-solid", "false"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='First_20_Page']/attribute::draw:style-name" + "]/style:drawing-page-properties", "opacity", "100%"); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageStyleBackgroundFullSizeLO70) +{ + loadAndReload("pagestyle_background_lo70.odt"); + CPPUNIT_ASSERT_EQUAL(6, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + // Standard + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "full"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-color", "#99ccff"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Standard']/attribute::draw:style-name" + "]/style:drawing-page-properties", "opacity", "100%"); + // Endnote + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "full"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "repeat", "repeat"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Endnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-image-ref-point", "top-left"); + // Footnote + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "border"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "repeat", "stretch"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Footnote']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-image-ref-point", "top-left"); + // Landscape + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Landscape']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "border"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Landscape']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Landscape']/attribute::draw:style-name" + "]/style:drawing-page-properties", "repeat", "no-repeat"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Landscape']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-image-ref-point", "top-left"); + // Index + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Index']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "full"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Index']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "gradient"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Index']/attribute::draw:style-name" + "]/style:drawing-page-properties", "gradient-step-count", "0"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='Index']/attribute::draw:style-name" + "]/style:drawing-page-properties", "opacity", "100%"); + // First Page + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='First_20_Page']/attribute::draw:style-name" + "]/style:drawing-page-properties", "background-size", "full"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='First_20_Page']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill", "hatch"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='First_20_Page']/attribute::draw:style-name" + "]/style:drawing-page-properties", "fill-hatch-solid", "false"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:family='drawing-page' and @style:name = " + "/office:document-styles/office:master-styles/style:master-page[@style:name='First_20_Page']/attribute::draw:style-name" + "]/style:drawing-page-properties", "opacity", "100%"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFillBitmapUnused) +{ + loadAndReload("fillbitmap3.odt"); + CPPUNIT_ASSERT_EQUAL(4, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // nav_5f_home and all its references are completely gone + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + + // paragraph style + assertXPath(pXmlDoc, + "/office:document-styles/office:styles/style:style[@style:name='Text_20_body']/loext:graphic-properties", "fill", "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:styles/style:style[@style:name='Text_20_body']/loext:graphic-properties", "fill-color", "#c0c0c0"); + assertXPath(pXmlDoc, + "/office:document-styles/office:styles/style:style[@style:name='Text_20_body']/loext:graphic-properties[@draw:fill-image-name]", 0); + + // page style page-layout + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:page-layout-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:page-layout-properties", "fill-image-name", "nav_5f_up"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:header-style/style:header-footer-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:header-style/style:header-footer-properties", "fill-image-name", "nav_5f_up"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:footer-style/style:header-footer-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:footer-style/style:header-footer-properties", "fill-image-name", "nav_5f_up"); + + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:page-layout-properties", "fill", "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:page-layout-properties[@draw:fill-image-name]", 0); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:header-style/style:header-footer-properties", "fill", "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:header-style/style:header-footer-properties[@draw:fill-image-name]", 0); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:footer-style/style:header-footer-properties", "fill", "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:footer-style/style:header-footer-properties[@draw:fill-image-name]", 0); + + // page style drawing-page + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp1']/style:drawing-page-properties", "fill", "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp1']/style:drawing-page-properties", "fill-image-name", "nav_5f_up"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp2']/style:drawing-page-properties", "fill", "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp2']/style:drawing-page-properties", "fill-color", "#c0c0c0"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp2']/style:drawing-page-properties[@draw:fill-image-name]", 0); + + // the named items + assertXPath(pXmlDoc, + "/office:document-styles/office:styles/draw:fill-image", 1); + assertXPath(pXmlDoc, + "/office:document-styles/office:styles/draw:fill-image", "name", "nav_5f_up"); +} + +DECLARE_ODFEXPORT_TEST(testCellUserDefineAttr, "userdefattr-tablecell.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + uno::Reference const xCellA1(xTable->getCellByName("A1"), uno::UNO_SET_THROW); + uno::Reference const xCellB1(xTable->getCellByName("B1"), uno::UNO_SET_THROW); + uno::Reference const xCellC1(xTable->getCellByName("C1"), uno::UNO_SET_THROW); + getUserDefineAttribute(uno::Any(xCellA1), "proName", "v1"); + getUserDefineAttribute(uno::Any(xCellB1), "proName", "v2"); + getUserDefineAttribute(uno::Any(xCellC1), "proName", "v3"); +} + +DECLARE_ODFEXPORT_TEST(testEmbeddedPdf, "embedded-pdf.odt") +{ + auto pPdfium = vcl::pdf::PDFiumLibrary::get(); + if (!pPdfium) + { + return; + } + + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xShape = getShape(1); + // This failed, pdf+png replacement graphics pair didn't survive an ODT roundtrip. + auto xReplacementGraphic = getProperty>(xShape, "ReplacementGraphic"); + CPPUNIT_ASSERT(xReplacementGraphic.is()); + + auto xGraphic = getProperty>(xShape, "Graphic"); + CPPUNIT_ASSERT(xGraphic.is()); + // This was image/x-vclgraphic, not exposing the info that the image is a PDF one. + CPPUNIT_ASSERT_EQUAL(OUString("application/pdf"), getProperty(xGraphic, "MimeType")); + + if (mbExported) + { + uno::Sequence aArgs{ uno::Any(maTempFile.GetURL()) }; + uno::Reference xNameAccess(m_xSFactory->createInstanceWithArguments("com.sun.star.packages.zip.ZipFileAccess", aArgs), uno::UNO_QUERY); + bool bHasBitmap = false; + const uno::Sequence aNames = xNameAccess->getElementNames(); + for (const auto& rElementName : aNames) + { + if (rElementName.startsWith("Pictures") && rElementName.endsWith("png")) + { + bHasBitmap = true; + break; + } + } + // This failed, replacement was an svm file. + CPPUNIT_ASSERT(bHasBitmap); + } +} + +DECLARE_ODFEXPORT_TEST(testTableStyles1, "table_styles_1.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Table styles basic graphic test. + // Doesn't cover all attributes. + uno::Reference XFamiliesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFamilies(XFamiliesSupplier->getStyleFamilies()); + uno::Reference xCellFamily(xFamilies->getByName("CellStyles"), uno::UNO_QUERY); + uno::Reference xCell1Style; + xCellFamily->getByName("Test style.1") >>= xCell1Style; + + sal_Int32 nInt32 = 0xF0F0F0; + table::BorderLine2 oBorder; + + CPPUNIT_ASSERT_EQUAL(Color(0xCC0000), getProperty(xCell1Style, "BackColor")); + xCell1Style->getPropertyValue("WritingMode") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), nInt32); + xCell1Style->getPropertyValue("VertOrient") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); + xCell1Style->getPropertyValue("BorderDistance") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); + xCell1Style->getPropertyValue("LeftBorderDistance") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); + xCell1Style->getPropertyValue("RightBorderDistance") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); + xCell1Style->getPropertyValue("TopBorderDistance") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); + xCell1Style->getPropertyValue("BottomBorderDistance") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(97), nInt32); + xCell1Style->getPropertyValue("RightBorder") >>= oBorder; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), oBorder.Color); + xCell1Style->getPropertyValue("LeftBorder") >>= oBorder; + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, oBorder.Color)); + xCell1Style->getPropertyValue("TopBorder") >>= oBorder; + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, oBorder.Color)); + xCell1Style->getPropertyValue("BottomBorder") >>= oBorder; + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, oBorder.Color)); +} + +DECLARE_ODFEXPORT_TEST(testTableStyles2, "table_styles_2.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Table styles paragraph and char tests + // Doesn't cover all attributes. + // Problem: underline for table autoformat doesn't work. + uno::Reference XFamiliesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFamilies(XFamiliesSupplier->getStyleFamilies()); + uno::Reference xTableFamily(xFamilies->getByName("TableStyles"), uno::UNO_QUERY); + uno::Reference xTableStyle(xTableFamily->getByName("Test style2"), uno::UNO_QUERY); + uno::Reference xCell1Style; + + float fFloat = 0.; + bool bBool = true; + sal_Int16 nInt16 = 0xF0; + sal_Int32 nInt32 = 0xF0F0F0; + OUString sString; + awt::FontSlant eCharPosture; + + // cell 1 + xTableStyle->getByName("first-row-start-column") >>= xCell1Style; + xCell1Style->getPropertyValue("ParaAdjust") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); + CPPUNIT_ASSERT_EQUAL(Color(0xFF6600), getProperty(xCell1Style, "CharColor")); + xCell1Style->getPropertyValue("CharContoured") >>= bBool; + CPPUNIT_ASSERT_EQUAL(false, bBool); + xCell1Style->getPropertyValue("CharShadowed") >>= bBool; + CPPUNIT_ASSERT_EQUAL(true, bBool); + xCell1Style->getPropertyValue("CharStrikeout") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), nInt32); + xCell1Style->getPropertyValue("CharUnderline") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); + // underline color is not working for table autoformats + // xCell1Style->getPropertyValue("CharUnderlineHasColor") >>= bBool; + // CPPUNIT_ASSERT_EQUAL(bool(false), bBool); + // xCell1Style->getPropertyValue("CharUnderlineColor") >>= nInt64; + // CPPUNIT_ASSERT_EQUAL(sal_Int64(-1), nInt64); + // standard font + xCell1Style->getPropertyValue("CharHeight") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(18.), fFloat); + xCell1Style->getPropertyValue("CharWeight") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); + xCell1Style->getPropertyValue("CharPosture") >>= eCharPosture; + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, eCharPosture); + xCell1Style->getPropertyValue("CharFontName") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Courier"), sString); + xCell1Style->getPropertyValue("CharFontStyleName") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString(), sString); + xCell1Style->getPropertyValue("CharFontFamily") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); + xCell1Style->getPropertyValue("CharFontPitch") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), nInt16); + // cjk font + xCell1Style->getPropertyValue("CharHeightAsian") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(18.), fFloat); + xCell1Style->getPropertyValue("CharWeightAsian") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); + xCell1Style->getPropertyValue("CharPostureAsian") >>= eCharPosture; + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, eCharPosture); + xCell1Style->getPropertyValue("CharFontNameAsian") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Courier"), sString); + xCell1Style->getPropertyValue("CharFontStyleNameAsian") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Regularna"), sString); + xCell1Style->getPropertyValue("CharFontFamilyAsian") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); + xCell1Style->getPropertyValue("CharFontPitchAsian") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), nInt16); + // ctl font + xCell1Style->getPropertyValue("CharHeightComplex") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(18.), fFloat); + xCell1Style->getPropertyValue("CharWeightComplex") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); + xCell1Style->getPropertyValue("CharPostureComplex") >>= eCharPosture; + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, eCharPosture); + xCell1Style->getPropertyValue("CharFontNameComplex") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Courier"), sString); + xCell1Style->getPropertyValue("CharFontStyleNameComplex") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Regularna"), sString); + xCell1Style->getPropertyValue("CharFontFamilyComplex") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); + xCell1Style->getPropertyValue("CharFontPitchComplex") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), nInt16); + + // cell 2 + xTableStyle->getByName("first-row") >>= xCell1Style; + xCell1Style->getPropertyValue("ParaAdjust") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), nInt32); + CPPUNIT_ASSERT_EQUAL(Color(0x9900FF), getProperty(xCell1Style, "CharColor")); + xCell1Style->getPropertyValue("CharContoured") >>= bBool; + CPPUNIT_ASSERT_EQUAL(true, bBool); + xCell1Style->getPropertyValue("CharShadowed") >>= bBool; + CPPUNIT_ASSERT_EQUAL(false, bBool); + xCell1Style->getPropertyValue("CharStrikeout") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); + xCell1Style->getPropertyValue("CharUnderline") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), nInt32); + // underline color test place + // standard font + xCell1Style->getPropertyValue("CharHeight") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); + xCell1Style->getPropertyValue("CharWeight") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(150.), fFloat); + xCell1Style->getPropertyValue("CharPosture") >>= eCharPosture; + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, eCharPosture); + xCell1Style->getPropertyValue("CharFontName") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), sString); + xCell1Style->getPropertyValue("CharFontStyleName") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString(), sString); + xCell1Style->getPropertyValue("CharFontFamily") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(3), nInt16); + xCell1Style->getPropertyValue("CharFontPitch") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); + // cjk font + xCell1Style->getPropertyValue("CharHeightAsian") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); + xCell1Style->getPropertyValue("CharWeightAsian") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(150.), fFloat); + xCell1Style->getPropertyValue("CharPostureAsian") >>= eCharPosture; + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, eCharPosture); + xCell1Style->getPropertyValue("CharFontNameAsian") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), sString); + xCell1Style->getPropertyValue("CharFontStyleNameAsian") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Pogrubiona"), sString); + xCell1Style->getPropertyValue("CharFontFamilyAsian") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(3), nInt16); + xCell1Style->getPropertyValue("CharFontPitchAsian") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); + // ctl font + xCell1Style->getPropertyValue("CharHeightComplex") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); + xCell1Style->getPropertyValue("CharWeightComplex") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(150.), fFloat); + xCell1Style->getPropertyValue("CharPostureComplex") >>= eCharPosture; + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, eCharPosture); + xCell1Style->getPropertyValue("CharFontNameComplex") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), sString); + xCell1Style->getPropertyValue("CharFontStyleNameComplex") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Pogrubiona"), sString); + xCell1Style->getPropertyValue("CharFontFamilyComplex") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(3), nInt16); + xCell1Style->getPropertyValue("CharFontPitchComplex") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); + + // cell 3 + xTableStyle->getByName("first-row-even-column") >>= xCell1Style; + xCell1Style->getPropertyValue("ParaAdjust") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), nInt32); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, getProperty(xCell1Style, "CharColor")); + xCell1Style->getPropertyValue("CharContoured") >>= bBool; + CPPUNIT_ASSERT_EQUAL(true, bBool); + xCell1Style->getPropertyValue("CharShadowed") >>= bBool; + CPPUNIT_ASSERT_EQUAL(true, bBool); + xCell1Style->getPropertyValue("CharStrikeout") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nInt32); + xCell1Style->getPropertyValue("CharUnderline") >>= nInt32; + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), nInt32); + // underline color test place + // standard font + xCell1Style->getPropertyValue("CharHeight") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); + xCell1Style->getPropertyValue("CharWeight") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); + xCell1Style->getPropertyValue("CharPosture") >>= eCharPosture; + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, eCharPosture); + xCell1Style->getPropertyValue("CharFontName") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Open Sans"), sString); + xCell1Style->getPropertyValue("CharFontStyleName") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString(), sString); + xCell1Style->getPropertyValue("CharFontFamily") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nInt16); + xCell1Style->getPropertyValue("CharFontPitch") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); + // cjk font + xCell1Style->getPropertyValue("CharHeightAsian") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); + xCell1Style->getPropertyValue("CharWeightAsian") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); + xCell1Style->getPropertyValue("CharPostureAsian") >>= eCharPosture; + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, eCharPosture); + xCell1Style->getPropertyValue("CharFontNameAsian") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Open Sans"), sString); + xCell1Style->getPropertyValue("CharFontStyleNameAsian") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Kursywa"), sString); + xCell1Style->getPropertyValue("CharFontFamilyAsian") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nInt16); + xCell1Style->getPropertyValue("CharFontPitchAsian") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); + // ctl font + xCell1Style->getPropertyValue("CharHeightComplex") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(12.), fFloat); + xCell1Style->getPropertyValue("CharWeightComplex") >>= fFloat; + CPPUNIT_ASSERT_EQUAL(float(100.), fFloat); + xCell1Style->getPropertyValue("CharPostureComplex") >>= eCharPosture; + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, eCharPosture); + xCell1Style->getPropertyValue("CharFontNameComplex") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Open Sans"), sString); + xCell1Style->getPropertyValue("CharFontStyleNameComplex") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Kursywa"), sString); + xCell1Style->getPropertyValue("CharFontFamilyComplex") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nInt16); + xCell1Style->getPropertyValue("CharFontPitchComplex") >>= nInt16; + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), nInt16); +} + +CPPUNIT_TEST_FIXTURE(Test, testTableStyles3) +{ + loadAndReload("table_styles_3.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // This test checks if default valued attributes aren't exported. + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + + // + // For this element the only exported attributes are: "border-left", "border-bottom" + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "background-color"); + // border-left place + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "border-right"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "border-top"); + // border-bottom place + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding-left"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding-right"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding-top"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "padding-bottom"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties", "writing-mode"); + + // should be absent, because it has only "text-align" attribute, which shouldn't be exported. + // Assume that style:paragraph-properties and style:text-properties exists. + assertXPathChildren(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']", 2); + + // + // For this element the only exported attributes are: "use-window-font-color place", "font-size-asian", "font-name-asian", "font-family-asian", "font-name-complex", "font-family-complex" + // use-window-font-color place + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-shadow"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-outline"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-line-through-style"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-line-through-type"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-underline-style"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "text-underline-color"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-size"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-weight"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-family"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-family-generic"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-pitch"); + // font-size-asian place + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-weight-asian"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-asian"); + // font-name-asian place + // font-family-asian place + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-name-asian"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-family-generic-asian"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-pitch-asian"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-size-complex"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-weight-complex"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-complex"); + // font-name-complex place + // font-family-complex place + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-style-name-complex"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-family-generic-complex"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties", "font-pitch-complex"); + +} + +CPPUNIT_TEST_FIXTURE(Test, testTableStyles4) +{ + load(mpTestDocumentPath, "table_styles_4.odt"); + // Test if loaded styles overwrite existing styles + uno::Reference XFamiliesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFamilies(XFamiliesSupplier->getStyleFamilies()); + uno::Reference xTableFamily(xFamilies->getByName("TableStyles"), uno::UNO_QUERY); + uno::Reference xTableStyle(xTableFamily->getByName("Green"), uno::UNO_QUERY); + uno::Reference xCell1Style; + + xTableStyle->getByName("first-row-start-column") >>= xCell1Style; + CPPUNIT_ASSERT_EQUAL(Color(0x00ff00), getProperty(xCell1Style, "BackColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTableStyles5) +{ + loadAndReload("table_styles_5.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Test if cell styles doesn't have a style:parent-style-name attribute. + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.1']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.2']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.3']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.4']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.5']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.6']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.7']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.8']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.9']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.10']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.11']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.12']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.13']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.14']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.15']", "parent-style-name"); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.16']", "parent-style-name"); + +} + +DECLARE_ODFEXPORT_TEST(testTdf101710, "tdf101710.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Test that number format of cell styles can be imported and exported. + uno::Reference xStyle(getStyles("CellStyles")->getByName("Test Style.11"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(10104), getProperty(xStyle, "NumberFormat")); +} + +DECLARE_ODFEXPORT_TEST(testTdf129568, "tdf129568.fodt") +{ + // Test that export doesn't fail, and that style is imported and in use. + uno::Reference xStyle(getStyles("CellStyles")->getByName("Default Style.1"), uno::UNO_QUERY); + CPPUNIT_ASSERT(xStyle->isInUse()); + CPPUNIT_ASSERT_EQUAL(Color(0xffff00), getProperty(xStyle, "BackColor")); +} + +DECLARE_ODFEXPORT_TEST(testTdf129568ui, "tdf129568-ui.fodt") +{ + // Same as above, but styles referenced by UI name. + uno::Reference xStyle(getStyles("CellStyles")->getByName("Default Style.1"), uno::UNO_QUERY); + CPPUNIT_ASSERT(xStyle->isInUse()); + CPPUNIT_ASSERT_EQUAL(Color(0xffff00), getProperty(xStyle, "BackColor")); +} + +DECLARE_ODFEXPORT_TEST(testTdf132642_keepWithNextTable, "tdf132642_keepWithNextTable.odt") +{ + // Since the row is very big, it should split over two pages. + // Since up to this point we haven't tried to make it match MS formats, it should start on page 1. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Row splits over 2 pages", 2, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testImageMimetype) +{ + loadAndReload("image-mimetype.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Test that the loext:mimetype attribute is written for exported images, tdf#109202 + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + // Original image (svg) + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p/draw:frame/draw:image[@draw:mime-type='image/svg+xml']"); +} + +CPPUNIT_TEST_FIXTURE(Test, testEmbeddedFontProps) +{ + loadAndReload("embedded-font-props.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); +#if !defined(MACOSX) + // Test that font style/weight of embedded fonts is exposed. + // Test file is a normal ODT, except EmbedFonts is set to true in settings.xml. + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + // These failed, the attributes were missing. + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[1]", "font-style", "normal"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[1]", "font-weight", "normal"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[2]", "font-style", "normal"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[2]", "font-weight", "bold"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[3]", "font-style", "italic"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[3]", "font-weight", "normal"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[4]", "font-style", "italic"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[4]", "font-weight", "bold"); +#endif +} + +DECLARE_ODFEXPORT_TEST(testTdf100492, "tdf100492.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT(xShape.is()); + + // Save the first shape to a SVG + uno::Reference xGraphicExporter = drawing::GraphicExportFilter::create(comphelper::getProcessComponentContext()); + uno::Reference xSourceDoc(xShape, uno::UNO_QUERY); + xGraphicExporter->setSourceDocument(xSourceDoc); + + SvMemoryStream aStream; + uno::Reference xOutputStream(new utl::OStreamWrapper(aStream)); + uno::Sequence aDescriptor( comphelper::InitPropertySequence({ + { "OutputStream", uno::Any(xOutputStream) }, + { "FilterName", uno::Any(OUString("SVG")) } + })); + xGraphicExporter->filter(aDescriptor); + aStream.Seek(STREAM_SEEK_TO_BEGIN); + + // TODO: Disabled. Parsing of SVG gives just root node without any children. + // Reason of such behavior unclear. So XPATH assert fails. + + // Parse resulting SVG as XML file. + // xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream); + + // Check amount of paths required to draw an arrow. + // Since there are still some empty paths in output test can fail later. There are just two + // really used and visible paths. + //assertXPath(pXmlDoc, "/svg/path", 4); +} + +DECLARE_ODFEXPORT_TEST(testTdf77961, "tdf77961.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xStyles(getStyles("PageStyles")); + uno::Reference xStyle(xStyles->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( false , getProperty(xStyle, "GridDisplay")); + CPPUNIT_ASSERT_EQUAL( false , getProperty(xStyle, "GridPrint")); +} + +DECLARE_ODFEXPORT_TEST(testReferenceLanguage, "referencelanguage.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getPages()); + // Test loext:reference-language attribute of reference fields + // (used from LibreOffice 6.1, and proposed for next ODF) + OUString const aFieldTexts[] = { "A 2", "Az Isten", "Az 50-esek", + "A 2018-asok", "Az egyebek", "A fejezetek", + u"Az „Őseinket...”", "a 2", + "Az v", "az 1", "Az e)", "az 1", + "Az (5)", "az 1", "A 2", "az 1" }; + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + // update "A (4)" to "Az (5)" + uno::Reference(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY_THROW)->refresh(); + + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + uno::Any aHu(OUString("Hu")); + uno::Any ahu(OUString("hu")); + for (size_t i = 0; i < SAL_N_ELEMENTS(aFieldTexts); i++) + { + uno::Any aField = xFields->nextElement(); + uno::Reference xServiceInfo(aField, uno::UNO_QUERY); + if (xServiceInfo->supportsService("com.sun.star.text.textfield.GetReference")) + { + uno::Reference xPropertySet(aField, uno::UNO_QUERY); + uno::Any aLang = xPropertySet->getPropertyValue("ReferenceFieldLanguage"); + CPPUNIT_ASSERT_EQUAL(true, aLang == aHu || aLang == ahu); + uno::Reference xField(aField, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(aFieldTexts[i], xField->getAnchor()->getString()); + } + } +} + +CPPUNIT_TEST_FIXTURE(Test, testRubyPosition) +{ + loadAndReload("ruby-position.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + + assertXPath(pXmlDoc, "//style:style[@style:family='ruby']/style:ruby-properties[@loext:ruby-position='inter-character']", 1); + assertXPath(pXmlDoc, "//style:style[@style:family='ruby']/style:ruby-properties[@style:ruby-position='below']", 1); +} + +DECLARE_ODFEXPORT_TEST(testAllowOverlap, "allow-overlap.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xShape = getShape(1); + // Without the accompanying fix in place, this test would have failed with: + // - Expression: !getProperty(xShape, "AllowOverlap") + // i.e. the custom AllowOverlap=false shape property was lost on import/export. + CPPUNIT_ASSERT(!getProperty(xShape, "AllowOverlap")); + xShape = getShape(2); + CPPUNIT_ASSERT(!getProperty(xShape, "AllowOverlap")); +} + +DECLARE_ODFEXPORT_TEST(testSignatureLineProperties, "signatureline-properties.fodt") +{ + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT(xShape.is()); + + CPPUNIT_ASSERT_EQUAL(true, getProperty(xShape, "IsSignatureLine")); + CPPUNIT_ASSERT_EQUAL(OUString("{3C24159B-3B98-4F60-AB52-00E7721758E9}"), + getProperty(xShape, "SignatureLineId")); + CPPUNIT_ASSERT_EQUAL(OUString("John Doe"), + getProperty(xShape, "SignatureLineSuggestedSignerName")); + CPPUNIT_ASSERT_EQUAL(OUString("Farmer"), + getProperty(xShape, "SignatureLineSuggestedSignerTitle")); + CPPUNIT_ASSERT_EQUAL(OUString("john@farmers.org"), + getProperty(xShape, "SignatureLineSuggestedSignerEmail")); + CPPUNIT_ASSERT_EQUAL(OUString("Please farm here."), + getProperty(xShape, "SignatureLineSigningInstructions")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xShape, "SignatureLineCanAddComment")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xShape, "SignatureLineShowSignDate")); + + // tdf#130917 This needs to be always set when importing a doc, ooxml export expects it. + uno::Reference xUnsignedGraphic; + uno::Reference xProps(xShape, uno::UNO_QUERY); + xProps->getPropertyValue("SignatureLineUnsignedImage") >>= xUnsignedGraphic; + CPPUNIT_ASSERT_EQUAL(true, xUnsignedGraphic.is()); +} + +DECLARE_ODFEXPORT_TEST(testQrCodeGenProperties, "qrcode-properties.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT(xShape.is()); + + css::drawing::BarCode aBarCode = getProperty(xShape, "BarCodeProperties"); + + CPPUNIT_ASSERT_EQUAL(OUString("www.libreoffice.org"), + aBarCode.Payload); + CPPUNIT_ASSERT_EQUAL(css::drawing::BarCodeErrorCorrection::LOW, + aBarCode.ErrorCorrection); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), + aBarCode.Border); +} + +DECLARE_ODFEXPORT_TEST(testChapterNumberingNewLine, "chapter-number-new-line.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xNumberingSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xNumberingRules = xNumberingSupplier->getChapterNumberingRules(); + comphelper::SequenceAsHashMap hashMap(xNumberingRules->getByIndex(0)); + + //This failed Actual Value was LISTTAB instead of NEWLINE + CPPUNIT_ASSERT_EQUAL( + sal_Int16(SvxNumberFormat::NEWLINE), hashMap["LabelFollowedBy"].get()); +} + +DECLARE_ODFEXPORT_TEST(testSpellOutNumberingTypes, "spellout-numberingtypes.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // ordinal indicator, ordinal and cardinal number numbering styles (from LibreOffice 6.1) + OUString const aFieldTexts[] = { "1st", "Erste", "Eins", "1.", "Premier", "Un", u"1ᵉʳ", "First", "One" }; + // fallback for old platforms without std::codecvt and std::regex supports + OUString const aFieldTextFallbacks[] = { "Ordinal-number 1", "Ordinal 1", "1" }; + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + // update text field content + uno::Reference(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY_THROW)->refresh(); + + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + for (size_t i = 0; i < SAL_N_ELEMENTS(aFieldTexts); i++) + { + uno::Any aField = xFields->nextElement(); + uno::Reference xServiceInfo(aField, uno::UNO_QUERY); + if (xServiceInfo->supportsService("com.sun.star.text.textfield.PageNumber")) + { + uno::Reference xField(aField, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, aFieldTexts[i].equals(xField->getAnchor()->getString()) || + aFieldTextFallbacks[i%3].equals(xField->getAnchor()->getString())); + } + } +} + +// MAILMERGE Add conditional to expand / collapse bookmarks +DECLARE_ODFEXPORT_TEST(tdf101856_overlapped, "tdf101856_overlapped.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // get bookmark interface + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + + // check: we have 2 bookmarks + CPPUNIT_ASSERT_EQUAL(static_cast(2), xBookmarksByIdx->getCount()); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkNonHidden")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkHidden")); + + // + uno::Reference xBookmark1(xBookmarksByName->getByName("BookmarkNonHidden"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xBookmark1, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xBookmark1, UNO_NAME_BOOKMARK_HIDDEN)); + + // + uno::Reference xBookmark2(xBookmarksByName->getByName("BookmarkHidden"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xBookmark2, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xBookmark2, UNO_NAME_BOOKMARK_HIDDEN)); +} + +// MAILMERGE Add conditional to expand / collapse bookmarks +DECLARE_ODFEXPORT_TEST(tdf101856, "tdf101856.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // get bookmark interface + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + + // check: we have 2 bookmarks + CPPUNIT_ASSERT_EQUAL(static_cast(5), xBookmarksByIdx->getCount()); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkVisible")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkHidden")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkVisibleWithCondition")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkNotHiddenWithCondition")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkHiddenWithCondition")); + + // + uno::Reference xBookmark1(xBookmarksByName->getByName("BookmarkVisible"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xBookmark1, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xBookmark1, UNO_NAME_BOOKMARK_HIDDEN)); + + // + uno::Reference xBookmark2(xBookmarksByName->getByName("BookmarkHidden"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xBookmark2, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xBookmark2, UNO_NAME_BOOKMARK_HIDDEN)); + + // + uno::Reference xBookmark3(xBookmarksByName->getByName("BookmarkVisibleWithCondition"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("0==1"), getProperty(xBookmark3, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xBookmark3, UNO_NAME_BOOKMARK_HIDDEN)); + + // + // + // The following test doesn't work, while during output in the case of loext:hidden="false". + // no additional parameters are written. Implementation should be reviewed. + // +// uno::Reference xBookmark4(xBookmarksByName->getByName("BookmarkNotHiddenWithCondition"), uno::UNO_QUERY); +// CPPUNIT_ASSERT_EQUAL(OUString("1==1"), getProperty(xBookmark4, UNO_NAME_BOOKMARK_CONDITION)); +// CPPUNIT_ASSERT_EQUAL(false, getProperty(xBookmark4, UNO_NAME_BOOKMARK_HIDDEN)); + + // + uno::Reference xBookmark5(xBookmarksByName->getByName("BookmarkHiddenWithCondition"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1==1"), getProperty(xBookmark5, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xBookmark5, UNO_NAME_BOOKMARK_HIDDEN)); +} + +DECLARE_ODFEXPORT_TEST(tdf118502, "tdf118502.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xShape = getShape(1); + // Make sure the replacement graphic is still there + // (was gone because the original graphic was not recognized during load) + auto xReplacementGraphic + = getProperty>(xShape, "ReplacementGraphic"); + CPPUNIT_ASSERT(xReplacementGraphic.is()); +} + +CPPUNIT_TEST_FIXTURE(Test, tdf99631) +{ + loadAndReload("tdf99631.docx"); + // check import of VisualArea settings of the embedded XLSX OLE objects + xmlDocUniquePtr pXmlDoc = parseExport("Object 1/settings.xml"); + assertXPathContent(pXmlDoc, "//config:config-item[@config:name='VisibleAreaWidth']", "4516"); + assertXPathContent(pXmlDoc, "//config:config-item[@config:name='VisibleAreaHeight']", "903"); + + xmlDocUniquePtr pXmlDoc2 = parseExport("Object 2/settings.xml"); + assertXPathContent(pXmlDoc2, "//config:config-item[@config:name='VisibleAreaWidth']", "4516"); + assertXPathContent(pXmlDoc2, "//config:config-item[@config:name='VisibleAreaHeight']", "1355"); +} + +DECLARE_ODFEXPORT_TEST(tdf128504, "tdf128504.docx") +{ + uno::Reference xPara = getParagraph(6); + uno::Reference xRun(getRun(xPara,1), uno::UNO_QUERY); + OUString unVisitedStyleName = getProperty(xRun, "UnvisitedCharStyleName"); + CPPUNIT_ASSERT(!unVisitedStyleName.equalsIgnoreAsciiCase("Internet Link")); + OUString visitedStyleName = getProperty(xRun, "VisitedCharStyleName"); + CPPUNIT_ASSERT(!visitedStyleName.equalsIgnoreAsciiCase("Visited Internet Link")); +} + +DECLARE_ODFEXPORT_TEST(tdf121658, "tdf121658.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xParaStyles(getStyles("ParagraphStyles")); + uno::Reference xStyle1(xParaStyles->getByName( + "Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xStyle1, "ParaHyphenationNoCaps")); +} + +DECLARE_ODFEXPORT_TEST(tdf149248, "tdf149248.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(false, getProperty(getParagraph(2), "ParaHyphenationNoLastWord")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(getParagraph(4), "ParaHyphenationNoLastWord")); +} + +DECLARE_ODFEXPORT_TEST(testTdf150394, "tdf150394.odt") +{ + // crashes at import time + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_ODFEXPORT_TEST(tdf149324, "tdf149324.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), getProperty(getParagraph(2), "ParaHyphenationMinWordLength")); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(7), getProperty(getParagraph(4), "ParaHyphenationMinWordLength")); +} + +DECLARE_ODFEXPORT_TEST(tdf149420, "tdf149420.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), getProperty(getParagraph(2), "ParaHyphenationZone")); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(567), getProperty(getParagraph(4), "ParaHyphenationZone")); +} + +DECLARE_ODFEXPORT_TEST(testArabicZeroNumbering, "arabic-zero-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 64 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::ARABIC_ZERO), + aMap["NumberingType"].get()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZero3Numbering, "arabic-zero3-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 65 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO3. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::ARABIC_ZERO3), + aMap["NumberingType"].get()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZero4Numbering, "arabic-zero4-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 66 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO4. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::ARABIC_ZERO4), + aMap["NumberingType"].get()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZero5Numbering, "arabic-zero5-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 67 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO5. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::ARABIC_ZERO5), + aMap["NumberingType"].get()); +} + +DECLARE_ODFEXPORT_TEST(testRovasNumbering, "rovas-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 68 + // - Actual : 4 + // i.e. numbering type was ARABIC, not SZEKELY_ROVAS. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::SZEKELY_ROVAS), + aMap["NumberingType"].get()); +} + +DECLARE_ODFEXPORT_TEST(testPageContentTop, "page-content-top.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + sal_Int16 nExpected = text::RelOrientation::PAGE_PRINT_AREA_TOP; + CPPUNIT_ASSERT_EQUAL(nExpected, getProperty(xShape, "VertOrientRelation")); +} + +DECLARE_ODFEXPORT_TEST(testPageContentBottom, "page-content-bottom.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + sal_Int16 nExpected = text::RelOrientation::PAGE_PRINT_AREA_BOTTOM; + CPPUNIT_ASSERT_EQUAL(nExpected, getProperty(xShape, "VertOrientRelation")); +} + +CPPUNIT_TEST_FIXTURE(Test, tdf124470) +{ + loadAndReload("tdf124470TableAndEmbeddedUsedFonts.odt"); + // Table styles were exported out of place, inside font-face-decls. + // Without the fix in place, this will fail already in ODF validation: + // "content.xml[2,2150]: Error: tag name "style:style" is not allowed. Possible tag names are: " + + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + + assertXPath(pXmlDoc, "/office:document-content/office:font-face-decls/style:style", 0); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:family='table']", 1); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:family='table-column']", 2); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:family='paragraph']", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, tdf135942) +{ + loadAndReload("nestedTableInFooter.odt"); + // All table autostyles should be collected, including nested, and must not crash. + + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + + assertXPath(pXmlDoc, "/office:document-styles/office:automatic-styles/style:style[@style:family='table']", 2); +} + +CPPUNIT_TEST_FIXTURE(Test, tdf150927) +{ + // Similar to tdf135942 + + loadAndReload("table-in-frame-in-table-in-header-base.odt"); + // All table autostyles should be collected, including nested, and must not crash. + + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + + assertXPath(pXmlDoc, "/office:document-styles/office:automatic-styles/style:style[@style:family='table']", 2); +} + +DECLARE_ODFEXPORT_TEST(testGutterLeft, "gutter-left.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xPageStyle; + getStyles("PageStyles")->getByName("Standard") >>= xPageStyle; + sal_Int32 nGutterMargin{}; + xPageStyle->getPropertyValue("GutterMargin") >>= nGutterMargin; + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1270 + // - Actual : 0 + // i.e. gutter margin was lost. + CPPUNIT_ASSERT_EQUAL(static_cast(1270), nGutterMargin); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/odfexport/odfexport2.cxx b/sw/qa/extras/odfexport/odfexport2.cxx new file mode 100644 index 000000000..c6f5d025e --- /dev/null +++ b/sw/qa/extras/odfexport/odfexport2.cxx @@ -0,0 +1,282 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/odfexport/data/", "writer8") {} + + bool mustValidate(const char* /*filename*/) const override + { + return true; + } + +}; + +CPPUNIT_TEST_FIXTURE(Test, tdf151100) +{ + // Similar to tdf135942 + + loadAndReload("tdf151100.docx"); + // All table autostyles should be collected, including nested, and must not crash. + + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + + assertXPath(pXmlDoc, "/office:document-styles/office:automatic-styles/style:style[@style:family='table']", 1); +} + +DECLARE_ODFEXPORT_TEST(testTdf52065_centerTabs, "testTdf52065_centerTabs.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + sal_Int32 nTabStop = parseDump("//body/txt[4]/Text[3]", "nWidth").toInt32(); + // Without the fix, the text was unseen, with a tabstop width of 64057. It should be 3057 + CPPUNIT_ASSERT(nTabStop < 4000); + CPPUNIT_ASSERT(3000 < nTabStop); + CPPUNIT_ASSERT_EQUAL(OUString(u"Pečiatka zamestnávateľa"), parseDump("//body/txt[4]/Text[4]", "Portion")); +} + +DECLARE_ODFEXPORT_TEST(testTdf104254_noHeaderWrapping, "tdf104254_noHeaderWrapping.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + sal_Int32 nParaHeight = getXPath(pXmlDoc, "//header/txt[1]/infos/bounds", "height").toInt32(); + // The wrapping on header images is supposed to be ignored (since OOo for MS compat reasons), + // thus making the text run underneath the image. Before, height was 1104. Now it is 552. + CPPUNIT_ASSERT_MESSAGE("Paragraph should fit on a single line", nParaHeight < 600); +} + +DECLARE_ODFEXPORT_TEST(testTdf131025_noZerosInTable, "tdf131025_noZerosInTable.odt") +{ + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables = xSupplier->getTextTables(); + uno::Reference xTable(xTables->getByName("Table1"), uno::UNO_QUERY); + + uno::Reference xCell(xTable->getCellByName("C3"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("5 gp"), xCell->getString()); +} + +DECLARE_ODFEXPORT_TEST(testTdf143793_noBodyWrapping, "tdf143793_noBodyWrapping.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + // Preserve old document wrapping. Compat "Use OOo 1.1 text wrapping around objects" + // Originally, the body text did not wrap around spill-over header images + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Fits on one page", 1, getPages() ); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + sal_Int32 nParaHeight = getXPath(pXmlDoc, "//page[1]/header/txt[1]/infos/bounds", "height").toInt32(); + // The header text should wrap around the header image in OOo 1.1 and prior, + // thus taking up two lines instead of one. One line is 276. It should be 552. + CPPUNIT_ASSERT_MESSAGE("Header text should fill two lines", nParaHeight > 400); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf137199) +{ + loadAndReload("tdf137199.docx"); + CPPUNIT_ASSERT_EQUAL(OUString(">1<"), getProperty(getParagraph(1), "ListLabelString")); + + CPPUNIT_ASSERT_EQUAL(OUString("1)"), getProperty(getParagraph(2), "ListLabelString")); + + CPPUNIT_ASSERT_EQUAL(OUString("HELLO1WORLD!"), getProperty(getParagraph(3), "ListLabelString")); + + CPPUNIT_ASSERT_EQUAL(OUString("HELLO2WORLD!"), getProperty(getParagraph(4), "ListLabelString")); +} + +DECLARE_ODFEXPORT_TEST(testTdf143605, "tdf143605.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // With numbering type "none" there should be just prefix & suffix + CPPUNIT_ASSERT_EQUAL(OUString("."), getProperty(getParagraph(1), "ListLabelString")); +} + +CPPUNIT_TEST_FIXTURE(Test, testListFormatDocx) +{ + loadAndReload("listformat.docx"); + // Ensure in resulting ODT we also have not just prefix/suffix, but custom delimiters + CPPUNIT_ASSERT_EQUAL(OUString(">1<"), getProperty(getParagraph(1), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1/1<<"), getProperty(getParagraph(2), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1/1/1<<"), getProperty(getParagraph(3), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1/1/2<<"), getProperty(getParagraph(4), "ListLabelString")); + + // Check also that in numbering styles we have num-list-format defined + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='1']", "num-list-format", ">%1%<"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='2']", "num-list-format", ">>%1%/%2%<<"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='3']", "num-list-format", ">>%1%/%2%/%3%<<"); + + // But for compatibility there are still prefix/suffix + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='1']", "num-prefix", ">"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='1']", "num-suffix", "<"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='2']", "num-prefix", ">>"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='2']", "num-suffix", "<<"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='3']", "num-prefix", ">>"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='3']", "num-suffix", "<<"); +} + +DECLARE_ODFEXPORT_TEST(testShapeWithHyperlink, "shape-with-hyperlink.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + if (xmlDocUniquePtr pXmlDoc = parseExport("content.xml")) + { + // Check how conversion from prefix/suffix to list format did work + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p/draw:a", + "href", "http://shape.com/"); + } +} + +DECLARE_ODFEXPORT_TEST(testShapesHyperlink, "shapes-hyperlink.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(5, getShapes()); + uno::Reference const xPropSet1(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice.org/"), getProperty(xPropSet1, "Hyperlink")); + + uno::Reference const xPropSet2(getShape(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice2.org/"), getProperty(xPropSet2, "Hyperlink")); + + uno::Reference const xPropSet3(getShape(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice3.org/"), getProperty(xPropSet3, "Hyperlink")); + + uno::Reference const xPropSet4(getShape(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice4.org/"), getProperty(xPropSet4, "Hyperlink")); + + uno::Reference const xPropSet5(getShape(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice5.org/"), getProperty(xPropSet5, "Hyperlink")); +} + +DECLARE_ODFEXPORT_TEST(testListFormatOdt, "listformat.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Ensure in resulting ODT we also have not just prefix/suffix, but custom delimiters + CPPUNIT_ASSERT_EQUAL(OUString(">1<"), getProperty(getParagraph(1), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1.1<<"), getProperty(getParagraph(2), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1.1.1<<"), getProperty(getParagraph(3), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1.1.2<<"), getProperty(getParagraph(4), "ListLabelString")); + + if (xmlDocUniquePtr pXmlDoc = parseExport("content.xml")) + { + // Check how conversion from prefix/suffix to list format did work + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='1']", "num-list-format", ">%1%<"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='2']", "num-list-format", ">>%1%.%2%<<"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='3']", "num-list-format", ">>%1%.%2%.%3%<<"); + + // But for compatibility there are still prefix/suffix as they were before + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='1']", "num-prefix", ">"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='1']", "num-suffix", "<"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='2']", "num-prefix", ">>"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='2']", "num-suffix", "<<"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='3']", "num-prefix", ">>"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='3']", "num-suffix", "<<"); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testStyleLink) +{ + // Given a document with a para and a char style that links each other, when loading that + // document: + load(mpTestDocumentPath, "style-link.fodt"); + + // Then make sure the char style links the para one: + uno::Any aCharStyle = getStyles("CharacterStyles")->getByName("List Paragraph Char"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: List Paragraph + // - Actual : + // i.e. the linked style was lost on import. + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"), getProperty(aCharStyle, "LinkStyle")); + uno::Any aParaStyle = getStyles("ParagraphStyles")->getByName("List Paragraph"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: List Paragraph Char + // - Actual : + // i.e. the linked style was lost on import. + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph Char"), getProperty(aParaStyle, "LinkStyle")); +} + +CPPUNIT_TEST_FIXTURE(Test, tdf120972) +{ + loadAndReload("table_number_format_3.docx"); + + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + OUString cDecimal(SvtSysLocale().GetLocaleData().getNumDecimalSep()[0]); + assertXPath( + pXmlDoc, + "//style:style[@style:name='P1']/style:paragraph-properties/style:tab-stops/style:tab-stop", + "char", cDecimal); + assertXPath( + pXmlDoc, + "//style:style[@style:name='P2']/style:paragraph-properties/style:tab-stops/style:tab-stop", + "char", cDecimal); +} + +DECLARE_ODFEXPORT_TEST(testSectionColumnSeparator, "section-columns-separator.fodt") +{ + // tdf#150235: due to wrong types used in column export, 'style:height' and 'style:style' + // attributes were exported incorrectly for 'style:column-sep' element + auto xSection = getProperty>(getParagraph(1), "TextSection"); + auto xColumns = getProperty>(xSection, "TextColumns"); + CPPUNIT_ASSERT(xColumns); + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), xColumns->getColumnCount()); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 50 + // - Actual : 100 + CPPUNIT_ASSERT_EQUAL(static_cast(50), + getProperty(xColumns, "SeparatorLineRelativeHeight")); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2 + // - Actual : 0 + CPPUNIT_ASSERT_EQUAL(css::text::ColumnSeparatorStyle::DOTTED, + getProperty(xColumns, "SeparatorLineStyle")); + + // Check the rest of the properties, too + CPPUNIT_ASSERT_EQUAL(true, getProperty(xColumns, "IsAutomatic")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(600), getProperty(xColumns, "AutomaticDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(9), getProperty(xColumns, "SeparatorLineWidth")); + CPPUNIT_ASSERT_EQUAL(Color(0x99, 0xAA, 0xBB), + getProperty(xColumns, "SeparatorLineColor")); + CPPUNIT_ASSERT_EQUAL( + css::style::VerticalAlignment_BOTTOM, + getProperty(xColumns, "SeparatorLineVerticalAlignment")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xColumns, "SeparatorLineIsOn")); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/odfimport/data/BibliographyEntryField.odt b/sw/qa/extras/odfimport/data/BibliographyEntryField.odt new file mode 100644 index 000000000..067827bb5 Binary files /dev/null and b/sw/qa/extras/odfimport/data/BibliographyEntryField.odt differ diff --git a/sw/qa/extras/odfimport/data/PageAnchorZIndexFirstPage.fodt b/sw/qa/extras/odfimport/data/PageAnchorZIndexFirstPage.fodt new file mode 100644 index 000000000..6acb5e6d8 --- /dev/null +++ b/sw/qa/extras/odfimport/data/PageAnchorZIndexFirstPage.fodt @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /9j/4AAQSkZJRgABAQEASABIAAD/2wBDABcQERQRDhcUEhQaGBcbIjklIh8fIkYyNSk5UkhX + VVFIUE5bZoNvW2F8Yk5QcptzfIeLkpSSWG2grJ+OqoOPko3/2wBDARgaGiIeIkMlJUONXlBe + jY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY3/wAAR + CAARABADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDmbO2a6uBEpx3J9BU2oWBsypDbkbuR0NJp + lyttdhpOFYbSfSrGsXkU4SOJg2DkkdKxcp+0SWxulD2bb3MyiiitjA//2Q== + + + + + /9j/4AAQSkZJRgABAQEARwBHAAD/2wBDABMNDhAODBMQDxAVFBMWHC4eHBoaHDkpKyIuQztH + RkI7QUBKVGtaSk9lUEBBXX5eZW5yd3l3SFmDjIJ0i2t1d3P/2wBDARQVFRwYHDceHjdzTUFN + c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3P/wAAR + CAANABYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDjYImnnSJerkAZre/4R6ARf62Tfj73GPyr + nkZkcOpIZTkEdq1P7fu/L27Y9397Fc9aNVtezZ0UZUknzozp4mgmeJiCUODiimu7O5ZjlmOS + T3oroW2pg7X0P//Z + + + + + 2 + + + + + + 1 + + + + + + + diff --git a/sw/qa/extras/odfimport/data/PageAnchorZIndexSecondPage.fodt b/sw/qa/extras/odfimport/data/PageAnchorZIndexSecondPage.fodt new file mode 100644 index 000000000..e335eee44 --- /dev/null +++ b/sw/qa/extras/odfimport/data/PageAnchorZIndexSecondPage.fodt @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /9j/4AAQSkZJRgABAQEASABIAAD/2wBDABcQERQRDhcUEhQaGBcbIjklIh8fIkYyNSk5UkhX + VVFIUE5bZoNvW2F8Yk5QcptzfIeLkpSSWG2grJ+OqoOPko3/2wBDARgaGiIeIkMlJUONXlBe + jY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY3/wAAR + CAARABADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDmbO2a6uBEpx3J9BU2oWBsypDbkbuR0NJp + lyttdhpOFYbSfSrGsXkU4SOJg2DkkdKxcp+0SWxulD2bb3MyiiitjA//2Q== + + + + + /9j/4AAQSkZJRgABAQEARwBHAAD/2wBDABMNDhAODBMQDxAVFBMWHC4eHBoaHDkpKyIuQztH + RkI7QUBKVGtaSk9lUEBBXX5eZW5yd3l3SFmDjIJ0i2t1d3P/2wBDARQVFRwYHDceHjdzTUFN + c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3P/wAAR + CAANABYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDjYImnnSJerkAZre/4R6ARf62Tfj73GPyr + nkZkcOpIZTkEdq1P7fu/L27Y9397Fc9aNVtezZ0UZUknzozp4mgmeJiCUODiimu7O5ZjlmOS + T3oroW2pg7X0P//Z + + + + + 2 + + + + + + 1 + + + + + + + diff --git a/sw/qa/extras/odfimport/data/PageBackground.odt b/sw/qa/extras/odfimport/data/PageBackground.odt new file mode 100644 index 000000000..3733d5bae Binary files /dev/null and b/sw/qa/extras/odfimport/data/PageBackground.odt differ diff --git a/sw/qa/extras/odfimport/data/Word2010AsCharShape.odt b/sw/qa/extras/odfimport/data/Word2010AsCharShape.odt new file mode 100644 index 000000000..06c917f6a Binary files /dev/null and b/sw/qa/extras/odfimport/data/Word2010AsCharShape.odt differ diff --git a/sw/qa/extras/odfimport/data/annotation-formatting.odt b/sw/qa/extras/odfimport/data/annotation-formatting.odt new file mode 100644 index 000000000..ce8d98f40 Binary files /dev/null and b/sw/qa/extras/odfimport/data/annotation-formatting.odt differ diff --git a/sw/qa/extras/odfimport/data/bnc800714.fodt b/sw/qa/extras/odfimport/data/bnc800714.fodt new file mode 100644 index 000000000..a759b7c84 --- /dev/null +++ b/sw/qa/extras/odfimport/data/bnc800714.fodt @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + Before. + + + + + + + Frame. + + After. + + + diff --git a/sw/qa/extras/odfimport/data/borders_ooo33.odt b/sw/qa/extras/odfimport/data/borders_ooo33.odt new file mode 100644 index 000000000..b4ba91658 Binary files /dev/null and b/sw/qa/extras/odfimport/data/borders_ooo33.odt differ diff --git a/sw/qa/extras/odfimport/data/dateFormFormats.odt b/sw/qa/extras/odfimport/data/dateFormFormats.odt new file mode 100644 index 000000000..ef99e70f4 Binary files /dev/null and b/sw/qa/extras/odfimport/data/dateFormFormats.odt differ diff --git a/sw/qa/extras/odfimport/data/empty-svg-family-name.odt b/sw/qa/extras/odfimport/data/empty-svg-family-name.odt new file mode 100644 index 000000000..b4b5516e9 Binary files /dev/null and b/sw/qa/extras/odfimport/data/empty-svg-family-name.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo37606.odt b/sw/qa/extras/odfimport/data/fdo37606.odt new file mode 100644 index 000000000..462984f11 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo37606.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo47267-3.odt b/sw/qa/extras/odfimport/data/fdo47267-3.odt new file mode 100644 index 000000000..a30fbc6eb Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo47267-3.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo53210.odt b/sw/qa/extras/odfimport/data/fdo53210.odt new file mode 100644 index 000000000..cfa504409 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo53210.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo55814.odt b/sw/qa/extras/odfimport/data/fdo55814.odt new file mode 100644 index 000000000..890fa4b9f Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo55814.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo56272.odt b/sw/qa/extras/odfimport/data/fdo56272.odt new file mode 100644 index 000000000..57241d3a7 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo56272.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo60842.odt b/sw/qa/extras/odfimport/data/fdo60842.odt new file mode 100644 index 000000000..dc2bfbeef Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo60842.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo68839.odt b/sw/qa/extras/odfimport/data/fdo68839.odt new file mode 100644 index 000000000..92a25b8f7 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo68839.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo69862.odt b/sw/qa/extras/odfimport/data/fdo69862.odt new file mode 100644 index 000000000..aec48fd13 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo69862.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo69979.odt b/sw/qa/extras/odfimport/data/fdo69979.odt new file mode 100644 index 000000000..8f7d77ec6 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo69979.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo75872_aoo40.odt b/sw/qa/extras/odfimport/data/fdo75872_aoo40.odt new file mode 100644 index 000000000..549a56706 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo75872_aoo40.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo75872_ooo33.odt b/sw/qa/extras/odfimport/data/fdo75872_ooo33.odt new file mode 100644 index 000000000..4cc3de7cc Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo75872_ooo33.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo79269.odt b/sw/qa/extras/odfimport/data/fdo79269.odt new file mode 100644 index 000000000..638293600 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo79269.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo79269_header.odt b/sw/qa/extras/odfimport/data/fdo79269_header.odt new file mode 100644 index 000000000..8a9702d7f Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo79269_header.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo81223.odt b/sw/qa/extras/odfimport/data/fdo81223.odt new file mode 100644 index 000000000..21343d3dd Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo81223.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo82165.odt b/sw/qa/extras/odfimport/data/fdo82165.odt new file mode 100644 index 000000000..65a4084b7 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo82165.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo90130-1.odt b/sw/qa/extras/odfimport/data/fdo90130-1.odt new file mode 100644 index 000000000..6839b3635 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo90130-1.odt differ diff --git a/sw/qa/extras/odfimport/data/fdo90130-2.odt b/sw/qa/extras/odfimport/data/fdo90130-2.odt new file mode 100644 index 000000000..6cf089505 Binary files /dev/null and b/sw/qa/extras/odfimport/data/fdo90130-2.odt differ diff --git a/sw/qa/extras/odfimport/data/forcepoint101.fodt b/sw/qa/extras/odfimport/data/forcepoint101.fodt new file mode 100644 index 000000000..721088826 --- /dev/null +++ b/sw/qa/extras/odfimport/data/forcepoint101.fodt @@ -0,0 +1,13 @@ + + + + + + + + + + foobar + + + diff --git a/sw/qa/extras/odfimport/data/forcepoint108.fodt b/sw/qa/extras/odfimport/data/forcepoint108.fodt new file mode 100644 index 000000000..4328ea65f --- /dev/null +++ b/sw/qa/extras/odfimport/data/forcepoint108.fodt @@ -0,0 +1,67 @@ + + + + ms 2015-08-24T21:49:45.305718699LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ms + 2015-09-10T15:36:00 + + foo + + + diff --git a/sw/qa/extras/odfimport/data/hello.odt b/sw/qa/extras/odfimport/data/hello.odt new file mode 100644 index 000000000..23ce6a4db Binary files /dev/null and b/sw/qa/extras/odfimport/data/hello.odt differ diff --git a/sw/qa/extras/odfimport/data/i61225.sxw b/sw/qa/extras/odfimport/data/i61225.sxw new file mode 100644 index 000000000..4f4354199 Binary files /dev/null and b/sw/qa/extras/odfimport/data/i61225.sxw differ diff --git a/sw/qa/extras/odfimport/data/ooo32780-1.odt b/sw/qa/extras/odfimport/data/ooo32780-1.odt new file mode 100644 index 000000000..e7185b669 Binary files /dev/null and b/sw/qa/extras/odfimport/data/ooo32780-1.odt differ diff --git a/sw/qa/extras/odfimport/data/ooo77837-1.odt b/sw/qa/extras/odfimport/data/ooo77837-1.odt new file mode 100644 index 000000000..7be4f2b3e Binary files /dev/null and b/sw/qa/extras/odfimport/data/ooo77837-1.odt differ diff --git a/sw/qa/extras/odfimport/data/paste-first-para-direct-format.odt b/sw/qa/extras/odfimport/data/paste-first-para-direct-format.odt new file mode 100644 index 000000000..866d29c5f Binary files /dev/null and b/sw/qa/extras/odfimport/data/paste-first-para-direct-format.odt differ diff --git a/sw/qa/extras/odfimport/data/space.odt b/sw/qa/extras/odfimport/data/space.odt new file mode 100644 index 000000000..66b5109ef Binary files /dev/null and b/sw/qa/extras/odfimport/data/space.odt differ diff --git a/sw/qa/extras/odfimport/data/spellmenu-redline.odt b/sw/qa/extras/odfimport/data/spellmenu-redline.odt new file mode 100644 index 000000000..268d15c2c Binary files /dev/null and b/sw/qa/extras/odfimport/data/spellmenu-redline.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf100033_1.odt b/sw/qa/extras/odfimport/data/tdf100033_1.odt new file mode 100644 index 000000000..b7f3ae7aa Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf100033_1.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf100033_2.odt b/sw/qa/extras/odfimport/data/tdf100033_2.odt new file mode 100644 index 000000000..98ae7bd6b Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf100033_2.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf101729.odt b/sw/qa/extras/odfimport/data/tdf101729.odt new file mode 100644 index 000000000..3afd2d001 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf101729.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf103025.odt b/sw/qa/extras/odfimport/data/tdf103025.odt new file mode 100644 index 000000000..bd1e57314 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf103025.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf107392.odt b/sw/qa/extras/odfimport/data/tdf107392.odt new file mode 100644 index 000000000..c8a05a9ee Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf107392.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf107776.fodt b/sw/qa/extras/odfimport/data/tdf107776.fodt new file mode 100644 index 000000000..b59f12617 --- /dev/null +++ b/sw/qa/extras/odfimport/data/tdf107776.fodt @@ -0,0 +1,29 @@ + + + + + + + + + + + Simple content. + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/odfimport/data/tdf108482.odt b/sw/qa/extras/odfimport/data/tdf108482.odt new file mode 100644 index 000000000..c3ce2fc42 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf108482.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf109080_loext_ns.odt b/sw/qa/extras/odfimport/data/tdf109080_loext_ns.odt new file mode 100644 index 000000000..ac7b3e272 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf109080_loext_ns.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf109080_style_ns.odt b/sw/qa/extras/odfimport/data/tdf109080_style_ns.odt new file mode 100644 index 000000000..ada290dc5 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf109080_style_ns.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf109228.odt b/sw/qa/extras/odfimport/data/tdf109228.odt new file mode 100644 index 000000000..0f3368e1b Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf109228.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf113289.odt b/sw/qa/extras/odfimport/data/tdf113289.odt new file mode 100644 index 000000000..01aa5700c Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf113289.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf115079.odt b/sw/qa/extras/odfimport/data/tdf115079.odt new file mode 100644 index 000000000..6c1039e71 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf115079.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf116195.odt b/sw/qa/extras/odfimport/data/tdf116195.odt new file mode 100644 index 000000000..21a601f69 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf116195.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf120677.fodt b/sw/qa/extras/odfimport/data/tdf120677.fodt new file mode 100644 index 000000000..b2006828f --- /dev/null +++ b/sw/qa/extras/odfimport/data/tdf120677.fodt @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/sw/qa/extras/odfimport/data/tdf123829.odt b/sw/qa/extras/odfimport/data/tdf123829.odt new file mode 100644 index 000000000..3219b4156 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf123829.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf123968.odt b/sw/qa/extras/odfimport/data/tdf123968.odt new file mode 100644 index 000000000..1c081619e Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf123968.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf128737.odt b/sw/qa/extras/odfimport/data/tdf128737.odt new file mode 100644 index 000000000..85f2c32c6 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf128737.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf133459.odt b/sw/qa/extras/odfimport/data/tdf133459.odt new file mode 100644 index 000000000..9468d7918 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf133459.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf134971a.odt b/sw/qa/extras/odfimport/data/tdf134971a.odt new file mode 100644 index 000000000..ee9fa6823 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf134971a.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf134971b.odt b/sw/qa/extras/odfimport/data/tdf134971b.odt new file mode 100644 index 000000000..9bfadda69 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf134971b.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf138879.odt b/sw/qa/extras/odfimport/data/tdf138879.odt new file mode 100644 index 000000000..801fe32a2 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf138879.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf146257.odt b/sw/qa/extras/odfimport/data/tdf146257.odt new file mode 100644 index 000000000..2431fc0a8 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf146257.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf146597.odt b/sw/qa/extras/odfimport/data/tdf146597.odt new file mode 100644 index 000000000..6dcc379ce Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf146597.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf149978.fodt b/sw/qa/extras/odfimport/data/tdf149978.fodt new file mode 100644 index 000000000..5c4840c25 --- /dev/null +++ b/sw/qa/extras/odfimport/data/tdf149978.fodt @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foo bar baz + foo bar baz + foo bar baz + foo bar baz + foo bar baz + foo bar baz + foo bar baz + foo bar baz + foo bar baz + foo bar baz + + + + diff --git a/sw/qa/extras/odfimport/data/tdf41542_borderlessPadding.odt b/sw/qa/extras/odfimport/data/tdf41542_borderlessPadding.odt new file mode 100644 index 000000000..9585041de Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf41542_borderlessPadding.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf74524.odt b/sw/qa/extras/odfimport/data/tdf74524.odt new file mode 100644 index 000000000..df6f2e8fe Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf74524.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf75221.odt b/sw/qa/extras/odfimport/data/tdf75221.odt new file mode 100644 index 000000000..6ef117c24 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf75221.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf76322_columnBreakInHeader.docx b/sw/qa/extras/odfimport/data/tdf76322_columnBreakInHeader.docx new file mode 100644 index 000000000..6c050ae80 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf76322_columnBreakInHeader.docx differ diff --git a/sw/qa/extras/odfimport/data/tdf76349_1columnBreak.odt b/sw/qa/extras/odfimport/data/tdf76349_1columnBreak.odt new file mode 100644 index 000000000..0ec406052 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf76349_1columnBreak.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf89802.fodt b/sw/qa/extras/odfimport/data/tdf89802.fodt new file mode 100644 index 000000000..3d8601b5a --- /dev/null +++ b/sw/qa/extras/odfimport/data/tdf89802.fodt @@ -0,0 +1,56 @@ + + + + ms 2015-04-07T22:24:25.3740120802015-04-07T22:25:28.460806924ms PT1M3S1LibreOfficeDev/4.5.0.0.alpha0$Linux_X86_64 LibreOffice_project/52ae345470d8fa657817cf87b3e8e8c1b51bd7da + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foo + + + + + diff --git a/sw/qa/extras/odfimport/data/tdf92586.odt b/sw/qa/extras/odfimport/data/tdf92586.odt new file mode 100644 index 000000000..894571b62 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf92586.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf94882.odt b/sw/qa/extras/odfimport/data/tdf94882.odt new file mode 100644 index 000000000..2aacb9836 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf94882.odt differ diff --git a/sw/qa/extras/odfimport/data/tdf96113.odt b/sw/qa/extras/odfimport/data/tdf96113.odt new file mode 100644 index 000000000..ede7b0781 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf96113.odt differ diff --git a/sw/qa/extras/odfimport/data/timeFormFormats.odt b/sw/qa/extras/odfimport/data/timeFormFormats.odt new file mode 100644 index 000000000..9b39aec57 Binary files /dev/null and b/sw/qa/extras/odfimport/data/timeFormFormats.odt differ diff --git a/sw/qa/extras/odfimport/data/vmerge-cell-border.odt b/sw/qa/extras/odfimport/data/vmerge-cell-border.odt new file mode 100644 index 000000000..bf387bcb1 Binary files /dev/null and b/sw/qa/extras/odfimport/data/vmerge-cell-border.odt differ diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx new file mode 100644 index 000000000..c25ff3409 --- /dev/null +++ b/sw/qa/extras/odfimport/odfimport.cxx @@ -0,0 +1,1355 @@ +/* -*- 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 + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef std::map > AllBordersMap; +typedef std::pair > StringSequencePair; + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/odfimport/data/"; + +class Test : public SwModelTestBase +{ + public: + Test() : SwModelTestBase(DATA_DIRECTORY, "writer8") {} +}; + +CPPUNIT_TEST_FIXTURE(Test, testEmptySvgFamilyName) +{ + load(mpTestDocumentPath, "empty-svg-family-name.odt"); + // .odt import did crash on the empty font list (which I think is valid according SVG spec) +} + +CPPUNIT_TEST_FIXTURE(Test, testHideAllSections) +{ + load(mpTestDocumentPath, "fdo53210.odt"); + // This document has a section that is conditionally hidden, but has no empty paragraph after it. + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xMasters = xTextFieldsSupplier->getTextFieldMasters(); + // Set _CS_Allgemein to 0 + uno::Reference xMaster(xMasters->getByName("com.sun.star.text.fieldmaster.User._CS_Allgemein"), uno::UNO_QUERY); + xMaster->setPropertyValue("Content", uno::Any(OUString("0"))); + // This used to crash + uno::Reference(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY_THROW)->refresh(); +} + +CPPUNIT_TEST_FIXTURE(Test, testOdtBorders) +{ + load(mpTestDocumentPath, "borders_ooo33.odt"); + AllBordersMap map; + + map.insert(StringSequencePair(OUString("B2"), { table::BorderLine(0, 2, 2, 35), // left + table::BorderLine(0, 2, 2, 35), // right + table::BorderLine(0, 2, 2, 35), // top + table::BorderLine(0, 2, 2, 35) })); // bottom + + map.insert(StringSequencePair(OUString("D2"), { table::BorderLine(0, 0, 2, 0), + table::BorderLine(0, 0, 2, 0), + table::BorderLine(0, 0, 2, 0), + table::BorderLine(0, 0, 2, 0) })); + + map.insert(StringSequencePair(OUString("B4"), { table::BorderLine(0, 2, 2, 88), + table::BorderLine(0, 2, 2, 88), + table::BorderLine(0, 2, 2, 88), + table::BorderLine(0, 2, 2, 88) })); + + map.insert(StringSequencePair(OUString("D4"), { table::BorderLine(0, 0, 18, 0), + table::BorderLine(0, 0, 18, 0), + table::BorderLine(0, 0, 18, 0), + table::BorderLine(0, 0, 18, 0) })); + + map.insert(StringSequencePair(OUString("B6"), { table::BorderLine(0, 35, 35, 35), + table::BorderLine(0, 35, 35, 35), + table::BorderLine(0, 35, 35, 35), + table::BorderLine(0, 35, 35, 35) })); + + map.insert(StringSequencePair(OUString("D6"), { table::BorderLine(0, 0, 35, 0), + table::BorderLine(0, 0, 35, 0), + table::BorderLine(0, 0, 35, 0), + table::BorderLine(0, 0, 35, 0) })); + + map.insert(StringSequencePair(OUString("B8"), { table::BorderLine(0, 88, 88, 88), + table::BorderLine(0, 88, 88, 88), + table::BorderLine(0, 88, 88, 88), + table::BorderLine(0, 88, 88, 88) })); + + map.insert(StringSequencePair(OUString("D8"), { table::BorderLine(0, 0, 88, 0), + table::BorderLine(0, 0, 88, 0), + table::BorderLine(0, 0, 88, 0), + table::BorderLine(0, 0, 88, 0) })); + + map.insert(StringSequencePair(OUString("B10"), { table::BorderLine(0, 2, 35, 88), + table::BorderLine(0, 2, 35, 88), + table::BorderLine(0, 2, 35, 88), + table::BorderLine(0, 2, 35, 88) })); + + map.insert(StringSequencePair(OUString("D10"), { table::BorderLine(0, 0, 141, 0), + table::BorderLine(0, 0, 141, 0), + table::BorderLine(0, 0, 141, 0), + table::BorderLine(0, 0, 141, 0) })); + + map.insert(StringSequencePair(OUString("B12"), { table::BorderLine(0, 2, 88, 88), + table::BorderLine(0, 2, 88, 88), + table::BorderLine(0, 2, 88, 88), + table::BorderLine(0, 2, 88, 88) })); + + map.insert(StringSequencePair(OUString("D12"), { table::BorderLine(0, 0, 176, 0), + table::BorderLine(0, 0, 176, 0), + table::BorderLine(0, 0, 176, 0), + table::BorderLine(0, 0, 176, 0) })); + + map.insert(StringSequencePair(OUString("B14"), { table::BorderLine(0, 2, 141, 88), + table::BorderLine(0, 2, 141, 88), + table::BorderLine(0, 2, 141, 88), + table::BorderLine(0, 2, 141, 88) })); + + map.insert(StringSequencePair(OUString("B16"), { table::BorderLine(0, 35, 88, 88), + table::BorderLine(0, 35, 88, 88), + table::BorderLine(0, 35, 88, 88), + table::BorderLine(0, 35, 88, 88) })); + + map.insert(StringSequencePair(OUString("B18"), { table::BorderLine(0, 88, 35, 35), + table::BorderLine(0, 88, 35, 35), + table::BorderLine(0, 88, 35, 35), + table::BorderLine(0, 88, 35, 35) })); + + map.insert(StringSequencePair(OUString("B20"), { table::BorderLine(0, 88, 141, 88), + table::BorderLine(0, 88, 141, 88), + table::BorderLine(0, 88, 141, 88), + table::BorderLine(0, 88, 141, 88) })); + + map.insert(StringSequencePair(OUString("B22"), { table::BorderLine(0, 141, 88, 88), + table::BorderLine(0, 141, 88, 88), + table::BorderLine(0, 141, 88, 88), + table::BorderLine(0, 141, 88, 88) })); + + uno::Reference textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(textDocument->getText(), uno::UNO_QUERY); + // list of paragraphs + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + do + { + uno::Reference xServiceInfo; + if (xParaEnum->nextElement() >>= xServiceInfo) + { + if (xServiceInfo->supportsService("com.sun.star.text.TextTable")) + { + uno::Reference const xTextTable(xServiceInfo, uno::UNO_QUERY_THROW); + uno::Sequence const cells = xTextTable->getCellNames(); + sal_Int32 nLength = cells.getLength(); + + AllBordersMap::iterator it = map.begin(); + + for (sal_Int32 i = 0; i < nLength; ++i) + { + if(i%10==6 || (i%10==8 && i<60)) // only B and D cells have borders, every 2 rows + { + uno::Reference xCell = xTextTable->getCellByName(cells[i]); + uno::Reference< beans::XPropertySet > xPropSet(xCell, uno::UNO_QUERY_THROW); + it = map.find(cells[i]); + + uno::Any aLeftBorder = xPropSet->getPropertyValue("LeftBorder"); + table::BorderLine aLeftBorderLine; + if (aLeftBorder >>= aLeftBorderLine) + { + sal_Int32 innerLineWidth = aLeftBorderLine.InnerLineWidth; + sal_Int32 outerLineWidth = aLeftBorderLine.OuterLineWidth; + sal_Int32 lineDistance = aLeftBorderLine.LineDistance; + + sal_Int32 perfectInner = it->second[0].InnerLineWidth; + sal_Int32 perfectOuter = it->second[0].OuterLineWidth; + sal_Int32 perfectDistance = it->second[0].LineDistance; + CPPUNIT_ASSERT_EQUAL(perfectInner, innerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectOuter, outerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectDistance, lineDistance); + } + + uno::Any aRightBorder = xPropSet->getPropertyValue("RightBorder"); + table::BorderLine aRightBorderLine; + if (aRightBorder >>= aRightBorderLine) + { + sal_Int32 innerLineWidth = aRightBorderLine.InnerLineWidth; + sal_Int32 outerLineWidth = aRightBorderLine.OuterLineWidth; + sal_Int32 lineDistance = aRightBorderLine.LineDistance; + + sal_Int32 perfectInner = it->second[1].InnerLineWidth; + sal_Int32 perfectOuter = it->second[1].OuterLineWidth; + sal_Int32 perfectDistance = it->second[1].LineDistance; + CPPUNIT_ASSERT_EQUAL(perfectInner, innerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectOuter, outerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectDistance, lineDistance); + } + + uno::Any aTopBorder = xPropSet->getPropertyValue("TopBorder"); + table::BorderLine aTopBorderLine; + if (aTopBorder >>= aTopBorderLine) + { + sal_Int32 innerLineWidth = aTopBorderLine.InnerLineWidth; + sal_Int32 outerLineWidth = aTopBorderLine.OuterLineWidth; + sal_Int32 lineDistance = aTopBorderLine.LineDistance; + + sal_Int32 perfectInner = it->second[2].InnerLineWidth; + sal_Int32 perfectOuter = it->second[2].OuterLineWidth; + sal_Int32 perfectDistance = it->second[2].LineDistance; + CPPUNIT_ASSERT_EQUAL(perfectInner, innerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectOuter, outerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectDistance, lineDistance); + } + + uno::Any aBottomBorder = xPropSet->getPropertyValue("BottomBorder"); + table::BorderLine aBottomBorderLine; + if (aBottomBorder >>= aBottomBorderLine) + { + sal_Int32 innerLineWidth = aBottomBorderLine.InnerLineWidth; + sal_Int32 outerLineWidth = aBottomBorderLine.OuterLineWidth; + sal_Int32 lineDistance = aBottomBorderLine.LineDistance; + + sal_Int32 perfectInner = it->second[3].InnerLineWidth; + sal_Int32 perfectOuter = it->second[3].OuterLineWidth; + sal_Int32 perfectDistance = it->second[3].LineDistance; + CPPUNIT_ASSERT_EQUAL(perfectInner, innerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectOuter, outerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectDistance, lineDistance); + } + } + } //end of the 'for' loop + } + } + } while(xParaEnum->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf41542_borderlessPadding) +{ + load(mpTestDocumentPath, "tdf41542_borderlessPadding.odt"); + // the page style's borderless padding should force this to 3 pages, not 1 + CPPUNIT_ASSERT_EQUAL( 3, getPages() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageStyleLayoutDefault) +{ + load(mpTestDocumentPath, "hello.odt"); + uno::Reference xPropertySet(getStyles("PageStyles")->getByName("Default Page Style"), uno::UNO_QUERY); + // This was style::PageStyleLayout_MIRRORED. + CPPUNIT_ASSERT_EQUAL(style::PageStyleLayout_ALL, getProperty(xPropertySet, "PageStyleLayout")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTimeFormFormats) +{ + load(mpTestDocumentPath, "timeFormFormats.odt"); + //FIXME: make it an ODFEXPORT_TEST. Validator fails with + //attribute "form:current-value" has a bad value: "PT12H12M" does not satisfy the "time" type + //See tdf#131127 + + uno::Reference const xModel(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(xModel.is()); + uno::Reference const xDPS(xModel, uno::UNO_QUERY); + uno::Reference const xDP = xDPS->getDrawPage(); + CPPUNIT_ASSERT(xDP.is()); + uno::Reference const xFS(xDP, uno::UNO_QUERY); + CPPUNIT_ASSERT(xFS.is()); + uno::Reference const xForms(xFS->getForms(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xForms.is()); + uno::Reference xForm(xForms->getByIndex(0), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT(xForm.is()); + uno::Reference xFormNC(xForm, uno::UNO_QUERY); + + uno::Any aAny; + uno::Reference xControlModel; + uno::Reference xController; + uno::Reference xControl; + uno::Reference xWindowPeer; + uno::Reference xTextComponent; + OUString aName = "Time Field "; + + static const char* const aExpectedResults[] = { "12:12", "12:12:00", "12:12PM", "06:00:00AM"}; + + for (size_t i = 1; i <= 4; ++i) + { + aAny = xFormNC->getByName(aName + OUString::number(i)); + xControlModel.set(aAny, uno::UNO_QUERY); + xController.set(xModel->getCurrentController(), uno::UNO_QUERY_THROW); + xControl = xController->getControl(xControlModel); + xWindowPeer = xControl->getPeer(); + xTextComponent.set(xWindowPeer, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString::fromUtf8(aExpectedResults[i - 1]), xTextComponent->getText()); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testDateFormFormats) +{ + load(mpTestDocumentPath, "dateFormFormats.odt"); + //FIXME: make it an ODFEXPORT_TEST. Validator fails with + //unexpected attribute "form:input-required" + //See tdf#131148 + + uno::Reference const xModel(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(xModel.is()); + uno::Reference const xDPS(xModel, uno::UNO_QUERY); + uno::Reference const xDP = xDPS->getDrawPage(); + CPPUNIT_ASSERT(xDP.is()); + uno::Reference const xFS(xDP, uno::UNO_QUERY); + CPPUNIT_ASSERT(xFS.is()); + uno::Reference const xForms(xFS->getForms(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xForms.is()); + uno::Reference xForm(xForms->getByIndex(0), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT(xForm.is()); + uno::Reference xFormNC(xForm, uno::UNO_QUERY); + + uno::Any aAny; + uno::Reference xControlModel; + uno::Reference xController; + uno::Reference xControl; + uno::Reference xWindowPeer; + uno::Reference xTextComponent; + OUString aName = "Date Field "; + + static const char* const aExpectedResults[] = { "03/04/20", "03/04/20", "03/04/2020", + "Wednesday, March 4, 2020", "04/03/20", "03/04/20", "20/03/04", "04/03/2020", "03/04/2020", + "2020/03/04", "20-03-04", "2020-03-04"}; + + for (size_t i = 1; i <= 12; ++i) + { + aAny = xFormNC->getByName(aName + OUString::number(i)); + xControlModel.set(aAny, uno::UNO_QUERY); + xController.set(xModel->getCurrentController(), uno::UNO_QUERY_THROW); + xControl = xController->getControl(xControlModel); + xWindowPeer = xControl->getPeer(); + xTextComponent.set(xWindowPeer, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString::fromUtf8(aExpectedResults[i - 1]), xTextComponent->getText()); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf149978) +{ + load(mpTestDocumentPath, "tdf149978.fodt"); + // on Linux the bug only reproduces if a document has been loaded previously + load(mpTestDocumentPath, "tdf149978.fodt"); + // this was nondeterministic so try 10 times + for (int i = 1; i <= 10; ++i) + { + CPPUNIT_ASSERT_EQUAL(COL_WHITE, getProperty(getRun(getParagraph(i), 2, "bar"), "CharBackColor")); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf64038) +{ + load(mpTestDocumentPath, "space.odt"); + // no space + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(4), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(4), 2)->getString()); + // one space + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(6), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(6), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(7), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(7), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(7), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(8), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" b"), getRun(getParagraph(8), 2)->getString()); + // two spaces + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(10), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(10), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(10), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(11), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(11), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(12), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(12), 2)->getString()); + // three spaces + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(14), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(14), 2)->getString()); + // no space + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(17), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(17), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(17), 3)->getString()); + // one space + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(19), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(19), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(19), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(20), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(20), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(20), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(21), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(21), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(21), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(22), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(22), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" b"), getRun(getParagraph(22), 3)->getString()); + // two spaces + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(24), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(24), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(24), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(25), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(25), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(25), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(26), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(26), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" b"), getRun(getParagraph(26), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(27), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(27), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(27), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(28), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(28), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" b"), getRun(getParagraph(28), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(29), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(29), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(29), 3)->getString()); + // three spaces + CPPUNIT_ASSERT_EQUAL(OUString("a"), getRun(getParagraph(31), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(31), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(31), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(32), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(32), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(32), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(33), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(33), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" b"), getRun(getParagraph(33), 3)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(34), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(34), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(34), 3)->getString()); + // four spaces + CPPUNIT_ASSERT_EQUAL(OUString("a "), getRun(getParagraph(36), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(36), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("b"), getRun(getParagraph(36), 3)->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf74524) +{ + load(mpTestDocumentPath, "tdf74524.odt"); + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Any aField1 = xFields->nextElement(); + uno::Reference xServiceInfo1(aField1, uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo1->supportsService("com.sun.star.text.textfield.PageNumber")); + uno::Reference xPropertySet(aField1, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int16(style::NumberingType::PAGE_DESCRIPTOR)), xPropertySet->getPropertyValue("NumberingType")); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int16(0)), xPropertySet->getPropertyValue("Offset")); + CPPUNIT_ASSERT_EQUAL(uno::Any(text::PageNumberType_CURRENT), xPropertySet->getPropertyValue("SubType")); + uno::Reference xField1(aField1, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xField1->getAnchor()->getString()); + uno::Any aField2 = xFields->nextElement(); + uno::Reference xServiceInfo2(aField2, uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo2->supportsService("com.sun.star.text.textfield.Annotation")); + uno::Reference xPropertySet2(aField2, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Comment 1")), xPropertySet2->getPropertyValue("Content")); + uno::Reference xField2(aField2, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Hello 1World"), xField2->getAnchor()->getString()); + CPPUNIT_ASSERT(!xFields->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageStyleLayoutRight) +{ + load(mpTestDocumentPath, "hello.odt"); + uno::Reference xPropertySet(getStyles("PageStyles")->getByName("Default Page Style"), uno::UNO_QUERY); + // This caused a crash. + xPropertySet->setPropertyValue("PageStyleLayout", uno::Any(style::PageStyleLayout_RIGHT)); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo61952) +{ + load(mpTestDocumentPath, "hello.odt"); + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + xPara->setPropertyValue("PageDescName", uno::Any(OUString("Left Page"))); + xPara->setPropertyValue("PageDescName", uno::Any(OUString("Right Page"))); + xPara->setPropertyValue("PageDescName", uno::Any(OUString("Left Page"))); + xPara->setPropertyValue("PageDescName", uno::Any(OUString("Right Page"))); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo60842) +{ + load(mpTestDocumentPath, "fdo60842.odt"); + uno::Reference const xTable(getParagraphOrTable(1)); + getCell(xTable, "A1", ""); + getCell(xTable, "B1", "18/02/2012"); + getCell(xTable, "C1", "USD"); // this is the cell with office:string-value + getCell(xTable, "D1", ""); + getCell(xTable, "E1", "01/04/2012"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo79269) +{ + load(mpTestDocumentPath, "fdo79269.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + + // The problem was that the first-footer was shared. + uno::Reference xPropSet(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xPropSet, "FirstIsShared")); + + uno::Reference xFooter1 = getProperty< uno::Reference >(xPropSet, "FooterTextFirst"); + CPPUNIT_ASSERT_EQUAL(OUString("first"), xFooter1->getString()); + uno::Reference xFooter = getProperty< uno::Reference >(xPropSet, "FooterText"); + CPPUNIT_ASSERT_EQUAL(OUString("second"), xFooter->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo79269_header) +{ + load(mpTestDocumentPath, "fdo79269_header.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + + uno::Reference xPropSet(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xPropSet, "FirstIsShared")); + + uno::Reference xFooter1 = getProperty< uno::Reference >(xPropSet, "HeaderTextFirst"); + CPPUNIT_ASSERT_EQUAL(OUString("first"), xFooter1->getString()); + uno::Reference xFooter = getProperty< uno::Reference >(xPropSet, "HeaderText"); + CPPUNIT_ASSERT_EQUAL(OUString("second"), xFooter->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageBackground) +{ + load(mpTestDocumentPath, "PageBackground.odt"); + uno::Reference xPropertySet(getStyles("PageStyles")->getByName("Default Page Style"), uno::UNO_QUERY); + // The background image was lost + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xPropertySet, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xPropertySet, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty(xPropertySet, "FillBitmapMode")); + + uno::Reference xPropertySetOld(getStyles("PageStyles")->getByName("OldStandard"), uno::UNO_QUERY); + // The background image was overridden by color + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xPropertySetOld, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xPropertySetOld, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty(xPropertySetOld, "FillBitmapMode")); +} + +CPPUNIT_TEST_FIXTURE(Test, testBibliographyEntryField) +{ + load(mpTestDocumentPath, "BibliographyEntryField.odt"); + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + if( !xFields->hasMoreElements() ) { + CPPUNIT_ASSERT(false); + return; + } + + uno::Reference xEnumerationAccess(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Bibliography entry"), xEnumerationAccess->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("[ABC]"), xEnumerationAccess->getPresentation(false).trim()); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo56272) +{ + load(mpTestDocumentPath, "fdo56272.odt"); + uno::Reference xShape = getShape(1); + // Vertical position was incorrect. + CPPUNIT_ASSERT_EQUAL(sal_Int32(422), xShape->getPosition().Y); // Was -2371 +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128737) +{ + load(mpTestDocumentPath, "tdf128737.odt"); + // Without the fix in place, this test would have crashed + CPPUNIT_ASSERT_EQUAL(4, getPages()); + CPPUNIT_ASSERT_EQUAL(8, getShapes()); +} + +CPPUNIT_TEST_FIXTURE(Test, testCalcFootnoteContent) +{ + load(mpTestDocumentPath, "ooo32780-1.odt"); + //this was a CalcFootnoteContent crash +} + +CPPUNIT_TEST_FIXTURE(Test, testMoveSubTree) +{ + load(mpTestDocumentPath, "ooo77837-1.odt"); + //this was a MoveSubTree crash +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo75872_ooo33) +{ + load(mpTestDocumentPath, "fdo75872_ooo33.odt"); + // graphics default style: line color and fill color changed + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, + getProperty(xShape, "LineColor")); + CPPUNIT_ASSERT_EQUAL(Color(0x99ccff), + getProperty(xShape, "FillColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo75872_aoo40) +{ + load(mpTestDocumentPath, "fdo75872_aoo40.odt"); + // graphics default style: line color and fill color changed + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT_EQUAL(Color(0x808080), + getProperty(xShape, "LineColor")); + CPPUNIT_ASSERT_EQUAL(Color(0xcfe7f5), + getProperty(xShape, "FillColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo55814) +{ + load(mpTestDocumentPath, "fdo55814.odt"); + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + xField->setPropertyValue("Content", uno::Any(OUString("Yes"))); + uno::Reference(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY_THROW)->refresh(); + uno::Reference xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + // This was "0". + CPPUNIT_ASSERT_EQUAL(OUString("Hide==\"Yes\""), getProperty(xSections->getByIndex(0), "Condition")); +} + +static void lcl_CheckShape( + uno::Reference const& xShape, OUString const& rExpected) +{ + uno::Reference const xNamed(xShape, uno::UNO_QUERY); + CPPUNIT_ASSERT(xNamed.is()); + CPPUNIT_ASSERT_EQUAL(rExpected, xNamed->getName()); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo68839) +{ + load(mpTestDocumentPath, "fdo68839.odt"); + CPPUNIT_ASSERT_EQUAL(4, getShapes()); + // check names + lcl_CheckShape(getShape(1), "FrameXXX"); + lcl_CheckShape(getShape(2), "ObjectXXX"); + lcl_CheckShape(getShape(3), "FrameY"); + lcl_CheckShape(getShape(4), "graphicsXXX"); + // check prev/next chain + uno::Reference xFrame1(getShape(1), uno::UNO_QUERY); + uno::Reference xFrame2(getShape(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(), + getProperty(xFrame1, "ChainPrevName")); + CPPUNIT_ASSERT_EQUAL(OUString("FrameY"), + getProperty(xFrame1, "ChainNextName")); + CPPUNIT_ASSERT_EQUAL(OUString("FrameXXX"), + getProperty(xFrame2, "ChainPrevName")); + CPPUNIT_ASSERT_EQUAL(OUString(), + getProperty(xFrame2, "ChainNextName")); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo82165) +{ + load(mpTestDocumentPath, "fdo82165.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + // there was a duplicate shape in the left header + lcl_CheckShape(getShape(1), "Picture 9"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf89802) +{ + load(mpTestDocumentPath, "tdf89802.fodt"); + // the text frame was dropped during import + uno::Reference const xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference const xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount()); + uno::Reference const xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(ColorTransparency, 0x3f004586), getProperty(xFrame, "BackColor")); + +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo37606) +{ + load(mpTestDocumentPath, "fdo37606.odt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwShellCursor* pShellCursor = pWrtShell->getShellCursor(false); + + { + pWrtShell->SelAll(); // Selects A1. + SwTextNode& rCellEnd = dynamic_cast(pShellCursor->End()->nNode.GetNode()); + // fdo#72486 This was "Hello.", i.e. a single select-all selected the whole document, not just the cell only. + CPPUNIT_ASSERT_EQUAL(OUString("A1"), rCellEnd.GetText()); + + pWrtShell->SelAll(); // Selects the whole table. + pWrtShell->SelAll(); // Selects the whole document. + SwTextNode& rStart = dynamic_cast(pShellCursor->Start()->nNode.GetNode()); + CPPUNIT_ASSERT_EQUAL(OUString("A1"), rStart.GetText()); + + SwTextNode& rEnd = dynamic_cast(pShellCursor->End()->nNode.GetNode()); + // This was "A1", i.e. Ctrl-A only selected the A1 cell of the table, not the whole document. + CPPUNIT_ASSERT_EQUAL(OUString("Hello."), rEnd.GetText()); + } + + { + pWrtShell->SttEndDoc(false); // Go to the end of the doc. + pWrtShell->SelAll(); // And now that we're outside of the table, try Ctrl-A again. + SwTextNode& rStart = dynamic_cast(pShellCursor->Start()->nNode.GetNode()); + // This was "Hello", i.e. Ctrl-A did not select the starting table. + CPPUNIT_ASSERT_EQUAL(OUString("A1"), rStart.GetText()); + + SwTextNode& rEnd = dynamic_cast(pShellCursor->End()->nNode.GetNode()); + CPPUNIT_ASSERT_EQUAL(OUString("Hello."), rEnd.GetText()); + } + + { + pWrtShell->Delete(); // Delete the selection + // And make sure the table got deleted as well. + SwNodes& rNodes = pWrtShell->GetDoc()->GetNodes(); + SwNodeIndex nNode(rNodes.GetEndOfExtras()); + SwContentNode* pContentNode = rNodes.GoNext(&nNode); + // First content node was in a table -> table wasn't deleted. + CPPUNIT_ASSERT(!pContentNode->FindTableNode()); + } +} + +#if HAVE_FEATURE_UI +CPPUNIT_TEST_FIXTURE(Test, testFdo37606Copy) +{ + load(mpTestDocumentPath, "fdo37606.odt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + // Ctrl-A + pWrtShell->SelAll(); // Selects A1. + pWrtShell->SelAll(); // Selects the whole table. + pWrtShell->SelAll(); // Selects the whole document. + + // Ctrl-C + rtl::Reference xTransferable(new SwTransferable(*pWrtShell)); + xTransferable->Copy(); + + pWrtShell->SttEndDoc(false); // Go to the end of the doc. + + // Ctrl-V + TransferableDataHelper aDataHelper(TransferableDataHelper::CreateFromSystemClipboard(&pWrtShell->GetView().GetEditWin())); + SwTransferable::Paste( *pWrtShell, aDataHelper ); + + // Previously copy&paste failed to copy the table in case it was the document-starting one. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTables->getCount()); +} +#endif + +CPPUNIT_TEST_FIXTURE(Test, testFdo69862) +{ + load(mpTestDocumentPath, "fdo69862.odt"); + // The test doc is special in that it starts with a table and it also has a footnote. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwShellCursor* pShellCursor = pWrtShell->getShellCursor(false); + + pWrtShell->SelAll(); // Selects A1. + pWrtShell->SelAll(); // Selects the whole table. + pWrtShell->SelAll(); // Selects the whole document. + SwTextNode& rStart = dynamic_cast(pShellCursor->Start()->nNode.GetNode()); + // This was "Footnote.", as Ctrl-A also selected footnotes, but it should not. + CPPUNIT_ASSERT_EQUAL(OUString("A1"), rStart.GetText()); + + SwTextNode& rEnd = dynamic_cast(pShellCursor->End()->nNode.GetNode()); + CPPUNIT_ASSERT_EQUAL(OUString("H" "\x01" "ello."), rEnd.GetText()); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo69979) +{ + load(mpTestDocumentPath, "fdo69979.odt"); + // The test doc is special in that it starts with a table and it also has a header. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwShellCursor* pShellCursor = pWrtShell->getShellCursor(false); + + pWrtShell->SelAll(); // Selects A1. + pWrtShell->SelAll(); // Selects the whole table. + pWrtShell->SelAll(); // Selects the whole document. + SwTextNode& rStart = dynamic_cast(pShellCursor->Start()->nNode.GetNode()); + // This was "", as Ctrl-A also selected headers, but it should not. + CPPUNIT_ASSERT_EQUAL(OUString("A1"), rStart.GetText()); + + SwTextNode& rEnd = dynamic_cast(pShellCursor->End()->nNode.GetNode()); + CPPUNIT_ASSERT_EQUAL(OUString("Hello."), rEnd.GetText()); +} + +CPPUNIT_TEST_FIXTURE(Test, testSpellmenuRedline) +{ + load(mpTestDocumentPath, "spellmenu-redline.odt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + uno::Reference xAlt; + SwSpellPopup aPopup(pWrtShell, xAlt, OUString()); + Menu& rMenu = aPopup.GetMenu(); + // Make sure that if we show the spellcheck popup menu (for the current + // document, which contains redlines), then the last two entries will be + // always 'go to next/previous change'. + CPPUNIT_ASSERT_EQUAL(OString("next"), rMenu.GetItemIdent(rMenu.GetItemId(rMenu.GetItemCount() - 2))); + CPPUNIT_ASSERT_EQUAL(OString("prev"), rMenu.GetItemIdent(rMenu.GetItemId(rMenu.GetItemCount() - 1))); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf107776) +{ + load(mpTestDocumentPath, "tdf107776.fodt"); + // Shape with a Graphics parent style name was imported as textbox. + CPPUNIT_ASSERT(!getProperty(getShape(1), "TextBox")); +} + +CPPUNIT_TEST_FIXTURE(Test, testAnnotationFormatting) +{ + load(mpTestDocumentPath, "annotation-formatting.odt"); + uno::Reference xTextField = getProperty< uno::Reference >(getRun(getParagraph(1), 1), "TextField"); + uno::Reference xText = getProperty< uno::Reference >(xTextField, "TextRange"); + // Make sure we test the right annotation. + uno::Reference xParagraph = getParagraphOfText(1, xText, "Looses: bold"); + // Formatting was lost: the second text portion was NORMAL, not BOLD. + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty(getRun(xParagraph, 2), "CharWeight")); +} + +CPPUNIT_TEST_FIXTURE(Test, fdo81223) +{ + load(mpTestDocumentPath, "fdo81223.odt"); + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, getProperty(xFrame, "BackColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, fdo90130_1) +{ + load(mpTestDocumentPath, "fdo90130-1.odt"); + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0xff3333), getProperty(xFrame, "BackColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, fdo90130_2) +{ + load(mpTestDocumentPath, "fdo90130-2.odt"); + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + sal_Int32 nValue(0); + xFrame->getPropertyValue("BackColorTransparency") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int32(50), nValue); +} + +CPPUNIT_TEST_FIXTURE(Test, testBnc800714) +{ + load(mpTestDocumentPath, "bnc800714.fodt"); + // Document's second paragraph wants to be together with the third one, but: + // - it's in a section with multiple columns + // - contains a single as-char anchored frame + // This was a layout loop. + CPPUNIT_ASSERT(getProperty< uno::Reference >(getParagraph(2), "TextSection").is()); + CPPUNIT_ASSERT(getProperty(getParagraph(2), "ParaKeepTogether")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf92586) +{ + load(mpTestDocumentPath, "tdf92586.odt"); + uno::Any aPageStyle = getStyles("PageStyles")->getByName("Standard"); + // This was BitmapMode_NO_REPEAT. + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_STRETCH, getProperty(aPageStyle, "FillBitmapMode")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf103025) +{ + load(mpTestDocumentPath, "tdf103025.odt"); + CPPUNIT_ASSERT_EQUAL(OUString("2014-01"), parseDump("/root/page[1]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("2014-01"), parseDump("/root/page[2]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("2014-02"), parseDump("/root/page[3]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("2014-03"), parseDump("/root/page[4]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("2014-03"), parseDump("/root/page[5]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf76322_columnBreakInHeader) +{ + load(mpTestDocumentPath, "tdf76322_columnBreakInHeader.docx"); +// column breaks were ignored. First line should start in column 2 + CPPUNIT_ASSERT_EQUAL( OUString("Test1"), parseDump("/root/page[1]/header/section/column[2]/body/txt/text()") ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf76349_1columnBreak) +{ + load(mpTestDocumentPath, "tdf76349_1columnBreak.odt"); + //single-column breaks should only be treated as page breaks for MS formats - should be only one page here. + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf96113) +{ + load(mpTestDocumentPath, "tdf96113.odt"); + // Background of the formula frame was white (0xffffff), not green. + CPPUNIT_ASSERT_EQUAL(Color(0x00ff00), getProperty(getShape(1), "BackColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo47267) +{ + load(mpTestDocumentPath, "fdo47267-3.odt"); + // This was a Style Families getByName() crash +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf75221) +{ + load(mpTestDocumentPath, "tdf75221.odt"); + // When "Don't add space between paragraphs of the same style" setting set, + // spacing between same-style paragraphs must be equal to their line spacing. + // It used to be 0. + OUString top = parseDump("/root/page/body/txt[2]/infos/prtBounds", "top"); + CPPUNIT_ASSERT(top.toInt32() > 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf101729) +{ + load(mpTestDocumentPath, "tdf101729.odt"); + sal_Int32 l = parseDump("/root/page/body/tab/row/cell[1]/infos/bounds", "left").toInt32(); + sal_Int32 w = parseDump("/root/page/body/tab/row/cell[1]/infos/bounds", "width").toInt32(); + sal_Int32 x = parseDump("/root/page/body/tab/row/cell[1]/txt/infos/bounds", "left").toInt32(); + // Make sure the text does not go outside and verify it is centered roughly + CPPUNIT_ASSERT( l + w / 4 < x ); + CPPUNIT_ASSERT( x < l + 3 * w / 4); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf107392) +{ + load(mpTestDocumentPath, "tdf107392.odt"); + // Shapes from bottom to top were Frame, SVG, Bitmap, i.e. in the order as + // they appeared in the document, not according to their requested z-index, + // as sorting failed. + // So instead of 0, 1, 2 these were 2, 0, 1. + + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(getShapeByName(u"Bitmap"), "ZOrder")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty(getShapeByName(u"Frame"), "ZOrder")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), getProperty(getShapeByName(u"SVG"), "ZOrder")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf100033_1) +{ + load(mpTestDocumentPath, "tdf100033_1.odt"); + // Test document have three duplicated frames with the same name and position/size -> import one frame + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount()); +} + +CPPUNIT_TEST_FIXTURE(Test, testWordAsCharShape) +{ + load(mpTestDocumentPath, "Word2010AsCharShape.odt"); + // As-char shape had VertOrient "from-top"/NONE default from GetVOrient() + uno::Reference const xShape(getShape(1)); + CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AS_CHARACTER, getProperty(xShape, "AnchorType")); + CPPUNIT_ASSERT_EQUAL(text::VertOrientation::TOP, getProperty(xShape, "VertOrient")); + // also, the paragraph default fo:bottom-margin was wrongly applied to + // the shape + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xShape, "BottomMargin")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf100033_2) +{ + load(mpTestDocumentPath, "tdf100033_2.odt"); + // Test document have three different frames anchored to different paragraphs -> import all frames + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xIndexAccess->getCount()); +} + +CPPUNIT_TEST_FIXTURE(Test, testI61225) +{ + load(mpTestDocumentPath, "i61225.sxw"); + // Part of ooo61225-1.sxw from crashtesting. + + // This never returned. + calcLayout(); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf109080_loext_ns) +{ + load(mpTestDocumentPath, "tdf109080_loext_ns.odt"); + // Test we can import and + + CPPUNIT_ASSERT_EQUAL(OUString("This is the first page header"), + parseDump("/root/page[1]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("This is the non-first-page header"), + parseDump("/root/page[2]/header/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("This is the first page footer"), + parseDump("/root/page[1]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("This is the non-first-page footer"), + parseDump("/root/page[2]/footer/txt/text()")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf109080_style_ns) +{ + load(mpTestDocumentPath, "tdf109080_style_ns.odt"); + // Test we can import and + // (produced by LibreOffice 4.0 - 5.x) + + CPPUNIT_ASSERT_EQUAL(OUString("This is the first page header"), + parseDump("/root/page[1]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("This is the non-first-page header"), + parseDump("/root/page[2]/header/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("This is the first page footer"), + parseDump("/root/page[1]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("This is the non-first-page footer"), + parseDump("/root/page[2]/footer/txt/text()")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf109228) +{ + load(mpTestDocumentPath, "tdf109228.odt"); + // Embedded object with no frame name was imported incorrectly, it was anchored 'to character' instead of 'as character' + CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AS_CHARACTER, getProperty(getShape(1), "AnchorType")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf94882) +{ + load(mpTestDocumentPath, "tdf94882.odt"); + // Get the header of the page containing our content + // (done this way to skip past any blank page inserted before it + // due to the page number being even) + OUString headertext = parseDump( + "/root/page[starts-with(body/txt/text(),'The paragraph style on this')]" + "/header/txt/text()" + ); + // This header should be the first page header + CPPUNIT_ASSERT_EQUAL(OUString("This is the first page header"), headertext); +} + +CPPUNIT_TEST_FIXTURE(Test, testBlankBeforeFirstPage) +{ + load(mpTestDocumentPath, "tdf94882.odt"); + // This document starts on page 50, which is even, but it should not have a + // blank page inserted before it to make it a left page + + CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be 1 pages output", + OUString("1"), parseDump("count(/root/page)") + ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf115079) +{ + load(mpTestDocumentPath, "tdf115079.odt"); + // This document caused segfault when layouting +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf108482) +{ + load(mpTestDocumentPath, "tdf108482.odt"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("The table on second page must have two rows", + OUString("2"), parseDump("count(/root/page[2]/body/tab/row)") + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("The second page table's first row must be the repeated headline", + OUString("Header"), parseDump("/root/page[2]/body/tab/row[1]/cell/txt") + ); + // The first (repeated headline) row with vertical text orientation must have non-zero height + // (in my tests, it was 1135) + CPPUNIT_ASSERT_GREATER( + sal_Int32(1000), parseDump("/root/page[2]/body/tab/row[1]/infos/bounds", "height").toInt32() + ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf116195) +{ + load(mpTestDocumentPath, "tdf116195.odt"); + // The image was set to zero height due to a regression + CPPUNIT_ASSERT_EQUAL( + sal_Int32(12960), parseDump("/root/page/anchored/fly/notxt/infos/bounds", "height").toInt32() + ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf120677) +{ + load(mpTestDocumentPath, "tdf120677.fodt"); + // The document used to hang the layout, consuming memory until OOM +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf123829) +{ + load(mpTestDocumentPath, "tdf123829.odt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Compatibility: collapse cell paras should not be set", false, + pDoc->getIDocumentSettingAccess().get(DocumentSettingId::COLLAPSE_EMPTY_CELL_PARA)); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf113289) +{ + load(mpTestDocumentPath, "tdf113289.odt"); + uno::Any aPageStyle = getStyles("PageStyles")->getByName("Standard"); + CPPUNIT_ASSERT_EQUAL(static_cast(style::FootnoteLineStyle::SOLID), + getProperty(aPageStyle, "FootnoteLineStyle")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf123968) +{ + load(mpTestDocumentPath, "tdf123968.odt"); + // The test doc is special in that it starts with a table and it also has a header. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + SwShellCursor* pShellCursor = pWrtShell->getShellCursor(false); + + pWrtShell->SelAll(); + SwTextNode& rStart = dynamic_cast(pShellCursor->Start()->nNode.GetNode()); + + // The field is now editable like any text, thus the field content "New value" shows up for the cursor. + CPPUNIT_ASSERT_EQUAL(OUString("inputfield: " + OUStringChar(CH_TXT_ATR_INPUTFIELDSTART) + + "New value" + OUStringChar(CH_TXT_ATR_INPUTFIELDEND)), + rStart.GetText()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf133459) +{ + load(mpTestDocumentPath, "tdf133459.odt"); + // Test that the number format was correctly imported, and used by both fields. + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFields(xTextFieldsSupplier->getTextFields()->createEnumeration()); + + // First Field + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + const OUString sPresentation(xField->getPresentation(false)); + const sal_Int32 nFormat(getProperty(xField, "NumberFormat")); + CPPUNIT_ASSERT_EQUAL(sal_True, getProperty(xField, "IsFixedLanguage")); + + // Second field + xField.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sPresentation, xField->getPresentation(false)); + CPPUNIT_ASSERT_EQUAL(nFormat, getProperty(xField, "NumberFormat")); + CPPUNIT_ASSERT_EQUAL(sal_True, getProperty(xField, "IsFixedLanguage")); + + // Test the number format itself + uno::Reference xNumberFormatsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFormat(xNumberFormatsSupplier->getNumberFormats()->getByKey(nFormat)); + lang::Locale aLocale(getProperty(xFormat, "Locale")); + CPPUNIT_ASSERT_EQUAL(OUString("ru"), aLocale.Language); + CPPUNIT_ASSERT_EQUAL(OUString("RU"), aLocale.Country); + CPPUNIT_ASSERT_EQUAL(OUString("QQ YYYY"), getProperty(xFormat, "FormatString")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf134971) +{ + load(mpTestDocumentPath, "tdf134971a.odt"); + // now insert 2nd file somewhere - insertDocumentFromURL should + // _not_ touch pool defaults + uno::Sequence aPropertyValues = comphelper::InitPropertySequence( + { + {"Name", uno::Any( + m_directories.getURLFromSrc(mpTestDocumentPath) + "tdf134971b.odt")}, + {"Filter", uno::Any(OUString("writer8"))}, + }); + dispatchCommand(mxComponent, ".uno:InsertDoc", aPropertyValues); + + // tdf134971b re-defines default font as "Liberation Sans" - make sure this stays + // Arial in final doc: + OUString sString; + uno::Reference xParaStyles(getStyles("ParagraphStyles")); + uno::Reference xStyle1(xParaStyles->getByName( + "Standard"), uno::UNO_QUERY); + xStyle1->getPropertyValue("CharFontName") >>= sString; + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), sString); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf138879) +{ + // Create a new document. + mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument"); + + uno::Sequence aPropertyValues = comphelper::InitPropertySequence( + { + {"Name", uno::Any( + m_directories.getURLFromSrc(mpTestDocumentPath) + "tdf138879.odt")}, + {"Filter", uno::Any(OUString("writer8"))}, + }); + dispatchCommand(mxComponent, ".uno:InsertDoc", aPropertyValues); + + // Without the fix in place, this test would have failed with + // - Expected: Heading 1 + // - Actual : Standard + CPPUNIT_ASSERT_EQUAL(OUString("Heading 1"), + getProperty(getParagraph(1), "ParaStyleName")); +} + +CPPUNIT_TEST_FIXTURE(Test, testPasteFirstParaDirectFormat) +{ + // Create a new document. + mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument"); + { + // Set some direct formatting on the first paragraph, but leave paragraph adjust at its + // default (left). + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + xParagraph->setPropertyValue("PageNumberOffset", uno::Any(static_cast(0))); + } + + // Paste from ODT. + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xCursor(xText->createTextCursorByRange(xText->getStart()), uno::UNO_QUERY); + xCursor->insertDocumentFromURL(m_directories.getURLFromSrc(mpTestDocumentPath) + "paste-first-para-direct-format.odt", {}); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 3 (center) + // - Actual : 0 (left) + // i.e. the inserted document's first paragraph's paragraph formatting was lost. + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(style::ParagraphAdjust_CENTER), + getProperty(xParagraph, "ParaAdjust")); +} + +CPPUNIT_TEST_FIXTURE(Test, testVerticallyMergedCellBorder) +{ + // Given a document with two cells, vertically merged, when loading the document: + SwDoc* pDoc = createSwDoc(mpTestDocumentPath, "vmerge-cell-border.odt"); + + // Then make sure that the first cell has a right border while the second has no right border: + SwDocShell* pDocShell = pDoc->GetDocShell(); + SwWrtShell* pWrtShell = pDocShell->GetWrtShell(); + pWrtShell->Down(/*bSelect=*/false, /*nCount=*/1); + SwShellCursor* pShellCursor = pWrtShell->getShellCursor(/*bBlock=*/false); + SwStartNode* pA1 = pShellCursor->Start()->nNode.GetNode().StartOfSectionNode(); + const SwAttrSet& rA1Set = pA1->GetTableBox()->GetFrameFormat()->GetAttrSet(); + CPPUNIT_ASSERT(rA1Set.GetBox().GetRight()); + SwNodeIndex aA2(*pA1->EndOfSectionNode(), 1); + const SwAttrSet& rA2Set = aA2.GetNode().GetTableBox()->GetFrameFormat()->GetAttrSet(); + + // Without the accompanying fix in place, this test would have failed, as the A2 cell also had a + // right border, even if explicitly disabled + // it. + CPPUNIT_ASSERT(!rA2Set.GetBox().GetRight()); + + // Given this document model, when exporting to ODT: + save("writer8", maTempFile); + mbExported = true; + + // Then make sure the covered cell has a style. + xmlDocUniquePtr pXmlSettings = parseExport("content.xml"); + // Without the accompanying fix in place, this test would have failed with: + // - In <...>, XPath '//table:covered-table-cell' no attribute 'style-name' exist + assertXPath(pXmlSettings, "//table:covered-table-cell", "style-name", "Table1.A2"); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageAnchorZIndexFirstPage) +{ + load(mpTestDocumentPath, "PageAnchorZIndexFirstPage.fodt"); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Image1 index not 0", + sal_Int32(0), getProperty(getShapeByName(u"Image1"), "ZOrder")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Image2 index not 1", + sal_Int32(1), getProperty(getShapeByName(u"Image2"), "ZOrder")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Shape1 index not 2", + sal_Int32(2), getProperty(getShapeByName(u"Shape1"), "ZOrder")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Shape2 index not 3", + sal_Int32(3), getProperty(getShapeByName(u"Shape2"), "ZOrder")); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageAnchorZIndexSecondPage) +{ + load(mpTestDocumentPath, "PageAnchorZIndexSecondPage.fodt"); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Image1 index not 0", + sal_Int32(0), getProperty(getShapeByName(u"Image1"), "ZOrder")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Image2 index not 1", + sal_Int32(1), getProperty(getShapeByName(u"Image2"), "ZOrder")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Shape1 index not 2", + sal_Int32(2), getProperty(getShapeByName(u"Shape1"), "ZOrder")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Shape2 index not 3", + sal_Int32(3), getProperty(getShapeByName(u"Shape2"), "ZOrder")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf146257) +{ + load(mpTestDocumentPath, "tdf146257.odt"); + + // First list should contain no labels + { + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + } + // For second list ensure second level empty and third level should not contain extra dots + { + uno::Reference xPara(getParagraph(6), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(7), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(8), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), getProperty(xPara, "ListLabelString")); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf146597) +{ + load(mpTestDocumentPath, "tdf146597.odt"); + // This was crashed before. +} + +// just care that it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(Test, testForcepoint101) +{ + load(mpTestDocumentPath, "forcepoint101.fodt"); +} + +// just care that it doesn't crash/assert +CPPUNIT_TEST_FIXTURE(Test, testForcepoint108) +{ + //load would assert because it fails to load entirely, like testMathMalformedXml + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "forcepoint108.fodt"; + mxComponent = mxDesktop->loadComponentFromURL(aURL, "_default", 0, {}); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/data/090716_Studentische_Arbeit_VWS.docx b/sw/qa/extras/ooxmlexport/data/090716_Studentische_Arbeit_VWS.docx new file mode 100644 index 000000000..bfed37919 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/090716_Studentische_Arbeit_VWS.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/1-table-1-page.docx b/sw/qa/extras/ooxmlexport/data/1-table-1-page.docx new file mode 100644 index 000000000..d821c6698 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/1-table-1-page.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/128197_compat14.docx b/sw/qa/extras/ooxmlexport/data/128197_compat14.docx new file mode 100644 index 000000000..507e28396 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/128197_compat14.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/128197_compat15.docx b/sw/qa/extras/ooxmlexport/data/128197_compat15.docx new file mode 100644 index 000000000..d618b117c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/128197_compat15.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/1_page.docx b/sw/qa/extras/ooxmlexport/data/1_page.docx new file mode 100644 index 000000000..9b8638dd3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/1_page.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/2-id.docx b/sw/qa/extras/ooxmlexport/data/2-id.docx new file mode 100644 index 000000000..6d05e68a6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/2-id.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/2120112713.docx b/sw/qa/extras/ooxmlexport/data/2120112713.docx new file mode 100644 index 000000000..5de6378b7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/2120112713.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/2120112713_OpenBrace.docx b/sw/qa/extras/ooxmlexport/data/2120112713_OpenBrace.docx new file mode 100644 index 000000000..10dfd31ab Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/2120112713_OpenBrace.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/2129393649.docx b/sw/qa/extras/ooxmlexport/data/2129393649.docx new file mode 100644 index 000000000..e1fd7581f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/2129393649.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/2_table_doc.docx b/sw/qa/extras/ooxmlexport/data/2_table_doc.docx new file mode 100644 index 000000000..21513ec2c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/2_table_doc.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/2col-header.docx b/sw/qa/extras/ooxmlexport/data/2col-header.docx new file mode 100644 index 000000000..3e8f2c459 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/2col-header.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/99_Fields.docx b/sw/qa/extras/ooxmlexport/data/99_Fields.docx new file mode 100644 index 000000000..e0ee431e3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/99_Fields.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/AnchorId.docx b/sw/qa/extras/ooxmlexport/data/AnchorId.docx new file mode 100644 index 000000000..b1b66684d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/AnchorId.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Chart_BorderLine_Style.docx b/sw/qa/extras/ooxmlexport/data/Chart_BorderLine_Style.docx new file mode 100644 index 000000000..0d3b74b77 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Chart_BorderLine_Style.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Chart_Plot_BorderLine_Style.docx b/sw/qa/extras/ooxmlexport/data/Chart_Plot_BorderLine_Style.docx new file mode 100644 index 000000000..d1f0f97f1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Chart_Plot_BorderLine_Style.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/CommentDone.docx b/sw/qa/extras/ooxmlexport/data/CommentDone.docx new file mode 100644 index 000000000..1ce5993d4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/CommentDone.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/EmbeddedExcelChart.docx b/sw/qa/extras/ooxmlexport/data/EmbeddedExcelChart.docx new file mode 100644 index 000000000..567660b8e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/EmbeddedExcelChart.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Encrypted_LO_Standard_abc.docx b/sw/qa/extras/ooxmlexport/data/Encrypted_LO_Standard_abc.docx new file mode 100644 index 000000000..c35aaf12a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Encrypted_LO_Standard_abc.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Encrypted_MSO2007_abc.docx b/sw/qa/extras/ooxmlexport/data/Encrypted_MSO2007_abc.docx new file mode 100644 index 000000000..27566d4a7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Encrypted_MSO2007_abc.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Encrypted_MSO2010_abc.docx b/sw/qa/extras/ooxmlexport/data/Encrypted_MSO2010_abc.docx new file mode 100644 index 000000000..4881e351d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Encrypted_MSO2010_abc.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Encrypted_MSO2013_abc.docx b/sw/qa/extras/ooxmlexport/data/Encrypted_MSO2013_abc.docx new file mode 100644 index 000000000..28fa85c26 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Encrypted_MSO2013_abc.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/EquationAsScientificNumbering.docx b/sw/qa/extras/ooxmlexport/data/EquationAsScientificNumbering.docx new file mode 100644 index 000000000..e6d6bdf44 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/EquationAsScientificNumbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/EquationWithAboveAndBelowCaption.docx b/sw/qa/extras/ooxmlexport/data/EquationWithAboveAndBelowCaption.docx new file mode 100644 index 000000000..7657d0507 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/EquationWithAboveAndBelowCaption.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO73034.docx b/sw/qa/extras/ooxmlexport/data/FDO73034.docx new file mode 100644 index 000000000..c3f8c926e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO73034.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO73546.docx b/sw/qa/extras/ooxmlexport/data/FDO73546.docx new file mode 100644 index 000000000..468297196 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO73546.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO74105.docx b/sw/qa/extras/ooxmlexport/data/FDO74105.docx new file mode 100644 index 000000000..4299cf9c2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO74105.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO74106.docx b/sw/qa/extras/ooxmlexport/data/FDO74106.docx new file mode 100644 index 000000000..3b6257325 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO74106.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO74215.docx b/sw/qa/extras/ooxmlexport/data/FDO74215.docx new file mode 100644 index 000000000..fd2cc552e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO74215.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO74774.docx b/sw/qa/extras/ooxmlexport/data/FDO74774.docx new file mode 100644 index 000000000..11242475f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO74774.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO74775.docx b/sw/qa/extras/ooxmlexport/data/FDO74775.docx new file mode 100644 index 000000000..a8ee58895 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO74775.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO75133.docx b/sw/qa/extras/ooxmlexport/data/FDO75133.docx new file mode 100644 index 000000000..93170ddc6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO75133.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO76248.docx b/sw/qa/extras/ooxmlexport/data/FDO76248.docx new file mode 100644 index 000000000..c7b868e3f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO76248.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO76312.docx b/sw/qa/extras/ooxmlexport/data/FDO76312.docx new file mode 100644 index 000000000..b41ae7a72 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO76312.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO77715.docx b/sw/qa/extras/ooxmlexport/data/FDO77715.docx new file mode 100644 index 000000000..f93a46e0f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO77715.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO78292.docx b/sw/qa/extras/ooxmlexport/data/FDO78292.docx new file mode 100644 index 000000000..0388c0a5d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO78292.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FDO78590.docx b/sw/qa/extras/ooxmlexport/data/FDO78590.docx new file mode 100644 index 000000000..c32b0276b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO78590.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FigureAsLabelPicture.docx b/sw/qa/extras/ooxmlexport/data/FigureAsLabelPicture.docx new file mode 100644 index 000000000..50415bc1c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FigureAsLabelPicture.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/FileWithInvalidImageLink.docx b/sw/qa/extras/ooxmlexport/data/FileWithInvalidImageLink.docx new file mode 100644 index 000000000..6ad5cac38 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FileWithInvalidImageLink.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Hau_min_list2.fodt b/sw/qa/extras/ooxmlexport/data/Hau_min_list2.fodt new file mode 100644 index 000000000..715fbcde8 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/Hau_min_list2.fodt @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + III.Level 1 + + + level 2 has width + + + level 3 has indent + + + level 4 has width + indent + + + + + + + + + level 1 with positive on para + + + level 2 + + + level 3 + + + level 4 + + + III.Level 5 + + + level 6 has width + + + level 7 has indent + + + level 8 has width + indent + + + + + + + + + level 5 with positive on para + + + level 6 + + + level 7 + + + level 8 + + + + + + + + + + + + + + + + + + + + III.Level 1 + + + level 2 has width + + + level 3 has indent + + + level 4 has width + indent + + + + + + + + + level 1 with positive on para + + + level 2 + + + level 3 + + + level 4 + + + III.Level 5 + + + level 6 has width + + + level 7 has indent + + + level 8 has width + indent + + + + + + + + + level 5 with positive on para + + + level 6 + + + level 7 + + + level 8 + + + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/ImageCrop.docx b/sw/qa/extras/ooxmlexport/data/ImageCrop.docx new file mode 100644 index 000000000..120ce78eb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ImageCrop.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/IndexFieldFlagF.docx b/sw/qa/extras/ooxmlexport/data/IndexFieldFlagF.docx new file mode 100644 index 000000000..2c7d36527 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/IndexFieldFlagF.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/LineStyle_DashType.docx b/sw/qa/extras/ooxmlexport/data/LineStyle_DashType.docx new file mode 100644 index 000000000..b8eceb92d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/LineStyle_DashType.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/LineStyle_DashType_VML.docx b/sw/qa/extras/ooxmlexport/data/LineStyle_DashType_VML.docx new file mode 100644 index 000000000..8b9567231 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/LineStyle_DashType_VML.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/LinkedTextBoxes.docx b/sw/qa/extras/ooxmlexport/data/LinkedTextBoxes.docx new file mode 100644 index 000000000..48a5f64e3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/LinkedTextBoxes.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/NoFillAttrInImagedata.docx b/sw/qa/extras/ooxmlexport/data/NoFillAttrInImagedata.docx new file mode 100644 index 000000000..3819e7931 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/NoFillAttrInImagedata.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/NumberedList.docx b/sw/qa/extras/ooxmlexport/data/NumberedList.docx new file mode 100644 index 000000000..53f4490d4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/NumberedList.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/PreserveWfieldTOC.docx b/sw/qa/extras/ooxmlexport/data/PreserveWfieldTOC.docx new file mode 100644 index 000000000..ac294fd0f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/PreserveWfieldTOC.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/PreserveXfieldTOC.docx b/sw/qa/extras/ooxmlexport/data/PreserveXfieldTOC.docx new file mode 100644 index 000000000..adf7fd924 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/PreserveXfieldTOC.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/SdtContent.docx b/sw/qa/extras/ooxmlexport/data/SdtContent.docx new file mode 100644 index 000000000..91e0ef0e4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/SdtContent.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Shape.docx b/sw/qa/extras/ooxmlexport/data/Shape.docx new file mode 100644 index 000000000..474e6ffc2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Shape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/ShapeOverlappingWithSdt.docx b/sw/qa/extras/ooxmlexport/data/ShapeOverlappingWithSdt.docx new file mode 100644 index 000000000..e1ec07489 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ShapeOverlappingWithSdt.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Simple-TOC.odt b/sw/qa/extras/ooxmlexport/data/Simple-TOC.odt new file mode 100644 index 000000000..475f59e05 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Simple-TOC.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/TC-table-DnD-move.docx b/sw/qa/extras/ooxmlexport/data/TC-table-DnD-move.docx new file mode 100644 index 000000000..f231d6f84 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TC-table-DnD-move.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TC-table-Separate-Move.docx b/sw/qa/extras/ooxmlexport/data/TC-table-Separate-Move.docx new file mode 100644 index 000000000..227f2862c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TC-table-Separate-Move.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TC-table-rowDND-front.docx b/sw/qa/extras/ooxmlexport/data/TC-table-rowDND-front.docx new file mode 100644 index 000000000..17d3feeb3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TC-table-rowDND-front.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TC-table-rowDND.docx b/sw/qa/extras/ooxmlexport/data/TC-table-rowDND.docx new file mode 100644 index 000000000..9608736cf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TC-table-rowDND.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TCTagMisMatch.docx b/sw/qa/extras/ooxmlexport/data/TCTagMisMatch.docx new file mode 100644 index 000000000..6d890acdb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TCTagMisMatch.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TOC_field_b.docx b/sw/qa/extras/ooxmlexport/data/TOC_field_b.docx new file mode 100644 index 000000000..b8ff32b3b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TOC_field_b.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TOC_field_f.docx b/sw/qa/extras/ooxmlexport/data/TOC_field_f.docx new file mode 100644 index 000000000..ea0958a21 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TOC_field_f.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TableWithAboveCaptions.docx b/sw/qa/extras/ooxmlexport/data/TableWithAboveCaptions.docx new file mode 100644 index 000000000..f445ab6b1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TableWithAboveCaptions.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Table_cell_auto_width_fdo69656.docx b/sw/qa/extras/ooxmlexport/data/Table_cell_auto_width_fdo69656.docx new file mode 100644 index 000000000..10b8f9de2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Table_cell_auto_width_fdo69656.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Tdf147485.docx b/sw/qa/extras/ooxmlexport/data/Tdf147485.docx new file mode 100644 index 000000000..cb630efb8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Tdf147485.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt b/sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt new file mode 100644 index 000000000..6f7a62dee Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/TestVMLData.docx b/sw/qa/extras/ooxmlexport/data/TestVMLData.docx new file mode 100644 index 000000000..a2f89b146 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TestVMLData.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TextEffects_Glow_Shadow_Reflection.docx b/sw/qa/extras/ooxmlexport/data/TextEffects_Glow_Shadow_Reflection.docx new file mode 100644 index 000000000..e7412077c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextEffects_Glow_Shadow_Reflection.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TextEffects_Groupshapes.docx b/sw/qa/extras/ooxmlexport/data/TextEffects_Groupshapes.docx new file mode 100644 index 000000000..85f7a55ae Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextEffects_Groupshapes.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TextEffects_InStyle.docx b/sw/qa/extras/ooxmlexport/data/TextEffects_InStyle.docx new file mode 100644 index 000000000..5be6d9c5f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextEffects_InStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TextEffects_Props3d.docx b/sw/qa/extras/ooxmlexport/data/TextEffects_Props3d.docx new file mode 100644 index 000000000..3d36b4d21 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextEffects_Props3d.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TextEffects_Props3d_Ligatures_NumForm_NumSpacing.docx b/sw/qa/extras/ooxmlexport/data/TextEffects_Props3d_Ligatures_NumForm_NumSpacing.docx new file mode 100644 index 000000000..e8636ec1e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextEffects_Props3d_Ligatures_NumForm_NumSpacing.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TextEffects_StylisticSets_CntxtAlts.docx b/sw/qa/extras/ooxmlexport/data/TextEffects_StylisticSets_CntxtAlts.docx new file mode 100644 index 000000000..723310476 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextEffects_StylisticSets_CntxtAlts.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TextEffects_TextFill.docx b/sw/qa/extras/ooxmlexport/data/TextEffects_TextFill.docx new file mode 100644 index 000000000..383d0a021 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextEffects_TextFill.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TextEffects_TextOutline.docx b/sw/qa/extras/ooxmlexport/data/TextEffects_TextOutline.docx new file mode 100644 index 000000000..4ceb40c0e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextEffects_TextOutline.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/TextFrameRotation.docx b/sw/qa/extras/ooxmlexport/data/TextFrameRotation.docx new file mode 100644 index 000000000..ac7c2236b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextFrameRotation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/Unsupportedtextfields.docx b/sw/qa/extras/ooxmlexport/data/Unsupportedtextfields.docx new file mode 100644 index 000000000..698142eff Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Unsupportedtextfields.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/WPGbodyPr.docx b/sw/qa/extras/ooxmlexport/data/WPGbodyPr.docx new file mode 100644 index 000000000..a0a9ae764 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/WPGbodyPr.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/a4andborders.docx b/sw/qa/extras/ooxmlexport/data/a4andborders.docx new file mode 100644 index 000000000..afeb91cda Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/a4andborders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/abi11739.docx b/sw/qa/extras/ooxmlexport/data/abi11739.docx new file mode 100644 index 000000000..8eb6999da Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/abi11739.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/absolute-link.docx b/sw/qa/extras/ooxmlexport/data/absolute-link.docx new file mode 100644 index 000000000..db36a6f32 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/absolute-link.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/activex_checkbox.docx b/sw/qa/extras/ooxmlexport/data/activex_checkbox.docx new file mode 100644 index 000000000..d7415ef5a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/activex_checkbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/activex_control_align.odt b/sw/qa/extras/ooxmlexport/data/activex_control_align.odt new file mode 100644 index 000000000..b9944c7e5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/activex_control_align.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/activex_control_at_run_end.odt b/sw/qa/extras/ooxmlexport/data/activex_control_at_run_end.odt new file mode 100644 index 000000000..9008cb90a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/activex_control_at_run_end.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/activex_option_button_group.docx b/sw/qa/extras/ooxmlexport/data/activex_option_button_group.docx new file mode 100644 index 000000000..9da266a92 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/activex_option_button_group.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/activex_textbox.docx b/sw/qa/extras/ooxmlexport/data/activex_textbox.docx new file mode 100644 index 000000000..6f137008c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/activex_textbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/afterlines.docx b/sw/qa/extras/ooxmlexport/data/afterlines.docx new file mode 100644 index 000000000..296f91e2e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/afterlines.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/all_gaps_word.docx b/sw/qa/extras/ooxmlexport/data/all_gaps_word.docx new file mode 100644 index 000000000..fc52281a2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/all_gaps_word.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/alphabeticalIndex_AutoColumn.docx b/sw/qa/extras/ooxmlexport/data/alphabeticalIndex_AutoColumn.docx new file mode 100644 index 000000000..e08e943ac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/alphabeticalIndex_AutoColumn.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/alphabeticalIndex_MultipleColumns.docx b/sw/qa/extras/ooxmlexport/data/alphabeticalIndex_MultipleColumns.docx new file mode 100644 index 000000000..970166ad4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/alphabeticalIndex_MultipleColumns.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/anchor-position.docx b/sw/qa/extras/ooxmlexport/data/anchor-position.docx new file mode 100644 index 000000000..b210ee930 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/anchor-position.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/annotation-formatting.docx b/sw/qa/extras/ooxmlexport/data/annotation-formatting.docx new file mode 100644 index 000000000..87af02b78 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/annotation-formatting.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/arabic-zero-numbering.docx b/sw/qa/extras/ooxmlexport/data/arabic-zero-numbering.docx new file mode 100644 index 000000000..f87dce364 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/arabic-zero-numbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/arabic-zero3-numbering.docx b/sw/qa/extras/ooxmlexport/data/arabic-zero3-numbering.docx new file mode 100644 index 000000000..bd95186a6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/arabic-zero3-numbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/arabic-zero4-numbering.docx b/sw/qa/extras/ooxmlexport/data/arabic-zero4-numbering.docx new file mode 100644 index 000000000..6779d8598 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/arabic-zero4-numbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/arabic-zero5-numbering.docx b/sw/qa/extras/ooxmlexport/data/arabic-zero5-numbering.docx new file mode 100644 index 000000000..f7df2c526 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/arabic-zero5-numbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/artistic_effects.docx b/sw/qa/extras/ooxmlexport/data/artistic_effects.docx new file mode 100644 index 000000000..7bfb4b9d1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/artistic_effects.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/author-property.docx b/sw/qa/extras/ooxmlexport/data/author-property.docx new file mode 100644 index 000000000..474bb7933 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/author-property.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/autofit.docx b/sw/qa/extras/ooxmlexport/data/autofit.docx new file mode 100644 index 000000000..8932edfc7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/autofit.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/bad.docm b/sw/qa/extras/ooxmlexport/data/bad.docm new file mode 100644 index 000000000..b1e83220a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bad.docm differ diff --git a/sw/qa/extras/ooxmlexport/data/behinddoc.docx b/sw/qa/extras/ooxmlexport/data/behinddoc.docx new file mode 100644 index 000000000..f859d2e90 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/behinddoc.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/bezier.odt b/sw/qa/extras/ooxmlexport/data/bezier.odt new file mode 100644 index 000000000..c73ed3e98 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bezier.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc519228_odd-breaksB.docx b/sw/qa/extras/ooxmlexport/data/bnc519228_odd-breaksB.docx new file mode 100644 index 000000000..674d71401 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc519228_odd-breaksB.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc581614.doc b/sw/qa/extras/ooxmlexport/data/bnc581614.doc new file mode 100644 index 000000000..f56525e87 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc581614.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc637947.odt b/sw/qa/extras/ooxmlexport/data/bnc637947.odt new file mode 100644 index 000000000..db5c878c9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc637947.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc780044_spacing.docx b/sw/qa/extras/ooxmlexport/data/bnc780044_spacing.docx new file mode 100644 index 000000000..927d4d376 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc780044_spacing.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc834035.odt b/sw/qa/extras/ooxmlexport/data/bnc834035.odt new file mode 100644 index 000000000..393c960de Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc834035.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc837302.docx b/sw/qa/extras/ooxmlexport/data/bnc837302.docx new file mode 100644 index 000000000..9d0c0af68 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc837302.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc865381.docx b/sw/qa/extras/ooxmlexport/data/bnc865381.docx new file mode 100644 index 000000000..bb125cc73 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc865381.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc875718.docx b/sw/qa/extras/ooxmlexport/data/bnc875718.docx new file mode 100644 index 000000000..878a46fdf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc875718.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc884615-mso-position.docx b/sw/qa/extras/ooxmlexport/data/bnc884615-mso-position.docx new file mode 100644 index 000000000..2fb28ecfb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc884615-mso-position.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc884615.docx b/sw/qa/extras/ooxmlexport/data/bnc884615.docx new file mode 100644 index 000000000..51ee5ca0c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc884615.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/bnc891663.docx b/sw/qa/extras/ooxmlexport/data/bnc891663.docx new file mode 100644 index 000000000..d5f057e66 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/bnc891663.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/btlr-frame.odt b/sw/qa/extras/ooxmlexport/data/btlr-frame.odt new file mode 100644 index 000000000..31cb03849 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/btlr-frame.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/btlr-textbox.docx b/sw/qa/extras/ooxmlexport/data/btlr-textbox.docx new file mode 100644 index 000000000..181d305ea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/btlr-textbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/calendar1.docx b/sw/qa/extras/ooxmlexport/data/calendar1.docx new file mode 100644 index 000000000..81a504617 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/calendar1.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/calendar2.docx b/sw/qa/extras/ooxmlexport/data/calendar2.docx new file mode 100644 index 000000000..4e7d4ed3c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/calendar2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/calendar3.docx b/sw/qa/extras/ooxmlexport/data/calendar3.docx new file mode 100644 index 000000000..6c720aff9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/calendar3.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/calendar4.docx b/sw/qa/extras/ooxmlexport/data/calendar4.docx new file mode 100644 index 000000000..ecf71d8a3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/calendar4.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/calendar5.docx b/sw/qa/extras/ooxmlexport/data/calendar5.docx new file mode 100644 index 000000000..a27634673 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/calendar5.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/caption.docx b/sw/qa/extras/ooxmlexport/data/caption.docx new file mode 100644 index 000000000..301472cbc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/caption.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/cell-btlr.docx b/sw/qa/extras/ooxmlexport/data/cell-btlr.docx new file mode 100644 index 000000000..f05f114da Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cell-btlr.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/cell-grid-span.docx b/sw/qa/extras/ooxmlexport/data/cell-grid-span.docx new file mode 100644 index 000000000..de71d4818 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cell-grid-span.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/cell-sdt-redline.docx b/sw/qa/extras/ooxmlexport/data/cell-sdt-redline.docx new file mode 100644 index 000000000..41d722299 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cell-sdt-redline.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/charborder.odt b/sw/qa/extras/ooxmlexport/data/charborder.odt new file mode 100644 index 000000000..67dd89b09 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/charborder.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/chart-dupe.docx b/sw/qa/extras/ooxmlexport/data/chart-dupe.docx new file mode 100644 index 000000000..545f9665f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/chart-dupe.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/chart-in-footer.docx b/sw/qa/extras/ooxmlexport/data/chart-in-footer.docx new file mode 100644 index 000000000..293ee076b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/chart-in-footer.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/chart-prop.docx b/sw/qa/extras/ooxmlexport/data/chart-prop.docx new file mode 100644 index 000000000..f9cddd494 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/chart-prop.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/chart-size.docx b/sw/qa/extras/ooxmlexport/data/chart-size.docx new file mode 100644 index 000000000..da5d14443 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/chart-size.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/checkbox-control.docx b/sw/qa/extras/ooxmlexport/data/checkbox-control.docx new file mode 100644 index 000000000..905d29a96 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/checkbox-control.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/chtoutline.docx b/sw/qa/extras/ooxmlexport/data/chtoutline.docx new file mode 100644 index 000000000..92fdaf71e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/chtoutline.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/cjklist30.docx b/sw/qa/extras/ooxmlexport/data/cjklist30.docx new file mode 100644 index 000000000..b2efbb995 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cjklist30.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/cjklist31.docx b/sw/qa/extras/ooxmlexport/data/cjklist31.docx new file mode 100644 index 000000000..95d4c9aeb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cjklist31.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/cjklist34.docx b/sw/qa/extras/ooxmlexport/data/cjklist34.docx new file mode 100644 index 000000000..c09615aa2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cjklist34.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/cjklist35.docx b/sw/qa/extras/ooxmlexport/data/cjklist35.docx new file mode 100644 index 000000000..85aa24fc2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cjklist35.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/cjklist44.docx b/sw/qa/extras/ooxmlexport/data/cjklist44.docx new file mode 100644 index 000000000..98538e931 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cjklist44.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/clearing-break.docx b/sw/qa/extras/ooxmlexport/data/clearing-break.docx new file mode 100644 index 000000000..453a4c2b8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/clearing-break.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/columnbreak.docx b/sw/qa/extras/ooxmlexport/data/columnbreak.docx new file mode 100644 index 000000000..f55780e89 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/columnbreak.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/combobox-control.docx b/sw/qa/extras/ooxmlexport/data/combobox-control.docx new file mode 100644 index 000000000..180aacab9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/combobox-control.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/comment_initials.odt b/sw/qa/extras/ooxmlexport/data/comment_initials.odt new file mode 100644 index 000000000..9b84ed859 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/comment_initials.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/comments-nested.odt b/sw/qa/extras/ooxmlexport/data/comments-nested.odt new file mode 100644 index 000000000..e7686058d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/comments-nested.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/conditional-text.fodt b/sw/qa/extras/ooxmlexport/data/conditional-text.fodt new file mode 100644 index 000000000..296c1c4ec --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/conditional-text.fodt @@ -0,0 +1,8 @@ + + + + + True + + + diff --git a/sw/qa/extras/ooxmlexport/data/conditionalstyles-tbllook.docx b/sw/qa/extras/ooxmlexport/data/conditionalstyles-tbllook.docx new file mode 100644 index 000000000..4222d6376 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/conditionalstyles-tbllook.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/cont-sect-break-header-footer.docx b/sw/qa/extras/ooxmlexport/data/cont-sect-break-header-footer.docx new file mode 100644 index 000000000..61c18298d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cont-sect-break-header-footer.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/content-control-grab-bag.docx b/sw/qa/extras/ooxmlexport/data/content-control-grab-bag.docx new file mode 100644 index 000000000..33c01f08f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/content-control-grab-bag.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/content-control-shape.docx b/sw/qa/extras/ooxmlexport/data/content-control-shape.docx new file mode 100644 index 000000000..ab5be6cb6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/content-control-shape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/controlshape.fodt b/sw/qa/extras/ooxmlexport/data/controlshape.fodt new file mode 100644 index 000000000..81a710924 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/controlshape.fodt @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/cp1000015.odt b/sw/qa/extras/ooxmlexport/data/cp1000015.odt new file mode 100644 index 000000000..7d8dc9f10 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/cp1000015.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/crop-pixel.docx b/sw/qa/extras/ooxmlexport/data/crop-pixel.docx new file mode 100644 index 000000000..1ddb2efb9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/crop-pixel.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/crop-roundtrip.docx b/sw/qa/extras/ooxmlexport/data/crop-roundtrip.docx new file mode 100644 index 000000000..6db60d0e8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/crop-roundtrip.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/croppedAndRotated.odt b/sw/qa/extras/ooxmlexport/data/croppedAndRotated.odt new file mode 100644 index 000000000..825db09da Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/croppedAndRotated.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/custom-properties.docx b/sw/qa/extras/ooxmlexport/data/custom-properties.docx new file mode 100644 index 000000000..01db34977 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/custom-properties.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/customxml.docx b/sw/qa/extras/ooxmlexport/data/customxml.docx new file mode 100644 index 000000000..bfdf8ece6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/customxml.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dashed_line_custdash_1000th_of_percent.docx b/sw/qa/extras/ooxmlexport/data/dashed_line_custdash_1000th_of_percent.docx new file mode 100644 index 000000000..643ec08ea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dashed_line_custdash_1000th_of_percent.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dashed_line_custdash_percentage.docx b/sw/qa/extras/ooxmlexport/data/dashed_line_custdash_percentage.docx new file mode 100644 index 000000000..643ec08ea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dashed_line_custdash_percentage.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/date-control.docx b/sw/qa/extras/ooxmlexport/data/date-control.docx new file mode 100644 index 000000000..fdf229913 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/date-control.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/date_field_at_end_of_paragraph.docx b/sw/qa/extras/ooxmlexport/data/date_field_at_end_of_paragraph.docx new file mode 100644 index 000000000..6514b2a53 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/date_field_at_end_of_paragraph.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/date_field_in_shape.docx b/sw/qa/extras/ooxmlexport/data/date_field_in_shape.docx new file mode 100644 index 000000000..ff3c637c3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/date_field_in_shape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/decimal-numbering-no-leveltext.docx b/sw/qa/extras/ooxmlexport/data/decimal-numbering-no-leveltext.docx new file mode 100644 index 000000000..d7ec47997 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/decimal-numbering-no-leveltext.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/default-sect-break-cols.docx b/sw/qa/extras/ooxmlexport/data/default-sect-break-cols.docx new file mode 100644 index 000000000..b66b844f1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/default-sect-break-cols.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/defaultStyle.docx b/sw/qa/extras/ooxmlexport/data/defaultStyle.docx new file mode 100644 index 000000000..8e3faa70d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/defaultStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dkvert.docx b/sw/qa/extras/ooxmlexport/data/dkvert.docx new file mode 100644 index 000000000..bc1ee7881 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dkvert.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-charheight-default.docx b/sw/qa/extras/ooxmlexport/data/dml-charheight-default.docx new file mode 100644 index 000000000..0f22a87f0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-charheight-default.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-customgeometry-cubicbezier.docx b/sw/qa/extras/ooxmlexport/data/dml-customgeometry-cubicbezier.docx new file mode 100644 index 000000000..9cc84a927 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-customgeometry-cubicbezier.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-gradientfill-theme.docx b/sw/qa/extras/ooxmlexport/data/dml-gradientfill-theme.docx new file mode 100644 index 000000000..3311ce8a0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-gradientfill-theme.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-groupshape-capitalization.docx b/sw/qa/extras/ooxmlexport/data/dml-groupshape-capitalization.docx new file mode 100644 index 000000000..67fd21f64 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-groupshape-capitalization.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-groupshape-childposition.docx b/sw/qa/extras/ooxmlexport/data/dml-groupshape-childposition.docx new file mode 100644 index 000000000..a5c6bf99a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-groupshape-childposition.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-groupshape-paraspacing.docx b/sw/qa/extras/ooxmlexport/data/dml-groupshape-paraspacing.docx new file mode 100644 index 000000000..a8fc82bd5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-groupshape-paraspacing.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-groupshape-relsize.docx b/sw/qa/extras/ooxmlexport/data/dml-groupshape-relsize.docx new file mode 100644 index 000000000..6be137b28 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-groupshape-relsize.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-groupshape-runfonts.docx b/sw/qa/extras/ooxmlexport/data/dml-groupshape-runfonts.docx new file mode 100644 index 000000000..e4c8c6cb5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-groupshape-runfonts.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-groupshape-sdt.docx b/sw/qa/extras/ooxmlexport/data/dml-groupshape-sdt.docx new file mode 100644 index 000000000..7314d876a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-groupshape-sdt.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-picture-in-textframe.docx b/sw/qa/extras/ooxmlexport/data/dml-picture-in-textframe.docx new file mode 100644 index 000000000..7d5876108 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-picture-in-textframe.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-rectangle-relsize.docx b/sw/qa/extras/ooxmlexport/data/dml-rectangle-relsize.docx new file mode 100644 index 000000000..265dcbb4e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-rectangle-relsize.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-shape-fillbitmapcrop.docx b/sw/qa/extras/ooxmlexport/data/dml-shape-fillbitmapcrop.docx new file mode 100644 index 000000000..6c401bae9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-shape-fillbitmapcrop.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-shape-fillpattern.docx b/sw/qa/extras/ooxmlexport/data/dml-shape-fillpattern.docx new file mode 100644 index 000000000..9878c9964 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-shape-fillpattern.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-shape-relsize.docx b/sw/qa/extras/ooxmlexport/data/dml-shape-relsize.docx new file mode 100644 index 000000000..80ae02e02 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-shape-relsize.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-shape-title.docx b/sw/qa/extras/ooxmlexport/data/dml-shape-title.docx new file mode 100644 index 000000000..d354806f9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-shape-title.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx b/sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx new file mode 100644 index 000000000..9f2c46d2e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-textframe-vertadjust.docx b/sw/qa/extras/ooxmlexport/data/dml-textframe-vertadjust.docx new file mode 100644 index 000000000..bf5dcdde4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-textframe-vertadjust.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-textshape.docx b/sw/qa/extras/ooxmlexport/data/dml-textshape.docx new file mode 100644 index 000000000..28e39c29a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-textshape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-textshapeB.docx b/sw/qa/extras/ooxmlexport/data/dml-textshapeB.docx new file mode 100644 index 000000000..ab790a896 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-textshapeB.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dml-zorder.odt b/sw/qa/extras/ooxmlexport/data/dml-zorder.odt new file mode 100644 index 000000000..ba799a547 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-zorder.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/docxopenhyperlinkbox.docx b/sw/qa/extras/ooxmlexport/data/docxopenhyperlinkbox.docx new file mode 100644 index 000000000..2653e6202 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/docxopenhyperlinkbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dont-add-new-styles.docx b/sw/qa/extras/ooxmlexport/data/dont-add-new-styles.docx new file mode 100644 index 000000000..1ee154a81 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dont-add-new-styles.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/drawinglayer-pic-pos.docx b/sw/qa/extras/ooxmlexport/data/drawinglayer-pic-pos.docx new file mode 100644 index 000000000..bb18ab38b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/drawinglayer-pic-pos.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/drawingml-flipv.docx b/sw/qa/extras/ooxmlexport/data/drawingml-flipv.docx new file mode 100644 index 000000000..f10a83fac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/drawingml-flipv.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/dropdown-in-cell.docx b/sw/qa/extras/ooxmlexport/data/dropdown-in-cell.docx new file mode 100644 index 000000000..8abe25f82 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dropdown-in-cell.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/duplicate-east-asia.odt b/sw/qa/extras/ooxmlexport/data/duplicate-east-asia.odt new file mode 100644 index 000000000..22b8a554f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/duplicate-east-asia.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/effect-extent-inline.docx b/sw/qa/extras/ooxmlexport/data/effect-extent-inline.docx new file mode 100644 index 000000000..bb7db129a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/effect-extent-inline.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/effect-extent-line-width.docx b/sw/qa/extras/ooxmlexport/data/effect-extent-line-width.docx new file mode 100644 index 000000000..5cc4d4e37 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/effect-extent-line-width.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/effect-extent.docx b/sw/qa/extras/ooxmlexport/data/effect-extent.docx new file mode 100644 index 000000000..f35fc3a4a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/effect-extent.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/effectextent-margin.docx b/sw/qa/extras/ooxmlexport/data/effectextent-margin.docx new file mode 100644 index 000000000..5dccf967f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/effectextent-margin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/em.docx b/sw/qa/extras/ooxmlexport/data/em.docx new file mode 100644 index 000000000..ee3137e70 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/em.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/embedded-xlsx.docx b/sw/qa/extras/ooxmlexport/data/embedded-xlsx.docx new file mode 100644 index 000000000..3b9dd2a68 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/embedded-xlsx.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/embedded_images.odt b/sw/qa/extras/ooxmlexport/data/embedded_images.odt new file mode 100644 index 000000000..26166fac3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/embedded_images.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/empty-annotation-mark.docx b/sw/qa/extras/ooxmlexport/data/empty-annotation-mark.docx new file mode 100644 index 000000000..854b6d726 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/empty-annotation-mark.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/empty-date-control.odt b/sw/qa/extras/ooxmlexport/data/empty-date-control.odt new file mode 100644 index 000000000..acd5b8b94 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/empty-date-control.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/empty.odt b/sw/qa/extras/ooxmlexport/data/empty.odt new file mode 100644 index 000000000..ba6886080 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/empty.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/endingSectionProps.docx b/sw/qa/extras/ooxmlexport/data/endingSectionProps.docx new file mode 100644 index 000000000..e5dee2f60 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/endingSectionProps.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fail_bracePair.odt b/sw/qa/extras/ooxmlexport/data/fail_bracePair.odt new file mode 100644 index 000000000..adab115eb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fail_bracePair.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo106029.docx b/sw/qa/extras/ooxmlexport/data/fdo106029.docx new file mode 100644 index 000000000..b19d63d4c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo106029.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo38244.docx b/sw/qa/extras/ooxmlexport/data/fdo38244.docx new file mode 100644 index 000000000..2551f0c64 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo38244.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo38414.docx b/sw/qa/extras/ooxmlexport/data/fdo38414.docx new file mode 100644 index 000000000..135cd32c9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo38414.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo43093.docx b/sw/qa/extras/ooxmlexport/data/fdo43093.docx new file mode 100644 index 000000000..9d5de58b5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo43093.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo43093b.docx b/sw/qa/extras/ooxmlexport/data/fdo43093b.docx new file mode 100644 index 000000000..3e5a910e2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo43093b.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo44689_start_page_0.docx b/sw/qa/extras/ooxmlexport/data/fdo44689_start_page_0.docx new file mode 100644 index 000000000..f7e9331be Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo44689_start_page_0.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo44689_start_page_7.docx b/sw/qa/extras/ooxmlexport/data/fdo44689_start_page_7.docx new file mode 100644 index 000000000..25e58d395 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo44689_start_page_7.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo46361.docx b/sw/qa/extras/ooxmlexport/data/fdo46361.docx new file mode 100644 index 000000000..2f894e4b3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo46361.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo47669.docx b/sw/qa/extras/ooxmlexport/data/fdo47669.docx new file mode 100644 index 000000000..9c5ef6879 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo47669.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo48557.odt b/sw/qa/extras/ooxmlexport/data/fdo48557.odt new file mode 100644 index 000000000..35353baac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo48557.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo51034.odt b/sw/qa/extras/ooxmlexport/data/fdo51034.odt new file mode 100644 index 000000000..9720cfb65 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo51034.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo51550.odt b/sw/qa/extras/ooxmlexport/data/fdo51550.odt new file mode 100644 index 000000000..4cade5b21 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo51550.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo52208.docx b/sw/qa/extras/ooxmlexport/data/fdo52208.docx new file mode 100644 index 000000000..be842ad2a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo52208.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo53985.docx b/sw/qa/extras/ooxmlexport/data/fdo53985.docx new file mode 100644 index 000000000..0c8b32fb6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo53985.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo55187.docx b/sw/qa/extras/ooxmlexport/data/fdo55187.docx new file mode 100644 index 000000000..59cd0a806 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo55187.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo55381.docx b/sw/qa/extras/ooxmlexport/data/fdo55381.docx new file mode 100644 index 000000000..ffeae1f87 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo55381.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo56679.docx b/sw/qa/extras/ooxmlexport/data/fdo56679.docx new file mode 100644 index 000000000..8ea689c3c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo56679.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo58577.odt b/sw/qa/extras/ooxmlexport/data/fdo58577.odt new file mode 100644 index 000000000..4c8656d7e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo58577.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo59273.docx b/sw/qa/extras/ooxmlexport/data/fdo59273.docx new file mode 100644 index 000000000..fcdfd7734 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo59273.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo59638.docx b/sw/qa/extras/ooxmlexport/data/fdo59638.docx new file mode 100644 index 000000000..d33e7cc0a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo59638.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo60922.docx b/sw/qa/extras/ooxmlexport/data/fdo60922.docx new file mode 100644 index 000000000..0d1ff2613 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo60922.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo60957-2.docx b/sw/qa/extras/ooxmlexport/data/fdo60957-2.docx new file mode 100644 index 000000000..3819aafd8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo60957-2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo60990.odt b/sw/qa/extras/ooxmlexport/data/fdo60990.odt new file mode 100644 index 000000000..c855f327a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo60990.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo61343.docx b/sw/qa/extras/ooxmlexport/data/fdo61343.docx new file mode 100644 index 000000000..9ab99739b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo61343.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo63053.docx b/sw/qa/extras/ooxmlexport/data/fdo63053.docx new file mode 100644 index 000000000..43282b0df Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo63053.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo63685.docx b/sw/qa/extras/ooxmlexport/data/fdo63685.docx new file mode 100644 index 000000000..a1348fcff Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo63685.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo64238_a.docx b/sw/qa/extras/ooxmlexport/data/fdo64238_a.docx new file mode 100644 index 000000000..7c43feaf7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo64238_a.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo64238_b.docx b/sw/qa/extras/ooxmlexport/data/fdo64238_b.docx new file mode 100644 index 000000000..bfaf92cca Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo64238_b.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo64350.docx b/sw/qa/extras/ooxmlexport/data/fdo64350.docx new file mode 100644 index 000000000..6f41b6664 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo64350.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo64826.docx b/sw/qa/extras/ooxmlexport/data/fdo64826.docx new file mode 100644 index 000000000..ce4287cea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo64826.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo65090.docx b/sw/qa/extras/ooxmlexport/data/fdo65090.docx new file mode 100644 index 000000000..4d45737dd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo65090.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo65265.docx b/sw/qa/extras/ooxmlexport/data/fdo65265.docx new file mode 100644 index 000000000..6267085fa Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo65265.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo65295.docx b/sw/qa/extras/ooxmlexport/data/fdo65295.docx new file mode 100644 index 000000000..52a231afa Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo65295.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo65400.docx b/sw/qa/extras/ooxmlexport/data/fdo65400.docx new file mode 100644 index 000000000..c247e9fff Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo65400.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo65632.docx b/sw/qa/extras/ooxmlexport/data/fdo65632.docx new file mode 100644 index 000000000..8c336c20f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo65632.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo65655.docx b/sw/qa/extras/ooxmlexport/data/fdo65655.docx new file mode 100644 index 000000000..5fe9451bb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo65655.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo65718.docx b/sw/qa/extras/ooxmlexport/data/fdo65718.docx new file mode 100644 index 000000000..0af4f9002 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo65718.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo65833.docx b/sw/qa/extras/ooxmlexport/data/fdo65833.docx new file mode 100644 index 000000000..097015eed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo65833.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo66145.docx b/sw/qa/extras/ooxmlexport/data/fdo66145.docx new file mode 100644 index 000000000..62ffdbe22 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo66145.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo66474.docx b/sw/qa/extras/ooxmlexport/data/fdo66474.docx new file mode 100644 index 000000000..0252746f5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo66474.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo66543.docx b/sw/qa/extras/ooxmlexport/data/fdo66543.docx new file mode 100644 index 000000000..585eb41e4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo66543.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo66688.docx b/sw/qa/extras/ooxmlexport/data/fdo66688.docx new file mode 100644 index 000000000..300b91504 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo66688.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo66773.docx b/sw/qa/extras/ooxmlexport/data/fdo66773.docx new file mode 100644 index 000000000..41f0abee7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo66773.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo66781.docx b/sw/qa/extras/ooxmlexport/data/fdo66781.docx new file mode 100644 index 000000000..13e5423f4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo66781.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo66929.docx b/sw/qa/extras/ooxmlexport/data/fdo66929.docx new file mode 100644 index 000000000..7f0afac3c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo66929.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo67013.docx b/sw/qa/extras/ooxmlexport/data/fdo67013.docx new file mode 100644 index 000000000..5512550ea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo67013.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo67737.docx b/sw/qa/extras/ooxmlexport/data/fdo67737.docx new file mode 100644 index 000000000..8be34ec71 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo67737.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo68418.docx b/sw/qa/extras/ooxmlexport/data/fdo68418.docx new file mode 100644 index 000000000..10b7c009c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo68418.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo68607.docx b/sw/qa/extras/ooxmlexport/data/fdo68607.docx new file mode 100644 index 000000000..11f57064c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo68607.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo68787.docx b/sw/qa/extras/ooxmlexport/data/fdo68787.docx new file mode 100644 index 000000000..c47b80995 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo68787.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo69548.docx b/sw/qa/extras/ooxmlexport/data/fdo69548.docx new file mode 100644 index 000000000..6799f5ef2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo69548.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo69616.docx b/sw/qa/extras/ooxmlexport/data/fdo69616.docx new file mode 100644 index 000000000..7c7f52e16 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo69616.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo69636.docx b/sw/qa/extras/ooxmlexport/data/fdo69636.docx new file mode 100644 index 000000000..b2f3069b5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo69636.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo69644.docx b/sw/qa/extras/ooxmlexport/data/fdo69644.docx new file mode 100644 index 000000000..1a254db3b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo69644.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo69649.docx b/sw/qa/extras/ooxmlexport/data/fdo69649.docx new file mode 100644 index 000000000..cb0f78999 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo69649.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo70457.docx b/sw/qa/extras/ooxmlexport/data/fdo70457.docx new file mode 100644 index 000000000..b9cabb119 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo70457.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo70812.docx b/sw/qa/extras/ooxmlexport/data/fdo70812.docx new file mode 100644 index 000000000..b9b5d52c2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo70812.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo70838.docx b/sw/qa/extras/ooxmlexport/data/fdo70838.docx new file mode 100644 index 000000000..ede97f7ea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo70838.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo70942.docx b/sw/qa/extras/ooxmlexport/data/fdo70942.docx new file mode 100644 index 000000000..a04a78437 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo70942.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo71302.docx b/sw/qa/extras/ooxmlexport/data/fdo71302.docx new file mode 100644 index 000000000..1f62e87c5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo71302.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo71646.docx b/sw/qa/extras/ooxmlexport/data/fdo71646.docx new file mode 100644 index 000000000..d49d88b67 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo71646.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo71785.docx b/sw/qa/extras/ooxmlexport/data/fdo71785.docx new file mode 100644 index 000000000..e155e831f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo71785.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo71834.docx b/sw/qa/extras/ooxmlexport/data/fdo71834.docx new file mode 100644 index 000000000..154533450 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo71834.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo72560.docx b/sw/qa/extras/ooxmlexport/data/fdo72560.docx new file mode 100644 index 000000000..b21535bfd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo72560.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo72560b.docx b/sw/qa/extras/ooxmlexport/data/fdo72560b.docx new file mode 100644 index 000000000..dfe5176f3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo72560b.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo72560c.docx b/sw/qa/extras/ooxmlexport/data/fdo72560c.docx new file mode 100644 index 000000000..ed0b88822 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo72560c.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo72560d.docx b/sw/qa/extras/ooxmlexport/data/fdo72560d.docx new file mode 100644 index 000000000..000ae73d8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo72560d.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo72560e.docx b/sw/qa/extras/ooxmlexport/data/fdo72560e.docx new file mode 100644 index 000000000..7c3e89fb3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo72560e.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo73215.docx b/sw/qa/extras/ooxmlexport/data/fdo73215.docx new file mode 100644 index 000000000..9b2c05b72 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo73215.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo73227.docx b/sw/qa/extras/ooxmlexport/data/fdo73227.docx new file mode 100644 index 000000000..015beb9d6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo73227.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo73247.docx b/sw/qa/extras/ooxmlexport/data/fdo73247.docx new file mode 100644 index 000000000..63ad782f6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo73247.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo73389.docx b/sw/qa/extras/ooxmlexport/data/fdo73389.docx new file mode 100644 index 000000000..02b55f74e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo73389.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo73541.docx b/sw/qa/extras/ooxmlexport/data/fdo73541.docx new file mode 100644 index 000000000..469d02520 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo73541.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo73550.docx b/sw/qa/extras/ooxmlexport/data/fdo73550.docx new file mode 100644 index 000000000..c6b7f15d9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo73550.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo73556.docx b/sw/qa/extras/ooxmlexport/data/fdo73556.docx new file mode 100644 index 000000000..50354076d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo73556.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo73596_AlphaSeparator.docx b/sw/qa/extras/ooxmlexport/data/fdo73596_AlphaSeparator.docx new file mode 100644 index 000000000..892bc553b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo73596_AlphaSeparator.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo73596_RunInStyle.docx b/sw/qa/extras/ooxmlexport/data/fdo73596_RunInStyle.docx new file mode 100644 index 000000000..8f1863b46 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo73596_RunInStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo74110.docx b/sw/qa/extras/ooxmlexport/data/fdo74110.docx new file mode 100644 index 000000000..6b7ab0e41 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo74110.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo74153.docx b/sw/qa/extras/ooxmlexport/data/fdo74153.docx new file mode 100644 index 000000000..4cbdd7bba Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo74153.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo74357.docx b/sw/qa/extras/ooxmlexport/data/fdo74357.docx new file mode 100644 index 000000000..970372906 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo74357.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo74401.docx b/sw/qa/extras/ooxmlexport/data/fdo74401.docx new file mode 100644 index 000000000..fd3cbabdd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo74401.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo74566.docx b/sw/qa/extras/ooxmlexport/data/fdo74566.docx new file mode 100644 index 000000000..b197b946a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo74566.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo74605.docx b/sw/qa/extras/ooxmlexport/data/fdo74605.docx new file mode 100644 index 000000000..85231f151 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo74605.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo74745.docx b/sw/qa/extras/ooxmlexport/data/fdo74745.docx new file mode 100644 index 000000000..773567756 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo74745.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo74792.docx b/sw/qa/extras/ooxmlexport/data/fdo74792.docx new file mode 100644 index 000000000..3d00009a0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo74792.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo75431.docx b/sw/qa/extras/ooxmlexport/data/fdo75431.docx new file mode 100644 index 000000000..492278403 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo75431.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76016.docx b/sw/qa/extras/ooxmlexport/data/fdo76016.docx new file mode 100644 index 000000000..79fa6b9a4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76016.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76098.docx b/sw/qa/extras/ooxmlexport/data/fdo76098.docx new file mode 100644 index 000000000..8a616e9b7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76098.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76101.docx b/sw/qa/extras/ooxmlexport/data/fdo76101.docx new file mode 100644 index 000000000..d2264f3f8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76101.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76163.docx b/sw/qa/extras/ooxmlexport/data/fdo76163.docx new file mode 100644 index 000000000..0c7cc7027 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76163.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76249.docx b/sw/qa/extras/ooxmlexport/data/fdo76249.docx new file mode 100644 index 000000000..9b50f5de6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76249.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76316.docx b/sw/qa/extras/ooxmlexport/data/fdo76316.docx new file mode 100644 index 000000000..5cfd9d937 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76316.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76586.docx b/sw/qa/extras/ooxmlexport/data/fdo76586.docx new file mode 100644 index 000000000..28ae05ee7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76586.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76587.docx b/sw/qa/extras/ooxmlexport/data/fdo76587.docx new file mode 100644 index 000000000..84c23adc7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76587.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76589.docx b/sw/qa/extras/ooxmlexport/data/fdo76589.docx new file mode 100644 index 000000000..d501b1b59 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76589.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76591.docx b/sw/qa/extras/ooxmlexport/data/fdo76591.docx new file mode 100644 index 000000000..8ca43879c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76591.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76597.docx b/sw/qa/extras/ooxmlexport/data/fdo76597.docx new file mode 100644 index 000000000..a970136b8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76597.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76741.docx b/sw/qa/extras/ooxmlexport/data/fdo76741.docx new file mode 100644 index 000000000..abe9985a1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76741.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76803.docx b/sw/qa/extras/ooxmlexport/data/fdo76803.docx new file mode 100644 index 000000000..65fad065a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76803.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76934.docx b/sw/qa/extras/ooxmlexport/data/fdo76934.docx new file mode 100644 index 000000000..0515cf2bf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76934.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo76979.docx b/sw/qa/extras/ooxmlexport/data/fdo76979.docx new file mode 100644 index 000000000..f8ee99520 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo76979.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77117.docx b/sw/qa/extras/ooxmlexport/data/fdo77117.docx new file mode 100644 index 000000000..f2a1d447e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77117.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77129.docx b/sw/qa/extras/ooxmlexport/data/fdo77129.docx new file mode 100644 index 000000000..b0661e936 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77129.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77476.docx b/sw/qa/extras/ooxmlexport/data/fdo77476.docx new file mode 100644 index 000000000..08c38b066 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77476.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77716.docx b/sw/qa/extras/ooxmlexport/data/fdo77716.docx new file mode 100644 index 000000000..f70679100 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77716.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77718.docx b/sw/qa/extras/ooxmlexport/data/fdo77718.docx new file mode 100644 index 000000000..7a22485f7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77718.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77719.docx b/sw/qa/extras/ooxmlexport/data/fdo77719.docx new file mode 100644 index 000000000..e671b33f4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77719.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77725.docx b/sw/qa/extras/ooxmlexport/data/fdo77725.docx new file mode 100644 index 000000000..b06a4b4ee Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77725.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77727.docx b/sw/qa/extras/ooxmlexport/data/fdo77727.docx new file mode 100644 index 000000000..9f553e210 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77727.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77759.docx b/sw/qa/extras/ooxmlexport/data/fdo77759.docx new file mode 100644 index 000000000..655869069 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77759.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77812.docx b/sw/qa/extras/ooxmlexport/data/fdo77812.docx new file mode 100644 index 000000000..48fb49888 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77812.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77887.docx b/sw/qa/extras/ooxmlexport/data/fdo77887.docx new file mode 100644 index 000000000..cb3f4537d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77887.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo77890.docx b/sw/qa/extras/ooxmlexport/data/fdo77890.docx new file mode 100644 index 000000000..ac90174ff Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo77890.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78284.docx b/sw/qa/extras/ooxmlexport/data/fdo78284.docx new file mode 100644 index 000000000..92145eb12 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78284.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78300.docx b/sw/qa/extras/ooxmlexport/data/fdo78300.docx new file mode 100644 index 000000000..40da0913d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78300.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78384.docx b/sw/qa/extras/ooxmlexport/data/fdo78384.docx new file mode 100644 index 000000000..ee102648f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78384.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78420.docx b/sw/qa/extras/ooxmlexport/data/fdo78420.docx new file mode 100644 index 000000000..6b253b189 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78420.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78432.docx b/sw/qa/extras/ooxmlexport/data/fdo78432.docx new file mode 100644 index 000000000..343e76ae2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78432.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78469.docx b/sw/qa/extras/ooxmlexport/data/fdo78469.docx new file mode 100644 index 000000000..7ae4d71be Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78469.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78474.docx b/sw/qa/extras/ooxmlexport/data/fdo78474.docx new file mode 100644 index 000000000..6468a8421 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78474.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78599.docx b/sw/qa/extras/ooxmlexport/data/fdo78599.docx new file mode 100644 index 000000000..3c81780da Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78599.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78651.docx b/sw/qa/extras/ooxmlexport/data/fdo78651.docx new file mode 100644 index 000000000..a510782b4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78651.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78654.docx b/sw/qa/extras/ooxmlexport/data/fdo78654.docx new file mode 100644 index 000000000..81d7bd0c4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78654.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78658.docx b/sw/qa/extras/ooxmlexport/data/fdo78658.docx new file mode 100644 index 000000000..1c0782e98 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78658.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78659.docx b/sw/qa/extras/ooxmlexport/data/fdo78659.docx new file mode 100644 index 000000000..cf0800373 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78659.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78663.docx b/sw/qa/extras/ooxmlexport/data/fdo78663.docx new file mode 100644 index 000000000..be35b6c00 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78663.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78882.docx b/sw/qa/extras/ooxmlexport/data/fdo78882.docx new file mode 100644 index 000000000..da591f9e7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78882.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78883.docx b/sw/qa/extras/ooxmlexport/data/fdo78883.docx new file mode 100644 index 000000000..a72ff9436 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78883.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78886.docx b/sw/qa/extras/ooxmlexport/data/fdo78886.docx new file mode 100644 index 000000000..e364948f1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78886.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78887.docx b/sw/qa/extras/ooxmlexport/data/fdo78887.docx new file mode 100644 index 000000000..db92fe4ed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78887.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78904.docx b/sw/qa/extras/ooxmlexport/data/fdo78904.docx new file mode 100644 index 000000000..c171ae2ca Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78904.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78907.docx b/sw/qa/extras/ooxmlexport/data/fdo78907.docx new file mode 100644 index 000000000..abae6b4be Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78907.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78910.docx b/sw/qa/extras/ooxmlexport/data/fdo78910.docx new file mode 100644 index 000000000..e8a090bee Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78910.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78939.docx b/sw/qa/extras/ooxmlexport/data/fdo78939.docx new file mode 100644 index 000000000..2fc319863 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78939.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo78957.docx b/sw/qa/extras/ooxmlexport/data/fdo78957.docx new file mode 100644 index 000000000..38a18a3a6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78957.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79008.docx b/sw/qa/extras/ooxmlexport/data/fdo79008.docx new file mode 100644 index 000000000..2b1758776 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79008.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79062.docx b/sw/qa/extras/ooxmlexport/data/fdo79062.docx new file mode 100644 index 000000000..181ea7283 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79062.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79256.docx b/sw/qa/extras/ooxmlexport/data/fdo79256.docx new file mode 100644 index 000000000..2358abb85 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79256.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79535.docx b/sw/qa/extras/ooxmlexport/data/fdo79535.docx new file mode 100644 index 000000000..64aab18e0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79535.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79540.docx b/sw/qa/extras/ooxmlexport/data/fdo79540.docx new file mode 100644 index 000000000..ce843d661 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79540.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79591.docx b/sw/qa/extras/ooxmlexport/data/fdo79591.docx new file mode 100644 index 000000000..32a61debd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79591.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79668.docx b/sw/qa/extras/ooxmlexport/data/fdo79668.docx new file mode 100644 index 000000000..793fd2adf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79668.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79738.docx b/sw/qa/extras/ooxmlexport/data/fdo79738.docx new file mode 100644 index 000000000..e6873e7a2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79738.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79817.docx b/sw/qa/extras/ooxmlexport/data/fdo79817.docx new file mode 100644 index 000000000..7e948c5c8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79817.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79822.docx b/sw/qa/extras/ooxmlexport/data/fdo79822.docx new file mode 100644 index 000000000..2844671d6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79822.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79915.docx b/sw/qa/extras/ooxmlexport/data/fdo79915.docx new file mode 100644 index 000000000..351674df0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79915.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79968.docx b/sw/qa/extras/ooxmlexport/data/fdo79968.docx new file mode 100644 index 000000000..2da7ddcc4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79968.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79969_xlsb.docx b/sw/qa/extras/ooxmlexport/data/fdo79969_xlsb.docx new file mode 100644 index 000000000..0e413992b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79969_xlsb.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo79969_xlsm.docx b/sw/qa/extras/ooxmlexport/data/fdo79969_xlsm.docx new file mode 100644 index 000000000..6fd11f397 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo79969_xlsm.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80097.docx b/sw/qa/extras/ooxmlexport/data/fdo80097.docx new file mode 100644 index 000000000..3f8ba9f90 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80097.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80410.docx b/sw/qa/extras/ooxmlexport/data/fdo80410.docx new file mode 100644 index 000000000..7660d8444 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80410.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80522.docx b/sw/qa/extras/ooxmlexport/data/fdo80522.docx new file mode 100644 index 000000000..9445b733f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80522.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80523_pptm.docx b/sw/qa/extras/ooxmlexport/data/fdo80523_pptm.docx new file mode 100644 index 000000000..3140f3b6d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80523_pptm.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80523_sldm.docx b/sw/qa/extras/ooxmlexport/data/fdo80523_sldm.docx new file mode 100644 index 000000000..e50cda1a5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80523_sldm.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80555.docx b/sw/qa/extras/ooxmlexport/data/fdo80555.docx new file mode 100644 index 000000000..a15bdc1ec Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80555.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80800.docx b/sw/qa/extras/ooxmlexport/data/fdo80800.docx new file mode 100644 index 000000000..64ed7697f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80800.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80800b_tableStyle.docx b/sw/qa/extras/ooxmlexport/data/fdo80800b_tableStyle.docx new file mode 100644 index 000000000..bde907cf2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80800b_tableStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80895.docx b/sw/qa/extras/ooxmlexport/data/fdo80895.docx new file mode 100644 index 000000000..711882fd4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80895.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80897.docx b/sw/qa/extras/ooxmlexport/data/fdo80897.docx new file mode 100644 index 000000000..2f0957e69 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80897.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80898.docx b/sw/qa/extras/ooxmlexport/data/fdo80898.docx new file mode 100644 index 000000000..d4b9e1f23 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80898.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80902.docx b/sw/qa/extras/ooxmlexport/data/fdo80902.docx new file mode 100644 index 000000000..73a927f9a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80902.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo80997.docx b/sw/qa/extras/ooxmlexport/data/fdo80997.docx new file mode 100644 index 000000000..713e890af Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80997.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo81031.docx b/sw/qa/extras/ooxmlexport/data/fdo81031.docx new file mode 100644 index 000000000..d80111dec Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo81031.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo81341.docx b/sw/qa/extras/ooxmlexport/data/fdo81341.docx new file mode 100644 index 000000000..3c243c0dd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo81341.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo81381.docx b/sw/qa/extras/ooxmlexport/data/fdo81381.docx new file mode 100644 index 000000000..bf4a860c7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo81381.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo81486.docx b/sw/qa/extras/ooxmlexport/data/fdo81486.docx new file mode 100644 index 000000000..6e680c350 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo81486.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo81492.docx b/sw/qa/extras/ooxmlexport/data/fdo81492.docx new file mode 100644 index 000000000..be3353b3c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo81492.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo81945.docx b/sw/qa/extras/ooxmlexport/data/fdo81945.docx new file mode 100644 index 000000000..51dee9cfe Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo81945.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo81946.docx b/sw/qa/extras/ooxmlexport/data/fdo81946.docx new file mode 100644 index 000000000..b179f58bf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo81946.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo82123.docx b/sw/qa/extras/ooxmlexport/data/fdo82123.docx new file mode 100644 index 000000000..fc2632cb6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo82123.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo82492.docx b/sw/qa/extras/ooxmlexport/data/fdo82492.docx new file mode 100644 index 000000000..6533056f4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo82492.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo83044.docx b/sw/qa/extras/ooxmlexport/data/fdo83044.docx new file mode 100644 index 000000000..01d32bfdb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo83044.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo83048.docx b/sw/qa/extras/ooxmlexport/data/fdo83048.docx new file mode 100644 index 000000000..3ef6d995f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo83048.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo83057.docx b/sw/qa/extras/ooxmlexport/data/fdo83057.docx new file mode 100644 index 000000000..d4d42321d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo83057.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo83428.docx b/sw/qa/extras/ooxmlexport/data/fdo83428.docx new file mode 100644 index 000000000..9e9743a3e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo83428.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fdo85542.docx b/sw/qa/extras/ooxmlexport/data/fdo85542.docx new file mode 100644 index 000000000..db4940845 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo85542.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/field-rotated.fodt b/sw/qa/extras/ooxmlexport/data/field-rotated.fodt new file mode 100644 index 000000000..079f35dfb --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/field-rotated.fodt @@ -0,0 +1,44 @@ + + + + 2020-02-07T13:06:45.8693885021PT1M18SRotationeering2020-02-07T13:08:03.244415357LibreOfficeDev/7.0.0.0.alpha0$Linux_X86_64 LibreOffice_project/d2eff4b08869dd15b025c5801896e0332b14ba59 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rotationeering + + + diff --git a/sw/qa/extras/ooxmlexport/data/file_crash.docx b/sw/qa/extras/ooxmlexport/data/file_crash.docx new file mode 100644 index 000000000..7a233aba5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/file_crash.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/first-header-footer.docx b/sw/qa/extras/ooxmlexport/data/first-header-footer.docx new file mode 100644 index 000000000..d18eea586 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/first-header-footer.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/first-header-footerB.odt b/sw/qa/extras/ooxmlexport/data/first-header-footerB.odt new file mode 100644 index 000000000..0ae1992ed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/first-header-footerB.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/fixed-date-field.docx b/sw/qa/extras/ooxmlexport/data/fixed-date-field.docx new file mode 100644 index 000000000..960e2db80 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fixed-date-field.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/flip_and_rotate.odt b/sw/qa/extras/ooxmlexport/data/flip_and_rotate.odt new file mode 100644 index 000000000..4805bfa80 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/flip_and_rotate.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/floating-table-position.docx b/sw/qa/extras/ooxmlexport/data/floating-table-position.docx new file mode 100644 index 000000000..de7a467aa Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/floating-table-position.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/floating-tables-anchor.docx b/sw/qa/extras/ooxmlexport/data/floating-tables-anchor.docx new file mode 100644 index 000000000..70dc7cf8b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/floating-tables-anchor.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/floatingtbl_with_formula.docx b/sw/qa/extras/ooxmlexport/data/floatingtbl_with_formula.docx new file mode 100644 index 000000000..ecabbd6b2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/floatingtbl_with_formula.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/fly_fieldmark.fodt b/sw/qa/extras/ooxmlexport/data/fly_fieldmark.fodt new file mode 100644 index 000000000..af1ae9a86 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/fly_fieldmark.fodt @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foobar + + + diff --git a/sw/qa/extras/ooxmlexport/data/font-name-is-empty.docx b/sw/qa/extras/ooxmlexport/data/font-name-is-empty.docx new file mode 100644 index 000000000..5ee8cad1a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/font-name-is-empty.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/footer-body-distance.docx b/sw/qa/extras/ooxmlexport/data/footer-body-distance.docx new file mode 100644 index 000000000..0244d76c7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/footer-body-distance.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/footer-contain-hyperlink.docx b/sw/qa/extras/ooxmlexport/data/footer-contain-hyperlink.docx new file mode 100644 index 000000000..42c68d5e1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/footer-contain-hyperlink.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/footer-margin-lost.docx b/sw/qa/extras/ooxmlexport/data/footer-margin-lost.docx new file mode 100644 index 000000000..d6a9d7bd8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/footer-margin-lost.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/footnote.docx b/sw/qa/extras/ooxmlexport/data/footnote.docx new file mode 100644 index 000000000..f5c94bd27 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/footnote.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/footnotesep.fodt b/sw/qa/extras/ooxmlexport/data/footnotesep.fodt new file mode 100644 index 000000000..f786580bb --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/footnotesep.fodt @@ -0,0 +1,86 @@ + + + + 2020-02-06T14:04:13.1522835722020-02-06T14:08:19.939509466PT4M8S1LibreOfficeDev/7.0.0.0.alpha0$Linux_X86_64 LibreOffice_project/d2eff4b08869dd15b025c5801896e0332b14ba59 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + foo + 2 + bar + + + diff --git a/sw/qa/extras/ooxmlexport/data/frame-wrap-auto.docx b/sw/qa/extras/ooxmlexport/data/frame-wrap-auto.docx new file mode 100644 index 000000000..6ad7fe059 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/frame-wrap-auto.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/frame.fodt b/sw/qa/extras/ooxmlexport/data/frame.fodt new file mode 100644 index 000000000..c474b8de5 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/frame.fodt @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + opaque + + + + solid + + + + transparent + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/frame_size_export.docx b/sw/qa/extras/ooxmlexport/data/frame_size_export.docx new file mode 100644 index 000000000..86147f311 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/frame_size_export.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/glossaryWithEmail.docx b/sw/qa/extras/ooxmlexport/data/glossaryWithEmail.docx new file mode 100644 index 000000000..5ec375adf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/glossaryWithEmail.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/grabbag.docx b/sw/qa/extras/ooxmlexport/data/grabbag.docx new file mode 100644 index 000000000..0aca64d6e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/grabbag.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/gradient-fill-preservation.docx b/sw/qa/extras/ooxmlexport/data/gradient-fill-preservation.docx new file mode 100644 index 000000000..c9abc10d2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/gradient-fill-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/graphic-object-fliph.docx b/sw/qa/extras/ooxmlexport/data/graphic-object-fliph.docx new file mode 100644 index 000000000..2f95a2b85 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/graphic-object-fliph.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/gridbefore.docx b/sw/qa/extras/ooxmlexport/data/gridbefore.docx new file mode 100644 index 000000000..571fb48ea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/gridbefore.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/groupshape-picture.docx b/sw/qa/extras/ooxmlexport/data/groupshape-picture.docx new file mode 100644 index 000000000..4ecce56cf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/groupshape-picture.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/groupshape-rotation.docx b/sw/qa/extras/ooxmlexport/data/groupshape-rotation.docx new file mode 100644 index 000000000..d63b5d073 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/groupshape-rotation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/groupshape-smarttag.docx b/sw/qa/extras/ooxmlexport/data/groupshape-smarttag.docx new file mode 100644 index 000000000..6fc1cb2e6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/groupshape-smarttag.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/groupshape-textbox.docx b/sw/qa/extras/ooxmlexport/data/groupshape-textbox.docx new file mode 100644 index 000000000..fca71bfcf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/groupshape-textbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/groupshape-theme-font.docx b/sw/qa/extras/ooxmlexport/data/groupshape-theme-font.docx new file mode 100644 index 000000000..75011d7e5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/groupshape-theme-font.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/groupshape-trackedchanges.docx b/sw/qa/extras/ooxmlexport/data/groupshape-trackedchanges.docx new file mode 100644 index 000000000..116721f39 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/groupshape-trackedchanges.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/gutter-left.docx b/sw/qa/extras/ooxmlexport/data/gutter-left.docx new file mode 100644 index 000000000..4dc1cbf61 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/gutter-left.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/gutter-top.docx b/sw/qa/extras/ooxmlexport/data/gutter-top.docx new file mode 100644 index 000000000..d48cb2846 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/gutter-top.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/header-border.docx b/sw/qa/extras/ooxmlexport/data/header-border.docx new file mode 100644 index 000000000..18ee9f52a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/header-border.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/headerfooter-link-to-prev.docx b/sw/qa/extras/ooxmlexport/data/headerfooter-link-to-prev.docx new file mode 100644 index 000000000..cc4ddc89b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/headerfooter-link-to-prev.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/hello.docm b/sw/qa/extras/ooxmlexport/data/hello.docm new file mode 100644 index 000000000..a00aa58e7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/hello.docm differ diff --git a/sw/qa/extras/ooxmlexport/data/hello.docx b/sw/qa/extras/ooxmlexport/data/hello.docx new file mode 100644 index 000000000..d5d8d43eb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/hello.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/hidemark.docx b/sw/qa/extras/ooxmlexport/data/hidemark.docx new file mode 100644 index 000000000..4a273d603 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/hidemark.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/hyperlink-field.odt b/sw/qa/extras/ooxmlexport/data/hyperlink-field.odt new file mode 100644 index 000000000..0c265cf71 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/hyperlink-field.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/hyperlink.docx b/sw/qa/extras/ooxmlexport/data/hyperlink.docx new file mode 100644 index 000000000..5f5289790 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/hyperlink.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/hyperlinkshape.docx b/sw/qa/extras/ooxmlexport/data/hyperlinkshape.docx new file mode 100644 index 000000000..3bf4f8c5c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/hyperlinkshape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/hyphenation.odt b/sw/qa/extras/ooxmlexport/data/hyphenation.odt new file mode 100644 index 000000000..13c1afaaa Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/hyphenation.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/i120928.docx b/sw/qa/extras/ooxmlexport/data/i120928.docx new file mode 100644 index 000000000..ce78653e9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/i120928.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/i124106.docx b/sw/qa/extras/ooxmlexport/data/i124106.docx new file mode 100644 index 000000000..de1d54293 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/i124106.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/image-comment-at-char.docx b/sw/qa/extras/ooxmlexport/data/image-comment-at-char.docx new file mode 100644 index 000000000..677464de4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/image-comment-at-char.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/image-noborder.docx b/sw/qa/extras/ooxmlexport/data/image-noborder.docx new file mode 100644 index 000000000..7e0fc90d2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/image-noborder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/image_data.docx b/sw/qa/extras/ooxmlexport/data/image_data.docx new file mode 100644 index 000000000..a2f89b146 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/image_data.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/imgshadow.docx b/sw/qa/extras/ooxmlexport/data/imgshadow.docx new file mode 100644 index 000000000..efe0e9596 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/imgshadow.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/indentation.docx b/sw/qa/extras/ooxmlexport/data/indentation.docx new file mode 100644 index 000000000..cf57aaf54 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/indentation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/indents.docx b/sw/qa/extras/ooxmlexport/data/indents.docx new file mode 100644 index 000000000..b16736791 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/indents.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/inheritFirstHeader.docx b/sw/qa/extras/ooxmlexport/data/inheritFirstHeader.docx new file mode 100644 index 000000000..e3d7d20a2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/inheritFirstHeader.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/inline-groupshape.docx b/sw/qa/extras/ooxmlexport/data/inline-groupshape.docx new file mode 100644 index 000000000..def5a05b4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/inline-groupshape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/inline-sdt-header.docx b/sw/qa/extras/ooxmlexport/data/inline-sdt-header.docx new file mode 100644 index 000000000..0a6009c2c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/inline-sdt-header.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/internal_hyperlink_frame.odt b/sw/qa/extras/ooxmlexport/data/internal_hyperlink_frame.odt new file mode 100644 index 000000000..2497d5926 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/internal_hyperlink_frame.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/internal_hyperlink_ole.odt b/sw/qa/extras/ooxmlexport/data/internal_hyperlink_ole.odt new file mode 100644 index 000000000..844cf1be6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/internal_hyperlink_ole.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/internal_hyperlink_region.odt b/sw/qa/extras/ooxmlexport/data/internal_hyperlink_region.odt new file mode 100644 index 000000000..abec2c5a8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/internal_hyperlink_region.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/internal_hyperlink_table.odt b/sw/qa/extras/ooxmlexport/data/internal_hyperlink_table.odt new file mode 100644 index 000000000..f3144a30e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/internal_hyperlink_table.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/invalid_date_form_field.docx b/sw/qa/extras/ooxmlexport/data/invalid_date_form_field.docx new file mode 100644 index 000000000..9dc24e768 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/invalid_date_form_field.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/kde216114-1.odt b/sw/qa/extras/ooxmlexport/data/kde216114-1.odt new file mode 100644 index 000000000..536da7253 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/kde216114-1.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/kde302504-1.odt b/sw/qa/extras/ooxmlexport/data/kde302504-1.odt new file mode 100644 index 000000000..d0b7c6017 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/kde302504-1.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/kern.docx b/sw/qa/extras/ooxmlexport/data/kern.docx new file mode 100644 index 000000000..b66130d38 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/kern.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/large-twips.docx b/sw/qa/extras/ooxmlexport/data/large-twips.docx new file mode 100644 index 000000000..6e9d82dfa Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/large-twips.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/layout-flow-alt-alone.docx b/sw/qa/extras/ooxmlexport/data/layout-flow-alt-alone.docx new file mode 100644 index 000000000..59c2db23d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/layout-flow-alt-alone.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/libreoffice.png b/sw/qa/extras/ooxmlexport/data/libreoffice.png new file mode 100644 index 000000000..437f613c1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/libreoffice.png differ diff --git a/sw/qa/extras/ooxmlexport/data/list_notcounted_indent.fodt b/sw/qa/extras/ooxmlexport/data/list_notcounted_indent.fodt new file mode 100644 index 000000000..41a1f7d17 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/list_notcounted_indent.fodt @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Foo + Blah blah blah + + Etc + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/lvlPicBulletId.docx b/sw/qa/extras/ooxmlexport/data/lvlPicBulletId.docx new file mode 100644 index 000000000..28e656bdd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/lvlPicBulletId.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/mailmerge.docx b/sw/qa/extras/ooxmlexport/data/mailmerge.docx new file mode 100644 index 000000000..7e209a1b4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/mailmerge.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/margins_from_style.docx b/sw/qa/extras/ooxmlexport/data/margins_from_style.docx new file mode 100644 index 000000000..721982458 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/margins_from_style.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-accents.docx b/sw/qa/extras/ooxmlexport/data/math-accents.docx new file mode 100644 index 000000000..b623cb556 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-accents.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-d.docx b/sw/qa/extras/ooxmlexport/data/math-d.docx new file mode 100644 index 000000000..a18afdd81 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-d.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-escape.docx b/sw/qa/extras/ooxmlexport/data/math-escape.docx new file mode 100644 index 000000000..e935a83f5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-escape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-escaping.docx b/sw/qa/extras/ooxmlexport/data/math-escaping.docx new file mode 100644 index 000000000..d51c47552 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-escaping.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-lim.docx b/sw/qa/extras/ooxmlexport/data/math-lim.docx new file mode 100644 index 000000000..6adb548ab Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-lim.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-literal.docx b/sw/qa/extras/ooxmlexport/data/math-literal.docx new file mode 100644 index 000000000..b62bd2351 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-literal.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-matrix.docx b/sw/qa/extras/ooxmlexport/data/math-matrix.docx new file mode 100644 index 000000000..d6b5b1871 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-matrix.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-mso2k7.docx b/sw/qa/extras/ooxmlexport/data/math-mso2k7.docx new file mode 100644 index 000000000..b6b16ef7c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-mso2k7.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-nary.docx b/sw/qa/extras/ooxmlexport/data/math-nary.docx new file mode 100644 index 000000000..f3bb781d6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-nary.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-overbrace_underbrace.docx b/sw/qa/extras/ooxmlexport/data/math-overbrace_underbrace.docx new file mode 100644 index 000000000..e4119f66f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-overbrace_underbrace.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-overstrike.docx b/sw/qa/extras/ooxmlexport/data/math-overstrike.docx new file mode 100644 index 000000000..9809edc8e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-overstrike.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-placeholders.docx b/sw/qa/extras/ooxmlexport/data/math-placeholders.docx new file mode 100644 index 000000000..1c32c048f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-placeholders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-rad.docx b/sw/qa/extras/ooxmlexport/data/math-rad.docx new file mode 100644 index 000000000..39194dcca Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-rad.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-subscripts.docx b/sw/qa/extras/ooxmlexport/data/math-subscripts.docx new file mode 100644 index 000000000..038925f63 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-subscripts.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/math-vertical_stacks.docx b/sw/qa/extras/ooxmlexport/data/math-vertical_stacks.docx new file mode 100644 index 000000000..50dfab0ec Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/math-vertical_stacks.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/mathtype.docx b/sw/qa/extras/ooxmlexport/data/mathtype.docx new file mode 100644 index 000000000..bf60f43b2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/mathtype.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/mce-nested.docx b/sw/qa/extras/ooxmlexport/data/mce-nested.docx new file mode 100644 index 000000000..907ac080c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/mce-nested.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/mce-wpg.docx b/sw/qa/extras/ooxmlexport/data/mce-wpg.docx new file mode 100644 index 000000000..bd0d84681 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/mce-wpg.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/mce.docx b/sw/qa/extras/ooxmlexport/data/mce.docx new file mode 100644 index 000000000..d4790de41 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/mce.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/missing-path.docx b/sw/qa/extras/ooxmlexport/data/missing-path.docx new file mode 100644 index 000000000..8d75e9f63 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/missing-path.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/missing_newline.odt b/sw/qa/extras/ooxmlexport/data/missing_newline.odt new file mode 100644 index 000000000..b0f10ade8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/missing_newline.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/mso-spt180.docx b/sw/qa/extras/ooxmlexport/data/mso-spt180.docx new file mode 100644 index 000000000..bf3a801a9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/mso-spt180.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/msobrightnesscontrast.docx b/sw/qa/extras/ooxmlexport/data/msobrightnesscontrast.docx new file mode 100644 index 000000000..132f23575 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/msobrightnesscontrast.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/multi-column-line-separator-SAVED.docx b/sw/qa/extras/ooxmlexport/data/multi-column-line-separator-SAVED.docx new file mode 100644 index 000000000..96458833b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/multi-column-line-separator-SAVED.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/multi-column-separator-with-line.docx b/sw/qa/extras/ooxmlexport/data/multi-column-separator-with-line.docx new file mode 100644 index 000000000..c19ed697b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/multi-column-separator-with-line.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/multi-page-toc.docx b/sw/qa/extras/ooxmlexport/data/multi-page-toc.docx new file mode 100644 index 000000000..5b5b5949d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/multi-page-toc.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n592908-frame.docx b/sw/qa/extras/ooxmlexport/data/n592908-frame.docx new file mode 100644 index 000000000..ff59cacba Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n592908-frame.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n592908-picture.docx b/sw/qa/extras/ooxmlexport/data/n592908-picture.docx new file mode 100644 index 000000000..2766d3691 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n592908-picture.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n652364.docx b/sw/qa/extras/ooxmlexport/data/n652364.docx new file mode 100644 index 000000000..0845509e8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n652364.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n693238.docx b/sw/qa/extras/ooxmlexport/data/n693238.docx new file mode 100644 index 000000000..5bcda0fff Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n693238.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n705956-1.docx b/sw/qa/extras/ooxmlexport/data/n705956-1.docx new file mode 100644 index 000000000..edff3bac4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n705956-1.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n705956-2.docx b/sw/qa/extras/ooxmlexport/data/n705956-2.docx new file mode 100644 index 000000000..138818523 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n705956-2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n747461.docx b/sw/qa/extras/ooxmlexport/data/n747461.docx new file mode 100644 index 000000000..1064e5db0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n747461.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n750255.docx b/sw/qa/extras/ooxmlexport/data/n750255.docx new file mode 100644 index 000000000..a0c737002 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n750255.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n750935.docx b/sw/qa/extras/ooxmlexport/data/n750935.docx new file mode 100644 index 000000000..0dd01592d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n750935.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n751054.docx b/sw/qa/extras/ooxmlexport/data/n751054.docx new file mode 100644 index 000000000..49d7d6af9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n751054.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n751117.docx b/sw/qa/extras/ooxmlexport/data/n751117.docx new file mode 100644 index 000000000..17cc9c53d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n751117.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n764005.docx b/sw/qa/extras/ooxmlexport/data/n764005.docx new file mode 100644 index 000000000..1c0dd9d07 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n764005.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n766481.docx b/sw/qa/extras/ooxmlexport/data/n766481.docx new file mode 100644 index 000000000..e1521ec82 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n766481.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n766487.docx b/sw/qa/extras/ooxmlexport/data/n766487.docx new file mode 100644 index 000000000..85eda0e7e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n766487.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n775906.docx b/sw/qa/extras/ooxmlexport/data/n775906.docx new file mode 100644 index 000000000..6b6dd1a6b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n775906.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n777337.docx b/sw/qa/extras/ooxmlexport/data/n777337.docx new file mode 100644 index 000000000..8bb377dcf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n777337.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n778828.docx b/sw/qa/extras/ooxmlexport/data/n778828.docx new file mode 100644 index 000000000..ad2e22d17 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n778828.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n778836.docx b/sw/qa/extras/ooxmlexport/data/n778836.docx new file mode 100644 index 000000000..ccd89e85b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n778836.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n779630.docx b/sw/qa/extras/ooxmlexport/data/n779630.docx new file mode 100644 index 000000000..97812d66c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n779630.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n779642.docx b/sw/qa/extras/ooxmlexport/data/n779642.docx new file mode 100644 index 000000000..2fe9a1766 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n779642.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n779834.docx b/sw/qa/extras/ooxmlexport/data/n779834.docx new file mode 100644 index 000000000..24b6db1a4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n779834.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n779941.docx b/sw/qa/extras/ooxmlexport/data/n779941.docx new file mode 100644 index 000000000..9889d81e2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n779941.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n780563.docx b/sw/qa/extras/ooxmlexport/data/n780563.docx new file mode 100644 index 000000000..508dc7474 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n780563.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n780843.docx b/sw/qa/extras/ooxmlexport/data/n780843.docx new file mode 100644 index 000000000..9b92f79aa Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n780843.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n780843b.docx b/sw/qa/extras/ooxmlexport/data/n780843b.docx new file mode 100644 index 000000000..2ba9ab2c6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n780843b.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n780853.docx b/sw/qa/extras/ooxmlexport/data/n780853.docx new file mode 100644 index 000000000..fed8276fb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n780853.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n782345.docx b/sw/qa/extras/ooxmlexport/data/n782345.docx new file mode 100644 index 000000000..f25709fed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n782345.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n783638.docx b/sw/qa/extras/ooxmlexport/data/n783638.docx new file mode 100644 index 000000000..93b587b92 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n783638.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n785767.docx b/sw/qa/extras/ooxmlexport/data/n785767.docx new file mode 100644 index 000000000..db356769b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n785767.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n789482.docx b/sw/qa/extras/ooxmlexport/data/n789482.docx new file mode 100644 index 000000000..493e8ee04 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n789482.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n792778.docx b/sw/qa/extras/ooxmlexport/data/n792778.docx new file mode 100644 index 000000000..d9541d4cc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n792778.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n793262.docx b/sw/qa/extras/ooxmlexport/data/n793262.docx new file mode 100644 index 000000000..7f2d2e0a8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n793262.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n793998.docx b/sw/qa/extras/ooxmlexport/data/n793998.docx new file mode 100644 index 000000000..fc96e2e97 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n793998.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n816593.docx b/sw/qa/extras/ooxmlexport/data/n816593.docx new file mode 100644 index 000000000..7d784e69d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n816593.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n820509.docx b/sw/qa/extras/ooxmlexport/data/n820509.docx new file mode 100644 index 000000000..bfaea9075 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n820509.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/n822175.odt b/sw/qa/extras/ooxmlexport/data/n822175.odt new file mode 100644 index 000000000..d49a59194 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n822175.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/n830205.docx b/sw/qa/extras/ooxmlexport/data/n830205.docx new file mode 100644 index 000000000..89cf1d843 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n830205.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/negative-cell-margin-twips.docx b/sw/qa/extras/ooxmlexport/data/negative-cell-margin-twips.docx new file mode 100644 index 000000000..3ae73db5c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/negative-cell-margin-twips.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/nested-text-frames.odt b/sw/qa/extras/ooxmlexport/data/nested-text-frames.odt new file mode 100644 index 000000000..d2106f980 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/nested-text-frames.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/nestedAlternateContent.docx b/sw/qa/extras/ooxmlexport/data/nestedAlternateContent.docx new file mode 100644 index 000000000..5b6b03c1a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/nestedAlternateContent.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/no-numlevel-but-indented.odt b/sw/qa/extras/ooxmlexport/data/no-numlevel-but-indented.odt new file mode 100644 index 000000000..e435acdad Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/no-numlevel-but-indented.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/noDefault.docx b/sw/qa/extras/ooxmlexport/data/noDefault.docx new file mode 100644 index 000000000..56bc26691 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/noDefault.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/non_ascii_link.docx b/sw/qa/extras/ooxmlexport/data/non_ascii_link.docx new file mode 100644 index 000000000..345a55b5c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/non_ascii_link.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/nonbmpchar.docx b/sw/qa/extras/ooxmlexport/data/nonbmpchar.docx new file mode 100644 index 000000000..a6b5d416c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/nonbmpchar.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/num-override-lvltext.docx b/sw/qa/extras/ooxmlexport/data/num-override-lvltext.docx new file mode 100644 index 000000000..fe3142d54 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/num-override-lvltext.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/num-override-start.docx b/sw/qa/extras/ooxmlexport/data/num-override-start.docx new file mode 100644 index 000000000..b57a02cde Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/num-override-start.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/num-parent-style.docx b/sw/qa/extras/ooxmlexport/data/num-parent-style.docx new file mode 100644 index 000000000..4b8c657af Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/num-parent-style.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/number-portion-format.odt b/sw/qa/extras/ooxmlexport/data/number-portion-format.odt new file mode 100644 index 000000000..66f3b175b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/number-portion-format.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/numbering-font.docx b/sw/qa/extras/ooxmlexport/data/numbering-font.docx new file mode 100644 index 000000000..ccbbd9ed8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/numbering-font.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/numbering1.docx b/sw/qa/extras/ooxmlexport/data/numbering1.docx new file mode 100644 index 000000000..55b4af3e8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/numbering1.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/numlist-zhcn.odt b/sw/qa/extras/ooxmlexport/data/numlist-zhcn.odt new file mode 100644 index 000000000..0ced2b63a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/numlist-zhcn.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/numlist-zhtw.odt b/sw/qa/extras/ooxmlexport/data/numlist-zhtw.odt new file mode 100644 index 000000000..62a729d51 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/numlist-zhtw.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/object_cross_reference.odt b/sw/qa/extras/ooxmlexport/data/object_cross_reference.odt new file mode 100644 index 000000000..31fdb2b01 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/object_cross_reference.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/ooo106020-1.odt b/sw/qa/extras/ooxmlexport/data/ooo106020-1.odt new file mode 100644 index 000000000..9cc774b17 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooo106020-1.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/ooo34469-1.odt b/sw/qa/extras/ooxmlexport/data/ooo34469-1.odt new file mode 100644 index 000000000..7cf031fb2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooo34469-1.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/ooo39250-1-min.rtf b/sw/qa/extras/ooxmlexport/data/ooo39250-1-min.rtf new file mode 100644 index 000000000..df1467e4f --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/ooo39250-1-min.rtf @@ -0,0 +1,42 @@ +{\rtf1\ansi\ansicpg1250\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1060\deflangfe1060{\fonttbl{\f0\froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\f1\fswiss\fcharset238\fprq2{\*\panose 020b0604020202020204}Arial;}{\f40\froman\fcharset0\fprq2 Times New Roman;}{\f39\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f41\froman\fcharset161\fprq2 Times New Roman Greek;} +{\f42\froman\fcharset162\fprq2 Times New Roman Tur;}{\f43\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f44\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f45\froman\fcharset186\fprq2 Times New Roman Baltic;} +{\f46\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f50\fswiss\fcharset0\fprq2 Arial;}{\f49\fswiss\fcharset204\fprq2 Arial Cyr;}{\f51\fswiss\fcharset161\fprq2 Arial Greek;}{\f52\fswiss\fcharset162\fprq2 Arial Tur;} +{\f53\fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f54\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f55\fswiss\fcharset186\fprq2 Arial Baltic;}{\f56\fswiss\fcharset163\fprq2 Arial (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;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1060\langfe1060\cgrid\langnp1060\langfenp1060 \snext0 Normal;}{\*\cs10 \additive +\ssemihidden Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv +\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid3551688\rsid4459474} +{\*\generator Microsoft Word 11.0.6359;}{\info{\author robi01}{\doccomm Produced by: PsQRFilters V2.11 for QuickReport (www.pragnaan.com)}{\operator robi01}{\creatim\yr2004\mo12\dy16\hr12\min51}{\revtim\yr2004\mo12\dy16\hr12\min51}{\version2}{\edmins1} +{\nofpages1}{\nofwords256}{\nofchars1465}{\nofcharsws1718}{\vern24703}}\paperw11906\paperh16838\margl567\margr567\margt283\margb283 \widowctrl\ftnbj\aenddoc\hyphhotz425\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120 +\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\nolnhtadjtbl\rsidroot3551688 \fet0\sectd \linex0\headery0\footery0\colsx708\sectdefaultcl\sftnbj {\*\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 \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1060\langfe1060\cgrid\langnp1060\langfenp1060 {\lang1024\langfe1024\noproof\insrsid3551688 +} +{\f1\insrsid3551688 \par } + +\pard \ql \li0\ri0\nowidctlpar\pvpg\phpg\posx702\posy11927\absw1095\faauto\rin0\lin0\itap0 {\f1\fs16\cf1\insrsid3551688 +\par } +\pard \ql \li0\ri0\nowidctlpar\pvpg\phpg\posx1782\posy11927\absw1695\faauto\rin0\lin0\itap0 {\lang1024\langfe1024\noproof\insrsid3551688 +} + +\pard \qr \li0\ri0\nowidctlpar\pvpg\phpg\posx7347\posy11492\absw1785\faauto\rin0\lin0\itap0 {\b\f1\fs16\cf1\insrsid3551688 Za pla\'e8ilo: } + +{\lang1024\langfe1024\noproof\insrsid3551688 +{\shp{\*\shpinst\shpleft687\shptop12452\shpright11248\shpbottom13593\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz7\shplid1033{\sp{\sn shapeType}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}} +{\sp{\sn lTxid}{\sv 65536}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn lineWidth}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fShadow}{\sv 0}} +{\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}}{\shptxt \pard\plain \qc \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 +\fs24\lang1060\langfe1060\cgrid\langnp1060\langfenp1060 {\b\f1\fs16\expnd-1\expndtw-6\insrsid3551688 +\par +\par Pla\'e8ilo izvr\'9aite na transakcijski ra\'e8un NLB in se sklicujte na \'9atevilko predra\'e8una +\par Do popolnega pla\'e8ila ostaja predmet pogodbe last podjetja TI, d.o.o. }{\f1\fs16\expnd-1\expndtw-6\insrsid3551688 +\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\f1\fs16\expnd-1\expndtw-6\insrsid3551688 +\par }{\f1\insrsid3551688 _}}}{\shprslt{\*\do\dobxpage\dobypage\dodhgt7\dptxbx\dptxlrtb{\dptxbxtext\pard\plain \qc \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1060\langfe1060\cgrid\langnp1060\langfenp1060 {\b\f1\fs16\expnd-1\expndtw-6\insrsid3551688 +\par +\par Pla\'e8ilo izvr\'9aite na transakcijski ra\'e8un NLB in se sklicujte na \'9atevilko predra\'e8una +\par Do popolnega pla\'e8ila ostaja predmet pogodbe last podjetja TI, d.o.o. }{\f1\fs16\expnd-1\expndtw-6\insrsid3551688 +\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\f1\fs16\expnd-1\expndtw-6\insrsid3551688 +\par }{\f1\insrsid3551688 _}}\dpx687\dpy12452\dpxsize10561\dpysize1141\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}} + +} diff --git a/sw/qa/extras/ooxmlexport/data/ooo39845-7.odt b/sw/qa/extras/ooxmlexport/data/ooo39845-7.odt new file mode 100644 index 000000000..ee8d13935 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooo39845-7.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/ooo47778-3.odt b/sw/qa/extras/ooxmlexport/data/ooo47778-3.odt new file mode 100644 index 000000000..69005b11e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooo47778-3.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/ooo47778-4.odt b/sw/qa/extras/ooxmlexport/data/ooo47778-4.odt new file mode 100644 index 000000000..ae6b56b8c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooo47778-4.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/ooo67471-2.odt b/sw/qa/extras/ooxmlexport/data/ooo67471-2.odt new file mode 100644 index 000000000..82daa5776 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooo67471-2.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/ooo72950-1.odt b/sw/qa/extras/ooxmlexport/data/ooo72950-1.odt new file mode 100644 index 000000000..df0ac9182 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooo72950-1.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/ooo96040-2.odt b/sw/qa/extras/ooxmlexport/data/ooo96040-2.odt new file mode 100644 index 000000000..35a1858e5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooo96040-2.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/ooxml-triangle.docx b/sw/qa/extras/ooxmlexport/data/ooxml-triangle.docx new file mode 100644 index 000000000..4279fbfb0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooxml-triangle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/open-as-read-only.docx b/sw/qa/extras/ooxmlexport/data/open-as-read-only.docx new file mode 100644 index 000000000..057c67ff6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/open-as-read-only.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/outline-number-types.odt b/sw/qa/extras/ooxmlexport/data/outline-number-types.odt new file mode 100644 index 000000000..2232ad64c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/outline-number-types.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/page-background.docx b/sw/qa/extras/ooxmlexport/data/page-background.docx new file mode 100644 index 000000000..8c1f2ebdb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/page-background.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/page-border-shadow.docx b/sw/qa/extras/ooxmlexport/data/page-border-shadow.docx new file mode 100644 index 000000000..65a2273f6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/page-border-shadow.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/page-borders-export-case-2.docx b/sw/qa/extras/ooxmlexport/data/page-borders-export-case-2.docx new file mode 100644 index 000000000..f06471ecb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/page-borders-export-case-2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/page-break-before.docx b/sw/qa/extras/ooxmlexport/data/page-break-before.docx new file mode 100644 index 000000000..99d8c3a5d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/page-break-before.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/page-content-bottom.docx b/sw/qa/extras/ooxmlexport/data/page-content-bottom.docx new file mode 100644 index 000000000..f955586f3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/page-content-bottom.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/page-graphic-background.odt b/sw/qa/extras/ooxmlexport/data/page-graphic-background.odt new file mode 100644 index 000000000..15050e630 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/page-graphic-background.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/pageBreak_after.odt b/sw/qa/extras/ooxmlexport/data/pageBreak_after.odt new file mode 100644 index 000000000..c3096b58a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/pageBreak_after.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/pagerelsize.docx b/sw/qa/extras/ooxmlexport/data/pagerelsize.docx new file mode 100644 index 000000000..3b6c1ff44 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/pagerelsize.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/para-adjust-distribute.docx b/sw/qa/extras/ooxmlexport/data/para-adjust-distribute.docx new file mode 100644 index 000000000..5389a7537 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/para-adjust-distribute.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/para-auto-spacing.docx b/sw/qa/extras/ooxmlexport/data/para-auto-spacing.docx new file mode 100644 index 000000000..3cc8bd6fb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/para-auto-spacing.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/para-shading.docx b/sw/qa/extras/ooxmlexport/data/para-shading.docx new file mode 100644 index 000000000..9c2af1ad5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/para-shading.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/para-shadow.docx b/sw/qa/extras/ooxmlexport/data/para-shadow.docx new file mode 100644 index 000000000..d35d5f958 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/para-shadow.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/para-style-num-level.docx b/sw/qa/extras/ooxmlexport/data/para-style-num-level.docx new file mode 100644 index 000000000..2de0c50db Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/para-style-num-level.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/paragraph-mark-nonempty.odt b/sw/qa/extras/ooxmlexport/data/paragraph-mark-nonempty.odt new file mode 100644 index 000000000..b12cbf607 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/paragraph-mark-nonempty.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/paragraph-mark.docx b/sw/qa/extras/ooxmlexport/data/paragraph-mark.docx new file mode 100644 index 000000000..4636e4d36 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/paragraph-mark.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/paragraph-mark2.docx b/sw/qa/extras/ooxmlexport/data/paragraph-mark2.docx new file mode 100644 index 000000000..a465813dc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/paragraph-mark2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/paragraph-sdt.docx b/sw/qa/extras/ooxmlexport/data/paragraph-sdt.docx new file mode 100644 index 000000000..c86f599ed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/paragraph-sdt.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/paragraphWithComments.docx b/sw/qa/extras/ooxmlexport/data/paragraphWithComments.docx new file mode 100644 index 000000000..84a6f20a1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/paragraphWithComments.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/parasplit-on-section-border.odt b/sw/qa/extras/ooxmlexport/data/parasplit-on-section-border.odt new file mode 100644 index 000000000..8a6e4aeb4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/parasplit-on-section-border.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/picture-artistic-effects-preservation.docx b/sw/qa/extras/ooxmlexport/data/picture-artistic-effects-preservation.docx new file mode 100644 index 000000000..85f31d8c3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/picture-artistic-effects-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/picture-effects-preservation.docx b/sw/qa/extras/ooxmlexport/data/picture-effects-preservation.docx new file mode 100644 index 000000000..d26def49f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/picture-effects-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/picture-with-schemecolor.docx b/sw/qa/extras/ooxmlexport/data/picture-with-schemecolor.docx new file mode 100644 index 000000000..bfee0e141 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/picture-with-schemecolor.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/picture-wrap-polygon.docx b/sw/qa/extras/ooxmlexport/data/picture-wrap-polygon.docx new file mode 100644 index 000000000..f858a05ad Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/picture-wrap-polygon.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/pictureWatermark.docx b/sw/qa/extras/ooxmlexport/data/pictureWatermark.docx new file mode 100644 index 000000000..b526ecf37 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/pictureWatermark.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/picture_colormode_black_white.odt b/sw/qa/extras/ooxmlexport/data/picture_colormode_black_white.odt new file mode 100644 index 000000000..b2166bdd3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/picture_colormode_black_white.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/picture_colormode_grayscale.docx b/sw/qa/extras/ooxmlexport/data/picture_colormode_grayscale.docx new file mode 100644 index 000000000..2bc6458ed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/picture_colormode_grayscale.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/picture_colormode_watermark.odt b/sw/qa/extras/ooxmlexport/data/picture_colormode_watermark.odt new file mode 100644 index 000000000..70dd5e908 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/picture_colormode_watermark.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/plausable-border.docx b/sw/qa/extras/ooxmlexport/data/plausable-border.docx new file mode 100644 index 000000000..c6f049fe2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/plausable-border.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/position-and-rotation.docx b/sw/qa/extras/ooxmlexport/data/position-and-rotation.docx new file mode 100644 index 000000000..d883ad32e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/position-and-rotation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/preserve_Z_field_TOC.docx b/sw/qa/extras/ooxmlexport/data/preserve_Z_field_TOC.docx new file mode 100644 index 000000000..63ae40287 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/preserve_Z_field_TOC.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/preset-shape.docx b/sw/qa/extras/ooxmlexport/data/preset-shape.docx new file mode 100644 index 000000000..922b906e2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/preset-shape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/protectedform.docx b/sw/qa/extras/ooxmlexport/data/protectedform.docx new file mode 100644 index 000000000..a67d88006 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/protectedform.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/quicktables.docx b/sw/qa/extras/ooxmlexport/data/quicktables.docx new file mode 100644 index 000000000..5060d3dba Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/quicktables.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/rel-size-round.docx b/sw/qa/extras/ooxmlexport/data/rel-size-round.docx new file mode 100644 index 000000000..ccd076a15 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/rel-size-round.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/relative-link.docx b/sw/qa/extras/ooxmlexport/data/relative-link.docx new file mode 100644 index 000000000..c3688f3e8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/relative-link.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/relorientation.docx b/sw/qa/extras/ooxmlexport/data/relorientation.docx new file mode 100644 index 000000000..22a04538b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/relorientation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/rhbz1180114.docx b/sw/qa/extras/ooxmlexport/data/rhbz1180114.docx new file mode 100644 index 000000000..23009ebbd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/rhbz1180114.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/rhbz988516.docx b/sw/qa/extras/ooxmlexport/data/rhbz988516.docx new file mode 100644 index 000000000..38e2dcff3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/rhbz988516.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/rot180-flipv.docx b/sw/qa/extras/ooxmlexport/data/rot180-flipv.docx new file mode 100644 index 000000000..2a8bb1967 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/rot180-flipv.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/rot270-flipv.docx b/sw/qa/extras/ooxmlexport/data/rot270-flipv.docx new file mode 100644 index 000000000..0aa19e08a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/rot270-flipv.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/rot90-fliph.docx b/sw/qa/extras/ooxmlexport/data/rot90-fliph.docx new file mode 100644 index 000000000..c2a916d80 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/rot90-fliph.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/rotated_shape.fodt b/sw/qa/extras/ooxmlexport/data/rotated_shape.fodt new file mode 100644 index 000000000..fce84f93e --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/rotated_shape.fodt @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Foo + + + iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAAXNSR0IArs4c6QAAAAZiS0dE + AP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJBhI0A6HXrrIAAABl + SURBVDjLY/z//z8DtQATMYokl7D8p4phMIOIMZCJFBcRMpCJVK/hM5CJnDDCJc9EbmBjU8dE + jkG41DPhM+h5zB9GfHx0fTgjAJtGfOIMDAwMLMQoItZAJgYqglHDhpNhjNQsaQHF4y3hS/bS + HgAAAABJRU5ErkJggg== + + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/rprchange_closed.docx b/sw/qa/extras/ooxmlexport/data/rprchange_closed.docx new file mode 100644 index 000000000..ff53871e9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/rprchange_closed.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/rtl-gutter.docx b/sw/qa/extras/ooxmlexport/data/rtl-gutter.docx new file mode 100644 index 000000000..d6b28e5cb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/rtl-gutter.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/rubyhyperlink.fodt b/sw/qa/extras/ooxmlexport/data/rubyhyperlink.fodt new file mode 100644 index 000000000..a201d7c34 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/rubyhyperlink.fodt @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + barquux + foobarquuxbaz + foobarquuxbaz + foobarquuxbaz + foobarquuxbaz + foobarquuxbaz + foobarquuxbaz + foobarquuxbaz + foobarquuxbaz + + + diff --git a/sw/qa/extras/ooxmlexport/data/sample.dotx b/sw/qa/extras/ooxmlexport/data/sample.dotx new file mode 100644 index 000000000..c0f4062c1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sample.dotx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-2-para.docx b/sw/qa/extras/ooxmlexport/data/sdt-2-para.docx new file mode 100644 index 000000000..b6d6565d6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-2-para.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-2-run.docx b/sw/qa/extras/ooxmlexport/data/sdt-2-run.docx new file mode 100644 index 000000000..6063ebc41 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-2-run.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-alias.docx b/sw/qa/extras/ooxmlexport/data/sdt-alias.docx new file mode 100644 index 000000000..f46ef693a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-alias.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-before-field.docx b/sw/qa/extras/ooxmlexport/data/sdt-before-field.docx new file mode 100644 index 000000000..a83a76885 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-before-field.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-citation-run.docx b/sw/qa/extras/ooxmlexport/data/sdt-citation-run.docx new file mode 100644 index 000000000..cd97f934a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-citation-run.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-company-multipara.docx b/sw/qa/extras/ooxmlexport/data/sdt-company-multipara.docx new file mode 100644 index 000000000..96d25ff75 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-company-multipara.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-date-duplicate.docx b/sw/qa/extras/ooxmlexport/data/sdt-date-duplicate.docx new file mode 100644 index 000000000..038ab111d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-date-duplicate.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-header.docx b/sw/qa/extras/ooxmlexport/data/sdt-header.docx new file mode 100644 index 000000000..6a4bdfb2d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-header.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docx b/sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docx new file mode 100644 index 000000000..8330291af Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sdt-run-picture.docx b/sw/qa/extras/ooxmlexport/data/sdt-run-picture.docx new file mode 100644 index 000000000..fa2d57c2b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-run-picture.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/section_break_numbering.docx b/sw/qa/extras/ooxmlexport/data/section_break_numbering.docx new file mode 100644 index 000000000..8b5378a77 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/section_break_numbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/sectionprot.odt b/sw/qa/extras/ooxmlexport/data/sectionprot.odt new file mode 100644 index 000000000..1effc1951 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sectionprot.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/sectionprot2.odt b/sw/qa/extras/ooxmlexport/data/sectionprot2.odt new file mode 100644 index 000000000..8f4a283f8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sectionprot2.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/shape-3d-effect-preservation.docx b/sw/qa/extras/ooxmlexport/data/shape-3d-effect-preservation.docx new file mode 100644 index 000000000..1e361bd4e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/shape-3d-effect-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/shape-atpage-in-table.fodt b/sw/qa/extras/ooxmlexport/data/shape-atpage-in-table.fodt new file mode 100644 index 000000000..42c9c7790 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/shape-atpage-in-table.fodt @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ABC DEF GHI + + + + + + + + + + + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/shape-effect-preservation.docx b/sw/qa/extras/ooxmlexport/data/shape-effect-preservation.docx new file mode 100644 index 000000000..f2b91ea45 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/shape-effect-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/shape-in-floattable.docx b/sw/qa/extras/ooxmlexport/data/shape-in-floattable.docx new file mode 100644 index 000000000..46af86182 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/shape-in-floattable.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/shape-theme-preservation.docx b/sw/qa/extras/ooxmlexport/data/shape-theme-preservation.docx new file mode 100644 index 000000000..134f629fb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/shape-theme-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/signature-line-all-props-set.docx b/sw/qa/extras/ooxmlexport/data/signature-line-all-props-set.docx new file mode 100644 index 000000000..2f8401bf5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/signature-line-all-props-set.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/simple-sdts.docx b/sw/qa/extras/ooxmlexport/data/simple-sdts.docx new file mode 100644 index 000000000..95c5d00a6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/simple-sdts.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/smartart.docx b/sw/qa/extras/ooxmlexport/data/smartart.docx new file mode 100644 index 000000000..7a553f425 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/smartart.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/strict-smartart.docx b/sw/qa/extras/ooxmlexport/data/strict-smartart.docx new file mode 100644 index 000000000..bab7c16bc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/strict-smartart.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/strict.docx b/sw/qa/extras/ooxmlexport/data/strict.docx new file mode 100644 index 000000000..b46ce94b3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/strict.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/style-inheritance.docx b/sw/qa/extras/ooxmlexport/data/style-inheritance.docx new file mode 100644 index 000000000..65ca38aed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/style-inheritance.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/symbol_chicago_list.docx b/sw/qa/extras/ooxmlexport/data/symbol_chicago_list.docx new file mode 100644 index 000000000..5d27260ca Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/symbol_chicago_list.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-alignment.docx b/sw/qa/extras/ooxmlexport/data/table-alignment.docx new file mode 100644 index 000000000..e1efaaefd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-alignment.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-auto-column-fixed-size.docx b/sw/qa/extras/ooxmlexport/data/table-auto-column-fixed-size.docx new file mode 100644 index 000000000..557edcb3c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-auto-column-fixed-size.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-auto-column-fixed-size2.docx b/sw/qa/extras/ooxmlexport/data/table-auto-column-fixed-size2.docx new file mode 100644 index 000000000..2125f09da Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-auto-column-fixed-size2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-auto-nested.docx b/sw/qa/extras/ooxmlexport/data/table-auto-nested.docx new file mode 100644 index 000000000..85f47dbba Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-auto-nested.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-black_fill.docx b/sw/qa/extras/ooxmlexport/data/table-black_fill.docx new file mode 100644 index 000000000..c9d4e2289 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-black_fill.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-borders.docx b/sw/qa/extras/ooxmlexport/data/table-borders.docx new file mode 100644 index 000000000..a18a93e79 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-borders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-btlr-center.docx b/sw/qa/extras/ooxmlexport/data/table-btlr-center.docx new file mode 100644 index 000000000..79cb53eed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-btlr-center.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-cell-margin.docx b/sw/qa/extras/ooxmlexport/data/table-cell-margin.docx new file mode 100644 index 000000000..f59a5da11 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-cell-margin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-floating-margins.docx b/sw/qa/extras/ooxmlexport/data/table-floating-margins.docx new file mode 100644 index 000000000..81f6f6cf1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-floating-margins.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-floating.docx b/sw/qa/extras/ooxmlexport/data/table-floating.docx new file mode 100644 index 000000000..1e0cb30ec Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-floating.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-pagebreak.docx b/sw/qa/extras/ooxmlexport/data/table-pagebreak.docx new file mode 100644 index 000000000..06ecf9535 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-pagebreak.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-position-14.docx b/sw/qa/extras/ooxmlexport/data/table-position-14.docx new file mode 100644 index 000000000..f59a5da11 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-position-14.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-position-15.docx b/sw/qa/extras/ooxmlexport/data/table-position-15.docx new file mode 100644 index 000000000..91fbdbef0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-position-15.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-row-data-displayed-twice.docx b/sw/qa/extras/ooxmlexport/data/table-row-data-displayed-twice.docx new file mode 100644 index 000000000..00c63d8fc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-row-data-displayed-twice.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-rtl.docx b/sw/qa/extras/ooxmlexport/data/table-rtl.docx new file mode 100644 index 000000000..90fba0b92 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-rtl.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-start-2-sdt.docx b/sw/qa/extras/ooxmlexport/data/table-start-2-sdt.docx new file mode 100644 index 000000000..d3bf3bc5d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-start-2-sdt.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-style-border-export.docx b/sw/qa/extras/ooxmlexport/data/table-style-border-export.docx new file mode 100644 index 000000000..eeb23ee84 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-style-border-export.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-style-border.docx b/sw/qa/extras/ooxmlexport/data/table-style-border.docx new file mode 100644 index 000000000..ceb0bd8a0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-style-border.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-style-cell-back-color.docx b/sw/qa/extras/ooxmlexport/data/table-style-cell-back-color.docx new file mode 100644 index 000000000..f622b9d84 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-style-cell-back-color.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-style-conf-nested.docx b/sw/qa/extras/ooxmlexport/data/table-style-conf-nested.docx new file mode 100644 index 000000000..e35612add Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-style-conf-nested.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-style-parprop.docx b/sw/qa/extras/ooxmlexport/data/table-style-parprop.docx new file mode 100644 index 000000000..1c68c704e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-style-parprop.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-style-rPr-sz.docx b/sw/qa/extras/ooxmlexport/data/table-style-rPr-sz.docx new file mode 100644 index 000000000..6b6f69424 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-style-rPr-sz.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table-theme-preservation.docx b/sw/qa/extras/ooxmlexport/data/table-theme-preservation.docx new file mode 100644 index 000000000..ae4ede04b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table-theme-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table.fodt b/sw/qa/extras/ooxmlexport/data/table.fodt new file mode 100644 index 000000000..e8346ca42 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/table.fodt @@ -0,0 +1,70 @@ + + + + 2020-02-07T17:21:48.0944269292020-02-07T17:22:23.469846014PT37S1LibreOfficeDev/7.0.0.0.alpha0$Linux_X86_64 LibreOffice_project/d2eff4b08869dd15b025c5801896e0332b14ba59 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foo + + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/table.odt b/sw/qa/extras/ooxmlexport/data/table.odt new file mode 100644 index 000000000..25b2a5fea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tableCurrupt.docx b/sw/qa/extras/ooxmlexport/data/tableCurrupt.docx new file mode 100644 index 000000000..1deda7ddc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tableCurrupt.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tablePreferredWidth.docx b/sw/qa/extras/ooxmlexport/data/tablePreferredWidth.docx new file mode 100644 index 000000000..6546be9b6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tablePreferredWidth.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table_atleast.docx b/sw/qa/extras/ooxmlexport/data/table_atleast.docx new file mode 100644 index 000000000..ec751aa58 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table_atleast.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/table_cross_reference.odt b/sw/qa/extras/ooxmlexport/data/table_cross_reference.odt new file mode 100644 index 000000000..bd9c84016 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table_cross_reference.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/table_cross_reference_custom_format.odt b/sw/qa/extras/ooxmlexport/data/table_cross_reference_custom_format.odt new file mode 100644 index 000000000..cbf03d34e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table_cross_reference_custom_format.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/table_lineRule.docx b/sw/qa/extras/ooxmlexport/data/table_lineRule.docx new file mode 100644 index 000000000..d1d47ff24 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/table_lineRule.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tableborder-finedash.docx b/sw/qa/extras/ooxmlexport/data/tableborder-finedash.docx new file mode 100644 index 000000000..003167ac3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tableborder-finedash.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tblppr-shape.docx b/sw/qa/extras/ooxmlexport/data/tblppr-shape.docx new file mode 100644 index 000000000..470bce424 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tblppr-shape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tblr-height.docx b/sw/qa/extras/ooxmlexport/data/tblr-height.docx new file mode 100644 index 000000000..6a16c81dd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tblr-height.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tbrl-frame-vml.docx b/sw/qa/extras/ooxmlexport/data/tbrl-frame-vml.docx new file mode 100644 index 000000000..c697e5846 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tbrl-frame-vml.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tbrl-textbox.docx b/sw/qa/extras/ooxmlexport/data/tbrl-textbox.docx new file mode 100644 index 000000000..bdfcc5fff Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tbrl-textbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf100075.docx b/sw/qa/extras/ooxmlexport/data/tdf100075.docx new file mode 100644 index 000000000..6312050aa Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf100075.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf100581.odt b/sw/qa/extras/ooxmlexport/data/tdf100581.odt new file mode 100644 index 000000000..f098385e3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf100581.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf100751_arrowBothFlip.docx b/sw/qa/extras/ooxmlexport/data/tdf100751_arrowBothFlip.docx new file mode 100644 index 000000000..8a57f69ea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf100751_arrowBothFlip.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf101122_noFillForCustomShape.odt b/sw/qa/extras/ooxmlexport/data/tdf101122_noFillForCustomShape.odt new file mode 100644 index 000000000..8cc2a13f8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf101122_noFillForCustomShape.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf101589_dontSplitTable.odt b/sw/qa/extras/ooxmlexport/data/tdf101589_dontSplitTable.odt new file mode 100644 index 000000000..4a0501882 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf101589_dontSplitTable.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf102466.docx b/sw/qa/extras/ooxmlexport/data/tdf102466.docx new file mode 100644 index 000000000..68a88799c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf102466.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103001.docx b/sw/qa/extras/ooxmlexport/data/tdf103001.docx new file mode 100644 index 000000000..332d41569 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103001.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103090.odt b/sw/qa/extras/ooxmlexport/data/tdf103090.odt new file mode 100644 index 000000000..d264f255a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103090.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103389.docx b/sw/qa/extras/ooxmlexport/data/tdf103389.docx new file mode 100644 index 000000000..0ef80e6a1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103389.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103544.docx b/sw/qa/extras/ooxmlexport/data/tdf103544.docx new file mode 100644 index 000000000..2e18f2121 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103544.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103573.docx b/sw/qa/extras/ooxmlexport/data/tdf103573.docx new file mode 100644 index 000000000..34d7e3367 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103573.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103651.docx b/sw/qa/extras/ooxmlexport/data/tdf103651.docx new file mode 100644 index 000000000..de4c2d6c3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103651.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakB.docx b/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakB.docx new file mode 100644 index 000000000..a7b880d00 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakB.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakC.docx b/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakC.docx new file mode 100644 index 000000000..52767abb8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakC.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakD.docx b/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakD.docx new file mode 100644 index 000000000..37c752499 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakD.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakE.docx b/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakE.docx new file mode 100644 index 000000000..ac3eb9f7c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103975_notPageBreakE.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103976.docx b/sw/qa/extras/ooxmlexport/data/tdf103976.docx new file mode 100644 index 000000000..2081fcf07 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103976.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf103982.docx b/sw/qa/extras/ooxmlexport/data/tdf103982.docx new file mode 100644 index 000000000..13e645356 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103982.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104061_tableSectionColumns.docx b/sw/qa/extras/ooxmlexport/data/tdf104061_tableSectionColumns.docx new file mode 100644 index 000000000..b5d2a4fee Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104061_tableSectionColumns.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104115.docx b/sw/qa/extras/ooxmlexport/data/tdf104115.docx new file mode 100644 index 000000000..9236f0e3a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104115.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104150.docx b/sw/qa/extras/ooxmlexport/data/tdf104150.docx new file mode 100644 index 000000000..989884642 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104150.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104162.docx b/sw/qa/extras/ooxmlexport/data/tdf104162.docx new file mode 100644 index 000000000..61b51c007 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104162.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104348_contextMargin.docx b/sw/qa/extras/ooxmlexport/data/tdf104348_contextMargin.docx new file mode 100644 index 000000000..ef3d06533 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104348_contextMargin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104354-2.docx b/sw/qa/extras/ooxmlexport/data/tdf104354-2.docx new file mode 100644 index 000000000..5b67e015f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104354-2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104354.docx b/sw/qa/extras/ooxmlexport/data/tdf104354.docx new file mode 100644 index 000000000..d8655f4e0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104354.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104354_firstParaInSection.docx b/sw/qa/extras/ooxmlexport/data/tdf104354_firstParaInSection.docx new file mode 100644 index 000000000..79ff44f25 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104354_firstParaInSection.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104418.odt b/sw/qa/extras/ooxmlexport/data/tdf104418.odt new file mode 100644 index 000000000..12627ea28 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104418.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104420_lostParagraph.docx b/sw/qa/extras/ooxmlexport/data/tdf104420_lostParagraph.docx new file mode 100644 index 000000000..b5d998833 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104420_lostParagraph.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104539.odt b/sw/qa/extras/ooxmlexport/data/tdf104539.odt new file mode 100644 index 000000000..76be8af1f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104539.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104565_ArrowPosition.docx b/sw/qa/extras/ooxmlexport/data/tdf104565_ArrowPosition.docx new file mode 100644 index 000000000..514eeddba Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104565_ArrowPosition.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104707_urlComment.odt b/sw/qa/extras/ooxmlexport/data/tdf104707_urlComment.odt new file mode 100644 index 000000000..4c63093fb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104707_urlComment.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104713_undefinedStyles.docx b/sw/qa/extras/ooxmlexport/data/tdf104713_undefinedStyles.docx new file mode 100644 index 000000000..5114a0693 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104713_undefinedStyles.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104797.docx b/sw/qa/extras/ooxmlexport/data/tdf104797.docx new file mode 100644 index 000000000..6e52190ce Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104797.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf104823.docx b/sw/qa/extras/ooxmlexport/data/tdf104823.docx new file mode 100644 index 000000000..4a354b848 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104823.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf105095.docx b/sw/qa/extras/ooxmlexport/data/tdf105095.docx new file mode 100644 index 000000000..0a6a7a2ac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf105095.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf105215.docx b/sw/qa/extras/ooxmlexport/data/tdf105215.docx new file mode 100644 index 000000000..e464d460b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf105215.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf105444.docx b/sw/qa/extras/ooxmlexport/data/tdf105444.docx new file mode 100644 index 000000000..a6e0ea873 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf105444.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf105485.docx b/sw/qa/extras/ooxmlexport/data/tdf105485.docx new file mode 100644 index 000000000..be8a10e41 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf105485.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf105490_negativeMargins.docx b/sw/qa/extras/ooxmlexport/data/tdf105490_negativeMargins.docx new file mode 100644 index 000000000..6acb9f383 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf105490_negativeMargins.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf105688.docx b/sw/qa/extras/ooxmlexport/data/tdf105688.docx new file mode 100644 index 000000000..55a2972d3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf105688.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf105875_VmlShapeRotationWithFlip.docx b/sw/qa/extras/ooxmlexport/data/tdf105875_VmlShapeRotationWithFlip.docx new file mode 100644 index 000000000..e6512e075 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf105875_VmlShapeRotationWithFlip.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106001-2.odt b/sw/qa/extras/ooxmlexport/data/tdf106001-2.odt new file mode 100644 index 000000000..36d2650f4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106001-2.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106001.docx b/sw/qa/extras/ooxmlexport/data/tdf106001.docx new file mode 100644 index 000000000..efe4104cf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106001.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106062_nonHangingFootnote.odt b/sw/qa/extras/ooxmlexport/data/tdf106062_nonHangingFootnote.odt new file mode 100644 index 000000000..af5e225ea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106062_nonHangingFootnote.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106132.docx b/sw/qa/extras/ooxmlexport/data/tdf106132.docx new file mode 100644 index 000000000..e34289814 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106132.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106174_rtlParaAlign.docx b/sw/qa/extras/ooxmlexport/data/tdf106174_rtlParaAlign.docx new file mode 100644 index 000000000..a222f5881 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106174_rtlParaAlign.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106492.docx b/sw/qa/extras/ooxmlexport/data/tdf106492.docx new file mode 100644 index 000000000..72ff4be5d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106492.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106541_noinheritChapterNumbering.odt b/sw/qa/extras/ooxmlexport/data/tdf106541_noinheritChapterNumbering.odt new file mode 100644 index 000000000..2408ecf55 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106541_noinheritChapterNumbering.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106690-cell.docx b/sw/qa/extras/ooxmlexport/data/tdf106690-cell.docx new file mode 100644 index 000000000..e2ea6f4b0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106690-cell.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106690.docx b/sw/qa/extras/ooxmlexport/data/tdf106690.docx new file mode 100644 index 000000000..b233ef81c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106690.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106724.docx b/sw/qa/extras/ooxmlexport/data/tdf106724.docx new file mode 100644 index 000000000..3cce6ea7c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106724.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106843.fodt b/sw/qa/extras/ooxmlexport/data/tdf106843.fodt new file mode 100644 index 000000000..37a97489a --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf106843.fodt @@ -0,0 +1,43 @@ + + + + + + h/jtkVcSX/xNqeBqe4ARrYClP+E= + + + + + + + + + Ismeretlen szerző + 2018-12-03T20:35:00 + + + + + + + Ismeretlen szerző + 2018-12-03T20:34:58 + + + + + + + + + + + + Par1Par2 + + Format this... + Par3 + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf106953.docx b/sw/qa/extras/ooxmlexport/data/tdf106953.docx new file mode 100644 index 000000000..31dc0e28e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106953.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106970.docx b/sw/qa/extras/ooxmlexport/data/tdf106970.docx new file mode 100644 index 000000000..8a534558b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106970.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf106974_int32Crop.docx b/sw/qa/extras/ooxmlexport/data/tdf106974_int32Crop.docx new file mode 100644 index 000000000..e73cf5e28 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106974_int32Crop.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107020.docx b/sw/qa/extras/ooxmlexport/data/tdf107020.docx new file mode 100644 index 000000000..9c6cf6d95 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107020.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107033.docx b/sw/qa/extras/ooxmlexport/data/tdf107033.docx new file mode 100644 index 000000000..f4e08a3d3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107033.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107035.docx b/sw/qa/extras/ooxmlexport/data/tdf107035.docx new file mode 100644 index 000000000..a8ab045b6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107035.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107104.docx b/sw/qa/extras/ooxmlexport/data/tdf107104.docx new file mode 100644 index 000000000..2f8c87d8d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107104.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107111.docx b/sw/qa/extras/ooxmlexport/data/tdf107111.docx new file mode 100644 index 000000000..f89436fda Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107111.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107119.docx b/sw/qa/extras/ooxmlexport/data/tdf107119.docx new file mode 100644 index 000000000..98de4f2ac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107119.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107359-char-pitch.docx b/sw/qa/extras/ooxmlexport/data/tdf107359-char-pitch.docx new file mode 100644 index 000000000..970d722d3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107359-char-pitch.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107618.doc b/sw/qa/extras/ooxmlexport/data/tdf107618.doc new file mode 100644 index 000000000..8a6972f45 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107618.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107626.odt b/sw/qa/extras/ooxmlexport/data/tdf107626.odt new file mode 100644 index 000000000..b7c8489cd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107626.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107684.odt b/sw/qa/extras/ooxmlexport/data/tdf107684.odt new file mode 100644 index 000000000..0ca7c53d2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107684.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107837.odt b/sw/qa/extras/ooxmlexport/data/tdf107837.odt new file mode 100644 index 000000000..a31a70c52 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107837.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107889.docx b/sw/qa/extras/ooxmlexport/data/tdf107889.docx new file mode 100644 index 000000000..452c4aa13 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107889.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf107969.docx b/sw/qa/extras/ooxmlexport/data/tdf107969.docx new file mode 100644 index 000000000..e674bcb5d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf107969.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf108269.docm b/sw/qa/extras/ooxmlexport/data/tdf108269.docm new file mode 100644 index 000000000..44e943531 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108269.docm differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf108350_noFontdefaults.docx b/sw/qa/extras/ooxmlexport/data/tdf108350_noFontdefaults.docx new file mode 100644 index 000000000..ea8172279 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108350_noFontdefaults.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf108493.docx b/sw/qa/extras/ooxmlexport/data/tdf108493.docx new file mode 100644 index 000000000..f1a51525e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108493.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf108496.docx b/sw/qa/extras/ooxmlexport/data/tdf108496.docx new file mode 100644 index 000000000..123d9e0a6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108496.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf108505.docx b/sw/qa/extras/ooxmlexport/data/tdf108505.docx new file mode 100644 index 000000000..50ebc3770 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108505.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf108682.docx b/sw/qa/extras/ooxmlexport/data/tdf108682.docx new file mode 100644 index 000000000..1364025b8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108682.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf108944_footnoteSeparator2.odt b/sw/qa/extras/ooxmlexport/data/tdf108944_footnoteSeparator2.odt new file mode 100644 index 000000000..17e0c6029 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108944_footnoteSeparator2.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf108973_backgroundTextbox.docx b/sw/qa/extras/ooxmlexport/data/tdf108973_backgroundTextbox.docx new file mode 100644 index 000000000..177cb5b77 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108973_backgroundTextbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf108973_foregroundTextbox.docx b/sw/qa/extras/ooxmlexport/data/tdf108973_foregroundTextbox.docx new file mode 100644 index 000000000..fb81047c3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108973_foregroundTextbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf109063.docx b/sw/qa/extras/ooxmlexport/data/tdf109063.docx new file mode 100644 index 000000000..70f4fe4e2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf109063.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf109184.docx b/sw/qa/extras/ooxmlexport/data/tdf109184.docx new file mode 100644 index 000000000..36e5232ae Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf109184.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf109306.docx b/sw/qa/extras/ooxmlexport/data/tdf109306.docx new file mode 100644 index 000000000..d46049f83 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf109306.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf109310_endnoteStyleForMSO.docx b/sw/qa/extras/ooxmlexport/data/tdf109310_endnoteStyleForMSO.docx new file mode 100644 index 000000000..9949b98d5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf109310_endnoteStyleForMSO.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf111964.docx b/sw/qa/extras/ooxmlexport/data/tdf111964.docx new file mode 100644 index 000000000..7cb85a1d8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf111964.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf112103_tablebgnofill.docx b/sw/qa/extras/ooxmlexport/data/tdf112103_tablebgnofill.docx new file mode 100644 index 000000000..cee8756ec Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf112103_tablebgnofill.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf112118.docx b/sw/qa/extras/ooxmlexport/data/tdf112118.docx new file mode 100644 index 000000000..3ddb06839 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf112118.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf112169.odt b/sw/qa/extras/ooxmlexport/data/tdf112169.odt new file mode 100644 index 000000000..51bb97f2e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf112169.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf112287.docx b/sw/qa/extras/ooxmlexport/data/tdf112287.docx new file mode 100644 index 000000000..3464e2898 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf112287.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf112312_AutoFitForLegacyShapes.odt b/sw/qa/extras/ooxmlexport/data/tdf112312_AutoFitForLegacyShapes.odt new file mode 100644 index 000000000..b5ccb3562 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf112312_AutoFitForLegacyShapes.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf112352_nextPageColumns.docx b/sw/qa/extras/ooxmlexport/data/tdf112352_nextPageColumns.docx new file mode 100644 index 000000000..f14681dd5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf112352_nextPageColumns.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf112446_frameStyle.docx b/sw/qa/extras/ooxmlexport/data/tdf112446_frameStyle.docx new file mode 100644 index 000000000..7c92ae36f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf112446_frameStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf112694.docx b/sw/qa/extras/ooxmlexport/data/tdf112694.docx new file mode 100644 index 000000000..f629a388e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf112694.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf113183.docx b/sw/qa/extras/ooxmlexport/data/tdf113183.docx new file mode 100644 index 000000000..197f483ba Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf113183.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf113258.docx b/sw/qa/extras/ooxmlexport/data/tdf113258.docx new file mode 100644 index 000000000..d60a2ee64 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf113258.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf113258_noBeforeAutospacing.docx b/sw/qa/extras/ooxmlexport/data/tdf113258_noBeforeAutospacing.docx new file mode 100644 index 000000000..de74eb226 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf113258_noBeforeAutospacing.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf113399.doc b/sw/qa/extras/ooxmlexport/data/tdf113399.doc new file mode 100644 index 000000000..1f3ddc993 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf113399.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf113547.docx b/sw/qa/extras/ooxmlexport/data/tdf113547.docx new file mode 100644 index 000000000..7b35ad72b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf113547.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf113608_runAwayNumbering.docx b/sw/qa/extras/ooxmlexport/data/tdf113608_runAwayNumbering.docx new file mode 100644 index 000000000..f31cc8015 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf113608_runAwayNumbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf113849_evenAndOddHeaders.odt b/sw/qa/extras/ooxmlexport/data/tdf113849_evenAndOddHeaders.odt new file mode 100644 index 000000000..d9aa0ae23 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf113849_evenAndOddHeaders.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf114308.docx b/sw/qa/extras/ooxmlexport/data/tdf114308.docx new file mode 100644 index 000000000..0796200fc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf114308.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf114703.docx b/sw/qa/extras/ooxmlexport/data/tdf114703.docx new file mode 100644 index 000000000..116b56a2b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf114703.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf114882.docx b/sw/qa/extras/ooxmlexport/data/tdf114882.docx new file mode 100644 index 000000000..8663f6b15 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf114882.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf115030.docx b/sw/qa/extras/ooxmlexport/data/tdf115030.docx new file mode 100644 index 000000000..71b983295 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf115030.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf115094v3.docx b/sw/qa/extras/ooxmlexport/data/tdf115094v3.docx new file mode 100644 index 000000000..6c7535f7b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf115094v3.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf115212.docx b/sw/qa/extras/ooxmlexport/data/tdf115212.docx new file mode 100644 index 000000000..1a44fbd77 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf115212.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf115557.docx b/sw/qa/extras/ooxmlexport/data/tdf115557.docx new file mode 100644 index 000000000..1edceac48 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf115557.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf115719.docx b/sw/qa/extras/ooxmlexport/data/tdf115719.docx new file mode 100644 index 000000000..99806d4dc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf115719.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf115719b.docx b/sw/qa/extras/ooxmlexport/data/tdf115719b.docx new file mode 100644 index 000000000..f3e3925c8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf115719b.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf115861.docx b/sw/qa/extras/ooxmlexport/data/tdf115861.docx new file mode 100644 index 000000000..f42a7bad2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf115861.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116084.docx b/sw/qa/extras/ooxmlexport/data/tdf116084.docx new file mode 100644 index 000000000..61a9fdb13 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116084.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116194.docx b/sw/qa/extras/ooxmlexport/data/tdf116194.docx new file mode 100644 index 000000000..feec3ee98 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116194.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116371.odt b/sw/qa/extras/ooxmlexport/data/tdf116371.odt new file mode 100644 index 000000000..257696616 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116371.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116394.docx b/sw/qa/extras/ooxmlexport/data/tdf116394.docx new file mode 100644 index 000000000..b152a0f3d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116394.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116410.docx b/sw/qa/extras/ooxmlexport/data/tdf116410.docx new file mode 100644 index 000000000..5352a233e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116410.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116436_rowFill.odt b/sw/qa/extras/ooxmlexport/data/tdf116436_rowFill.odt new file mode 100644 index 000000000..45f4a1c54 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116436_rowFill.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116801.docx b/sw/qa/extras/ooxmlexport/data/tdf116801.docx new file mode 100644 index 000000000..f904546cf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116801.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116883.docx b/sw/qa/extras/ooxmlexport/data/tdf116883.docx new file mode 100644 index 000000000..52a9c4221 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116883.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116976.docx b/sw/qa/extras/ooxmlexport/data/tdf116976.docx new file mode 100644 index 000000000..70492a4af Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116976.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf116985.docx b/sw/qa/extras/ooxmlexport/data/tdf116985.docx new file mode 100644 index 000000000..2a8e20238 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf116985.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf117137.docx b/sw/qa/extras/ooxmlexport/data/tdf117137.docx new file mode 100644 index 000000000..1c2cc92b2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf117137.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf117297_tableStyle.docx b/sw/qa/extras/ooxmlexport/data/tdf117297_tableStyle.docx new file mode 100644 index 000000000..57260f816 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf117297_tableStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf117504_numberingIndent.docx b/sw/qa/extras/ooxmlexport/data/tdf117504_numberingIndent.docx new file mode 100644 index 000000000..d86b0b4f1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf117504_numberingIndent.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf117805.odt b/sw/qa/extras/ooxmlexport/data/tdf117805.odt new file mode 100644 index 000000000..828384b36 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf117805.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf117988.docx b/sw/qa/extras/ooxmlexport/data/tdf117988.docx new file mode 100644 index 000000000..5c92f209a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf117988.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118169.docx b/sw/qa/extras/ooxmlexport/data/tdf118169.docx new file mode 100644 index 000000000..2510fb3e5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118169.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118242.odt b/sw/qa/extras/ooxmlexport/data/tdf118242.odt new file mode 100644 index 000000000..14b468d75 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118242.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118361_RTLfootnoteSeparator.docx b/sw/qa/extras/ooxmlexport/data/tdf118361_RTLfootnoteSeparator.docx new file mode 100644 index 000000000..8545cbf25 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118361_RTLfootnoteSeparator.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118393.odt b/sw/qa/extras/ooxmlexport/data/tdf118393.odt new file mode 100644 index 000000000..ff8d54009 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118393.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118521_marginsLR.docx b/sw/qa/extras/ooxmlexport/data/tdf118521_marginsLR.docx new file mode 100644 index 000000000..66170ede4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118521_marginsLR.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118535.odt b/sw/qa/extras/ooxmlexport/data/tdf118535.odt new file mode 100644 index 000000000..146c6f471 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118535.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118682.fodt b/sw/qa/extras/ooxmlexport/data/tdf118682.fodt new file mode 100644 index 000000000..b80074592 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf118682.fodt @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 6 + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf118691.docx b/sw/qa/extras/ooxmlexport/data/tdf118691.docx new file mode 100644 index 000000000..ce6c6c5cf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118691.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118701.docx b/sw/qa/extras/ooxmlexport/data/tdf118701.docx new file mode 100644 index 000000000..8fb26669d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118701.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118702.odt b/sw/qa/extras/ooxmlexport/data/tdf118702.odt new file mode 100644 index 000000000..d55099242 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118702.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118812_tableStyles-comprehensive.docx b/sw/qa/extras/ooxmlexport/data/tdf118812_tableStyles-comprehensive.docx new file mode 100644 index 000000000..e2cbffc20 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118812_tableStyles-comprehensive.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118947_tableStyle.docx b/sw/qa/extras/ooxmlexport/data/tdf118947_tableStyle.docx new file mode 100644 index 000000000..b5c55f6f3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118947_tableStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf118947_tableStyle2.docx b/sw/qa/extras/ooxmlexport/data/tdf118947_tableStyle2.docx new file mode 100644 index 000000000..7c0825feb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118947_tableStyle2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119037.odt b/sw/qa/extras/ooxmlexport/data/tdf119037.odt new file mode 100644 index 000000000..b795b6b34 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119037.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119054.docx b/sw/qa/extras/ooxmlexport/data/tdf119054.docx new file mode 100644 index 000000000..9c3657c24 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119054.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119143.docx b/sw/qa/extras/ooxmlexport/data/tdf119143.docx new file mode 100644 index 000000000..be0bc03f7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119143.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119188_list_margin_in_cell.docx b/sw/qa/extras/ooxmlexport/data/tdf119188_list_margin_in_cell.docx new file mode 100644 index 000000000..02b538685 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119188_list_margin_in_cell.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119201.docx b/sw/qa/extras/ooxmlexport/data/tdf119201.docx new file mode 100644 index 000000000..d454d6731 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119201.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119760_positionCellBorder.docx b/sw/qa/extras/ooxmlexport/data/tdf119760_positionCellBorder.docx new file mode 100644 index 000000000..17a570e06 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119760_positionCellBorder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119760_tableInTablePosition.docx b/sw/qa/extras/ooxmlexport/data/tdf119760_tableInTablePosition.docx new file mode 100644 index 000000000..0456fe206 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119760_tableInTablePosition.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119800.docx b/sw/qa/extras/ooxmlexport/data/tdf119800.docx new file mode 100644 index 000000000..35c4108d3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119800.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119809.docx b/sw/qa/extras/ooxmlexport/data/tdf119809.docx new file mode 100644 index 000000000..977938253 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119809.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf119952_negativeMargins.docx b/sw/qa/extras/ooxmlexport/data/tdf119952_negativeMargins.docx new file mode 100644 index 000000000..9b5a98d3f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf119952_negativeMargins.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120224_textControlCrossRef.docx b/sw/qa/extras/ooxmlexport/data/tdf120224_textControlCrossRef.docx new file mode 100644 index 000000000..c76bbd691 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120224_textControlCrossRef.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120315.docx b/sw/qa/extras/ooxmlexport/data/tdf120315.docx new file mode 100644 index 000000000..d3943ea0b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120315.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120338.docx b/sw/qa/extras/ooxmlexport/data/tdf120338.docx new file mode 100644 index 000000000..94e0023ce Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120338.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120344_FontTypes.docx b/sw/qa/extras/ooxmlexport/data/tdf120344_FontTypes.docx new file mode 100644 index 000000000..74bcd59e2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120344_FontTypes.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120394.docx b/sw/qa/extras/ooxmlexport/data/tdf120394.docx new file mode 100644 index 000000000..39bd5886c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120394.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120412_400PercentSubscript.docx b/sw/qa/extras/ooxmlexport/data/tdf120412_400PercentSubscript.docx new file mode 100644 index 000000000..526d7d2c1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120412_400PercentSubscript.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120511_eatenSection.docx b/sw/qa/extras/ooxmlexport/data/tdf120511_eatenSection.docx new file mode 100644 index 000000000..6a6d6f17b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120511_eatenSection.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120760_ZOrderInHeader.docx b/sw/qa/extras/ooxmlexport/data/tdf120760_ZOrderInHeader.docx new file mode 100644 index 000000000..77a6d48dd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120760_ZOrderInHeader.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120852_readOnlyProtection.docx b/sw/qa/extras/ooxmlexport/data/tdf120852_readOnlyProtection.docx new file mode 100644 index 000000000..02869aa5a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120852_readOnlyProtection.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf120852_readOnlyUnProtected.docx b/sw/qa/extras/ooxmlexport/data/tdf120852_readOnlyUnProtected.docx new file mode 100644 index 000000000..143799ddb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120852_readOnlyUnProtected.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121045.docx b/sw/qa/extras/ooxmlexport/data/tdf121045.docx new file mode 100644 index 000000000..271aca1ec Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121045.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121176.docx b/sw/qa/extras/ooxmlexport/data/tdf121176.docx new file mode 100644 index 000000000..f95c023b0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121176.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF.odt b/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF.odt new file mode 100644 index 000000000..392fae1b6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF2.doc b/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF2.doc new file mode 100644 index 000000000..56a33d260 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF2.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121441.docx b/sw/qa/extras/ooxmlexport/data/tdf121441.docx new file mode 100644 index 000000000..d4c67feb5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121441.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121456.docx b/sw/qa/extras/ooxmlexport/data/tdf121456.docx new file mode 100644 index 000000000..a65870a9b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121456.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121456_tabsOffset.odt b/sw/qa/extras/ooxmlexport/data/tdf121456_tabsOffset.odt new file mode 100644 index 000000000..ff8d54009 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121456_tabsOffset.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121597.odt b/sw/qa/extras/ooxmlexport/data/tdf121597.odt new file mode 100644 index 000000000..760b46e76 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121597.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121658.docx b/sw/qa/extras/ooxmlexport/data/tdf121658.docx new file mode 100644 index 000000000..fe42b5cde Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121658.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121659_loseColumnBrNextToShape.docx b/sw/qa/extras/ooxmlexport/data/tdf121659_loseColumnBrNextToShape.docx new file mode 100644 index 000000000..1fda1422e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121659_loseColumnBrNextToShape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121661.docx b/sw/qa/extras/ooxmlexport/data/tdf121661.docx new file mode 100644 index 000000000..dfd2f291e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121661.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121663.docx b/sw/qa/extras/ooxmlexport/data/tdf121663.docx new file mode 100644 index 000000000..dd2614169 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121663.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121665_back2backColumnBreaks.docx b/sw/qa/extras/ooxmlexport/data/tdf121665_back2backColumnBreaks.docx new file mode 100644 index 000000000..e9173a9ac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121665_back2backColumnBreaks.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121666_lostPage.docx b/sw/qa/extras/ooxmlexport/data/tdf121666_lostPage.docx new file mode 100644 index 000000000..195f574d1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121666_lostPage.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121669_equalColumns.docx b/sw/qa/extras/ooxmlexport/data/tdf121669_equalColumns.docx new file mode 100644 index 000000000..4f962e1bd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121669_equalColumns.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121670_columnsInSectionsOnly.docx b/sw/qa/extras/ooxmlexport/data/tdf121670_columnsInSectionsOnly.docx new file mode 100644 index 000000000..d8ba10544 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121670_columnsInSectionsOnly.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121784.docx b/sw/qa/extras/ooxmlexport/data/tdf121784.docx new file mode 100644 index 000000000..30faeb284 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121784.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121867.odt b/sw/qa/extras/ooxmlexport/data/tdf121867.odt new file mode 100644 index 000000000..361121d23 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121867.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf122186_input_list.odt b/sw/qa/extras/ooxmlexport/data/tdf122186_input_list.odt new file mode 100644 index 000000000..76a6289f7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf122186_input_list.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf122201_editUnprotectedText.odt b/sw/qa/extras/ooxmlexport/data/tdf122201_editUnprotectedText.odt new file mode 100644 index 000000000..217c8c38a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf122201_editUnprotectedText.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf122342.docx b/sw/qa/extras/ooxmlexport/data/tdf122342.docx new file mode 100644 index 000000000..0c7ecd67a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf122342.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf122563.docx b/sw/qa/extras/ooxmlexport/data/tdf122563.docx new file mode 100644 index 000000000..69168a382 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf122563.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf122594.docx b/sw/qa/extras/ooxmlexport/data/tdf122594.docx new file mode 100644 index 000000000..847d8ef59 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf122594.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf122648.docx b/sw/qa/extras/ooxmlexport/data/tdf122648.docx new file mode 100644 index 000000000..900a9f30b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf122648.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123054.docx b/sw/qa/extras/ooxmlexport/data/tdf123054.docx new file mode 100644 index 000000000..d857479d5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123054.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123104.docx b/sw/qa/extras/ooxmlexport/data/tdf123104.docx new file mode 100644 index 000000000..73cad8617 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123104.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123116_oversizedRowSplit.odt b/sw/qa/extras/ooxmlexport/data/tdf123116_oversizedRowSplit.odt new file mode 100644 index 000000000..aafc27ae2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123116_oversizedRowSplit.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123243.docx b/sw/qa/extras/ooxmlexport/data/tdf123243.docx new file mode 100644 index 000000000..9519a2a14 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123243.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123262_textFootnoteSeparators.docx b/sw/qa/extras/ooxmlexport/data/tdf123262_textFootnoteSeparators.docx new file mode 100644 index 000000000..ceccb767e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123262_textFootnoteSeparators.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123324_testRelativeAnchorHeightFromTopMarginHasHeader.docx b/sw/qa/extras/ooxmlexport/data/tdf123324_testRelativeAnchorHeightFromTopMarginHasHeader.docx new file mode 100644 index 000000000..b978eec99 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123324_testRelativeAnchorHeightFromTopMarginHasHeader.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123324_testRelativeAnchorHeightFromTopMarginNoHeader.docx b/sw/qa/extras/ooxmlexport/data/tdf123324_testRelativeAnchorHeightFromTopMarginNoHeader.docx new file mode 100644 index 000000000..70c2793cb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123324_testRelativeAnchorHeightFromTopMarginNoHeader.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123346_ArrowMarker.docx b/sw/qa/extras/ooxmlexport/data/tdf123346_ArrowMarker.docx new file mode 100644 index 000000000..770bab263 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123346_ArrowMarker.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123351_UnderlineGroupSapeText.docx b/sw/qa/extras/ooxmlexport/data/tdf123351_UnderlineGroupSapeText.docx new file mode 100644 index 000000000..8726f7ee6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123351_UnderlineGroupSapeText.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123354.fodt b/sw/qa/extras/ooxmlexport/data/tdf123354.fodt new file mode 100644 index 000000000..5e75b2129 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf123354.fodt @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + -10 + + + 0 + + + 10 + + + + + 10 + + + 0 + + + 10 + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf123355.docx b/sw/qa/extras/ooxmlexport/data/tdf123355.docx new file mode 100644 index 000000000..da36db29f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123355.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123356.fodt b/sw/qa/extras/ooxmlexport/data/tdf123356.fodt new file mode 100644 index 000000000..c7dc5d1e6 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf123356.fodt @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + -10 + + + 0 + + + 10 + + + + + 3 + + + 1 + + + 4 + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf123381.docx b/sw/qa/extras/ooxmlexport/data/tdf123381.docx new file mode 100644 index 000000000..a019560d5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123381.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123382.docx b/sw/qa/extras/ooxmlexport/data/tdf123382.docx new file mode 100644 index 000000000..cac27ef51 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123382.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123386.docx b/sw/qa/extras/ooxmlexport/data/tdf123386.docx new file mode 100644 index 000000000..1278068dd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123386.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123388.docx b/sw/qa/extras/ooxmlexport/data/tdf123388.docx new file mode 100644 index 000000000..7d1da2b05 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123388.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123389.docx b/sw/qa/extras/ooxmlexport/data/tdf123389.docx new file mode 100644 index 000000000..4245464b8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123389.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123390.fodt b/sw/qa/extras/ooxmlexport/data/tdf123390.fodt new file mode 100644 index 000000000..6512425bd --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf123390.fodt @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + -10 + + + 0 + + + 10 + + + + + -1 + + + 0 + + + 1 + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf123401.fodt b/sw/qa/extras/ooxmlexport/data/tdf123401.fodt new file mode 100644 index 000000000..d0cdfe2c9 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf123401.fodt @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + 2 + + + + + 4 + + + + + 3 + + + + + 3 + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf123435.docx b/sw/qa/extras/ooxmlexport/data/tdf123435.docx new file mode 100644 index 000000000..02d8cd1e9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123435.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123460.docx b/sw/qa/extras/ooxmlexport/data/tdf123460.docx new file mode 100644 index 000000000..c3b723b4e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123460.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123569_rotWriterImage_46deg.odt b/sw/qa/extras/ooxmlexport/data/tdf123569_rotWriterImage_46deg.odt new file mode 100644 index 000000000..b452852af Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123569_rotWriterImage_46deg.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123610_handle_upright.docx b/sw/qa/extras/ooxmlexport/data/tdf123610_handle_upright.docx new file mode 100644 index 000000000..d7dc1978a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123610_handle_upright.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123621.docx b/sw/qa/extras/ooxmlexport/data/tdf123621.docx new file mode 100644 index 000000000..471b6ef71 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123621.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123622.docx b/sw/qa/extras/ooxmlexport/data/tdf123622.docx new file mode 100644 index 000000000..54ef0cbd7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123622.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123627.docx b/sw/qa/extras/ooxmlexport/data/tdf123627.docx new file mode 100644 index 000000000..a85d44000 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123627.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123628.odt b/sw/qa/extras/ooxmlexport/data/tdf123628.odt new file mode 100644 index 000000000..53ce54ad2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123628.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak.docx b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak.docx new file mode 100644 index 000000000..6f7b4b144 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak2.docx b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak2.docx new file mode 100644 index 000000000..a876bea84 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak3.docx b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak3.docx new file mode 100644 index 000000000..1bcc335fd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak3.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak4.docx b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak4.docx new file mode 100644 index 000000000..3a9d86ee2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak4.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123642.docx b/sw/qa/extras/ooxmlexport/data/tdf123642.docx new file mode 100644 index 000000000..9817093e0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123642.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123705.docx b/sw/qa/extras/ooxmlexport/data/tdf123705.docx new file mode 100644 index 000000000..46e053fd4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123705.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123757.docx b/sw/qa/extras/ooxmlexport/data/tdf123757.docx new file mode 100644 index 000000000..6cfc8210c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123757.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123873.docx b/sw/qa/extras/ooxmlexport/data/tdf123873.docx new file mode 100644 index 000000000..b1de7f71f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123873.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf123912_protectedForm.odt b/sw/qa/extras/ooxmlexport/data/tdf123912_protectedForm.odt new file mode 100644 index 000000000..34e87467e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123912_protectedForm.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124367.docx b/sw/qa/extras/ooxmlexport/data/tdf124367.docx new file mode 100644 index 000000000..0a1356dd0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124367.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124384.docx b/sw/qa/extras/ooxmlexport/data/tdf124384.docx new file mode 100644 index 000000000..a41be4b11 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124384.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124399_SingleCellTableBorders.docx b/sw/qa/extras/ooxmlexport/data/tdf124399_SingleCellTableBorders.docx new file mode 100644 index 000000000..edb93b76e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124399_SingleCellTableBorders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124491.docx b/sw/qa/extras/ooxmlexport/data/tdf124491.docx new file mode 100644 index 000000000..dad4d7c54 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124491.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124594.docx b/sw/qa/extras/ooxmlexport/data/tdf124594.docx new file mode 100644 index 000000000..27abe1841 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124594.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124600b.docx b/sw/qa/extras/ooxmlexport/data/tdf124600b.docx new file mode 100644 index 000000000..aa25ada91 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124600b.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124604.docx b/sw/qa/extras/ooxmlexport/data/tdf124604.docx new file mode 100644 index 000000000..1bac640ec Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124604.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124637_sectionMargin.docx b/sw/qa/extras/ooxmlexport/data/tdf124637_sectionMargin.docx new file mode 100644 index 000000000..19aa819ac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124637_sectionMargin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124678_no_leading_paragraph.odt b/sw/qa/extras/ooxmlexport/data/tdf124678_no_leading_paragraph.odt new file mode 100644 index 000000000..a694ff613 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124678_no_leading_paragraph.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124678_with_leading_paragraph.odt b/sw/qa/extras/ooxmlexport/data/tdf124678_with_leading_paragraph.odt new file mode 100644 index 000000000..cb14c8ea4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124678_with_leading_paragraph.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf124986.docx b/sw/qa/extras/ooxmlexport/data/tdf124986.docx new file mode 100644 index 000000000..e5bb8f496 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf124986.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf125268.odt b/sw/qa/extras/ooxmlexport/data/tdf125268.odt new file mode 100644 index 000000000..ebdc20619 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf125268.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf125298_crossreflink_nonascii_charlimit.docx b/sw/qa/extras/ooxmlexport/data/tdf125298_crossreflink_nonascii_charlimit.docx new file mode 100644 index 000000000..d15739971 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf125298_crossreflink_nonascii_charlimit.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf125324.docx b/sw/qa/extras/ooxmlexport/data/tdf125324.docx new file mode 100644 index 000000000..9382e295f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf125324.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf125518.odt b/sw/qa/extras/ooxmlexport/data/tdf125518.odt new file mode 100644 index 000000000..92df094a8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf125518.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf125546.docx b/sw/qa/extras/ooxmlexport/data/tdf125546.docx new file mode 100644 index 000000000..92e3bdcd1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf125546.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf125657.docx b/sw/qa/extras/ooxmlexport/data/tdf125657.docx new file mode 100644 index 000000000..eeaad7a4b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf125657.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf125778_lostPageBreakTOX.docx b/sw/qa/extras/ooxmlexport/data/tdf125778_lostPageBreakTOX.docx new file mode 100644 index 000000000..dd5d323e5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf125778_lostPageBreakTOX.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf125894.docx b/sw/qa/extras/ooxmlexport/data/tdf125894.docx new file mode 100644 index 000000000..1214f2c09 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf125894.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf125936_numberingSuperscript.docx b/sw/qa/extras/ooxmlexport/data/tdf125936_numberingSuperscript.docx new file mode 100644 index 000000000..eb856fb3b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf125936_numberingSuperscript.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126206.docx b/sw/qa/extras/ooxmlexport/data/tdf126206.docx new file mode 100644 index 000000000..166125e7a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126206.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126245.docx b/sw/qa/extras/ooxmlexport/data/tdf126245.docx new file mode 100644 index 000000000..7cdc26143 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126245.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126287.docx b/sw/qa/extras/ooxmlexport/data/tdf126287.docx new file mode 100644 index 000000000..cf2250b9f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126287.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126363_LineWidthRounding.docx b/sw/qa/extras/ooxmlexport/data/tdf126363_LineWidthRounding.docx new file mode 100644 index 000000000..180383ec6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126363_LineWidthRounding.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126590.docx b/sw/qa/extras/ooxmlexport/data/tdf126590.docx new file mode 100644 index 000000000..147db4565 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126590.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126723.docx b/sw/qa/extras/ooxmlexport/data/tdf126723.docx new file mode 100644 index 000000000..297ea322f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126723.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126768.docx b/sw/qa/extras/ooxmlexport/data/tdf126768.docx new file mode 100644 index 000000000..7a3440e79 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126768.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126792.odt b/sw/qa/extras/ooxmlexport/data/tdf126792.odt new file mode 100644 index 000000000..7eb43e78a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126792.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126795_TabsRelativeToIndent0.odt b/sw/qa/extras/ooxmlexport/data/tdf126795_TabsRelativeToIndent0.odt new file mode 100644 index 000000000..e650076a0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126795_TabsRelativeToIndent0.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126795_TabsRelativeToIndent1.odt b/sw/qa/extras/ooxmlexport/data/tdf126795_TabsRelativeToIndent1.odt new file mode 100644 index 000000000..da2eae76b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126795_TabsRelativeToIndent1.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf126994_lostPageBreak.docx b/sw/qa/extras/ooxmlexport/data/tdf126994_lostPageBreak.docx new file mode 100644 index 000000000..9025ce652 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf126994_lostPageBreak.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127085.docx b/sw/qa/extras/ooxmlexport/data/tdf127085.docx new file mode 100644 index 000000000..65556fe38 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127085.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127116.odt b/sw/qa/extras/ooxmlexport/data/tdf127116.odt new file mode 100644 index 000000000..2825b34c0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127116.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127316_autoEscapement.odt b/sw/qa/extras/ooxmlexport/data/tdf127316_autoEscapement.odt new file mode 100644 index 000000000..95987d456 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127316_autoEscapement.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127339.docx b/sw/qa/extras/ooxmlexport/data/tdf127339.docx new file mode 100644 index 000000000..7f0239ddb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127339.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127362.odt b/sw/qa/extras/ooxmlexport/data/tdf127362.odt new file mode 100644 index 000000000..488f1528f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127362.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127579.odt b/sw/qa/extras/ooxmlexport/data/tdf127579.odt new file mode 100644 index 000000000..a35fb47a0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127579.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127605.odt b/sw/qa/extras/ooxmlexport/data/tdf127605.odt new file mode 100644 index 000000000..583f7fdee Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127605.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127741.docx b/sw/qa/extras/ooxmlexport/data/tdf127741.docx new file mode 100644 index 000000000..1bedb9ade Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127741.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127814.docx b/sw/qa/extras/ooxmlexport/data/tdf127814.docx new file mode 100644 index 000000000..10ed2348f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127814.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127864.docx b/sw/qa/extras/ooxmlexport/data/tdf127864.docx new file mode 100644 index 000000000..a9e59d933 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127864.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf127925.odt b/sw/qa/extras/ooxmlexport/data/tdf127925.odt new file mode 100644 index 000000000..b91e48f05 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf127925.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf128156.docx b/sw/qa/extras/ooxmlexport/data/tdf128156.docx new file mode 100644 index 000000000..b499f6e50 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf128156.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf128207.docx b/sw/qa/extras/ooxmlexport/data/tdf128207.docx new file mode 100644 index 000000000..c234ec8bc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf128207.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf128245.docx b/sw/qa/extras/ooxmlexport/data/tdf128245.docx new file mode 100644 index 000000000..618f72030 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf128245.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf128290.odt b/sw/qa/extras/ooxmlexport/data/tdf128290.odt new file mode 100644 index 000000000..81ea0c677 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf128290.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf128304.odt b/sw/qa/extras/ooxmlexport/data/tdf128304.odt new file mode 100644 index 000000000..6c5cbd120 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf128304.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf128646.docx b/sw/qa/extras/ooxmlexport/data/tdf128646.docx new file mode 100644 index 000000000..9648df35a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf128646.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf128752.docx b/sw/qa/extras/ooxmlexport/data/tdf128752.docx new file mode 100644 index 000000000..0e4929141 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf128752.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf128820.fodt b/sw/qa/extras/ooxmlexport/data/tdf128820.fodt new file mode 100644 index 000000000..576fd966e --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf128820.fodt @@ -0,0 +1,16 @@ + + + + + + + + + PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLz4 + json + + + + + + \ No newline at end of file diff --git a/sw/qa/extras/ooxmlexport/data/tdf128889.fodt b/sw/qa/extras/ooxmlexport/data/tdf128889.fodt new file mode 100644 index 000000000..6dc1c4202 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf128889.fodt @@ -0,0 +1,15 @@ + + + + + + + + + + + para1 + para2 + + + \ No newline at end of file diff --git a/sw/qa/extras/ooxmlexport/data/tdf128913.docx b/sw/qa/extras/ooxmlexport/data/tdf128913.docx new file mode 100644 index 000000000..42cc2d75d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf128913.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129242_InsideBorders.docx b/sw/qa/extras/ooxmlexport/data/tdf129242_InsideBorders.docx new file mode 100644 index 000000000..58045c971 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129242_InsideBorders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129353.docx b/sw/qa/extras/ooxmlexport/data/tdf129353.docx new file mode 100644 index 000000000..c5cf8865e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129353.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129442_RightBorder.docx b/sw/qa/extras/ooxmlexport/data/tdf129442_RightBorder.docx new file mode 100644 index 000000000..57ad24b61 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129442_RightBorder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129450_BottomBorder.docx b/sw/qa/extras/ooxmlexport/data/tdf129450_BottomBorder.docx new file mode 100644 index 000000000..df00bfe04 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129450_BottomBorder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129452_BottomBorders.docx b/sw/qa/extras/ooxmlexport/data/tdf129452_BottomBorders.docx new file mode 100644 index 000000000..399c06be1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129452_BottomBorders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129452_excessBorder.docx b/sw/qa/extras/ooxmlexport/data/tdf129452_excessBorder.docx new file mode 100644 index 000000000..2bce3ff88 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129452_excessBorder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129522_removeShadowStyle.odt b/sw/qa/extras/ooxmlexport/data/tdf129522_removeShadowStyle.odt new file mode 100644 index 000000000..7ced9fc64 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129522_removeShadowStyle.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129525.rtf b/sw/qa/extras/ooxmlexport/data/tdf129525.rtf new file mode 100644 index 000000000..1865d15ca --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf129525.rtf @@ -0,0 +1,262 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang3082\deflangfe3082\themelang3082\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma{\*\falt Times};} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};} +{\f1577\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\f1578\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}{\f1580\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};} +{\f1581\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}{\f1582\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\f1583\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};} +{\f1584\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\f1585\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}{\f1917\fbidi \froman\fcharset238\fprq2 Cambria Math CE;} +{\f1918\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f1920\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f1921\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f1924\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} +{\f1925\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f1957\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt Times};}{\f1958\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt Times};} +{\f1960\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt Times};}{\f1961\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt Times};}{\f1962\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt Times};} +{\f1963\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt Times};}{\f1964\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt Times};}{\f1965\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt Times};} +{\f1966\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt Times};}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};} +{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};} +{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};} +{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};} +{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};} +{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;} +{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} +{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};} +{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};} +{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};} +{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};} +{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};} +{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}{\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{\*\falt Times};}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};} +{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};} +{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};} +{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}}{\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\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 } +\noqfpromote {\stylesheet{\ql \li0\ri0\sa120\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 +\snext0 \sqformat \spriority0 Normal;}{\s1\qj \li0\ri0\sa120\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0 +\b\fs32\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \slink15 \sqformat heading 1;}{\s2\qj \fi-360\li360\ri0\sa120\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\adjustright\rin0\lin360\itap0 +\rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \slink16 \sqformat heading 2;}{ +\s3\qj \li0\ri0\sa120\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ai\af0\afs24\alang1025 \ltrch\fcs0 \i\fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 +\sbasedon0 \snext0 \slink17 \sqformat heading 3;}{\s4\qc \fi-360\li720\ri0\sa120\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel3\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0 +\b\fs32\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \slink18 \sqformat heading 4;}{\s5\qj \fi-720\li720\ri0\sa120\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel4\adjustright\rin0\lin720\itap0 +\rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \slink19 \sqformat heading 5;}{ +\s6\qj \fi720\li0\ri0\sa120\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 +\sbasedon0 \snext0 \slink20 \sqformat heading 6;}{\s7\qj \li720\ri0\sa120\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel6\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 +\b\fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \slink21 \sqformat heading 7;}{\s8\qj \li720\ri0\sa120\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel7\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \slink22 \sqformat heading 8;}{ +\s9\qj \fi720\li720\ri0\sa120\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel8\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 +\sbasedon0 \snext0 \slink23 \sqformat heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang3082\langfe3082\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp3082\langfenp3082 \snext11 \ssemihidden \sunhideused +Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af31503\afs32 \ltrch\fcs0 \b\fs32\lang1033\langfe0\kerning32\loch\f31502\hich\af31502\dbch\af31501\langnp1033 \sbasedon10 \slink1 \slocked \spriority9 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 +\ab\ai\af31503\afs28 \ltrch\fcs0 \b\i\fs28\lang1033\langfe0\loch\f31502\hich\af31502\dbch\af31501\langnp1033 \sbasedon10 \slink2 \slocked \ssemihidden \spriority9 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \ab\af31503\afs26 \ltrch\fcs0 +\b\fs26\lang1033\langfe0\loch\f31502\hich\af31502\dbch\af31501\langnp1033 \sbasedon10 \slink3 \slocked \ssemihidden \spriority9 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 \b\fs28\lang1033\langfe0\langnp1033 +\sbasedon10 \slink4 \slocked \ssemihidden \spriority9 Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \ab\ai\af0\afs26 \ltrch\fcs0 \b\i\fs26\lang1033\langfe0\langnp1033 \sbasedon10 \slink5 \slocked \ssemihidden \spriority9 Heading 5 Char;}{\*\cs20 +\additive \rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\lang1033\langfe0\langnp1033 \sbasedon10 \slink6 \slocked \ssemihidden \spriority9 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \fs24\lang1033\langfe0\langnp1033 +\sbasedon10 \slink7 \slocked \ssemihidden \spriority9 Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\fs24\lang1033\langfe0\langnp1033 \sbasedon10 \slink8 \slocked \ssemihidden \spriority9 Heading 8 Char;}{\*\cs23 \additive +\rtlch\fcs1 \af31503 \ltrch\fcs0 \lang1033\langfe0\loch\f31502\hich\af31502\dbch\af31501\langnp1033 \sbasedon10 \slink9 \slocked \ssemihidden \spriority9 Heading 9 Char;}{\s24\ql \li0\ri0\sa120\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 +\cbpat9 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\f38\hich\af38\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext24 \slink25 Document Map;}{\*\cs25 \additive \rtlch\fcs1 \af38\afs16 \ltrch\fcs0 +\f38\fs16\lang1033\langfe0\langnp1033 \sbasedon10 \slink24 \slocked \ssemihidden Document Map Char;}{\s26\qj \li0\ri0\sa120\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext26 \slink27 Body Text;}{\*\cs27 \additive \rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\lang1033\langfe0\langnp1033 +\sbasedon10 \slink26 \slocked \ssemihidden Body Text Char;}{\s28\qj \fi360\li0\ri0\sa120\nowidctlpar\tx0\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext28 \slink29 Body Text 2;}{\*\cs29 \additive \rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\lang1033\langfe0\langnp1033 +\sbasedon10 \slink28 \slocked \ssemihidden Body Text 2 Char;}{\s30\qc \li0\ri0\sa120\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext30 \slink31 \sqformat Title;}{\*\cs31 \additive \rtlch\fcs1 \ab\af31503\afs32 \ltrch\fcs0 +\b\fs32\lang1033\langfe0\kerning28\loch\f31502\hich\af31502\dbch\af31501\langnp1033 \sbasedon10 \slink30 \slocked \spriority10 Title Char;}{\s32\qj \fi-270\li630\ri0\sa120\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin630\itap0 \rtlch\fcs1 +\af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext32 \slink33 Body Text Indent 2;}{\*\cs33 \additive \rtlch\fcs1 \af0\afs24 \ltrch\fcs0 +\f0\fs24\lang1033\langfe0\langnp1033 \sbasedon10 \slink32 \slocked \ssemihidden Body Text Indent 2 Char;}{\s34\qj \fi-270\li720\ri0\sa120\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext34 \slink35 Body Text Indent 3;}{\*\cs35 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \f0\fs16\lang1033\langfe0\langnp1033 +\sbasedon10 \slink34 \slocked \ssemihidden Body Text Indent 3 Char;}{\s36\qc \li0\ri0\sa120\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0 +\b\i\fs28\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext36 \slink37 \sqformat Subtitle;}{\*\cs37 \additive \rtlch\fcs1 \af31503\afs24 \ltrch\fcs0 +\fs24\lang1033\langfe0\loch\f31502\hich\af31502\dbch\af31501\langnp1033 \sbasedon10 \slink36 \slocked \spriority11 Subtitle Char;}{\s38\ql \li0\ri0\sa120\nowidctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext38 \slink39 footer;}{\*\cs39 \additive \rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\lang1033\langfe0\langnp1033 +\sbasedon10 \slink38 \slocked \ssemihidden Footer Char;}{\*\cs40 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 page number;}{\s41\ql \li0\ri0\sa120\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af0\afs24\alang1025 \ltrch\fcs0 \b\caps\fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \sautoupd \spriority39 toc 1;}{\s42\ql \li245\ri0\sa120\nowidctlpar +\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin245\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \sautoupd toc 2;}{ +\s43\ql \li480\ri0\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin480\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \sautoupd +toc 3;}{\s44\ql \li720\ri0\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 +\sbasedon0 \snext0 \sautoupd toc 4;}{\s45\ql \li960\ri0\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin960\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 +\fs20\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \sautoupd toc 5;}{\s46\ql \li1200\ri0\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin1200\itap0 \rtlch\fcs1 \af0\afs20\alang1025 +\ltrch\fcs0 \fs20\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \sautoupd toc 6;}{\s47\ql \li1440\ri0\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin1440\itap0 \rtlch\fcs1 +\af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \sautoupd toc 7;}{\s48\ql \li1680\ri0\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin1680\itap0 +\rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \sautoupd toc 8;}{\s49\ql \li1920\ri0\nowidctlpar +\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin1920\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext0 \sautoupd toc 9;}{ +\s50\qj \fi-270\li1710\ri-720\sa120\widctlpar\wrapdefault\faauto\adjustright\rin-720\lin1710\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sbasedon0 \snext50 +Block Text;}}{\*\listtable{\list\listtemplateid0\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat3\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-360\li1800 +\jclisttab\tx1800\lin1800 }{\listname ;}\listid1}{\list\listtemplateid-1315301230\listsimple{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat4\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 +\ltrch\fcs0 \fbias0 \fi-720\li720\jclisttab\tx720\lin720 }{\listname ;}\listid323165344}{\list\listtemplateid-2135629362\listsimple{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af0 \ltrch\fcs0 \b\i0\fbias0 \fi-720\li720\jclisttab\tx720\lin720 }{\listname ;}\listid429664987}{\list\listtemplateid1066166024\listsimple{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelold\levelspace0\levelindent720{\leveltext\'03(\'00);}{\levelnumbers\'02;}\rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b \fi-720\li720\lin720 }{\listname ;}\listid467551770}{\list\listtemplateid67698707\listsimple{\listlevel\levelnfc1\levelnfcn1 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-720\li720\jclisttab\tx720\lin720 }{\listname ;}\listid499321070}{\list\listtemplateid67698707 +\listsimple{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-720\li720\jclisttab\tx720\lin720 }{\listname +;}\listid505092311}{\list\listtemplateid67698709\listsimple{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat10\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-360\li360 +\jclisttab\tx360\lin360 }{\listname ;}\listid1328901394}{\list\listtemplateid266515624\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 +\af0 \ltrch\fcs0 \fbias0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listname ;}\listid1822691375}{\list\listtemplateid2081336888\listsimple{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat3\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-420\li420\jclisttab\tx420\lin420 }{\listname ;}\listid1903103825}}{\*\listoverridetable{\listoverride\listid467551770\listoverridecount0\ls1}{\listoverride\listid1822691375 +\listoverridecount0\ls2}{\listoverride\listid1\listoverridecount0\ls3}{\listoverride\listid1328901394\listoverridecount0\ls4}{\listoverride\listid429664987\listoverridecount0\ls5}{\listoverride\listid505092311\listoverridecount0\ls6} +{\listoverride\listid499321070\listoverridecount0\ls7}{\listoverride\listid1903103825\listoverridecount0\ls8}{\listoverride\listid323165344\listoverridecount0\ls9}}{\*\rsidtbl \rsid1993739\rsid4991862\rsid7286274\rsid7288753}{\mmathPr\mmathFont34\mbrkBin0 +\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\title VARIFLEX MANUAL}{\author Chemistry Department}{\operator xisco}{\creatim\yr1999\mo7\dy16\hr9\min53}{\revtim\yr2020\mo4\dy20\hr14\min59} +{\printim\yr1999\mo7\dy16\hr10\min14}{\version9}{\edmins34}{\nofpages1}{\nofwords25}{\nofchars142}{\*\company }{\nofcharsws166}{\vern49247}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} +\paperw12240\paperh15840\margl1440\margr1440\margt1296\margb1296\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\hyphcaps0\horzdoc\dghspace120\dgvspace120 +\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot7286274 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0{\*\ftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 +\rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\af0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4991862 \chftnsep +\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\af0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 { +\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4991862 \chftnsepc +\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\af0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 { +\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4991862 \chftnsep +\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe3082\loch\af0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 { +\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4991862 \chftnsepc +\par }}\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\footerr \ltrpar \pard\plain \ltrpar\s38\ql \li0\ri0\sa120\nowidctlpar\tqc\tx4320\tqr\tx8640\pvpara\phmrg\posxc\posy0\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 +\ltrch\fcs0 \fs24\lang1033\langfe3082\loch\af0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 {\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs40\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 PAGE }}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 +\cs40\lang1024\langfe1024\noproof\insrsid1993739 \hich\af0\dbch\af31505\loch\f0 1}}}\sectd \ltrsect\linex0\endnhere\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs40\insrsid4991862 +\par }\pard \ltrpar\s38\ql \li0\ri0\sa120\nowidctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4991862 +\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\s41\ql \li0\ri0\sa120\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin0\itap0 +\rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\caps\fs24\lang1033\langfe3082\loch\af0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 {\field\fldedit{\*\fldinst {\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 + TOC \\o "1-3" }}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 Overv\hich\af0\dbch\af31505\loch\f0 iew\tab }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 +\caps0\lang1024\langfe1024\noproof\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 GOTOBUTTON _Toc434317063 }{\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \caps0\lang1024\langfe1024\noproof\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 + PAGEREF _Toc434317063 }}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \caps0\lang1024\langfe1024\noproof\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 3}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj }}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 +\af0 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid4991862 +\par }\pard \ltrpar\s41\ql \li0\ri0\sa120\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid1993739 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 More detailed description +\tab }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \caps0\lang1024\langfe1024\noproof\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 GOTOBUTTON _Toc434317064 }{\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 +\caps0\lang1024\langfe1024\noproof\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 PAGEREF _Toc434317064 }}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \caps0\lang1024\langfe1024\noproof\insrsid4991862 \hich\af0\dbch\af31505\loch\f0 4}}}\sectd \ltrsect +\linex0\sectdefaultcl\sftnbj }}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid4991862 +\par }}}\pard\plain \ltrpar\s41\ql \li0\ri0\sa120\nowidctlpar\tqr\tx9360\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid1993739 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 +\b\caps\fs24\lang1033\langfe3082\loch\af0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp3082 \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4991862 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdsemihidden0 \lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden0 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden0 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden0 \lsdqformat1 \lsdlocked0 heading 4;\lsdsemihidden0 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden0 \lsdqformat1 \lsdlocked0 heading 6; +\lsdsemihidden0 \lsdqformat1 \lsdlocked0 heading 7;\lsdsemihidden0 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden0 \lsdqformat1 \lsdlocked0 heading 9;\lsdunhideused1 \lsdlocked0 index 1;\lsdunhideused1 \lsdlocked0 index 2; +\lsdunhideused1 \lsdlocked0 index 3;\lsdunhideused1 \lsdlocked0 index 4;\lsdunhideused1 \lsdlocked0 index 5;\lsdunhideused1 \lsdlocked0 index 6;\lsdunhideused1 \lsdlocked0 index 7;\lsdunhideused1 \lsdlocked0 index 8;\lsdunhideused1 \lsdlocked0 index 9; +\lsdpriority39 \lsdlocked0 toc 1;\lsdunhideused1 \lsdlocked0 Normal Indent;\lsdunhideused1 \lsdlocked0 footnote text;\lsdunhideused1 \lsdlocked0 annotation text;\lsdunhideused1 \lsdlocked0 header;\lsdunhideused1 \lsdlocked0 index heading; +\lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdunhideused1 \lsdlocked0 table of figures;\lsdunhideused1 \lsdlocked0 envelope address;\lsdunhideused1 \lsdlocked0 envelope return;\lsdunhideused1 \lsdlocked0 footnote reference; +\lsdunhideused1 \lsdlocked0 annotation reference;\lsdunhideused1 \lsdlocked0 line number;\lsdunhideused1 \lsdlocked0 endnote reference;\lsdunhideused1 \lsdlocked0 endnote text;\lsdunhideused1 \lsdlocked0 table of authorities; +\lsdunhideused1 \lsdlocked0 macro;\lsdunhideused1 \lsdlocked0 toa heading;\lsdunhideused1 \lsdlocked0 List;\lsdunhideused1 \lsdlocked0 List Bullet;\lsdunhideused1 \lsdlocked0 List Number;\lsdunhideused1 \lsdlocked0 List 2; +\lsdunhideused1 \lsdlocked0 List 3;\lsdunhideused1 \lsdlocked0 List 4;\lsdunhideused1 \lsdlocked0 List 5;\lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdunhideused1 \lsdlocked0 List Bullet 3;\lsdunhideused1 \lsdlocked0 List Bullet 4; +\lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdunhideused1 \lsdlocked0 List Number 2;\lsdunhideused1 \lsdlocked0 List Number 3;\lsdunhideused1 \lsdlocked0 List Number 4;\lsdunhideused1 \lsdlocked0 List Number 5; +\lsdsemihidden0 \lsdqformat1 \lsdlocked0 Title;\lsdunhideused1 \lsdlocked0 Closing;\lsdunhideused1 \lsdlocked0 Signature;\lsdunhideused1 \lsdlocked0 Body Text Indent;\lsdunhideused1 \lsdlocked0 List Continue;\lsdunhideused1 \lsdlocked0 List Continue 2; +\lsdunhideused1 \lsdlocked0 List Continue 3;\lsdunhideused1 \lsdlocked0 List Continue 4;\lsdunhideused1 \lsdlocked0 List Continue 5;\lsdunhideused1 \lsdlocked0 Message Header;\lsdsemihidden0 \lsdqformat1 \lsdlocked0 Subtitle; +\lsdunhideused1 \lsdlocked0 Salutation;\lsdunhideused1 \lsdlocked0 Date;\lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdunhideused1 \lsdlocked0 Note Heading; +\lsdunhideused1 \lsdlocked0 Body Text 3;\lsdunhideused1 \lsdlocked0 Hyperlink;\lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdsemihidden0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdunhideused1 \lsdlocked0 Plain Text;\lsdunhideused1 \lsdlocked0 E-mail Signature;\lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdunhideused1 \lsdlocked0 Normal (Web); +\lsdunhideused1 \lsdlocked0 HTML Acronym;\lsdunhideused1 \lsdlocked0 HTML Address;\lsdunhideused1 \lsdlocked0 HTML Cite;\lsdunhideused1 \lsdlocked0 HTML Code;\lsdunhideused1 \lsdlocked0 HTML Definition;\lsdunhideused1 \lsdlocked0 HTML Keyboard; +\lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdunhideused1 \lsdlocked0 HTML Sample;\lsdunhideused1 \lsdlocked0 HTML Typewriter;\lsdunhideused1 \lsdlocked0 HTML Variable;\lsdunhideused1 \lsdlocked0 Normal Table; +\lsdunhideused1 \lsdlocked0 annotation subject;\lsdunhideused1 \lsdlocked0 No List;\lsdunhideused1 \lsdlocked0 Outline List 1;\lsdunhideused1 \lsdlocked0 Outline List 2;\lsdunhideused1 \lsdlocked0 Outline List 3;\lsdunhideused1 \lsdlocked0 Table Simple 1; +\lsdunhideused1 \lsdlocked0 Table Simple 2;\lsdunhideused1 \lsdlocked0 Table Simple 3;\lsdunhideused1 \lsdlocked0 Table Classic 1;\lsdunhideused1 \lsdlocked0 Table Classic 2;\lsdunhideused1 \lsdlocked0 Table Classic 3; +\lsdunhideused1 \lsdlocked0 Table Classic 4;\lsdunhideused1 \lsdlocked0 Table Colorful 1;\lsdunhideused1 \lsdlocked0 Table Colorful 2;\lsdunhideused1 \lsdlocked0 Table Colorful 3;\lsdunhideused1 \lsdlocked0 Table Columns 1; +\lsdunhideused1 \lsdlocked0 Table Columns 2;\lsdunhideused1 \lsdlocked0 Table Columns 3;\lsdunhideused1 \lsdlocked0 Table Columns 4;\lsdunhideused1 \lsdlocked0 Table Columns 5;\lsdunhideused1 \lsdlocked0 Table Grid 1; +\lsdunhideused1 \lsdlocked0 Table Grid 2;\lsdunhideused1 \lsdlocked0 Table Grid 3;\lsdunhideused1 \lsdlocked0 Table Grid 4;\lsdunhideused1 \lsdlocked0 Table Grid 5;\lsdunhideused1 \lsdlocked0 Table Grid 6;\lsdunhideused1 \lsdlocked0 Table Grid 7; +\lsdunhideused1 \lsdlocked0 Table Grid 8;\lsdunhideused1 \lsdlocked0 Table List 1;\lsdunhideused1 \lsdlocked0 Table List 2;\lsdunhideused1 \lsdlocked0 Table List 3;\lsdunhideused1 \lsdlocked0 Table List 4;\lsdunhideused1 \lsdlocked0 Table List 5; +\lsdunhideused1 \lsdlocked0 Table List 6;\lsdunhideused1 \lsdlocked0 Table List 7;\lsdunhideused1 \lsdlocked0 Table List 8;\lsdunhideused1 \lsdlocked0 Table 3D effects 1;\lsdunhideused1 \lsdlocked0 Table 3D effects 2; +\lsdunhideused1 \lsdlocked0 Table 3D effects 3;\lsdunhideused1 \lsdlocked0 Table Contemporary;\lsdunhideused1 \lsdlocked0 Table Elegant;\lsdunhideused1 \lsdlocked0 Table Professional;\lsdunhideused1 \lsdlocked0 Table Subtle 1; +\lsdunhideused1 \lsdlocked0 Table Subtle 2;\lsdunhideused1 \lsdlocked0 Table Web 1;\lsdunhideused1 \lsdlocked0 Table Web 2;\lsdunhideused1 \lsdlocked0 Table Web 3;\lsdunhideused1 \lsdlocked0 Balloon Text; +\lsdsemihidden0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused1 \lsdlocked0 Table Theme;\lsdsemihidden0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdpriority60 \lsdlocked0 Light Shading; +\lsdsemihidden0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdpriority64 \lsdlocked0 Medium Shading 2; +\lsdsemihidden0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdsemihidden0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdpriority72 \lsdlocked0 Colorful List; +\lsdsemihidden0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdsemihidden0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1; +\lsdsemihidden0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; +\lsdsemihidden0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdsemihidden0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdsemihidden0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; +\lsdsemihidden0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; +\lsdsemihidden0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdsemihidden0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdsemihidden0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; +\lsdsemihidden0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdpriority61 \lsdlocked0 Light List Accent 3; +\lsdsemihidden0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; +\lsdsemihidden0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; +\lsdsemihidden0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdsemihidden0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; +\lsdsemihidden0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdsemihidden0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; +\lsdsemihidden0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; +\lsdsemihidden0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdsemihidden0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; +\lsdsemihidden0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; +\lsdsemihidden0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdsemihidden0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; +\lsdsemihidden0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; +\lsdsemihidden0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdpriority61 \lsdlocked0 Light List Accent 6; +\lsdsemihidden0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; +\lsdsemihidden0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; +\lsdsemihidden0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; +\lsdsemihidden0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; +\lsdsemihidden0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference; +\lsdsemihidden0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000b09e +73861317d601feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/sw/qa/extras/ooxmlexport/data/tdf129575-directAfter.docx b/sw/qa/extras/ooxmlexport/data/tdf129575-directAfter.docx new file mode 100644 index 000000000..c9856b028 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129575-directAfter.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129575-directBefore.docx b/sw/qa/extras/ooxmlexport/data/tdf129575-directBefore.docx new file mode 100644 index 000000000..5e75ef1be Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129575-directBefore.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129575-docDefault.docx b/sw/qa/extras/ooxmlexport/data/tdf129575-docDefault.docx new file mode 100644 index 000000000..d7cdf2ec4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129575-docDefault.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129575-styleAfter.docx b/sw/qa/extras/ooxmlexport/data/tdf129575-styleAfter.docx new file mode 100644 index 000000000..97439011f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129575-styleAfter.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129582.docx b/sw/qa/extras/ooxmlexport/data/tdf129582.docx new file mode 100644 index 000000000..d160262ae Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129582.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129888dml.docx b/sw/qa/extras/ooxmlexport/data/tdf129888dml.docx new file mode 100644 index 000000000..1f6b03034 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129888dml.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf129888vml.docx b/sw/qa/extras/ooxmlexport/data/tdf129888vml.docx new file mode 100644 index 000000000..ee7c60f8a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf129888vml.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf130120.docx b/sw/qa/extras/ooxmlexport/data/tdf130120.docx new file mode 100644 index 000000000..5ca2adc76 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf130120.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf130494.docx b/sw/qa/extras/ooxmlexport/data/tdf130494.docx new file mode 100644 index 000000000..bc2050fea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf130494.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf130610_bold_in_2_styles.ott b/sw/qa/extras/ooxmlexport/data/tdf130610_bold_in_2_styles.ott new file mode 100644 index 000000000..35937d9a8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf130610_bold_in_2_styles.ott differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf130690.docx b/sw/qa/extras/ooxmlexport/data/tdf130690.docx new file mode 100644 index 000000000..ab08dd99a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf130690.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf130814.docx b/sw/qa/extras/ooxmlexport/data/tdf130814.docx new file mode 100644 index 000000000..30c17120e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf130814.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf130907.docx b/sw/qa/extras/ooxmlexport/data/tdf130907.docx new file mode 100644 index 000000000..c0c25fc89 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf130907.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131203.docx b/sw/qa/extras/ooxmlexport/data/tdf131203.docx new file mode 100644 index 000000000..2fd0dcabd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131203.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131258.docx b/sw/qa/extras/ooxmlexport/data/tdf131258.docx new file mode 100644 index 000000000..10b8f9de2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131258.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131260.docx b/sw/qa/extras/ooxmlexport/data/tdf131260.docx new file mode 100644 index 000000000..72e07abfd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131260.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131420.docx b/sw/qa/extras/ooxmlexport/data/tdf131420.docx new file mode 100644 index 000000000..360073524 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131420.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131537.odt b/sw/qa/extras/ooxmlexport/data/tdf131537.odt new file mode 100644 index 000000000..21f396368 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131537.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131539.odt b/sw/qa/extras/ooxmlexport/data/tdf131539.odt new file mode 100644 index 000000000..d0e446522 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131539.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131540.odt b/sw/qa/extras/ooxmlexport/data/tdf131540.odt new file mode 100644 index 000000000..541ab2093 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131540.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131561_necessaryBorder.docx b/sw/qa/extras/ooxmlexport/data/tdf131561_necessaryBorder.docx new file mode 100644 index 000000000..51d1c5202 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131561_necessaryBorder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131594.docx b/sw/qa/extras/ooxmlexport/data/tdf131594.docx new file mode 100644 index 000000000..009c6d56b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131594.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131775_SpacingGroupShapeText.docx b/sw/qa/extras/ooxmlexport/data/tdf131775_SpacingGroupShapeText.docx new file mode 100644 index 000000000..a7d34d6f2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131775_SpacingGroupShapeText.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131776_StrikeoutGroupShapeText.docx b/sw/qa/extras/ooxmlexport/data/tdf131776_StrikeoutGroupShapeText.docx new file mode 100644 index 000000000..3fd4ab1f5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131776_StrikeoutGroupShapeText.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131801.docx b/sw/qa/extras/ooxmlexport/data/tdf131801.docx new file mode 100644 index 000000000..61872b539 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131801.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf131922_LanguageInGroupShape.docx b/sw/qa/extras/ooxmlexport/data/tdf131922_LanguageInGroupShape.docx new file mode 100644 index 000000000..afd5ec57a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131922_LanguageInGroupShape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132149_pgBreak.odt b/sw/qa/extras/ooxmlexport/data/tdf132149_pgBreak.odt new file mode 100644 index 000000000..b88e660a7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132149_pgBreak.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132149_pgBreak2.odt b/sw/qa/extras/ooxmlexport/data/tdf132149_pgBreak2.odt new file mode 100644 index 000000000..afa7961cb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132149_pgBreak2.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132149_pgBreakB.odt b/sw/qa/extras/ooxmlexport/data/tdf132149_pgBreakB.odt new file mode 100644 index 000000000..86ea177a9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132149_pgBreakB.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132185.docx b/sw/qa/extras/ooxmlexport/data/tdf132185.docx new file mode 100644 index 000000000..955de5097 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132185.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132271.docx b/sw/qa/extras/ooxmlexport/data/tdf132271.docx new file mode 100644 index 000000000..202bfdda2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132271.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132305.docx b/sw/qa/extras/ooxmlexport/data/tdf132305.docx new file mode 100644 index 000000000..e6b9ad6b7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132305.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132475_printField.docx b/sw/qa/extras/ooxmlexport/data/tdf132475_printField.docx new file mode 100644 index 000000000..032a58d23 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132475_printField.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132483.docx b/sw/qa/extras/ooxmlexport/data/tdf132483.docx new file mode 100644 index 000000000..e4ebf4b78 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132483.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132491_UnderlineColorGroupedShapes.docx b/sw/qa/extras/ooxmlexport/data/tdf132491_UnderlineColorGroupedShapes.docx new file mode 100644 index 000000000..aa5528b31 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132491_UnderlineColorGroupedShapes.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132514.docx b/sw/qa/extras/ooxmlexport/data/tdf132514.docx new file mode 100644 index 000000000..d32f84104 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132514.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132752.docx b/sw/qa/extras/ooxmlexport/data/tdf132752.docx new file mode 100644 index 000000000..a94fc498a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132752.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132754.docx b/sw/qa/extras/ooxmlexport/data/tdf132754.docx new file mode 100644 index 000000000..baec54f5e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132754.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132766.docx b/sw/qa/extras/ooxmlexport/data/tdf132766.docx new file mode 100644 index 000000000..aba5e8231 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132766.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132802.docx b/sw/qa/extras/ooxmlexport/data/tdf132802.docx new file mode 100644 index 000000000..c4c2d9a1e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132802.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132807.docx b/sw/qa/extras/ooxmlexport/data/tdf132807.docx new file mode 100644 index 000000000..b1e4115c5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132807.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132898_extraBorder.docx b/sw/qa/extras/ooxmlexport/data/tdf132898_extraBorder.docx new file mode 100644 index 000000000..50ebe7a29 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132898_extraBorder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132898_missingBorder.docx b/sw/qa/extras/ooxmlexport/data/tdf132898_missingBorder.docx new file mode 100644 index 000000000..54856dea5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132898_missingBorder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf132976_testRelativeAnchorWidthFromLeftMargin.docx b/sw/qa/extras/ooxmlexport/data/tdf132976_testRelativeAnchorWidthFromLeftMargin.docx new file mode 100644 index 000000000..2f1c5560c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132976_testRelativeAnchorWidthFromLeftMargin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133000_numStyleFormatting.docx b/sw/qa/extras/ooxmlexport/data/tdf133000_numStyleFormatting.docx new file mode 100644 index 000000000..567f38265 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133000_numStyleFormatting.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133030.docx b/sw/qa/extras/ooxmlexport/data/tdf133030.docx new file mode 100644 index 000000000..e23f09adf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133030.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133035.docx b/sw/qa/extras/ooxmlexport/data/tdf133035.docx new file mode 100644 index 000000000..c28c119db Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133035.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133045_TestShapeAlignmentRelativeFromTopMargin.docx b/sw/qa/extras/ooxmlexport/data/tdf133045_TestShapeAlignmentRelativeFromTopMargin.docx new file mode 100644 index 000000000..aa976e7cc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133045_TestShapeAlignmentRelativeFromTopMargin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133052.docx b/sw/qa/extras/ooxmlexport/data/tdf133052.docx new file mode 100644 index 000000000..937554fac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133052.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133065.odt b/sw/qa/extras/ooxmlexport/data/tdf133065.odt new file mode 100644 index 000000000..a5e1b3587 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133065.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133070_testRelativeAnchorHeightFromBottomMarginHasFooter.docx b/sw/qa/extras/ooxmlexport/data/tdf133070_testRelativeAnchorHeightFromBottomMarginHasFooter.docx new file mode 100644 index 000000000..2625a9a56 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133070_testRelativeAnchorHeightFromBottomMarginHasFooter.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133070_testRelativeAnchorHeightFromBottomMarginNoFooter.docx b/sw/qa/extras/ooxmlexport/data/tdf133070_testRelativeAnchorHeightFromBottomMarginNoFooter.docx new file mode 100644 index 000000000..155e74857 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133070_testRelativeAnchorHeightFromBottomMarginNoFooter.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133163.fodt b/sw/qa/extras/ooxmlexport/data/tdf133163.fodt new file mode 100644 index 000000000..8fdda1cdc --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf133163.fodt @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 6 + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf133334_followPgStyle.odt b/sw/qa/extras/ooxmlexport/data/tdf133334_followPgStyle.odt new file mode 100644 index 000000000..56f21545a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133334_followPgStyle.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133370_columnBreak.odt b/sw/qa/extras/ooxmlexport/data/tdf133370_columnBreak.odt new file mode 100644 index 000000000..1848638ab Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133370_columnBreak.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133455.docx b/sw/qa/extras/ooxmlexport/data/tdf133455.docx new file mode 100644 index 000000000..e85297699 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133455.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133457.docx b/sw/qa/extras/ooxmlexport/data/tdf133457.docx new file mode 100644 index 000000000..8fb6730b0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133457.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133473.docx b/sw/qa/extras/ooxmlexport/data/tdf133473.docx new file mode 100644 index 000000000..c351db950 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133473.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133605.docx b/sw/qa/extras/ooxmlexport/data/tdf133605.docx new file mode 100644 index 000000000..d248d5e1a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133605.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133605_2.docx b/sw/qa/extras/ooxmlexport/data/tdf133605_2.docx new file mode 100644 index 000000000..8d3c5acba Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133605_2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133643.doc b/sw/qa/extras/ooxmlexport/data/tdf133643.doc new file mode 100644 index 000000000..52db5e344 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133643.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133647.docx b/sw/qa/extras/ooxmlexport/data/tdf133647.docx new file mode 100644 index 000000000..fb525446c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133647.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133670_testRelativeAnchorWidthFromRightMargin.docx b/sw/qa/extras/ooxmlexport/data/tdf133670_testRelativeAnchorWidthFromRightMargin.docx new file mode 100644 index 000000000..68f24370a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133670_testRelativeAnchorWidthFromRightMargin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133701.docx b/sw/qa/extras/ooxmlexport/data/tdf133701.docx new file mode 100644 index 000000000..dfef409c2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133701.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133702.docx b/sw/qa/extras/ooxmlexport/data/tdf133702.docx new file mode 100644 index 000000000..46e08a920 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133702.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133771.odt b/sw/qa/extras/ooxmlexport/data/tdf133771.odt new file mode 100644 index 000000000..fd54160af Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133771.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx b/sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx new file mode 100644 index 000000000..216434db3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf133924.docx b/sw/qa/extras/ooxmlexport/data/tdf133924.docx new file mode 100644 index 000000000..3bdbe8d6f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf133924.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134063.docx b/sw/qa/extras/ooxmlexport/data/tdf134063.docx new file mode 100644 index 000000000..372fed20e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134063.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134260.docx b/sw/qa/extras/ooxmlexport/data/tdf134260.docx new file mode 100644 index 000000000..98c4107f4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134260.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134569_nestedTable.docx b/sw/qa/extras/ooxmlexport/data/tdf134569_nestedTable.docx new file mode 100644 index 000000000..7fb07eb32 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134569_nestedTable.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134606.docx b/sw/qa/extras/ooxmlexport/data/tdf134606.docx new file mode 100644 index 000000000..c5b95cef3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134606.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134609_gridAfter.docx b/sw/qa/extras/ooxmlexport/data/tdf134609_gridAfter.docx new file mode 100644 index 000000000..64f8e0818 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134609_gridAfter.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134618.doc b/sw/qa/extras/ooxmlexport/data/tdf134618.doc new file mode 100644 index 000000000..693ab87e2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134618.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134619_numberingProps.doc b/sw/qa/extras/ooxmlexport/data/tdf134619_numberingProps.doc new file mode 100644 index 000000000..742b45ce6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134619_numberingProps.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134648.docx b/sw/qa/extras/ooxmlexport/data/tdf134648.docx new file mode 100644 index 000000000..36e856ca0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134648.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134649_pageBreak.fodt b/sw/qa/extras/ooxmlexport/data/tdf134649_pageBreak.fodt new file mode 100644 index 000000000..7d05c3e3c --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf134649_pageBreak.fodt @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Two tables, one pagebreak: + + + + + + Hello1 + + + + + + + + World1 + + + + + + + + + + + + Hello2 + + + + + + + + World2 + + + + + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf134784.docx b/sw/qa/extras/ooxmlexport/data/tdf134784.docx new file mode 100644 index 000000000..2099db66e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134784.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf134951_duplicates.odt b/sw/qa/extras/ooxmlexport/data/tdf134951_duplicates.odt new file mode 100644 index 000000000..53c7076b3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf134951_duplicates.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135047_ImageSpaceSettings.fodt b/sw/qa/extras/ooxmlexport/data/tdf135047_ImageSpaceSettings.fodt new file mode 100644 index 000000000..47dac15a5 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf135047_ImageSpaceSettings.fodt @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgK + CgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/wAALCAACAAIBAREA/8QAFAAB + AAAAAAAAAAAAAAAAAAAACP/EAB4QAAAEBwAAAAAAAAAAAAAAAAACBAUGFiU0Q1Nh/9oACAEB + AAA/AD/CzM0Sw0UpHYJ8BdZeD//Z + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum consequat mi quis pretium semper. Proin luctus orci ac neque venenatis, quis commodo dolor posuere. Curabitur dignissim sapien quis cursus egestas. Donec blandit auctor arcu, nec pellentesque eros molestie eget. In consectetur aliquam hendrerit. Sed cursus mauris vitae ligula pellentesque, non pellentesque urna aliquet. Fusce placerat mauris enim, nec rutrum purus semper vel. Praesent tincidunt neque eu pellentesque pharetra. Fusce pellentesque est orci. + Integer sodales tincidunt tristique. Sed a metus posuere, adipiscing nunc et, viverra odio. Donec auctor molestie sem, sit amet tristique lectus hendrerit sed. Cras sodales nisl sed orci mattis iaculis. Nunc eget dolor accumsan, pharetra risus a, vestibulum mauris. Nunc vulputate lobortis mollis. Vivamus nec tellus faucibus, tempor magna nec, facilisis felis. Donec commodo enim a vehicula pellentesque. Nullam vehicula vestibulum est vel ultricies. + Aliquam velit massa, laoreet vel leo nec, volutpat facilisis eros. Donec consequat arcu ut diam tempor luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent vitae lacus vel leo sodales pharetra a a nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam luctus tempus nibh, fringilla dictum augue consectetur eget. Curabitur at ante sit amet tortor pharetra molestie eu nec ante. Mauris tincidunt, nibh eu sollicitudin molestie, dolor sapien congue tortor, a pulvinar sapien turpis sed ante. Donec nec est elementum, euismod nulla in, mollis nunc. + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf135164_cancelledNumbering.docx b/sw/qa/extras/ooxmlexport/data/tdf135164_cancelledNumbering.docx new file mode 100644 index 000000000..47008b69d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135164_cancelledNumbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135187.docx b/sw/qa/extras/ooxmlexport/data/tdf135187.docx new file mode 100644 index 000000000..98a151048 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135187.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135216_evenOddFooter.odt b/sw/qa/extras/ooxmlexport/data/tdf135216_evenOddFooter.odt new file mode 100644 index 000000000..ab0ac591e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135216_evenOddFooter.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135329_lostImage.odt b/sw/qa/extras/ooxmlexport/data/tdf135329_lostImage.odt new file mode 100644 index 000000000..234109a14 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135329_lostImage.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c12v3.docx b/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c12v3.docx new file mode 100644 index 000000000..b51e53124 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c12v3.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c14.docx b/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c14.docx new file mode 100644 index 000000000..25505bddd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c14.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c14v2.docx b/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c14v2.docx new file mode 100644 index 000000000..064e62f70 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c14v2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c15.docx b/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c15.docx new file mode 100644 index 000000000..f4bd1ff12 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135343_columnSectionBreak_c15.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135595_HFtableWrap.odt b/sw/qa/extras/ooxmlexport/data/tdf135595_HFtableWrap.odt new file mode 100644 index 000000000..145a6af8d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135595_HFtableWrap.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135595_HFtableWrap_c12.docx b/sw/qa/extras/ooxmlexport/data/tdf135595_HFtableWrap_c12.docx new file mode 100644 index 000000000..00c1353d9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135595_HFtableWrap_c12.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135653.docx b/sw/qa/extras/ooxmlexport/data/tdf135653.docx new file mode 100644 index 000000000..b53777f81 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135653.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135655.odt b/sw/qa/extras/ooxmlexport/data/tdf135655.odt new file mode 100644 index 000000000..06933eb3f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135655.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135660.docx b/sw/qa/extras/ooxmlexport/data/tdf135660.docx new file mode 100644 index 000000000..2309c9b0a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135660.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135665.docx b/sw/qa/extras/ooxmlexport/data/tdf135665.docx new file mode 100644 index 000000000..2400a1c1a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135665.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135667.odt b/sw/qa/extras/ooxmlexport/data/tdf135667.odt new file mode 100644 index 000000000..2db8ade96 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135667.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135774_numberingCRProps.docx b/sw/qa/extras/ooxmlexport/data/tdf135774_numberingCRProps.docx new file mode 100644 index 000000000..697db308e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135774_numberingCRProps.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135774_numberingShading.docx b/sw/qa/extras/ooxmlexport/data/tdf135774_numberingShading.docx new file mode 100644 index 000000000..9f62ef2a5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135774_numberingShading.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135906.docx b/sw/qa/extras/ooxmlexport/data/tdf135906.docx new file mode 100644 index 000000000..701fccff5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135906.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135923-min.docx b/sw/qa/extras/ooxmlexport/data/tdf135923-min.docx new file mode 100644 index 000000000..34bc96421 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135923-min.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135943_shapeWithText_LayoutInCell0_compat15.docx b/sw/qa/extras/ooxmlexport/data/tdf135943_shapeWithText_LayoutInCell0_compat15.docx new file mode 100644 index 000000000..b4bbcb94e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135943_shapeWithText_LayoutInCell0_compat15.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135949_anchoredBeforeBreak.docx b/sw/qa/extras/ooxmlexport/data/tdf135949_anchoredBeforeBreak.docx new file mode 100644 index 000000000..6b61be383 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135949_anchoredBeforeBreak.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf135973.odt b/sw/qa/extras/ooxmlexport/data/tdf135973.odt new file mode 100644 index 000000000..0eb42080f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf135973.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136059.odt b/sw/qa/extras/ooxmlexport/data/tdf136059.odt new file mode 100644 index 000000000..50d808d12 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136059.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136386_WrapPolygonCurve.odt b/sw/qa/extras/ooxmlexport/data/tdf136386_WrapPolygonCurve.odt new file mode 100644 index 000000000..70a8b7a5b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136386_WrapPolygonCurve.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136386_WrapPolygonLineShape.odt b/sw/qa/extras/ooxmlexport/data/tdf136386_WrapPolygonLineShape.odt new file mode 100644 index 000000000..5d193f56e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136386_WrapPolygonLineShape.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136404.fodt b/sw/qa/extras/ooxmlexport/data/tdf136404.fodt new file mode 100644 index 000000000..9ac902d45 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf136404.fodt @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + 10 + + + text + + + text + + + + + 2 + + + 8 + + + 60 + + + 0 + + + 0 + + + ** Expression is faulty ** + + + ** Expression is faulty ** + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf136441_commentInFootnote.odt b/sw/qa/extras/ooxmlexport/data/tdf136441_commentInFootnote.odt new file mode 100644 index 000000000..61c9632b3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136441_commentInFootnote.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136589_paraHadField.docx b/sw/qa/extras/ooxmlexport/data/tdf136589_paraHadField.docx new file mode 100644 index 000000000..c4cf7a139 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136589_paraHadField.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136617.docx b/sw/qa/extras/ooxmlexport/data/tdf136617.docx new file mode 100644 index 000000000..e7b35aa29 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136617.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136667.docx b/sw/qa/extras/ooxmlexport/data/tdf136667.docx new file mode 100644 index 000000000..e5b047ee3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136667.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136814.odt b/sw/qa/extras/ooxmlexport/data/tdf136814.odt new file mode 100644 index 000000000..2318de04b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136814.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136841.docx b/sw/qa/extras/ooxmlexport/data/tdf136841.docx new file mode 100644 index 000000000..6f9020ee1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136841.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136850.docx b/sw/qa/extras/ooxmlexport/data/tdf136850.docx new file mode 100644 index 000000000..e94a66208 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136850.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136929_framesOfParagraph.odt b/sw/qa/extras/ooxmlexport/data/tdf136929_framesOfParagraph.odt new file mode 100644 index 000000000..918b24f67 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136929_framesOfParagraph.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf136952_pgBreak3B.odt b/sw/qa/extras/ooxmlexport/data/tdf136952_pgBreak3B.odt new file mode 100644 index 000000000..e39ebdef2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf136952_pgBreak3B.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137295.doc b/sw/qa/extras/ooxmlexport/data/tdf137295.doc new file mode 100644 index 000000000..915b7d62d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137295.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137466.docx b/sw/qa/extras/ooxmlexport/data/tdf137466.docx new file mode 100644 index 000000000..3c5977251 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137466.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137593.docx b/sw/qa/extras/ooxmlexport/data/tdf137593.docx new file mode 100644 index 000000000..8b63fd39a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137593.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137641_RelativeFromTopMargin.docx b/sw/qa/extras/ooxmlexport/data/tdf137641_RelativeFromTopMargin.docx new file mode 100644 index 000000000..2cd299ff2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137641_RelativeFromTopMargin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137642_Vertical_Alignment_toppage.docx b/sw/qa/extras/ooxmlexport/data/tdf137642_Vertical_Alignment_toppage.docx new file mode 100644 index 000000000..fbe8b264b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137642_Vertical_Alignment_toppage.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137655.docx b/sw/qa/extras/ooxmlexport/data/tdf137655.docx new file mode 100644 index 000000000..d87d434b3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137655.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137678_testVmlLineShapeMirroredY.docx b/sw/qa/extras/ooxmlexport/data/tdf137678_testVmlLineShapeMirroredY.docx new file mode 100644 index 000000000..1559358b5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137678_testVmlLineShapeMirroredY.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137683_charHighlightTests.docx b/sw/qa/extras/ooxmlexport/data/tdf137683_charHighlightTests.docx new file mode 100644 index 000000000..7d1e3be60 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137683_charHighlightTests.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137742.docx b/sw/qa/extras/ooxmlexport/data/tdf137742.docx new file mode 100644 index 000000000..26b3e9186 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137742.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137765_testVmlLineShapeRotated.docx b/sw/qa/extras/ooxmlexport/data/tdf137765_testVmlLineShapeRotated.docx new file mode 100644 index 000000000..d411d7cda Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137765_testVmlLineShapeRotated.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137850_compat14ZOrder.docx b/sw/qa/extras/ooxmlexport/data/tdf137850_compat14ZOrder.docx new file mode 100644 index 000000000..ab2715c1a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137850_compat14ZOrder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf137850_compat15ZOrder.docx b/sw/qa/extras/ooxmlexport/data/tdf137850_compat15ZOrder.docx new file mode 100644 index 000000000..07158e4c7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf137850_compat15ZOrder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138345_charStyleHighlight.docx b/sw/qa/extras/ooxmlexport/data/tdf138345_charStyleHighlight.docx new file mode 100644 index 000000000..14c9aac9f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138345_charStyleHighlight.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138345_numberingHighlight.docx b/sw/qa/extras/ooxmlexport/data/tdf138345_numberingHighlight.docx new file mode 100644 index 000000000..0083b1b38 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138345_numberingHighlight.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138374.odt b/sw/qa/extras/ooxmlexport/data/tdf138374.odt new file mode 100644 index 000000000..86e3f8709 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138374.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138612.docx b/sw/qa/extras/ooxmlexport/data/tdf138612.docx new file mode 100644 index 000000000..dd116044b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138612.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138739.docx b/sw/qa/extras/ooxmlexport/data/tdf138739.docx new file mode 100644 index 000000000..7b5bb302b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138739.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138771.docx b/sw/qa/extras/ooxmlexport/data/tdf138771.docx new file mode 100644 index 000000000..70b035508 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138771.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138780.odt b/sw/qa/extras/ooxmlexport/data/tdf138780.odt new file mode 100644 index 000000000..3e7a96a02 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138780.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138892_noNumbering.docx b/sw/qa/extras/ooxmlexport/data/tdf138892_noNumbering.docx new file mode 100644 index 000000000..5c0a0176e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138892_noNumbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138899.docx b/sw/qa/extras/ooxmlexport/data/tdf138899.docx new file mode 100644 index 000000000..3e346ac0e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138899.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf139128.odt b/sw/qa/extras/ooxmlexport/data/tdf139128.odt new file mode 100644 index 000000000..544527c06 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf139128.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf139549.docx b/sw/qa/extras/ooxmlexport/data/tdf139549.docx new file mode 100644 index 000000000..6e76ae57c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf139549.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf139580.odt b/sw/qa/extras/ooxmlexport/data/tdf139580.odt new file mode 100644 index 000000000..48224c8da Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf139580.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf139948.docx b/sw/qa/extras/ooxmlexport/data/tdf139948.docx new file mode 100644 index 000000000..1b3f7df00 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf139948.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf140137.docx b/sw/qa/extras/ooxmlexport/data/tdf140137.docx new file mode 100644 index 000000000..d03925e75 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf140137.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf140182_extraPagebreak.docx b/sw/qa/extras/ooxmlexport/data/tdf140182_extraPagebreak.docx new file mode 100644 index 000000000..be47d79c5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf140182_extraPagebreak.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf140336_paraNoneShading.odt b/sw/qa/extras/ooxmlexport/data/tdf140336_paraNoneShading.odt new file mode 100644 index 000000000..c4bd80f1a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf140336_paraNoneShading.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf140572_docDefault_superscript.docx b/sw/qa/extras/ooxmlexport/data/tdf140572_docDefault_superscript.docx new file mode 100644 index 000000000..fd176dc8c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf140572_docDefault_superscript.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf140597.docx b/sw/qa/extras/ooxmlexport/data/tdf140597.docx new file mode 100644 index 000000000..36db7d9be Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf140597.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf140668.docx b/sw/qa/extras/ooxmlexport/data/tdf140668.docx new file mode 100644 index 000000000..d7072187b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf140668.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf141172.docx b/sw/qa/extras/ooxmlexport/data/tdf141172.docx new file mode 100644 index 000000000..0e1647ae2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf141172.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf141173_missingFrames.rtf b/sw/qa/extras/ooxmlexport/data/tdf141173_missingFrames.rtf new file mode 100644 index 000000000..6ccc1de58 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf141173_missingFrames.rtf @@ -0,0 +1,61 @@ +{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang3082\deflangfe3082{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f36\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Frutiger LT 65 Bold;}{\f37\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Frutiger LT 45 Light;}{\f38\fscript\fcharset0\fprq2{\*\panose 00000000000000000000}Comic Sans MS;} +{\f39\froman\fcharset238\fprq2 Times New Roman CE;}{\f40\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f42\froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\froman\fcharset162\fprq2 Times New Roman Tur;} +{\f44\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f46\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\f49\fswiss\fcharset238\fprq2 Arial CE;}{\f50\fswiss\fcharset204\fprq2 Arial Cyr;}{\f52\fswiss\fcharset161\fprq2 Arial Greek;}{\f53\fswiss\fcharset162\fprq2 Arial Tur;}{\f54\fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\f55\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f56\fswiss\fcharset186\fprq2 Arial Baltic;}{\f57\fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f419\fscript\fcharset238\fprq2 Comic Sans MS CE;}{\f420\fscript\fcharset204\fprq2 Comic Sans MS Cyr;} +{\f422\fscript\fcharset161\fprq2 Comic Sans MS Greek;}{\f423\fscript\fcharset162\fprq2 Comic Sans MS Tur;}{\f426\fscript\fcharset186\fprq2 Comic Sans MS 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\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext0 Normal;}{\*\cs10 \additive \ssemihidden +Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv +\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid10428813\rsid14756311} +{\*\generator Microsoft Word 11.0.5604;}{\info{\author Crystal Reports}{\doccomm Powered By Crystal}{\operator GESTION}{\creatim\yr2014\mo7\dy4\hr10\min47}{\revtim\yr2014\mo7\dy4\hr11\min19}{\version3}{\edmins7}{\nofpages2}{\nofwords155}{\nofchars857} +{\*\company Crystal Decisions}{\nofcharsws1010}{\vern24689}}\paperw11904\paperh16836\margl192\margr192\margt240\margb242 \widowctrl\ftnbj\aenddoc\hyphhotz425\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120 +\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\nolnhtadjtbl\rsidroot14756311 \fet0\sectd \sbknone\linex0\sectdefaultcl\sftnbj {\*\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 \ql \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\pvpg\phpg\posx762\posy1182\absh-228\absw1653\faauto\rin0\lin0\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 { +\lang1024\langfe1024\noproof\insrsid10428813 {\shp{\shprslt{\*\do\dobxpage\dobypage\dodhgt1\dpline\dpptx0\dppty0\dpptx10945\dppty0\dpx306\dpy16065\dpxsize10945\dpysize0\dplinew20\dplinecor0\dplinecog0\dplinecob0}}}}{\f36\insrsid14756311 + +\par }\pard \qc \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\pvpg\phpg\posx2944\posy3235\absh-1764\absw5927\faauto\rin0\lin0\itap0 { +\lang1024\langfe1024\noproof\insrsid10428813 {\shp{\*\shpinst\shpleft192\shptop840\shpright670\shpbottom1852\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz3\shplid1028 +{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pib}{\sv +}}{\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}}}{\shprslt\par\pard +\ql \li0\ri0\widctlpar\pvpg\phpg\posx191\posy839\dxfrtext180\dfrmtxtx180\dfrmtxty0\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \par}} +}{\f38\fs23\cf1\insrsid14756311\charrsid14756311 Se convoca CONSEJO ESCOLAR}{\f38\insrsid14756311\charrsid14756311 +\par }{\f38\fs23\cf1\insrsid14756311\charrsid14756311 de car\'e1cter ORDINARIO,}{\f38\insrsid14756311\charrsid14756311 +\par }{\f38\fs23\cf1\insrsid14756311\charrsid14756311 que tendr\'e1 lugar el pr\'f3ximo d\'eda 09/07/2014, }{\f38\fs23\cf1\insrsid14756311 a las 7 de la tarde }{\f38\fs23\cf1\insrsid14756311\charrsid14756311 en SALA DE PROFESORES ,}{ +\f38\insrsid14756311\charrsid14756311 +\par }{\f38\fs23\cf1\insrsid14756311\charrsid14756311 con el siguiente }{\b\f38\fs23\ul\cf1\insrsid14756311\charrsid14756311 ORDEN DEL D\'cdA:}{\f38\insrsid14756311\charrsid14756311 +\par }\pard \ql \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640\tx9000\tx9360\tx9720\tx10080\pvpg\phpg +\posx707\posy6035\absh-5856\absw10180\faauto\rin0\lin0\itap0 {\f38\fs28\cf1\insrsid14756311\charrsid14756311 1.- Lectura y aprobaci\'f3n del acta anterior, si procede.}{\f38\fs28\insrsid14756311\charrsid14756311 +\par }{\f38\fs28\cf1\insrsid14756311\charrsid14756311 2.- An\'e1lisis de los resultados de la evaluaci\'f3n Final.}{\f38\fs28\insrsid14756311\charrsid14756311 +\par }{\f38\fs28\cf1\insrsid14756311\charrsid14756311 3.- Resultados de la prueba de diagn\'f3stico de los alumnos de 4\'ba de Primaria.}{\f38\fs28\cf1\insrsid14756311 +\par }{\f38\fs28\cf1\insrsid10428813 4.- Normativa de biling\'fce para el curso pr\'f3ximo.}{\f38\fs28\insrsid10428813\charrsid14756311 +\par }{\f38\fs28\cf1\insrsid10428813 5}{\f38\fs28\cf1\insrsid14756311\charrsid14756311 .- Aprobaci\'f3n de la MEMORIA del curso 2013-2014.}{\f38\fs28\insrsid14756311\charrsid14756311 +\par }{\f38\fs28\cf1\insrsid10428813 6}{\f38\fs28\cf1\insrsid14756311\charrsid14756311 .- Proceso de elecci\'f3n de directores.}{\f38\fs28\cf1\insrsid14756311 +\par }{\f38\fs28\cf1\insrsid10428813 7.- Libros de texto para el curso que viene.}{\f38\fs28\insrsid10428813\charrsid14756311 +\par }{\f38\fs28\cf1\insrsid10428813 8}{\f38\fs28\cf1\insrsid14756311\charrsid14756311 .- Implantaci\'f3n de la LOMCE para el curso 2014-2015.}{\f38\fs28\insrsid14756311\charrsid14756311 +\par }{\f38\fs28\cf1\insrsid10428813 9}{\f38\fs28\cf1\insrsid14756311\charrsid14756311 .- Ruegos y preguntas.}{\f38\fs28\insrsid14756311\charrsid14756311 +\par }\pard \ql \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\tx1800\pvpg\phpg\posx621\posy12184\absh-480\absw1869\faauto\rin0\lin0\itap0\pararsid14756311 {\f38\fs19\cf1\insrsid14756311\charrsid14756311 V\'baB\'ba}{\f38\insrsid14756311\charrsid14756311 + +\par }{\f38\fs19\cf1\insrsid14756311\charrsid14756311 El Director,}{\f38\insrsid14756311\charrsid14756311 +\par }\pard \ql \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\pvpg\phpg\posx642\posy13627\absh-221\absw4950\faauto\rin0\lin0\itap0 {\f1\fs19\cf1\insrsid14756311 Fdo.: Jose Garcia Ros}{ +\f36\insrsid14756311 +\par }\pard \ql \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\pvpg\phpg\posx3981\posy11104\absh-510\absw5120\faauto\rin0\lin0\itap0\pararsid14756311 { +\f38\fs19\cf1\insrsid14756311\charrsid14756311 ROLDAN, a 4 de julio de 2014}{\f38\insrsid14756311\charrsid14756311 +\par }\pard \qc \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640\tx9000\tx9360\tx9720\tx10080\pvpg\phpg +\posx732\posy2715\absh-349\absw10155\faauto\rin0\lin0\itap0 {\b\f1\fs27\ul\cf1\insrsid14756311 Convocatoria de CONSEJO ESCOLAR}{\f36\insrsid14756311 +\par }\pard \ql \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\tx1800\pvpg\phpg\posx6087\posy12551\absh-221\absw1995\faauto\rin0\lin0\itap0 {\f38\fs19\cf1\insrsid14756311\charrsid14756311 La Secretaria,}{\f38\insrsid14756311\charrsid14756311 +\par }\pard \ql \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\pvpg\phpg\posx6097\posy13616\absh-221\absw5070\faauto\rin0\lin0\itap0 {\f1\fs19\cf1\insrsid14756311 +Fdo.: Luz Maria Ferreiro Fraga}{\f36\insrsid14756311 +\par }\pard \ql \li0\ri0\nowidctlpar\tx360\tx720\tx1080\pvpg\phpg\posx306\posy16179\absh-221\absw1083\faauto\rin0\lin0\itap0 {\f1\fs17\cf1\insrsid14756311 04/07/2014}{\f36\insrsid14756311 +\par }\pard \qc \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\pvpg\phpg\posx4695\posy16179\absh-221\absw1710\faauto\rin0\lin0\itap0 {\f1\fs17\cf1\insrsid14756311 2013/14}{\f36\insrsid14756311 +\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\lang1024\langfe1024\noproof\insrsid10428813 +{\shp{\*\shpinst\shpleft741\shptop2464\shpright10955\shpbottom5065\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz0\shplid1029{\sp{\sn shapeType}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}} +{\sp{\sn fFilled}{\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 1}} +{\sp{\sn fBehindDocument}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}{\shprslt{\*\do\dobxpage\dobypage\dodhgt0\dprect\dpx741\dpy2464\dpxsize10214\dpysize2601 +\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinew20\dplinecor0\dplinecog0\dplinecob0}}}}{\f36\insrsid14756311 \page \sect }\sectd \sbknone\linex0\sectdefaultcl\sftnbj \pard\plain +\qc \li0\ri0\nowidctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\pvpg\phpg\posx2093\posy1866\absh-228\absw7011\faauto\rin0\lin0\itap0\pararsid14756311 +\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\insrsid14756311 +\par }} diff --git a/sw/qa/extras/ooxmlexport/data/tdf141231_arabicHebrewNumbering.docx b/sw/qa/extras/ooxmlexport/data/tdf141231_arabicHebrewNumbering.docx new file mode 100644 index 000000000..01bc2667a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf141231_arabicHebrewNumbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf141548.docx b/sw/qa/extras/ooxmlexport/data/tdf141548.docx new file mode 100644 index 000000000..65c4e8b90 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf141548.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf141550.docx b/sw/qa/extras/ooxmlexport/data/tdf141550.docx new file mode 100644 index 000000000..170ebebba Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf141550.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf141660.docx b/sw/qa/extras/ooxmlexport/data/tdf141660.docx new file mode 100644 index 000000000..dbcceeebd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf141660.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf141966_chapterNumberTortureTest.docx b/sw/qa/extras/ooxmlexport/data/tdf141966_chapterNumberTortureTest.docx new file mode 100644 index 000000000..808a70846 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf141966_chapterNumberTortureTest.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf141966_chapterNumbering.docx b/sw/qa/extras/ooxmlexport/data/tdf141966_chapterNumbering.docx new file mode 100644 index 000000000..3957fadf4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf141966_chapterNumbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142361ShadowDirection.odt b/sw/qa/extras/ooxmlexport/data/tdf142361ShadowDirection.odt new file mode 100644 index 000000000..78372e603 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142361ShadowDirection.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142387.docx b/sw/qa/extras/ooxmlexport/data/tdf142387.docx new file mode 100644 index 000000000..c4dc0d280 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142387.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142404_tabOverMarginC15.docx b/sw/qa/extras/ooxmlexport/data/tdf142404_tabOverMarginC15.docx new file mode 100644 index 000000000..60af474b5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142404_tabOverMarginC15.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142404_tabOverSpacingC15.odt b/sw/qa/extras/ooxmlexport/data/tdf142404_tabOverSpacingC15.odt new file mode 100644 index 000000000..971a0a3a6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142404_tabOverSpacingC15.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142404_tabSpacing.docx b/sw/qa/extras/ooxmlexport/data/tdf142404_tabSpacing.docx new file mode 100644 index 000000000..c819c5541 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142404_tabSpacing.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142407.docx b/sw/qa/extras/ooxmlexport/data/tdf142407.docx new file mode 100644 index 000000000..38397a4de Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142407.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142433_WrapPolygonCustomShape.odt b/sw/qa/extras/ooxmlexport/data/tdf142433_WrapPolygonCustomShape.odt new file mode 100644 index 000000000..fbe0b97d6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142433_WrapPolygonCustomShape.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142464_ampm.docx b/sw/qa/extras/ooxmlexport/data/tdf142464_ampm.docx new file mode 100644 index 000000000..d63398488 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142464_ampm.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142486_FrameShadow.odt b/sw/qa/extras/ooxmlexport/data/tdf142486_FrameShadow.odt new file mode 100644 index 000000000..6556d695c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142486_FrameShadow.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142486_LeftMarginShadowLeft.docx b/sw/qa/extras/ooxmlexport/data/tdf142486_LeftMarginShadowLeft.docx new file mode 100644 index 000000000..07478e2b8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142486_LeftMarginShadowLeft.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142542_cancelledAutospacing.docx b/sw/qa/extras/ooxmlexport/data/tdf142542_cancelledAutospacing.docx new file mode 100644 index 000000000..615799fd7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142542_cancelledAutospacing.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142693_hugePaperSizeImport.docx b/sw/qa/extras/ooxmlexport/data/tdf142693_hugePaperSizeImport.docx new file mode 100644 index 000000000..6ec35a768 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142693_hugePaperSizeImport.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf142700.docx b/sw/qa/extras/ooxmlexport/data/tdf142700.docx new file mode 100644 index 000000000..393e2ff47 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142700.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf143175.docx b/sw/qa/extras/ooxmlexport/data/tdf143175.docx new file mode 100644 index 000000000..bcfbd2db7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143175.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf143219ContourWrap_glow_rotate.docx b/sw/qa/extras/ooxmlexport/data/tdf143219ContourWrap_glow_rotate.docx new file mode 100644 index 000000000..b83188073 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143219ContourWrap_glow_rotate.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf143219ContourWrap_stroke_shadow.docx b/sw/qa/extras/ooxmlexport/data/tdf143219ContourWrap_stroke_shadow.docx new file mode 100644 index 000000000..53dfb488a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143219ContourWrap_stroke_shadow.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf143384_tableInFoot_negativeMargins.docx b/sw/qa/extras/ooxmlexport/data/tdf143384_tableInFoot_negativeMargins.docx new file mode 100644 index 000000000..918c1029f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143384_tableInFoot_negativeMargins.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf143399.docx b/sw/qa/extras/ooxmlexport/data/tdf143399.docx new file mode 100644 index 000000000..1d9749a0c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143399.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf143432_Frame_WrapTextMode.odt b/sw/qa/extras/ooxmlexport/data/tdf143432_Frame_WrapTextMode.odt new file mode 100644 index 000000000..6390c12db Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143432_Frame_WrapTextMode.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf143583_emptyParaAtEndOfFootnote.docx b/sw/qa/extras/ooxmlexport/data/tdf143583_emptyParaAtEndOfFootnote.docx new file mode 100644 index 000000000..e8b42b840 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143583_emptyParaAtEndOfFootnote.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf143692_outlineLevelTortureTest.docx b/sw/qa/extras/ooxmlexport/data/tdf143692_outlineLevelTortureTest.docx new file mode 100644 index 000000000..7072b4721 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143692_outlineLevelTortureTest.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf143860_NonPrimitiveCustomShape.odt b/sw/qa/extras/ooxmlexport/data/tdf143860_NonPrimitiveCustomShape.odt new file mode 100644 index 000000000..6a1222877 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143860_NonPrimitiveCustomShape.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf144563.docx b/sw/qa/extras/ooxmlexport/data/tdf144563.docx new file mode 100644 index 000000000..59d64d2d1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf144563.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf144668.odt b/sw/qa/extras/ooxmlexport/data/tdf144668.odt new file mode 100644 index 000000000..7504adce4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf144668.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf146171.docx b/sw/qa/extras/ooxmlexport/data/tdf146171.docx new file mode 100644 index 000000000..bdd534527 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf146171.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf146346.docx b/sw/qa/extras/ooxmlexport/data/tdf146346.docx new file mode 100644 index 000000000..846a33e9a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf146346.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf146491.odt b/sw/qa/extras/ooxmlexport/data/tdf146491.odt new file mode 100644 index 000000000..2ee08f1d3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf146491.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf146515.odt b/sw/qa/extras/ooxmlexport/data/tdf146515.odt new file mode 100644 index 000000000..139126d02 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf146515.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf146802.docx b/sw/qa/extras/ooxmlexport/data/tdf146802.docx new file mode 100644 index 000000000..80d2ee17a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf146802.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf146851_1.docx b/sw/qa/extras/ooxmlexport/data/tdf146851_1.docx new file mode 100644 index 000000000..b4456bf40 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf146851_1.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf146851_2.docx b/sw/qa/extras/ooxmlexport/data/tdf146851_2.docx new file mode 100644 index 000000000..fbd5f40a6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf146851_2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf146955.odt b/sw/qa/extras/ooxmlexport/data/tdf146955.odt new file mode 100644 index 000000000..c7a849f9b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf146955.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf147115_defaultStyle.docx b/sw/qa/extras/ooxmlexport/data/tdf147115_defaultStyle.docx new file mode 100644 index 000000000..e75099c6a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf147115_defaultStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf147724.docx b/sw/qa/extras/ooxmlexport/data/tdf147724.docx new file mode 100644 index 000000000..97f05c921 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf147724.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf147861_customField.docx b/sw/qa/extras/ooxmlexport/data/tdf147861_customField.docx new file mode 100644 index 000000000..70071fa7e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf147861_customField.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf147892.fodt b/sw/qa/extras/ooxmlexport/data/tdf147892.fodt new file mode 100644 index 000000000..bb3ffc324 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf147892.fodt @@ -0,0 +1,25 @@ + + + + + + + + + Bob + 2023-01-02T00:00:00 + + + + + Alice + 2023-01-01T00:00:00 + + + + + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf147978_enhancedPath_commandABVW.odt b/sw/qa/extras/ooxmlexport/data/tdf147978_enhancedPath_commandABVW.odt new file mode 100644 index 000000000..d9ef07db5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf147978_enhancedPath_commandABVW.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148052.docx b/sw/qa/extras/ooxmlexport/data/tdf148052.docx new file mode 100644 index 000000000..4e0dad0f5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148052.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148111.docx b/sw/qa/extras/ooxmlexport/data/tdf148111.docx new file mode 100644 index 000000000..a46fb508d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148111.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148132.docx b/sw/qa/extras/ooxmlexport/data/tdf148132.docx new file mode 100644 index 000000000..6ee235979 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148132.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148273_sectionBulletFormatLeak.docx b/sw/qa/extras/ooxmlexport/data/tdf148273_sectionBulletFormatLeak.docx new file mode 100644 index 000000000..1ebb1e8b4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148273_sectionBulletFormatLeak.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148360.docx b/sw/qa/extras/ooxmlexport/data/tdf148360.docx new file mode 100644 index 000000000..8f09f685d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148360.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148361.docx b/sw/qa/extras/ooxmlexport/data/tdf148361.docx new file mode 100644 index 000000000..ecf9a5f00 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148361.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148380_createField.docx b/sw/qa/extras/ooxmlexport/data/tdf148380_createField.docx new file mode 100644 index 000000000..c31ed7214 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148380_createField.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148380_fldLocked.docx b/sw/qa/extras/ooxmlexport/data/tdf148380_fldLocked.docx new file mode 100644 index 000000000..2ac77223b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148380_fldLocked.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148380_modifiedField.docx b/sw/qa/extras/ooxmlexport/data/tdf148380_modifiedField.docx new file mode 100644 index 000000000..14f6e319e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148380_modifiedField.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148380_printField.docx b/sw/qa/extras/ooxmlexport/data/tdf148380_printField.docx new file mode 100644 index 000000000..44145748c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148380_printField.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148380_usernameField.docx b/sw/qa/extras/ooxmlexport/data/tdf148380_usernameField.docx new file mode 100644 index 000000000..241632bc8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148380_usernameField.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148455_1.docx b/sw/qa/extras/ooxmlexport/data/tdf148455_1.docx new file mode 100644 index 000000000..295d3ee74 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148455_1.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148455_2.docx b/sw/qa/extras/ooxmlexport/data/tdf148455_2.docx new file mode 100644 index 000000000..3cde58ce5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148455_2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148494.docx b/sw/qa/extras/ooxmlexport/data/tdf148494.docx new file mode 100644 index 000000000..c60c73a20 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148494.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf148720.odt b/sw/qa/extras/ooxmlexport/data/tdf148720.odt new file mode 100644 index 000000000..771c84505 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf148720.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf149089.docx b/sw/qa/extras/ooxmlexport/data/tdf149089.docx new file mode 100644 index 000000000..239047684 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf149089.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf149198.docx b/sw/qa/extras/ooxmlexport/data/tdf149198.docx new file mode 100644 index 000000000..61e2bfddb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf149198.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf149200.docx b/sw/qa/extras/ooxmlexport/data/tdf149200.docx new file mode 100644 index 000000000..811f594b6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf149200.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf149313.docx b/sw/qa/extras/ooxmlexport/data/tdf149313.docx new file mode 100644 index 000000000..4c0c454b4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf149313.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf149388.docx b/sw/qa/extras/ooxmlexport/data/tdf149388.docx new file mode 100644 index 000000000..9b9702819 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf149388.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf149388_fly.docx b/sw/qa/extras/ooxmlexport/data/tdf149388_fly.docx new file mode 100644 index 000000000..92b9cf92b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf149388_fly.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf149546.docx b/sw/qa/extras/ooxmlexport/data/tdf149546.docx new file mode 100644 index 000000000..2811ec189 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf149546.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf149708.docx b/sw/qa/extras/ooxmlexport/data/tdf149708.docx new file mode 100644 index 000000000..5eee4a124 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf149708.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf149711.docx b/sw/qa/extras/ooxmlexport/data/tdf149711.docx new file mode 100644 index 000000000..d90efa7c1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf149711.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf150166.docx b/sw/qa/extras/ooxmlexport/data/tdf150166.docx new file mode 100644 index 000000000..f802ac611 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf150166.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf150966_regularInset.docx b/sw/qa/extras/ooxmlexport/data/tdf150966_regularInset.docx new file mode 100644 index 000000000..0d07a5453 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf150966_regularInset.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf152200-field+textbox.docx b/sw/qa/extras/ooxmlexport/data/tdf152200-field+textbox.docx new file mode 100644 index 000000000..606d1346a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf152200-field+textbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf152203.docx b/sw/qa/extras/ooxmlexport/data/tdf152203.docx new file mode 100644 index 000000000..f8ba96ea5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf152203.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf152206.docx b/sw/qa/extras/ooxmlexport/data/tdf152206.docx new file mode 100644 index 000000000..34f0130fd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf152206.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf153255.docx b/sw/qa/extras/ooxmlexport/data/tdf153255.docx new file mode 100644 index 000000000..e9f2892d5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf153255.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf153891.docx b/sw/qa/extras/ooxmlexport/data/tdf153891.docx new file mode 100644 index 000000000..6fe809298 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf153891.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf154481.docx b/sw/qa/extras/ooxmlexport/data/tdf154481.docx new file mode 100644 index 000000000..bfbfeda76 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf154481.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx b/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx new file mode 100644 index 000000000..70fdec72d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf37153_considerWrapOnObjPos.docx b/sw/qa/extras/ooxmlexport/data/tdf37153_considerWrapOnObjPos.docx new file mode 100644 index 000000000..d89baaf08 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf37153_considerWrapOnObjPos.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf38778_properties_in_run_for_field.doc b/sw/qa/extras/ooxmlexport/data/tdf38778_properties_in_run_for_field.doc new file mode 100644 index 000000000..5f0f7238a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf38778_properties_in_run_for_field.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf41466_testVmlShapeWithTextbox.docx b/sw/qa/extras/ooxmlexport/data/tdf41466_testVmlShapeWithTextbox.docx new file mode 100644 index 000000000..2dfeb909c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf41466_testVmlShapeWithTextbox.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf41542_borderlessPadding.odt b/sw/qa/extras/ooxmlexport/data/tdf41542_borderlessPadding.odt new file mode 100644 index 000000000..9585041de Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf41542_borderlessPadding.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf41542_imagePadding.odt b/sw/qa/extras/ooxmlexport/data/tdf41542_imagePadding.odt new file mode 100644 index 000000000..019e19f24 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf41542_imagePadding.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf44278.docx b/sw/qa/extras/ooxmlexport/data/tdf44278.docx new file mode 100644 index 000000000..588416cdb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf44278.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf44832_section_new_header.odt b/sw/qa/extras/ooxmlexport/data/tdf44832_section_new_header.odt new file mode 100644 index 000000000..9db311db1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf44832_section_new_header.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf44986.docx b/sw/qa/extras/ooxmlexport/data/tdf44986.docx new file mode 100644 index 000000000..7859ab402 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf44986.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf46938_clearTabStop.docx b/sw/qa/extras/ooxmlexport/data/tdf46938_clearTabStop.docx new file mode 100644 index 000000000..8dea12fcb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf46938_clearTabStop.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf46940_dontEquallyDistributeColumns.docx b/sw/qa/extras/ooxmlexport/data/tdf46940_dontEquallyDistributeColumns.docx new file mode 100644 index 000000000..657da5eb0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf46940_dontEquallyDistributeColumns.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf48569.odt b/sw/qa/extras/ooxmlexport/data/tdf48569.odt new file mode 100644 index 000000000..3ae5ac393 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf48569.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf49073.docx b/sw/qa/extras/ooxmlexport/data/tdf49073.docx new file mode 100644 index 000000000..ddcbb62fb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf49073.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf53856_conflictingStyle.docx b/sw/qa/extras/ooxmlexport/data/tdf53856_conflictingStyle.docx new file mode 100644 index 000000000..71b925a9a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf53856_conflictingStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf55427_footnote2endnote.odt b/sw/qa/extras/ooxmlexport/data/tdf55427_footnote2endnote.odt new file mode 100644 index 000000000..7f77f6d39 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf55427_footnote2endnote.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf57155.docx b/sw/qa/extras/ooxmlexport/data/tdf57155.docx new file mode 100644 index 000000000..5cca9b3ea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf57155.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf57589_hashColor.docx b/sw/qa/extras/ooxmlexport/data/tdf57589_hashColor.docx new file mode 100644 index 000000000..d12b85b2d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf57589_hashColor.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf58944-repeating-table-header.docx b/sw/qa/extras/ooxmlexport/data/tdf58944-repeating-table-header.docx new file mode 100644 index 000000000..56e37362a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf58944-repeating-table-header.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf59274.docx b/sw/qa/extras/ooxmlexport/data/tdf59274.docx new file mode 100644 index 000000000..38aad9ae9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf59274.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf59699.docx b/sw/qa/extras/ooxmlexport/data/tdf59699.docx new file mode 100644 index 000000000..158ac338f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf59699.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf63561_clearTabs.docx b/sw/qa/extras/ooxmlexport/data/tdf63561_clearTabs.docx new file mode 100644 index 000000000..228b9b547 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf63561_clearTabs.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf63561_clearTabs2.docx b/sw/qa/extras/ooxmlexport/data/tdf63561_clearTabs2.docx new file mode 100644 index 000000000..cf674f3c4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf63561_clearTabs2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf64264.docx b/sw/qa/extras/ooxmlexport/data/tdf64264.docx new file mode 100644 index 000000000..e2fea64da Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf64264.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf64372_continuousBreaks.docx b/sw/qa/extras/ooxmlexport/data/tdf64372_continuousBreaks.docx new file mode 100644 index 000000000..20ad82bb5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf64372_continuousBreaks.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf64531.docx b/sw/qa/extras/ooxmlexport/data/tdf64531.docx new file mode 100644 index 000000000..ae9d232ac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf64531.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf65955.odt b/sw/qa/extras/ooxmlexport/data/tdf65955.odt new file mode 100644 index 000000000..e133938e0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf65955.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf65955_2.odt b/sw/qa/extras/ooxmlexport/data/tdf65955_2.odt new file mode 100644 index 000000000..5ad9146dc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf65955_2.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf66039.docx b/sw/qa/extras/ooxmlexport/data/tdf66039.docx new file mode 100644 index 000000000..f17032b3f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf66039.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf66398_permissions.docx b/sw/qa/extras/ooxmlexport/data/tdf66398_permissions.docx new file mode 100644 index 000000000..d5c855994 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf66398_permissions.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf66401.docx b/sw/qa/extras/ooxmlexport/data/tdf66401.docx new file mode 100644 index 000000000..2e2ddca37 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf66401.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf66496.docx b/sw/qa/extras/ooxmlexport/data/tdf66496.docx new file mode 100644 index 000000000..6f168d38e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf66496.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf67207.docx b/sw/qa/extras/ooxmlexport/data/tdf67207.docx new file mode 100644 index 000000000..b0604c266 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf67207.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf69635.docx b/sw/qa/extras/ooxmlexport/data/tdf69635.docx new file mode 100644 index 000000000..94cced4d2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf69635.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf70234.docx b/sw/qa/extras/ooxmlexport/data/tdf70234.docx new file mode 100644 index 000000000..33ef99430 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf70234.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf73499.docx b/sw/qa/extras/ooxmlexport/data/tdf73499.docx new file mode 100644 index 000000000..605c01e2b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf73499.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf73547-dash.docx b/sw/qa/extras/ooxmlexport/data/tdf73547-dash.docx new file mode 100644 index 000000000..40e741ebb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf73547-dash.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf76683_negativeTwipsMeasure.docx b/sw/qa/extras/ooxmlexport/data/tdf76683_negativeTwipsMeasure.docx new file mode 100644 index 000000000..eb769fdcc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf76683_negativeTwipsMeasure.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf77219_backgroundShape.docx b/sw/qa/extras/ooxmlexport/data/tdf77219_backgroundShape.docx new file mode 100644 index 000000000..bcfdcf377 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf77219_backgroundShape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf77219_foregroundShape.docx b/sw/qa/extras/ooxmlexport/data/tdf77219_foregroundShape.docx new file mode 100644 index 000000000..7de2b4c39 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf77219_foregroundShape.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf77236_MissingSolidFill.docx b/sw/qa/extras/ooxmlexport/data/tdf77236_MissingSolidFill.docx new file mode 100644 index 000000000..2bb2c0978 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf77236_MissingSolidFill.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf77417.docx b/sw/qa/extras/ooxmlexport/data/tdf77417.docx new file mode 100644 index 000000000..4b4fb20fe Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf77417.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf77796.docx b/sw/qa/extras/ooxmlexport/data/tdf77796.docx new file mode 100644 index 000000000..e42c37daa Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf77796.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf78352.docx b/sw/qa/extras/ooxmlexport/data/tdf78352.docx new file mode 100644 index 000000000..6f85f2e2a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf78352.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf78657_picture_hyperlink.docx b/sw/qa/extras/ooxmlexport/data/tdf78657_picture_hyperlink.docx new file mode 100644 index 000000000..bc4759ecc Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf78657_picture_hyperlink.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf78749.docx b/sw/qa/extras/ooxmlexport/data/tdf78749.docx new file mode 100644 index 000000000..db498849e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf78749.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf78902.docx b/sw/qa/extras/ooxmlexport/data/tdf78902.docx new file mode 100644 index 000000000..3cf3a443a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf78902.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf79272_strictDxa.docx b/sw/qa/extras/ooxmlexport/data/tdf79272_strictDxa.docx new file mode 100644 index 000000000..4d5ea67bd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf79272_strictDxa.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf79329.docx b/sw/qa/extras/ooxmlexport/data/tdf79329.docx new file mode 100644 index 000000000..142f29522 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf79329.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf79435_legacyInputFields.doc b/sw/qa/extras/ooxmlexport/data/tdf79435_legacyInputFields.doc new file mode 100644 index 000000000..da7fade80 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf79435_legacyInputFields.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf79639.docx b/sw/qa/extras/ooxmlexport/data/tdf79639.docx new file mode 100644 index 000000000..b84aaea70 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf79639.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf80526_word_wrap.docx b/sw/qa/extras/ooxmlexport/data/tdf80526_word_wrap.docx new file mode 100644 index 000000000..abf5ee5ed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf80526_word_wrap.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf81100.docx b/sw/qa/extras/ooxmlexport/data/tdf81100.docx new file mode 100644 index 000000000..cd46100f0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf81100.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf81345.docx b/sw/qa/extras/ooxmlexport/data/tdf81345.docx new file mode 100644 index 000000000..4f18b1eea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf81345.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf81507.docx b/sw/qa/extras/ooxmlexport/data/tdf81507.docx new file mode 100644 index 000000000..2c00ee44c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf81507.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf81567.odt b/sw/qa/extras/ooxmlexport/data/tdf81567.odt new file mode 100644 index 000000000..93e449754 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf81567.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf82065_Ind_start_strict.docx b/sw/qa/extras/ooxmlexport/data/tdf82065_Ind_start_strict.docx new file mode 100644 index 000000000..6cbdbdc97 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf82065_Ind_start_strict.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf82173_endnoteStyle.docx b/sw/qa/extras/ooxmlexport/data/tdf82173_endnoteStyle.docx new file mode 100644 index 000000000..d38a65943 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf82173_endnoteStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf82173_footnoteStyle.docx b/sw/qa/extras/ooxmlexport/data/tdf82173_footnoteStyle.docx new file mode 100644 index 000000000..4fa7b0a24 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf82173_footnoteStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf82175_noStyleInheritance.docx b/sw/qa/extras/ooxmlexport/data/tdf82175_noStyleInheritance.docx new file mode 100644 index 000000000..e9df3b704 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf82175_noStyleInheritance.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf82177_insideCellBorders.docx b/sw/qa/extras/ooxmlexport/data/tdf82177_insideCellBorders.docx new file mode 100644 index 000000000..f1f0d272d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf82177_insideCellBorders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf82177_outsideCellBorders.docx b/sw/qa/extras/ooxmlexport/data/tdf82177_outsideCellBorders.docx new file mode 100644 index 000000000..75c9a656d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf82177_outsideCellBorders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf82177_tblBorders.docx b/sw/qa/extras/ooxmlexport/data/tdf82177_tblBorders.docx new file mode 100644 index 000000000..88a237cf6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf82177_tblBorders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf8255.docx b/sw/qa/extras/ooxmlexport/data/tdf8255.docx new file mode 100644 index 000000000..366e49885 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf8255.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf83227.docx b/sw/qa/extras/ooxmlexport/data/tdf83227.docx new file mode 100644 index 000000000..bca19a955 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf83227.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf83300.docx b/sw/qa/extras/ooxmlexport/data/tdf83300.docx new file mode 100644 index 000000000..aa3ad22d1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf83300.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf83309.docx b/sw/qa/extras/ooxmlexport/data/tdf83309.docx new file mode 100644 index 000000000..03e079787 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf83309.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf84678.docx b/sw/qa/extras/ooxmlexport/data/tdf84678.docx new file mode 100644 index 000000000..f79922861 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf84678.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf85161.docx b/sw/qa/extras/ooxmlexport/data/tdf85161.docx new file mode 100644 index 000000000..e079b4906 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf85161.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf86374.docx b/sw/qa/extras/ooxmlexport/data/tdf86374.docx new file mode 100644 index 000000000..7fd772d79 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf86374.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf86926_A3.docx b/sw/qa/extras/ooxmlexport/data/tdf86926_A3.docx new file mode 100644 index 000000000..a4392dcf2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf86926_A3.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf87348_linkedTextboxes.docx b/sw/qa/extras/ooxmlexport/data/tdf87348_linkedTextboxes.docx new file mode 100644 index 000000000..8f9eb97d8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf87348_linkedTextboxes.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf87460.docx b/sw/qa/extras/ooxmlexport/data/tdf87460.docx new file mode 100644 index 000000000..c443dbe45 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf87460.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf87569_drawingml.docx b/sw/qa/extras/ooxmlexport/data/tdf87569_drawingml.docx new file mode 100644 index 000000000..7f00a46e2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf87569_drawingml.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf87569_vml.docx b/sw/qa/extras/ooxmlexport/data/tdf87569_vml.docx new file mode 100644 index 000000000..0223ad71d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf87569_vml.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf87924.docx b/sw/qa/extras/ooxmlexport/data/tdf87924.docx new file mode 100644 index 000000000..5265d6638 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf87924.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf88496.docx b/sw/qa/extras/ooxmlexport/data/tdf88496.docx new file mode 100644 index 000000000..b34f30389 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf88496.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf88583.odt b/sw/qa/extras/ooxmlexport/data/tdf88583.odt new file mode 100644 index 000000000..307ab1e78 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf88583.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf89165.docx b/sw/qa/extras/ooxmlexport/data/tdf89165.docx new file mode 100644 index 000000000..a060ca444 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf89165.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf89377_tableWithBreakBeforeParaStyle.docx b/sw/qa/extras/ooxmlexport/data/tdf89377_tableWithBreakBeforeParaStyle.docx new file mode 100644 index 000000000..bf673e86e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf89377_tableWithBreakBeforeParaStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf89702.docx b/sw/qa/extras/ooxmlexport/data/tdf89702.docx new file mode 100644 index 000000000..5542d1cbe Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf89702.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf89774.fodt b/sw/qa/extras/ooxmlexport/data/tdf89774.fodt new file mode 100644 index 000000000..18e1e7ac4 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf89774.fodt @@ -0,0 +1,11 @@ + + + + PT1M5S + + + + hello + + + diff --git a/sw/qa/extras/ooxmlexport/data/tdf89791.docx b/sw/qa/extras/ooxmlexport/data/tdf89791.docx new file mode 100644 index 000000000..7ea98aa58 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf89791.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf89890.docx b/sw/qa/extras/ooxmlexport/data/tdf89890.docx new file mode 100644 index 000000000..8b3e8ebe1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf89890.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf89991.docx b/sw/qa/extras/ooxmlexport/data/tdf89991.docx new file mode 100644 index 000000000..a074d9679 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf89991.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90153.docx b/sw/qa/extras/ooxmlexport/data/tdf90153.docx new file mode 100644 index 000000000..decbfa29d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90153.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90611.docx b/sw/qa/extras/ooxmlexport/data/tdf90611.docx new file mode 100644 index 000000000..ac54feedd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90611.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90681-1.odt b/sw/qa/extras/ooxmlexport/data/tdf90681-1.odt new file mode 100644 index 000000000..009e006ca Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90681-1.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90681-2.odt b/sw/qa/extras/ooxmlexport/data/tdf90681-2.odt new file mode 100644 index 000000000..3d9d46fc4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90681-2.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90697_complexBreaksHeaders.docx b/sw/qa/extras/ooxmlexport/data/tdf90697_complexBreaksHeaders.docx new file mode 100644 index 000000000..b5e7ef023 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90697_complexBreaksHeaders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90789-2.docx b/sw/qa/extras/ooxmlexport/data/tdf90789-2.docx new file mode 100644 index 000000000..2f831d722 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90789-2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90789.docx b/sw/qa/extras/ooxmlexport/data/tdf90789.docx new file mode 100644 index 000000000..b94b2ad7f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90789.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90810short.docx b/sw/qa/extras/ooxmlexport/data/tdf90810short.docx new file mode 100644 index 000000000..85b6369fb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90810short.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90906_colAuto.docx b/sw/qa/extras/ooxmlexport/data/tdf90906_colAuto.docx new file mode 100644 index 000000000..3df6b65c8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90906_colAuto.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf90906_colAutoB.docx b/sw/qa/extras/ooxmlexport/data/tdf90906_colAutoB.docx new file mode 100644 index 000000000..84825201b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90906_colAutoB.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf91122.docx b/sw/qa/extras/ooxmlexport/data/tdf91122.docx new file mode 100644 index 000000000..c7a45e4dd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf91122.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf91260.docx b/sw/qa/extras/ooxmlexport/data/tdf91260.docx new file mode 100644 index 000000000..4888f498d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf91260.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf91261.docx b/sw/qa/extras/ooxmlexport/data/tdf91261.docx new file mode 100644 index 000000000..6edb8b875 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf91261.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf91417.docx b/sw/qa/extras/ooxmlexport/data/tdf91417.docx new file mode 100644 index 000000000..1427f8cb3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf91417.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf91429.docx b/sw/qa/extras/ooxmlexport/data/tdf91429.docx new file mode 100644 index 000000000..5fc5f533a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf91429.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf91594.docx b/sw/qa/extras/ooxmlexport/data/tdf91594.docx new file mode 100644 index 000000000..ea539afa3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf91594.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92045.docx b/sw/qa/extras/ooxmlexport/data/tdf92045.docx new file mode 100644 index 000000000..d41f523c7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92045.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92124.docx b/sw/qa/extras/ooxmlexport/data/tdf92124.docx new file mode 100644 index 000000000..299931193 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92124.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92157.docx b/sw/qa/extras/ooxmlexport/data/tdf92157.docx new file mode 100644 index 000000000..ba5bc2a8f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92157.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92335.docx b/sw/qa/extras/ooxmlexport/data/tdf92335.docx new file mode 100644 index 000000000..28cf521c2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92335.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92454.docx b/sw/qa/extras/ooxmlexport/data/tdf92454.docx new file mode 100644 index 000000000..70426685e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92454.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92470_footnoteRestart.docx b/sw/qa/extras/ooxmlexport/data/tdf92470_footnoteRestart.docx new file mode 100644 index 000000000..b8746968b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92470_footnoteRestart.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92472.docx b/sw/qa/extras/ooxmlexport/data/tdf92472.docx new file mode 100644 index 000000000..6cf2b50e9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92472.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92521.odt b/sw/qa/extras/ooxmlexport/data/tdf92521.odt new file mode 100644 index 000000000..8148e49a2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92521.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92524_autoColor.doc b/sw/qa/extras/ooxmlexport/data/tdf92524_autoColor.doc new file mode 100644 index 000000000..147e9c133 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92524_autoColor.doc differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92526_ShapeLineWidth.odt b/sw/qa/extras/ooxmlexport/data/tdf92526_ShapeLineWidth.odt new file mode 100644 index 000000000..fffd9b9b2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92526_ShapeLineWidth.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92724_continuousBreaksComplex.docx b/sw/qa/extras/ooxmlexport/data/tdf92724_continuousBreaksComplex.docx new file mode 100644 index 000000000..808d05697 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92724_continuousBreaksComplex.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf92724_continuousBreaksComplex2.docx b/sw/qa/extras/ooxmlexport/data/tdf92724_continuousBreaksComplex2.docx new file mode 100644 index 000000000..18b63c07c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf92724_continuousBreaksComplex2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf93676-1.odt b/sw/qa/extras/ooxmlexport/data/tdf93676-1.odt new file mode 100644 index 000000000..37d621b90 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf93676-1.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf93919.docx b/sw/qa/extras/ooxmlexport/data/tdf93919.docx new file mode 100644 index 000000000..c7454690c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf93919.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf94043.docx b/sw/qa/extras/ooxmlexport/data/tdf94043.docx new file mode 100644 index 000000000..fa47be076 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf94043.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf94374.docx b/sw/qa/extras/ooxmlexport/data/tdf94374.docx new file mode 100644 index 000000000..d5d8d43eb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf94374.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf94628.docx b/sw/qa/extras/ooxmlexport/data/tdf94628.docx new file mode 100644 index 000000000..aa1d22684 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf94628.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf94801.docx b/sw/qa/extras/ooxmlexport/data/tdf94801.docx new file mode 100644 index 000000000..bdbd3f5e5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf94801.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95031.docx b/sw/qa/extras/ooxmlexport/data/tdf95031.docx new file mode 100644 index 000000000..ef082f752 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95031.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95033.docx b/sw/qa/extras/ooxmlexport/data/tdf95033.docx new file mode 100644 index 000000000..5d2cc73db Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95033.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95189.docx b/sw/qa/extras/ooxmlexport/data/tdf95189.docx new file mode 100644 index 000000000..456276b20 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95189.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95213.docx b/sw/qa/extras/ooxmlexport/data/tdf95213.docx new file mode 100644 index 000000000..831d543b9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95213.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95367_inheritFollowStyle.docx b/sw/qa/extras/ooxmlexport/data/tdf95367_inheritFollowStyle.docx new file mode 100644 index 000000000..96d91ddca Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95367_inheritFollowStyle.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95374.docx b/sw/qa/extras/ooxmlexport/data/tdf95374.docx new file mode 100644 index 000000000..49599953a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95374.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95376.docx b/sw/qa/extras/ooxmlexport/data/tdf95376.docx new file mode 100644 index 000000000..9bd2d05b2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95376.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95377.docx b/sw/qa/extras/ooxmlexport/data/tdf95377.docx new file mode 100644 index 000000000..be5551dca Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95377.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95495.docx b/sw/qa/extras/ooxmlexport/data/tdf95495.docx new file mode 100644 index 000000000..21f534b11 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95495.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95775.docx b/sw/qa/extras/ooxmlexport/data/tdf95775.docx new file mode 100644 index 000000000..a4c1293a5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95775.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95777.docx b/sw/qa/extras/ooxmlexport/data/tdf95777.docx new file mode 100644 index 000000000..e71fdea60 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95777.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95848.docx b/sw/qa/extras/ooxmlexport/data/tdf95848.docx new file mode 100644 index 000000000..3bf17f692 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95848.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf95848_2.docx b/sw/qa/extras/ooxmlexport/data/tdf95848_2.docx new file mode 100644 index 000000000..33c1773d5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf95848_2.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf96750_landscapeFollow.docx b/sw/qa/extras/ooxmlexport/data/tdf96750_landscapeFollow.docx new file mode 100644 index 000000000..612078b26 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf96750_landscapeFollow.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf97090.docx b/sw/qa/extras/ooxmlexport/data/tdf97090.docx new file mode 100644 index 000000000..3ba402718 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf97090.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf97371.docx b/sw/qa/extras/ooxmlexport/data/tdf97371.docx new file mode 100644 index 000000000..87e67ddf8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf97371.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf97517_testVmlLineShapeMirroredX.docx b/sw/qa/extras/ooxmlexport/data/tdf97517_testVmlLineShapeMirroredX.docx new file mode 100644 index 000000000..75e9d8573 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf97517_testVmlLineShapeMirroredX.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf97618_testVmlShapeTextWordWrap.docx b/sw/qa/extras/ooxmlexport/data/tdf97618_testVmlShapeTextWordWrap.docx new file mode 100644 index 000000000..eb31a1244 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf97618_testVmlShapeTextWordWrap.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf97648_relativeWidth.docx b/sw/qa/extras/ooxmlexport/data/tdf97648_relativeWidth.docx new file mode 100644 index 000000000..686fd6803 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf97648_relativeWidth.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf98000_changePageStyle.odt b/sw/qa/extras/ooxmlexport/data/tdf98000_changePageStyle.odt new file mode 100644 index 000000000..95f65e919 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf98000_changePageStyle.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf98620_environmentBiDi.odt b/sw/qa/extras/ooxmlexport/data/tdf98620_environmentBiDi.odt new file mode 100644 index 000000000..ae675b82f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf98620_environmentBiDi.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf98700_keepWithNext.odt b/sw/qa/extras/ooxmlexport/data/tdf98700_keepWithNext.odt new file mode 100644 index 000000000..4ed96da55 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf98700_keepWithNext.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99074.docx b/sw/qa/extras/ooxmlexport/data/tdf99074.docx new file mode 100644 index 000000000..d7be418fb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99074.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99090_pgbrkAfterTable.docx b/sw/qa/extras/ooxmlexport/data/tdf99090_pgbrkAfterTable.docx new file mode 100644 index 000000000..c914f350e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99090_pgbrkAfterTable.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99140.docx b/sw/qa/extras/ooxmlexport/data/tdf99140.docx new file mode 100644 index 000000000..42fa73d2f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99140.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99227.docx b/sw/qa/extras/ooxmlexport/data/tdf99227.docx new file mode 100644 index 000000000..27ec4eb38 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99227.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99602_charStyleSubscript.docx b/sw/qa/extras/ooxmlexport/data/tdf99602_charStyleSubscript.docx new file mode 100644 index 000000000..a88c122ee Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99602_charStyleSubscript.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99602_charStyleSubscript2.odt b/sw/qa/extras/ooxmlexport/data/tdf99602_charStyleSubscript2.odt new file mode 100644 index 000000000..a82c81564 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99602_charStyleSubscript2.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99602_subscript_charStyleSize.docx b/sw/qa/extras/ooxmlexport/data/tdf99602_subscript_charStyleSize.docx new file mode 100644 index 000000000..6283b8de7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99602_subscript_charStyleSize.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99616_hidemarkb.docx b/sw/qa/extras/ooxmlexport/data/tdf99616_hidemarkb.docx new file mode 100644 index 000000000..825108a3c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99616_hidemarkb.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99631.docx b/sw/qa/extras/ooxmlexport/data/tdf99631.docx new file mode 100644 index 000000000..c72950b72 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99631.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf99810-lost-arrow.odt b/sw/qa/extras/ooxmlexport/data/tdf99810-lost-arrow.odt new file mode 100644 index 000000000..20e60f6ce Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf99810-lost-arrow.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/test76108.docx b/sw/qa/extras/ooxmlexport/data/test76108.docx new file mode 100644 index 000000000..3476dc58c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test76108.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test76317.docx b/sw/qa/extras/ooxmlexport/data/test76317.docx new file mode 100644 index 000000000..2c86cdc38 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test76317.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test76317_2K10.docx b/sw/qa/extras/ooxmlexport/data/test76317_2K10.docx new file mode 100644 index 000000000..553206340 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test76317_2K10.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test76734_2K7.docx b/sw/qa/extras/ooxmlexport/data/test76734_2K7.docx new file mode 100644 index 000000000..5e0e114a5 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test76734_2K7.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test77219.docx b/sw/qa/extras/ooxmlexport/data/test77219.docx new file mode 100644 index 000000000..29aca1beb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test77219.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testCrashWhileSave.docx b/sw/qa/extras/ooxmlexport/data/testCrashWhileSave.docx new file mode 100644 index 000000000..205995171 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testCrashWhileSave.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testCustomShapePresetExport.odt b/sw/qa/extras/ooxmlexport/data/testCustomShapePresetExport.odt new file mode 100644 index 000000000..4f132e760 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testCustomShapePresetExport.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/testFootnote.docx b/sw/qa/extras/ooxmlexport/data/testFootnote.docx new file mode 100644 index 000000000..5bba6d8c9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testFootnote.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testGlossary.docx b/sw/qa/extras/ooxmlexport/data/testGlossary.docx new file mode 100644 index 000000000..eb05758d2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testGlossary.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testOuterShdw.docx b/sw/qa/extras/ooxmlexport/data/testOuterShdw.docx new file mode 100644 index 000000000..cc559a323 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testOuterShdw.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testPageref.docx b/sw/qa/extras/ooxmlexport/data/testPageref.docx new file mode 100644 index 000000000..65ca38aed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testPageref.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testParaListRightIndent.docx b/sw/qa/extras/ooxmlexport/data/testParaListRightIndent.docx new file mode 100644 index 000000000..975b598f4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testParaListRightIndent.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testPgMargin.docx b/sw/qa/extras/ooxmlexport/data/testPgMargin.docx new file mode 100644 index 000000000..aa54f6ad7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testPgMargin.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTOCFlag_u.docx b/sw/qa/extras/ooxmlexport/data/testTOCFlag_u.docx new file mode 100644 index 000000000..077bccfef Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTOCFlag_u.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTcBorders.docx b/sw/qa/extras/ooxmlexport/data/testTcBorders.docx new file mode 100644 index 000000000..b7fb81ad4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTcBorders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTdf130167_spilloverHeader.docx b/sw/qa/extras/ooxmlexport/data/testTdf130167_spilloverHeader.docx new file mode 100644 index 000000000..6bcafa285 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTdf130167_spilloverHeader.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTextBoxZOrder.docx b/sw/qa/extras/ooxmlexport/data/testTextBoxZOrder.docx new file mode 100644 index 000000000..c6dd0b8f3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTextBoxZOrder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTitlePage.docx b/sw/qa/extras/ooxmlexport/data/testTitlePage.docx new file mode 100644 index 000000000..72bfdf81f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTitlePage.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedEmptyParagraph.docx b/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedEmptyParagraph.docx new file mode 100644 index 000000000..bd332efa4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedEmptyParagraph.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedParagraphMark.docx b/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedParagraphMark.docx new file mode 100644 index 000000000..5d85f326d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedParagraphMark.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedTableCell.docx b/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedTableCell.docx new file mode 100644 index 000000000..c4d8394bf Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedTableCell.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedTableRow.docx b/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedTableRow.docx new file mode 100644 index 000000000..71c499878 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTrackChangesDeletedTableRow.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTrackChangesEmptyParagraphsInADeletion.docx b/sw/qa/extras/ooxmlexport/data/testTrackChangesEmptyParagraphsInADeletion.docx new file mode 100644 index 000000000..fcd78e9cd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTrackChangesEmptyParagraphsInADeletion.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedParagraphMark.docx b/sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedParagraphMark.docx new file mode 100644 index 000000000..33b451613 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedParagraphMark.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedTableCell.docx b/sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedTableCell.docx new file mode 100644 index 000000000..d1450be67 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedTableCell.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedTableRow.docx b/sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedTableRow.docx new file mode 100644 index 000000000..a7c0f56ed Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTrackChangesInsertedTableRow.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testTrackChangesParagraphProperties.docx b/sw/qa/extras/ooxmlexport/data/testTrackChangesParagraphProperties.docx new file mode 100644 index 000000000..4a8585c1d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testTrackChangesParagraphProperties.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testWPGZOrder.docx b/sw/qa/extras/ooxmlexport/data/testWPGZOrder.docx new file mode 100644 index 000000000..664f47a0b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testWPGZOrder.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testWPGtextboxes.docx b/sw/qa/extras/ooxmlexport/data/testWPGtextboxes.docx new file mode 100644 index 000000000..eb7486f2a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testWPGtextboxes.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/testWordArtWithinDraingtool.docx b/sw/qa/extras/ooxmlexport/data/testWordArtWithinDraingtool.docx new file mode 100644 index 000000000..c860828fa Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testWordArtWithinDraingtool.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_GIF_ImageCrop.docx b/sw/qa/extras/ooxmlexport/data/test_GIF_ImageCrop.docx new file mode 100644 index 000000000..8fe7ff222 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_GIF_ImageCrop.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_PNG_ImageCrop.docx b/sw/qa/extras/ooxmlexport/data/test_PNG_ImageCrop.docx new file mode 100644 index 000000000..7fda32144 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_PNG_ImageCrop.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_extra_image.docx b/sw/qa/extras/ooxmlexport/data/test_extra_image.docx new file mode 100644 index 000000000..cdb05afa4 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_extra_image.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_indentation.docx b/sw/qa/extras/ooxmlexport/data/test_indentation.docx new file mode 100644 index 000000000..b39e06658 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_indentation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_line_spacing.docx b/sw/qa/extras/ooxmlexport/data/test_line_spacing.docx new file mode 100644 index 000000000..2f92afbb7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_line_spacing.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_msword_hang.docx b/sw/qa/extras/ooxmlexport/data/test_msword_hang.docx new file mode 100644 index 000000000..cae7814f9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_msword_hang.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_ole_object.docx b/sw/qa/extras/ooxmlexport/data/test_ole_object.docx new file mode 100644 index 000000000..4391946f0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_ole_object.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_sdt_datepicker.docx b/sw/qa/extras/ooxmlexport/data/test_sdt_datepicker.docx new file mode 100644 index 000000000..3ff04cb60 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_sdt_datepicker.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_segfault_while_save.docx b/sw/qa/extras/ooxmlexport/data/test_segfault_while_save.docx new file mode 100644 index 000000000..1c364dd0d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_segfault_while_save.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/test_tdf120412.docx b/sw/qa/extras/ooxmlexport/data/test_tdf120412.docx new file mode 100644 index 000000000..6ce527842 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_tdf120412.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/textWatermark.docx b/sw/qa/extras/ooxmlexport/data/textWatermark.docx new file mode 100644 index 000000000..c8bff75e0 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textWatermark.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/text_cardinal_list.docx b/sw/qa/extras/ooxmlexport/data/text_cardinal_list.docx new file mode 100644 index 000000000..9a1efd7c6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/text_cardinal_list.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/text_number_list.docx b/sw/qa/extras/ooxmlexport/data/text_number_list.docx new file mode 100644 index 000000000..674c4e797 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/text_number_list.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/text_ordinal_list.docx b/sw/qa/extras/ooxmlexport/data/text_ordinal_list.docx new file mode 100644 index 000000000..bb5b4f520 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/text_ordinal_list.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/textbox-right-edge.docx b/sw/qa/extras/ooxmlexport/data/textbox-right-edge.docx new file mode 100644 index 000000000..990d1e49e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textbox-right-edge.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/textbox-rounded-corners.docx b/sw/qa/extras/ooxmlexport/data/textbox-rounded-corners.docx new file mode 100644 index 000000000..012e071cd Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textbox-rounded-corners.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/textbox-table.docx b/sw/qa/extras/ooxmlexport/data/textbox-table.docx new file mode 100644 index 000000000..8c06f5eeb Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textbox-table.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/textbox-wpg-only.docx b/sw/qa/extras/ooxmlexport/data/textbox-wpg-only.docx new file mode 100644 index 000000000..cd853f97d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textbox-wpg-only.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/textbox_picturefill.docx b/sw/qa/extras/ooxmlexport/data/textbox_picturefill.docx new file mode 100644 index 000000000..f4fab1b1f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textbox_picturefill.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/textframe-borders.docx b/sw/qa/extras/ooxmlexport/data/textframe-borders.docx new file mode 100644 index 000000000..424ed2a32 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textframe-borders.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/textframe-gradient.docx b/sw/qa/extras/ooxmlexport/data/textframe-gradient.docx new file mode 100644 index 000000000..edbfe53b1 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textframe-gradient.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/textframes.odt b/sw/qa/extras/ooxmlexport/data/textframes.odt new file mode 100644 index 000000000..301744af3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textframes.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/textinput.odt b/sw/qa/extras/ooxmlexport/data/textinput.odt new file mode 100644 index 000000000..3a5da684a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textinput.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/theme-preservation.docx b/sw/qa/extras/ooxmlexport/data/theme-preservation.docx new file mode 100644 index 000000000..2de4374da Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/theme-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/toc_doc.docx b/sw/qa/extras/ooxmlexport/data/toc_doc.docx new file mode 100644 index 000000000..26fa3dc71 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/toc_doc.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tools-line-numbering.docx b/sw/qa/extras/ooxmlexport/data/tools-line-numbering.docx new file mode 100644 index 000000000..8fb2668b3 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tools-line-numbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/toxmarkhyperlink.fodt b/sw/qa/extras/ooxmlexport/data/toxmarkhyperlink.fodt new file mode 100644 index 000000000..b1323f6f4 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/toxmarkhyperlink.fodt @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foo + foo + foo + foo + foo + foo + foo + foo + foobar + foo[fuh] + + + + + diff --git a/sw/qa/extras/ooxmlexport/data/transparent-shadow.docx b/sw/qa/extras/ooxmlexport/data/transparent-shadow.docx new file mode 100644 index 000000000..267eb1a86 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/transparent-shadow.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tscp.docx b/sw/qa/extras/ooxmlexport/data/tscp.docx new file mode 100644 index 000000000..bbb32b178 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tscp.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/unbalanced-columns.docx b/sw/qa/extras/ooxmlexport/data/unbalanced-columns.docx new file mode 100644 index 000000000..da6f93f76 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/unbalanced-columns.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/unwanted-section-break.docx b/sw/qa/extras/ooxmlexport/data/unwanted-section-break.docx new file mode 100644 index 000000000..a8565742f Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/unwanted-section-break.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/vml-text-vertical-adjust.docx b/sw/qa/extras/ooxmlexport/data/vml-text-vertical-adjust.docx new file mode 100644 index 000000000..1b05dbd6e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/vml-text-vertical-adjust.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/watermark-font.docx b/sw/qa/extras/ooxmlexport/data/watermark-font.docx new file mode 100644 index 000000000..5a09dc9f7 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/watermark-font.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/watermark-shapetype.docx b/sw/qa/extras/ooxmlexport/data/watermark-shapetype.docx new file mode 100644 index 000000000..423f3cf71 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/watermark-shapetype.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/watermark.docx b/sw/qa/extras/ooxmlexport/data/watermark.docx new file mode 100644 index 000000000..98c305af8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/watermark.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/wpg-nested.docx b/sw/qa/extras/ooxmlexport/data/wpg-nested.docx new file mode 100644 index 000000000..eba2aad0e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/wpg-nested.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/wpg-only.docx b/sw/qa/extras/ooxmlexport/data/wpg-only.docx new file mode 100644 index 000000000..7c86361f9 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/wpg-only.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/wps-char-color.docx b/sw/qa/extras/ooxmlexport/data/wps-char-color.docx new file mode 100644 index 000000000..a027e92be Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/wps-char-color.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/wps-only.docx b/sw/qa/extras/ooxmlexport/data/wps-only.docx new file mode 100644 index 000000000..7f7b8c75b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/wps-only.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/wrap-tight-through.docx b/sw/qa/extras/ooxmlexport/data/wrap-tight-through.docx new file mode 100644 index 000000000..1ea9e1478 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/wrap-tight-through.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/zoom.docx b/sw/qa/extras/ooxmlexport/data/zoom.docx new file mode 100644 index 000000000..ce93a1a9b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/zoom.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlencryption.cxx b/sw/qa/extras/ooxmlexport/ooxmlencryption.cxx new file mode 100644 index 000000000..2472a7bd3 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlencryption.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 +#include + +class Test : public SwModelTestBase +{ +public: + Test() + : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") + { + } + +protected: + bool mustTestImportOf(const char* filename) const override + { + return o3tl::ends_with(filename, ".docx"); + } +}; + +DECLARE_SW_ROUNDTRIP_TEST(testPasswordMSO2007, "Encrypted_MSO2007_abc.docx", "abc", Test) +{ + // Standard encryption format, AES 128, SHA1 + uno::Reference xParagraph(getParagraph(1)); + CPPUNIT_ASSERT_EQUAL(OUString("abc"), xParagraph->getString()); +} + +DECLARE_SW_ROUNDTRIP_TEST(testPasswordMSO2010, "Encrypted_MSO2010_abc.docx", "abc", Test) +{ + // Agile encryption format, AES 128, CBC, SHA1 + uno::Reference xParagraph(getParagraph(1)); + CPPUNIT_ASSERT_EQUAL(OUString("abc"), xParagraph->getString()); +} + +DECLARE_SW_ROUNDTRIP_TEST(testPasswordMSO2013, "Encrypted_MSO2013_abc.docx", "abc", Test) +{ + // Agile encryption format, AES 256, CBC, SHA512 + uno::Reference xParagraph(getParagraph(1)); + CPPUNIT_ASSERT_EQUAL(OUString("ABC"), xParagraph->getString()); +} + +DECLARE_SW_ROUNDTRIP_TEST(testPasswordLOStandard, "Encrypted_LO_Standard_abc.docx", "abc", Test) +{ + // Standard encryption format, AES 128, SHA1 + uno::Reference xParagraph(getParagraph(1)); + CPPUNIT_ASSERT_EQUAL(OUString("ABC"), xParagraph->getString()); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx new file mode 100644 index 000000000..5cd096e73 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -0,0 +1,1108 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {} + +protected: + /** + * Validation handling + */ + bool mustValidate(const char* filename) const override + { + const char* aAllowlist[] = { + "paragraph-mark-nonempty.odt" + }; + std::vector vAllowlist(aAllowlist, aAllowlist + SAL_N_ELEMENTS(aAllowlist)); + + return std::find(vAllowlist.begin(), vAllowlist.end(), filename) != vAllowlist.end(); + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testfdo81381) +{ + loadAndSave("fdo81381.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/w:object[1]/o:OLEObject[1]", "DrawAspect", "Icon"); +} + +CPPUNIT_TEST_FIXTURE(Test, testSdtAlias) +{ + loadAndSave("sdt-alias.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + + // was completely missing. + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:alias", "val", "Subtitle"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFooterBodyDistance) +{ + loadAndSave("footer-body-distance.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + // Page break was exported as section break, this was 0 + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:br", 1); +} + +// Check for correct header/footer with special first page with TOC inside: +// - DECLARE_ODFEXPORT_TEST(testTdf118393, "tdf118393.odt") +// - DECLARE_OOXMLEXPORT_TEST(testTdf118393, "tdf118393.odt") +CPPUNIT_TEST_FIXTURE(Test, testTdf118393) +{ + loadAndReload("tdf118393.odt"); + CPPUNIT_ASSERT_EQUAL( 7, getPages() ); + + // First page has no header/footer + { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // check first page + xmlXPathObjectPtr pXmlPage1Header = getXPathNode(pXmlDoc, "/root/page[1]/header"); + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlPage1Header->nodesetval)); + + xmlXPathObjectPtr pXmlPage1Footer = getXPathNode(pXmlDoc, "/root/page[1]/footer"); + CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlPage1Footer->nodesetval)); + + // check second page in the same way + xmlXPathObjectPtr pXmlPage2Header = getXPathNode(pXmlDoc, "/root/page[2]/header"); + CPPUNIT_ASSERT_EQUAL(1, xmlXPathNodeSetGetLength(pXmlPage2Header->nodesetval)); + + xmlXPathObjectPtr pXmlPage2Footer = getXPathNode(pXmlDoc, "/root/page[2]/footer"); + CPPUNIT_ASSERT_EQUAL(1, xmlXPathNodeSetGetLength(pXmlPage2Footer->nodesetval)); + } + + // All other pages should have header/footer + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[2]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[2]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[3]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[3]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[4]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[4]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[5]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[5]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[6]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[6]/footer/txt/text()")); + + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[7]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Seite * von *"), parseDump("/root/page[7]/footer/txt/text()")); +} + +DECLARE_OOXMLEXPORT_TEST(testfdo81031, "fdo81031.docx") +{ + // vml image was not rendered + // As there are also numPicBullets in the file, + // the fragmentPath was not changed hence relationships were not resolved. + + uno::Reference image = getShape(1); + uno::Reference xImage(image, uno::UNO_QUERY); + uno::Reference xGraphic = getProperty >(xImage, "Graphic"); + uno::Reference xBitmap(xGraphic, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( static_cast(381), xBitmap->getSize().Width ); + CPPUNIT_ASSERT_EQUAL( static_cast(148), xBitmap->getSize().Height ); +} + +CPPUNIT_TEST_FIXTURE(Test, testPlausableBorder) +{ + loadAndSave("plausable-border.docx"); + // sw::util::IsPlausableSingleWordSection() did not merge two page styles due to borders. + xmlDocUniquePtr pXmlDoc = parseExport(); + // Page break was exported as section break, this was 0 + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:br", 1); + + CPPUNIT_ASSERT_EQUAL( 2, getPages() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testUnwantedSectionBreak) +{ + loadAndSave("unwanted-section-break.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + // This was 2: an additional sectPr was added to the document. + assertXPath(pXmlDoc, "//w:sectPr", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testfdo80897 ) +{ + loadAndSave("fdo80897.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:bodyPr/a:prstTxWarp", "prst", "textTriangle"); +} + + +DECLARE_OOXMLEXPORT_TEST(testFdo80997, "fdo80997.docx") +{ + // The problem was that the DOCX exporter not able to export text behind textbox, if textbox has a wrap property. + uno::Reference< text::XTextRange > xParagraph = getParagraph( 1 ); + getRun( xParagraph, 1, " text"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo80902) +{ + loadAndSave("fdo80902.docx"); + // The problem was that the docGrid type was set as default so fix it for other grid type + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:docGrid", "type", "lines"); +} + +CPPUNIT_TEST_FIXTURE(Test, testParaShading) +{ + loadAndSave("para-shading.docx"); + // Make sure the themeColor attribute is not written when it would be empty. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p/w:pPr/w:shd", "themeColor"); +} + +DECLARE_OOXMLEXPORT_TEST(testFirstHeaderFooter, "first-header-footer.docx") +{ + // Test import and export of a section's headerf/footerf properties. + // (copied from a ww8export test, with doc converted to docx using Word) + + 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()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page footer"), parseDump("/root/page[1]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page header"), parseDump("/root/page[2]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page footer"), parseDump("/root/page[2]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page header"), parseDump("/root/page[3]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer"), parseDump("/root/page[3]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page header2"), parseDump("/root/page[4]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page footer 2"), parseDump("/root/page[4]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page header 2"), parseDump("/root/page[5]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer 2"), parseDump("/root/page[5]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page header 2"), parseDump("/root/page[6]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page footer 2"), parseDump("/root/page[6]/footer/txt/text()")); +} + +CPPUNIT_TEST_FIXTURE(Test, testFirstHeaderFooterB) +{ + loadAndReload("first-header-footerB.odt"); + CPPUNIT_ASSERT_EQUAL( 6, getPages() ); + + CPPUNIT_ASSERT_EQUAL(OUString("First page header"), parseDump("/root/page[1]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page footer"), parseDump("/root/page[1]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page header"), parseDump("/root/page[2]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page footer"), parseDump("/root/page[2]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page header"), parseDump("/root/page[3]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer"), parseDump("/root/page[3]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page header2"), parseDump("/root/page[4]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page footer 2"), parseDump("/root/page[4]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page header 2"), parseDump("/root/page[5]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer 2"), parseDump("/root/page[5]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page header 2"), parseDump("/root/page[6]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page footer 2"), parseDump("/root/page[6]/footer/txt/text()")); +} + +CPPUNIT_TEST_FIXTURE(Test, testFDO83044) +{ + loadAndSave("fdo83044.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:text", 1); +} + +DECLARE_OOXMLEXPORT_TEST(testfdo83428, "fdo83428.docx") +{ + uno::Reference xDocumentPropertiesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xProps(xDocumentPropertiesSupplier->getDocumentProperties()); + uno::Reference xUDProps(xProps->getUserDefinedProperties(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Document"), getProperty(xUDProps, "Testing")); +} + +CPPUNIT_TEST_FIXTURE(Test, testShapeInFloattable) +{ + loadAndSave("shape-in-floattable.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // No nested drawingML w:txbxContent. + assertXPath(pXmlDoc, "//mc:Choice//w:txbxContent//w:txbxContent", 0); + // Instead, make sure we have a separate shape and a table + assertXPath(pXmlDoc, "//mc:AlternateContent//mc:Choice[@Requires='wpg']", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testEmptyAnnotationMark) +{ + loadAndReload("empty-annotation-mark.docx"); + // Delete the word that is commented, and save again. + uno::Reference xRun = getRun(getParagraph(1), 3); + CPPUNIT_ASSERT_EQUAL(OUString("with"), xRun->getString()); + xRun->setString(""); + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + xStorable->store(); + + // Then inspect the OOXML markup of the modified document model. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // There were two commentReference nodes. + assertXPath(pXmlDoc, "//w:commentReference", "id", "0"); + // Empty comment range was not ignored on export, this was 1. + assertXPath(pXmlDoc, "//w:commentRangeStart", 0); + // Ditto. + assertXPath(pXmlDoc, "//w:commentRangeEnd", 0); +} + +DECLARE_OOXMLEXPORT_TEST(testDropdownInCell, "dropdown-in-cell.docx") +{ + // First problem: table was missing from the document, this was 0. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + + // Second problem: dropdown shape wasn't anchored inside the B1 cell. + if (getShapes() > 0) + { + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + uno::Reference xAnchor = xShape->getAnchor(); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("B1"), uno::UNO_QUERY); + uno::Reference xTextRangeCompare(xCell, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), xTextRangeCompare->compareRegionStarts(xAnchor, xCell)); + } + else if (!mbExported) + { + // ComboBox was imported as DropDown text field + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + uno::Any aField = xFields->nextElement(); + uno::Reference xServiceInfo(aField, uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.textfield.DropDown")); + } + else + { + // DropDown text field is exported as inline SDT, we import that back here. + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell = xTable->getCellByName("B1"); + uno::Reference xParagraphsAccess(xCell, uno::UNO_QUERY); + uno::Reference xParagraphs = xParagraphsAccess->createEnumeration(); + uno::Reference xParagraph(xParagraphs->nextElement(), + uno::UNO_QUERY); + uno::Reference xPortions = xParagraph->createEnumeration(); + uno::Reference xTextPortion(xPortions->nextElement(), uno::UNO_QUERY); + OUString aPortionType; + xTextPortion->getPropertyValue("TextPortionType") >>= aPortionType; + CPPUNIT_ASSERT_EQUAL(OUString("ContentControl"), aPortionType); + uno::Reference xContentControl; + xTextPortion->getPropertyValue("ContentControl") >>= xContentControl; + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + uno::Sequence aListItems; + xContentControlProps->getPropertyValue("ListItems") >>= aListItems; + CPPUNIT_ASSERT(aListItems.hasElements()); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTableAlignment, "table-alignment.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + // This was LEFT_AND_WIDTH, i.e. table alignment wasn't imported correctly. + CPPUNIT_ASSERT_EQUAL(text::HoriOrientation::RIGHT, getProperty(xTable, "HoriOrient")); +} + +CPPUNIT_TEST_FIXTURE(Test, testSdtIgnoredFooter) +{ + loadAndSave("sdt-ignored-footer.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // This was 1, make sure no w:sdt sneaks into the main document from the footer. + assertXPath(pXmlDoc, "//w:sdt", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testSdtRunPicture) +{ + loadAndSave("sdt-run-picture.docx"); + // SDT around run was exported as SDT around paragraph + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // This was 1: there was an SDT around w:p. + assertXPath(pXmlDoc, "//w:body/w:sdt", 0); + // This was 0: there were no SDT around w:r. + assertXPath(pXmlDoc, "//w:body/w:p/w:sdt", 1); +} + +DECLARE_OOXMLEXPORT_TEST(testChartDupe, "chart-dupe.docx") +{ + // Single chart was exported back as two charts. + uno::Reference xTextEmbeddedObjectsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xEmbeddedObjects(xTextEmbeddedObjectsSupplier->getEmbeddedObjects(), uno::UNO_QUERY); + // This was 2, on second import we got a duplicated chart copy. + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xEmbeddedObjects->getCount()); + + xmlDocUniquePtr pXmlDocCT = parseExport("[Content_Types].xml"); + + if (!pXmlDocCT) + return; // initial import + + assertXPath(pXmlDocCT, + "/ContentType:Types/ContentType:Override[@PartName='/word/charts/chart1.xml']", + "ContentType", + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"); + assertXPath(pXmlDocCT, "/ContentType:Types/ContentType:Override[@PartName='/word/embeddings/Microsoft_Excel_Worksheet1.xlsx']", "ContentType", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + + // check the rels too + xmlDocUniquePtr pXmlDocRels = parseExport("word/charts/_rels/chart1.xml.rels"); + assertXPath(pXmlDocRels, + "/rels:Relationships/rels:Relationship[@Target='../embeddings/Microsoft_Excel_Worksheet1.xlsx']", + "Type", + "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package"); + // check the content too + xmlDocUniquePtr pXmlDocChart1 = parseExport("word/charts/chart1.xml"); + assertXPath(pXmlDocChart1, + "/c:chartSpace/c:externalData", + "id", + "rId1"); +} + +DECLARE_OOXMLEXPORT_TEST(testPositionAndRotation, "position-and-rotation.docx") +{ + // The document should look like: "This line is tricky, because only 'This line is tricky,' is on the left." + // But the image was pushed down, so it did not break the line into two text portions. + uno::Reference xShape = getShape(1); + // Should be 1559, was -5639 + CPPUNIT_ASSERT(xShape->getPosition().X > 1500); + // Should be 88, was 473 + CPPUNIT_ASSERT(xShape->getPosition().Y < 100); +} + +DECLARE_OOXMLEXPORT_TEST(testNumberingFont, "numbering-font.docx") +{ + // check that the original numrule font name is still Calibri + uno::Reference xStyle(getStyles("CharacterStyles")->getByName("ListLabel 1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Calibri"), getProperty(xStyle, "CharFontName")); + + uno::Reference xPara = getParagraph(2); + uno::Reference properties(xPara, uno::UNO_QUERY); + uno::Any aValue = properties->getPropertyValue("ListAutoFormat"); + CPPUNIT_ASSERT(aValue.hasValue()); + uno::Sequence aListAutoFormat; + CPPUNIT_ASSERT(aValue >>= aListAutoFormat); + auto it = std::find_if(std::cbegin(aListAutoFormat), std::cend(aListAutoFormat), + [](const css::beans::NamedValue& val) { return val.Name == "CharFontName"; }); + CPPUNIT_ASSERT(it != std::cend(aListAutoFormat)); + OUString sOverrideFontName; + CPPUNIT_ASSERT(it->Value >>= sOverrideFontName); + // but the overridden font name is Verdana + CPPUNIT_ASSERT_EQUAL(OUString("Verdana"), sOverrideFontName); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf106541_noinheritChapterNumbering) +{ + loadAndReload("tdf106541_noinheritChapterNumbering.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // in LO, it appears that styles based on the Chapter Numbering style explicitly set the + // numbering style/outline level to 0 by default, and that LO prevents inheriting directly from "Outline" style. + // Adding this preventative unit test to ensure that any fix for tdf106541 doesn't make incorrect assumptions. + +//reverting tdf#76817 hard-codes the numbering style on the paragraph, preventing RT of "Outline" style +// CPPUNIT_ASSERT_EQUAL(OUString("Outline"), getProperty(getParagraph(1), "NumberingStyleName")); + + OUString sPara3NumberingStyle = getProperty(getParagraph(3), "NumberingStyleName"); + CPPUNIT_ASSERT_EQUAL(sPara3NumberingStyle, getProperty(getParagraph(4), "NumberingStyleName")); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//body/txt/Special", 3); //three of the four paragraphs have numbering + assertXPath(pXmlDoc, "//body/txt[1]/Special", "rText", "1"); + assertXPath(pXmlDoc, "//body/txt[2]/Special", 0); //second paragraph style disables numbering + assertXPath(pXmlDoc, "//body/txt[3]/Special", "rText", "I."); + assertXPath(pXmlDoc, "//body/txt[4]/Special", "rText", "II."); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf53856_conflictingStyle, "tdf53856_conflictingStyle.docx") +{ + // The "Text" style conflicted with builtin paragraph style Caption -> Text + uno::Reference xStyle(getStyles("ParagraphStyles")->getByName("Text"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Times New Roman"), getProperty(xStyle, "CharFontName")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty(xStyle, "CharPosture")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf104713_undefinedStyles, "tdf104713_undefinedStyles.docx") +{ + // Normal paragraph style was not defined, so don't replace conflicting styles + uno::Reference xStyle(getStyles("ParagraphStyles")->getByName("Heading 1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(212), getProperty(xStyle, "ParaBottomMargin")); + + // tdf108765: once importing is finished, use default values for any styles not yet defined. + xStyle.set( getStyles("ParagraphStyles")->getByName("Footnote"), uno::UNO_QUERY ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Font size", 10.f, getProperty(xStyle, "CharHeight")); +} + +CPPUNIT_TEST_FIXTURE(Test, testDrawingmlFlipv) +{ + loadAndSave("drawingml-flipv.docx"); + // The problem was that the shape had vertical flip only, but then we added rotation as well on export. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPathNoAttribute(pXmlDoc, "//a:xfrm", "rot"); +} + +CPPUNIT_TEST_FIXTURE(Test, testRot90Fliph) +{ + loadAndSave("rot90-fliph.docx"); + // The problem was that a shape rotation of 90° got turned into 270° after roundtrip. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "//a:xfrm", "flipH", "1"); + // This was 16200000 (270 * 60000). + assertXPath(pXmlDoc, "//a:xfrm", "rot", "5400000"); +} + +CPPUNIT_TEST_FIXTURE(Test, testRot180Flipv) +{ + loadAndSave("rot180-flipv.docx"); + // 180° rotation got lost after roundtrip. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "//a:xfrm", "flipV", "1"); + // This attribute was completely missing. + assertXPath(pXmlDoc, "//a:xfrm", "rot", "10800000"); +} + +CPPUNIT_TEST_FIXTURE(Test, testRot270Flipv) +{ + loadAndSave("rot270-flipv.docx"); + // 270° rotation got turned into 90° after roundtrip. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "//a:xfrm", "flipV", "1"); + // This was 5400000. + assertXPath(pXmlDoc, "//a:xfrm", "rot", "16200000"); +} + +CPPUNIT_TEST_FIXTURE(Test, testMsoPosition) +{ + loadAndSave("bnc884615-mso-position.docx"); + { + xmlDocUniquePtr doc = parseExport("word/footer1.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", "style"); + 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", "style"); + 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", "style"); + 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 ); + } + + xmlDocUniquePtr doc = parseExport("word/header1.xml"); + OUString style1 = getXPath(doc, "/w:hdr/w:p/w:r[2]/mc:AlternateContent/mc:Fallback/w:pict/v:rect", "style"); + 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", "style"); + 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", "style"); + 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 ); + +} + +DECLARE_OOXMLEXPORT_TEST(testWpsCharColor, "wps-char-color.docx") +{ + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + // This was -1, i.e. the character color was default (-1), not white. + CPPUNIT_ASSERT_EQUAL(COL_WHITE, getProperty(xShape->getStart(), "CharColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTableStyleCellBackColor, "table-style-cell-back-color.docx") +{ + // The problem was that cell background was white, not green. + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell = xTable->getCellByName("A1"); + // This was 0xffffff. + CPPUNIT_ASSERT_EQUAL(Color(0x00ff00), getProperty(xCell, "BackColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTableStyleBorder, "table-style-border.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + // This was 0, the second cell was missing its right border. + uno::Reference xCell = xTable->getCellByName("A2"); + CPPUNIT_ASSERT(getProperty(xCell, "RightBorder").LineWidth > 0); + + // This was also 0 (even after fixing the previous problem), the first cell was missing its right border, too. + xCell = xTable->getCellByName("A1"); + CPPUNIT_ASSERT(getProperty(xCell, "RightBorder").LineWidth > 0); +} + +DECLARE_OOXMLEXPORT_TEST(testTableStyleBorderExport, "table-style-border-export.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell = xTable->getCellByName("A3"); + // Bottom border was white, so this was 0xffffff. + CPPUNIT_ASSERT_EQUAL(Color(0x8064A2), Color(ColorTransparency, getProperty(xCell, "BottomBorder").Color)); +} + +DECLARE_OOXMLEXPORT_TEST(testAnchorPosition, "anchor-position.docx") +{ + // The problem was that the at-char anchored picture was at the end of the + // paragraph, so there were only two positions: a Text, then a Frame one. + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(getRun(getParagraph(1), 1), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty(getRun(getParagraph(1), 2), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(getRun(getParagraph(1), 3), "TextPortionType")); +} + +DECLARE_OOXMLEXPORT_TEST(testMultiPageToc, "multi-page-toc.docx") +{ + // Import of this document triggered an STL assertion. + + // Document has a ToC from its second paragraph. + uno::Reference xTextSection = getProperty< uno::Reference >(getParagraph(2), "TextSection"); + CPPUNIT_ASSERT_EQUAL(OUString("Table of Contents1"), xTextSection->getName()); + // There should be a field in the header as well. + uno::Reference xHeaderText = getProperty< uno::Reference >(getStyles("PageStyles")->getByName("Standard"), "HeaderText"); + CPPUNIT_ASSERT_EQUAL(OUString("TextFieldStart"), getProperty(getRun(getParagraphOfText(1, xHeaderText), 1), "TextPortionType")); +} + +DECLARE_OOXMLEXPORT_TEST(testTextboxTable, "textbox-table.docx") +{ + // We wrote not-well-formed XML during export for this one: + // Shape with textbox, having a table and also anchored inside a table. + + // Just make sure that we have both tables. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTables->getCount()); +} + +CPPUNIT_TEST_FIXTURE(Test, testCropPixel) +{ + loadAndSave("crop-pixel.docx"); + // If map mode of the graphic is in pixels, then we used to handle original + // size of the graphic as mm100, but it was in pixels. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // This is 17667 in the original document, was 504666 (so the image + // become invisible), now is around 19072. + CPPUNIT_ASSERT(getXPath(pXmlDoc, "//a:srcRect", "l").toInt32() <= 22452); +} +/* FixMe: tdf#142805 Test disabled, because the picture is not load at all. +CPPUNIT_TEST_FIXTURE(Test, testEffectExtent) +{ + loadAndSave("effect-extent.docx"); + // The problem was that in case there were no shadows on the picture, we + // wrote a full or zeros. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // E.g. this was 0. + assertXPath(pXmlDoc, "//wp:effectExtent", "l", "114300"); +} +*/ +CPPUNIT_TEST_FIXTURE(Test, testEffectExtentInline) +{ + loadAndSave("effect-extent-inline.docx"); + // The problem was that in case there was inline rotated picture, we + // wrote a full or zeros. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // E.g. this was 0. + assertXPath(pXmlDoc, "//wp:effectExtent", "l", "609600"); + assertXPath(pXmlDoc, "//wp:effectExtent", "r", "590550"); + assertXPath(pXmlDoc, "//wp:effectExtent", "t", "590550"); + assertXPath(pXmlDoc, "//wp:effectExtent", "b", "571500"); +} + +DECLARE_OOXMLEXPORT_TEST(testEm, "em.docx") +{ + // Test all possible arguments. + CPPUNIT_ASSERT_EQUAL(text::FontEmphasis::NONE, getProperty(getRun(getParagraph(1), 1), "CharEmphasis")); + // This was ACCENT_ABOVE. + CPPUNIT_ASSERT_EQUAL(text::FontEmphasis::DOT_ABOVE, getProperty(getRun(getParagraph(1), 2), "CharEmphasis")); + // This was DOT_ABOVE. + CPPUNIT_ASSERT_EQUAL(text::FontEmphasis::ACCENT_ABOVE, getProperty(getRun(getParagraph(1), 3), "CharEmphasis")); + CPPUNIT_ASSERT_EQUAL(text::FontEmphasis::CIRCLE_ABOVE, getProperty(getRun(getParagraph(1), 4), "CharEmphasis")); + CPPUNIT_ASSERT_EQUAL(text::FontEmphasis::DOT_BELOW, getProperty(getRun(getParagraph(1), 5), "CharEmphasis")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo77716, "fdo77716.docx") +{ + // The problem was that there should be 200 twips spacing between the two paragraphs, but there wasn't any. + uno::Reference xStyle(getStyles("ParagraphStyles")->getByName("Standard"), uno::UNO_QUERY); + // This was 0. + CPPUNIT_ASSERT_EQUAL(static_cast(convertTwipToMm100(200)), getProperty(xStyle, "ParaBottomMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testAfterlines, "afterlines.docx") +{ + // This was 353, i.e. the value of from , instead of from . + CPPUNIT_ASSERT_EQUAL(static_cast(423), getProperty(getParagraph(1), "ParaBottomMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testParagraphMark, "paragraph-mark.docx") +{ + // The problem was that we didn't handle the situation when an empty paragraph's marker had both a char style and some direct formatting. + + // This was 11. + CPPUNIT_ASSERT_EQUAL(12.f, getProperty(getParagraph(1), "CharHeight")); + // This was empty. + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty(getRun(getParagraph(1), 1), "CharStyleName")); +} + +DECLARE_OOXMLEXPORT_TEST(testParagraphMark2, "paragraph-mark2.docx") +{ + // The problem was that we didn't handle the situation when an empty paragraph's marker had both a char style and some direct formatting. + + // This was Segoe UI, set by Char Style FontStyle11 presumably. + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty(getRun(getParagraph(1), 1), "CharFontName")); + // This was 11, set by Char Style FontStyle11 presumably. + CPPUNIT_ASSERT_EQUAL(10.f, getProperty(getRun(getParagraph(1), 1), "CharHeight")); +} + +CPPUNIT_TEST_FIXTURE(Test, testParagraphMarkNonempty) +{ + loadAndSave("paragraph-mark-nonempty.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport(); + // There were two elements, make sure the 40 one is dropped and the 20 one is kept. + assertXPath(pXmlDoc, "//w:p/w:pPr/w:rPr/w:sz", "val", "20"); +} + +DECLARE_OOXMLEXPORT_TEST(testPageBreakBefore, "page-break-before.docx") +{ + // This was style::BreakType_PAGE_BEFORE, i.e. page break wasn't ignored, as it should have been. + CPPUNIT_ASSERT_EQUAL(style::BreakType_NONE, getProperty(getParagraph(2), "BreakType")); +} + +DECLARE_OOXMLEXPORT_TEST(testTableRtl, "table-rtl.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + // This was text::WritingMode2::LR_TB, i.e. direction of the table was ignored. + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::RL_TB, getProperty(xTable, "WritingMode")); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlCjklist30, "cjklist30.docx") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::TIAN_GAN_ZH, numFormat); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlCjklist31, "cjklist31.docx") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::DI_ZI_ZH, numFormat); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlCjklist34, "cjklist34.docx") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::NUMBER_UPPER_ZH_TW, numFormat); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlCjklist35, "cjklist35.docx") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::NUMBER_LOWER_ZH, numFormat); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlCjklist44, "cjklist44.docx") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::NUMBER_DIGITAL2_KO, numFormat); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlTextNumberList, "text_number_list.docx") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::TEXT_NUMBER, numFormat); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlTextCardinalList, "text_cardinal_list.docx") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::TEXT_CARDINAL, numFormat); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlTextOrdinalList, "text_ordinal_list.docx") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::TEXT_ORDINAL, numFormat); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlSymbolChicagoList, "symbol_chicago_list.docx") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::SYMBOL_CHICAGO, numFormat); +} + +CPPUNIT_TEST_FIXTURE(Test, testOoxmlNumListZHTW) +{ + loadAndSave("numlist-zhtw.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/numbering.xml"); + + assertXPath ( pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[1]/w:numFmt","val","taiwaneseCountingThousand" ); +} + +CPPUNIT_TEST_FIXTURE(Test, testOoxmlNumListZHCN) +{ + loadAndSave("numlist-zhcn.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/numbering.xml"); + + assertXPath ( pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[1]/w:numFmt","val","chineseCountingThousand" ); +} + +CPPUNIT_TEST_FIXTURE(Test, testOOxmlOutlineNumberTypes) +{ + loadAndSave("outline-number-types.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/numbering.xml"); + + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[1]/w:pStyle", "val", "Heading1"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[1]/w:numFmt", "val", "none"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[2]/w:numFmt", "val", "decimalEnclosedCircle"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[3]/w:numFmt", "val", "decimal"); // CHARS_GREEK_UPPER_LETTER fallback to decimal + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[4]/w:numFmt", "val", "decimal"); // CHARS_GREEK_LOWER_LETTER fallback to decimal + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[5]/w:numFmt", "val", "arabicAlpha"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[6]/w:numFmt", "val", "hindiVowels"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[7]/w:numFmt", "val", "thaiLetters"); + + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[2]/w:lvl[1]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[2]/w:lvl[2]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[2]/w:lvl[3]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[2]/w:lvl[4]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[2]/w:lvl[5]/w:numFmt", "val", "russianUpper"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[2]/w:lvl[6]/w:numFmt", "val", "russianLower"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[2]/w:lvl[7]/w:numFmt", "val", "russianUpper"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[2]/w:lvl[8]/w:numFmt", "val", "russianLower"); + + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[3]/w:lvl[1]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[3]/w:lvl[2]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[3]/w:lvl[3]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[3]/w:lvl[4]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[3]/w:lvl[5]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[3]/w:lvl[6]/w:numFmt", "val", "decimal"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[3]/w:lvl[7]/w:numFmt", "val", "decimal"); + +} + +DECLARE_OOXMLEXPORT_TEST(testNumParentStyle, "num-parent-style.docx") +{ + CPPUNIT_ASSERT_EQUAL(static_cast(1), + getProperty(getParagraph(1), "OutlineLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(getParagraph(1), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(static_cast(2), + getProperty(getParagraph(2), "OutlineLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), getProperty(getParagraph(2), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(static_cast(1), + getProperty(getParagraph(3), "OutlineLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("2"), getProperty(getParagraph(3), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(static_cast(2), + getProperty(getParagraph(4), "OutlineLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("2.1"), getProperty(getParagraph(4), "ListLabelString")); +} + +DECLARE_OOXMLEXPORT_TEST(testNumOverrideLvltext, "num-override-lvltext.docx") +{ + uno::Reference xRules = getProperty< uno::Reference >(getStyles("NumberingStyles")->getByName("WWNum1"), "NumberingRules"); + // This was 1, i.e. the numbering on the second level was "1", not "1.1". + // Check the paragraph properties, not the list ones, since they can differ due to overrides + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), getProperty(xPara, "ListLabelString")); + + // The paragraph marker's red font color was inherited by the number portion, this was ff0000. + CPPUNIT_ASSERT_EQUAL(OUString("ffffffff"), parseDump("//Special[@nType='PortionType::Number']/SwFont", "color")); +} + +DECLARE_OOXMLEXPORT_TEST(testNumOverrideStart, "num-override-start.docx") +{ + uno::Reference xRules = getProperty< uno::Reference >(getStyles("NumberingStyles")->getByName("WWNum1"), "NumberingRules"); + // List starts with "1.1" + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), comphelper::SequenceAsHashMap(xRules->getByIndex(1))["StartWith"].get()); + // But paragraph starts with "1.3" + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), getProperty(xPara, "NumberingLevel")); + OUString listId; + CPPUNIT_ASSERT(xPara->getPropertyValue("ListId") >>= listId); + CPPUNIT_ASSERT_EQUAL(OUString("1.3"), getProperty(xPara, "ListLabelString")); +} + +DECLARE_OOXMLEXPORT_TEST(testTextboxRightEdge, "textbox-right-edge.docx") +{ + // I'm fairly sure this is not specific to DOCX, but the doc model created + // by the ODF import doesn't trigger this bug, so let's test this here + // instead of uiwriter. + int nShapeLeft = parseDump("//anchored/SwAnchoredDrawObject/bounds", "left").toInt32(); + int nShapeWidth = parseDump("//anchored/SwAnchoredDrawObject/bounds", "width").toInt32(); + int nTextboxLeft = parseDump("//anchored/fly/infos/bounds", "left").toInt32(); + int nTextboxWidth = parseDump("//anchored/fly/infos/bounds", "width").toInt32(); + // This is a rectangle, make sure the right edge of the textbox is still + // inside the draw shape. + CPPUNIT_ASSERT(nShapeLeft + nShapeWidth >= nTextboxLeft + nTextboxWidth); +} + +DECLARE_OOXMLEXPORT_TEST(testEffectExtentMargin, "effectextent-margin.docx") +{ + // This was 318, i.e. oox::drawingml::convertEmuToHmm(114300), effectExtent + // wasn't part of the margin, leading to the fly not taking enough space + // around itself. + CPPUNIT_ASSERT_EQUAL(oox::drawingml::convertEmuToHmm(114300+95250), getProperty(getShape(1), "LeftMargin")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf88583) +{ + loadAndReload("tdf88583.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(getParagraph(1), "FillStyle")); + CPPUNIT_ASSERT_EQUAL(static_cast(0x00cc00), getProperty(getParagraph(1), "FillColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf97090, "tdf97090.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x95B3D7), getProperty(xTable->getCellByName("A1"), "BackColor")); + + uno::Reference paraEnumAccess(xTable->getCellByName("A1"), uno::UNO_QUERY); + assert( paraEnumAccess.is() ); + uno::Reference paraEnum = paraEnumAccess->createEnumeration(); + + assert( paraEnum.is() ); + uno::Reference paragraphProperties(paraEnum->nextElement(), uno::UNO_QUERY); + assert( paragraphProperties.is() ); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(paragraphProperties, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0xffffff), getProperty(paragraphProperties, "FillColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf89791, "tdf89791.docx") +{ + if (mbExported) + { + uno::Reference xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), maTempFile.GetURL()); + CPPUNIT_ASSERT_EQUAL(false, bool(xNameAccess->hasByName("docProps/custom.xml"))); + } + + //tdf#102619 - setting FollowStyle with a not-yet-created style was failing. (Titre is created before Corps de texte). + uno::Reference< beans::XPropertySet > properties(getStyles("ParagraphStyles")->getByName("Titre"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Corps de texte"), getProperty(properties, "FollowStyle")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf91261, "tdf91261.docx") +{ + bool snapToGrid = true; + uno::Reference< text::XTextRange > xPara = getParagraph( 2 ); + uno::Reference< beans::XPropertySet > properties( xPara, uno::UNO_QUERY); + properties->getPropertyValue("SnapToGrid") >>= snapToGrid ; + CPPUNIT_ASSERT_EQUAL(false, snapToGrid); + + uno::Reference< beans::XPropertySet> xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + sal_Int16 nGridMode; + xStyle->getPropertyValue("GridMode") >>= nGridMode; + CPPUNIT_ASSERT_EQUAL( sal_Int16(2), nGridMode); + + bool bGridSnapToChars; + xStyle->getPropertyValue("GridSnapToChars") >>= bGridSnapToChars; + CPPUNIT_ASSERT_EQUAL(true, bGridSnapToChars); + +} + +DECLARE_OOXMLEXPORT_TEST(testTdf79639, "tdf79639.docx") +{ + // This was 0, floating table in header wasn't converted to a TextFrame. + CPPUNIT_ASSERT_EQUAL(1, getShapes()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf89890, "tdf89890.docx") +{ + // Numbering picture bullet was too large. + uno::Reference xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProps; + xLevels->getByIndex(0) >>= aProps; // 1st level + + bool bFound = false; + for (beans::PropertyValue const & rProp : std::as_const(aProps)) + { + if (rProp.Name == "GraphicSize") + { + // Height of the graphic was too large: 4382 after import, then 2485 after roundtrip. + CPPUNIT_ASSERT_EQUAL(static_cast(279), rProp.Value.get().Height); + bFound = true; + } + } + CPPUNIT_ASSERT(bFound); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf91594, "tdf91594.docx") +{ + uno::Reference xPara1(getParagraph(1)); + CPPUNIT_ASSERT_EQUAL(u'\xf0fb', xPara1->getString()[0] ); + uno::Reference xPara2(getParagraph(2)); + CPPUNIT_ASSERT_EQUAL(u'\xf0fc', xPara2->getString()[0] ); + uno::Reference xPara3(getParagraph(3)); + CPPUNIT_ASSERT_EQUAL(u'\xf0fd', xPara3->getString()[0] ); + uno::Reference xPara4(getParagraph(4)); + CPPUNIT_ASSERT_EQUAL(u'\xf0fe', xPara4->getString()[0] ); + + uno::Reference xRun(getRun(xPara1,1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontNameAsian")); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontNameComplex")); +} +DECLARE_OOXMLEXPORT_TEST(testTDF99434, "protectedform.docx") +{ + css::uno::Reference m_xTextFactory(mxComponent, uno::UNO_QUERY); + uno::Reference< beans::XPropertySet > xSettings(m_xTextFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY); + uno::Any aProtect = xSettings->getPropertyValue("ProtectForm"); + bool bProt = false; + aProtect >>= bProt; + CPPUNIT_ASSERT(bProt); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf44986, "tdf44986.docx") +{ + // Check that the table at the second paragraph. + uno::Reference xTable(getParagraphOrTable(2), uno::UNO_QUERY); + uno::Reference xTableRows = xTable->getRows(); + // Check the first row of the table, it should have two cells (one separator). + // This was 0: the first row had no separators, so it had only one cell, which was too wide. + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty< uno::Sequence >(xTableRows->getByIndex(0), "TableColumnSeparators").getLength()); + // Check content of cells, including the newly added gridAfter cell + CPPUNIT_ASSERT_EQUAL(OUString("A1"), uno::Reference(xTable->getCellByName("A1"), uno::UNO_QUERY_THROW)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("A2"), uno::Reference(xTable->getCellByName("A2"), uno::UNO_QUERY_THROW)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(""), uno::Reference(xTable->getCellByName("B1"), uno::UNO_QUERY_THROW)->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf118682) +{ + loadAndSave("tdf118682.fodt"); + // Support cell references in table formulas + xmlDocUniquePtr pXmlDoc = parseExport(); + + // Formula fields were completely missing. + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc/w:p/w:r/w:fldChar", 3); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc/w:p/w:r/w:fldChar", 3); + + // Cell references were parenthesized: + and SUM() + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc/w:p/w:r[2]/w:instrText", " =A1+A2"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc/w:p/w:r[2]/w:instrText", " =SUM(A1:A3)"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf133163) +{ + loadAndSave("tdf133163.fodt"); + xmlDocUniquePtr pXmlDoc = parseExport(); + + // Formula cells were completely missing. + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc/w:p/w:r/w:fldChar", 3); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc/w:p/w:r/w:fldChar", 3); + + // Cell references were parenthesized: + and SUM() + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc/w:p/w:r[2]/w:instrText", " =A1+A2"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc/w:p/w:r[2]/w:instrText", " =SUM(A1:A3)"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf133647) +{ + loadAndSave("tdf133647.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + + // Keep original formula during round-trip + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc[4]/w:p/w:r[2]/w:instrText", " =SUM(A1,B1)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[5]/w:tc[4]/w:p/w:r[2]/w:instrText", " =SUM(C1:D1)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[6]/w:tc[4]/w:p/w:r[2]/w:instrText", " =SUM(A1,5,B1:C1,6)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[7]/w:tc[4]/w:p/w:r[2]/w:instrText", " =(1+2)*SUM(C1,D1)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[8]/w:tc[4]/w:p/w:r[2]/w:instrText", " =3*(2+SUM(A1:C1)+7)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[9]/w:tc[4]/w:p/w:r[2]/w:instrText", " =1+(SUM(1,2))"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[10]/w:tc[4]/w:p/w:r[2]/w:instrText", " =(SUM(C1,5)*(2+7))*(3+SUM(1,B1))"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[11]/w:tc[4]/w:p/w:r[2]/w:instrText", " =sum(a1,b1)"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf123386) +{ + loadAndSave("tdf123386.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + + // Keep original formula during round-trip + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc[4]/w:p/w:r[2]/w:instrText", " =A1 < 2"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc[4]/w:p/w:r[2]/w:instrText", " =B1 > 1"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[5]/w:tc[4]/w:p/w:r[2]/w:instrText", " =C1=3"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[6]/w:tc[4]/w:p/w:r[2]/w:instrText", " =D1 <> 3"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[7]/w:tc[4]/w:p/w:r[2]/w:instrText", " =AND(A1=1,B1=2)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[8]/w:tc[4]/w:p/w:r[2]/w:instrText", " =AND((A1<1),(B1<>2))"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[9]/w:tc[4]/w:p/w:r[2]/w:instrText", " =OR(A1=1,B1=2)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[10]/w:tc[4]/w:p/w:r[2]/w:instrText", " =OR(TRUE,FALSE)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[11]/w:tc[4]/w:p/w:r[2]/w:instrText", " =NOT(TRUE)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[12]/w:tc[4]/w:p/w:r[2]/w:instrText", " =AND(1,DEFINED(ABC1))"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf123389) +{ + loadAndSave("tdf123389.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + + // Keep original formula during round-trip + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc[4]/w:p/w:r[2]/w:instrText", " =ROUND(2.345,1)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc[4]/w:p/w:r[2]/w:instrText", " =ROUND(A1,2)"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf106953, "tdf106953.docx") +{ + uno::Reference xRules = getProperty< uno::Reference >(getStyles("NumberingStyles")->getByName("WWNum1"), "NumberingRules"); + // This was -635, so the tab of the numbering expanded to a small value instead of matching Word's larger value. + CPPUNIT_ASSERT_EQUAL(static_cast(0), comphelper::SequenceAsHashMap(xRules->getByIndex(0))["FirstLineIndent"].get()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf115094v3) +{ + loadAndSave("tdf115094v3.docx"); + // floating table is now exported directly without surrounding frame + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblpPr", "tblpX", "1996"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblpPr", "tblpY", "1064"); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx new file mode 100644 index 000000000..cf5877ea8 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx @@ -0,0 +1,1444 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {} + + virtual std::unique_ptr preTest(const char* filename) override + { + if (filename == std::string_view("smartart.docx") + || filename == std::string_view("strict-smartart.docx") ) + { + std::unique_ptr pResetter(new Resetter( + [] () { + SvtFilterOptions::Get().SetSmartArt2Shape(false); + })); + SvtFilterOptions::Get().SetSmartArt2Shape(true); + return pResetter; + } + return nullptr; + } + +protected: + /// Copy&paste helper. + bool paste(std::u16string_view rFilename, const uno::Reference& xTextRange) + { + uno::Reference xFilter(m_xSFactory->createInstance("com.sun.star.comp.Writer.WriterFilter"), uno::UNO_QUERY_THROW); + uno::Reference xImporter(xFilter, uno::UNO_QUERY_THROW); + xImporter->setTargetDocument(mxComponent); + std::unique_ptr pStream = utl::UcbStreamHelper::CreateStream(m_directories.getURLFromSrc(u"/sw/qa/extras/ooxmlexport/data/") + rFilename, StreamMode::READ); + uno::Reference xStream(new utl::OStreamWrapper(std::move(pStream))); + uno::Sequence aDescriptor(comphelper::InitPropertySequence( + { + {"InputStream", uno::Any(xStream)}, + {"InputMode", uno::Any(true)}, + {"TextInsertModeRange", uno::Any(xTextRange)}, + })); + return xFilter->filter(aDescriptor); + } +}; + +DECLARE_OOXMLEXPORT_TEST(testWPGtextboxes, "testWPGtextboxes.docx") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + + auto MyShape = getShape(1); + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.GroupShape"), MyShape->getShapeType()); + + uno::Reference xGroup(MyShape, uno::UNO_QUERY_THROW); + uno::Reference xTriangle(xGroup->getByIndex(0), uno::UNO_QUERY_THROW); + uno::Reference xEmbedGroup(xGroup->getByIndex(1), uno::UNO_QUERY_THROW); + uno::Reference xCircle(xEmbedGroup->getByIndex(0), uno::UNO_QUERY_THROW); + uno::Reference xDiamond(xEmbedGroup->getByIndex(1), uno::UNO_QUERY_THROW); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("The circle lost its textbox", true, xCircle->getPropertyValue("TextBox").get()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("The diamond lost its textbox", true, xDiamond->getPropertyValue("TextBox").get()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("The triangle lost its textbox", true, xTriangle->getPropertyValue("TextBox").get()); + +} + +DECLARE_OOXMLEXPORT_TEST(testSmartart, "smartart.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), xGroup->getCount()); // background, 3 rectangles and an arrow in the group + + uno::Reference xPropertySet(xGroup->getByIndex(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x4f81bd), getProperty(xPropertySet, "FillColor")); // If fill color is right, theme import is OK + + uno::Reference xTextRange(xGroup->getByIndex(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Sample"), xTextRange->getString()); // Shape has text + + uno::Reference xParaEnumAccess(xTextRange->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + xPropertySet.set(xParaEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(style::ParagraphAdjust_CENTER), getProperty( xPropertySet, "ParaAdjust")); // Paragraph properties are imported +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo69548) +{ + loadAndReload("fdo69548.docx"); + // The problem was that the last space in target URL was removed + CPPUNIT_ASSERT_EQUAL(OUString("#this_is_a_bookmark"), getProperty(getRun(getParagraph(1), 1), "HyperLinkURL")); +} + +DECLARE_OOXMLEXPORT_TEST(testWpsOnly, "wps-only.docx") +{ + // Document has wp:anchor, not wp:inline, so handle it accordingly. + uno::Reference xShape = getShape(1); + text::TextContentAnchorType eValue = getProperty(xShape, "AnchorType"); + // Word only as as-char and at-char, so at-char is our only choice. + CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER, eValue); + + // Check position, it was 0. This is a shape, so use getPosition(), not a property. + CPPUNIT_ASSERT_EQUAL(oox::drawingml::convertEmuToHmm(671830), xShape->getPosition().X); + + // Wrap type was PARALLEL. + CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_THROUGH, getProperty(xShape, "Surround")); + // Confirm that the deprecated (incorrectly spelled) _THROUGHT also matches + CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_THROUGHT, getProperty(xShape, "Surround")); + + // This should be in front of text. + CPPUNIT_ASSERT_EQUAL(true, getProperty(xShape, "Opaque")); + // And this should be behind the document. + CPPUNIT_ASSERT_EQUAL(false, getProperty(getShape(2), "Opaque")); +} + +DECLARE_OOXMLEXPORT_TEST(testWpgOnly, "wpg-only.docx") +{ + uno::Reference xShape = getShape(1); + // Check position, it was nearly 0. This is a shape, so use getPosition(), not a property. + CPPUNIT_ASSERT_EQUAL(oox::drawingml::convertEmuToHmm(548005), xShape->getPosition().X); +} + +DECLARE_OOXMLEXPORT_TEST(testWpgNested, "wpg-nested.docx") +{ + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + uno::Reference xShapeDescriptor(xGroup->getByIndex(0), uno::UNO_QUERY); + // This was a com.sun.star.drawing.CustomShape, due to lack of handling of groupshapes inside groupshapes. + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.GroupShape"), xShapeDescriptor->getShapeType()); + + // This failed, the right edge of the shape was outside the page + // boundaries. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nPageLeft = getXPath(pXmlDoc, "/root/page[1]/infos/bounds", "left").toInt32(); + sal_Int32 nPageWidth = getXPath(pXmlDoc, "/root/page[1]/infos/bounds", "width").toInt32(); + sal_Int32 nShapeLeft + = getXPath(pXmlDoc, "/root/page[1]/body/txt/anchored/SwAnchoredDrawObject/bounds", "left") + .toInt32(); + sal_Int32 nShapeWidth + = getXPath(pXmlDoc, "/root/page[1]/body/txt/anchored/SwAnchoredDrawObject/bounds", "width") + .toInt32(); + // Make sure the shape is within the page bounds. + CPPUNIT_ASSERT_GREATEREQUAL(nShapeLeft + nShapeWidth, nPageLeft + nPageWidth); +} + +DECLARE_OOXMLEXPORT_TEST(textboxWpgOnly, "textbox-wpg-only.docx") +{ + uno::Reference xShape = getShape(1); + // The relativeFrom attribute was ignored for groupshapes, i.e. these were text::RelOrientation::FRAME. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xShape, "HoriOrientRelation")); + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xShape, "VertOrientRelation")); + // Make sure the shape is not in the background, as we have behindDoc="0" in the doc. + CPPUNIT_ASSERT_EQUAL(true, getProperty(xShape, "Opaque")); + + // The 3 paragraphs on the rectangles inside the groupshape ended up in the + // body text, make sure we don't have multiple paragraphs there anymore. + CPPUNIT_ASSERT_EQUAL(1, getParagraphs()); // was 4 + + // Character escapement was enabled by default, this was 58. + uno::Reference xGroup(xShape, uno::UNO_QUERY); + uno::Reference xText = uno::Reference(xGroup->getByIndex(0), uno::UNO_QUERY_THROW)->getText(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(100), getProperty(getRun(getParagraphOfText(1, xText), 1), "CharEscapementHeight")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf120412_400PercentSubscript, "tdf120412_400PercentSubscript.docx") +{ + uno::Reference xPara = getParagraph(1); + // The word "Base" should not be subscripted. + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1, "Base"), "CharEscapement"), 0); + // The word "Subscript" should be 12pt, subscripted by 400% (48pt). + CPPUNIT_ASSERT_DOUBLES_EQUAL( -400.f, getProperty(getRun(xPara, 2, "Subscript"), "CharEscapement"), 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testFontEsc) +{ + loadAndSave("test_tdf120412.docx"); + xmlDocUniquePtr pXmlDoc =parseExport("word/document.xml"); + // don't lose the run with superscript formatting + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r", 2); + // Superscript should be raised by 100% (11pt). Was 110% (12pt) + // calculated using docDefault with fontsize 10pt (note only w:szCs defined as 11pt, not w:sz) + // instead of inherited normal paraStyle fontsize 11pt (related to tdf#99602) + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/w:rPr/w:position","val", "22"); +} + +DECLARE_OOXMLEXPORT_TEST(testMceWpg, "mce-wpg.docx") +{ + // Make sure that we read the primary branch, if wpg is requested as a feature. + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + uno::Reference xText = uno::Reference(xGroup->getByIndex(0), uno::UNO_QUERY_THROW)->getText(); + // This was VML1. + getParagraphOfText(1, xText, "DML1"); +} + +DECLARE_OOXMLEXPORT_TEST(testMceNested, "mce-nested.docx") +{ + // Vertical position of the shape was incorrect due to incorrect nested mce handling. + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + // positionV's posOffset from the bugdoc, was 0. + CPPUNIT_ASSERT(6879 <= getProperty(xShape, "VertOrientPosition")); + // This was -1 (default), make sure the background color is set. + CPPUNIT_ASSERT_EQUAL(Color(0x4f81bd), getProperty(xShape, "FillColor")); + + uno::Reference xShapeDescriptor = getShape(2); + // This was a com.sun.star.drawing.CustomShape, due to incorrect handling of wpg elements after a wps textbox. + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.GroupShape"), xShapeDescriptor->getShapeType()); + + // Now check the top right textbox. + uno::Reference xGroup(getShape(2), uno::UNO_QUERY); + uno::Reference xText = uno::Reference(xGroup->getByIndex(1), uno::UNO_QUERY_THROW)->getText(); + uno::Reference xParagraph = getParagraphOfText(1, xText, "[Year]"); + CPPUNIT_ASSERT_EQUAL(48.f, getProperty(getRun(xParagraph, 1), "CharHeight")); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, getProperty(getRun(xParagraph, 1), "CharColor")); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty(getRun(xParagraph, 1), "CharWeight")); + //FIXME: CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_BOTTOM, getProperty(xGroup->getByIndex(1), "TextVerticalAdjust")); +} + +DECLARE_OOXMLEXPORT_TEST(testMissingPath, "missing-path.docx") +{ + comphelper::SequenceAsHashMap aCustomShapeGeometry(getProperty(getShape(1), "CustomShapeGeometry")); + comphelper::SequenceAsHashMap aPath(aCustomShapeGeometry["Path"].get()); + uno::Sequence aCoordinates = aPath["Coordinates"].get< uno::Sequence >(); + // This was 0, the coordinate list was empty. + CPPUNIT_ASSERT_EQUAL(sal_Int32(19), aCoordinates.getLength()); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo70457, "fdo70457.docx") +{ + // The document contains a rotated bitmap + // It must be imported as a XShape object with the proper rotation value + + // Check: there is one shape in the doc + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + + // Check: the angle of the shape is 45º + CPPUNIT_ASSERT_EQUAL(sal_Int32(4500), getProperty(getShape(1), "RotateAngle")); +} + +DECLARE_OOXMLEXPORT_TEST(testLOCrash, "file_crash.docx") +{ + //The problem was libreoffice crash while opening the file. + getParagraph(1,"Contents"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo72560, "fdo72560.docx") +{ + // The problem was libreoffice confuse when there RTL default style for paragraph + uno::Reference xParaLeftRTL(getParagraph( 1, "RTL LEFT")); + uno::Reference xParaRightLTR(getParagraph( 2, "LTR RIGHT")); + + // this will test the text direction and alignment for paragraphs + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::RL_TB, getProperty( xParaLeftRTL, "WritingMode" )); + CPPUNIT_ASSERT_EQUAL( sal_Int32 (style::ParagraphAdjust_LEFT), getProperty< sal_Int32 >( xParaLeftRTL, "ParaAdjust" )); + + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::LR_TB, getProperty( xParaRightLTR, "WritingMode" )); + CPPUNIT_ASSERT_EQUAL( sal_Int32 (style::ParagraphAdjust_RIGHT), getProperty< sal_Int32 >( xParaRightLTR, "ParaAdjust" )); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo72560b, "fdo72560b.docx") +{ + // The problem was libreoffice confuse when RTL was specified in non-default style + uno::Reference xParaEndRTL(getParagraph( 2, "RTL END")); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::RL_TB, getProperty( xParaEndRTL, "WritingMode" )); + CPPUNIT_ASSERT_EQUAL( sal_Int32(style::ParagraphAdjust_LEFT), getProperty< sal_Int32 >( xParaEndRTL, "ParaAdjust" )); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo72560c, "fdo72560c.docx") +{ + // The problem was libreoffice confuse when RTL was specified in DocDefaults + uno::Reference xParaEndRTL(getParagraph( 2, "RTL END")); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::RL_TB, getProperty( xParaEndRTL, "WritingMode" )); + CPPUNIT_ASSERT_EQUAL( sal_Int32(style::ParagraphAdjust_LEFT), getProperty< sal_Int32 >( xParaEndRTL, "ParaAdjust" )); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo72560d, "fdo72560d.docx") +{ + // The problem was libreoffice confuse when RTL was specified in "Normal" when not using Normal at all + CPPUNIT_ASSERT_EQUAL( sal_Int32(style::ParagraphAdjust_RIGHT), getProperty< sal_Int32 >( getParagraph(1), "ParaAdjust" )); + CPPUNIT_ASSERT_EQUAL( sal_Int32(style::ParagraphAdjust_RIGHT), getProperty< sal_Int32 >( getParagraph(2), "ParaAdjust" )); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo72560e, "fdo72560e.docx") +{ + // The problem was libreoffice confuse when *locale* is RTL, but w:bidi / w:jc are never defined. + // This unit test would only be noticed if the testing environment is set to something like an Arabic locale. + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::LR_TB, getProperty( getParagraph(2), "WritingMode" )); + CPPUNIT_ASSERT_EQUAL(sal_Int32(style::ParagraphAdjust_LEFT), getProperty( getParagraph(2), "ParaAdjust" )); + + // widow/orphan control is on when never specified. + CPPUNIT_ASSERT_EQUAL(sal_Int8(2), getProperty( getParagraph(2), "ParaWidows" )); +} + +DECLARE_OOXMLEXPORT_TEST(testRPrChangeClosed, "rprchange_closed.docx") +{ + // Redline defined by rPrChanged wasn't removed. + // First paragraph has an rPrChange element, make sure it doesn't appear in the second paragraph. + CPPUNIT_ASSERT_EQUAL(false, hasProperty(getRun(getParagraph(2), 1), "RedlineType")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo65090, "fdo65090.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows = xTextTable->getRows(); + // The first row had two cells, instead of a single horizontally merged one. + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty< uno::Sequence >(xTableRows->getByIndex(0), "TableColumnSeparators").getLength()); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo69649, "fdo69649.docx") +{ + // The DOCX containing the Table of Contents was not imported with correct page nos + uno::Reference xIndexSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexes = xIndexSupplier->getDocumentIndexes( ); + uno::Reference xTOCIndex(xIndexes->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTextRange = xTOCIndex->getAnchor(); + uno::Reference xText = xTextRange->getText( ); + uno::Reference xTextCursor = xText->createTextCursor( ); + xTextCursor->gotoRange(xTextRange->getStart(),false); + xTextCursor->gotoRange(xTextRange->getEnd(),true); + OUString aTocString(xTextCursor->getString()); + + // heading 15 on the 15th page + aTocString = aTocString.copy(aTocString.indexOf("Heading 15.1:\t") + strlen("Heading 15.1:\t")); + CPPUNIT_ASSERT(aTocString.startsWithIgnoreAsciiCase( "15" ) ); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo73389) +{ + loadAndSave("fdo73389.docx"); + // The width of the inner table was too large. The first fix still converted + // the "auto" table width to a fixed one. The second fix used variable width. + // The recent fix uses fixed width again, according to the fixed width cells. + xmlDocUniquePtr pXmlDoc = parseExport(); + + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tbl/w:tblPr/w:tblW","type","dxa"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tbl/w:tblPr/w:tblW","w","1611"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf133735) +{ + loadAndSave("fdo73389.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tbl/w:tr[2]/w:tc[1]/w:p/w:pPr/w:spacing", "after", "0"); + // This was 200 + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tbl/w:tr[1]/w:tc[1]/w:p/w:pPr/w:spacing", "after", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:spacing", "after", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tbl/w:tr[1]/w:tc[3]/w:p/w:pPr/w:spacing", "after", "0"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf134569_nestedTable) +{ + loadAndReload("tdf134569_nestedTable.docx"); + // non-overridden w:after spacing in the table was pushing the document to the second page. + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf59274) +{ + loadAndSave("tdf59274.docx"); + // Table with "auto" table width and incomplete grid: 11 columns, but only 4 gridCol elements. + xmlDocUniquePtr pXmlDoc = parseExport(); + + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblW", "type", "dxa"); + // This was 7349: sum of the cell widths in first row, but the table width is determined by a longer row later. + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblW", "w", "9048"); + // This was 1224: too narrow first cell in first row + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:tcPr/w:tcW", "w", "4291"); + // This was 3674: too wide last cell in first row + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[4]/w:tcPr/w:tcW", "w", "1695"); +} + +DECLARE_OOXMLEXPORT_TEST(testDMLGroupshapeSdt, "dml-groupshape-sdt.docx") +{ + uno::Reference xGroupShape(getShape(1), uno::UNO_QUERY); + // The text in the groupshape was missing due to the w:sdt and w:sdtContent wrapper around it. + CPPUNIT_ASSERT_EQUAL(OUString("sdt and sdtContent inside groupshape"), uno::Reference(xGroupShape->getByIndex(1), uno::UNO_QUERY_THROW)->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testDmlCharheightDefault, "dml-charheight-default.docx") +{ + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + uno::Reference xShape(xGroup->getByIndex(0), uno::UNO_QUERY); + // This was 16: the first run of the second para incorrectly inherited the char height of the first para. + CPPUNIT_ASSERT_EQUAL(11.f, getProperty(getRun(getParagraphOfText(2, xShape->getText()), 1), "CharHeight")); +} + +DECLARE_OOXMLEXPORT_TEST(testDMLGroupShapeCapitalization, "dml-groupshape-capitalization.docx") +{ + // Capitalization inside a group shape was not imported + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + uno::Reference xText = uno::Reference(xGroup->getByIndex(1), uno::UNO_QUERY_THROW)->getText(); + // 2nd line is written with uppercase letters + CPPUNIT_ASSERT_EQUAL(style::CaseMap::UPPERCASE, getProperty(getRun(getParagraphOfText(2, xText), 1), "CharCaseMap")); + // 3rd line has no capitalization + CPPUNIT_ASSERT_EQUAL(style::CaseMap::NONE, getProperty(getRun(getParagraphOfText(3, xText), 1), "CharCaseMap")); + // 4th line has written with small capitals + CPPUNIT_ASSERT_EQUAL(style::CaseMap::SMALLCAPS, getProperty(getRun(getParagraphOfText(4, xText), 1), "CharCaseMap")); + // 5th line has no capitalization + CPPUNIT_ASSERT_EQUAL(style::CaseMap::NONE, getProperty(getRun(getParagraphOfText(5, xText), 1), "CharCaseMap")); +} + +DECLARE_OOXMLEXPORT_TEST(testPictureWithSchemeColor, "picture-with-schemecolor.docx") +{ + // At the start of the document, a picture which has a color specified with a color scheme, lost + // it's color during import. + uno::Reference xImage(getShape(1), uno::UNO_QUERY); + uno::Reference xGraphic = getProperty >(xImage, "Graphic"); + Graphic aVclGraphic(xGraphic); + BitmapEx aBitmap(aVclGraphic.GetBitmapEx()); + CPPUNIT_ASSERT_EQUAL(tools::Long(341), aBitmap.GetSizePixel().Width()); + CPPUNIT_ASSERT_EQUAL(tools::Long(181), aBitmap.GetSizePixel().Height()); + CPPUNIT_ASSERT_EQUAL(Color( 0xad, 0xc5, 0xdb ), aBitmap.GetPixelColor(120, 30)); + CPPUNIT_ASSERT_EQUAL(Color( 0xad, 0xc5, 0xdb ), aBitmap.GetPixelColor(260, 130)); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo69656, "Table_cell_auto_width_fdo69656.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(8153), getProperty(xTables->getByIndex(0), "Width")); +} + +DECLARE_OOXMLEXPORT_TEST(testFloatingTablesAnchor, "floating-tables-anchor.docx") +{ + // Problem was one of the two text frames was anchored to the other text frame + // Both frames should be anchored to the paragraph with the text "Anchor point" + uno::Reference xTextContent(getShape(1), uno::UNO_QUERY); + uno::Reference xRange = xTextContent->getAnchor(); + uno::Reference xText = xRange->getText(); + CPPUNIT_ASSERT_EQUAL(OUString("Anchor point"), xText->getString()); + + xTextContent.set(getShape(2), uno::UNO_QUERY); + xRange = xTextContent->getAnchor(); + xText = xRange->getText(); + CPPUNIT_ASSERT_EQUAL(OUString("Anchor point"), xText->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testAnnotationFormatting, "annotation-formatting.docx") +{ + uno::Reference xTextField = getProperty< uno::Reference >(getRun(getParagraph(2), 2), "TextField"); + uno::Reference xText = getProperty< uno::Reference >(xTextField, "TextRange"); + // Make sure we test the right annotation. + uno::Reference xParagraph = getParagraphOfText(1, xText, "days"); + // Formatting was lost: the second text portion was NONE, not SINGLE. + CPPUNIT_ASSERT_EQUAL(awt::FontUnderline::SINGLE, getProperty(getRun(xParagraph, 1), "CharUnderline")); +} + +DECLARE_OOXMLEXPORT_TEST(testDMLGroupShapeRunFonts, "dml-groupshape-runfonts.docx") +{ + // Fonts defined by w:rFonts was not imported and so the font specified by a:fontRef was used. + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + uno::Reference xText = uno::Reference(xGroup->getByIndex(1), uno::UNO_QUERY_THROW)->getText(); + uno::Reference xRun = getRun(getParagraphOfText(1, xText),1); + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty(xRun, "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString("Arial Unicode MS"), getProperty(xRun, "CharFontNameComplex")); + CPPUNIT_ASSERT_EQUAL(OUString("MS Mincho"), getProperty(xRun, "CharFontNameAsian")); +} + +DECLARE_OOXMLEXPORT_TEST(testStrict, "strict.docx") +{ + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + // This was only 127, pt suffix was ignored, so this got parsed as twips instead of points. + CPPUNIT_ASSERT_EQUAL(sal_Int32(convertTwipToMm100(72 * 20)), getProperty(xPageStyle, "BottomMargin")); + // This was only 1397, same issue + CPPUNIT_ASSERT_EQUAL(sal_Int32(convertTwipToMm100(792 * 20)), getProperty(xPageStyle, "Height")); + // Text was missing, due to not handling the strict namespaces. + getParagraph(1, "Hello world!"); + + // Header in the document caused a crash on import. + uno::Reference xHeaderText(xPageStyle->getPropertyValue("HeaderText"), uno::UNO_QUERY); + getParagraphOfText(1, xHeaderText, "This is a header."); + + // Picture was missing. + uno::Reference xServiceInfo(getShapeByName(u"Picture 2"), uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextGraphicObject")); + + // SmartArt was missing. + xServiceInfo.set(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.drawing.GroupShape")); + + // Chart was missing. + xServiceInfo.set(getShape(3), uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextEmbeddedObject")); + + // Math was missing. + xServiceInfo.set(getShape(4), uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextEmbeddedObject")); +} + +DECLARE_OOXMLEXPORT_TEST(testSmartartStrict, "strict-smartart.docx") +{ + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + // This was 0, SmartArt was visually missing. + CPPUNIT_ASSERT_EQUAL(sal_Int32(7), xGroup->getCount()); // background, 3 ellipses + 3 arrows +} + +DECLARE_OOXMLEXPORT_TEST(testLibreOfficeHang, "frame-wrap-auto.docx") +{ + // fdo#72775 + // This was text::WrapTextMode_NONE. + CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_DYNAMIC, getProperty(getShape(1), "Surround")); +} + +DECLARE_OOXMLEXPORT_TEST(testI124106, "i124106.docx") +{ + // This was 2. + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testLargeTwips, "large-twips.docx" ) +{ + // cp#1000043: MSO seems to ignore large twips values, we didn't, which resulted in different + // layout of broken documents (text not visible in this specific document). + OUString width = parseDump( "/root/page/body/tab/row[1]/cell[1]/txt/infos/bounds", "width" ); + CPPUNIT_ASSERT( width.toInt32() > 0 ); +} + +DECLARE_OOXMLEXPORT_TEST(testNegativeCellMarginTwips, "negative-cell-margin-twips.docx") +{ + // Slightly related to cp#1000043, the twips value was negative, which wrapped around somewhere, + // while MSO seems to ignore that as well. + OUString width = parseDump( "/root/page/body/tab/row[1]/cell[1]/txt/infos/bounds", "width" ); + CPPUNIT_ASSERT( width.toInt32() > 0 ); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo38414, "fdo38414.docx") +{ + // The cells in the last (4th) column were merged properly and so the result didn't have the same height. + // (Since w:gridBefore is worked around by faking another cell in the row, so column count is thus 5 + // instead of 4, therefore compare height of cells 4 and 5 rather than 3 and 4.) + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableColumns = xTextTable->getColumns(); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 5 ), xTableColumns->getCount()); + OUString height3 = parseDump("/root/page/body/tab/row[1]/cell[4]/infos/bounds", "height" ); + OUString height4 = parseDump("/root/page/body/tab/row[1]/cell[5]/infos/bounds", "height" ); + CPPUNIT_ASSERT_EQUAL( height3, height4 ); +} + +DECLARE_OOXMLEXPORT_TEST(test_extra_image, "test_extra_image.docx") +{ + // fdo#74652 Check there is no shape added to the doc during import + CPPUNIT_ASSERT_EQUAL(0, getShapes()); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo74401, "fdo74401.docx") +{ + uno::Reference xGroupShape(getShape(1), uno::UNO_QUERY); + uno::Reference xShape(xGroupShape->getByIndex(1), uno::UNO_QUERY); + // The triangle (second child) was a TextShape before, so it was shown as a rectangle. + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.CustomShape"), xShape->getShapeType()); + + uno::Reference xText = uno::Reference(xShape, uno::UNO_QUERY_THROW)->getText(); + uno::Reference xCharRun = getRun(getParagraphOfText(1, xText), 1, "Triangle "); + + // tdf#128153 Paragraph Style Normal (Web) should not overwrite the 11pt directly applied fontsize. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Fontsize", 11.f, getProperty(xCharRun, "CharHeight")); + // but paragraph Style Normal (Web) should provide the font name + CPPUNIT_ASSERT_EQUAL_MESSAGE("Font", OUString("Times New Roman"), getProperty(xCharRun, "CharFontName")); +} + +DECLARE_OOXMLEXPORT_TEST(testGridBefore, "gridbefore.docx") +{ + // w:gridBefore is faked by inserting two cells without border (because Writer can't do non-rectangular tables). + // So check the first cell in the first row is in fact 3rd and that it's more to the right than the second + // cell on the second row. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableColumns = xTextTable->getColumns(); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 3 ), xTableColumns->getCount()); + OUString textA3 = parseDump("/root/page/body/tab/row[1]/cell[3]/txt/text()" ); + OUString leftA3 = parseDump("/root/page/body/tab/row[1]/cell[3]/infos/bounds", "left" ); + OUString leftB2 = parseDump("/root/page/body/tab/row[2]/cell[2]/infos/bounds", "left" ); + CPPUNIT_ASSERT_EQUAL( OUString( "A3" ), textA3 ); + CPPUNIT_ASSERT( leftA3.toInt32() > leftB2.toInt32()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf116194) +{ + loadAndSave("tdf116194.docx"); + // The problem was that the importer lost consecutive tables with w:gridBefore + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl", 2); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf134606) +{ + loadAndSave("tdf134606.docx"); + // The problem was that the importer lost the nested table structure with w:gridBefore + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tbl"); +} + +DECLARE_OOXMLEXPORT_TEST(testMsoBrightnessContrast, "msobrightnesscontrast.docx") +{ + uno::Reference image = getShape(1); + uno::Reference imageProperties(image, uno::UNO_QUERY); + uno::Reference graphic; + imageProperties->getPropertyValue( "Graphic" ) >>= graphic; + Graphic aVclGraphic(graphic); + BitmapEx aBitmap(aVclGraphic.GetBitmapEx()); + CPPUNIT_ASSERT_EQUAL(tools::Long(58), aBitmap.GetSizePixel().Width()); + CPPUNIT_ASSERT_EQUAL(tools::Long(320), aBitmap.GetSizePixel().Height()); + Color aColor(aBitmap.GetPixelColor(20, 30)); + CPPUNIT_ASSERT_EQUAL(Color( 0xce, 0xce, 0xce ), aColor); +} + +DECLARE_OOXMLEXPORT_TEST(testChartSize, "chart-size.docx") +{ + // When chart was in a TextFrame, its size was too large. + uno::Reference xTextEmbeddedObjectsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xEmbeddedObjects(xTextEmbeddedObjectsSupplier->getEmbeddedObjects(), uno::UNO_QUERY); + // This was 10954. + CPPUNIT_ASSERT_EQUAL(sal_Int32(6008), getProperty(xEmbeddedObjects->getByIndex(0), "Width")); +} + +DECLARE_OOXMLEXPORT_TEST(testInlineGroupshape, "inline-groupshape.docx") +{ + // Inline groupshape was in the background, so it was hidden sometimes by other shapes. + CPPUNIT_ASSERT_EQUAL(true, getProperty(getShape(1), "Opaque")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo78883, "fdo78883.docx") +{ + // fdo#78883 : LO was getting hang while opening document + // Checking there is a single page after loading a doc in LO. + // Check to make sure the document loaded. Note that the page number may + // be 1 or 2 depending on the environment. + CPPUNIT_ASSERT(getPages() > 0); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo79535, "fdo79535.docx") +{ + // fdo#79535 : LO was crashing while opening document + // Checking there is a single page after loading a doc successfully in LO. + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testBnc875718, "bnc875718.docx") +{ + // 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 xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference 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. Ignoring... + for( int i = 1; + i < xIndexAccess->getCount(); + ++i ) + { + uno::Reference frame(xIndexAccess->getByIndex( i ), uno::UNO_QUERY); + uno::Reference range = frame->getAnchor(); + uno::Reference text(range->getText(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( OUString( "SwXHeadFootText" ), text->getImplementationName()); + } + // Also check that the footer contents are not in the body text. + uno::Reference textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference text = textDocument->getText(); + CPPUNIT_ASSERT(text); //Do not crash on empty content + CPPUNIT_ASSERT_EQUAL( OUString( "Text" ), text->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testCaption, "caption.docx") +{ + uno::Reference xStyle(getStyles("ParagraphStyles")->getByName("Caption"), uno::UNO_QUERY); + // This was awt::FontSlant_ITALIC: Writer default was used instead of what is in the document. + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty(xStyle, "CharPosture")); +} + +DECLARE_OOXMLEXPORT_TEST(testGroupshapeTrackedchanges, "groupshape-trackedchanges.docx") +{ + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + uno::Reference xShape(xGroup->getByIndex(0), uno::UNO_QUERY); + // Shape text was completely missing, ensure inserted text is available. + uno::Reference xText + = uno::Reference(xShape, uno::UNO_QUERY_THROW)->getText(); + auto xParagraph = getParagraphOfText(1, xText); + + CPPUNIT_ASSERT(hasProperty(getRun(xParagraph, 1), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Delete"), + getProperty(getRun(xParagraph, 1), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Deleted"), getRun(xParagraph, 2)->getString()); + + CPPUNIT_ASSERT(hasProperty(getRun(xParagraph, 4), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Insert"), + getProperty(getRun(xParagraph, 4), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString(" Inserted"), getRun(xParagraph, 5)->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo78939, "fdo78939.docx") +{ + // fdo#78939 : LO hanged while opening issue document + + // Whenever a para-style was applied to a Numbering format level, + // LO incorrectly also changed the para-style... + + // check that file opens and does not hang while opening and also + // check that an incorrect numbering style is not applied ... + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(getParagraph(1), "NumberingStyleName")); +} + +DECLARE_OOXMLEXPORT_TEST(testFootnote, "footnote.docx") +{ + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + uno::Reference xFootnote(xFootnotes->getByIndex(0), uno::UNO_QUERY); + OUString aFootnote = xFootnote->getString(); + // Ensure there are no additional newlines after "bar". + CPPUNIT_ASSERT(aFootnote.endsWith("bar")); +} + +DECLARE_OOXMLEXPORT_TEST(testTableBtlrCenter, "table-btlr-center.docx") +{ + // Note that this is btLr text, so layout and doc model horizontal/vertical is the opposite of + // each other. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell = xTable->getCellByName("A2"); + // Cell vertical alignment was CENTER, should be NONE. + CPPUNIT_ASSERT_EQUAL(text::VertOrientation::NONE, getProperty(xCell, "VertOrient")); + + // Cell horizontal alignment should be CENTER. + uno::Reference xCellText(xCell, uno::UNO_QUERY); + auto nActual = getProperty(getParagraphOfText(1, xCellText), "ParaAdjust"); + CPPUNIT_ASSERT_EQUAL(static_cast(style::ParagraphAdjust_CENTER), nActual); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo80555, "fdo80555.docx") +{ + uno::Reference xShape = getShape(1); + // Shape was wrongly placed at X=0, Y=0 + CPPUNIT_ASSERT_EQUAL(sal_Int32(3318), xShape->getPosition().X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(247), xShape->getPosition().Y); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf104418) +{ + loadAndReload("tdf104418.odt"); + // Problem was that cell property was ignored. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows = xTextTable->getRows(); + + // Without the fix in place, this test would have failed with + // - Expected: 750 + // - Actual : 1499 + CPPUNIT_ASSERT_EQUAL(sal_Int64(750) , getProperty(xTableRows->getByIndex(0), "Height")); +} + +DECLARE_OOXMLEXPORT_TEST(testHidemark, "hidemark.docx") +{ + // Problem was that cell property was ignored. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows = xTextTable->getRows(); + // Height should be minimal + CPPUNIT_ASSERT_EQUAL(convertTwipToMm100(MINLAY), getProperty(xTableRows->getByIndex(1), "Height")); + // Size type was MIN, should be FIX to avoid considering the end of paragraph marker. + CPPUNIT_ASSERT_EQUAL(text::SizeType::FIX, getProperty(xTableRows->getByIndex(1), "SizeType")); + + //tdf#104876: Width was not recognized during import when table size was 'auto' + CPPUNIT_ASSERT_MESSAGE("table size is less than 7000?",sal_Int32(7000) > getProperty(xTextTable, "Width")); +} + +DECLARE_OOXMLEXPORT_TEST(testHidemarkb, "tdf99616_hidemarkb.docx") +{ + // Problem was that the smallest possible height was forced, not the min specified size. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows = xTextTable->getRows(); + // Height should be .5cm + CPPUNIT_ASSERT_EQUAL(sal_Int64(501), getProperty(xTableRows->getByIndex(1), "Height")); + // Size type was MIN, should be FIX to avoid considering the end of paragraph marker. + CPPUNIT_ASSERT_EQUAL(text::SizeType::FIX, getProperty(xTableRows->getByIndex(1), "SizeType")); +} + +DECLARE_OOXMLEXPORT_TEST(testBnc891663, "bnc891663.docx") +{ + // The image should be inside a cell, so the text in the following cell should be below it. + int imageTop = parseDump("/root/page/body/tab/row[1]/cell[2]/txt[1]/anchored/fly/infos/bounds", "top").toInt32(); + int imageHeight = parseDump("/root/page/body/tab/row[1]/cell[2]/txt[1]/anchored/fly/infos/bounds", "height").toInt32(); + int textNextRowTop = parseDump("/root/page/body/tab/row[2]/cell[1]/txt[1]/infos/bounds", "top").toInt32(); + CPPUNIT_ASSERT( textNextRowTop >= imageTop + imageHeight ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123104, "tdf123104.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell = xTable->getCellByName("E1"); + // See SwXCell::getPropertyValue(), we really put 'long' into an Any there. + // Without the accompanying fix in place, this test would have failed with 'Expected: 3;Actual : + // 2', i.e. the vertical merge covered one less cell, resulting in a cell with white background. + CPPUNIT_ASSERT_EQUAL(static_cast(3), getProperty(xCell, "RowSpan")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo85542, "fdo85542.docx") +{ + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(3), xBookmarksByIdx->getCount()); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("B1")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("B2")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("B3")); + // B1 + uno::Reference xContent1(xBookmarksByName->getByName("B1"), uno::UNO_QUERY); + uno::Reference xRange1 = xContent1->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("ABB"), xRange1->getString()); + // B2 + uno::Reference xContent2(xBookmarksByName->getByName("B2"), uno::UNO_QUERY); + uno::Reference xRange2 = xContent2->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("BBC"), xRange2->getString()); + // B3 -- testing a collapsed bookmark + uno::Reference xContent3(xBookmarksByName->getByName("B3"), uno::UNO_QUERY); + uno::Reference xRange3 = xContent3->getAnchor(); + CPPUNIT_ASSERT_EQUAL(xRange3->getString(), OUString()); + uno::Reference xText = xRange3->getText( ); + uno::Reference xNeighborhoodCursor = xText->createTextCursor( ); + xNeighborhoodCursor->gotoRange(xRange3, false); + xNeighborhoodCursor->goLeft(1, false); + xNeighborhoodCursor->goRight(2, true); + CPPUNIT_ASSERT_EQUAL(OUString("AB"), xNeighborhoodCursor->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf65955) +{ + loadAndReload("tdf65955.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), xBookmarksByIdx->getCount()); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("a")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("b")); + // a + uno::Reference xContent3(xBookmarksByName->getByName("a"), uno::UNO_QUERY); + uno::Reference xRange3 = xContent3->getAnchor(); + CPPUNIT_ASSERT_EQUAL(xRange3->getString(), OUString()); + // b + uno::Reference xContent2(xBookmarksByName->getByName("b"), uno::UNO_QUERY); + uno::Reference xRange2 = xContent2->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("r"), xRange2->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf65955_2) +{ + loadAndReload("tdf65955_2.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), xBookmarksByIdx->getCount()); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("test")); + + uno::Reference xContent3(xBookmarksByName->getByName("test"), uno::UNO_QUERY); + uno::Reference xRange3 = xContent3->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("foo bar"), xRange3->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testChtOutlineNumberingOoxml, "chtoutline.docx") +{ + static constexpr OUStringLiteral aExpectedNumbering = u"\u7b2c 1 \u7ae0"; + + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(aExpectedNumbering), + getProperty(xPara, "ListLabelString")); +} + +DECLARE_OOXMLEXPORT_TEST(mathtype, "mathtype.docx") +{ + uno::Reference xTextEmbeddedObjectsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xEmbeddedObjects(xTextEmbeddedObjectsSupplier->getEmbeddedObjects(), uno::UNO_QUERY); + // This failed as the Model property was empty. + auto xModel = getProperty< uno::Reference >(xEmbeddedObjects->getByIndex(0), "Model"); + CPPUNIT_ASSERT(xModel->supportsService("com.sun.star.formula.FormulaProperties")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf8255, "tdf8255.docx") +{ + // This was 1: a full-page-wide multi-page floating table was imported as a TextFrame. + CPPUNIT_ASSERT_EQUAL(0, getShapes()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf87460, "tdf87460.docx") +{ + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xEndnotesSupplier(xTextDocument, uno::UNO_QUERY); + uno::Reference xEndnotes = xEndnotesSupplier->getEndnotes(); + // This was 0: endnote was lost on import. + CPPUNIT_ASSERT_EQUAL(static_cast(1), xEndnotes->getCount()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf90611, "tdf90611.docx") +{ + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + uno::Reference xFootnoteText; + xFootnotes->getByIndex(0) >>= xFootnoteText; + // This was 11. + CPPUNIT_ASSERT_EQUAL(10.f, getProperty(getParagraphOfText(1, xFootnoteText), "CharHeight")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf89702, "tdf89702.docx") +{ + // Get the first paragraph's numbering style's 2nd level's character style name. + uno::Reference xParagraph = getParagraph(1); + auto xLevels = getProperty< uno::Reference >(xParagraph, "NumberingRules"); + uno::Sequence aLevel; + xLevels->getByIndex(1) >>= aLevel; // 2nd level + OUString aCharStyleName = std::find_if(std::cbegin(aLevel), std::cend(aLevel), [](const beans::PropertyValue& rValue) { return rValue.Name == "CharStyleName"; })->Value.get(); + + // Make sure that the font name is Arial, this was Verdana. + uno::Reference xStyle(getStyles("CharacterStyles")->getByName(aCharStyleName), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty(xStyle, "CharFontName")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf86374, "tdf86374.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows = xTable->getRows(); + // btLr text direction was imported as FIX, it should be MIN to have enough space for the additionally entered paragraphs. + CPPUNIT_ASSERT_EQUAL(text::SizeType::MIN, getProperty(xTableRows->getByIndex(0), "SizeType")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf87924, "tdf87924.docx") +{ + uno::Reference xPropertySet(getShape(1), uno::UNO_QUERY); + comphelper::SequenceAsHashMap aGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry")); + // This was -270, the text rotation angle was set when it should not be rotated. + CPPUNIT_ASSERT_EQUAL(static_cast(0), aGeometry["TextPreRotateAngle"].get()); +} + +DECLARE_OOXMLEXPORT_TEST(testIndents, "indents.docx") +{ + //expected left margin and first line indent values + static const sal_Int32 indents[] = + { + 0, 0, + -2000, 0, + -2000, 1000, + -1000, -1000, + 2000, -1000 + }; + uno::Reference textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(textDocument->getText(), uno::UNO_QUERY); + // list of paragraphs + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + size_t paraIndex = 0; + do + { + uno::Reference xServiceInfo; + if (xParaEnum->nextElement() >>= xServiceInfo) + { + uno::Reference const xPropertySet(xServiceInfo, uno::UNO_QUERY_THROW); + sal_Int32 nIndent = 0; + sal_Int32 nFirstLine = 0; + xPropertySet->getPropertyValue("ParaLeftMargin") >>= nIndent; + xPropertySet->getPropertyValue("ParaFirstLineIndent") >>= nFirstLine; + CPPUNIT_ASSERT_EQUAL(indents[paraIndex * 2], nIndent); + CPPUNIT_ASSERT_EQUAL(indents[paraIndex * 2 + 1], nFirstLine); + ++paraIndex; + } + } while (xParaEnum->hasMoreElements()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf92454, "tdf92454.docx") +{ + // The first paragraph had a large indentation / left margin as inheritance + // in Word and Writer works differently, and no direct value was set to be + // explicit. + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + // This was beans::PropertyState_DEFAULT_VALUE. + CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DIRECT_VALUE, xParagraph->getPropertyState("ParaFirstLineIndent")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf95377, "tdf95377.docx") +{ + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), getProperty(xParagraph, "ParaRightMargin")); + + xParagraph.set(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-501), getProperty(xParagraph, "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2501), getProperty(xParagraph, "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DIRECT_VALUE, xParagraph->getPropertyState("ParaFirstLineIndent")); + + xParagraph.set(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-250), getProperty(xParagraph, "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(250), getProperty(xParagraph, "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DIRECT_VALUE, xParagraph->getPropertyState("ParaFirstLineIndent")); + + //default style has numbering enabled. Styles inherit numbering unless specifically disabled + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//body/txt/Special", 3); //first three paragraphs have numbering + assertXPath(pXmlDoc, "//body/txt[1]/Special", "rText", "a."); + assertXPath(pXmlDoc, "//body/txt[2]/Special", "rText", "b."); + assertXPath(pXmlDoc, "//body/txt[3]/Special", "rText", "c."); + assertXPath(pXmlDoc, "/root/page/body/txt[4]/Special", 0); //last paragraph style disables numbering +} + +DECLARE_OOXMLEXPORT_TEST(testTdf95376, "tdf95376.docx") +{ + uno::Reference xParagraph(getParagraph(2), uno::UNO_QUERY); + // This was beans::PropertyState_DIRECT_VALUE: indentation-from-numbering + // did not have priority over indentation-from-paragraph-style, due to a + // filter workaround that's not correct here. + CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DEFAULT_VALUE, xParagraph->getPropertyState("ParaFirstLineIndent")); + + //tdf#131321 - paragraph styles lost their numbering. Bullet+space inherits WWNum1 from Bullet + uno::Reference xStyle(getStyles("ParagraphStyles")->getByName("Bullet+space"), uno::UNO_QUERY); + CPPUNIT_ASSERT(!(getProperty(xStyle, "NumberingStyleName")).isEmpty()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf92124, "tdf92124.docx") +{ + // Get the second paragraph's numbering style's 1st level's suffix. + uno::Reference xParagraph = getParagraph(2); + auto xLevels = getProperty< uno::Reference >(xParagraph, "NumberingRules"); + uno::Sequence aLevel; + xLevels->getByIndex(0) >>= aLevel; // 1st level + OUString aSuffix = std::find_if(std::cbegin(aLevel), std::cend(aLevel), [](const beans::PropertyValue& rValue) { return rValue.Name == "Suffix"; })->Value.get(); + // Make sure it's empty as the source document contains . + CPPUNIT_ASSERT(aSuffix.isEmpty()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf90153, "tdf90153.docx") +{ + // This was at-para, so the line-level VertOrientRelation was lost, resulting in an incorrect vertical position. + CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER, getProperty(getShape(1), "AnchorType")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf93919, "tdf93919.docx") +{ + // This was 0, left margin was not inherited from the list style. + CPPUNIT_ASSERT_EQUAL(static_cast(1270), getProperty(getParagraph(1), "ParaLeftMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf91417, "tdf91417.docx") +{ + // The first paragraph should contain a link to "http://www.google.com/" + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextCursor = xTextDocument->getText()->createTextCursor( ); + uno::Reference xCursorProps(xTextCursor, uno::UNO_QUERY); + OUString aValue; + xCursorProps->getPropertyValue("HyperLinkURL") >>= aValue; + CPPUNIT_ASSERT_EQUAL(OUString("http://www.google.com/"), aValue); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf90810, "tdf90810short.docx") +{ + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnoteSupp(xTextDocument, uno::UNO_QUERY); + uno::Reference xFootnoteIdxAcc = xFootnoteSupp->getFootnotes(); + uno::Reference xFootnote(xFootnoteIdxAcc->getByIndex(0), uno::UNO_QUERY); + uno::Reference xFootnoteText(xFootnote, uno::UNO_QUERY); + OUString sFootnoteText = xFootnoteText->getString(); + CPPUNIT_ASSERT_EQUAL(static_cast(89), sFootnoteText.getLength()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf89165, "tdf89165.docx") +{ + // This must not hang in layout +} + +DECLARE_OOXMLEXPORT_TEST(testTdf95777, "tdf95777.docx") +{ + // This must not fail on open +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf94374) +{ + load(mpTestDocumentPath, "hello.docx"); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xEnd = xText->getEnd(); + // This failed: it wasn't possible to insert a DOCX document into an existing Writer one. + CPPUNIT_ASSERT(paste(u"tdf94374.docx", xEnd)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf83300, "tdf83300.docx") +{ + // tdf#143722: This was 'TOC Heading', upon updating a TOC the heading replaced its Word-default blue + Calibri style + // with a Writer-default black + Liberation Sans one + CPPUNIT_ASSERT_EQUAL(OUString("Contents Heading"), getProperty(getParagraph(1), "ParaStyleName")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf78902, "tdf78902.docx") +{ + // This hung in layout. + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf95775, "tdf95775.docx") +{ + // This must not fail in layout +} + +DECLARE_OOXMLEXPORT_TEST(testTdf92157, "tdf92157.docx") +{ + // A graphic with dimensions 0,0 should not fail on load +} + +DECLARE_OOXMLEXPORT_TEST(testTdf97417, "section_break_numbering.docx") +{ + uno::Reference xProps(getParagraph(1), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_MESSAGE("1st page: first paragraph erroneous numbering", + !xProps->getPropertyValue("NumberingRules").hasValue()); + // paragraph with numbering and section break was removed by writerfilter + // but its numbering was copied to all following paragraphs + CPPUNIT_ASSERT_MESSAGE("2nd page: first paragraph missing numbering", + getProperty>(getParagraph(2), "NumberingRules").is()); + xProps = uno::Reference(getParagraph(3), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_MESSAGE("2nd page: second paragraph erroneous numbering", + !xProps->getPropertyValue("NumberingRules").hasValue()); + + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf94043, "tdf94043.docx") +{ + auto xTextSection = getProperty< uno::Reference >(getParagraph(2), "TextSection"); + auto xTextColumns = getProperty< uno::Reference >(xTextSection, "TextColumns"); + // This was 0, the separator line was not visible due to 0 width. + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xTextColumns, "SeparatorLineWidth")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf95213, "tdf95213.docx") +{ + // Get the second paragraph's numbering style's 2nd level's character style name. + uno::Reference xParagraph = getParagraph(2); + auto xLevels = getProperty< uno::Reference >(xParagraph, "NumberingRules"); + uno::Sequence aLevel; + xLevels->getByIndex(1) >>= aLevel; // 2nd level + OUString aName = std::find_if(std::cbegin(aLevel), std::cend(aLevel), [](const beans::PropertyValue& rValue) { return rValue.Name == "CharStyleName"; })->Value.get(); + + uno::Reference xStyle(getStyles("CharacterStyles")->getByName(aName), uno::UNO_QUERY); + // This was awt::FontWeight::BOLD. + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, getProperty(xStyle, "CharWeight")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf97371, "tdf97371.docx") +{ + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0); + SdrObject* pShape = pPage->GetObj(0); + SdrObject* pTextBox = pPage->GetObj(1); + tools::Long nDiff = std::abs(pShape->GetSnapRect().Top() - pTextBox->GetSnapRect().Top()); + // The top of the two shapes were 410 and 3951, now it should be 3950 and 3951. + CPPUNIT_ASSERT(nDiff < 10); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf99140, "tdf99140.docx") +{ + // This was 1: a multi-page floating table was imported as a TextFrame. + CPPUNIT_ASSERT_EQUAL(0, getShapes()); + + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTableProperties(xTables->getByIndex(1), uno::UNO_QUERY); + // This was text::HoriOrientation::NONE, the second table was too wide due to this. + CPPUNIT_ASSERT_EQUAL(text::HoriOrientation::LEFT_AND_WIDTH, getProperty(xTableProperties, "HoriOrient")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTableMarginAdjustment) +{ + loadAndReload("table.fodt"); + // Writer, (new) Word: margin 0 means table border starts at 0 + // (old) Word: margin 0 means paragraph in table starts at 0 + + auto const xTable(getParagraphOrTable(1)); + // shifted very slightly to account for half of the thin border width, so 4, not 0. + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), getProperty(xTable, "LeftMargin")); + + // Now that compatibilityMode is set to 2013's 15 (new), expect the new values, + // since LO is exporting in the NEW way now instead of the OLD way. + // This was 55 when using 2007's compatibilityMode of 12 (old) + + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "//w:tbl[1]/w:tblPr[1]/w:tblInd[1]", "type", "dxa"); + assertXPath(pXmlDoc, "//w:tbl[1]/w:tblPr[1]/w:tblInd[1]", "w", "0"); + + + // tdf#143982: automatic tables should export as something better than just left-and-size + CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xTable, "RelativeWidth")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf119760_tableInTablePosition, "tdf119760_tableInTablePosition.docx") +{ + if ( mbExported ) + { + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "//w:tbl[1]/w:tr[1]/w:tc[1]/w:tbl[1]/w:tblPr[1]/w:tblInd[1]", "type", "dxa"); + assertXPath(pXmlDoc, "//w:tbl[1]/w:tr[1]/w:tc[1]/w:tbl[1]//w:tblPr[1]/w:tblInd[1]", "w", "0"); + } + + uno::Reference< text::XTextTablesSupplier > xTablesSupplier( mxComponent, uno::UNO_QUERY ); + uno::Reference< container::XIndexAccess > xTables( xTablesSupplier->getTextTables(), uno::UNO_QUERY ); + uno::Reference< text::XTextTable > xTable( xTables->getByIndex(0), uno::UNO_QUERY ); + // For compatibilityMode 15: margin 0 means table border starts at 0, + // shifted to account for half of the thick border width, so 106, not 0. + CPPUNIT_ASSERT_EQUAL(sal_Int32(106), getProperty(xTable, "LeftMargin")); +} + +DECLARE_OOXMLEXPORT_TEST( testTableCellMargin, "table-cell-margin.docx" ) +{ + sal_Int32 const cellLeftMarginFromOffice[] = { 250, 100, 0, 0 }; + + uno::Reference< text::XTextTablesSupplier > xTablesSupplier( mxComponent, uno::UNO_QUERY ); + uno::Reference< container::XIndexAccess > xTables( xTablesSupplier->getTextTables(), uno::UNO_QUERY ); + + for ( int i = 0; i < 4; i++ ) + { + uno::Reference< text::XTextTable > xTable1( xTables->getByIndex( i ), uno::UNO_QUERY ); + + // Verify left margin of 1st cell : + // * Office left margins are measured relative to the right of the border + // * LO left spacing is measured from the center of the border + uno::Reference< table::XCell > xCell = xTable1->getCellByName( "A1" ); + uno::Reference< beans::XPropertySet > xPropSet( xCell, uno::UNO_QUERY_THROW ); + sal_Int32 aLeftMargin = -1; + xPropSet->getPropertyValue( "LeftBorderDistance" ) >>= aLeftMargin; + uno::Any aLeftBorder = xPropSet->getPropertyValue( "LeftBorder" ); + table::BorderLine2 aLeftBorderLine; + aLeftBorder >>= aLeftBorderLine; + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "Incorrect left spacing computed from docx cell margin", + cellLeftMarginFromOffice[i], aLeftMargin - 0.5 * aLeftBorderLine.LineWidth, 1 ); + // The 'a' in the fourth table should not be partly hidden by the border + if ( i == 3 ) + { + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect cell left padding", + 0.5 * aLeftBorderLine.LineWidth, aLeftMargin, 1); + // tdf#119885: cell's edit area must touch right border + sal_Int32 aRightMargin = -1; + xPropSet->getPropertyValue("RightBorderDistance") >>= aRightMargin; + uno::Any aRightBorder = xPropSet->getPropertyValue("RightBorder"); + table::BorderLine2 aRightBorderLine; + aRightBorder >>= aRightBorderLine; + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect cell right padding", + 0.5 * aRightBorderLine.LineWidth, aRightMargin, 1); + } + } +} + +CPPUNIT_TEST_FIXTURE(Test, TestPuzzleExport) +{ + loadAndReload("TestPuzzleExport.odt"); + // See tdf#148342 for details + // Get the doc + uno::Reference< text::XTextDocument > xTextDoc(mxComponent, uno::UNO_QUERY_THROW); + auto pSwDoc = dynamic_cast(xTextDoc.get()); + CPPUNIT_ASSERT(pSwDoc); + // Create a metafile + auto pMeta = pSwDoc->GetDocShell()->GetPreviewMetaFile(); + CPPUNIT_ASSERT(pMeta); + MetafileXmlDump aDumper; + auto pMetaXml = dumpAndParse(aDumper, *pMeta); + CPPUNIT_ASSERT(pMetaXml); + // After parsing check that node... + auto pXNode = getXPathNode(pMetaXml, "/metafile/push/push/push/push[4]/push/push/polypolygon/polygon"); + CPPUNIT_ASSERT(pXNode); + auto pNode = pXNode->nodesetval->nodeTab[0]; + CPPUNIT_ASSERT(pNode); + auto it = pNode->children; + int nCount = 0; + // .. and count the children + while (it != nullptr) + { + nCount++; + it = it->next; + } + // In case of puzzle there will be so many... Without the fix there was a rectangle with 4 points. + CPPUNIT_ASSERT_GREATER(300, nCount); +} + +// tdf#106742 for DOCX with compatibility level <= 14 (MS Word up to and incl. ver.2010), we should use cell margins when calculating table left border position +DECLARE_OOXMLEXPORT_TEST( testTablePosition14, "table-position-14.docx") +{ + sal_Int32 const aXCoordsFromOffice[] = { 2500, -1000, 0, 0 }; + + uno::Reference< text::XTextTablesSupplier > xTablesSupplier( mxComponent, uno::UNO_QUERY ); + uno::Reference< frame::XModel > xModel( mxComponent, uno::UNO_QUERY ); + uno::Reference< container::XIndexAccess > xTables( xTablesSupplier->getTextTables(), uno::UNO_QUERY ); + + for ( int i = 0; i < 4; i++ ) + { + uno::Reference< text::XTextTable > xTable1( xTables->getByIndex( i ), uno::UNO_QUERY ); + + // Verify X coord + uno::Reference< view::XSelectionSupplier > xCtrl( xModel->getCurrentController(), uno::UNO_QUERY ); + xCtrl->select( uno::Any( xTable1 ) ); + uno::Reference< text::XTextViewCursorSupplier > xTextViewCursorSupplier( xCtrl, uno::UNO_QUERY ); + uno::Reference< text::XTextViewCursor > xCursor = xTextViewCursorSupplier->getViewCursor(); + awt::Point pos = xCursor->getPosition(); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "Incorrect X coord computed from docx", + aXCoordsFromOffice[i], pos.X, 1 ); + } +} + +// tdf#106742 for DOCX with compatibility level > 14 (MS Word since ver.2013), +// we should NOT use cell margins when calculating table left border position. But we do need to use border width. +DECLARE_OOXMLEXPORT_TEST( testTablePosition15, "table-position-15.docx" ) +{ + sal_Int32 const aXCoordsFromOffice[] = { 2751, -899, 1, 212 }; + + uno::Reference< text::XTextTablesSupplier > xTablesSupplier( mxComponent, uno::UNO_QUERY ); + uno::Reference< frame::XModel > xModel( mxComponent, uno::UNO_QUERY ); + uno::Reference< container::XIndexAccess > xTables( xTablesSupplier->getTextTables(), uno::UNO_QUERY ); + + for ( int i = 0; i < 4; i++ ) + { + uno::Reference< text::XTextTable > xTable1( xTables->getByIndex( i ), uno::UNO_QUERY ); + + // Verify X coord + uno::Reference< view::XSelectionSupplier > xCtrl( xModel->getCurrentController(), uno::UNO_QUERY ); + xCtrl->select( uno::Any( xTable1 ) ); + uno::Reference< text::XTextViewCursorSupplier > xTextViewCursorSupplier( xCtrl, uno::UNO_QUERY ); + uno::Reference< text::XTextViewCursor > xCursor = xTextViewCursorSupplier->getViewCursor(); + awt::Point pos = xCursor->getPosition(); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "Incorrect X coord computed from docx", + aXCoordsFromOffice[i], pos.X, 1 ); + } +} + +DECLARE_OOXMLEXPORT_TEST( testTdf107359, "tdf107359-char-pitch.docx" ) +{ + uno::Reference xPropertySet(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + + bool bGridSnapToChars; + xPropertySet->getPropertyValue("GridSnapToChars") >>= bGridSnapToChars; + CPPUNIT_ASSERT_EQUAL( false, bGridSnapToChars ); + + sal_Int32 nRubyHeight; + xPropertySet->getPropertyValue("GridRubyHeight") >>= nRubyHeight; + CPPUNIT_ASSERT_EQUAL( sal_Int32(0), nRubyHeight ); + + sal_Int32 nBaseHeight; + xPropertySet->getPropertyValue("GridBaseHeight") >>= nBaseHeight; + CPPUNIT_ASSERT_EQUAL( sal_Int32(convertTwipToMm100(18 * 20)), nBaseHeight ); + + sal_Int32 nBaseWidth; + xPropertySet->getPropertyValue("GridBaseWidth") >>= nBaseWidth; + CPPUNIT_ASSERT_EQUAL( sal_Int32(convertTwipToMm100(24 * 20)), nBaseWidth ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf77236_MissingSolidFill) +{ + loadAndSave("tdf77236_MissingSolidFill.docx"); + // tdf#77236: solidFill of VML shape was not exported if the colors of line and style were the same + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "//mc:Choice/w:drawing/wp:inline/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:solidFill", 1); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf105875_VmlShapeRotationWithFlip, "tdf105875_VmlShapeRotationWithFlip.docx") +{ + // tdf#105875: check whether the rotation of the VML bezier shape is ok (with flip too) + // TODO: fix export too + if (mbExported) + return; + + { + uno::Reference xPropertySet(getShape(1), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xPropertySet->getPropertyValue("RotateAngle").get()); + } + + { + uno::Reference xPropertySet(getShape(2), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(220 * 100), xPropertySet->getPropertyValue("RotateAngle").get(), 1); + } + + { + uno::Reference xPropertySet(getShape(3), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(320 * 100), xPropertySet->getPropertyValue("RotateAngle").get(), 1); + } + + { + uno::Reference xPropertySet(getShape(4), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(140 * 100), xPropertySet->getPropertyValue("RotateAngle").get(), 1); + } + + { + uno::Reference xPropertySet(getShape(5), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(40 * 100), xPropertySet->getPropertyValue("RotateAngle").get(), 1); + } + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx new file mode 100644 index 000000000..872bda849 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx @@ -0,0 +1,867 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {} +}; + +DECLARE_OOXMLEXPORT_TEST(testTdf57589_hashColor, "tdf57589_hashColor.docx") +{ + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(getParagraph(1), "FillStyle")); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTMAGENTA, getProperty(getParagraph(1), "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(getParagraph(2), "FillStyle")); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(getParagraph(2), "ParaBackColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf90906_colAuto, "tdf90906_colAuto.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xCell->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(getRun(xPara, 1, "Nazwa"), "CharBackColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf90906_colAutoB, "tdf90906_colAutoB.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + uno::Reference xCell = xTable->getCellByName("A1"); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTGREEN, getProperty(xCell, "BackColor")); + xCell.set(xTable->getCellByName("A2")); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(xCell, "BackColor")); + xCell.set(xTable->getCellByName("B1")); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(xCell, "BackColor")); + xCell.set(xTable->getCellByName("B2")); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, getProperty(xCell, "BackColor")); + + uno::Reference xText(getParagraph(2, "Paragraphs too")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xText, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(xText, "ParaBackColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf92524_autoColor) +{ + loadAndReload("tdf92524_autoColor.doc"); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(getParagraph(1), "FillStyle")); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(getParagraph(1), "ParaBackColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf116436_rowFill) +{ + loadAndReload("tdf116436_rowFill.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell = xTable->getCellByName("A1"); + CPPUNIT_ASSERT_EQUAL(Color(0xF8DF7C), getProperty(xCell, "BackColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf121665_back2backColumnBreaks, "tdf121665_back2backColumnBreaks.docx") +{ + CPPUNIT_ASSERT_EQUAL_MESSAGE("Column break type", + style::BreakType_COLUMN_BEFORE, getProperty(getParagraph(2), "BreakType")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf126795_TabsRelativeToIndent0) +{ + loadAndReload("tdf126795_TabsRelativeToIndent0.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Sequence< style::TabStop > stops = getProperty< uno::Sequence >(getParagraph( 2 ), "ParaTabStops"); + CPPUNIT_ASSERT_EQUAL( sal_Int32(1), stops.getLength()); + CPPUNIT_ASSERT_EQUAL( css::style::TabAlign_LEFT, stops[ 0 ].Alignment ); + CPPUNIT_ASSERT_EQUAL( sal_Int32(499), stops[ 0 ].Position ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf126795_TabsRelativeToIndent1) +{ + loadAndReload("tdf126795_TabsRelativeToIndent1.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Sequence< style::TabStop > stops = getProperty< uno::Sequence >(getParagraph( 2 ), "ParaTabStops"); + CPPUNIT_ASSERT_EQUAL( sal_Int32(1), stops.getLength()); + CPPUNIT_ASSERT_EQUAL( css::style::TabAlign_LEFT, stops[ 0 ].Alignment ); + CPPUNIT_ASSERT_EQUAL( sal_Int32(499), stops[ 0 ].Position ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf46938_clearTabStop, "tdf46938_clearTabStop.docx") +{ + // Number of tabstops should be zero, overriding the one in the style + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty< uno::Sequence >(getParagraph(1), "ParaTabStops").getLength()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf63561_clearTabs, "tdf63561_clearTabs.docx") +{ + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), getProperty< uno::Sequence >(getParagraph(1), "ParaTabStops").getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7), getProperty< uno::Sequence >(getParagraph(3), "ParaTabStops").getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), getProperty< uno::Sequence >(getParagraph(4), "ParaTabStops").getLength()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf63561_clearTabs2, "tdf63561_clearTabs2.docx") +{ + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty< uno::Sequence >(getParagraph(1), "ParaTabStops").getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), getProperty< uno::Sequence >(getParagraph(3), "ParaTabStops").getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), getProperty< uno::Sequence >(getParagraph(4), "ParaTabStops").getLength()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf124384, "tdf124384.docx") +{ + // There should be no crash during loading of the document + // so, let's check just how much pages we have + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121456_tabsOffset) +{ + loadAndReload("tdf121456_tabsOffset.odt"); + for (int i=2; i<8; i++) + { + uno::Sequence< style::TabStop > stops = getProperty< uno::Sequence >(getParagraph( i ), "ParaTabStops"); + CPPUNIT_ASSERT_EQUAL( sal_Int32(1), stops.getLength()); + CPPUNIT_ASSERT_EQUAL( css::style::TabAlign_RIGHT, stops[ 0 ].Alignment ); + CPPUNIT_ASSERT_EQUAL( sal_Int32(17000), stops[ 0 ].Position ); + } +} + +// tdf#121561: make sure w:sdt/w:sdtContent around TOC is written during ODT->DOCX conversion +CPPUNIT_TEST_FIXTURE(Test, testTdf121561_tocTitle) +{ + loadAndSave("tdf121456_tabsOffset.odt"); + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtContent/w:p/w:r/w:t", "Inhaltsverzeichnis"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtContent/w:p/w:r/w:instrText", " TOC \\f \\o \"1-9\" \\h"); + assertXPath(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtPr/w:docPartObj/w:docPartGallery", "val", "Table of Contents"); + assertXPath(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtPr/w:docPartObj/w:docPartUnique", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf129525) +{ + loadAndSave("tdf129525.rtf"); + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtContent/w:p[1]/w:r[4]/w:t", "Overview"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtContent/w:p[1]/w:r[5]/w:t", "3"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtContent/w:p[2]/w:r[1]/w:t", "More detailed description"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtContent/w:p[2]/w:r[2]/w:t", "4"); +} + +// Related issue tdf#121561: w:sdt/w:sdtContent around TOC +DECLARE_OOXMLEXPORT_TEST(testTdf124106, "tdf121456.docx") +{ + uno::Reference textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference text = textDocument->getText(); + // -1 if the 'Y' character does not occur + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), text->getString().indexOf('Y')); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), text->getString().indexOf('y')); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121561_tocTitleDocx) +{ + loadAndSave("tdf121456_tabsOffset.odt"); + CPPUNIT_ASSERT_EQUAL(7, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport(); + + // get TOC node + uno::Reference xIndexSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexes = xIndexSupplier->getDocumentIndexes( ); + uno::Reference xTOCIndex(xIndexes->getByIndex(0), uno::UNO_QUERY); + + // ensure TOC title was set in TOC properties + CPPUNIT_ASSERT_EQUAL(OUString("Inhaltsverzeichnis"), getProperty(xTOCIndex, "Title")); + + // ensure TOC end-field mark is placed inside TOC section + assertXPath(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtContent/w:p[16]/w:r/w:fldChar", "fldCharType", "end"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf106174_rtlParaAlign, "tdf106174_rtlParaAlign.docx") +{ + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_CENTER), getProperty(getParagraph(1), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_CENTER), getProperty(getParagraph(2), "ParaAdjust")); + uno::Reference xPropertySet(getStyles("ParagraphStyles")->getByName("Another paragraph aligned to right"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(xPropertySet, "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(3), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(4), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(5), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(6), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(7), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(8), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(9), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(10), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(11), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(12), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(13), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(14), "ParaAdjust")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf82065_Ind_start_strict, "tdf82065_Ind_start_strict.docx") +{ + uno::Reference xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProps; + xLevels->getByIndex(0) >>= aProps; // 1st level + bool bFoundIndentAt = false; + for (beans::PropertyValue const & rProp : std::as_const(aProps)) + { + if (rProp.Name == "IndentAt") + { + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("IndentAt", double(6001), rProp.Value.get(), 10 ); + bFoundIndentAt = true; + } + } + CPPUNIT_ASSERT_EQUAL_MESSAGE("IndentAt defined", true, bFoundIndentAt); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf76683_negativeTwipsMeasure) +{ + loadAndSave("tdf76683_negativeTwipsMeasure.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:cols/w:col", 2); + sal_uInt32 nColumn1 = getXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:cols/w:col[1]", "w").toUInt32(); + sal_uInt32 nColumn2 = getXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:cols/w:col[2]", "w").toUInt32(); + CPPUNIT_ASSERT( nColumn1 > nColumn2 ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf112694, "tdf112694.docx") +{ + uno::Any aPageStyle = getStyles("PageStyles")->getByName("Standard"); + // Header was on when header for file was for explicit first pages only + // (marked via ). + CPPUNIT_ASSERT(!getProperty(aPageStyle, "HeaderIsOn")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf113849_evenAndOddHeaders) +{ + loadAndReload("tdf113849_evenAndOddHeaders.odt"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Header2 text", OUString("L. J. Kendall"), parseDump("/root/page[2]/header/txt")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer2 text", OUString("*"), parseDump("/root/page[2]/footer/txt")); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Header3 text", OUString("Shadow Hunt"), parseDump("/root/page[3]/header/txt")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer3 text", OUString("*"), parseDump("/root/page[3]/footer/txt")); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Header4 text", OUString("L. J. Kendall"), parseDump("/root/page[4]/header/txt")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer4 text", OUString("*"), parseDump("/root/page[4]/footer/txt")); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer5 text", OUString(""), parseDump("/root/page[5]/footer/txt")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer6 text", OUString(""), parseDump("/root/page[6]/footer/txt")); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number of pages", 6, getPages() ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf118361_RTLfootnoteSeparator, "tdf118361_RTLfootnoteSeparator.docx") +{ + uno::Any aPageStyle = getStyles("PageStyles")->getByName("Standard"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Footnote separator RTL", sal_Int16(2), getProperty(aPageStyle, "FootnoteLineAdjust")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf115861, "tdf115861.docx") +{ + // Second item in the paragraph enumeration was a table, 2nd paragraph was + // lost. + CPPUNIT_ASSERT_EQUAL(OUString("(k)"), getParagraph(2)->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf67207_MERGEFIELD, "mailmerge.docx") +{ + uno::Reference xTextField = getProperty< uno::Reference >(getRun(getParagraph(1), 2), "TextField"); + CPPUNIT_ASSERT(xTextField.is()); + uno::Reference xServiceInfo(xTextField, uno::UNO_QUERY_THROW); + uno::Reference xDependent(xTextField, uno::UNO_QUERY_THROW); + + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.Database")); + OUString sValue; + xTextField->getPropertyValue("Content") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString(u"«Name»"), sValue); + + uno::Reference xFiledMaster = xDependent->getTextFieldMaster(); + uno::Reference xFiledMasterServiceInfo(xFiledMaster, uno::UNO_QUERY_THROW); + + CPPUNIT_ASSERT(xFiledMasterServiceInfo->supportsService("com.sun.star.text.fieldmaster.Database")); + + // Defined properties: DataBaseName, Name, DataTableName, DataColumnName, DependentTextFields, DataCommandType, InstanceName, DataBaseURL + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("Name") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("Name"), sValue); + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("DataColumnName") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("Name"), sValue); + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("InstanceName") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.text.fieldmaster.DataBase.Name"), sValue); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf115719, "tdf115719.docx") +{ + // This was a single page, instead of pushing the textboxes to the second + // page. + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf115719b, "tdf115719b.docx") +{ + // This is similar to testTdf115719, but here the left textbox is not aligned "from left, by + // 0cm" but simply aligned to left, which is a different codepath. + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2 + // - Actual : 1 + // i.e. the textboxes did not appear on the 2nd page, but everything was on a single page. + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123243, "tdf123243.docx") +{ + // Without the accompanying fix in place, this test would have failed with 'Expected: 1; Actual: + // 2'; i.e. unexpected paragraph margin created 2 pages. + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf116410, "tdf116410.docx") +{ + // Opposite of the above, was 2 pages, should be 1 page. + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testDefaultStyle, "defaultStyle.docx") +{ + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Default Style", OUString("Title"), getProperty(getParagraph(1), "ParaStyleName") ); + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf147115_defaultStyle, "tdf147115_defaultStyle.docx") +{ + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Default Style", OUString("Standard"), getProperty(getParagraph(1), "ParaStyleName") ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf117988, "tdf117988.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf94801, "tdf94801.docx") +{ + // This was a 2-page document with unwanted line breaking in table cells, because + // the table was narrower, than defined (< 1/100 mm loss during twip to 1/100 mm conversion) + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testParagraphSplitOnSectionBorder) +{ + loadAndSave("parasplit-on-section-border.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + // Test document has only two paragraphs. After splitting, it should contain + // three of them. + assertXPath(pXmlDoc, "//w:sectPr", 2); + assertXPath(pXmlDoc, "//w:p", 3); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf44832_testSectionWithDifferentHeader) +{ + loadAndSave("tdf44832_section_new_header.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:headerReference", 1); +} + +DECLARE_OOXMLEXPORT_TEST(testSignatureLineShape, "signature-line-all-props-set.docx") +{ + uno::Reference xSignatureLineShape = getShape(1); + uno::Reference xPropSet(xSignatureLineShape, uno::UNO_QUERY); + + bool bIsSignatureLine; + xPropSet->getPropertyValue("IsSignatureLine") >>= bIsSignatureLine; + CPPUNIT_ASSERT_EQUAL(true, bIsSignatureLine); + + bool bShowSignDate; + xPropSet->getPropertyValue("SignatureLineShowSignDate") >>= bShowSignDate; + CPPUNIT_ASSERT_EQUAL(true, bShowSignDate); + + bool bCanAddComment; + xPropSet->getPropertyValue("SignatureLineCanAddComment") >>= bCanAddComment; + CPPUNIT_ASSERT_EQUAL(true, bCanAddComment); + + OUString aSignatureLineId; + xPropSet->getPropertyValue("SignatureLineId") >>= aSignatureLineId; + CPPUNIT_ASSERT_EQUAL(OUString("{0EBE47D5-A1BD-4C9E-A52E-6256E5C345E9}"), aSignatureLineId); + + OUString aSuggestedSignerName; + xPropSet->getPropertyValue("SignatureLineSuggestedSignerName") >>= aSuggestedSignerName; + CPPUNIT_ASSERT_EQUAL(OUString("John Doe"), aSuggestedSignerName); + + OUString aSuggestedSignerTitle; + xPropSet->getPropertyValue("SignatureLineSuggestedSignerTitle") >>= aSuggestedSignerTitle; + CPPUNIT_ASSERT_EQUAL(OUString("Farmer"), aSuggestedSignerTitle); + + OUString aSuggestedSignerEmail; + xPropSet->getPropertyValue("SignatureLineSuggestedSignerEmail") >>= aSuggestedSignerEmail; + CPPUNIT_ASSERT_EQUAL(OUString("john@thefarmers.com"), aSuggestedSignerEmail); + + OUString aSigningInstructions; + xPropSet->getPropertyValue("SignatureLineSigningInstructions") >>= aSigningInstructions; + CPPUNIT_ASSERT_EQUAL(OUString("Check the machines!"), aSigningInstructions); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf117805) +{ + loadAndSave("tdf117805.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xNameAccess + = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), + maTempFile.GetURL()); + // This failed, the header was lost. It's still referenced at an incorrect + // location in document.xml, though. + CPPUNIT_ASSERT(xNameAccess->hasByName("word/header1.xml")); + + uno::Reference textbox(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(8, getParagraphs(textbox)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf113183, "tdf113183.docx") +{ + // The horizontal positioning of the star shape affected the positioning of + // the triangle one, so the triangle was outside the page frame. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nPageLeft = getXPath(pXmlDoc, "/root/page[1]/infos/bounds", "left").toInt32(); + sal_Int32 nPageWidth = getXPath(pXmlDoc, "/root/page[1]/infos/bounds", "width").toInt32(); + sal_Int32 nShapeLeft + = getXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[2]/bounds", "left") + .toInt32(); + sal_Int32 nShapeWidth + = getXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject[2]/bounds", "width") + .toInt32(); + // Make sure the second triangle shape is within the page bounds (with ~1px tolerance). + CPPUNIT_ASSERT_GREATEREQUAL(nShapeLeft + nShapeWidth, nPageLeft + nPageWidth + 21); +} + +DECLARE_OOXMLEXPORT_TEST(testGraphicObjectFliph, "graphic-object-fliph.docx") +{ + CPPUNIT_ASSERT(getProperty(getShape(1), "HoriMirroredOnEvenPages")); + CPPUNIT_ASSERT(getProperty(getShape(1), "HoriMirroredOnOddPages")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf113547, "tdf113547.docx") +{ + uno::Reference xPropertySet( + getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference xLevels( + xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + comphelper::SequenceAsHashMap aProps(xLevels->getByIndex(0)); // 1st level + // This was 0, first-line left margin of the numbering was lost. + CPPUNIT_ASSERT_EQUAL(static_cast(-635), aProps["FirstLineIndent"].get()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf113399) +{ + loadAndReload("tdf113399.doc"); + // 0 padding was not preserved + // In LO 0 is the default, but in OOXML format the default is 254 / 127 + uno::Reference xPropSet(getShape(1), uno::UNO_QUERY); + sal_Int32 nPaddingValue; + xPropSet->getPropertyValue("TextLeftDistance") >>= nPaddingValue; + CPPUNIT_ASSERT_EQUAL(static_cast(0), nPaddingValue); + xPropSet->getPropertyValue("TextRightDistance") >>= nPaddingValue; + CPPUNIT_ASSERT_EQUAL(static_cast(0), nPaddingValue); + xPropSet->getPropertyValue("TextUpperDistance") >>= nPaddingValue; + CPPUNIT_ASSERT_EQUAL(static_cast(0), nPaddingValue); + xPropSet->getPropertyValue("TextLowerDistance") >>= nPaddingValue; + CPPUNIT_ASSERT_EQUAL(static_cast(0), nPaddingValue); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf114882, "tdf114882.docx") +{ + // fastserializer must not fail assertion because of mismatching elements +} + +DECLARE_OOXMLEXPORT_TEST(testTdf49073, "tdf49073.docx") +{ + // test case for Asian phontic guide (ruby text.) + sal_Unicode aRuby[3] = {0x304D,0x3082,0x3093}; + OUString sRuby(aRuby, SAL_N_ELEMENTS(aRuby)); + CPPUNIT_ASSERT_EQUAL(sRuby,getProperty(getParagraph(1)->getStart(), "RubyText")); + OUString sStyle = getProperty( getParagraph(1)->getStart(), "RubyCharStyleName"); + uno::Reference xPropertySet(getStyles("CharacterStyles")->getByName(sStyle), uno::UNO_QUERY ); + CPPUNIT_ASSERT_EQUAL(5.f, getProperty(xPropertySet, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(text::RubyAdjust_CENTER) ,getProperty(getParagraph(2)->getStart(),"RubyAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(text::RubyAdjust_BLOCK) ,getProperty(getParagraph(3)->getStart(),"RubyAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(text::RubyAdjust_INDENT_BLOCK),getProperty(getParagraph(4)->getStart(),"RubyAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(text::RubyAdjust_LEFT) ,getProperty(getParagraph(5)->getStart(),"RubyAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(text::RubyAdjust_RIGHT) ,getProperty(getParagraph(6)->getStart(),"RubyAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(text::RubyPosition::INTER_CHARACTER) ,getProperty(getParagraph(7)->getStart(),"RubyPosition")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf114703, "tdf114703.docx") +{ + uno::Reference xRules + = getProperty>( + getStyles("NumberingStyles")->getByName("WWNum1"), "NumberingRules"); + // This was 0, level override "default" replaced the non-default value from + // the abstract level. + CPPUNIT_ASSERT_EQUAL( + static_cast(-1000), + comphelper::SequenceAsHashMap(xRules->getByIndex(0))["FirstLineIndent"].get()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf113258, "tdf113258.docx") +{ + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + // This was 494, i.e. automatic spacing resulted in non-zero paragraph top + // margin for the first paragraph in a shape. + CPPUNIT_ASSERT_EQUAL(static_cast(0), + getProperty(xShape->getStart(), "ParaTopMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf113258_noBeforeAutospacing, "tdf113258_noBeforeAutospacing.docx") +{ + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + // This was 0, i.e. disabled automatic spacing still resulted in zero paragraph + // top margin for the first paragraph in a shape. + CPPUNIT_ASSERT_EQUAL(static_cast(1764), + getProperty(xShape->getStart(), "ParaTopMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf142542_cancelledAutospacing, "tdf142542_cancelledAutospacing.docx") +{ + //Direct formatting disabling autoSpacing must override paragraph-style's autoSpacing. + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(getParagraph(1), "ParaTopMargin")); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(getParagraph(1), "ParaBottomMargin")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf137655) +{ + loadAndSave("tdf137655.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // These were 280. + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[1]/w:p[1]/w:pPr/w:spacing", "before", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[2]/w:p[1]/w:pPr/w:spacing", "before", "0"); + + //tdf#142542: ensure that the original beforeAutospacing = 0 is not changed. + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[1]/w:p[1]/w:pPr/w:spacing", "beforeAutospacing", "0"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf120511_eatenSection, "tdf120511_eatenSection.docx") +{ + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nHeight = getXPath(pXmlDoc, "/root/page[1]/infos/prtBounds", "height").toInt32(); + sal_Int32 nWidth = getXPath(pXmlDoc, "/root/page[1]/infos/prtBounds", "width").toInt32(); + CPPUNIT_ASSERT_MESSAGE( "Page1 is portrait", nWidth < nHeight ); + nHeight = getXPath(pXmlDoc, "/root/page[2]/infos/prtBounds", "height").toInt32(); + nWidth = getXPath(pXmlDoc, "/root/page[2]/infos/prtBounds", "width").toInt32(); + CPPUNIT_ASSERT_MESSAGE( "Page2 is landscape", nWidth > nHeight ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf104354, "tdf104354.docx") +{ + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + // This was 494, i.e. automatic spacing resulted in non-zero paragraph top + // margin for the first paragraph in a text frame. + CPPUNIT_ASSERT_EQUAL(static_cast(0), + getProperty(xShape->getStart(), "ParaTopMargin")); + // still 494 in the second paragraph + CPPUNIT_ASSERT_EQUAL(static_cast(494), + getProperty(xShape->getEnd(), "ParaTopMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf104354_firstParaInSection, "tdf104354_firstParaInSection.docx") +{ + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + uno::Reference xText(xFootnotes->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(494), + getProperty(getParagraphOfText(1, xText), "ParaTopMargin")); + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageBreak_after) +{ + loadAndReload("pageBreak_after.odt"); + // The problem was that the page breakAfter put the empty page BEFORE the table + xmlDocUniquePtr pDump = parseLayoutDump(); + assertXPath(pDump, "/root/page[1]/body/tab", 1); + // There should be two pages actually - a blank page after a page break. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Did you fix?? Table should be on page one of two", 1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf107035, "tdf107035.docx") +{ + // Select the second run containing the page number field + auto xPgNumRun = getRun(getParagraph(1), 2, "1"); + + // Check that the page number field colour is set to "automatic". + Color nPgNumColour = getProperty(xPgNumRun, "CharColor"); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, nPgNumColour); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf112118_DOCX, "tdf112118.docx") +{ + // The resulting left margin width (2081) differs from its DOC counterpart from ww8export2.cxx, + // because DOCX import does two conversions between mm/100 and twips on the route, losing one + // twip on the road and arriving with a value that is 2 mm/100 less. I don't see an obvious way + // to avoid that. + static const struct { + const char* styleName; + struct { + const char* sideName; + sal_Int32 nMargin; + sal_Int32 nBorderDistance; + sal_Int32 nBorderWidth; + } sideParams[4]; + } styleParams[] = { // Margin (MS-style), border distance, border width + { + "Standard", + { + { "Top", 496, 847, 159 }, // 851 twip, 24 pt (from text), 4.5 pt + { "Left", 2081, 706, 212 }, // 1701 twip, 20 pt (from text), 6.0 pt + { "Bottom", 1401, 564, 35 }, // 1134 twip, 16 pt (from text), 1.0 pt + { "Right", 3471, 423, 106 } // 2268 twip, 12 pt (from text), 3.0 pt + } + }, + { + "Converted1", + { + { "Top", 847, 496, 159 }, // 851 twip, 24 pt (from edge), 4.5 pt + { "Left", 706, 2081, 212 }, // 1701 twip, 20 pt (from edge), 6.0 pt + { "Bottom", 564, 1401, 35 }, // 1134 twip, 16 pt (from edge), 1.0 pt + { "Right", 423, 3471, 106 } // 2268 twip, 12 pt (from edge), 3.0 pt + } + } + }; + auto xStyles = getStyles("PageStyles"); + + for (const auto& style : styleParams) + { + const OUString sName = OUString::createFromAscii(style.styleName); + uno::Reference xStyle(xStyles->getByName(sName), uno::UNO_QUERY_THROW); + for (const auto& side : style.sideParams) + { + const OUString sSide = OUString::createFromAscii(side.sideName); + const OString sStage = style.styleName + OString::Concat(" ") + side.sideName; + + sal_Int32 nMargin = getProperty(xStyle, sSide + "Margin"); + CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(sStage + " margin width").getStr(), + side.nMargin, nMargin); + + sal_Int32 nBorderDistance = getProperty(xStyle, sSide + "BorderDistance"); + CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(sStage + " border distance").getStr(), + side.nBorderDistance, nBorderDistance); + + table::BorderLine aBorder = getProperty(xStyle, sSide + "Border"); + CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(sStage + " border width").getStr(), + side.nBorderWidth, + sal_Int32(aBorder.OuterLineWidth + aBorder.InnerLineWidth + aBorder.LineDistance)); + + // tdf#116472: check that AUTO border color is imported as black + CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(sStage + " border color").getStr(), + sal_Int32(COL_BLACK), aBorder.Color); + } + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf82177_outsideCellBorders, "tdf82177_outsideCellBorders.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference< text::XTextTable > xTable( xTables->getByIndex(0), uno::UNO_QUERY ); + uno::Reference< table::XCell > xCell = xTable->getCellByName( "E4" ); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xCell, "TopBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xCell, "LeftBorder").LineWidth); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf82177_insideCellBorders, "tdf82177_insideCellBorders.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference< text::XTextTable > xTable( xTables->getByIndex(0), uno::UNO_QUERY ); + uno::Reference< table::XCell > xCell = xTable->getCellByName( "E4" ); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xCell, "TopBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xCell, "LeftBorder").LineWidth); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf82177_tblBorders, "tdf82177_tblBorders.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference< text::XTextTable > xTable( xTables->getByIndex(0), uno::UNO_QUERY ); + uno::Reference< table::XCell > xCell = xTable->getCellByName( "A5" ); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xCell, "BottomBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xCell, "LeftBorder").LineWidth); + xCell.set(xTable->getCellByName( "E5" )); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xCell, "TopBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xCell, "LeftBorder").LineWidth); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf119760_positionCellBorder, "tdf119760_positionCellBorder.docx") +{ + //inconsistent in Word even. 2016 positions on last row, 2003 positions on first cell. + sal_Int32 nRowLeft = parseDump("/root/page/body/tab[4]/row[1]/infos/bounds", "left").toInt32(); + sal_Int32 nTextLeft = parseDump("/root/page/body/tab[4]/row[1]/cell[1]/txt/infos/bounds", "left").toInt32(); + CPPUNIT_ASSERT( nRowLeft < nTextLeft ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf98620_environmentBiDi) +{ + loadAndReload("tdf98620_environmentBiDi.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::RL_TB, getProperty( getParagraph(1), "WritingMode" )); + CPPUNIT_ASSERT_EQUAL(sal_Int32(style::ParagraphAdjust_RIGHT), getProperty( getParagraph(1), "ParaAdjust" )); + + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::LR_TB, getProperty( getParagraph(2), "WritingMode" )); + CPPUNIT_ASSERT_EQUAL(sal_Int32(style::ParagraphAdjust_RIGHT), getProperty( getParagraph(2), "ParaAdjust" )); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf116976, "tdf116976.docx") +{ + // This was 0, relative size of shape after bitmap was ignored. + CPPUNIT_ASSERT_EQUAL(static_cast(40), + getProperty(getShape(1), "RelativeWidth")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf116985, "tdf116985.docx") +{ + // Body frame width is 10800, 40% is the requested relative width, with 144 + // spacing to text on the left/right side. So ideal width would be 4032, + // was 3431. Allow one pixel tolerance, though. + sal_Int32 nWidth + = parseDump("/root/page[1]/body/txt[1]/anchored/fly/infos/bounds", "width").toInt32(); + CPPUNIT_ASSERT(nWidth > 4000); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf116801, "tdf116801.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + // This raised a lang::IndexOutOfBoundsException, table was missing from + // the import result. + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("D1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("D1"), xCell->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf107969, "tdf107969.docx") +{ + // A VML object in a footnote's tracked changes caused write past end of document.xml at export to docx. + // After that, importing after export failed with + // SAXParseException: '[word/document.xml line 2]: Extra content at the end of the document', Stream 'word/document.xml'. +} + +DECLARE_OOXMLEXPORT_TEST(testOpenDocumentAsReadOnly, "open-as-read-only.docx") +{ + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + CPPUNIT_ASSERT(pTextDoc->GetDocShell()->IsSecurityOptOpenReadOnly()); +} + +DECLARE_OOXMLEXPORT_TEST(testNoDefault, "noDefault.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xCell->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); + + // Row 1: color directly applied to the paragraph, overrides table and style colors + CPPUNIT_ASSERT_EQUAL(Color(0x2E74B5), getProperty(getRun(xPara,1), "CharColor")); + + // Row2: (still part of firstRow table-style) ought to use the Normal style color, not the table-style color(5B9BD5) + //xCell.set(xTable->getCellByName("A2"), uno::UNO_QUERY); + //xParaEnumAccess.set(xCell->getText(), uno::UNO_QUERY); + //xParaEnum = xParaEnumAccess->createEnumeration(); + //xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); + //CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_LIGHTMAGENTA), getProperty(getRun(xPara,1), "CharColor")); + + // Row 3+: Normal style still applied, even if nothing is specified with w:default="1" + xCell.set(xTable->getCellByName("A3"), uno::UNO_QUERY); + xParaEnumAccess.set(xCell->getText(), uno::UNO_QUERY); + xParaEnum = xParaEnumAccess->createEnumeration(); + xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_LIGHTMAGENTA), getProperty(getRun(xPara,1), "CharColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testMarginsFromStyle, "margins_from_style.docx") +{ + // tdf#118521 paragraphs with direct formatting of top or bottom margins have + // lost the other margin comes from paragraph style, getting a bad + // margin from the default style + + // from direct formatting + CPPUNIT_ASSERT_EQUAL(sal_Int32(35), getProperty(getParagraph(1), "ParaTopMargin")); + // from paragraph style + CPPUNIT_ASSERT_EQUAL(sal_Int32(106), getProperty(getParagraph(1), "ParaBottomMargin")); + + // from paragraph style + CPPUNIT_ASSERT_EQUAL(sal_Int32(388), getProperty(getParagraph(3), "ParaTopMargin")); + // from direct formatting + CPPUNIT_ASSERT_EQUAL(sal_Int32(600), getProperty(getParagraph(3), "ParaBottomMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf134784, "tdf134784.docx") +{ + uno::Reference textbox(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(3, getParagraphs(textbox)); + uno::Reference xParagraph = getParagraphOfText(1, textbox); + CPPUNIT_ASSERT_EQUAL(sal_Int32(212), getProperty(xParagraph, "ParaBottomMargin")); + + // This wasn't zero (it was inherited from style of the previous paragraph in the main text) + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xParagraph, "ParaTopMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf136955, "tdf134784.docx") +{ + uno::Reference textbox(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(3, getParagraphs(textbox)); + uno::Reference xParagraph = getParagraphOfText(2, textbox); + + // These weren't zero (values inherited from style of the previous paragraph in the main text) + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xParagraph, "ParaBottomMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xParagraph, "ParaTopMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf104348_contextMargin, "tdf104348_contextMargin.docx") +{ + // tdf#104348 shows that ContextMargin belongs with Top/Bottom handling + + uno::Reference xMyStyle(getStyles("ParagraphStyles")->getByName("MyStyle"), uno::UNO_QUERY); + // from paragraph style - this is what direct formatting should equal + sal_Int32 nMargin = getProperty(xMyStyle, "ParaBottomMargin"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nMargin); + // from direct formatting + CPPUNIT_ASSERT_EQUAL(nMargin, getProperty(getParagraph(2), "ParaBottomMargin")); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx new file mode 100644 index 000000000..25a993210 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx @@ -0,0 +1,2248 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() + : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") + { + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testTableCrossReference) +{ + loadAndReload("table_cross_reference.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // tdf#42346: Cross references to tables were not saved + // MSO uses simple bookmarks for referencing table caption, so we do the same by export + + // Check whether we have all the necessary bookmarks exported and imported back + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(4), xBookmarksByIdx->getCount()); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_number_only")); + + // Check bookmark text ranges + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_full"), + uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table 1: Table caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table 1"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + + // Check reference fields + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess( + xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + + sal_uInt16 nIndex = 0; + while (xFields->hasMoreElements()) + { + uno::Reference xServiceInfo(xFields->nextElement(), uno::UNO_QUERY); + uno::Reference xPropertySet(xServiceInfo, uno::UNO_QUERY); + switch (nIndex) + { + // Full reference to table caption + case 0: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Table 1: Table caption"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_full"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Page style reference / exported as simple page reference + case 1: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_full"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Reference to table number + case 2: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_number_only"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Reference to caption only + case 3: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_caption_only"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Reference to category and number + case 4: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Table 1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_label_and_number"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Reference to page of the table + case 5: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_full"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Above / below reference + case 6: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("above"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_full"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + default: + break; + } + ++nIndex; + } + + CPPUNIT_ASSERT_EQUAL(sal_uInt16(8), nIndex); +} + +CPPUNIT_TEST_FIXTURE(Test, testTableCrossReferenceCustomFormat) +{ + loadAndReload("table_cross_reference_custom_format.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // tdf#42346: Cross references to tables were not saved + // Check also captions with custom formatting + + // Check whether we have all the necessary bookmarks exported and imported back + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(16), xBookmarksByIdx->getCount()); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table1_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table1_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table1_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table1_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table2_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table2_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table2_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table2_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table3_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table3_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table3_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table3_number_only")); + + // Check bookmark text ranges + // First table's caption + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_full"), + uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1. Table: Table caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1. Table"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + // Second table's caption + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table1_full"), + uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("2. TableTable caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table1_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("2. Table"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table1_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table1_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("2"), xRange->getString()); + } + // Third table's caption + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table2_full"), + uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("3) Table Table caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table2_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("3) Table"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table2_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table2_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("3"), xRange->getString()); + } + // Fourth table's caption + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table3_full"), + uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table 4- Table caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table3_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table 4"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table3_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Table3_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("4"), xRange->getString()); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testObjectCrossReference) +{ + loadAndReload("object_cross_reference.odt"); + CPPUNIT_ASSERT_EQUAL(10, getShapes()); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + // tdf#42346: Cross references to objects were not saved + // MSO uses simple bookmarks for referencing table caption, so we do the same by export + + // Check whether we have all the necessary bookmarks exported and imported back + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(15), xBookmarksByIdx->getCount()); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing0_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing1_full")); + + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration0_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration1_caption_only")); + + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text0_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text1_label_and_number")); + + // Check bookmark text ranges + // Cross references to shapes + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Drawing0_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Drawing 1: A rectangle"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Drawing0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Drawing 1"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Drawing0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("A rectangle"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Drawing0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Drawing1_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Drawing 2: a circle"), xRange->getString()); + } + + // Cross references to pictures + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Illustration0_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Illustration 1: A picture"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Illustration0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Illustration 1"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Illustration0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("A picture"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Illustration0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Illustration1_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("another image"), xRange->getString()); + } + + // Cross references to text frames + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Text0_full"), + uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Text 1: A frame"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Text0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Text 1"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Text0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("A frame"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Text0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + { + uno::Reference xContent( + xBookmarksByName->getByName("Ref_Text1_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Text 2"), xRange->getString()); + } + + // Check reference fields + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess( + xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + + sal_uInt16 nIndex = 0; + while (xFields->hasMoreElements()) + { + uno::Reference xServiceInfo(xFields->nextElement(), uno::UNO_QUERY); + uno::Reference xPropertySet(xServiceInfo, uno::UNO_QUERY); + switch (nIndex) + { + // Reference to image number + case 0: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Illustration0_number_only"), sValue); + break; + } + // Full reference to the circle shape + case 1: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Drawing 2: a circle"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Drawing1_full"), sValue); + break; + } + // Caption only reference to the second picture + case 2: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("another image"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Illustration1_caption_only"), sValue); + break; + } + // Category and number reference to second text frame + case 3: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Text 2"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Text1_label_and_number"), sValue); + break; + } + // Full reference to rectangle shape + case 4: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Drawing 1: A rectangle"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Drawing0_full"), sValue); + break; + } + // Caption only reference to rectangle shape + case 5: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("A rectangle"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Drawing0_caption_only"), sValue); + break; + } + // Category and number reference to rectangle shape + case 6: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Drawing 1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Drawing0_label_and_number"), sValue); + break; + } + // Reference to rectangle shape's number + case 7: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Drawing0_number_only"), sValue); + break; + } + // Full reference to first text frame + case 8: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Text 1: A frame"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Text0_full"), sValue); + break; + } + // Caption only reference to first text frame + case 9: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("A frame"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Text0_caption_only"), sValue); + break; + } + // Category and number reference to first text frame + case 10: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Text 1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Text0_label_and_number"), sValue); + break; + } + // Number only reference to first text frame + case 11: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Text0_number_only"), sValue); + break; + } + // Full reference to first picture + case 12: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Illustration 1: A picture"), + sValue.trim()); // fails on MAC without trim + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Illustration0_full"), sValue); + break; + } + // Reference to first picture' caption + case 13: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("A picture"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Illustration0_caption_only"), sValue); + break; + } + // Category and number reference to first picture + case 14: + { + CPPUNIT_ASSERT( + xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Illustration 1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Illustration0_label_and_number"), sValue); + break; + } + default: + break; + } + ++nIndex; + } + + CPPUNIT_ASSERT_EQUAL(sal_uInt16(21), nIndex); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf112202, "090716_Studentische_Arbeit_VWS.docx") +{ + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // page 1 header: 1 paragraph, 2 flys, 1 draw object + assertXPath(pXmlDoc, "/root/page[1]/header/txt", 1); + assertXPath(pXmlDoc, "/root/page[1]/header/txt/anchored/fly", 2); + if (mbExported) // somehow there's an additional shape on re-import? + assertXPath(pXmlDoc, "/root/page[1]/header/txt/anchored/SwAnchoredDrawObject", 2); + else + assertXPath(pXmlDoc, "/root/page[1]/header/txt/anchored/SwAnchoredDrawObject", 1); + + // page 2 header: 3 paragraphs, 1 table, 1 fly on last paragraph + assertXPath(pXmlDoc, "/root/page[2]/header/txt", 3); + assertXPath(pXmlDoc, "/root/page[2]/header/tab", 1); + assertXPath(pXmlDoc, "/root/page[2]/header/txt/anchored/fly", 1); + + // page 3 header: 1 table, 1 paragraph, no text + assertXPath(pXmlDoc, "/root/page[3]/header/txt", 1); + assertXPath(pXmlDoc, "/root/page[3]/header/tab", 1); + assertXPath(pXmlDoc, "/root/page[3]/header/tab/row/cell/txt/Text", 0); + assertXPath(pXmlDoc, "/root/page[3]/header//anchored", 0); + // tdf#149313: ensure 3rd page does not have extra empty paragraph at top + assertXPathContent(pXmlDoc, "/root/page[3]/body//txt", "AUFGABENSTELLUNG"); + + // page 4 header: 1 table, 1 paragraph, with text + assertXPath(pXmlDoc, "/root/page[4]/header/txt", 1); + assertXPath(pXmlDoc, "/root/page[4]/header/tab", 1); + assertXPath(pXmlDoc, "/root/page[4]/header/tab/row[1]/cell[1]/txt[1]/Text", "Portion", + "Titel der studentischen Arbeit"); + assertXPath(pXmlDoc, "/root/page[4]/header//anchored", 0); + + // page 5: same as page 4 + assertXPath(pXmlDoc, "/root/page[5]/header/txt", 1); + assertXPath(pXmlDoc, "/root/page[5]/header/tab", 1); + assertXPath(pXmlDoc, "/root/page[5]/header/tab/row[1]/cell[1]/txt[1]/Text", "Portion", + "Titel der studentischen Arbeit"); + assertXPath(pXmlDoc, "/root/page[5]/header//anchored", 0); + + // page 6: same as page 4 + assertXPath(pXmlDoc, "/root/page[6]/header/txt", 1); + assertXPath(pXmlDoc, "/root/page[6]/header/tab", 1); + assertXPath(pXmlDoc, "/root/page[6]/header/tab/row[1]/cell[1]/txt[1]/Text", "Portion", + "Titel der studentischen Arbeit"); + assertXPath(pXmlDoc, "/root/page[6]/header//anchored", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf79435_legacyInputFields) +{ + loadAndReload("tdf79435_legacyInputFields.doc"); + //using .doc input file to verify cross-format compatibility. + uno::Reference xFormField + = getProperty>(getRun(getParagraph(5), 3), "Bookmark"); + uno::Reference xParameters(xFormField->getParameters()); + + OUString sTmp; + // Doc import problems, so disabling tests + //xParameters->getByName("EntryMacro") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("test"), sTmp); + //xParameters->getByName("Help") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("F1Help"), sTmp); + //xParameters->getByName("ExitMacro") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("test"), sTmp); + xParameters->getByName("Hint") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("StatusHelp"), sTmp); + //xParameters->getByName("Content") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("Camelcase"), sTmp); + //xParameters->getByName("Format") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("TITLE CASE"), sTmp); + + sal_uInt16 nMaxLength = 0; + xParameters->getByName("MaxLength") >>= nMaxLength; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Max Length", sal_uInt16(10), nMaxLength); + + // too bad this is based on character runs - just found try trial and error. + xFormField + = getProperty>(getRun(getParagraph(6), 2), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("calculated"), sTmp); + + xFormField + = getProperty>(getRun(getParagraph(7), 2), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("currentDate"), sTmp); + + xFormField + = getProperty>(getRun(getParagraph(7), 7), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("currentTime"), sTmp); + + xFormField + = getProperty>(getRun(getParagraph(8), 2), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("number"), sTmp); + + xFormField + = getProperty>(getRun(getParagraph(8), 7), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("date"), sTmp); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf120224_textControlCrossRef, "tdf120224_textControlCrossRef.docx") +{ + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xTextDocument->getText(), + uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xRunEnumAccess(xParaEnum->nextElement(), + uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + xRunEnum->nextElement(); //Text + uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL(OUString("TextFieldStart"), + getProperty(xPropertySet, "TextPortionType")); + uno::Reference xBookmark( + getProperty>(xPropertySet, "Bookmark"), uno::UNO_QUERY); + + // Critical test: does TextField's bookmark name match cross-reference? + const OUString& sTextFieldName(xBookmark->getName()); + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess( + xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sTextFieldName, getProperty(xPropertySet, "SourceName")); + + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), + uno::UNO_QUERY); + // TextFields should not be turned into real bookmarks. + CPPUNIT_ASSERT_EQUAL(static_cast(1), xBookmarksByIdx->getCount()); + + // The actual name isn't critical, but if it fails, it is worth asking why. + CPPUNIT_ASSERT_EQUAL(OUString("Text1"), sTextFieldName); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf117504_numberingIndent, "tdf117504_numberingIndent.docx") +{ + OUString sName = getProperty(getParagraph(1), "NumberingStyleName"); + CPPUNIT_ASSERT_MESSAGE("Paragraph has numbering style", !sName.isEmpty()); + + uno::Reference xPropertySet( + getStyles("ParagraphStyles")->getByName("Revision"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(353), getProperty(xPropertySet, "ParaBottomMargin")); + xPropertySet.set(getStyles("ParagraphStyles")->getByName("Body Note"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xPropertySet, "ParaBottomMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testWatermark, "watermark.docx") +{ + uno::Reference xShape = getShape(1); + + sal_Int32 nHeight = xShape->getSize().Height; + + // Rounding errors + sal_Int32 nDifference = 5150 - nHeight; + std::stringstream ss; + ss << "Difference: " << nDifference << " TotalHeight: " << nHeight; + CPPUNIT_ASSERT_MESSAGE(ss.str(), nDifference <= 4); + CPPUNIT_ASSERT_MESSAGE(ss.str(), nDifference >= -4); +} + +DECLARE_OOXMLEXPORT_TEST(testWatermarkTrim, "tdf114308.docx") +{ + uno::Reference xShape = getShape(1); + + // Rounding errors + sal_Int32 nHeight = xShape->getSize().Height; + sal_Int32 nDifference = 8729 - nHeight; + std::stringstream ss; + ss << "Difference: " << nDifference << " TotalHeight: " << nHeight; + CPPUNIT_ASSERT_MESSAGE(ss.str(), nDifference <= 4); + CPPUNIT_ASSERT_MESSAGE(ss.str(), nDifference >= -4); +} + +CPPUNIT_TEST_FIXTURE(Test, testVMLShapetypeId) +{ + loadAndSave("controlshape.fodt"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // must be _x0000_t + assertXPath(pXmlDoc, + "/w:document/w:body/w:tbl[1]/w:tr[1]/w:tc[1]/w:p[1]/w:r/mc:AlternateContent/" + "mc:Choice/w:drawing/wp:inline/a:graphic/a:graphicData/wps:wsp/wps:txbx/" + "w:txbxContent/w:p/w:r/w:object/v:shapetype", + "id", "_x0000_t75"); + assertXPath(pXmlDoc, + "/w:document/w:body/w:tbl[1]/w:tr[1]/w:tc[1]/w:p[1]/w:r/mc:AlternateContent/" + "mc:Choice/w:drawing/wp:inline/a:graphic/a:graphicData/wps:wsp/wps:txbx/" + "w:txbxContent/w:p/w:r/w:object/v:shape", + "type", "#_x0000_t75"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf73547) +{ + loadAndSave("tdf73547-dash.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + double nD = getXPath(pXmlDoc, "//a:custDash/a:ds[1]", "d").toDouble(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(105000.0, nD, 5000.0); // was 100000 + double nSp = getXPath(pXmlDoc, "//a:custDash/a:ds[1]", "sp").toDouble(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(35000.0, nSp, 5000.0); // was 100000 +} + +DECLARE_OOXMLEXPORT_TEST(testTdf119143, "tdf119143.docx") +{ + // The runs inside were ignored + const OUString sParaText = getParagraph(1)->getString(); + CPPUNIT_ASSERT_EQUAL( + OUString(u"عندما يريد العالم أن يتكلّم ‬ ، فهو يتحدّث " + u"بلغة " + u"يونيكود. تسجّل الآن لحضور المؤتمر الدولي العاشر " + u"ليونيكود (Unicode Conference)، الذي سيعقد في 10-12 " + u"آذار 1997 بمدينة مَايِنْتْس، ألمانيا. و سيجمع المؤتمر " + u"بين خبراء من كافة قطاعات الصناعة على الشبكة " + u"العالمية انترنيت ويونيكود، حيث ستتم، على الصعيدين " + u"الدولي والمحلي على حد سواء مناقشة سبل استخدام " + u"يونكود في النظم القائمة وفيما يخص التطبيقات " + u"الحاسوبية، الخطوط، تصميم النصوص والحوسبة متعددة " + u"اللغات."), + sParaText); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf105444) +{ + loadAndSave("tdf105444.docx"); + xmlDocUniquePtr pXmlComm = parseExport("word/comments.xml"); + // there is no extra paragraph on Win32, only a single one. + assertXPath(pXmlComm, "/w:comments/w:comment/w:p", 1); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf117137, "tdf117137.docx") +{ + // Paragraphs were not part of a numbering anymore after roundtrip. + uno::Reference xPara1(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xPara1.is()); + CPPUNIT_ASSERT(xPara1->getPropertyValue("NumberingRules").hasValue()); + + uno::Reference xPara2(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT(xPara2.is()); + CPPUNIT_ASSERT(xPara2->getPropertyValue("NumberingRules").hasValue()); + + uno::Reference xPara3(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT(xPara3.is()); + CPPUNIT_ASSERT(xPara3->getPropertyValue("NumberingRules").hasValue()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf138780) +{ + loadAndReload("tdf138780.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Paragraphs were not part of a numbering anymore after roundtrip. + uno::Reference xPara1(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xPara1.is()); + CPPUNIT_ASSERT(xPara1->getPropertyValue("NumberingRules").hasValue()); + + uno::Reference xPara2(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT(xPara2.is()); + CPPUNIT_ASSERT(xPara2->getPropertyValue("NumberingRules").hasValue()); + + uno::Reference xPara3(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT(xPara3.is()); + CPPUNIT_ASSERT(xPara3->getPropertyValue("NumberingRules").hasValue()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf134618) +{ + loadAndSave("tdf134618.doc"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + //Without the fix it in place, it would have failed with + //- Expected: 1 + //- Actual : 9 + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r", 1); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent", 2); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf99631) +{ + loadAndSave("tdf99631.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "//w:object", 2); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/w:object", 2); + // first XSLX OLE object (1:1 scale) + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:object[1]", "dxaOrig", "2561"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:object[1]", "dyaOrig", "513"); + // second XLSX OLE object (same content + 1 row, but zoomed) + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/w:object[1]", "dxaOrig", "2561"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/w:object[1]", "dyaOrig", "769"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf138899) +{ + loadAndSave("tdf138899.docx"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + // This was 6, not removed empty temporary paragraph at the end of the section + assertXPath(pXmlDocument, "/w:document/w:body/w:p", 5); + + //tdf#134385: Paragraph property to "add space between paragraphs of the same style" was lost + assertXPath(pXmlDocument, "//w:p[1]/w:pPr/w:contextualSpacing", "val", "false"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf122563) +{ + loadAndSave("tdf122563.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/w:object", 1); + // Size of the embedded OLE spreadsheet was the bad "width:28.35pt;height:28.35pt" + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:object/v:shape", "style", + "width:255.75pt;height:63.75pt;mso-wrap-distance-right:0pt"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf94628) +{ + loadAndReload("tdf94628.docx"); + uno::Reference xPropertySet( + getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference xLevels( + xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProps; + xLevels->getByIndex(0) >>= aProps; // 1st level + + OUString sBulletChar = std::find_if(std::cbegin(aProps), std::cend(aProps), + [](const beans::PropertyValue& rValue) { + return rValue.Name == "BulletChar"; + }) + ->Value.get(); + // Actually for 'BLACK UPPER RIGHT TRIANGLE' is \u25E5 + // But we use Wingdings 3 font here, so code is different + CPPUNIT_ASSERT_EQUAL(OUString(u"\uF07B"), sBulletChar); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf122594, "tdf122594.docx") +{ + // test import/export of ActiveTable (visible sheet) of embedded XLSX OLE objects + uno::Reference xEmbeddedObjectsSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference xObjects(xEmbeddedObjectsSupplier->getEmbeddedObjects(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); + + uno::Reference xSheets; + xObjects->getByIndex(0) >>= xSheets; + + uno::Reference xModel; + xSheets->getPropertyValue("Model") >>= xModel; + uno::Reference xViewDataSupplier(xModel, uno::UNO_QUERY); + + uno::Reference xIndexAccess(xViewDataSupplier->getViewData()); + CPPUNIT_ASSERT_EQUAL(static_cast(1), xIndexAccess->getCount()); + + uno::Sequence aSeq; + sal_Int32 nCheck = 0; + if (xIndexAccess->getByIndex(0) >>= aSeq) + { + sal_Int32 nCount(aSeq.getLength()); + for (sal_Int32 i = 0; i < nCount; ++i) + { + OUString sName(aSeq[i].Name); + if (sName == "ActiveTable") + { + OUString sTabName; + if (aSeq[i].Value >>= sTabName) + { + // Sheet2, not Sheet1 + CPPUNIT_ASSERT_EQUAL(OUString("Munka2"), sTabName); + nCheck++; + } + } + // tdf#122624 column and row viewarea positions + else if (sName == "PositionLeft") + { + sal_Int32 nPosLeft; + aSeq[i].Value >>= nPosLeft; + CPPUNIT_ASSERT_EQUAL(static_cast(1), nPosLeft); + nCheck++; + } + else if (sName == "PositionTop") + { + sal_Int32 nPosTop; + aSeq[i].Value >>= nPosTop; + CPPUNIT_ASSERT_EQUAL(static_cast(1), nPosTop); + nCheck++; + } + } + } + + CPPUNIT_ASSERT_EQUAL(static_cast(3), nCheck); +} + +CPPUNIT_TEST_FIXTURE(Test, testLanguageInGroupShape) +{ + loadAndSave("tdf131922_LanguageInGroupShape.docx"); + // tdf#131922: Check if good language is used in shape group texts + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + assertXPath(pXml, + "/w:document/w:body/w:p[7]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/" + "a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[1]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:lang", + "val", "de-DE"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf116883, "tdf116883.docx") +{ + { + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>1>"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>2>"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>2>1>1>"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>2>2>"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>2>3>"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(6), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>1)"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(7), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>2)"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(8), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>2>1<1)"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(9), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>2.2)"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(10), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1>2.3)"), getProperty(xPara, "ListLabelString")); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf131420) +{ + loadAndSave("tdf131420.docx"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:pPr/w:pBdr[2]"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf80526_word_wrap, "tdf80526_word_wrap.docx") +{ + // tdf#80526: check whether the "wrap" property has been set + // TODO: fix export too + if (mbExported) + return; + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xShape, "TextWordWrap")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf118521_marginsLR, "tdf118521_marginsLR.docx") +{ + // tdf#118521 paragraphs with direct formatting of only some of left, right, or first margins have + // lost the other unset margins coming from paragraph style, getting a bad margin from the default style instead + + uno::Reference xMyStyle(getStyles("ParagraphStyles")->getByName("MyStyle"), + uno::UNO_QUERY); + // from paragraph style - this is what direct formatting should equal + sal_Int32 nMargin = getProperty(xMyStyle, "ParaLeftMargin"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nMargin); + // from direct formatting + CPPUNIT_ASSERT_EQUAL(nMargin, getProperty(getParagraph(1), "ParaLeftMargin")); + + nMargin = getProperty(xMyStyle, "ParaRightMargin"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1900), nMargin); + CPPUNIT_ASSERT_EQUAL(nMargin, getProperty(getParagraph(2), "ParaRightMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(882), + getProperty(getParagraph(2), "ParaFirstLineIndent")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf104797, "tdf104797.docx") +{ + // check moveFrom and moveTo + CPPUNIT_ASSERT_EQUAL(OUString("Will this sentence be duplicated?"), + getParagraph(1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(""), getRun(getParagraph(1), 1)->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(1), 3), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Delete"), + getProperty(getRun(getParagraph(1), 3), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(getRun(getParagraph(1), 3), "IsStart")); + CPPUNIT_ASSERT_EQUAL( + OUString("This is a filler sentence. Will this sentence be duplicated ADDED STUFF?"), + getParagraph(2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(""), getRun(getParagraph(2), 1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("This is a filler sentence."), + getRun(getParagraph(2), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(""), getRun(getParagraph(2), 3)->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(2), 3), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Insert"), + getProperty(getRun(getParagraph(2), 3), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(getRun(getParagraph(2), 3), "IsStart")); + + CPPUNIT_ASSERT_EQUAL(OUString(" "), getRun(getParagraph(2), 4)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(""), getRun(getParagraph(2), 5)->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(2), 6), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Insert"), + getProperty(getRun(getParagraph(2), 6), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString(""), getRun(getParagraph(2), 7)->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(2), 7), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(getRun(getParagraph(2), 7), "IsStart")); + CPPUNIT_ASSERT_EQUAL(OUString("Will this sentence be duplicated"), + getRun(getParagraph(2), 8)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(" ADDED STUFF"), getRun(getParagraph(2), 11)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("?"), getRun(getParagraph(2), 14)->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf145720, "tdf104797.docx") +{ + // check moveFromRangeStart/End and moveToRangeStart/End (to keep tracked text moving) + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (mbExported) + { + // These were 0 (missing move*FromRange* elements) + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:moveFrom/w:moveFromRangeStart", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:moveFromRangeEnd", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:moveTo/w:moveToRangeStart", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:moveToRangeEnd", 1); + + // paired names + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:moveFrom/w:moveFromRangeStart", "name", + "move471382752"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:moveTo/w:moveToRangeStart", "name", + "move471382752"); + + // mandatory authors and dates + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:moveFrom/w:moveFromRangeStart", "author", + u"Tekijä"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:moveTo/w:moveToRangeStart", "author", + u"Tekijä"); + // no date (anonymized change) + // This failed, date was exported as w:date="0-00-00T00:00:00Z", and later "1970-01-01T00:00:00Z" + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p[1]/w:moveFrom/w:moveFromRangeStart", + "date"); + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p[2]/w:moveTo/w:moveToRangeStart", + "date"); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf150166, "tdf150166.docx") +{ + // check moveFromRangeStart/End and moveToRangeStart/End (to keep tracked text moving) + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (mbExported) + { + assertXPath(pXmlDoc, "//w:moveFromRangeStart", 0); + // This was 2 (missing RangeStart elements, but bad unpaired RangeEnds) + assertXPath(pXmlDoc, "//w:moveFromRangeEnd", 0); + + // These were 0 (moveFrom, moveTo and t) + assertXPath(pXmlDoc, "//w:del", 11); + assertXPath(pXmlDoc, "//w:ins", 12); + assertXPath(pXmlDoc, "//w:delText", 7); + + // no more moveFrom/moveTo to avoid of problems with ToC + assertXPath(pXmlDoc, "//w:moveFrom", 0); + assertXPath(pXmlDoc, "//w:moveTo", 0); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf143510, "TC-table-DnD-move.docx") +{ + // check moveFromRangeStart/End and moveToRangeStart/End for tracked table move by drag & drop + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (mbExported) + { + // This was 0 (missing tracked table row deletion/insertion) + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[1]/w:tr/w:trPr/w:del", 2); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[2]/w:tr/w:trPr/w:ins", 2); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf143510_table_from_row, "TC-table-Separate-Move.docx") +{ + // check moveFromRangeStart/End and moveToRangeStart/End for tracked table move by drag & drop + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (mbExported) + { + // This was 0 (missing tracked table row deletion/insertion) + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[1]/w:tr/w:trPr/w:del", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[1]/w:tr[3]/w:trPr/w:del", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[2]/w:tr", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[2]/w:tr/w:trPr/w:ins", 1); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf143510_within_table, "TC-table-rowDND.docx") +{ + // check moveFromRangeStart/End and moveToRangeStart/End for tracked table row move by DnD + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (mbExported) + { + // This was 0 (missing tracked table row deletion/insertion) + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:trPr/w:del", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:trPr/w:ins", 1); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf143510_within_table2, "TC-table-rowDND-front.docx") +{ + // check moveFromRangeStart/End and moveToRangeStart/End for tracked table row move by DnD + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (mbExported) + { + // This was 0 (missing tracked table row deletion/insertion) + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:trPr/w:ins", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:trPr/w:del", 1); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf113608_runAwayNumbering, "tdf113608_runAwayNumbering.docx") +{ + // check that an incorrect numbering style is not applied + // after removing a w:r-less paragraph + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(getParagraph(2), "NumberingStyleName")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf119188_list_margin_in_cell, "tdf119188_list_margin_in_cell.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + + // lists with auto margins in cells: top margin of the first paragraph is zero, + // but not the bottom margin of the last paragraph, also other list items have got + // zero margins. + + CPPUNIT_ASSERT_EQUAL( + static_cast(0), + getProperty(getParagraphOfText(1, xCell->getText()), "ParaTopMargin")); + CPPUNIT_ASSERT_EQUAL( + static_cast(0), + getProperty(getParagraphOfText(1, xCell->getText()), "ParaBottomMargin")); + CPPUNIT_ASSERT_EQUAL( + static_cast(0), + getProperty(getParagraphOfText(2, xCell->getText()), "ParaTopMargin")); + CPPUNIT_ASSERT_EQUAL( + static_cast(0), + getProperty(getParagraphOfText(2, xCell->getText()), "ParaBottomMargin")); + CPPUNIT_ASSERT_EQUAL( + static_cast(0), + getProperty(getParagraphOfText(3, xCell->getText()), "ParaTopMargin")); + CPPUNIT_ASSERT_EQUAL( + static_cast(494), + getProperty(getParagraphOfText(3, xCell->getText()), "ParaBottomMargin")); +} + +CPPUNIT_TEST_FIXTURE(Test, testChart_BorderLine_Style) +{ + loadAndSave("Chart_BorderLine_Style.docx"); + /* DOCX containing Chart with BorderLine Style as Dash Type should get preserved + * inside an XML tag with value "dash", "sysDot, "lgDot", etc. + */ + xmlDocUniquePtr pXmlDoc = parseExport("word/charts/chart1.xml"); + assertXPath(pXmlDoc, + "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:spPr/a:ln/a:prstDash", + "val", "sysDot"); + assertXPath(pXmlDoc, + "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[2]/c:spPr/a:ln/a:prstDash", + "val", "sysDash"); + assertXPath(pXmlDoc, + "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[3]/c:spPr/a:ln/a:prstDash", + "val", "dash"); +} + +CPPUNIT_TEST_FIXTURE(Test, testChart_Plot_BorderLine_Style) +{ + loadAndSave("Chart_Plot_BorderLine_Style.docx"); + /* DOCX containing Chart wall (plot area) and Chart Page with BorderLine Style as Dash Type + * should get preserved inside an XML tag with value "dash", "sysDot, "lgDot", etc. + */ + xmlDocUniquePtr pXmlDoc = parseExport("word/charts/chart1.xml"); + assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:ln/a:prstDash", "val", + "lgDashDot"); + assertXPath(pXmlDoc, "/c:chartSpace/c:spPr/a:ln/a:prstDash", "val", "sysDash"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTrackChangesDeletedEmptyParagraph) +{ + loadAndSave("testTrackChangesDeletedEmptyParagraph.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:rPr/w:del"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTrackChangesEmptyParagraphsInADeletion) +{ + loadAndSave("testTrackChangesEmptyParagraphsInADeletion.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + for (int i = 1; i < 12; ++i) + assertXPath(pXmlDoc, + "/w:document/w:body/w:p[" + OString::number(i) + "]/w:pPr/w:rPr/w:del"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf149708) +{ + loadAndSave("tdf149708.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // keep tracked insertion of a list item + // This was 0 (missing tracked insertion of the paragraph mark) + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:ins"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf149707) +{ + loadAndSave("tdf149711.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:moveFrom"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:moveTo"); + // These were missing + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:moveFrom"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:rPr/w:moveTo"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf70234) +{ + loadAndSave("tdf70234.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // import field with tracked deletion + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:del/w:r[1]/w:fldChar"); + + // export multiple runs of a field with tracked deletion + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:del/w:r", 6); + + // export w:delInstrText + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:del/w:r/w:delInstrText"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf115212) +{ + loadAndSave("tdf115212.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // export field with tracked deletion + assertXPath(pXmlDoc, "//w:p[2]/w:del[1]/w:r[1]/w:fldChar"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf126243) +{ + loadAndSave("tdf120338.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // export change tracking rejection data for tracked paragraph style change + assertXPath(pXmlDoc, "/w:document/w:body/w:p[11]/w:pPr/w:pPrChange/w:pPr/w:pStyle", "val", + "Heading3"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf126245) +{ + loadAndSave("tdf126245.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // export change tracking rejection data for tracked numbering change + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:pPrChange/w:pPr/w:numPr/w:numId", "val", + "1"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf124491) +{ + loadAndSave("tdf124491.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // import format change of empty lines, FIXME: change w:r with w:pPr in export + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/*/w:rPr/w:rPrChange"); + // empty line without format change + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/*/w:rPrChange", 0); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/*/*/w:rPrChange", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf143911) +{ + loadAndSave("tdf126206.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // export format change of text portions + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/w:rPr/w:rPrChange"); + // This was without tracked bold formatting + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/w:rPr/w:rPrChange/w:rPr/w:b"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf105485) +{ + loadAndSave("tdf105485.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // import change tracking of deleted comments + assertXPath(pXmlDoc, "//w:del/w:r/w:commentReference"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf125894) +{ + loadAndSave("tdf125894.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // import change tracking in frames + assertXPath(pXmlDoc, "//w:del", 2); + assertXPath(pXmlDoc, "//w:ins"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf149388) +{ + // see also testTdf132371 + loadAndSave("tdf132271.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // import change tracking in floating tables + // (don't recognize tracked text moving during the import, + // because the text is too short and it's only a single word) + assertXPath(pXmlDoc, "//w:del", 2); + assertXPath(pXmlDoc, "//w:ins", 2); + assertXPath(pXmlDoc, "//w:moveFrom", 0); + assertXPath(pXmlDoc, "//w:moveTo", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf132271) +{ + // see also testTdf149388 + loadAndSave("tdf149388.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // import change tracking in floating tables + if (!mbExported) + { + assertXPath(pXmlDoc, "//w:del", 2); + assertXPath(pXmlDoc, "//w:ins", 2); + assertXPath(pXmlDoc, "//w:moveFrom", 0); + assertXPath(pXmlDoc, "//w:moveTo", 0); + } + else + { + assertXPath(pXmlDoc, "//w:del", 1); + assertXPath(pXmlDoc, "//w:ins", 1); + // tracked text moving recognized during the import + assertXPath(pXmlDoc, "//w:moveFrom", 1); + assertXPath(pXmlDoc, "//w:moveTo", 1); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf149388_fly) +{ + // see also testTdf136667 + loadAndSave("tdf136667.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // import change tracking in floating tables + assertXPath(pXmlDoc, "//w:del", 2); + assertXPath(pXmlDoc, "//w:ins", 4); + assertXPath(pXmlDoc, "//w:moveFrom", 0); + assertXPath(pXmlDoc, "//w:moveTo", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf136667) +{ + // see also testTdf149388_fly + loadAndSave("tdf149388_fly.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // import change tracking in floating tables + if (!mbExported) + { + assertXPath(pXmlDoc, "//w:del", 2); + assertXPath(pXmlDoc, "//w:ins", 4); + assertXPath(pXmlDoc, "//w:moveFrom", 0); + assertXPath(pXmlDoc, "//w:moveTo", 0); + } + else + { + assertXPath(pXmlDoc, "//w:del", 1); + assertXPath(pXmlDoc, "//w:ins", 3); + // tracked text moving recognized during the import + assertXPath(pXmlDoc, "//w:moveFrom", 1); + assertXPath(pXmlDoc, "//w:moveTo", 1); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf136850) +{ + loadAndSave("tdf136850.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // import change tracking in floating tables + assertXPath(pXmlDoc, "//w:del"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128156) +{ + loadAndSave("tdf128156.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // keep tracked insertion of a paragraph + // This was 0 before 350972a8bffc1a74b531e0336954bf54b1356025, + // and 1 later (missing tracked insertion of the paragraph mark) + assertXPath(pXmlDoc, "//w:ins", 2); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf125546) +{ + loadAndSave("tdf125546.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // compress redlines (it was 15) + assertXPath(pXmlDoc, "//w:rPrChange", 2); +} + +CPPUNIT_TEST_FIXTURE(Test, testLabelWidthAndPosition_Left_FirstLineIndent) +{ + loadAndSave("Hau_min_list2.fodt"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // list is LABEL_WIDTH_AND_POSITION with SvxAdjust::Left + // I) LTR + // a) all LTR cases with no number text look good in Word + // 1) negative first line indent on paragraph: + // no list width/indent: this one was 0 previously; this looks good + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:ind", "hanging", "399"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:ind", "end", "0"); + // list width: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:ind", "start", "567"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:ind", "hanging", "966"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:ind", "end", "0"); + // list indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:ind", "start", "567"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:ind", "hanging", "399"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:ind", "end", "0"); + // list width + list indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:ind", "start", "1134"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:ind", "hanging", "966"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:ind", "end", "0"); + // 2) positive first line indent on paragraph: + // no list width/indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:ind", "firstLine", "420"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:ind", "end", "0"); + // list width: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[6]/w:pPr/w:ind", "start", "567"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[6]/w:pPr/w:ind", "hanging", "147"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[6]/w:pPr/w:ind", "end", "0"); + // list indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:ind", "start", "567"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:ind", "firstLine", "420"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:ind", "end", "0"); + // list width + list indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[8]/w:pPr/w:ind", "start", "1134"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[8]/w:pPr/w:ind", "hanging", "147"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[8]/w:pPr/w:ind", "end", "0"); + // b) all LTR cases with number text: the indent looks good but some tabs are wrong + // 1) negative first line indent on paragraph: + // no list width/indent: this one was 0 previously; this looks good + assertXPath(pXmlDoc, "/w:document/w:body/w:p[9]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[9]/w:pPr/w:ind", "hanging", "399"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[9]/w:pPr/w:ind", "end", "0"); + // list width: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[10]/w:pPr/w:ind", "start", "567"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[10]/w:pPr/w:ind", "hanging", "966"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[10]/w:pPr/w:ind", "end", "0"); + // list indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[11]/w:pPr/w:ind", "start", "567"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[11]/w:pPr/w:ind", "hanging", "399"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[11]/w:pPr/w:ind", "end", "0"); + // list width + list indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[12]/w:pPr/w:ind", "start", "1134"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[12]/w:pPr/w:ind", "hanging", "966"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[12]/w:pPr/w:ind", "end", "0"); + // 2) positive first line indent on paragraph: + // no list width/indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[13]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[13]/w:pPr/w:ind", "firstLine", "420"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[13]/w:pPr/w:ind", "end", "0"); + // list width: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[14]/w:pPr/w:ind", "start", "567"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[14]/w:pPr/w:ind", "hanging", "147"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[14]/w:pPr/w:ind", "end", "0"); + // list indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[15]/w:pPr/w:ind", "start", "567"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[15]/w:pPr/w:ind", "firstLine", "420"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[15]/w:pPr/w:ind", "end", "0"); + // list width + list indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[16]/w:pPr/w:ind", "start", "1134"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[16]/w:pPr/w:ind", "hanging", "147"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[16]/w:pPr/w:ind", "end", "0"); + // (w:p[17] is empty) + // I) RTL + // a) only RTL cases with no number text and no width/indent look good in Word + // 1) negative first line indent on paragraph: + // no list width/indent + assertXPath(pXmlDoc, "/w:document/w:body/w:p[18]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[18]/w:pPr/w:ind", "hanging", "399"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[18]/w:pPr/w:ind", "end", "0"); + // 2) positive first line indent on paragraph: + // no list width/indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[22]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[22]/w:pPr/w:ind", "firstLine", "420"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[22]/w:pPr/w:ind", "end", "0"); + // b) RTL cases with number text: the indent looks good but some tabs are wrong + // 1) negative first line indent on paragraph: + // no list width/indent + assertXPath(pXmlDoc, "/w:document/w:body/w:p[26]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[26]/w:pPr/w:ind", "hanging", "399"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[26]/w:pPr/w:ind", "end", "0"); + // 2) positive first line indent on paragraph: + // no list width/indent: + assertXPath(pXmlDoc, "/w:document/w:body/w:p[30]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[30]/w:pPr/w:ind", "firstLine", "420"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[30]/w:pPr/w:ind", "end", "0"); + // TODO: other cases +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf124604) +{ + loadAndSave("tdf124604.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // If the numbering comes from a base style, indentation of the base style has also priority. + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:ind", "start", "0"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf95374) +{ + loadAndSave("tdf95374.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Numbering disabled by non-existent numId=0, disabling also inheritance of indentation of parent styles + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:ind", "hanging", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:ind", "start", "1136"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf108493) +{ + loadAndSave("tdf108493.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // set in the paragraph + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:ind", "start", "709"); + // set in the numbering style (this was 0) + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:ind", "hanging", "709"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf118691, "tdf118691.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + // Text "Before" stays in the first cell, not removed before the table because of + // bad handling of + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Before\nAfter"), xCell->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf64264, "tdf64264.docx") +{ + // DOCX table rows with tblHeader setting mustn't modify the count of the + // repeated table header rows, when there is rows before them without tblHeader settings. + xmlDocUniquePtr pDump = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + + // table starts on page 1 and finished on page 2 + // and it has got only a single repeating header line + assertXPath(pDump, "/root/page[2]/body/tab", 1); + assertXPath(pDump, "/root/page[2]/body/tab/row", 47); + CPPUNIT_ASSERT_EQUAL(OUString("Repeating Table Header"), + parseDump("/root/page[2]/body/tab/row[1]/cell[1]/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), + parseDump("/root/page[2]/body/tab/row[2]/cell[1]/txt/text()")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf58944RepeatingTableHeader, "tdf58944-repeating-table-header.docx") +{ + // DOCX tables with more than 10 repeating header lines imported without repeating header lines + // as a workaround for MSO's limitation of header line repetition + xmlDocUniquePtr pDump = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + + // table starts on page 1 and finished on page 2 + // instead of showing only a part of it on page 2 + assertXPath(pDump, "/root/page[1]/body/tab", 1); + assertXPath(pDump, "/root/page[1]/body/tab/row", 11); + CPPUNIT_ASSERT_EQUAL(OUString("Test1"), + parseDump("/root/page[2]/body/tab/row[1]/cell[1]/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Test2"), + parseDump("/root/page[2]/body/tab/row[2]/cell[1]/txt/text()")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf81100) +{ + loadAndSave("tdf81100.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/styles.xml"); + CPPUNIT_ASSERT(pXmlDoc); + // keep "repeat table header" setting of table styles + assertXPath(pXmlDoc, "/w:styles/w:style/w:tblStylePr/w:trPr/w:tblHeader", 4); + + xmlDocUniquePtr pDump = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(3, getPages()); + + // table starts on page 1 and finished on page 2 + // and it has got only a single repeating header line + assertXPath(pDump, "/root/page[2]/body/tab[1]", 1); + assertXPath(pDump, "/root/page[2]/body/tab[1]/row", 2); + assertXPath(pDump, "/root/page[3]/body/tab", 1); + if (!mbExported) // TODO export tblHeader=false + assertXPath(pDump, "/root/page[3]/body/tab/row", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf88496) +{ + loadAndReload("tdf88496.docx"); + // Switch off repeating header, there is no place for it. + // Now there are only 3 pages with complete table content + // instead of a 51-page long table only with header. + CPPUNIT_ASSERT_EQUAL(3, getPages()); + // (this appears to have the correct result now?) + // FIXME: this actually has 3 pages but SwWrtShell::SttPg() puts the cursor + // into the single SwTextFrame in the follow-flow-row at the top of the + // table but that SwTextFrame 1105 should not exist and the cursor ends up + // at the end of its master frame 848 instead; the problem is somewhere in + // SwTextFrame::FormatAdjust() which first determines nNew = 1 but then + // grows this frame anyway so that the follow is empty, but nothing + // invalidates 1105 again. +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf77417) +{ + loadAndReload("tdf77417.docx"); + // MSO 2010 compatibility mode: terminating white spaces are ignored in tables. + // This was 3 pages with the first invisible blank page. + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf130494) +{ + loadAndSave("tdf130494.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:pPr/w:rPr/w:highlight", "val", + "yellow"); + // keep direct formatting of table cell paragraph with removed highlighting + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r/w:rPr/w:highlight", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf130690) +{ + loadAndSave("tdf130690.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:pPr/w:rPr/w:highlight", "val", + "yellow"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[1]/w:rPr/w:highlight", 1); + // keep direct formatting of table cell paragraph with removed highlighting + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[2]/w:rPr/w:highlight", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf105215) +{ + loadAndSave("tdf105215.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:pPr/w:rPr/w:rFonts", "ascii", + "Linux Libertine G"); + + // These were "Linux Libertine G" + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r/w:rPr", 5); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[1]/w:rPr/w:rFonts", "ascii", + "Lohit Devanagari"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[2]/w:rPr/w:rFonts", "ascii", + "Lohit Devanagari"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[3]/w:rPr/w:rFonts", "ascii", + "Lohit Devanagari"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[4]/w:rPr/w:rFonts", "ascii", + "Lohit Devanagari"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[5]/w:rPr/w:rFonts", "ascii", + "Lohit Devanagari"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf135187) +{ + loadAndSave("tdf135187.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[1]/w:p/w:pPr/w:rPr/w:b", 0); + // FIXME: remove duplicate + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc[1]/w:p/w:pPr/w:rPr/w:b", 2); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc[1]/w:p/w:pPr/w:rPr/w:b", 2); + + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[1]/w:p/w:r[1]/w:rPr/w:b", 1); + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[1]/w:p/w:r[1]/w:rPr/w:b", + "val"); + // This was 0 + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc[1]/w:p/w:r[1]/w:rPr/w:b", 1); + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc[1]/w:p/w:r[1]/w:rPr/w:b", + "val"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc[1]/w:p/w:r[1]/w:rPr/w:b", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc[1]/w:p/w:r[1]/w:rPr/w:b", "val", + "false"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf136617) +{ + loadAndSave("tdf136617.docx"); + + // This was 2 + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[2]/w:p[2]/w:pPr/w:rPr/w:sz", "val", + "16"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121597TrackedDeletionOfMultipleParagraphs) +{ + loadAndSave("tdf121597.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + // check paragraphs with removed paragraph mark + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:rPr/w:del"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:del"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:rPr/w:del"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:rPr/w:del"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:rPr/w:del"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[10]/w:pPr/w:rPr/w:del"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf141660) +{ + loadAndSave("tdf141660.docx"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[2]/w:footnoteReference", "id", "2"); + // w:del is imported correctly with its footnote + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:del[2]/w:r/w:footnoteReference", "id", "3"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:r/w:footnoteReference", "id", "4"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf133643) +{ + loadAndSave("tdf133643.doc"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[1]/w:fldChar", "fldCharType", + "begin"); + assertXPath( + pXmlDoc, + "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[1]/w:fldChar/w:ffData/w:ddList/w:listEntry[1]", + "val", "Bourgoin-Jallieu, "); + assertXPath( + pXmlDoc, + "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[1]/w:fldChar/w:ffData/w:ddList/w:listEntry[2]", + "val", "Fontaine, "); + + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[2]/w:instrText", + " FORMDROPDOWN "); + + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[3]/w:fldChar", "fldCharType", + "separate"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[5]/w:fldChar", "fldCharType", + "end"); + + // Without the fix in place, this w:r wouldn't exist + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r[6]/w:t", + "le 22 fevrier 2013"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123189_tableBackground, "table-black_fill.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), + uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + uno::Reference xCell = xTable->getCellByName("A1"); + CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, getProperty(xCell, "BackColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf116084, "tdf116084.docx") +{ + // tracked line is not a single text portion: w:del is recognized within w:ins + CPPUNIT_ASSERT_EQUAL(OUString(""), getRun(getParagraph(1), 1)->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(1), 1), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("There "), getRun(getParagraph(1), 2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(""), getRun(getParagraph(1), 4)->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(1), 4), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("must"), getRun(getParagraph(1), 5)->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf116084_anonymized) +{ + loadAndSave("tdf116084.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // w:del in w:ins is exported correctly + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:del/w:r/w:delText", "must"); + + // no date (anonymized changes) + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins[@date]", 0); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:del[@w:date]", 0); + + // w:ins and w:del have w:author attributes, and the same + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:del[@w:author]", 1); + OUString sAuthor = getXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins[2]", "author"); + OUString sAuthor2 = getXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:del", "author"); + CPPUNIT_ASSERT_EQUAL(sAuthor, sAuthor2); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf121176, "tdf121176.docx") +{ + // w:del is imported correctly when it is in a same size w:ins + CPPUNIT_ASSERT_EQUAL(OUString(""), getRun(getParagraph(1), 1)->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(1), 1), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("must"), getRun(getParagraph(1), 2)->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121176_anonymized) +{ + loadAndSave("tdf121176.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // w:del in w:ins is exported correctly + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:del/w:r/w:delText", "must"); + + // no date (anonymized changes) + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p/w:ins", "date"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:del[@w:date]", 0); + + // w:ins and w:del have w:author attributes, and the same + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:del[@w:author]", 1); + OUString sAuthor = getXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins", "author"); + OUString sAuthor2 = getXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:del", "author"); + CPPUNIT_ASSERT_EQUAL(sAuthor, sAuthor2); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128913) +{ + loadAndSave("tdf128913.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + // w:ins and w:del are imported correctly, if they contain only inline images + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:r/w:drawing/wp:inline/a:graphic"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:del/w:r/w:drawing/wp:inline/a:graphic"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf142700) +{ + loadAndSave("tdf142700.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + // w:ins and w:del are imported correctly, if they contain only images anchored to character + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:r/w:drawing/wp:anchor/a:graphic"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:del/w:r/w:drawing/wp:anchor/a:graphic"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf142387) +{ + loadAndSave("tdf142387.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + // w:del in w:ins is exported correctly (only w:del was exported) + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:ins/w:del/w:r/w:delText", "inserts "); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf147892) +{ + loadAndSave("tdf147892.fodt"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // w:del in w:ins is exported correctly + // (both w:del and w:ins were exported for para marker) + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:rPr/w:del", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:rPr/w:ins", 0); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123054, "tdf123054.docx") +{ + CPPUNIT_ASSERT_EQUAL(OUString("No Spacing"), + getProperty(getParagraph(20), "ParaStyleName")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf67207_MERGEFIELD_DATABASE, "tdf67207.docx") +{ + // database fields use the database "database" and its table "Sheet1" + uno::Reference xTextField + = getProperty>(getRun(getParagraph(2), 2), "TextField"); + CPPUNIT_ASSERT(xTextField.is()); + uno::Reference xServiceInfo(xTextField, uno::UNO_QUERY_THROW); + uno::Reference xDependent(xTextField, uno::UNO_QUERY_THROW); + + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.Database")); + OUString sValue; + xTextField->getPropertyValue("Content") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString::fromUtf8(""), sValue); + + uno::Reference xFiledMaster = xDependent->getTextFieldMaster(); + uno::Reference xFiledMasterServiceInfo(xFiledMaster, uno::UNO_QUERY_THROW); + + CPPUNIT_ASSERT( + xFiledMasterServiceInfo->supportsService("com.sun.star.text.fieldmaster.Database")); + + // Defined properties: DataBaseName, Name, DataTableName, DataColumnName, DependentTextFields, DataCommandType, InstanceName, DataBaseURL + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("DataBaseName") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("database"), sValue); + sal_Int32 nCommandType; + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("DataCommandType") >>= nCommandType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nCommandType); // css::sdb::CommandType::TABLE + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("DataTableName") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("Sheet1"), sValue); + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("DataColumnName") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("c1"), sValue); + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("InstanceName") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.text.fieldmaster.DataBase.database.Sheet1.c1"), + sValue); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf101122_noFillForCustomShape) +{ + loadAndSave("tdf101122_noFillForCustomShape.odt"); + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // tdf#101122 check whether the "F" (noFill) option has been exported to docx + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/" + "a:graphic/a:graphicData/wps:wsp/wps:spPr/a:custGeom/a:pathLst/a:path", + "fill", "none"); + assertXPathNoAttribute( + pXmlDoc, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/" + "a:graphicData/wps:wsp/wps:spPr/a:custGeom/a:pathLst/a:path", + "fill"); +} +// The (tdf124678_no_leading_paragraph.odt, tdf124678_with_leading_paragraph.odt) documents are the same, +// except: +// - tdf124678_no_leading_paragraph.odt doesn't contain leading empty paragraph +// before the first section +// +CPPUNIT_TEST_FIXTURE(Test, testTdf124678_case1) +{ + loadAndReload("tdf124678_no_leading_paragraph.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("First page header text", OUString(""), + parseDump("/root/page[1]/header/txt")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Second page header text", OUString("HEADER"), + parseDump("/root/page[2]/header/txt")); +} + +// The (tdf124678_no_leading_paragraph.odt, tdf124678_with_leading_paragraph.odt) documents are the same, +// except: +// - tdf124678_no_leading_paragraph.odt doesn't contain leading empty paragraph +// before the first section +// +CPPUNIT_TEST_FIXTURE(Test, testTdf124678_case2) +{ + loadAndReload("tdf124678_with_leading_paragraph.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("First page header text", OUString(""), + parseDump("/root/page[1]/header/txt")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Second page header text", OUString("HEADER"), + parseDump("/root/page[2]/header/txt")); +} + +static bool lcl_nearEqual(const sal_Int32 nNumber1, const sal_Int32 nNumber2, + sal_Int32 nMaxDiff = 5) +{ + return std::abs(nNumber1 - nNumber2) < nMaxDiff; +} + +DECLARE_OOXMLEXPORT_TEST(testTdf119952_negativeMargins, "tdf119952_negativeMargins.docx") +{ + // With negative margins (in MS Word) one can set up header (or footer) that overlaps with the body. + // LibreOffice unable to display that, so when importing negative margins, + // the header (or footer) converted to a flyframe, anchored to the header.. + // that can overlap with the body, and will appear like in Word. + // This conversion modifies the document [i.e. replacing header text with a textbox...] + // but its DOCX export looks the same, as the original document in Word, too. + xmlDocUniquePtr pDump = parseLayoutDump(); + + //Check layout positions / sizes + sal_Int32 nLeftHead = getXPath(pDump, "//page[1]/header/infos/bounds", "left").toInt32(); + sal_Int32 nLeftBody = getXPath(pDump, "//page[1]/body/infos/bounds", "left").toInt32(); + sal_Int32 nLeftFoot = getXPath(pDump, "//page[1]/footer/infos/bounds", "left").toInt32(); + sal_Int32 nLeftHFly + = getXPath(pDump, "//page[1]/header/txt/anchored/fly/infos/bounds", "left").toInt32(); + sal_Int32 nLeftFFly + = getXPath(pDump, "//page[1]/footer/txt/anchored/fly/infos/bounds", "left").toInt32(); + + sal_Int32 nTopHead = getXPath(pDump, "//page[1]/header/infos/bounds", "top").toInt32(); + sal_Int32 nTopBody = getXPath(pDump, "//page[1]/body/infos/bounds", "top").toInt32(); + sal_Int32 nTopFoot = getXPath(pDump, "//page[1]/footer/infos/bounds", "top").toInt32(); + sal_Int32 nTopHFly + = getXPath(pDump, "//page[1]/header/txt/anchored/fly/infos/bounds", "top").toInt32(); + sal_Int32 nTopFFly + = getXPath(pDump, "//page[1]/footer/txt/anchored/fly/infos/bounds", "top").toInt32(); + + sal_Int32 nHeightHead = getXPath(pDump, "//page[1]/header/infos/bounds", "height").toInt32(); + sal_Int32 nHeightBody = getXPath(pDump, "//page[1]/body/infos/bounds", "height").toInt32(); + sal_Int32 nHeightFoot = getXPath(pDump, "//page[1]/footer/infos/bounds", "height").toInt32(); + sal_Int32 nHeightHFly + = getXPath(pDump, "//page[1]/header/txt/anchored/fly/infos/bounds", "height").toInt32(); + sal_Int32 nHeightFFly + = getXPath(pDump, "//page[1]/footer/txt/anchored/fly/infos/bounds", "height").toInt32(); + sal_Int32 nHeightHFlyBound + = getXPath(pDump, "//page[1]/header/infos/prtBounds", "height").toInt32(); + sal_Int32 nHeightFFlyBound + = getXPath(pDump, "//page[1]/footer/infos/prtBounds", "height").toInt32(); + + CPPUNIT_ASSERT(lcl_nearEqual(nLeftHead, nLeftBody)); + CPPUNIT_ASSERT(lcl_nearEqual(nLeftHead, nLeftFoot)); + CPPUNIT_ASSERT(lcl_nearEqual(nLeftHead, nLeftHFly)); + CPPUNIT_ASSERT(lcl_nearEqual(nLeftHead, nLeftFFly)); + + CPPUNIT_ASSERT(lcl_nearEqual(nTopHead, 851)); + CPPUNIT_ASSERT(lcl_nearEqual(nTopBody, 1418)); + CPPUNIT_ASSERT(lcl_nearEqual(nTopFoot, 15875)); + CPPUNIT_ASSERT(lcl_nearEqual(nTopHFly, 851)); + + // this seems to be an import bug + if (!mbExported) + CPPUNIT_ASSERT(lcl_nearEqual(nTopFFly, 14403)); + + CPPUNIT_ASSERT(lcl_nearEqual(nHeightHead, 567)); + CPPUNIT_ASSERT(lcl_nearEqual(nHeightBody, 14457)); + CPPUNIT_ASSERT(lcl_nearEqual(nHeightFoot, 680)); + CPPUNIT_ASSERT(lcl_nearEqual(nHeightHFly, 2152)); + CPPUNIT_ASSERT(lcl_nearEqual(nHeightFFly, 2152)); + + // after export these heights increase to like 567. + // not sure if it is another import, or export bug... or just the result of the modified document + if (!mbExported) + { + CPPUNIT_ASSERT(lcl_nearEqual(nHeightHFlyBound, 57)); + CPPUNIT_ASSERT(lcl_nearEqual(nHeightFFlyBound, 57)); + } + + //Check text of header/ footer + CPPUNIT_ASSERT_EQUAL( + OUString("f1"), + getXPath(pDump, "//page[1]/header/txt/anchored/fly/txt[1]/Text", "Portion")); + CPPUNIT_ASSERT_EQUAL( + OUString(" f8"), + getXPath(pDump, "//page[1]/header/txt/anchored/fly/txt[8]/Text", "Portion")); + CPPUNIT_ASSERT_EQUAL( + OUString(" f8"), + getXPath(pDump, "//page[1]/footer/txt/anchored/fly/txt[1]/Text", "Portion")); + CPPUNIT_ASSERT_EQUAL( + OUString("f1"), + getXPath(pDump, "//page[1]/footer/txt/anchored/fly/txt[8]/Text", "Portion")); + + CPPUNIT_ASSERT_EQUAL( + OUString("p1"), + getXPath(pDump, "//page[2]/header/txt/anchored/fly/txt[1]/Text", "Portion")); + CPPUNIT_ASSERT_EQUAL( + OUString("p1"), + getXPath(pDump, "//page[2]/footer/txt/anchored/fly/txt[1]/Text", "Portion")); + + CPPUNIT_ASSERT_EQUAL( + OUString(" aaaa"), + getXPath(pDump, "//page[3]/header/txt/anchored/fly/txt[1]/Text", "Portion")); + CPPUNIT_ASSERT_EQUAL( + OUString(" eeee"), + getXPath(pDump, "//page[3]/header/txt/anchored/fly/txt[5]/Text", "Portion")); + + CPPUNIT_ASSERT_EQUAL(OUString("f1 f2 f3 f4 f5 f6 " + " f7 f8"), + parseDump("/root/page[1]/header/txt/anchored/fly")); + CPPUNIT_ASSERT_EQUAL(OUString(" f8 f7 f6 f5 " + " f4 f3 f2f1"), + parseDump("/root/page[1]/footer/txt/anchored/fly")); + CPPUNIT_ASSERT_EQUAL(OUString("p1"), parseDump("/root/page[2]/header/txt/anchored/fly")); + CPPUNIT_ASSERT_EQUAL(OUString("p1"), parseDump("/root/page[2]/footer/txt/anchored/fly")); + CPPUNIT_ASSERT_EQUAL(OUString(" aaaa bbbb cccc dddd eeee"), + parseDump("/root/page[3]/header/txt/anchored/fly")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf143384_tableInFoot_negativeMargins, + "tdf143384_tableInFoot_negativeMargins.docx") +{ + // There should be no crash during loading of the document + // so, let's check just how much pages we have + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx new file mode 100644 index 000000000..2e2b4b754 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx @@ -0,0 +1,1294 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {} +}; + +// TODO: the re-import doesn't work just yet, but that isn't a regression... +DECLARE_SW_EXPORT_TEST(testFlyInFly, "ooo39250-1-min.rtf", nullptr, Test) +{ + // check that anchor of text frame is in other text frame + uno::Reference const xAnchored(getShape(3), uno::UNO_QUERY); + CPPUNIT_ASSERT(xAnchored.is()); + CPPUNIT_ASSERT_EQUAL(OUString("Frame1")/*generated name*/, uno::Reference(xAnchored, uno::UNO_QUERY_THROW)->getName()); + uno::Reference const xAnchorText(xAnchored->getAnchor()->getText()); + uno::Reference const xAnchorFrame(xAnchorText, uno::UNO_QUERY); + CPPUNIT_ASSERT(xAnchorFrame.is()); + CPPUNIT_ASSERT_EQUAL(OUString("Frame3"), uno::Reference(xAnchorFrame, uno::UNO_QUERY_THROW)->getName()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf125778_lostPageBreakTOX, "tdf125778_lostPageBreakTOX.docx") +{ + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 3, getPages() ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf126994_lostPageBreak, "tdf126994_lostPageBreak.docx") +{ + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 3, getPages() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121374_sectionHF) +{ + loadAndReload("tdf121374_sectionHF.odt"); + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + uno::Reference xFooterText = getProperty< uno::Reference >(xPageStyle, "FooterText"); + CPPUNIT_ASSERT_EQUAL( OUString("footer"), xFooterText->getString() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 6, getParagraphs() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 6, getPages() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121374_sectionHF2) +{ + loadAndReload("tdf121374_sectionHF2.doc"); + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + uno::Reference xHeaderText = getProperty< uno::Reference >(xPageStyle, "HeaderText"); + CPPUNIT_ASSERT( xHeaderText->getString().startsWith("virkamatka-anomus") ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121666_lostPage) +{ + loadAndSave("tdf121666_lostPage.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[2]/w:br", "type", "page"); + // The second page break is exported too. + // Before this fix, if a node had both section break and page break, then only the section break was exported. + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/w:br", "type", "page"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:sectPr/w:type", "val", "nextPage"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf140182_extraPagebreak, "tdf140182_extraPagebreak.docx") +{ + // Table, page break, section break should be only 2 pages + // 2 breaks would normally results in 3 pages, but page break + section break is a special case + // that is handled so to break only 1 page that result only 2 pages. + // Because of the table, a hack (m_bDummyParaAddedForTableInSection) is set for the entire section, + // that canceled the page break + section break special case handling, resulting 3 pages. + // The accompanying fix eliminates this cancellation. + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121659_loseColumnBrNextToShape) +{ + loadAndSave("tdf121659_loseColumnBrNextToShape.docx"); + // The third paragraph contains a manual column break and a shape. + // The column break was moved into the shape during the first import + // (messing also the shape position), and eliminated during the second import, + // losing the 2-column text layout. As a workaround, split the paragraph + // moving the column break into the fourth paragraph instead of losing it. + reload("Office Open XML Text", "tdf121659_loseColumnBrNextToShape.docx"); + bool bBreakOnPara3 = getProperty(getParagraph(3), "BreakType") == style::BreakType_COLUMN_BEFORE; + bool bBreakOnPara4 = getProperty(getParagraph(4), "BreakType") == style::BreakType_COLUMN_BEFORE; + CPPUNIT_ASSERT(bBreakOnPara3 || bBreakOnPara4); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf95848, "tdf95848.docx") +{ + OUString listId; + OUString listStyle; + { + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle); + CPPUNIT_ASSERT(listStyle.startsWith("WWNum")); + CPPUNIT_ASSERT(xPara->getPropertyValue("ListId") >>= listId); + CPPUNIT_ASSERT_EQUAL(OUString("1.1.1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(listStyle, getProperty(xPara, "NumberingStyleName")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + CPPUNIT_ASSERT_EQUAL(OUString("1.1.2"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + // different numbering style + OUString listStyle3; + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle3); + CPPUNIT_ASSERT(listStyle3.startsWith("WWNum")); + CPPUNIT_ASSERT(listStyle3 != listStyle); + // but same list + CPPUNIT_ASSERT_EQUAL(OUString("1.1.3"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf95848_2, "tdf95848_2.docx") +{ + OUString listId; + OUString listStyle; + { + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle); + CPPUNIT_ASSERT(listStyle.startsWith("WWNum")); + CPPUNIT_ASSERT(xPara->getPropertyValue("ListId") >>= listId); + CPPUNIT_ASSERT_EQUAL(OUString("1)"), getProperty(xPara, "ListLabelString")); + // check indent of list style + auto xLevels = getProperty>(xPara, "NumberingRules"); + uno::Sequence aLevel; + xLevels->getByIndex(0) >>= aLevel; // top level + sal_Int32 nIndent = std::find_if(std::cbegin(aLevel), std::cend(aLevel), [](const beans::PropertyValue& rValue) { return rValue.Name == "FirstLineIndent"; })->Value.get(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-635), nIndent); + } + { + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xPara, "NumberingLevel")); + // different numbering style + OUString listStyle2; + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle2); + CPPUNIT_ASSERT(listStyle2.startsWith("WWNum")); + CPPUNIT_ASSERT(listStyle2 != listStyle); + // but same list + CPPUNIT_ASSERT_EQUAL(OUString("2)"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + // check indent of list style - override + auto xLevels = getProperty>(xPara, "NumberingRules"); + uno::Sequence aLevel; + xLevels->getByIndex(0) >>= aLevel; // top level + sal_Int32 nIndent = std::find_if(std::cbegin(aLevel), std::cend(aLevel), [](const beans::PropertyValue& rValue) { return rValue.Name == "FirstLineIndent"; })->Value.get(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(9366), nIndent); + } + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xPara, "NumberingLevel")); + // different numbering style + OUString listStyle3; + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle3); + CPPUNIT_ASSERT(listStyle3.startsWith("WWNum")); + CPPUNIT_ASSERT(listStyle3 != listStyle); + // and different list + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT(listId != getProperty(xPara, "ListId")); + } + { + // continue the first list + uno::Reference xPara(getParagraph(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(listStyle, getProperty(xPara, "NumberingStyleName")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + CPPUNIT_ASSERT_EQUAL(OUString("3)"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(listStyle, getProperty(xPara, "NumberingStyleName")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + CPPUNIT_ASSERT_EQUAL(OUString("4)"), getProperty(xPara, "ListLabelString")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf108496, "tdf108496.docx") +{ + OUString listId; + OUString listStyle; + // Lists with override + { + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle); + CPPUNIT_ASSERT(listStyle.startsWith("WWNum")); + CPPUNIT_ASSERT(xPara->getPropertyValue("ListId") >>= listId); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(listStyle, getProperty(xPara, "NumberingStyleName")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + CPPUNIT_ASSERT_EQUAL(OUString("2"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(5), uno::UNO_QUERY); + // different numbering style + OUString listStyle2; + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle2); + CPPUNIT_ASSERT(listStyle2.startsWith("WWNum")); + CPPUNIT_ASSERT(listStyle2 != listStyle); + // restarted numeration due to override + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + } + { + uno::Reference xPara(getParagraph(6), uno::UNO_QUERY); + // different numbering style + OUString listStyle2; + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle2); + CPPUNIT_ASSERT(listStyle2.startsWith("WWNum")); + // restarted numeration due to override + CPPUNIT_ASSERT_EQUAL(OUString("2"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + } + + // Lists without override + { + uno::Reference xPara(getParagraph(8), uno::UNO_QUERY); + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle); + CPPUNIT_ASSERT(listStyle.startsWith("WWNum")); + CPPUNIT_ASSERT(xPara->getPropertyValue("ListId") >>= listId); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(9), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(listStyle, getProperty(xPara, "NumberingStyleName")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + CPPUNIT_ASSERT_EQUAL(OUString("2"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(11), uno::UNO_QUERY); + // different numbering style + OUString listStyle2; + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle2); + CPPUNIT_ASSERT(listStyle2.startsWith("WWNum")); + CPPUNIT_ASSERT(listStyle2 != listStyle); + // numeration is continued + CPPUNIT_ASSERT_EQUAL(OUString("3"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + } + { + uno::Reference xPara(getParagraph(12), uno::UNO_QUERY); + // different numbering style + OUString listStyle2; + CPPUNIT_ASSERT(xPara->getPropertyValue("NumberingStyleName") >>= listStyle2); + CPPUNIT_ASSERT(listStyle2.startsWith("WWNum")); + // numeration is continued + CPPUNIT_ASSERT_EQUAL(OUString("4"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(listId, getProperty(xPara, "ListId")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf126723, "tdf126723.docx") +{ + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(getParagraph(2), "ParaLeftMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testendingSectionProps, "endingSectionProps.docx") +{ + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + uno::Reference xHeaderText = getProperty< uno::Reference >(xPageStyle, "HeaderText"); + CPPUNIT_ASSERT_EQUAL( OUString("General header"), xHeaderText->getString()); + + uno::Reference xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + uno::Reference xSect(xSections->getByIndex(0), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("# of paragraphs", 2, getParagraphs()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section is RightToLeft", text::WritingMode2::RL_TB, getProperty(xSect, "WritingMode")); + //regression: tdf124637 + //CPPUNIT_ASSERT_EQUAL_MESSAGE("Section Left Margin", sal_Int32(2540), getProperty(xSect, "SectionLeftMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTbrlTextbox, "tbrl-textbox.docx") +{ + uno::Reference xPropertySet(getShape(1), uno::UNO_QUERY); + comphelper::SequenceAsHashMap aGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry")); + // Without the accompanying fix in place, this test would have failed with 'Expected: -90; + // Actual: 0', i.e. tbRl writing direction was imported as lrTb. + CPPUNIT_ASSERT_EQUAL(static_cast(-90), + aGeometry["TextPreRotateAngle"].get()); +} + +DECLARE_OOXMLEXPORT_TEST(testBtlrShape, "btlr-textbox.docx") +{ + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + const SwFrameFormats& rFormats = *pDoc->GetSpzFrameFormats(); + CPPUNIT_ASSERT_EQUAL(static_cast(2), rFormats.size()); + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(RES_DRAWFRMFMT), rFormats[0]->Which()); + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(RES_FLYFRMFMT), rFormats[1]->Which()); + // Without the accompanying fix in place, this test would have failed with 'Expected: 5, Actual: + // 4', i.e. the textbox inherited its writing direction instead of having an explicit btlr + // value. + CPPUNIT_ASSERT_EQUAL(SvxFrameDirection::Vertical_LR_BT, + rFormats[1]->GetAttrSet().GetFrameDir().GetValue()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127316_autoEscapement) +{ + loadAndReload("tdf127316_autoEscapement.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // This should be roughly .8*35% of the ORIGINAL(non-reduced) size. However, during export the + // proportional height has to be changed into direct formatting, which then changes the relative percent. + // In this case, a 24pt font, proportional at 65% becomes roughly a 16pt font. + // Thus an escapement of 28% (6.72pt) becomes roughly 42% for the 16pt font. + uno::Reference xPara = getParagraph(1); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1), "CharEscapement"), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(42.f, getProperty(getRun(xPara, 2), "CharEscapement"), 1); + + // Subscripts are different. Automatic escapement SHOULD BE limited by the font bottom line(?) + // and so the calculations ought to be different. There is room for a lot of export improvement here. + xPara.set(getParagraph(2)); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1, "Normal text "), "CharEscapement"), 0); + // Negative escapements (subscripts) were decreasing by 1% every round-trip due to bad manual rounding. + // This should be roughly .2*35% of the ORIGINAL (non-reduced) size. However, during export the + // proportional height has to be changed into direct formatting, which then changes the relative percent. + // In this case, a 24pt font, proportional at 65% becomes roughly a 16pt font. + // Thus an escapement of 7% (1.68pt) becomes roughly 10.5% for the 16pt font. + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Subscript", -10.f, getProperty(getRun(xPara, 2), "CharEscapement"), 1); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf99602_subscript_charStyleSize, "tdf99602_subscript_charStyleSize.docx") +{ + uno::Reference xPara = getParagraph(1); + // The word "Base" should not be subscripted. + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1, "Base"), "CharEscapement"), 0); + // The word "Subscript" should be 48pt, subscripted by 25% (12pt). + CPPUNIT_ASSERT_DOUBLES_EQUAL( -25.f, getProperty(getRun(xPara, 2, "Subscript"), "CharEscapement"), 0); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf99602_charStyleSubscript, "tdf99602_charStyleSubscript.docx") +{ + uno::Reference xPara = getParagraph(1); + // The word "Base" should not be subscripted. + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1, "Base"), "CharEscapement"), 0); + // The word "Subscript" should be 48pt, automatically subscripted, and automatic proportioned. + CPPUNIT_ASSERT_EQUAL( sal_Int16(DFLT_ESC_AUTO_SUB), getProperty(getRun(xPara, 2, "Subscript"), "CharEscapement") ); + CPPUNIT_ASSERT_EQUAL( sal_Int16(DFLT_ESC_PROP), getProperty(getRun(xPara, 2), "CharEscapementHeight") ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf99602_charStyleSubscript2) +{ + loadAndReload("tdf99602_charStyleSubscript2.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // *_In styles_*, don't let the proportionality/escapement affect the fontsize - otherwise it starts doubling up, + // so instead just throw away the values and use the default settings instead - meaning fontsize is unaffected. + // subscript custom: Proportional size is 80%, lower by 25%. + uno::Reference xStyle(getStyles("CharacterStyles")->getByName("subscript custom"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("CharStyle has 12pt font size", 12.f, getProperty(xStyle, "CharHeight")); + // subscript larger font: Proportional size is 80%, lowered by DFLT_ESC_AUTO_SUB + xStyle.set(getStyles("CharacterStyles")->getByName("subscript larger font"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Auto CharStyle has 12pt font size", 12.f, getProperty(xStyle, "CharHeight")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf124637_sectionMargin, "tdf124637_sectionMargin.docx") +{ + uno::Reference xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + // sections 0 and 1 must be related to footnotes... + uno::Reference xSect(xSections->getByIndex(2), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section Left Margin", sal_Int32(0), getProperty(xSect, "SectionLeftMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123636_newlinePageBreak, "tdf123636_newlinePageBreak.docx") +{ + //MS Compatibility flag: SplitPgBreakAndParaMark + //special case: split first empty paragraph in a section. + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 2, getParagraphs() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 2, getPages() ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123636_newlinePageBreak2, "tdf123636_newlinePageBreak2.docx") +{ + //WITHOUT SplitPgBreakAndParaMark: a following anchored shape should force a page break + //CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 2, getParagraphs() ); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(getParagraph(2, ""), "NumberingStyleName")); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 2, getPages() ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123636_newlinePageBreak3, "tdf123636_newlinePageBreak3.docx") +{ + //MS Compatibility flag: SplitPgBreakAndParaMark + //proof case: split any non-empty paragraphs, not just the first paragraph of a section. + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 5, getParagraphs() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 2, getPages() ); + + xmlDocUniquePtr pDump = parseLayoutDump(); + assertXPath(pDump, "/root/page[1]/body/txt[3]/Text[1]", "Portion", "Last line on page 1"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123636_newlinePageBreak4, "tdf123636_newlinePageBreak4.docx") +{ + //MS Compatibility flag: SplitPgBreakAndParaMark + //special case: an empty paragraph doesn't split (except if first paragraph). + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 3, getParagraphs() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 2, getPages() ); + + xmlDocUniquePtr pDump = parseLayoutDump(); + assertXPath(pDump, "/root/page[2]/body/txt[1]/Text", 0); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf118947_tableStyle, "tdf118947_tableStyle.docx") +{ + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xCell->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Table grid settings set line-spacing to 250% instead of single-spacing, which is set as a document default."), xPara->getString()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("TextBody has 10pt font size", 11.f, getProperty(xPara, "CharHeight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("TextBody has 1pt space below paragraph", sal_Int32(35), getProperty(xPara, "ParaBottomMargin")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Table has 10pt space above paragraph", sal_Int32(353), getProperty(xPara, "ParaTopMargin")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Table style sets 0 right margin", sal_Int32(0), getProperty(xPara, "ParaRightMargin")); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("TextBody has 1.07 line-spacing", sal_Int16(107), getProperty(xPara, "ParaLineSpacing").Height, 1); + // table-style based paragraph background color + CPPUNIT_ASSERT_EQUAL_MESSAGE("Missing paragraph background color in cell A1", Color(0xCCFFCC), getProperty(xPara, "ParaBackColor")); + + // This cell is affected by compatSetting overrideTableStyleFontSizeAndJustification=0 (the default value) + xCell.set(xTable->getCellByName("A2"), uno::UNO_QUERY); + xParaEnumAccess.set(xCell->getText(), uno::UNO_QUERY); + xParaEnum = xParaEnumAccess->createEnumeration(); + xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Notice that this is 8pt font, right aligned in compatibility mode."), xPara->getString()); + // Even though not specified, Table-Style distributes the properties in DocDefault. DocDefault fontsize is 8pt. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Compat mode has 8pt font size", 8.f, getProperty(getRun(xPara,1), "CharHeight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Normal has 0pt space below paragraph", sal_Int32(0), getProperty(xPara, "ParaBottomMargin")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Table sets 10pt space above paragraph", sal_Int32(353), getProperty(xPara, "ParaTopMargin")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Table style sets 0 right margin", sal_Int32(0), getProperty(xPara, "ParaRightMargin")); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Table sets 2.5 line-spacing", sal_Int16(250), getProperty(xPara, "ParaLineSpacing").Height, 1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Paragraph background color in cell A2", sal_Int32(-1), getProperty(xPara, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Compat mode overrides left adjust", style::ParagraphAdjust_RIGHT, + static_cast(getProperty(xPara, "ParaAdjust"))); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf118947_tableStyle2, "tdf118947_tableStyle2.docx") +{ + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + // This cell is affected by compatSetting overrideTableStyleFontSizeAndJustification=1 (no goofy exception) + uno::Reference xCell(xTable->getCellByName("A2"), uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xCell->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL(OUString("Notice that this is 12pt font, left aligned in non-compatibility mode."), xPara->getString()); + // Even though not specified, Table-Style tries to distribute the properties in DocDefault. DocDefault fontsize is 8pt. + // However, this is overridden by the default style's specified fontsize of 12 and left justify. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Non-Compat mode has 12pt font size", 12.f, getProperty(getRun(xPara,1), "CharHeight")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Non-Compat mode keeps the style's left adjust", style::ParagraphAdjust_LEFT, + static_cast(getProperty(xPara, "ParaAdjust"))); +} + +CPPUNIT_TEST_FIXTURE(Test, tdf123912_protectedForm) +{ + loadAndReload("tdf123912_protectedForm.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Compatibility: Protect form", true, + pDoc->getIDocumentSettingAccess().get( DocumentSettingId::PROTECT_FORM ) ); + + uno::Reference xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + uno::Reference xSect(xSections->getByIndex(0), uno::UNO_QUERY); + if ( xSect.is() ) + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section1 is protected", false, getProperty(xSect, "IsProtected")); +} + +DECLARE_OOXMLEXPORT_TEST(tdf124600b, "tdf124600b.docx") +{ + // was lost on roundtrip, we always wrote "1" on export. + bool bAllowOverlap1 = getProperty(getShape(1), "AllowOverlap"); + CPPUNIT_ASSERT(!bAllowOverlap1); + bool bAllowOverlap2 = getProperty(getShape(2), "AllowOverlap"); + CPPUNIT_ASSERT(!bAllowOverlap2); +} + +CPPUNIT_TEST_FIXTURE(Test, testDateControl) +{ + loadAndReload("empty-date-control.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Check that we exported the empty date control correctly + // Date form field is converted to date content control. + + uno::Reference xTextPortion(getRun(getParagraph(1), 1), uno::UNO_QUERY); + OUString aPortionType; + xTextPortion->getPropertyValue("TextPortionType") >>= aPortionType; + CPPUNIT_ASSERT_EQUAL(OUString("ContentControl"), aPortionType); + uno::Reference xContentControl; + xTextPortion->getPropertyValue("ContentControl") >>= xContentControl; + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + bool bDate{}; + xContentControlProps->getPropertyValue("Date") >>= bDate; + CPPUNIT_ASSERT(bDate); + + OUString sDateFormat; + xContentControlProps->getPropertyValue("DateFormat") >>= sDateFormat; + + OUString sLang; + xContentControlProps->getPropertyValue("DateLanguage") >>= sLang; + + OUString sCurrentDate; + xContentControlProps->getPropertyValue("CurrentDate") >>= sCurrentDate; + + CPPUNIT_ASSERT_EQUAL(OUString("dd/MM/yyyy"), sDateFormat); + CPPUNIT_ASSERT_EQUAL(OUString("en-US"), sLang); + CPPUNIT_ASSERT_EQUAL(OUString(""), sCurrentDate); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121867) +{ + loadAndReload("tdf121867.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + SwEditShell* pEditShell = pTextDoc->GetDocShell()->GetEditShell(); + // Without the accompanying fix in place, this test would have failed with + // 'Expected: 3; Actual : 0', i.e. page width zoom was lost on export. + CPPUNIT_ASSERT_EQUAL(SvxZoomType::PAGEWIDTH, pEditShell->GetViewOptions()->GetZoomType()); +} + +DECLARE_OOXMLEXPORT_TEST(testParaAdjustDistribute, "para-adjust-distribute.docx") +{ + // Without the accompanying fix in place, this test would have failed with + // 'Expected: 2; Actual : 0', i.e. the first paragraph's ParaAdjust was + // left, not block. + CPPUNIT_ASSERT_EQUAL( + style::ParagraphAdjust_BLOCK, + static_cast(getProperty(getParagraph(1), "ParaAdjust"))); + CPPUNIT_ASSERT_EQUAL(style::ParagraphAdjust_BLOCK, + static_cast( + getProperty(getParagraph(1), "ParaLastLineAdjust"))); + + CPPUNIT_ASSERT_EQUAL( + style::ParagraphAdjust_BLOCK, + static_cast(getProperty(getParagraph(2), "ParaAdjust"))); + CPPUNIT_ASSERT_EQUAL(style::ParagraphAdjust_LEFT, + static_cast( + getProperty(getParagraph(2), "ParaLastLineAdjust"))); +} + +CPPUNIT_TEST_FIXTURE(Test, testInputListExport) +{ + loadAndReload("tdf122186_input_list.odt"); + if (!mbExported) // importing the ODT, an input field + { + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + uno::Any aField = xFields->nextElement(); + uno::Reference xServiceInfo(aField, uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.textfield.DropDown")); + } + else // importing the DOCX, a content control + { + uno::Reference xTextPortion(getRun(getParagraph(1), 1), uno::UNO_QUERY); + OUString aPortionType; + xTextPortion->getPropertyValue("TextPortionType") >>= aPortionType; + CPPUNIT_ASSERT_EQUAL(OUString("ContentControl"), aPortionType); + uno::Reference xContentControl; + xTextPortion->getPropertyValue("ContentControl") >>= xContentControl; + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + uno::Sequence aListItems; + xContentControlProps->getPropertyValue("ListItems") >>= aListItems; + CPPUNIT_ASSERT_EQUAL(static_cast(3), aListItems.getLength()); + comphelper::SequenceAsHashMap aMap0(aListItems[0]); + CPPUNIT_ASSERT_EQUAL(OUString("1"), aMap0["Value"].get()); + comphelper::SequenceAsHashMap aMap1(aListItems[1]); + CPPUNIT_ASSERT_EQUAL(OUString("2"), aMap1["Value"].get()); + comphelper::SequenceAsHashMap aMap2(aListItems[2]); + CPPUNIT_ASSERT_EQUAL(OUString("3"), aMap2["Value"].get()); + uno::Reference xContentEnumAccess(xContentControl, uno::UNO_QUERY); + uno::Reference xContentEnum = xContentEnumAccess->createEnumeration(); + uno::Reference xContent(xContentEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xContent->getString()); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123435, "tdf123435.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + // Without the fix in place, it would have failed with + // - Expected: 2 + // - Actual : 1 + CPPUNIT_ASSERT_EQUAL(2, getShapes()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf116371) +{ + loadAndReload("tdf116371.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Make sure the rotation is exported correctly, and size not distorted + auto xShape(getShape(1)); + CPPUNIT_ASSERT_DOUBLES_EQUAL(4700.0, getProperty(xShape, "RotateAngle"), 10); + auto frameRect = getProperty(xShape, "FrameRect"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(24063), frameRect.Height); + CPPUNIT_ASSERT_EQUAL(sal_Int32(24179), frameRect.Width); +} + +CPPUNIT_TEST_FIXTURE(Test, testFrameSizeExport) +{ + loadAndSave("floating-tables-anchor.docx"); + // Make sure the table width is 4000 + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[1]/w:tblPr/w:tblW", "w", "4000"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf119201, "tdf119201.docx") +{ + // Visibility of shapes wasn't imported/exported, for now base printable property on that, too + auto xShape(getShape(1)); + CPPUNIT_ASSERT_MESSAGE("First shape should be visible.", getProperty(xShape, "Visible")); + CPPUNIT_ASSERT_MESSAGE("First shape should be printable.", getProperty(xShape, "Printable")); + xShape = getShapeByName(u"Rectangle 1"); + CPPUNIT_ASSERT_MESSAGE("Second shape should not be visible.", !getProperty(xShape, "Visible")); + CPPUNIT_ASSERT_MESSAGE("Second shape should not be printable.", !getProperty(xShape, "Printable")); + xShape = getShapeByName(u"Oval 2"); + CPPUNIT_ASSERT_MESSAGE("Third shape should be visible.", getProperty(xShape, "Visible")); + CPPUNIT_ASSERT_MESSAGE("Third shape should be printable.", getProperty(xShape, "Printable")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf124594, "tdf124594.docx") +{ + xmlDocUniquePtr pDump = parseLayoutDump(); + // Without the accompanying fix in place, this test would have failed, as the portion text was + // only "Er horte leise Schritte hinter", which means the 1st line of the 2nd paragraph was + // split into two by a Special portion, i.e. the top margin of the shape was too large. + assertXPath(pDump, "/root/page/body/txt[2]/Text[1]", "Portion", + "Er horte leise Schritte hinter sich. Das bedeutete nichts Gutes. Wer wu"); // ... until the bookmark. +} + +CPPUNIT_TEST_FIXTURE(Test, testTextInput) +{ + loadAndSave("textinput.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + + // test the exported DOCX + + // no hint, empty + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[3]/w:instrText", " FILLIN \"\""); + assertXPathChildren(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[5]", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[5]/w:rPr", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[6]/w:fldChar", "fldCharType", "end"); + + // no hint, content + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[3]/w:instrText", " FILLIN \"\""); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[5]/w:t", "content without hint"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[6]/w:fldChar", "fldCharType", "end"); + + // hint, empty + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[3]/w:instrText", " FILLIN \"hint empty\""); + assertXPathChildren(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[5]", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[5]/w:rPr", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[6]/w:fldChar", "fldCharType", "end"); + + // hint, content + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[4]/w:r[3]/w:instrText", " FILLIN \"hint content\""); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[4]/w:r[5]/w:t", "content with hint"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:r[6]/w:fldChar", "fldCharType", "end"); + + // test the imported DOCX + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + int nElements = 0; + + do + { + uno::Any aField = xFields->nextElement(); + uno::Reference xServiceInfo(aField, uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.textfield.Input")); + uno::Reference xPropertySet(aField, uno::UNO_QUERY); + uno::Reference xText(aField, uno::UNO_QUERY); + + // why is the enumeration not in the same order then the fields in the document? + // it seems to be stable and the navigation in the GUI is actually correct. + OUString sContent, sHint; + switch (nElements) + { + case 1: + sContent = "content with hint"; + sHint = "hint content"; + break; + case 2: + sHint = "hint empty"; + break; + case 3: + sContent = "content without hint"; + break; + } + CPPUNIT_ASSERT_EQUAL(uno::Any(sContent), xPropertySet->getPropertyValue("Content")); + CPPUNIT_ASSERT_EQUAL(sContent, xText->getAnchor()->getString()); + CPPUNIT_ASSERT_EQUAL(uno::Any(sHint), xPropertySet->getPropertyValue("Hint")); + nElements++; + } + while (xFields->hasMoreElements()); + CPPUNIT_ASSERT_EQUAL(4, nElements); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123460, "tdf123460.docx") +{ + // check paragraph mark deletion at terminating moveFrom + CPPUNIT_ASSERT(getParagraph( 2 )->getString().startsWith("Nunc")); + uno::Reference xRunEnumAccess(getParagraph( 2 ), uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + uno::Reference xRun(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( OUString( "" ), xRun->getString()); + xRun.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT(hasProperty(xRun, "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Delete"),getProperty(xRun, "RedlineType")); + xRun.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xRun->getString().endsWith("tellus.")); + xRun.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT(hasProperty(xRun, "Bookmark")); + + // The paragraph marker's formatting. + xRun.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"),getProperty(xRun, "TextPortionType")); + CPPUNIT_ASSERT(xRun->getString().isEmpty()); + + // deleted paragraph mark at the end of the second paragraph + if (mbExported) + { + // there is no run after the MoveBookmark + CPPUNIT_ASSERT(!xRunEnum->hasMoreElements()); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf146140) +{ + loadAndSave("tdf123460.docx"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + + // This was 1 (put end of paragraph of the previous moveFrom into a w:del, + // resulting double deletions at the same position, which is an + // ODT back-compatibility issue described in tdf#107292) + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:del", 0); + // This was 0 + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:moveFrom", 1); +} + +//tdf#125298: fix charlimit restrictions in bookmarknames and field references if they contain non-ascii characters +CPPUNIT_TEST_FIXTURE(Test, testTdf125298) +{ + loadAndSave("tdf125298_crossreflink_nonascii_charlimit.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // check whether test file keeps non-ascii values or not + OUString bookmarkName1 = getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:bookmarkStart[1]", "name"); + CPPUNIT_ASSERT_EQUAL(OUString::fromUtf8("\u00e1rv\u00edzt\u0171r\u0151_t\u00fck\u00f6rf\u00far\u00f3g\u00e9p"), bookmarkName1); + + OUString bookmarkName2 = getXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:bookmarkStart[1]", "name"); + CPPUNIT_ASSERT_EQUAL(OUString::fromUtf8("\u00e91\u00e12\u01713\u01514\u00fa5\u00f66\u00fc7\u00f38\u00ed9"), bookmarkName2); + OUString fieldName1 = getXPathContent(pXmlDoc, "/w:document/w:body/w:p[5]/w:r[2]/w:instrText[1]"); + OUString expectedFieldName1 = " REF " + bookmarkName1 + " \\h "; + CPPUNIT_ASSERT_EQUAL(expectedFieldName1, fieldName1); + OUString fieldName2 = getXPathContent(pXmlDoc, "/w:document/w:body/w:p[7]/w:r[2]/w:instrText[1]"); + OUString expectedFieldName2 = " REF " + bookmarkName2 + " \\h "; + CPPUNIT_ASSERT_EQUAL(expectedFieldName2, fieldName2); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf121784, "tdf121784.docx") +{ + // check tracked insertion of footnotes + CPPUNIT_ASSERT_EQUAL( OUString( "Text1" ), getParagraph( 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "" ), getRun( getParagraph( 1 ), 2 )->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(1), 2), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Insert"),getProperty(getRun(getParagraph(1), 2), "RedlineType")); + CPPUNIT_ASSERT_EQUAL( OUString( "1" ), getRun( getParagraph( 1 ), 3 )->getString()); + + // check tracked insertion of endnotes + CPPUNIT_ASSERT_EQUAL( OUString( "texti" ), getParagraph( 2 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "" ), getRun( getParagraph( 2 ), 2 )->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(2), 2), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Insert"),getProperty(getRun(getParagraph(2), 2), "RedlineType")); + CPPUNIT_ASSERT_EQUAL( OUString( "i" ), getRun( getParagraph( 2 ), 3 )->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testTbrlFrameVml, "tbrl-frame-vml.docx") +{ + uno::Reference xTextFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xTextFrame.is()); + + if (mbExported) + { + // DML import: creates a TextBox, eaVert read back as TB_RL in TextWritingMode + + auto eMode = getProperty(xTextFrame, "TextWritingMode"); + CPPUNIT_ASSERT_EQUAL(text::WritingMode::WritingMode_TB_RL, eMode); + } + else + { + // VML import: creates a TextFrame. + + auto nActual = getProperty(xTextFrame, "WritingMode"); + // Without the accompanying fix in place, this test would have failed with 'Expected: 2; Actual: + // 4', i.e. writing direction was inherited from page, instead of explicit tbrl. + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::TB_RL, nActual); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf119037) +{ + loadAndSave("tdf119037.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:pBdr/w:top", "val", "single"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:pBdr/w:left", "val", "single"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:pBdr/w:right", "val", "single"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:pBdr/w:bottom", "val", "single"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:pBdr/w:top", "val", "dotted"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:pBdr/w:left", "val", "dotted"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:pBdr/w:right", "val", "dotted"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:pBdr/w:bottom", "val", "dotted"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:pBdr/w:top", "val", "dashed"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:pBdr/w:left", "val", "dashed"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:pBdr/w:right", "val", "dashed"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:pBdr/w:bottom", "val", "dashed"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:pBdr/w:top", "val", "dashSmallGap"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:pBdr/w:left", "val", "dashSmallGap"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:pBdr/w:right", "val", "dashSmallGap"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:pBdr/w:bottom", "val", "dashSmallGap"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[9]/w:pPr/w:pBdr/w:top", "val", "dotDash"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[9]/w:pPr/w:pBdr/w:left", "val", "dotDash"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[9]/w:pPr/w:pBdr/w:right", "val", "dotDash"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[9]/w:pPr/w:pBdr/w:bottom", "val", "dotDash"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[11]/w:pPr/w:pBdr/w:top", "val", "dotDotDash"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[11]/w:pPr/w:pBdr/w:left", "val", "dotDotDash"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[11]/w:pPr/w:pBdr/w:right", "val", "dotDotDash"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[11]/w:pPr/w:pBdr/w:bottom", "val", "dotDotDash"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[13]/w:pPr/w:pBdr/w:top", "val", "double"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[13]/w:pPr/w:pBdr/w:left", "val", "double"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[13]/w:pPr/w:pBdr/w:right", "val", "double"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[13]/w:pPr/w:pBdr/w:bottom", "val", "double"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[15]/w:pPr/w:pBdr/w:top", "val", "double"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[15]/w:pPr/w:pBdr/w:left", "val", "double"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[15]/w:pPr/w:pBdr/w:right", "val", "double"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[15]/w:pPr/w:pBdr/w:bottom", "val", "double"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[17]/w:pPr/w:pBdr/w:top", "val", "thinThickSmallGap"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[17]/w:pPr/w:pBdr/w:left", "val", "thinThickSmallGap"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[17]/w:pPr/w:pBdr/w:right", "val", "thinThickSmallGap"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[17]/w:pPr/w:pBdr/w:bottom", "val", "thinThickSmallGap"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[19]/w:pPr/w:pBdr/w:top", "val", "double"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[19]/w:pPr/w:pBdr/w:left", "val", "double"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[19]/w:pPr/w:pBdr/w:right", "val", "double"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[19]/w:pPr/w:pBdr/w:bottom", "val", "double"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf125657) +{ + loadAndSave("tdf125657.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + auto checkAttrIsInt = [&](const OString& sAttrName) { + OUString sAttr = getXPath(pXmlDoc, + "/w:document/w:body/w:p[1]/w:r[1]/w:drawing/wp:inline/a:graphic/" + "a:graphicData/pic:pic/pic:blipFill/a:srcRect", + sAttrName); + OString sAssertMsg("Attribute " + sAttrName + " value " + sAttr.toUtf8() + + " is not a valid integer"); + CPPUNIT_ASSERT_MESSAGE(sAssertMsg.getStr(), !sAttr.isEmpty()); + // Only decimal characters allowed, optionally prepended with '-'; no '.' + CPPUNIT_ASSERT_MESSAGE(sAssertMsg.getStr(), + sAttr[0] == '-' || (sAttr[0] >= '0' && sAttr[0] <= '9')); + for (sal_Int32 i = 1; i < sAttr.getLength(); ++i) { + CPPUNIT_ASSERT_MESSAGE(sAssertMsg.getStr(), sAttr[i] >= '0'); + CPPUNIT_ASSERT_MESSAGE(sAssertMsg.getStr(), sAttr[i] <= '9'); + } + }; + // check that we export all coordinates of srcRect as integers + checkAttrIsInt("l"); + checkAttrIsInt("t"); + checkAttrIsInt("r"); + checkAttrIsInt("b"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf125324, "tdf125324.docx") +{ + discardDumpedLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page/body/txt[2]/anchored/fly/tab/infos/bounds", "top", "4193"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf78657) +{ + loadAndSave("tdf78657_picture_hyperlink.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + xmlDocUniquePtr pXmlRels = parseExport("word/_rels/document.xml.rels"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing/wp:inline/wp:docPr/a:hlinkClick", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:nvPicPr/pic:cNvPr/a:hlinkClick", 1); + assertXPath(pXmlRels, "/rels:Relationships/rels:Relationship[@Target='http://www.google.com']", "TargetMode", "External"); +} + +CPPUNIT_TEST_FIXTURE(Test, testBtlrFrame) +{ + loadAndReload("btlr-frame.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xPropertySet(getShape(1), uno::UNO_QUERY); + comphelper::SequenceAsHashMap aGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry")); + // Without the accompanying fix in place, this test would have failed with 'Expected: + // -270; Actual: 0', i.e. the writing direction of the frame was lost. + CPPUNIT_ASSERT_EQUAL(static_cast(-270), + aGeometry["TextPreRotateAngle"].get()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf125518) +{ + loadAndSave("tdf125518.odt"); + CPPUNIT_ASSERT_EQUAL(4, getShapes()); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + + // First diagram is anchored + OUString anchorName = getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[2]/w:drawing/wp:anchor/wp:docPr", "name"); + CPPUNIT_ASSERT_EQUAL(OUString("Object1"), anchorName); + + // Second diagram has anchor + anchorName = getXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[1]/w:drawing/wp:anchor/wp:docPr", "name"); + CPPUNIT_ASSERT_EQUAL(OUString("Objekt1"), anchorName); + + // Third diagram has no anchor + anchorName = getXPath(pXmlDoc, "/w:document/w:body/w:p[12]/w:r[2]/w:drawing/wp:inline/wp:docPr", "name"); + CPPUNIT_ASSERT_EQUAL(OUString("Object2"), anchorName); + + // 4th diagram has anchor too + anchorName = getXPath(pXmlDoc, "/w:document/w:body/w:p[14]/w:r[3]/w:drawing/wp:anchor/wp:docPr", "name"); + CPPUNIT_ASSERT_EQUAL(OUString("Object3"), anchorName); +} + +DECLARE_OOXMLEXPORT_TEST(testImageCommentAtChar, "image-comment-at-char.docx") +{ + uno::Reference xPara = getParagraph(1); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), + getProperty(getRun(xPara, 1), "TextPortionType")); + // Without the accompanying fix in place, this test would have failed with 'Expected: + // Annotation; Actual: Frame', i.e. the comment start before the image was lost. + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), + getProperty(getRun(xPara, 2), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), + getProperty(getRun(xPara, 3), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), + getProperty(getRun(xPara, 4), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), + getProperty(getRun(xPara, 5), "TextPortionType")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf131594) +{ + loadAndSave("tdf131594.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // lnNumType should not be exported if w:countBy="0" + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:lnNumType", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121663) +{ + loadAndSave("tdf121663.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // auto distance of line numbering is 0.5 cm + assertXPath(pXmlDoc, "//w:lnNumType", "distance", "283"); +} + +DECLARE_OOXMLEXPORT_TEST(testInvalidDateFormField, "invalid_date_form_field.docx") +{ + + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + uno::Reference xPortions = xParagraph->createEnumeration(); + + int nIndex = 0; + while (xPortions->hasMoreElements()) + { + uno::Reference xTextPortion(xPortions->nextElement(), uno::UNO_QUERY); + OUString aPortionType; + xTextPortion->getPropertyValue("TextPortionType") >>= aPortionType; + if (aPortionType != "ContentControl") + { + continue; + } + + uno::Reference xContentControl; + xTextPortion->getPropertyValue("ContentControl") >>= xContentControl; + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + bool bDate{}; + xContentControlProps->getPropertyValue("Date") >>= bDate; + CPPUNIT_ASSERT(bDate); + + // Check date content control's parameters. + OUString sDateFormat; + xContentControlProps->getPropertyValue("DateFormat") >>= sDateFormat; + + OUString sLang; + xContentControlProps->getPropertyValue("DateLanguage") >>= sLang; + + OUString sCurrentDate; + xContentControlProps->getPropertyValue("CurrentDate") >>= sCurrentDate; + + // The first one has invalid date format (invalid = LO can't parse it) + if(nIndex == 0) + { + + CPPUNIT_ASSERT_EQUAL(OUString("YYYY.MM.DDT00:00:00Z"), sDateFormat); + CPPUNIT_ASSERT_EQUAL(OUString("en-US"), sLang); + CPPUNIT_ASSERT_EQUAL(OUString(""), sCurrentDate); + + } + else if (nIndex == 1) // The second has wrong date + { + CPPUNIT_ASSERT_EQUAL(OUString("MM/DD/YY"), sDateFormat); + CPPUNIT_ASSERT_EQUAL(OUString("en-US"), sLang); + CPPUNIT_ASSERT_EQUAL(OUString("2019.06.34T00:00:00Z"), sCurrentDate); + + } + else // The third one has wrong local + { + CPPUNIT_ASSERT_EQUAL(OUString("[NatNum12 MMMM=abbreviation]YYYY\". \"MMMM D."), sDateFormat); + CPPUNIT_ASSERT_EQUAL(OUString("xxxx"), sLang); + CPPUNIT_ASSERT_EQUAL(OUString("2019.06.11T00:00:00Z"), sCurrentDate); + + } + ++nIndex; + } + CPPUNIT_ASSERT_EQUAL(int(3), nIndex); +} + +DECLARE_OOXMLEXPORT_TEST(tdf127085, "tdf127085.docx") +{ + // Fill transparency was lost during export + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int16(50), getProperty(xShape, "FillTransparence")); +} + +DECLARE_OOXMLEXPORT_TEST(tdf119809, "tdf119809.docx") +{ + // Combobox without an item list lost during import + if (getShapes() > 0) + { + uno::Reference xControlShape(getShape(1), uno::UNO_QUERY); + uno::Reference xPropertySet(xControlShape->getControl(), uno::UNO_QUERY); + uno::Reference xServiceInfo(xPropertySet, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, bool(xServiceInfo->supportsService("com.sun.star.form.component.ComboBox"))); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty< uno::Sequence >(xPropertySet, "StringItemList").getLength()); + } + else + { + // DropDown was imported as content control + // First run: bookmark + uno::Reference xTextPortion(getRun(getParagraph(1), 2), uno::UNO_QUERY); + OUString aPortionType; + xTextPortion->getPropertyValue("TextPortionType") >>= aPortionType; + CPPUNIT_ASSERT_EQUAL(OUString("ContentControl"), aPortionType); + uno::Reference xContentControl; + xTextPortion->getPropertyValue("ContentControl") >>= xContentControl; + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + uno::Sequence aListItems; + xContentControlProps->getPropertyValue("ListItems") >>= aListItems; + CPPUNIT_ASSERT_EQUAL(static_cast(0), aListItems.getLength()); + } +} + +DECLARE_OOXMLEXPORT_TEST(tdf118169, "tdf118169.docx") +{ + // Unicode characters were converted to question marks. + uno::Reference xControlShape(getShape(1), uno::UNO_QUERY); + uno::Reference xPropertySet(xControlShape->getControl(), uno::UNO_QUERY); + uno::Reference xServiceInfo(xPropertySet, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, bool(xServiceInfo->supportsService("com.sun.star.form.component.CheckBox"))); + CPPUNIT_ASSERT_EQUAL(OUString(u"őőőőőőőőőőőűűűű"), getProperty(xPropertySet, "Label")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127116) +{ + loadAndSave("tdf127116.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + + OUString bookmarkName = getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:bookmarkStart", "name"); + OUString anchor = getXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:hyperlink", "anchor"); + CPPUNIT_ASSERT_EQUAL(anchor, bookmarkName); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127339) +{ + loadAndSave("tdf127339.docx"); + xmlDocUniquePtr pXmlRels = parseExport("word/_rels/document.xml.rels"); + + assertXPathNoAttribute(pXmlRels, "/rels:Relationships/rels:Relationship[@Target='#bookmark']", "TargetMode"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127362) +{ + loadAndSave("tdf127362.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + xmlDocUniquePtr pXmlRels = parseExport("word/_rels/document.xml.rels"); + + OUString bookmarkName = "#" + getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:bookmarkStart", "name"); + OUString anchor = getXPath(pXmlRels, "/rels:Relationships/rels:Relationship[@Id='rId3']", "Target"); + CPPUNIT_ASSERT_EQUAL(anchor, bookmarkName); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127605) +{ + loadAndSave("tdf127605.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + OUString bookmarkName = getXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:bookmarkStart", "name"); + OUString anchor = getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:hyperlink", "anchor"); + CPPUNIT_ASSERT_EQUAL(anchor, bookmarkName); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127732) +{ + loadAndSave("internal_hyperlink_frame.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + OUString bookmarkName = getXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:textbox/w:txbxContent/w:p/w:bookmarkStart", "name"); + OUString anchor = getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:hyperlink", "anchor"); + CPPUNIT_ASSERT_EQUAL(anchor, bookmarkName); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127733) +{ + loadAndSave("internal_hyperlink_ole.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + + OUString bookmarkName = getXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:bookmarkStart", "name"); + OUString anchor = getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:hyperlink", "anchor"); + CPPUNIT_ASSERT_EQUAL(anchor, bookmarkName); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127734) +{ + loadAndSave("internal_hyperlink_region.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + OUString bookmarkName = getXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:bookmarkStart", "name"); + OUString anchor = getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:hyperlink", "anchor"); + CPPUNIT_ASSERT_EQUAL(anchor, bookmarkName); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127735) +{ + loadAndSave("internal_hyperlink_table.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + OUString bookmarkName = getXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:p/w:bookmarkStart", "name"); + OUString anchor = getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:hyperlink", "anchor"); + CPPUNIT_ASSERT_EQUAL(anchor, bookmarkName); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf123628) +{ + loadAndSave("tdf123628.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:hyperlink/w:r/w:rPr/w:rStyle", "val", "InternetLink"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='InternetLink']/w:name", "val", "Hyperlink"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf127741, "tdf127741.docx") +{ + uno::Reference xPara = getParagraph(1); + uno::Reference xRun(getRun(xPara,1), uno::UNO_QUERY); + OUString unVisitedStyleName = getProperty(xRun, "UnvisitedCharStyleName"); + CPPUNIT_ASSERT(unVisitedStyleName.equalsIgnoreAsciiCase("Internet Link")); + OUString visitedStyleName = getProperty(xRun, "VisitedCharStyleName"); + CPPUNIT_ASSERT(visitedStyleName.equalsIgnoreAsciiCase("Visited Internet Link")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf142693_hugePaperSizeImport) +{ + loadAndSave("tdf142693_hugePaperSizeImport.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:pgSz", "w", "90369"); + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:pgSz", "h", "104372"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127925) +{ + loadAndSave("tdf127925.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='VisitedInternetLink']/w:name", "val", "FollowedHyperlink"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf127579) +{ + loadAndSave("tdf127579.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:hyperlink/w:r/w:rPr/w:rStyle", "val", "InternetLink"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128304) +{ + loadAndReload("tdf128304.odt"); + CPPUNIT_ASSERT_EQUAL(4, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + css::text::WritingMode eMode; + uno::Reference xProps1(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xProps1->getPropertyValue("TextWritingMode") >>= eMode); + CPPUNIT_ASSERT_EQUAL(css::text::WritingMode::WritingMode_TB_RL, eMode); + + uno::Reference xProps2(getShape(2), uno::UNO_QUERY); + CPPUNIT_ASSERT(xProps2->getPropertyValue("TextWritingMode") >>= eMode); + CPPUNIT_ASSERT_EQUAL(css::text::WritingMode::WritingMode_TB_RL, eMode); + + uno::Reference xProps3(getShape(3), uno::UNO_QUERY); + CPPUNIT_ASSERT(xProps3->getPropertyValue("TextWritingMode") >>= eMode); + CPPUNIT_ASSERT_EQUAL(css::text::WritingMode::WritingMode_TB_RL, eMode); + + uno::Reference xProps4(getShape(4), uno::UNO_QUERY); + CPPUNIT_ASSERT(xProps4->getPropertyValue("TextWritingMode") >>= eMode); + CPPUNIT_ASSERT_EQUAL(css::text::WritingMode::WritingMode_TB_RL, eMode); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx new file mode 100644 index 000000000..d96bd7087 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx @@ -0,0 +1,1591 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace com::sun::star; + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/ooxmlexport/data/"; + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase(DATA_DIRECTORY, "Office Open XML Text") {} +}; + +DECLARE_OOXMLEXPORT_TEST(Tdf130907, "tdf130907.docx") +{ + uno::Reference xPara1 = getParagraph(2); + CPPUNIT_ASSERT(xPara1.is()); + uno::Reference xFormula1Props(xPara1, uno::UNO_QUERY); + CPPUNIT_ASSERT(xFormula1Props.is()); + sal_Int16 nHOri1; + xFormula1Props->getPropertyValue("ParaAdjust") >>= nHOri1; + CPPUNIT_ASSERT_EQUAL_MESSAGE("The alignment of the equation is not left!", + sal_Int16(style::ParagraphAdjust::ParagraphAdjust_LEFT), nHOri1); + + uno::Reference xPara2 = getParagraph(3); + CPPUNIT_ASSERT(xPara2.is()); + uno::Reference xFormula2Props(xPara2, uno::UNO_QUERY); + CPPUNIT_ASSERT(xFormula2Props.is()); + sal_Int16 nHOri2; + xFormula2Props->getPropertyValue("ParaAdjust") >>= nHOri2; + CPPUNIT_ASSERT_EQUAL_MESSAGE("The alignment of the equation is not center!", + sal_Int16(style::ParagraphAdjust::ParagraphAdjust_CENTER), nHOri2); + + uno::Reference xPara3 = getParagraph(5); + CPPUNIT_ASSERT(xPara3.is()); + uno::Reference xFormula3Props(xPara3, uno::UNO_QUERY); + CPPUNIT_ASSERT(xFormula3Props.is()); + sal_Int16 nHOri3; + xFormula3Props->getPropertyValue("ParaAdjust") >>= nHOri3; + CPPUNIT_ASSERT_EQUAL_MESSAGE("The alignment of the equation is not right!", + sal_Int16(style::ParagraphAdjust::ParagraphAdjust_RIGHT), nHOri3); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128197) +{ + load(mpTestDocumentPath, "128197_compat14.docx"); + xmlDocUniquePtr pLayout14 = parseLayoutDump(); + sal_Int32 nHeight14 = getXPath(pLayout14, "//page[1]/body/txt[1]/infos/bounds", "height").toInt32(); + + load(mpTestDocumentPath, "128197_compat15.docx"); + xmlDocUniquePtr pLayout15 = parseLayoutDump(); + sal_Int32 nHeight15 = getXPath(pLayout15, "//page[1]/body/txt[1]/infos/bounds", "height").toInt32(); + + // In compat mode=14 second line has size of the shape thus entire paragraph height is smaller + // So nHeight14 < nHeight15 + CPPUNIT_ASSERT_LESS(nHeight15, nHeight14); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf135595_HFtableWrap) +{ + loadAndReload("tdf135595_HFtableWrap.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nRowHeight = getXPath(pXmlDoc, "//page[1]/header/tab/row/infos/bounds", "height").toInt32(); + // tdf#77794: always force bLayoutInCell from false to true for MSO2013+ + // The fly is supposed to be inside the cell. Before, height was 998. Now it is 2839. + CPPUNIT_ASSERT_MESSAGE("Image must be contained inside the table cell", nRowHeight > 2000); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135943_shapeWithText_L0c15, + "tdf135943_shapeWithText_LayoutInCell0_compat15.docx") +{ + // With compat15, layoutinCell ought to be ignored/forced to true. + // HOWEVER, currently only the shape is correctly placed, while its text is un-synced separately. + // So to prevent this ugly mess, just leave everything together in the historical (wrong) spot. + xmlDocUniquePtr pDump = parseLayoutDump(); + sal_Int32 nFrameLeft = getXPath(pDump, "//anchored/SwAnchoredDrawObject/bounds", "left").toInt32(); + sal_Int32 nFrameRight = getXPath(pDump, "//anchored/SwAnchoredDrawObject/bounds", "right").toInt32(); + sal_Int32 nTextLeft = getXPath(pDump, "//anchored/fly/infos/bounds", "left").toInt32(); + sal_Int32 nTextRight = getXPath(pDump, "//anchored/fly/infos/bounds", "right").toInt32(); + // The text must be inside of its frame boundaries + CPPUNIT_ASSERT(nFrameRight >= nTextRight); + CPPUNIT_ASSERT(nFrameLeft <= nTextLeft); + // LayoutInCell: The text must fit inside cell A1 //cell[1]/info/bounds/right = 4703 + //CPPUNIT_ASSERT(nTextRight < 4704); + + uno::Reference xShapeProperties(getShape(1), uno::UNO_QUERY); + bool bValue; + xShapeProperties->getPropertyValue("IsFollowingTextFlow") >>= bValue; + CPPUNIT_ASSERT_EQUAL_MESSAGE("YOU FIXED ME? LayoutInCell ought to be true", false, bValue); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135595_HFtableWrap_c12, "tdf135595_HFtableWrap_c12.docx") +{ + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // tdf#104596: ignore wrap exception apparently does not apply if it is not "layout in table cell". + // Should be only one page. Row height should be two lines at 722, not wrapped to three lines at 998. + sal_Int32 nRowHeight = getXPath(pXmlDoc, "//header/tab/row/infos/bounds", "height").toInt32(); + CPPUNIT_ASSERT_MESSAGE("Text must not wrap around header image", nRowHeight < 800); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123622, "tdf123622.docx") +{ + uno::Reference XPropsRight(getShape(1),uno::UNO_QUERY); + sal_Int16 nRelativePosR = 0; + XPropsRight->getPropertyValue("HoriOrientRelation")>>=nRelativePosR; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Shape inside the margin", sal_Int16(4), nRelativePosR); + + uno::Reference XPropsLeft(getShape(2), uno::UNO_QUERY); + sal_Int16 nRelativePosL = 0; + XPropsLeft->getPropertyValue("HoriOrientRelation") >>= nRelativePosL; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Shape inside the margin", sal_Int16(3), nRelativePosL); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf78749) +{ + loadAndReload("tdf78749.docx"); + //Shape lost the background image before, now check if it still has... + auto xShape = getShape(1); + uno::Reference xShpProps(xShape, uno::UNO_QUERY); + OUString aPropertyVal; + xShpProps->getPropertyValue("FillBitmapName") >>= aPropertyVal; + CPPUNIT_ASSERT(!aPropertyVal.isEmpty()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128207) +{ + loadAndSave("tdf128207.docx"); + //There was the charts on each other, because their horizontal and vertical position was 0! + xmlDocUniquePtr p_XmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(p_XmlDoc); + assertXPathContent(p_XmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/w:drawing/wp:anchor/wp:positionH/wp:posOffset", "4445"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf123873) +{ + loadAndSave("tdf123873.docx"); + //OLE Object were overlapped due to missing wrap import + xmlDocUniquePtr p_XmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(p_XmlDoc); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/w:drawing/wp:anchor/wp:wrapTopAndBottom"); +} + +CPPUNIT_TEST_FIXTURE(Test, Tdf133065) +{ + loadAndSave("tdf133065.odt"); + CPPUNIT_ASSERT_EQUAL(7, getShapes()); + CPPUNIT_ASSERT_EQUAL(3, getPages()); + auto pxmldoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pxmldoc); + OUString aVal; + + aVal = getXPath(pxmldoc, "/w:document/w:body/w:p[3]/w:r[2]/w:object/v:shape/w10:wrap", "type"); + CPPUNIT_ASSERT(aVal.indexOf("square") > -1); + aVal = getXPath(pxmldoc, "/w:document/w:body/w:p[3]/w:r[2]/w:object/v:shape/w10:wrap", "side"); + CPPUNIT_ASSERT(aVal.indexOf("left") > -1); + + aVal = getXPath(pxmldoc, "/w:document/w:body/w:p[8]/w:r[2]/w:object/v:shape/w10:wrap", "type"); + CPPUNIT_ASSERT(aVal.indexOf("square") > -1); + aVal = getXPath(pxmldoc, "/w:document/w:body/w:p[8]/w:r[2]/w:object/v:shape/w10:wrap", "side"); + CPPUNIT_ASSERT(aVal.indexOf("right") > -1); + + aVal = getXPath(pxmldoc, "/w:document/w:body/w:p[12]/w:r[2]/w:object/v:shape/w10:wrap", "type"); + CPPUNIT_ASSERT(aVal.indexOf("square") > -1); + aVal = getXPath(pxmldoc, "/w:document/w:body/w:p[12]/w:r[2]/w:object/v:shape/w10:wrap", "side"); + CPPUNIT_ASSERT(aVal.indexOf("largest") > -1); + + aVal = getXPath(pxmldoc, "/w:document/w:body/w:p[20]/w:r[2]/w:object/v:shape/w10:wrap", "type"); + CPPUNIT_ASSERT(aVal.indexOf("topAndBottom") > -1); + + aVal = getXPath(pxmldoc, "/w:document/w:body/w:p[24]/w:r[2]/w:object/v:shape/w10:wrap", "type"); + CPPUNIT_ASSERT(aVal.indexOf("square") > -1); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf130814model, "tdf130814.docx") +{ + CPPUNIT_ASSERT_EQUAL(Color(0x1F497D), getProperty(getRun(getParagraph(2), 1), "CharColor")); + CPPUNIT_ASSERT_EQUAL(double(16), getProperty(getRun(getParagraph(2), 1), "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontUnderline::SINGLE, getProperty(getRun(getParagraph(2), 1), "CharUnderline")); + CPPUNIT_ASSERT_EQUAL(OUString("Candara"), getProperty(getRun(getParagraph(2), 1), "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString("Arial Unicode MS"), getProperty(getRun(getParagraph(2), 1), "CharFontNameAsian")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf107020) +{ + loadAndSave("tdf107020.docx"); + if (!IsDefaultDPI()) + return; + xmlDocUniquePtr p_XmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(p_XmlDoc); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p/w:r/w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:srcRect", "l", "4910"); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p/w:r/w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:srcRect", "t", "27183"); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p/w:r/w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:srcRect", "r", "57638"); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p/w:r/w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:srcRect", "b", "48360"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf130814ooxml) +{ + loadAndSave("tdf130814.docx"); + xmlDocUniquePtr p_XmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(p_XmlDoc); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:rPr/w:rFonts", "eastAsia", "Arial Unicode MS"); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:rPr/w:rFonts", "ascii", "Candara"); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:rPr/w:rFonts", "hAnsi", "Candara"); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:rPr/w:color", "val", "1F497D"); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:rPr/w:sz", "val", "32"); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:rPr/w:szCs", "val", "32"); + assertXPath( + p_XmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:rPr/w:u", "val", "single"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf129888vml, "tdf129888vml.docx") +{ + //the line shape has anchor in the first cell however it has to + //be positioned to an another cell. To reach this we must handle + //the o:allowincell attribute of the shape, and its position has + //to be calculated from the page frame instead of the table: + + uno::Reference xShapeProperties(getShape(1), uno::UNO_QUERY); + bool bValue; + xShapeProperties->getPropertyValue("IsFollowingTextFlow") >>= bValue; + CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf129888vml The line shape has bad place!", + false, bValue); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf129888dml, "tdf129888dml.docx") +{ + //the shape has anchor in the first cell however it has to + //be positioned to the right side of the page. To reach this we must handle + //the layoutInCell attribute of the shape, and its position has + //to be calculated from the page frame instead of the table: + + uno::Reference xShapeProperties(getShape(1), uno::UNO_QUERY); + bool bValue; + xShapeProperties->getPropertyValue("IsFollowingTextFlow") >>= bValue; + CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf129888dml The shape has bad place!", + false, bValue); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf130120) +{ + loadAndSave("tdf130120.docx"); + //Text for exporting the allowincell attribute: + xmlDocUniquePtr p_XmlDoc = parseExport("word/document.xml"); + assertXPath(p_XmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r/mc:AlternateContent/" + "mc:Choice/w:drawing/wp:anchor", "layoutInCell", "0"); +} + +CPPUNIT_TEST_FIXTURE(Test, Tdf133030) +{ + loadAndSave("tdf133030.docx"); + auto pExport = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pExport); + + assertXPath(pExport, "/w:document/w:body/w:p[3]/m:oMathPara/m:oMathParaPr/m:jc", "val", "center"); + assertXPath(pExport, "/w:document/w:body/w:p[5]/m:oMathPara/m:oMathParaPr/m:jc", "val", "left"); + assertXPath(pExport, "/w:document/w:body/w:p[7]/m:oMathPara/m:oMathParaPr/m:jc", "val", "right"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf87569v, "tdf87569_vml.docx") +{ + //the original tdf87569 sample has vml shapes... + uno::Reference xShapeProperties(getShape(1), uno::UNO_QUERY); + bool bValue; + xShapeProperties->getPropertyValue("IsFollowingTextFlow") >>= bValue; + CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf87569_vml: The Shape is not in the table!", + true, bValue); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf133000_numStyleFormatting, "tdf133000_numStyleFormatting.docx") +{ + // Paragraph style's LeftMargin should not override numbering's Left Margin + xmlDocUniquePtr pDump = parseLayoutDump(); + assertXPathContent(pDump, "/root/page[1]/body/txt[2]", "First line"); + const sal_Int32 nLevel1Margin = getXPath(pDump, "//page[1]/body/txt[2]/infos/prtBounds", "left").toInt32(); + assertXPathContent(pDump, "/root/page[1]/body/txt[4]", "One sublevel"); + const sal_Int32 nLevel2Margin = getXPath(pDump, "//page[1]/body/txt[4]/infos/prtBounds", "left").toInt32(); + CPPUNIT_ASSERT( nLevel1Margin < nLevel2Margin ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf134260, "tdf134260.docx") +{ + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1270 + + auto xNum1Levels + = getProperty>(getParagraph(1), "NumberingRules"); + + CPPUNIT_ASSERT_EQUAL( + sal_Int32(0), + comphelper::SequenceAsHashMap(xNum1Levels->getByIndex(0))["ListtabStopPosition"] + .get()); + + auto xNum2Levels + = getProperty>(getParagraph(2), "NumberingRules"); + + CPPUNIT_ASSERT_EQUAL( + sal_Int32(0), + comphelper::SequenceAsHashMap(xNum2Levels->getByIndex(0))["ListtabStopPosition"] + .get()); + + auto xNum3Levels + = getProperty>(getParagraph(3), "NumberingRules"); + + CPPUNIT_ASSERT_EQUAL( + sal_Int32(0), + comphelper::SequenceAsHashMap(xNum3Levels->getByIndex(0))["ListtabStopPosition"] + .get()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZeroNumbering, "arabic-zero-numbering.docx") +{ + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 64 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::ARABIC_ZERO), + aMap["NumberingType"].get()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZero3Numbering, "arabic-zero3-numbering.docx") +{ + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 65 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO3. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::ARABIC_ZERO3), + aMap["NumberingType"].get()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZero4Numbering, "arabic-zero4-numbering.docx") +{ + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 66 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO4. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::ARABIC_ZERO4), + aMap["NumberingType"].get()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZero5Numbering, "arabic-zero5-numbering.docx") +{ + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 67 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO5. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::ARABIC_ZERO5), + aMap["NumberingType"].get()); +} + +CPPUNIT_TEST_FIXTURE(Test, testArabicZeroNumberingFootnote) +{ + // Create a document, set footnote numbering type to ARABIC_ZERO. + loadURL("private:factory/swriter", nullptr); + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnoteSettings + = xFootnotesSupplier->getFootnoteSettings(); + sal_uInt16 nNumberingType = style::NumberingType::ARABIC_ZERO; + xFootnoteSettings->setPropertyValue("NumberingType", uno::Any(nNumberingType)); + + // Insert a footnote. + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnote( + xFactory->createInstance("com.sun.star.text.Footnote"), uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextContentAppend(xTextDocument->getText(), + uno::UNO_QUERY); + xTextContentAppend->appendTextContent(xFootnote, {}); + + reload("Office Open XML Text", ""); + + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Without the accompanying fix in place, this test would have failed with: + // XPath '/w:document/w:body/w:sectPr/w:footnotePr/w:numFmt' number of nodes is incorrect + // because the exporter had no idea what markup to use for ARABIC_ZERO. + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:footnotePr/w:numFmt", "val", "decimalZero"); +} + +CPPUNIT_TEST_FIXTURE(Test, testChicagoNumberingFootnote) +{ + // Create a document, set footnote numbering type to SYMBOL_CHICAGO. + loadURL("private:factory/swriter", nullptr); + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnoteSettings + = xFootnotesSupplier->getFootnoteSettings(); + sal_uInt16 nNumberingType = style::NumberingType::SYMBOL_CHICAGO; + xFootnoteSettings->setPropertyValue("NumberingType", uno::Any(nNumberingType)); + + // Insert a footnote. + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnote( + xFactory->createInstance("com.sun.star.text.Footnote"), uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextContentAppend(xTextDocument->getText(), + uno::UNO_QUERY); + xTextContentAppend->appendTextContent(xFootnote, {}); + + reload("Office Open XML Text", ""); + + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Without the accompanying fix in place, this test would have failed with: + // XPath '/w:document/w:body/w:sectPr/w:footnotePr/w:numFmt' number of nodes is incorrect + // because the exporter had no idea what markup to use for SYMBOL_CHICAGO. + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:footnotePr/w:numFmt", "val", "chicago"); +} + +CPPUNIT_TEST_FIXTURE(Test, testListNotCountedIndent) +{ + loadAndReload("list_notcounted_indent.fodt"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:numPr/w:numId", "val", "0"); + // wrong: 720 + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:ind", "end", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:ind", "hanging", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:numPr/w:numId", "val", "2"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:ind", 0); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:numPr/w:numId", "val", "0"); + // wrong: 180 + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:ind", "start", "720"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:ind", "hanging", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:numPr/w:numId", "val", "0"); + // wrong: 720 + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:ind", "end", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:ind", "hanging", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:numPr/w:numId", "val", "0"); + // wrong: 720 + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:ind", "start", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:ind", "end", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:ind", "hanging", "0"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf87569d, "tdf87569_drawingml.docx") +{ + //if the original tdf87569 sample is upgraded it will have drawingml shapes... + uno::Reference xShapeProperties(getShape(1), uno::UNO_QUERY); + bool bValue; + xShapeProperties->getPropertyValue("IsFollowingTextFlow") >>= bValue; + CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf87569_drawingml: The Shape is not in the table!", + true, bValue); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf130610) +{ + loadAndReload("tdf130610_bold_in_2_styles.ott"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // check character properties + { + uno::Reference xStyle( + getStyles("CharacterStyles")->getByName("WollMuxRoemischeZiffer"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Bold", awt::FontWeight::BOLD, getProperty(xStyle, "CharWeight")); + } + + // check paragraph properties + { + uno::Reference xStyle( + getStyles("ParagraphStyles")->getByName("WollMuxVerfuegungspunkt"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Bold", awt::FontWeight::BOLD, getProperty(xStyle, "CharWeight")); + } + + // check inline text properties + { + xmlDocUniquePtr pXmlDoc =parseExport("word/document.xml"); + if (pXmlDoc) + { + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/w:rPr/w:b"); + } + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121045) +{ + loadAndSave("tdf121045.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:pPr/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:pPr/w:rPr/w:szCs", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[1]/w:fldChar", "fldCharType", "begin"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[2]/w:instrText", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[3]/w:fldChar", "fldCharType", "separate"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[5]/w:fldChar", "fldCharType", "end"); + // form control keeps its direct formatted font size + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[2]/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[2]/w:rPr/w:szCs", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[3]/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[3]/w:rPr/w:szCs", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[4]/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[4]/w:rPr/w:szCs", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[5]/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r[5]/w:rPr/w:szCs", "val", "20"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf78352, "tdf78352.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + // Ensure that width of first tab is close to zero (previous value was ~1000 twips) + int nWidth = parseDump("/root/page/body/txt[1]/Text[@nType='PortionType::TabLeft']", "nWidth").toInt32(); + CPPUNIT_ASSERT_LESS(150, nWidth); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf81567) +{ + loadAndReload("tdf81567.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + + int nFrameWidth = parseDump("/root/page/body/txt/anchored/fly/infos/bounds", "width").toInt32(); + CPPUNIT_ASSERT_EQUAL(2371, nFrameWidth); + + int nFrameHeight = parseDump("/root/page/body/txt/anchored/fly/infos/bounds", "height").toInt32(); + CPPUNIT_ASSERT_EQUAL(3520, nFrameHeight); + + int nFrameTop = parseDump("/root/page/body/txt/anchored/fly/infos/bounds", "top").toInt32(); + CPPUNIT_ASSERT_EQUAL(1518, nFrameTop); + + int nImageWidth = parseDump("/root/page/body/txt/anchored/fly/txt/anchored/fly/infos/bounds", "width").toInt32(); + CPPUNIT_ASSERT_EQUAL(2370, nImageWidth); + + int nImageHeight = parseDump("/root/page/body/txt/anchored/fly/txt/anchored/fly/infos/bounds", "height").toInt32(); + CPPUNIT_ASSERT_EQUAL(1605, nImageHeight); + + // Check the image is at the top of the frame + // Without the fix in place, this test would have failed with: + // - Expected: 1638 + // - Actual : 2236 + int nImageTop = parseDump("/root/page/body/txt/anchored/fly/txt/anchored/fly/infos/bounds", "top").toInt32(); + CPPUNIT_ASSERT_EQUAL(1638, nImageTop); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf92472) +{ + loadAndSave("tdf92472.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:szCs", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/w:fldChar", "fldCharType", "begin"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/w:instrText", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[3]/w:fldChar", "fldCharType", "separate"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[5]/w:fldChar", "fldCharType", "end"); + // form control keeps its direct formatted font size + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/w:rPr/w:szCs", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[3]/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[3]/w:rPr/w:szCs", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[4]/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[4]/w:rPr/w:szCs", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[5]/w:rPr/w:sz", "val", "20"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[5]/w:rPr/w:szCs", "val", "20"); +} + +CPPUNIT_TEST_FIXTURE(Test, Tdf133035) +{ + loadAndSave("tdf133035.docx"); + auto pxml = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pxml); + OUString aXmlVal = getXPath(pxml, "/w:document/w:body/w:p[1]/w:r[1]/w:object/v:shape", "style"); + CPPUNIT_ASSERT(aXmlVal.indexOf("margin-left:186.6pt") > -1); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf131260, "tdf131260.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 3 + // - Actual : 2 + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTables->getCount()); +} +DECLARE_OOXMLEXPORT_TEST(testTdf120315, "tdf120315.docx") +{ + // tdf#120315 cells of the second column weren't vertically merged + // because their horizontal positions are different a little bit + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows = xTextTable->getRows(); + CPPUNIT_ASSERT_EQUAL(getProperty>( + xTableRows->getByIndex(0), "TableColumnSeparators")[0] + .Position, + getProperty>( + xTableRows->getByIndex(1), "TableColumnSeparators")[2] + .Position); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf108350_noFontdefaults, "tdf108350_noFontdefaults.docx") +{ + uno::Reference< container::XNameAccess > paragraphStyles = getStyles("ParagraphStyles"); + uno::Reference< beans::XPropertySet > xStyleProps(paragraphStyles->getByName("NoParent"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Times New Roman"), getProperty(xStyleProps, "CharFontName")); + //CPPUNIT_ASSERT_EQUAL_MESSAGE("Font size", 10.f, getProperty(xStyleProps, "CharHeight")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf123116_oversizedRowSplit) +{ + loadAndReload("tdf123116_oversizedRowSplit.odt"); + // Intentionally require a very non-backward-compatible, natural continuation of the table + // instead of an ugly "page break" like MS Word does (and LO used to do). + CPPUNIT_ASSERT_EQUAL_MESSAGE("Row splits over 4 pages", 4, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testPageContentBottom, "page-content-bottom.docx") +{ + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + sal_Int16 nExpected = text::RelOrientation::PAGE_PRINT_AREA_BOTTOM; + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 10 (PAGE_PRINT_AREA_BOTTOM) + // - Actual : 0 (FRAME) + // i.e. the bottom-of-body relation was lost. + CPPUNIT_ASSERT_EQUAL(nExpected, getProperty(xShape, "VertOrientRelation")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf129522_removeShadowStyle) +{ + loadAndReload("tdf129522_removeShadowStyle.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference< container::XNameAccess > paragraphStyles = getStyles("ParagraphStyles"); + uno::Reference< beans::XPropertySet > xStyleProps(paragraphStyles->getByName("Shadow"), uno::UNO_QUERY_THROW); + table::ShadowFormat aShadow = getProperty(xStyleProps, "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + + // Shadows were inherited regardless of whether the style disabled them. + xStyleProps.set(paragraphStyles->getByName("Shadow-removed"), uno::UNO_QUERY_THROW); + aShadow = getProperty(xStyleProps, "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_NONE, aShadow.Location); + + uno::Reference< container::XNameAccess > characterStyles = getStyles("CharacterStyles"); + xStyleProps.set(characterStyles->getByName("CharShadow"), uno::UNO_QUERY_THROW); + aShadow = getProperty(xStyleProps, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + + xStyleProps.set(characterStyles->getByName("CharShadow-removed"), uno::UNO_QUERY_THROW); + aShadow = getProperty(xStyleProps, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_NONE, aShadow.Location); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf130167_spilloverHeaderShape, "testTdf130167_spilloverHeader.docx") +{ + uno::Reference xTextGraphicObjectsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xNameAccess( + xTextGraphicObjectsSupplier->getGraphicObjects(), uno::UNO_QUERY); + // graphics from discarded headers were being added to the text body. Reduced from 5 to 2 shapes overall. + // CPPUNIT_ASSERT(xNameAccess->getCount() <= 4); -> What about hidden headers? + CPPUNIT_ASSERT_LESS(sal_Int32(9), xNameAccess->getCount()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf124986, "tdf124986.docx") +{ + // Load a document with SET fields, where the SET fields contain leading/trailing quotation marks and spaces. + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + while (xFields->hasMoreElements()) + { + uno::Reference xServiceInfo(xFields->nextElement(), uno::UNO_QUERY); + uno::Reference xPropertySet(xServiceInfo, uno::UNO_QUERY); + if (xServiceInfo->supportsService("com.sun.star.text.TextField.SetExpression")) + { + OUString aValue; + xPropertySet->getPropertyValue("Content") >>= aValue; + CPPUNIT_ASSERT_EQUAL(OUString("demo"), aValue); + } + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf83309, "tdf83309.docx") +{ + // Important: bug case had 4 pages + CPPUNIT_ASSERT_EQUAL(2, getPages()); + + // First paragraph does not have tab before + // (same applies to all paragraphs in doc, but lets assume they are + // behave same way) + OUString sNodeType = parseDump("/root/page[1]/body/txt[1]/Text[1]", "nType"); + CPPUNIT_ASSERT_EQUAL(OUString("PortionType::Text"), sNodeType); + + // tdf148380: creation-date field in header.xml was unsupported on export + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("8/31/14 10:26 AM"), xField->getPresentation(false)); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121661) +{ + loadAndSave("tdf121661.docx"); + xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml"); + assertXPath(pXmlSettings, "/w:settings/w:hyphenationZone", "val", "851"); + + // tdf#149421 + uno::Reference xStyle(getStyles("ParagraphStyles")->getByName("Standard"), uno::UNO_QUERY); + // This was false + CPPUNIT_ASSERT_GREATER( static_cast(0), getProperty(xStyle, "ParaHyphenationZone")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf149421, "tdf121661.docx") +{ + uno::Reference xStyle(getStyles("ParagraphStyles")->getByName("Standard"), uno::UNO_QUERY); + // This was false + CPPUNIT_ASSERT_GREATER( static_cast(0), getProperty(xStyle, "ParaHyphenationZone")); + + if (!mbExported) + { + CPPUNIT_ASSERT_EQUAL( static_cast(851), getProperty(xStyle, "ParaHyphenationZone")); + // modify hyphenation zone (note: only hyphenation zone set in Standard paragraph style + // is exported, according to the document-level hyphenation settings of OOXML) + xStyle->setPropertyValue("ParaHyphenationZone", uno::Any(static_cast(2000))); + } + else + { + // check the export of the modified hyphenation zone + CPPUNIT_ASSERT_EQUAL( static_cast(2000), getProperty(xStyle, "ParaHyphenationZone")); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121658) +{ + loadAndSave("tdf121658.docx"); + xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml"); + assertXPath(pXmlSettings, "/w:settings/w:doNotHyphenateCaps"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTableStyleConfNested) +{ + loadAndSave("table-style-conf-nested.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed, as the custom table cell + // border properties were lost, so the outer A2 cell started to have borders, not present in the + // doc model. + assertXPath(pXmlDoc, "//w:body/w:tbl/w:tr/w:tc[2]/w:tcPr/w:tcBorders/w:top", "val", "nil"); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testTdf133771) +{ + // Create the doc model. + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf133771.odt"; + loadURL(aURL, nullptr, /*pPassword*/ "test"); + + CPPUNIT_ASSERT_EQUAL(OUString("Password Protected"), getParagraph(1)->getString()); + + // Without the fix in place, this test would have failed with + // "An uncaught exception of type com.sun.star.io.IOException" + // exporting to docx + save("Office Open XML Text", maTempFile); + mbExported = true; + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + assertXPathContent(pXmlDoc, "//w:body/w:p/w:r/w:t", "Password Protected"); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testZeroLineSpacing) +{ + // Create the doc model. + loadURL("private:factory/swriter", nullptr); + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + style::LineSpacing aSpacing; + aSpacing.Mode = style::LineSpacingMode::MINIMUM; + aSpacing.Height = 0; + xParagraph->setPropertyValue("ParaLineSpacing", uno::Any(aSpacing)); + + // Export to docx. + save("Office Open XML Text", maTempFile); + mbExported = true; + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: atLeast + // - Actual : auto + // i.e. the minimal linespacing was lost on export. + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:pPr/w:spacing", "lineRule", "atLeast"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:pPr/w:spacing", "line", "0"); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testSemiTransparentText) +{ + // Create an in-memory empty document. + loadURL("private:factory/swriter", nullptr); + + // Set text to half-transparent and type a character. + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xParagraph.is()); + sal_Int16 nTransparence = 75; + xParagraph->setPropertyValue("CharTransparence", uno::Any(nTransparence)); + uno::Reference xTextRange(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT(xTextRange.is()); + xTextRange->setString("x"); + + // Export to docx. + save("Office Open XML Text", maTempFile); + mbExported = true; + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + double fValue = getXPath( + pXmlDoc, + "/w:document/w:body/w:p/w:r/w:rPr/w14:textFill/w14:solidFill/w14:srgbClr/w14:alpha", + "val") + .toDouble(); + sal_Int16 nActual = basegfx::fround(fValue / oox::drawingml::PER_PERCENT); + + // Without the accompanying fix in place, this test would have failed, as the w14:textFill + // element was missing. + CPPUNIT_ASSERT_EQUAL(nTransparence, nActual); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testTdf147485) +{ + // Before the fix this was impossible. + load(DATA_DIRECTORY, "Tdf147485.docx"); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testTdf149546) +{ + // Before the fix this was impossible. + load(DATA_DIRECTORY, "tdf149546.docx"); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testUserField) +{ + // Create an in-memory empty document with a user field. + loadURL("private:factory/swriter", nullptr); + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xField( + xFactory->createInstance("com.sun.star.text.TextField.User"), uno::UNO_QUERY); + uno::Reference xMaster( + xFactory->createInstance("com.sun.star.text.FieldMaster.User"), uno::UNO_QUERY); + xMaster->setPropertyValue("Name", uno::Any(OUString("foo"))); + xField->attachTextFieldMaster(xMaster); + xField->getTextFieldMaster()->setPropertyValue("Content", uno::Any(OUString("bar"))); + uno::Reference xDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xDocument->getText(); + xText->insertTextContent(xText->createTextCursor(), xField, /*bAbsorb=*/false); + + // Export to docx. + save("Office Open XML Text", maTempFile); + mbExported = true; + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + + // Without the accompanying fix in place, this test would have failed, the user field was + // exported as User Field foo = bar. + assertXPathContent(pXmlDoc, "//w:p/w:r[2]/w:instrText", " DOCVARIABLE foo "); + assertXPathContent(pXmlDoc, "//w:p/w:r[4]/w:t", "bar"); + + // Make sure that not only the variables, but also their values are written. + pXmlDoc = parseExport("word/settings.xml"); + CPPUNIT_ASSERT(pXmlDoc); + assertXPath(pXmlDoc, "//w:docVars/w:docVar", "name", "foo"); + assertXPath(pXmlDoc, "//w:docVars/w:docVar", "val", "bar"); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testHighlightEdit_numbering) +{ + // Create the doc model. + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf135774_numberingCRProps.docx"; + loadURL(aURL, nullptr); + + // This only affects when saving as w:highlight - which is not the default since 7.0. + SvtFilterOptions& rOpt = SvtFilterOptions::Get(); + bool bWasExportToShade = rOpt.IsCharBackground2Shading(); + rOpt.SetCharBackground2Highlighting(); + + //Simulate a user editing the char background color of the paragraph 2 marker (CR) + uno::Reference properties(getParagraph(2), uno::UNO_QUERY); + uno::Sequence aListAutoFormat; + CPPUNIT_ASSERT(properties->getPropertyValue("ListAutoFormat") >>= aListAutoFormat); + comphelper::SequenceAsHashMap aMap(properties->getPropertyValue("ListAutoFormat")); + // change the background color to RES_CHRATR_BACKGROUND. + aMap["CharBackColor"] <<= static_cast(0xff00ff); + // Two attributes can affect character background. Highlight has priority, and is only there for MS compatibility, + // so clear any potential highlight set earlier, or override any coming via a style. + aMap["CharHighlight"] <<= static_cast(COL_TRANSPARENT); + + uno::Sequence aGrabBag; + aMap["CharInteropGrabBag"] >>= aGrabBag; + for (beans::PropertyValue& rProp : asNonConstRange(aGrabBag)) + { + // The shading is no longer defined from import, so clear that flag. + // BackColor 0xff00ff will now attempt to export as highlight, since we set that in SvtFilterOptions. + if (rProp.Name == "CharShadingMarker") + rProp.Value <<= false; + } + aMap["CharInteropGrabBag"] <<= aGrabBag; + + aMap >> aListAutoFormat; + properties->setPropertyValue("ListAutoFormat", uno::Any(aListAutoFormat)); + + // Export to docx. + save("Office Open XML Text", maTempFile); + mbExported = true; + + // Paragraph 2 should have only one w:highlight written per w:rPr. Without the fix, there were two. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "//w:body/w:p[2]/w:pPr/w:rPr/w:highlight", "val", "none"); + // Visually, the "none" highlight means the bullet point should not have a character background. + + if (bWasExportToShade) + rOpt.SetCharBackground2Shading(); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf132766) +{ + loadAndSave("tdf132766.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/numbering.xml"); + CPPUNIT_ASSERT(pXmlDoc); + + // Ensure that for list=1 and level=0 we wrote correct bullet char and correct font + assertXPath(pXmlDoc, "//w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:lvlText", + "val", u"\uF0B7"); + assertXPath(pXmlDoc, "//w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:rPr/w:rFonts", + "ascii", "Symbol"); + assertXPath(pXmlDoc, "//w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:rPr/w:rFonts", + "hAnsi", "Symbol"); + assertXPath(pXmlDoc, "//w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:rPr/w:rFonts", + "cs", "Symbol"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128245) +{ + loadAndSave("tdf128245.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/numbering.xml"); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPath(pXmlDoc, "//w:num[@w:numId='1']/w:abstractNumId", "val", "1"); + assertXPath(pXmlDoc, "//w:num[@w:numId='2']/w:abstractNumId", "val", "2"); + assertXPath(pXmlDoc, "//w:num[@w:numId='3']/w:abstractNumId", "val", "3"); + assertXPath(pXmlDoc, "//w:num[@w:numId='4']/w:abstractNumId", "val", "1"); + assertXPath(pXmlDoc, "//w:num[@w:numId='4']/w:lvlOverride[@w:ilvl='0']", "ilvl", "0"); + assertXPath(pXmlDoc, "//w:num[@w:numId='4']/w:lvlOverride/w:startOverride", "val", "1"); + assertXPath(pXmlDoc, "//w:num[@w:numId='4']/w:lvlOverride[@w:ilvl='1']", 0); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf124367, "tdf124367.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows = xTextTable->getRows(); + // it was 2761 at the first import, and 2760 at the second import, due to incorrect rounding + CPPUNIT_ASSERT_EQUAL(static_cast(2762), + getProperty>( + xTableRows->getByIndex(2), "TableColumnSeparators")[0] + .Position); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf95189) +{ + loadAndReload("tdf95189.docx"); + { + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("3"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(6), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(7), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2"), getProperty(xPara, "ListLabelString")); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128820) +{ + loadAndSave("tdf128820.fodt"); + // Import of exported DOCX failed because of wrong namespace used for wsp element + // Now test the exported XML, in case we stop failing opening invalid files + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXml); + // The parent wpg:wgp element has three children: wpg:cNvGrpSpPr, wpg:grpSpPr, and wpg:wsp + // (if we start legitimately exporting additional children, this needs to be adjusted to check + // all those, to make sure we don't export wrong elements). + assertXPathChildren(pXml, + "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/" + "wp:inline/a:graphic/a:graphicData/wpg:wgp", + 3); + assertXPath(pXml, + "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:inline/" + "a:graphic/a:graphicData/wpg:wgp/wpg:cNvGrpSpPr"); + assertXPath(pXml, + "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:inline/" + "a:graphic/a:graphicData/wpg:wgp/wpg:grpSpPr"); + // This one was pic:wsp instead of wps:wsp + assertXPath(pXml, + "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:inline/" + "a:graphic/a:graphicData/wpg:wgp/wps:wsp"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128889) +{ + loadAndSave("tdf128889.fodt"); + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXml); + // There was an w:r (with w:br) as an invalid child of first paragraph's w:pPr + assertXPath(pXml, "/w:document/w:body/w:p[1]/w:pPr/w:r", 0); + assertXPath(pXml, "/w:document/w:body/w:p[1]/w:r", 2); + // Check that the break is in proper - last - position + assertXPath(pXml, "/w:document/w:body/w:p[1]/w:r[2]/w:br", "type", "page"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf132754) +{ + loadAndReload("tdf132754.docx"); + { + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("0.0.0."), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("0.0.1."), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("0.0.2."), getProperty(xPara, "ListLabelString")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf129353, "tdf129353.docx") +{ + CPPUNIT_ASSERT_EQUAL(8, getParagraphs()); + getParagraph(1, "(Verne, 1870)"); + getParagraph(2, "Bibliography"); + getParagraph(4, "Christie, A. (1922). The Secret Adversary. "); + CPPUNIT_ASSERT_EQUAL(OUString(), getParagraph(8)->getString()); + + uno::Reference xIndexSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexes = xIndexSupplier->getDocumentIndexes(); + uno::Reference xIndex(xIndexes->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTextRange = xIndex->getAnchor(); + uno::Reference xText = xTextRange->getText(); + uno::Reference xTextCursor = xText->createTextCursor(); + xTextCursor->gotoRange(xTextRange->getStart(), false); + xTextCursor->gotoRange(xTextRange->getEnd(), true); + OUString aIndexString(convertLineEnd(xTextCursor->getString(), LineEnd::LINEEND_LF)); + + // Check that all the pre-rendered entries are correct, including trailing spaces + CPPUNIT_ASSERT_EQUAL(OUString("\n" // starting with an empty paragraph + "Christie, A. (1922). The Secret Adversary. \n" + "\n" + "Verne, J. G. (1870). Twenty Thousand Leagues Under the Sea. \n" + ""), // ending with an empty paragraph + aIndexString); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf77796) +{ + loadAndSave("tdf77796.docx"); + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXml); + // cell paddings from table style + assertXPath(pXml, "/w:document/w:body/w:tbl/w:tblPr/w:tblCellMar/w:start", "w", "5"); + assertXPath(pXml, "/w:document/w:body/w:tbl/w:tblPr/w:tblCellMar/w:top", "w", "240"); + assertXPath(pXml, "/w:document/w:body/w:tbl/w:tblPr/w:tblCellMar/w:bottom", "w", "480"); + // not modified + assertXPath(pXml, "/w:document/w:body/w:tbl/w:tblPr/w:tblCellMar/w:end", "w", "108"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128290) +{ + loadAndSave("tdf128290.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXml); + assertXPath(pXml, "/w:document/w:body/w:tbl/w:tblPr/w:tblLayout", "type", "fixed"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf120394, "tdf120394.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + { + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1.2.1"), getProperty(xPara, "ListLabelString")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf133605, "tdf133605.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(6), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(3), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("(a)"), getProperty(xPara, "ListLabelString")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf133605_2, "tdf133605_2.docx") +{ + // About the same document as tdf133605.docx, but number definition has level definitions in random order + CPPUNIT_ASSERT_EQUAL(1, getPages()); + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(6), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(3), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("(a)"), getProperty(xPara, "ListLabelString")); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf123757) +{ + loadAndSave("tdf123757.docx"); + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXml); + assertXPath(pXml, "/w:document/w:body/w:tbl", 2); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf141172) +{ + loadAndSave("tdf141172.docx"); + xmlDocUniquePtr pXml = parseExport("word/endnotes.xml"); + CPPUNIT_ASSERT(pXml); + // This was 1 (lost table during copying endnote content) + assertXPath(pXml, "/w:endnotes/w:endnote/w:tbl", 2); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf141548) +{ + loadAndSave("tdf141548.docx"); + xmlDocUniquePtr pXml = parseExport("word/endnotes.xml"); + CPPUNIT_ASSERT(pXml); + // This was 0 (lost text content of the run with endnoteRef) + assertXPath(pXml, "/w:endnotes/w:endnote[4]/w:p/w:r[2]/w:t", 2); + assertXPathContent(pXml, "/w:endnotes/w:endnote[4]/w:p/w:r[2]/w:t[1]", "another endnote"); + assertXPathContent(pXml, "/w:endnotes/w:endnote[4]/w:p/w:r[2]/w:t[2]", "new line"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf143399) +{ + loadAndSave("tdf143399.docx"); + xmlDocUniquePtr pXml = parseExport("word/footnotes.xml"); + CPPUNIT_ASSERT(pXml); + // These were 0 (lost text content of documents both with footnotes and endnotes) + assertXPath(pXml, "/w:footnotes/w:footnote[3]/w:p/w:r[3]/w:t", 1); + assertXPathContent(pXml, "/w:footnotes/w:footnote[3]/w:p/w:r[3]/w:t", "Footnotes_graphic2"); + assertXPath(pXml, "/w:footnotes/w:footnote[4]/w:p/w:r[3]/w:t", 1); + assertXPathContent(pXml, "/w:footnotes/w:footnote[4]/w:p/w:r[3]/w:t", "Footnotes_graphic"); + + xmlDocUniquePtr pXml2 = parseExport("word/endnotes.xml"); + CPPUNIT_ASSERT(pXml); + // This was 0 (lost text content of the run with endnoteRef) + assertXPath(pXml2, "/w:endnotes/w:endnote[3]/w:p/w:r[3]/w:t", 1); + assertXPathContent(pXml2, "/w:endnotes/w:endnote[3]/w:p/w:r[3]/w:t[1]", "Endnotes"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf143583) +{ + loadAndSave("tdf143583_emptyParaAtEndOfFootnote.docx"); + xmlDocUniquePtr pXml = parseExport("word/footnotes.xml"); + CPPUNIT_ASSERT(pXml); + assertXPath(pXml, "/w:footnotes/w:footnote[3]/w:p", 2); + // This was 1 + assertXPath(pXml, "/w:footnotes/w:footnote[4]/w:p", 2); + // This was 2 + assertXPath(pXml, "/w:footnotes/w:footnote[5]/w:p", 3); + // This was 2 + assertXPath(pXml, "/w:footnotes/w:footnote[6]/w:p", 3); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf152203) +{ + loadAndSave("tdf152203.docx"); + xmlDocUniquePtr pXml = parseExport("word/footnotes.xml"); + CPPUNIT_ASSERT(pXml); + + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + uno::Reference xLastFootnote(xFootnotes->getByIndex(5), uno::UNO_QUERY); + // This was "Footnote for pg5" (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg 6"), xLastFootnote->getString().trim() ); + + uno::Reference xLastButOne(xFootnotes->getByIndex(4), uno::UNO_QUERY); + // This was "Footnote for pg 6" (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg5"), xLastButOne->getString().trim() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf152206) +{ + loadAndSave("tdf152206.docx"); + xmlDocUniquePtr pXml = parseExport("word/footnotes.xml"); + CPPUNIT_ASSERT(pXml); + + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + uno::Reference xLastFootnote(xFootnotes->getByIndex(1), uno::UNO_QUERY); + // This was "Footnote for pg5" (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg 6"), xLastFootnote->getString().trim() ); + + uno::Reference xLastButOne(xFootnotes->getByIndex(0), uno::UNO_QUERY); + // This was "Footnote for pg 6" (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg5"), xLastButOne->getString().trim() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf153255) +{ + loadAndSave("tdf153255.docx"); + xmlDocUniquePtr pXml = parseExport("word/footnotes.xml"); + CPPUNIT_ASSERT(pXml); + + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + uno::Reference xLastFootnote(xFootnotes->getByIndex(5), uno::UNO_QUERY); + // This was "Footnote for pg2" (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg 6"), xLastFootnote->getString().trim() ); + + uno::Reference xLastButOne(xFootnotes->getByIndex(4), uno::UNO_QUERY); + // This was "Footnote for pg 6" (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg5"), xLastButOne->getString().trim() ); + + // check all the remaining footnotes + + uno::Reference xFootnote1(xFootnotes->getByIndex(0), uno::UNO_QUERY); + // This was "Footnote for pg3" (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg1"), xFootnote1->getString().trim() ); + + uno::Reference xFootnote2(xFootnotes->getByIndex(1), uno::UNO_QUERY); + // This was "Footnote for pg5" (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg2"), xFootnote2->getString().trim() ); + + uno::Reference xFootnote3(xFootnotes->getByIndex(2), uno::UNO_QUERY); + // This was "Footnote for pg4." (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg3"), xFootnote3->getString().trim() ); + + uno::Reference xFootnote4(xFootnotes->getByIndex(3), uno::UNO_QUERY); + // This was "Footnote for pg1" (replaced footnotes) + CPPUNIT_ASSERT_EQUAL( OUString("Footnote for pg4."), xFootnote4->getString().trim() ); +} + +// skip test for macOS (missing fonts?) +#if !defined(MACOSX) +DECLARE_OOXMLEXPORT_TEST(testTdf146346, "tdf146346.docx") +{ + // This was 2 (by bad docDefault vertical margins around tables in footnotes) + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} +#endif + +DECLARE_OOXMLEXPORT_TEST(testContSectBreakHeaderFooter, "cont-sect-break-header-footer.docx") +{ + // 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()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page footer, section 1"), + parseDump("/root/page[1]/footer/txt/text()")); + // 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()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page footer, section 2"), + parseDump("/root/page[2]/footer/txt/text()")); + // This is inherited from page 2. + CPPUNIT_ASSERT_EQUAL(OUString("Header, section 2"), + parseDump("/root/page[3]/header/txt/text()")); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // - xpath should match exactly 1 node + // i.e. the footer had no text (inherited from page 2), while the correct behavior is to provide + // the own footer text. + CPPUNIT_ASSERT_EQUAL(OUString("Footer, section 3"), + parseDump("/root/page[3]/footer/txt/text()")); + + // 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 (mbExported) + { + 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", "top", "2200"); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testHyphenationAuto) +{ + loadAndReload("hyphenation.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Explicitly set hyphenation=auto on document level + xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml"); + CPPUNIT_ASSERT(pXmlSettings); + assertXPath(pXmlSettings, "/w:settings/w:autoHyphenation", "val", "true"); + + // Second paragraph has explicitly enabled hyphenation + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXml); + assertXPath(pXml, "/w:document/w:body/w:p[2]/w:pPr/w:suppressAutoHyphens", "val", "false"); + + // Default paragraph style explicitly disables hyphens + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + CPPUNIT_ASSERT(pXmlStyles); + assertXPath(pXmlStyles, "/w:styles/w:docDefaults/w:pPrDefault/w:pPr/w:suppressAutoHyphens", "val", "true"); +} + +CPPUNIT_TEST_FIXTURE(Test, testStrikeoutGroupShapeText) +{ + loadAndSave("tdf131776_StrikeoutGroupShapeText.docx"); + // tdf#131776: Check if strikeout is used in shape group texts + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + + // double strike (dstrike) + // no "val" attribute + assertXPath(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[1]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:dstrike"); + assertXPathNoAttribute(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[1]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:dstrike", "val"); + // "val" attribute is true, this is used in this test file. However, LO is going to export this element without the "val" attribute + // because if the element appears, but without an attribute its "val" true by default. + assertXPath(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[2]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:dstrike"); + assertXPathNoAttribute(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[2]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:dstrike", "val"); + // "val" attribute is false (this was missing, resulting the regression) + assertXPath(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[3]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:dstrike", "val", "false"); + + // simple strike (strike) + // no "val" attribute + assertXPath(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[4]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:strike"); + assertXPathNoAttribute(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[4]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:strike", "val"); + // "val" attribute is true, this is used in this test file. However, LO is going to export this element without the "val" attribute + // because if the element appears, but without an attribute its "val" true by default. + assertXPath(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[5]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:strike"); + assertXPathNoAttribute(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[5]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:strike", "val"); + // "val" attribute is false + assertXPath(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wpg:wgp/" + "wps:wsp[6]/wps:txbx/w:txbxContent/w:p/w:r/w:rPr/w:strike", "val", "false"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf131539) +{ + loadAndSave("tdf131539.odt"); + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + //The positions of OLE objects were not exported, check if now it is exported correctly + xmlDocUniquePtr p_XmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(p_XmlDoc); + OUString aXmlVal = getXPath(p_XmlDoc, "/w:document/w:body/w:p[4]/w:r[1]/w:object/v:shape", "style"); + // This data was missing + CPPUNIT_ASSERT(aXmlVal.indexOf("margin-left:139.95")>-1); +} + +CPPUNIT_TEST_FIXTURE(Test, testLineWidthRounding) +{ + loadAndSave("tdf126363_LineWidthRounding.docx"); + // tdf#126363: check if line with stays the same after export + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + // this was 57240 (it differs from the original 57150, losing the preset line width) + assertXPath(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln", "w", "57150"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf108505) +{ + loadAndReload("tdf108505.docx"); + uno::Reference xParagraph = getParagraph(3); + uno::Reference xText + = getRun(xParagraph, 1, "Wrong font when alone on the line"); + + // Without the fix in place this would have become Times New Roman + CPPUNIT_ASSERT_EQUAL( + OUString("Trebuchet MS"), + getProperty(xText, "CharFontName")); +} + +CPPUNIT_TEST_FIXTURE(Test, testRelativeAnchorHeightFromTopMarginHasHeader) +{ + loadAndReload("tdf123324_testRelativeAnchorHeightFromTopMarginHasHeader.docx"); + // tdf#123324 The height was set relative to page print area top, + // but this was handled relative to page height. + // Note: page print area top = margin + header height. + // In this case the header exists. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds", "height", "2551"); +} + +CPPUNIT_TEST_FIXTURE(Test, testRelativeAnchorHeightFromTopMarginNoHeader) +{ + loadAndReload("tdf123324_testRelativeAnchorHeightFromTopMarginNoHeader.docx"); + // tdf#123324 The height was set relative from top margin, but this was handled relative from page height. + // Note: the MSO Word margin = LO margin + LO header height. + // In this case the header does not exist, so MSO Word margin and LO Writer margin are the same. + + // tdf#123324 The height was set relative to page print area top, + // but this was handled relative to page height. + // Note: page print area top = margin + header height. + // In this case the header does not exist, so OpenDocument and OOXML margins are the same. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds", "height", "2551"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf64531) +{ + loadAndReload("tdf64531.docx"); + xmlDocUniquePtr pXmlDoc= parseExport("word/document.xml"); + OString sPathToTabs= "/w:document/w:body/w:sdt/w:sdtContent/w:p[2]/w:pPr/w:tabs/"; + assertXPath(pXmlDoc, sPathToTabs+"w:tab[1]", "pos","720"); + assertXPath(pXmlDoc, sPathToTabs+"w:tab[2]", "pos","12950"); +} + +DECLARE_OOXMLEXPORT_TEST(testVmlShapeTextWordWrap, "tdf97618_testVmlShapeTextWordWrap.docx") +{ + // tdf#97618 The text wrapping of a shape was not handled in a canvas. + // TODO: fix export too + if (mbExported) + return; + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + if (!pXmlDoc) + return; + // The bound rect of shape will be wider if wrap does not work (the wrong value is 3167). + assertXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds", "width", "2500"); +} + +DECLARE_OOXMLEXPORT_TEST(testVmlLineShapeMirroredX, "tdf97517_testVmlLineShapeMirroredX.docx") +{ + // tdf#97517 The "flip:x" was not handled for VML line shapes. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + OUString sStyle = getXPath(pXmlDoc, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:line", + "style"); + CPPUNIT_ASSERT(sStyle.indexOf("flip:x") > 0); +} + +DECLARE_OOXMLEXPORT_TEST(testVmlLineShapeMirroredY, "tdf137678_testVmlLineShapeMirroredY.docx") +{ + // tdf#137678 The "flip:y" was not handled for VML line shapes. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + OUString sStyle = getXPath(pXmlDoc, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:line", + "style"); + CPPUNIT_ASSERT(sStyle.indexOf("flip:y") > 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testVmlLineShapeRotated) +{ + loadAndSave("tdf137765_testVmlLineShapeRotated.docx"); + // tdf#137765 The "rotation" (in style attribute) was not handled correctly for VML line shapes. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // it was 1.55pt,279.5pt + assertXPath(pXmlDoc, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:line", + "from", + "-9pt,296.75pt"); + // it was 25.5pt,317.8pt + assertXPath(pXmlDoc, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:line", + "to", + "36.05pt,300.55pt"); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx new file mode 100644 index 000000000..38ef89997 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx @@ -0,0 +1,1054 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/ooxmlexport/data/"; + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase(DATA_DIRECTORY, "Office Open XML Text") {} + +protected: + /** + * Denylist handling + */ + bool mustTestImportOf(const char* filename) const override { + // If the testcase is stored in some other format, it's pointless to test. + return o3tl::ends_with(filename, ".docx"); + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testTdf123621) +{ + loadAndSave("tdf123621.docx"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + assertXPathContent(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor" + "/wp:positionV/wp:posOffset", "1080135"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf131540, "tdf131540.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // There are 2 OLEs test if one of them moved on save: + CPPUNIT_ASSERT_EQUAL_MESSAGE("The shape1 moved on saving!", text::RelOrientation::PAGE_FRAME, + getProperty(getShape(1), "HoriOrientRelation")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("The shape2 moved on saving!", text::RelOrientation::PAGE_FRAME, + getProperty(getShape(2), "HoriOrientRelation")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf131801, "tdf131801.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + xmlDocUniquePtr pDump = parseLayoutDump(); + // "1." is red + CPPUNIT_ASSERT_EQUAL(OUString("1."), getXPath(pDump, "//page[1]/body/txt[1]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("00ff0000"), getXPath(pDump, "//page[1]/body/txt[1]/Special/SwFont", "color")); + // "2." is red + CPPUNIT_ASSERT_EQUAL(OUString("2."), getXPath(pDump, "//page[1]/body/txt[2]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("00ff0000"), getXPath(pDump, "//page[1]/body/txt[2]/Special/SwFont", "color")); + // "3." is black + CPPUNIT_ASSERT_EQUAL(OUString("3."), getXPath(pDump, "//page[1]/body/txt[3]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("ffffffff"), getXPath(pDump, "//page[1]/body/txt[3]/Special/SwFont", "color")); + // "4." is black + CPPUNIT_ASSERT_EQUAL(OUString("4."), getXPath(pDump, "//page[1]/body/txt[4]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("ffffffff"), getXPath(pDump, "//page[1]/body/txt[4]/Special/SwFont", "color")); + // "5." is red + CPPUNIT_ASSERT_EQUAL(OUString("5."), getXPath(pDump, "//page[1]/body/txt[5]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("00ff0000"), getXPath(pDump, "//page[1]/body/txt[5]/Special/SwFont", "color")); + // "6." is red + CPPUNIT_ASSERT_EQUAL(OUString("6."), getXPath(pDump, "//page[1]/body/txt[6]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("00ff0000"), getXPath(pDump, "//page[1]/body/txt[6]/Special/SwFont", "color")); + // "7." is black + CPPUNIT_ASSERT_EQUAL(OUString("7."), getXPath(pDump, "//page[1]/body/txt[7]/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("ffffffff"), getXPath(pDump, "//page[1]/body/txt[7]/Special/SwFont", "color")); + // "8." is black + CPPUNIT_ASSERT_EQUAL(OUString("8."), getXPath(pDump, "//page[1]/body/txt[8]/Special[1]", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("ffffffff"), getXPath(pDump, "//page[1]/body/txt[8]/Special[1]/SwFont", "color")); + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + if (!pXmlDocument) + return; + + assertXPath(pXmlDocument, "/w:document/w:body/w:p[1]/w:pPr/w:rPr/w:rStyle", + "val", "Emphasis"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:rStyle", + "val", "Emphasis"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[3]/w:pPr/w:rPr/w:rStyle", 0); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[4]/w:pPr/w:rPr/w:rStyle", 0); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[5]/w:pPr/w:rPr/w:rStyle", + "val", "Emphasis"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[5]/w:pPr/w:rPr/w:sz", + "val", "32"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:rPr/w:rStyle", + "val", "Emphasis"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:rPr/w:sz", + "val", "32"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[7]/w:pPr/w:rPr/w:rStyle", 0); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[8]/w:pPr/w:rPr/w:rStyle", 0); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf133334_followPgStyle, "tdf133334_followPgStyle.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf137850_compat14ZOrder, "tdf137850_compat14ZOrder.docx") +{ + // The file contains 2 shapes which have a different value of behindDoc. + // Test that the textbox is hidden behind the arrow (for Word <= 2010/compatibilityMode==14) + uno::Reference xShape(getShape(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2015"), xShape->getString()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Textbox is in the background", false, getProperty(xShape, "Opaque")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf137850_compat15ZOrder, "tdf137850_compat15ZOrder.docx") +{ + // The file contains 2 shapes which have a different value of behindDoc. + // Test that the textbox is not hidden behind the arrow (for Word >= 2013/compatibilityMode==15) + uno::Reference xShape(getShape(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2015"), xShape->getString()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Textbox is in the foreground", true, getProperty(xShape, "Opaque")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf118701) +{ + loadAndSave("tdf118701.docx"); + // This was 6, related to moving inline images after the page breaks + CPPUNIT_ASSERT_EQUAL(4, getPages()); + + xmlDocUniquePtr pXmlDoc = parseExport(); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr[1]/w:numPr", 0); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr[1]/w:numPr", 0); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr[1]/w:numPr", 0); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr[1]/w:numPr", 1); + + // Keep numbering of the paragraph of the inline image + assertXPath(pXmlDoc, "/w:document/w:body/w:p[8]/w:pPr[1]/w:numPr", 0); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[9]/w:pPr[1]/w:numPr", 1); + // This was 0 + assertXPath(pXmlDoc, "/w:document/w:body/w:p[10]/w:pPr[1]/w:numPr", 1); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123388, "tdf123388.docx") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // Tests new cell formula PRODUCT + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("PRODUCT()"), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("640"), xEnumerationAccess1->getPresentation(false).trim()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123381, "tdf123381.docx") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("INT(5.65)"), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("5"), xEnumerationAccess1->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("INT()"), xEnumerationAccess2->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("6"), xEnumerationAccess2->getPresentation(false).trim()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123401, "tdf123401.fodt") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // Tests new cell formula AVERAGE + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AVERAGE()"), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("3"), xEnumerationAccess1->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AVERAGE()"), xEnumerationAccess2->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("3"), xEnumerationAccess2->getPresentation(false).trim()); + + xmlDocUniquePtr pXmlDoc = parseExport(); + + // MEAN converted to AVERAGE + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc/w:p/w:r[2]/w:instrText", " =AVERAGE(A1:A2)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc/w:p/w:r[2]/w:instrText", " =AVERAGE(A1:A3)"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf116394, "tdf116394.docx") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + uno::Reference xEnumerationAccess(xFields->nextElement(), uno::UNO_QUERY); + + // Without the fix in place, this test would have failed with + // - Expected: ab=cd.. + // - Actual : abcd.. + CPPUNIT_ASSERT_EQUAL(OUString("ab=cd.."), xEnumerationAccess->getPresentation(true).trim()); + + xmlDocUniquePtr pXmlDoc = parseExport(); + if (!pXmlDoc) + return; + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/w:instrText", " MERGEFIELD ab=cd "); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123356, "tdf123356.fodt") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // Tests new cell formula COUNT + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("COUNT()"), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xEnumerationAccess1->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("COUNT()"), xEnumerationAccess2->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("4"), xEnumerationAccess2->getPresentation(false).trim()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf136404, "tdf136404.fodt") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // Ignore empty cells or cells with text content with new interoperability functions COUNT, AVERAGE and PRODUCT + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("COUNT()"), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("2"), xEnumerationAccess1->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AVERAGE()"), xEnumerationAccess2->getPresentation(true).trim()); + // This was 0 + CPPUNIT_ASSERT_EQUAL(OUString("** Expression is faulty **"), xEnumerationAccess2->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess3(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AVERAGE()"), xEnumerationAccess3->getPresentation(true).trim()); + // This was 0 + CPPUNIT_ASSERT_EQUAL(OUString("** Expression is faulty **"), xEnumerationAccess3->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess4(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("COUNT()"), xEnumerationAccess4->getPresentation(true).trim()); + // This was 2 + CPPUNIT_ASSERT_EQUAL(OUString("0"), xEnumerationAccess4->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess5(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("COUNT()"), xEnumerationAccess5->getPresentation(true).trim()); + // This was 1 + CPPUNIT_ASSERT_EQUAL(OUString("0"), xEnumerationAccess5->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess6(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("PRODUCT()"), xEnumerationAccess6->getPresentation(true).trim()); + // This was 0 + CPPUNIT_ASSERT_EQUAL(OUString("60"), xEnumerationAccess6->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess7(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AVERAGE()"), xEnumerationAccess7->getPresentation(true).trim()); + // This was 2 + CPPUNIT_ASSERT_EQUAL(OUString("8"), xEnumerationAccess7->getPresentation(false).trim()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf138739, "tdf138739.docx") +{ + uno::Reference xParaProps(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Font type name does not match!", OUString("Comic Sans MS"), + xParaProps->getPropertyValue("CharFontName").get()); + + // tdf#148565: text at anchor point should be bold, Comic Sans MS font + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty(getRun(getParagraph(5), 3), "CharWeight")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123390, "tdf123390.fodt") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // Tests new cell formula SIGN + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("SIGN()"), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("-1"), xEnumerationAccess1->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("SIGN()"), xEnumerationAccess2->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xEnumerationAccess2->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess3(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("SIGN()"), xEnumerationAccess3->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("0"), xEnumerationAccess3->getPresentation(false).trim()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123354, "tdf123354.fodt") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // Tests new cell formula SIGN + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("ABS()"), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("10"), xEnumerationAccess1->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("ABS()"), xEnumerationAccess2->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("10"), xEnumerationAccess2->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess3(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("ABS()"), xEnumerationAccess3->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("0"), xEnumerationAccess3->getPresentation(false).trim()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123355, "tdf123355.docx") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // Tests conversion of range IDs ABOVE, BELOW, LEFT and RIGHT + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + // Note: range ends at B4 here, which is a cell with text content + CPPUNIT_ASSERT_EQUAL(OUString("average( )"), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("5,5"), xEnumerationAccess1->getPresentation(false).trim()); + + // range ends at the end of the empty cells + uno::Reference xEnumerationAccess6(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("SUM()"), xEnumerationAccess6->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("0"), xEnumerationAccess6->getPresentation(false).trim()); + + // range starts at the first cell above D5 + uno::Reference xEnumerationAccess2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AVERAGE()"), xEnumerationAccess2->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("5,33"), xEnumerationAccess2->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess3(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AVERAGE()"), xEnumerationAccess3->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("3,5"), xEnumerationAccess3->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess4(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AVERAGE()"), xEnumerationAccess4->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("5"), xEnumerationAccess4->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess5(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AVERAGE()"), xEnumerationAccess5->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("4"), xEnumerationAccess5->getPresentation(false).trim()); + + xmlDocUniquePtr pXmlDoc = parseExport(); + if (!pXmlDoc) + return; + + // keep original formula IDs + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[2]/w:p/w:r[2]/w:instrText", " =average( below )"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[2]/w:p/w:r[2]/w:instrText", " =AVERAGE(LEFT)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[3]/w:p/w:r[2]/w:instrText", " =AVERAGE(RIGHT)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc[3]/w:p/w:r[2]/w:instrText", " =AVERAGE(ABOVE)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[5]/w:tc[4]/w:p/w:r[2]/w:instrText", " =AVERAGE(ABOVE)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[6]/w:tc[4]/w:p/w:r[2]/w:instrText", " =SUM(LEFT)"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123382, "tdf123382.docx") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // Tests conversion of range IDs ABOVE, BELOW, LEFT and RIGHT + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + // Note: range ends at B4 here, which is a cell with text content + CPPUNIT_ASSERT_EQUAL(OUString("MAX()"), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("12"), xEnumerationAccess1->getPresentation(false).trim()); + + // range ends at the end of the empty cells + uno::Reference xEnumerationAccess6(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("MAX()"), xEnumerationAccess6->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("9"), xEnumerationAccess6->getPresentation(false).trim()); + + // range starts at the first cell above D5 + uno::Reference xEnumerationAccess2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("SUM()"), xEnumerationAccess2->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("30"), xEnumerationAccess2->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess3(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("MAX()"), xEnumerationAccess3->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("7"), xEnumerationAccess3->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess4(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("MAX()"), xEnumerationAccess4->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("7"), xEnumerationAccess4->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess5(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("MAX()"), xEnumerationAccess5->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("12"), xEnumerationAccess5->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess7(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("MAX()"), xEnumerationAccess7->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("10"), xEnumerationAccess7->getPresentation(false).trim()); + + xmlDocUniquePtr pXmlDoc = parseExport(); + if (!pXmlDoc) + return; + + // keep original formula IDs + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:p/w:r[2]/w:instrText", " =MAX(RIGHT)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[1]/w:p/w:r[2]/w:instrText", " =MAX(RIGHT)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc[1]/w:p/w:r[2]/w:instrText", " =SUM(RIGHT)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[2]/w:p/w:r[2]/w:instrText", " =MAX(BELOW)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[4]/w:tc[2]/w:p/w:r[2]/w:instrText", " =MAX(RIGHT)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[4]/w:p/w:r[2]/w:instrText", " =MAX(BELOW)"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[4]/w:p/w:r[2]/w:instrText", " =MAX(LEFT)"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf122648, "tdf122648.docx") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // table formula conversion worked only in the first table + uno::Reference xEnumerationAccess1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), xEnumerationAccess1->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xEnumerationAccess1->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("SUM()"), xEnumerationAccess2->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("2"), xEnumerationAccess2->getPresentation(false).trim()); + + // These were and SUM() with zero values + uno::Reference xEnumerationAccess3(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), xEnumerationAccess3->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xEnumerationAccess3->getPresentation(false).trim()); + + uno::Reference xEnumerationAccess4(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("SUM()"), xEnumerationAccess4->getPresentation(true).trim()); + CPPUNIT_ASSERT_EQUAL(OUString("2"), xEnumerationAccess4->getPresentation(false).trim()); + + xmlDocUniquePtr pXmlDoc = parseExport(); + if (!pXmlDoc) + return; + + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl[1]/w:tr[1]/w:tc[2]/w:p/w:r[2]/w:instrText", " =A1"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl[1]/w:tr[2]/w:tc[2]/w:p/w:r[2]/w:instrText", " =SUM(A1:B1)"); + // These were = and =SUM() + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl[2]/w:tr[1]/w:tc[2]/w:p/w:r[2]/w:instrText", " =A1"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:tbl[2]/w:tr[2]/w:tc[2]/w:p/w:r[2]/w:instrText", " =SUM(A1:B1)"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf98000_changePageStyle, "tdf98000_changePageStyle.odt") +{ + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY); + + uno::Reference xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY_THROW); + OUString sPageOneStyle = getProperty( xCursor, "PageStyleName" ); + + xCursor->jumpToNextPage(); + OUString sPageTwoStyle = getProperty( xCursor, "PageStyleName" ); + CPPUNIT_ASSERT_MESSAGE("Different page1/page2 styles", sPageOneStyle != sPageTwoStyle); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135216_evenOddFooter, "tdf135216_evenOddFooter.odt") +{ + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY); + uno::Reference xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY); + + // get LO page style for the first page (even page #2) + OUString pageStyleName = getProperty(xCursor, "PageStyleName"); + uno::Reference xPageStyles = getStyles("PageStyles"); + uno::Reference xPageStyle(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY); + + xCursor->jumpToFirstPage(); // Even/Left page #2 + uno::Reference xFooter = getProperty>(xPageStyle, "FooterTextLeft"); + CPPUNIT_ASSERT_EQUAL(OUString("even page"), xFooter->getString()); + + xCursor->jumpToNextPage(); + pageStyleName = getProperty(xCursor, "PageStyleName"); + xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY); + xFooter.set(getProperty>(xPageStyle, "FooterTextFirst")); + CPPUNIT_ASSERT_EQUAL(OUString("odd page - first footer"), xFooter->getString()); + + xCursor->jumpToNextPage(); + pageStyleName = getProperty(xCursor, "PageStyleName"); + xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY); + xFooter.set(getProperty>(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"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf136929_framesOfParagraph, "tdf136929_framesOfParagraph.odt") +{ + // Before this fix, the image was placed in the footer instead of in the text body - messing everything up. + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 5, getPages() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Header2 text", OUString("* | *"), parseDump("/root/page[4]/footer/txt")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf136589_paraHadField, "tdf136589_paraHadField.docx") +{ + // The section break should not add an additional CR - which equals an empty page two. + CPPUNIT_ASSERT_EQUAL(2, getPages()); + + //tdf#118711 - don't explicitly specify the default page style at the beginning of the document + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(uno::Any(), xPara->getPropertyValue("PageDescName")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf133370_columnBreak, "tdf133370_columnBreak.odt") +{ + // Since non-DOCX formats ignores column breaks in non-column situations, don't export to docx. + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf134649_pageBreak, "tdf134649_pageBreak.fodt") +{ + // This was 1 (missing page break between tables). + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135343_columnSectionBreak_c14, "tdf135343_columnSectionBreak_c14.docx") +{ + uno::Reference xTextSection = getProperty>(getParagraph(1), "TextSection"); + uno::Reference xTextColumns = getProperty>(xTextSection, "TextColumns"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section one's columns", sal_Int16(2), xTextColumns->getColumnCount()); + + // Old Word 2010 version - nextColumn breaks inside column sections are just treated as regular column breaks. + //xTextSection = getProperty>(getParagraph(12, "RTL 2"), "TextSection"); + //xTextColumns = getProperty>(xTextSection, "TextColumns"); + //CPPUNIT_ASSERT_EQUAL_MESSAGE("Section four's columns", sal_Int16(3), xTextColumns->getColumnCount()); + //CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135973, "tdf135973.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + { + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2."), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(6), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2."), getProperty(xPara, "ListLabelString")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135343_columnSectionBreak_c14v2, "tdf135343_columnSectionBreak_c14v2.docx") +{ + // In this Word 2010 v2, section three was changed to start with a nextColumn break instead of a continuous break. + // The previous section has no columns, so this time start the columns on a new page. + uno::Reference xTextSection = getProperty>(getParagraph(10, ""), "TextSection"); + uno::Reference xTextColumns = getProperty>(xTextSection, "TextColumns"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section three's columns", sal_Int16(3), xTextColumns->getColumnCount()); + //CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135343_columnSectionBreak_c12v3, "tdf135343_columnSectionBreak_c12v3.docx") +{ + // In this Word 20-3 v3, section one and two have different number of columns. It acts like a page break. + uno::Reference xTextSection = getProperty>(getParagraph(1, "Four columns,"), "TextSection"); + uno::Reference xTextColumns = getProperty>(xTextSection, "TextColumns"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section one's columns", sal_Int16(4), xTextColumns->getColumnCount()); + + xTextSection = getProperty>(getParagraph(6, "RTL 2"), "TextSection"); + xTextColumns = getProperty>(xTextSection, "TextColumns"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section two's columns", sal_Int16(2), xTextColumns->getColumnCount()); + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135343_columnSectionBreak_c15, "tdf135343_columnSectionBreak_c15.docx") +{ + // Word 2013+ version - nextColumn breaks inside column sections are always handled like nextPage breaks. + uno::Reference xTextSection = getProperty>(getParagraph(12, "RTL 2"), "TextSection"); + uno::Reference xTextColumns = getProperty>(xTextSection, "TextColumns"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section four's columns", sal_Int16(3), xTextColumns->getColumnCount()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Fits on two pages", 2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf121669_equalColumns, "tdf121669_equalColumns.docx") +{ + uno::Reference xTextSection = getProperty< uno::Reference >(getParagraph(1), "TextSection"); + CPPUNIT_ASSERT(xTextSection.is()); + uno::Reference xTextColumns = getProperty< uno::Reference >(xTextSection, "TextColumns"); + // The property was ignored when deciding at export whether the columns were equal or not. Layout isn't reliable. + CPPUNIT_ASSERT(getProperty(xTextColumns, "IsAutomatic")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf132149_pgBreak, "tdf132149_pgBreak.odt") +{ + // This 5 page document is designed to visually exaggerate the problems + // of emulating LO's followed-by-page-style into MSWord's sections. + // While much has been improved, there are extra pages present, which still need fixing. + xmlDocUniquePtr pDump = parseLayoutDump(); + + // No header on pages 1,2,3. + assertXPath(pDump, "//page[2]/header", 0); + + // Margins/page orientation between Right and Left page styles are different + assertXPath(pDump, "//page[1]/infos/prtBounds", "left", "1134"); //Right page style + assertXPath(pDump, "//page[2]/infos/prtBounds", "left", "2268"); //Left page style + + assertXPath(pDump, "//page[1]/infos/bounds", "width", "8391"); //landscape + assertXPath(pDump, "//page[2]/infos/bounds", "width", "5953"); //portrait + // This two-line 3rd page ought not to exist. DID YOU FIX ME? The real page 3 should be "8391" landscape. + assertXPath(pDump, "//page[3]/infos/bounds", "width", "5953"); + // This really ought to be on odd page 3, but now it is on odd page 5. + assertXPath(pDump, "//page[5]/infos/bounds", "width", "8391"); + assertXPath(pDump, "//page[5]/infos/prtBounds", "right", "6122"); //Left page style + + + //Page style change here must not be lost. This SHOULD be on page 4, but sadly it is not. + assertXPathContent(pDump, "//page[6]/header/txt", "First Page Style"); + CPPUNIT_ASSERT(getXPath(pDump, "//page[6]/body/txt[1]/Text[1]", "Portion").startsWith("Lorem ipsum")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf132149_pgBreakB, "tdf132149_pgBreakB.odt") +{ + // This 5 page document is designed to visually exaggerate the problems + // of emulating LO's followed-by-page-style into MSWord's sections. + xmlDocUniquePtr pDump = parseLayoutDump(); + + //Sanity check to ensure the correct page is being tested. This SHOULD be on page 3, but sadly it is not. + CPPUNIT_ASSERT(getXPath(pDump, "//page[5]/body/txt[1]/Text[1]", "Portion").startsWith("Lorem ipsum")); + //Prior to this fix, the original alternation between portrait and landscape was completely lost. + assertXPath(pDump, "//page[5]/infos/bounds", "width", "8391"); //landscape +} + +DECLARE_OOXMLEXPORT_TEST(testTdf132149_pgBreak2, "tdf132149_pgBreak2.odt") +{ + // This 3 page document is designed to visually exaggerate the problems + // of emulating LO's followed-by-page-style into MSWord's sections. + + // The only specified page style change should be between page 1 and 2. + // When the first paragraph was split into 3, each paragraph specified a page break. The last was unnecessary. + uno::Reference xParaThree(getParagraph(3), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(uno::Any(), xParaThree->getPropertyValue("PageDescName")); + // The ODT is only 2 paragraphs, but a hack to get the right page style breaks para1 into pieces. + // This was 4 paragraphs - the unnecessary page break had hacked in another paragraph split. + CPPUNIT_ASSERT_LESSEQUAL( 3, getParagraphs() ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf136952_pgBreak3B, "tdf136952_pgBreak3B.odt") +{ + // This 4 page document is designed to visually exaggerate the problems + // of emulating LO's followed-by-page-style into MSWord's sections. + xmlDocUniquePtr pDump = parseLayoutDump(); + + //page::breakAfter must not be lost. + //Prior to this bug fix, the Lorem ipsum paragraph was in the middle of a portrait page, with no switch to landscape occurring. + CPPUNIT_ASSERT(getXPath(pDump, "//page[3]/body/txt[1]/Text[1]", "Portion").startsWith("Lorem ipsum")); + assertXPath(pDump, "//page[3]/infos/bounds", "width", "8391"); //landscape +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135949_anchoredBeforeBreak, "tdf135949_anchoredBeforeBreak.docx") +{ + xmlDocUniquePtr pDump = parseLayoutDump(); + //The picture was shown on page 2, because the empty paragraph before the page break was removed + assertXPath(pDump, "//page[1]/body/txt/anchored/fly", 1); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf129452_excessBorder, "tdf129452_excessBorder.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY_THROW); + + // The outside border should not be applied on inside cells. The merge doesn't extend to the table bottom. + // [Note: as humans, we would call this cell D3, but since row 4 hasn't been analyzed yet, it is considered column C.] + table::BorderLine2 aBorder = getProperty(xTable->getCellByName("C3"), "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("No bottom border on merged cell", sal_uInt32(0), aBorder.LineWidth); + + // [Note: as humans, we would call this cell C3, but since row 4 hasn't been analyzed yet, it is considered column B.] + aBorder = getProperty(xTable->getCellByName("B3"), "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("No bottom border on merged cell", sal_uInt32(0), aBorder.LineWidth); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf132898_missingBorder, "tdf132898_missingBorder.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + // The bottom border from the last merged cell was not showing + table::BorderLine2 aBorder = getProperty(xTable->getCellByName("A1"), "BottomBorder"); + CPPUNIT_ASSERT_MESSAGE("Bottom border on merged cell", aBorder.LineWidth > 0); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf132898_extraBorder, "tdf132898_extraBorder.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + // A border defined on an earlier merged cell was showing + table::BorderLine2 aBorder = getProperty(xTable->getCellByName("C1"), "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("No bottom border on merged cell", sal_uInt32(0), aBorder.LineWidth); + // MS Word is interesting here. 2/3 of the merged cell has the right border, so what to do? + aBorder = getProperty(xTable->getCellByName("C1"), "RightBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("No right border on merged cell", sal_uInt32(0), aBorder.LineWidth); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf131561_necessaryBorder, "tdf131561_necessaryBorder.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + // Hand-crafted pre-emptive test to make sure borders aren't lost. + // MS Word is interesting here. 2/3 of the merged cell has the right border, so what to do? + table::BorderLine2 aBorderR = getProperty(xTable->getCellByName("A1"), "RightBorder"); + table::BorderLine2 aBorderL = getProperty(xTable->getCellByName("B1"), "LeftBorder"); + CPPUNIT_ASSERT_MESSAGE("Border between A1 and B1", (aBorderR.LineWidth + aBorderL.LineWidth) > 0); + aBorderR = getProperty(xTable->getCellByName("A3"), "RightBorder"); + aBorderL = getProperty(xTable->getCellByName("B3"), "LeftBorder"); + CPPUNIT_ASSERT_MESSAGE("Border between A3 and B3", (aBorderR.LineWidth + aBorderL.LineWidth) > 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf135655) +{ + loadAndSave("tdf135655.odt"); + const xmlDocUniquePtr pExpDoc = parseExport(); + const OUString sXFillColVal = getXPath(pExpDoc, "/w:document/w:body/w:p/w:r/w:object/v:shape", "fillcolor"); + CPPUNIT_ASSERT_EQUAL(OUString("#00A933"), sXFillColVal); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf138374) +{ + loadAndSave("tdf138374.odt"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:pict/v:shape", "fillcolor", "#ffd320"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:pict/v:shape", "coordsize", "1315,6116"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:pict/v:shape", "path", + "m0,0l1314,0l1314,5914l416,5914l416,6115l106,5715l416,5415l416,5715l1014,5715l1014,224l0,224l0,16l0,0e"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:pict/v:shape", "style", + "position:absolute;margin-left:394.3pt;margin-top:204pt;width:37.2pt;height:173.3pt;mso-wrap-style:none;v-text-anchor:middle"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf134609_gridAfter, "tdf134609_gridAfter.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + // Table borders (width 159) apply to edge cells, even in uneven cases caused by gridBefore/gridAfter, + table::BorderLine2 aBorder = getProperty(xTable->getCellByName("A1"), "RightBorder"); + CPPUNIT_ASSERT_MESSAGE("Right border before gridAfter cells", aBorder.LineWidth > 0); + aBorder = getProperty(xTable->getCellByName("E2"), "LeftBorder"); + CPPUNIT_ASSERT_MESSAGE("Left edge border after gridBefore cells", aBorder.LineWidth > 100); + aBorder = getProperty(xTable->getCellByName("E2"), "TopBorder"); + // but only for left/right borders, not top and bottom. + // So somewhat inconsistently, gridBefore/After affects outside edges of columns, but not of rows. + // insideH borders are width 53. (no insideV borders defined to emphasize missing edge borders) + CPPUNIT_ASSERT_MESSAGE("Top border on 'inside' cell", aBorder.LineWidth > 0); + CPPUNIT_ASSERT_MESSAGE("Top border is not an edge border", aBorder.LineWidth < 100); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135329_lostImage, "tdf135329_lostImage.odt") +{ + // the character-anchored image was being skipped, since searchNext didn't notice it. + uno::Reference xImageProps(getShape(2), uno::UNO_QUERY_THROW); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf136441_commentInFootnote) +{ + loadAndReload("tdf136441_commentInFootnote.odt"); + // failed to load without error if footnote contained a comment. + // (MS Word's UI doesn't allow adding comments to a footnote.) +} + +DECLARE_OOXMLEXPORT_TEST(testTdf137683_charHighlightTests, "tdf137683_charHighlightTests.docx") +{ + // Don't export unnecessary w:highlight="none" (Unnecessary one intentionally hand-added to original .docx) + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + if (pXmlStyles) + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Normal']/w:rPr/w:highlight", 0); + + uno::Reference xRun(getRun(getParagraph(10), 2, "no highlight"), uno::UNO_QUERY_THROW); + // This test was failing with a cyan charHighlight of 65535 (0x00FFFF), instead of COL_TRANSPARENT (0xFFFFFFFF) + CPPUNIT_ASSERT_EQUAL(static_cast(COL_AUTO), getProperty(xRun, "CharHighlight")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf138345_charStyleHighlight, "tdf138345_charStyleHighlight.docx") +{ + // MS Word ignores the w:highlight setting in character styles. So shall we. + // Without the fix, there would be an orange or yellow background on some words. + const uno::Reference xRun(getRun(getParagraph(1), 2, "orange background"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(COL_TRANSPARENT), getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL(static_cast(COL_TRANSPARENT), getProperty(xRun,"CharBackColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf125268, "tdf125268.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + const uno::Reference xRun(getRun(getParagraph(1), 1, "Hello"), uno::UNO_QUERY); + // Without the fix in place, this test would have failed with + // - Expected: -1 + // - Actual : 0 + CPPUNIT_ASSERT_EQUAL(static_cast(COL_TRANSPARENT), getProperty(xRun,"CharHighlight")); + CPPUNIT_ASSERT_EQUAL(static_cast(COL_BLACK), getProperty(xRun,"CharBackColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf138345_numberingHighlight) +{ + loadAndSave("tdf138345_numberingHighlight.docx"); + // Before the fix, the highlight was completely lost. + xmlDocUniquePtr pXmlStyles = parseExport("word/numbering.xml"); + if (pXmlStyles) + assertXPath(pXmlStyles, "/w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:rPr/w:highlight", "val", "red"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf134063, "tdf134063.docx") +{ + CPPUNIT_ASSERT_EQUAL(2, getPages()); + + xmlDocUniquePtr pDump = parseLayoutDump(); + + // There are three tabs with default width + CPPUNIT_ASSERT_EQUAL(sal_Int32(720), getXPath(pDump, "//page[1]/body/txt[1]/Text[1]", "nWidth").toInt32()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(720), getXPath(pDump, "//page[1]/body/txt[1]/Text[2]", "nWidth").toInt32()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(720), getXPath(pDump, "//page[1]/body/txt[1]/Text[3]", "nWidth").toInt32()); +} + +DECLARE_OOXMLEXPORT_TEST(TestTdf135653, "tdf135653.docx") +{ + uno::Reference xOLEProps(getShape(1), uno::UNO_QUERY_THROW); + drawing::FillStyle nFillStyle = static_cast(-1); + xOLEProps->getPropertyValue("FillStyle") >>= nFillStyle; + Color aFillColor(COL_AUTO); + xOLEProps->getPropertyValue("FillColor") >>= aFillColor; + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Fill style setting does not match!", + drawing::FillStyle::FillStyle_SOLID, nFillStyle); + Color aExpectedColor; + aExpectedColor.SetRed(255); + aExpectedColor.SetGreen(0); + aExpectedColor.SetBlue(0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("OLE bg color does not match!", aExpectedColor, aFillColor); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135665, "tdf135665.docx") +{ + uno::Reference xOLEProps1(getShape(1), uno::UNO_QUERY_THROW); + uno::Reference xOLEProps2(getShape(2), uno::UNO_QUERY_THROW); + bool bSurroundContour1 = false; + bool bSurroundContour2 = false; + xOLEProps1->getPropertyValue("SurroundContour") >>= bSurroundContour1; + xOLEProps2->getPropertyValue("SurroundContour") >>= bSurroundContour2; + + CPPUNIT_ASSERT_EQUAL_MESSAGE("OLE tight wrap setting not imported correctly", true, bSurroundContour1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("OLE tight wrap setting not imported correctly", false, bSurroundContour2); +} + +CPPUNIT_TEST_FIXTURE(Test, testAtPageShapeRelOrientation) +{ + loadAndSave("rotated_shape.fodt"); + // invalid combination of at-page anchor and horizontal-rel="paragraph" + // caused relativeFrom="column" instead of relativeFrom="page" + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + assertXPathContent(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor" + "/wp:positionH/wp:posOffset", "-480060"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor" + "/wp:positionH", "relativeFrom", "page"); + assertXPathContent(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor" + "/wp:positionV/wp:posOffset", "8147685"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor" + "/wp:positionV", "relativeFrom", "page"); + + // same for sw + assertXPathContent(pXmlDocument, "/w:document/w:body/w:p/w:r/w:drawing/wp:anchor" + "/wp:positionH/wp:posOffset", "720090"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/w:drawing/wp:anchor" + "/wp:positionH", "relativeFrom", "page"); + assertXPathContent(pXmlDocument, "/w:document/w:body/w:p/w:r/w:drawing/wp:anchor" + "/wp:positionV/wp:posOffset", "1080135"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/w:drawing/wp:anchor" + "/wp:positionV", "relativeFrom", "page"); + + // now test text rotation -> VML writing direction + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Fallback/w:pict/v:shape/v:textbox", "style", "mso-layout-flow-alt:bottom-to-top"); + // text wrap -> VML + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Fallback/w:pict/v:shape/w10:wrap", "type", "none"); + // vertical alignment -> VML + OUString const style = getXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Fallback/w:pict/v:shape", "style"); + CPPUNIT_ASSERT(style.indexOf("v-text-anchor:middle") != -1); +} + +CPPUNIT_TEST_FIXTURE(Test, testVMLallowincell) +{ + loadAndSave("shape-atpage-in-table.fodt"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + // VML o:allowincell, apparently the default is "t" + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl[1]/w:tr[1]/w:tc[1]/w:p[1]/w:r/mc:AlternateContent[1]/mc:Fallback/w:pict/v:shape", "allowincell", "f"); + + // DML layoutInCell + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl[1]/w:tr[1]/w:tc[1]/w:p[1]/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor", "layoutInCell", "0"); +} + +CPPUNIT_TEST_FIXTURE(Test, testRelativeAnchorHeightFromBottomMarginHasFooter) +{ + loadAndSave("tdf133070_testRelativeAnchorHeightFromBottomMarginHasFooter.docx"); + // tdf#133070 The height was set relative to page print area bottom, + // but this was handled relative to page height. + // Note: page print area bottom = margin + footer height. + // In this case the footer exists. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds", "height", "1147"); +} + +DECLARE_OOXMLEXPORT_TEST(TestTdf132483, "tdf132483.docx") +{ + uno::Reference xOLEProps(getShape(1), uno::UNO_QUERY_THROW); + sal_Int16 nVRelPos = -1; + sal_Int16 nHRelPos = -1; + xOLEProps->getPropertyValue("VertOrientRelation") >>= nVRelPos; + xOLEProps->getPropertyValue("HoriOrientRelation") >>= nHRelPos; + CPPUNIT_ASSERT_EQUAL_MESSAGE("The OLE is shifted vertically", + text::RelOrientation::PAGE_FRAME , nVRelPos); + CPPUNIT_ASSERT_EQUAL_MESSAGE("The OLE is shifted horizontally", + text::RelOrientation::PAGE_FRAME , nHRelPos); +} + +CPPUNIT_TEST_FIXTURE(Test, TestTdf143028) +{ + loadAndSave("fail_bracePair.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto pExportXml = parseExport(); + + CPPUNIT_ASSERT_EQUAL(1, getXPathNode( + pExportXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/" + "a:graphic/a:graphicData/wps:wsp/wps:spPr/a:xfrm")->nodesetval->nodeNr); + +} + +CPPUNIT_TEST_FIXTURE(Test, testRelativeAnchorHeightFromBottomMarginNoFooter) +{ + loadAndSave("tdf133070_testRelativeAnchorHeightFromBottomMarginNoFooter.docx"); + // tdf#133070 The height was set relative to page print area bottom, + // but this was handled relative to page height. + // Note: page print area bottom = margin + footer height. + // In this case the footer does not exist, so OpenDocument and OOXML margins are the same. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds", "height", "1147"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf133702) +{ + loadAndSave("tdf133702.docx"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[1]/w:pPr/w:framePr"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf135667) +{ + loadAndSave("tdf135667.odt"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + // This was missing. + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:object/v:shapetype"); + + // line settings + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:object/v:shape", "stroked", "t"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:object/v:shape", "strokecolor", "#FF0000"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:object/v:shape", "strokeweight", "4pt"); + + // line type + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:object/v:shape/v:stroke", "linestyle", "Single"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:r/w:object/v:shape/v:stroke", "dashstyle", "Dash"); +} + +CPPUNIT_TEST_FIXTURE(Test, testImageSpaceSettings) +{ + loadAndSave("tdf135047_ImageSpaceSettings.fodt"); + // tdf#135047 The spaces of image were not saved. + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/w:drawing/wp:anchor", "distT", "90170"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/w:drawing/wp:anchor", "distB", "90170"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/w:drawing/wp:anchor", "distL", "90170"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/w:drawing/wp:anchor", "distR", "90170"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf137295, "tdf137295.doc") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + // Without the fix in place, the test would have failed with + // - Expected: 2 + // - Actual : 1 + CPPUNIT_ASSERT_EQUAL(2, getShapes()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135660, "tdf135660.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + const uno::Reference xShape = getShape(1); + const uno::Reference xOLEProps(xShape, uno::UNO_QUERY_THROW); + sal_Int32 nWrapDistanceLeft = -1; + sal_Int32 nWrapDistanceRight = -1; + sal_Int32 nWrapDistanceTop = -1; + sal_Int32 nWrapDistanceBottom = -1; + xOLEProps->getPropertyValue("LeftMargin") >>= nWrapDistanceLeft; + xOLEProps->getPropertyValue("RightMargin") >>= nWrapDistanceRight; + xOLEProps->getPropertyValue("TopMargin") >>= nWrapDistanceTop; + xOLEProps->getPropertyValue("BottomMargin") >>= nWrapDistanceBottom; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Left wrap distance is wrong", static_cast(0), nWrapDistanceLeft); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Right wrap distance is wrong", static_cast(400), nWrapDistanceRight); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Top wrap distance is wrong", static_cast(300), nWrapDistanceTop); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Bottom wrap distance is wrong", static_cast(199), nWrapDistanceBottom); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf136814) +{ + loadAndSave("tdf136814.odt"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + // Padding in this document is 0.10 cm which should translate to 3 pt (approx. 1.0583mm) + assertXPath(pXmlDocument, "/w:document/w:body/w:sectPr/w:pgBorders/w:top", "space", "3"); + assertXPath(pXmlDocument, "/w:document/w:body/w:sectPr/w:pgBorders/w:left", "space", "3"); + assertXPath(pXmlDocument, "/w:document/w:body/w:sectPr/w:pgBorders/w:bottom", "space", "3"); + assertXPath(pXmlDocument, "/w:document/w:body/w:sectPr/w:pgBorders/w:right", "space", "3"); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx new file mode 100644 index 000000000..c44d1a8c0 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx @@ -0,0 +1,1045 @@ +/* -*- 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 + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/ooxmlexport/data/"; + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase(DATA_DIRECTORY, "Office Open XML Text") {} + +virtual std::unique_ptr preTest(const char* filename) override + { + if (filename == std::string_view("tdf135774_numberingShading.docx")) + { + bool bIsExportAsShading = SvtFilterOptions::Get().IsCharBackground2Shading(); + // This function is run at the end of the test - returning the filter options to normal. + std::unique_ptr pResetter(new Resetter( + [bIsExportAsShading] () { + if (bIsExportAsShading) + SvtFilterOptions::Get().SetCharBackground2Shading(); + })); + // For these tests, ensure exporting CharBackground as w:highlight. + SvtFilterOptions::Get().SetCharBackground2Highlighting(); + return pResetter; + } + return nullptr; + } + +protected: + /** + * Denylist handling + */ + bool mustTestImportOf(const char* filename) const override { + // If the testcase is stored in some other format, it's pointless to test. + return o3tl::ends_with(filename, ".docx"); + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testTdf143860NonPrimitiveCustomShape) +{ + loadAndReload("tdf143860_NonPrimitiveCustomShape.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The document has a custom shape of type non-primitive without handles. Make sure that the shape + // is not exported with preset but with custom geometry. + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDocument); + assertXPath(pXmlDocument, "//a:prstGeom", 0); + assertXPath(pXmlDocument, "//a:custGeom", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testWrapPolygonCurve) +{ + loadAndSave("tdf136386_WrapPolygonCurve.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Document has a curve with contour wrap and 'outside only'. Error was, that type 'square' was + // written and no wrap polygon. Make sure we write wrapTight and a wrapPolygon. + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDocument); + assertXPath(pXmlDocument, "//wp:wrapTight", 1); + assertXPath(pXmlDocument, "//wp:wrapPolygon", 1); + assertXPath(pXmlDocument, "//wp:start", 1); + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDocument, "//wp:lineTo"); + CPPUNIT_ASSERT_GREATER(sal_Int32(2), + static_cast(xmlXPathNodeSetGetLength(pXmlObj->nodesetval))); + xmlXPathFreeObject(pXmlObj); +} + +CPPUNIT_TEST_FIXTURE(Test, testWrapPolygonLineShape) +{ + loadAndSave("tdf136386_WrapPolygonLineShape.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Document has a sloping line with contour wrap. Error was, that type 'square' was written and + // no wrap polygon. Now we write 'through' and use wrap polygon 0|0, 21600|21600, 0|0. + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDocument); + assertXPath(pXmlDocument, "//wp:wrapThrough", 1); + assertXPath(pXmlDocument, "//wp:lineTo", 2); + sal_Int32 nYCoord = getXPath(pXmlDocument, "(//wp:lineTo)[1]", "y").toInt32(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(21600), nYCoord); + sal_Int32 nXCoord = getXPath(pXmlDocument, "(//wp:lineTo)[2]", "x").toInt32(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nXCoord); +} + +CPPUNIT_TEST_FIXTURE(Test, testWrapPolygonCustomShape) +{ + loadAndReload("tdf142433_WrapPolygonCustomShape.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Document has 4-point star with contour wrap. Error was, that the enhanced path was written + // literally as wrap polygon. But that does not work, because path might have links to equations + // and handles and not only numbers. + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDocument); + // Expected coordinates are 0|10800, 8936|8936, 10800|0, 12664|8936, 21600|10800, 12664|12664, + // 10800|21600, 8936|12664, 0|10800. Assert forth point, which comes from equations. Allow some + // tolerance. + sal_Int32 nXCoord = getXPath(pXmlDocument, "(//wp:lineTo)[3]", "x").toInt32(); + // Without fix it would fail with expected 12664, actual 3 + CPPUNIT_ASSERT_DOUBLES_EQUAL(12664, nXCoord, 10); + // Without fix it would fail with expected 8936, actual 4 + sal_Int32 nYCoord = getXPath(pXmlDocument, "(//wp:lineTo)[3]", "y").toInt32(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(8936, nYCoord, 10); +} + +CPPUNIT_TEST_FIXTURE(Test, testFrameWrapTextMode) +{ + loadAndSave("tdf143432_Frame_WrapTextMode.odt"); + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDocument); + // Without the fix the value "largest" was written to file in both cases. + assertXPath(pXmlDocument, "(//wp:wrapSquare)[1]", "wrapText", "right"); + assertXPath(pXmlDocument, "(//wp:wrapSquare)[2]", "wrapText", "left"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf134219ContourWrap_glow_rotate) +{ + auto verify = [this]() { + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(1461), + getProperty(getShape(1), "LeftMargin"), 2); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(1302), + getProperty(getShape(1), "RightMargin"), 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(1522), + getProperty(getShape(1), "TopMargin"), 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(1296), + getProperty(getShape(1), "BottomMargin"), 1); + }; + // Given a document with a shape with contour wrap, that has glow effect and rotation. + load(mpTestDocumentPath, "tdf143219ContourWrap_glow_rotate.docx"); + + // Error was, that the margins, which were added on import to approximate Word's rendering of + // contour wrap, contained the effect extent for rotation. But LibreOffice extents the wrap + // distance automatically. The distance was too large on first load and because the extent was + // not removed on export, much larger on reload. + // Test fails on reload without fix with left: expected 1461 actual 2455; right: expected 1302 + // actual 4177; top: expected 1522 actual 2457; bottom: expected 1296, actual 4179 + verify(); + reload(mpFilter, "tdf143219ContourWrap_glow_rotate.docx"); + verify(); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf134219ContourWrap_stroke_shadow) +{ + auto verify = [this]() { + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(318), + getProperty(getShape(1), "LeftMargin"), 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(1164), + getProperty(getShape(1), "RightMargin"), 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(318), + getProperty(getShape(1), "TopMargin"), 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(1164), + getProperty(getShape(1), "BottomMargin"), 1); + }; + // Given a document with a shape with contour wrap, that has a fat stroke and large shadow. + load(mpTestDocumentPath, "tdf143219ContourWrap_stroke_shadow.docx"); + + // Error was, that the margins, which were added on import to approximate Word's rendering of + // contour wrap, were not removed on export and so used twice on reload. + // Test after reload would fail without fix with + // left, top: expected 318 actual 635; right, bottom: expected 1164 actual 2434 + verify(); + reload(mpFilter, "tdf143219ContourWrap_stroke_shadow.docx"); + verify(); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123569_rotWriterImage, "tdf123569_rotWriterImage_46deg.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + uno::Reference xFrame(getShape(1), uno::UNO_QUERY); + // Error was, that position of logical rectangle was treated as position of snap rectangle. + // Thus a wrong position was calculated. + // Without fix this would have failed with expected 4798, actual 4860 + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(4798), + getProperty(xFrame, "HoriOrientPosition"), 1); + // Without fix this would have failed with expected 1438, actual 4062 + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(1438), + getProperty(xFrame, "VertOrientPosition"), 1); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf142486_LeftMarginShadowLeft, "tdf142486_LeftMarginShadowLeft.docx") +{ + uno::Reference xFrame(getShape(1), uno::UNO_QUERY); + // Error was, that the shadow distance appeared as additional margin. + // Without fix this would have failed with expected 953, actual 2822 + // Margin is 36px (= 952.5Hmm) in Word. + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(953), getProperty(xFrame, "LeftMargin"), 1); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf66039, "tdf66039.docx") +{ + // This bugdoc has a groupshape (WPG) with a table inside its each member shape. + // Before there was no table after import at all. From now, there must be 2 tables. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + // This was 0 before: + CPPUNIT_ASSERT_EQUAL_MESSAGE("Where are the tables?!", static_cast(2), + xTables->getCount()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf142486_FrameShadow, "tdf142486_FrameShadow.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xTextViewCursorSupplier( + xModel->getCurrentController(), uno::UNO_QUERY_THROW); + uno::Reference xViewCursor(xTextViewCursorSupplier->getViewCursor()); + xViewCursor->gotoStart(/*bExpand=*/false); + uno::Reference xCursor(xViewCursor, uno::UNO_QUERY); + xCursor->goDown(/*nCount=*/3, /*bExpand=*/false); + xViewCursor->goRight(/*nCount=*/1, /*bExpand=*/true); + OUString sText = xViewCursor->getString(); + // Without fix in place, the frame size including shadow width was exported as object size. On + // import the shadow width was added as wrap "distance from text". That results in totally + // different wrapping of the surrounding text. + // Here line started with "x" instead of expected "e". + CPPUNIT_ASSERT(sText.startsWith("e")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf136059, "tdf136059.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Contour has not been exported!", true, + getProperty(getShape(1), "SurroundContour")); + // With the fix this shall pass, see tdf136059. +} + +DECLARE_OOXMLEXPORT_TEST(testTdf138892_noNumbering, "tdf138892_noNumbering.docx") +{ + CPPUNIT_ASSERT_MESSAGE("Para1: Bullet point", !getProperty(getParagraph(1), "NumberingStyleName").isEmpty()); + CPPUNIT_ASSERT_MESSAGE("Para2: ", getProperty(getParagraph(2), "NumberingStyleName").isEmpty()); + CPPUNIT_ASSERT_MESSAGE("Para3: ", getProperty(getParagraph(3), "NumberingStyleName").isEmpty()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf44278, "tdf44278.docx") +{ + // Without the fix in place, this test would have failed with + // - Expected: 1 + // - Actual : 2 + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf137742, "tdf137742.docx") +{ + lang::Locale locale( + getProperty(getParagraph(1), "CharLocale")); + CPPUNIT_ASSERT_EQUAL(OUString("en"), locale.Language); + + // Without the fix in place, this test would have failed with + // - Expected: US + // - Actual : + CPPUNIT_ASSERT_EQUAL(OUString("US"), locale.Country); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf141231_arabicHebrewNumbering, "tdf141231_arabicHebrewNumbering.docx") +{ + // The page's numbering type: instead of Hebrew, this was default style::NumberingType::ARABIC (4). + auto nActual = getProperty(getStyles("PageStyles")->getByName("Standard"), "NumberingType"); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::NUMBER_HEBREW, nActual); + + // The footnote numbering type: instead of arabicAbjad, this was the default style::NumberingType::ARABIC. + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnoteSettings = xFootnotesSupplier->getFootnoteSettings(); + nActual = getProperty(xFootnotesSupplier->getFootnoteSettings(), "NumberingType"); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::CHARS_ARABIC_ABJAD, nActual); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf141966_chapterNumbering, "tdf141966_chapterNumbering.docx") +{ + uno::Reference xNumberingSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xNumberingRules = xNumberingSupplier->getChapterNumberingRules(); + comphelper::SequenceAsHashMap hashMap(xNumberingRules->getByIndex(0)); + + CPPUNIT_ASSERT(hashMap["HeadingStyleName"].get().match("CN1")); + + uno::Reference xPara(getParagraph(7, "Direct formatting with \"Outline\" numbering."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2nd"), getProperty(xPara, "ListLabelString")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf141966_chapterNumberTortureTest, "tdf141966_chapterNumberTortureTest.docx") +{ + // There is no point in identifying what the wrong values where in this test, + //because EVERYTHING was wrong, and MANY different fixes are required to solve the problems. + uno::Reference xPara(getParagraph(1, "No numId in style or paragraph"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(2, "Paragraph cancels numbering(0)"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(3, "First numbered line"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1st.i.a.1.I"), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(5, "Outline with listLvl 5"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(7, "inheritOnly: inherit outlineLvl and listLvl."), uno::UNO_QUERY); + // 2nd.iii in MS Word 2003. 2nd.ii in MS Word 2010/2016 where para5 is not numbered. + CPPUNIT_ASSERT_EQUAL(OUString("2nd.ii"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty(xPara, "NumberingLevel")); // Level 2 + + xPara.set(getParagraph(9, "outline with Body listLvl(9)."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(10, "outline with Body listLvl(9) #2."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(11, "direct formatting - Body listLvl(9)."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(12, "direct numId, inherit listLvl."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2nd.ii.a.1.I"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(4), getProperty(xPara, "NumberingLevel")); // Level 5 + + xPara.set(getParagraph(13, "Style numId0 cancels inherited numbering."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf143692_outlineLevelTortureTest, "tdf143692_outlineLevelTortureTest.docx") +{ + uno::Reference xPara(getParagraph(1, "Head non Toc style"), uno::UNO_QUERY); + // fixed missing inherit from Heading 1 + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty(xPara, "OutlineLevel")); + + xPara.set(getParagraph(2, "noInheritHeading1"), uno::UNO_QUERY); + // fixed body level not cancelling inherited level + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xPara, "OutlineLevel")); + + xPara.set(getParagraph(4, "illegal -3"), uno::UNO_QUERY); + // illegal value is ignored, so inherit from Heading 1 + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty(xPara, "OutlineLevel")); + + xPara.set(getParagraph(5, "Heading 1 with invalid direct -2"), uno::UNO_QUERY); + // fixed illegal does not mean body level, it means inherit from style. + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty(xPara, "OutlineLevel")); + + xPara.set(getParagraph(7, "InheritCN3"), uno::UNO_QUERY); + // fixed Chapter Numbering cancelling inheritance + CPPUNIT_ASSERT_EQUAL(sal_Int16(3), getProperty(xPara, "OutlineLevel")); + + xPara.set(getParagraph(8, "noInheritCN3"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xPara, "OutlineLevel")); + + xPara.set(getParagraph(9, "override6CN3"), uno::UNO_QUERY); + // fixed body level not cancelling inherited level + CPPUNIT_ASSERT_EQUAL(sal_Int16(6), getProperty(xPara, "OutlineLevel")); + + xPara.set(getParagraph(10, "illegal 25"), uno::UNO_QUERY); + // fixed illegal value is ignored, so inherit from List Level (Chapter Numbering) + CPPUNIT_ASSERT_EQUAL(sal_Int16(3), getProperty(xPara, "OutlineLevel")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf132752, "tdf132752.docx") +{ + uno::Reference xPara1(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1801), getProperty(xPara1, "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), getProperty(xPara1, "ParaRightMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xPara1, "ParaFirstLineIndent")); + + uno::Reference xPara2(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1801), getProperty(xPara2, "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), getProperty(xPara2, "ParaRightMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-630), getProperty(xPara2, "ParaFirstLineIndent")); + + uno::Reference xPara3(getParagraph(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xPara3, "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5891), getProperty(xPara3, "ParaRightMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xPara3, "ParaFirstLineIndent")); + + uno::Reference xPara4(getParagraph(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1801), getProperty(xPara4, "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), getProperty(xPara4, "ParaRightMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4157), getProperty(xPara4, "ParaFirstLineIndent")); + + uno::Reference xPara5(getParagraph(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1801), getProperty(xPara5, "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), getProperty(xPara5, "ParaRightMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-630), getProperty(xPara5, "ParaFirstLineIndent")); + + uno::Reference xPara6(getParagraph(6), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3565), getProperty(xPara6, "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2764), getProperty(xPara6, "ParaRightMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-2394), getProperty(xPara6, "ParaFirstLineIndent")); +} + +DECLARE_OOXMLEXPORT_TEST(testGutterLeft, "gutter-left.docx") +{ + uno::Reference xPageStyle; + getStyles("PageStyles")->getByName("Standard") >>= xPageStyle; + sal_Int32 nGutterMargin{}; + xPageStyle->getPropertyValue("GutterMargin") >>= nGutterMargin; + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1270 + // - Actual : 0 + // i.e. gutter margin was lost. + CPPUNIT_ASSERT_EQUAL(static_cast(1270), nGutterMargin); +} + +CPPUNIT_TEST_FIXTURE(Test, testGutterTop) +{ + loadAndSave("gutter-top.docx"); + xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml"); + CPPUNIT_ASSERT(pXmlSettings); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // i.e. was lost. + assertXPath(pXmlSettings, "/w:settings/w:gutterAtTop", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testCustomShapePresetExport) +{ + loadAndReload("testCustomShapePresetExport.odt"); + // Check if the load failed. + CPPUNIT_ASSERT(getPages()); + + // Check all shapes of the file + int nCount = 0; + for (int i = 1; i <= getShapes(); i++) + { + uno::Reference xProperties(getShape(i), uno::UNO_QUERY); + if (!xProperties->getPropertySetInfo()->hasPropertyByName("CustomShapeGeometry")) + continue; + // Get the custom shape property + auto aCustomShapeGeometry = xProperties->getPropertyValue("CustomShapeGeometry") + .get>(); + // Find for shape type + for (const auto& aCustomGeometryIterator : std::as_const(aCustomShapeGeometry)) + { + if (aCustomGeometryIterator.Name == "Type") + CPPUNIT_ASSERT_MESSAGE( + "This is an ooxml preset shape with custom geometry! Shape type lost!", + aCustomGeometryIterator.Value.get() != "ooxml-non-primitive"); + // Without the fix, all shapes have ooxml-non-primitive type, and lost their + // real type (like triangle) with the textbox padding. + } + nCount++; + } + // Without the fix the count does not match. + CPPUNIT_ASSERT_EQUAL(17, nCount); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf69635) +{ + loadAndSave("tdf69635.docx"); + xmlDocUniquePtr pXmlHeader1 = parseExport("word/header1.xml"); + xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml"); + CPPUNIT_ASSERT(pXmlHeader1); + 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", "left"); + + // Make sure "left" appears as a hidden header + assertXPath(pXmlSettings, "/w:settings/w:evenAndOddHeaders", 0); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf140668, "tdf140668.docx") +{ + // Don't crash when document is opened + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf138771, "tdf138771.docx") +{ + // Don't crash when document is imported + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf125936_numberingSuperscript, "tdf125936_numberingSuperscript.docx") +{ + // Without the fix, the first character run was superscripted. + CPPUNIT_ASSERT_EQUAL( sal_Int16(0), getProperty(getRun(getParagraph(1), 1, "A-570-108"), "CharEscapement") ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf134619_numberingProps) +{ + loadAndReload("tdf134619_numberingProps.doc"); + // Get the third paragraph's numbering style's 1st level's bullet size + uno::Reference xParagraph = getParagraph(3); + auto xLevels = getProperty< uno::Reference >(xParagraph, "NumberingRules"); + uno::Sequence aLevel; + xLevels->getByIndex(0) >>= aLevel; // 1st level + OUString aCharStyleName = std::find_if(std::cbegin(aLevel), std::cend(aLevel), [](const beans::PropertyValue& rValue) { return rValue.Name == "CharStyleName"; })->Value.get(); + + // Make sure that the blue bullet's font size is 72 points, not 12 points. + uno::Reference xStyle(getStyles("CharacterStyles")->getByName(aCharStyleName), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(72.f, getProperty(xStyle, "CharHeight")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf134951_duplicates) +{ + loadAndReload("tdf134951_duplicates.odt"); + CPPUNIT_ASSERT_EQUAL(3, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xEndnotesSupplier(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), xEndnotesSupplier->getEndnotes()->getCount()); + + getParagraph(5, "Duplicate fields: 1"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf135773_numberingShading) +{ + loadAndSave("tdf135774_numberingShading.docx"); + // This test uses preTest to export CharBackground as Highlight instead of the 7.0 default of Shading. + + // Before the fix, the imported shading was converted into a red highlight. + xmlDocUniquePtr pXmlStyles = parseExport("word/numbering.xml"); + assertXPath(pXmlStyles, "/w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:rPr/w:shd", "fill", "ED4C05"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf140336_paraNoneShading, "tdf140336_paraNoneShading.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Before the fix, the background from a style was exported to dis-inheriting paragraphs/styles. + CPPUNIT_ASSERT_EQUAL(sal_uInt32(COL_AUTO), getProperty(getParagraph(1), "ParaBackColor")); + uno::Reference xStyle(getStyles("ParagraphStyles")->getByName("CanclledBackground"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xStyle, "FillStyle")); + + // sanity check: backgroundColor paragraph style has a golden color(FF7F50), which para2 inherits + CPPUNIT_ASSERT_EQUAL(sal_uInt32(16744272), getProperty(getParagraph(2), "ParaBackColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf141173_missingFrames, "tdf141173_missingFrames.rtf") +{ + // Without the fix in place, almost all of the text and textboxes were missing. + // Without the fix, there were only 2 shapes (mostly unseen). + CPPUNIT_ASSERT_EQUAL(13, getShapes()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf142404_tabSpacing, "tdf142404_tabSpacing.docx") +{ + // The tabstops should be laid out as triple-spaced when the paragraph takes multiple lines. + CPPUNIT_ASSERT_EQUAL_MESSAGE("too big for one page", 2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf142404_tabOverMarginC15, "tdf142404_tabOverMarginC15.docx") +{ + // TabOverMargin no longer applies to compatibilityMode 15 DOCX files. In Word 2016 this is 3pg. + // One page long if tabOverMargin is true. Two pages long if tabOverflow is true. + // Really should be 3 pages long, when tabOverflow is also false, but inadequate implementation. + CPPUNIT_ASSERT_EQUAL_MESSAGE("too big for one page", 2, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf142404_tabOverSpacingC15) +{ + loadAndReload("tdf142404_tabOverSpacingC15.odt"); + // Although TabOverMargin no longer applies to compatibilityMode 15 DOCX files, + // it still applies to a tab over the paragraph end (inside text boundaries). + // The original 3-page ODT saved as DOCX would fit on one page in MS Word 2010, but 3 in Word 2013. + CPPUNIT_ASSERT_EQUAL_MESSAGE("too big for two pages", 3, getPages()); + // The tab goes over the paragraph margin + CPPUNIT_ASSERT_EQUAL(OUString("A left tab positioned at"), parseDump("//page[1]/body/txt[2]/Text[1]", "Portion")); + sal_Int32 nTextLen = parseDump("//page[1]/body/txt[2]/Text[1]", "nWidth").toInt32(); + CPPUNIT_ASSERT_EQUAL(OUString("*"), parseDump("//page[1]/body/txt[2]/Text[2]", "Portion")); + sal_Int32 nTabLen = parseDump("//page[1]/body/txt[2]/Text[2]", "nWidth").toInt32(); + CPPUNIT_ASSERT_MESSAGE("Large left tab", nTextLen < nTabLen); + // Not 1 line high (Word 2010 DOCX), or 3 lines high (LO DOCX) or 5 lines high (ODT), but 4 lines high + sal_Int32 nHeight = parseDump("//page[1]/body/txt[2]/infos/bounds", "height").toInt32(); + CPPUNIT_ASSERT_MESSAGE("4 lines high", 1100 < nHeight); + CPPUNIT_ASSERT_MESSAGE("4 lines high", nHeight < 1300); + + CPPUNIT_ASSERT_EQUAL(OUString("TabOverflow does what?"), parseDump("//page[1]/body/txt[7]/Text[1]", "Portion")); + // Not 1 line high (Word 2010 DOCX), or 4 lines high (prev LO DOCX) or 8 lines high (ODT). + // but two lines high. (3 in Word 2016 because it pulls down "what?" to the second line - weird) + nHeight = parseDump("//page[1]/body/txt[7]/infos/bounds", "height").toInt32(); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("2 lines high (but 3 in Word)", 242*2.5, nHeight, 242); + + CPPUNIT_ASSERT_EQUAL(OUString("A centered tab positioned at"), parseDump("//page[1]/body/txt[3]/Text[1]", "Portion")); + sal_Int32 nLineWidth = parseDump("//page[1]/body/txt[3]/Text[2]", "nWidth").toInt32(); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Big tab: full paragraph area used", 737, nLineWidth, 100); + + // Pages 2/3 are TabOverMargin - in this particular case tabs should not go over margin. + CPPUNIT_ASSERT_EQUAL(OUString("A right tab positioned at"), parseDump("//page[2]/body/txt[6]/Text[1]", "Portion")); + sal_Int32 nParaWidth = parseDump("//page[2]/body/txt[6]/infos/prtBounds", "width").toInt32(); + // the clearest non-first-line visual example is this second tab in the right-tab paragraph. + nLineWidth = parseDump("//page[2]/body/txt[6]/LineBreak[4]", "nWidth").toInt32(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Full paragraph area used", nLineWidth, nParaWidth); + + CPPUNIT_ASSERT_EQUAL(OUString("TabOverflow does what?"), parseDump("//page[3]/body/txt[2]/Text[1]", "Portion")); + // Not 1 line high (Word 2010 DOCX and ODT), or 4 lines high (prev LO DOCX), + // but 8 lines high. + nHeight = parseDump("//page[3]/body/txt[2]/infos/bounds", "height").toInt32(); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("8 lines high", 242*8, nHeight, 121); +} + +DECLARE_OOXMLEXPORT_TEST(testShapeHyperlink, "hyperlinkshape.docx") +{ + // Test import/export of hyperlink property on shapes + auto xShape(getShape(1)); + CPPUNIT_ASSERT_EQUAL(OUString("https://libreoffice.org/"), getProperty(xShape, "Hyperlink")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTextframeHyperlink) +{ + // Make sure hyperlink is imported correctly + load(mpTestDocumentPath, "docxopenhyperlinkbox.docx"); + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount()); + + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("https://libreoffice.org/"), getProperty(xFrame, "HyperLinkURL")); + + // FIXME: After save&reload, the text frame should still be a text frame, and the above test should still work. + // (Currently the Writer text frame becomes a text box (shape based)). See tdf#140961 + reload(mpFilter, "docxopenhyperlinkbox.docx"); + + xmlDocUniquePtr pXmlDoc = parseExport(); + // DML + assertXPath(pXmlDoc, "//w:drawing/wp:anchor/wp:docPr/a:hlinkClick", 1); + // VML + assertXPath(pXmlDoc, "//w:pict/v:rect", "href", "https://libreoffice.org/"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf146171_invalid_change_date) +{ + load(mpTestDocumentPath, "tdf146171.docx"); + // false alarm? during ODF roundtrip: + // 'Error: "1970-01-01" does not satisfy the "dateTime" type' + // disable and check only the conversion of the invalid (zeroed) change date + // 0000-00-00T00:00:00Z, resulting loss of change tracking during ODF roundtrip + // reload("writer8", "tdf146171.odt"); + reload("Office Open XML Text", "tdf146171.docx"); + + xmlDocUniquePtr pXmlDoc = parseExport(); + // This was 0 + assertXPath(pXmlDoc, "//w:ins", 5); + // This was 0 + assertXPath(pXmlDoc, "//w:del", 2); + // no date (anonymized change) + // This failed, date was exported as w:date="1970-01-01T00:00:00Z" before fixing tdf#147760 + assertXPathNoAttribute(pXmlDoc, "//w:del[1]", "date"); + assertXPathNoAttribute(pXmlDoc, "//w:del[2]", "date"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf139580, "tdf139580.odt") +{ + // Without the fix in place, this test would have crashed at export time + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf149198, "tdf149198.docx") +{ + // Without the fix in place, this test would have crashed at export time + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(OUString("Documentation"), getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testFooterMarginLost) +{ + loadAndSave("footer-margin-lost.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 709 + // - Actual : 0 + // i.e. import + export lost the footer margin value. + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:pgMar", "footer", "709"); +} + +CPPUNIT_TEST_FIXTURE(Test, testEffectExtentLineWidth) +{ + auto verify = [this]() { + CPPUNIT_ASSERT_EQUAL(static_cast(506), + getProperty(getShape(1), "TopMargin")); + }; + + // Given a document with a shape that has a non-zero line width and effect extent: + // When loading the document: + load(mpTestDocumentPath, "effect-extent-line-width.docx"); + // Then make sure that the line width is not taken twice (once as part of the margin, and then + // also as the line width): + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 508 + // - Actual : 561 + // i.e. the upper spacing was too large, the last line of the text moved below the shape. + verify(); + reload(mpFilter, "effect-extent-line-width.docx"); + verify(); +} + +CPPUNIT_TEST_FIXTURE(Test, testRtlGutter) +{ + // Given a document with RTL gutter: + load(mpTestDocumentPath, "rtl-gutter.docx"); + uno::Reference xStandard(getStyles("PageStyles")->getByName("Standard"), + uno::UNO_QUERY); + CPPUNIT_ASSERT(getProperty(xStandard, "RtlGutter")); + + // When saving back to DOCX: + reload(mpFilter, "rtl-gutter.docx"); + + // Then make sure the section's gutter is still RTL: + xmlDocUniquePtr pXmlDoc = parseExport(); + // Without the accompanying fix in place, this test would have failed as the XML element was + // missing. + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:rtlGutter", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf140572_docDefault_superscript) +{ + loadAndReload("tdf140572_docDefault_superscript.docx"); + // A round-trip was crashing. + + // Without the fix, everything was DFLT_ESC_AUTO_SUPER (default superscript) + CPPUNIT_ASSERT_EQUAL( sal_Int16(0), getProperty(getRun(getParagraph(1), 1), "CharEscapement") ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf136841, "tdf136841.docx") +{ + if (!IsDefaultDPI()) + return; + uno::Reference image = getShape(1); + uno::Reference imageProperties(image, uno::UNO_QUERY); + uno::Reference graphic; + imageProperties->getPropertyValue( "Graphic" ) >>= graphic; + Graphic vclGraphic(graphic); + BitmapEx bitmap(vclGraphic.GetBitmapEx()); + CPPUNIT_ASSERT_EQUAL( tools::Long(76), bitmap.GetSizePixel().Width()); + CPPUNIT_ASSERT_EQUAL( tools::Long(76), bitmap.GetSizePixel().Height()); + + // Without the fix in place, this test would have failed with + // - Expected: Color: R:228 G:71 B:69 A:0 + // - Actual : Color: R:0 G:0 B:0 A:0 + CPPUNIT_ASSERT_EQUAL( Color(228,71,69), bitmap.GetPixelColor(38,38)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf138953, "croppedAndRotated.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Make sure the rotation is exported correctly, and size not distorted + auto xShape(getShape(1)); + CPPUNIT_ASSERT_EQUAL(27000.0, getProperty(xShape, "RotateAngle")); + auto frameRect = getProperty(xShape, "FrameRect"); + // Before the fix, original object size (i.e., before cropping) was written to spPr in OOXML, + // and the resulting object size was much larger than should be. + CPPUNIT_ASSERT_EQUAL(sal_Int32(12961), frameRect.Height); + CPPUNIT_ASSERT_EQUAL(sal_Int32(8664), frameRect.Width); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf118535, "tdf118535.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + uno::Reference xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), maTempFile.GetURL()); + CPPUNIT_ASSERT_EQUAL(true, bool(xNameAccess->hasByName("word/media/image1.jpeg"))); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: false + // - Actual : true + // i.e. the embedded picture would have been saved twice. + CPPUNIT_ASSERT_EQUAL(false, bool(xNameAccess->hasByName("word/media/image2.jpeg"))); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf133473_shadowSize, "tdf133473.docx") +{ + uno::Reference xShape = getShape(1); + + SdrObject* pObj(SdrObject::getSdrObjectFromXShape(xShape)); + const SfxItemSet& rSet = pObj->GetMergedItemSet(); + sal_Int32 nSize1 = rSet.Get(SDRATTR_SHADOWSIZEX).GetValue(); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 200000 + // - Actual : 113386 + // I.e. Shadow size will be smaller than actual. + + CPPUNIT_ASSERT_EQUAL(static_cast(200000), nSize1); +} + +DECLARE_OOXMLEXPORT_TEST(testTextBoxZOrder, "testTextBoxZOrder.docx") +{ + // Is load successful? + CPPUNIT_ASSERT(mxComponent); + // Collect the z-order values of the textboxes + std::vector ShapeZorders; + std::vector FrameZorders; + for (int i = 1; i < 4; i++) + { + uno::Reference xShape(getShape(i)); + CPPUNIT_ASSERT(xShape); + uno::Reference xShapeProperties(xShape, uno::UNO_QUERY); + CPPUNIT_ASSERT(xShapeProperties); + uno::Reference xFrame = SwTextBoxHelper::getUnoTextFrame(xShape); + CPPUNIT_ASSERT(xFrame.is()); + uno::Reference const xFrameProperties(xFrame, uno::UNO_QUERY); + CPPUNIT_ASSERT(xFrameProperties); + ShapeZorders.push_back(xShapeProperties->getPropertyValue("ZOrder").get()); + FrameZorders.push_back(xFrameProperties->getPropertyValue("ZOrder").get()); + } + // Check the z-order values. + for (int i = 1; i < 3; i++) + { + CPPUNIT_ASSERT_GREATER(ShapeZorders[i - 1], ShapeZorders[i]); + CPPUNIT_ASSERT_GREATER(FrameZorders[i - 1], FrameZorders[i]); + CPPUNIT_ASSERT_GREATER(ShapeZorders[i - 1], FrameZorders[i - 1]); + } + // Without the fix it failed, because the z-order was wrong. +} + +DECLARE_OOXMLEXPORT_TEST(testTdf141550, "tdf141550.docx") +{ + uno::Reference xShape(getShape(1)); + uno::Reference xFrame = SwTextBoxHelper::getUnoTextFrame(xShape); + + CPPUNIT_ASSERT(xShape); + CPPUNIT_ASSERT(xFrame); + + const sal_uInt16 nShapeRelOri = getProperty(xShape, UNO_NAME_HORI_ORIENT_RELATION); + const sal_uInt16 nFrameRelOri = getProperty(xFrame, UNO_NAME_HORI_ORIENT_RELATION); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Textbox fallen apart!", nShapeRelOri, nFrameRelOri); + // Without the fix in place it fails with difference. +} + +DECLARE_OOXMLEXPORT_TEST(testTdf140137, "tdf140137.docx") +{ + // Don't throw exception during load + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf105688, "tdf105688.docx") +{ + // Don't throw exception during load + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testCommentDone) +{ + loadAndSave("CommentDone.docx"); + xmlDocUniquePtr pXmlComm = parseExport("word/comments.xml"); + assertXPath(pXmlComm, "/w:comments/w:comment[1]/w:p", 2); + OUString idLastPara = getXPath(pXmlComm, "/w:comments/w:comment[1]/w:p[2]", "paraId"); + xmlDocUniquePtr pXmlCommExt = parseExport("word/commentsExtended.xml"); + assertXPath(pXmlCommExt, "/w15:commentsEx", "Ignorable", "w15"); + assertXPath(pXmlCommExt, "/w15:commentsEx/w15:commentEx", 1); + OUString idLastParaEx = getXPath(pXmlCommExt, "/w15:commentsEx/w15:commentEx", "paraId"); + CPPUNIT_ASSERT_EQUAL(idLastPara, idLastParaEx); + assertXPath(pXmlCommExt, "/w15:commentsEx/w15:commentEx", "done", "1"); +} + +DECLARE_OOXMLEXPORT_TEST(testTableWidth, "frame_size_export.docx") +{ + // after exporting: table width was overwritten in the doc model + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int16(100), + getProperty(xTables->getByIndex(0), "RelativeWidth")); +} + + +DECLARE_OOXMLEXPORT_TEST(testCommentDoneModel, "CommentDone.docx") +{ + css::uno::Reference xTextFieldsSupplier( + mxComponent, css::uno::UNO_QUERY_THROW); + auto xFields(xTextFieldsSupplier->getTextFields()->createEnumeration()); + + // First comment: initially resolved, toggled to unresolved on import, unresolved on roundtrip + CPPUNIT_ASSERT(xFields->hasMoreElements()); + css::uno::Any aComment = xFields->nextElement(); + css::uno::Reference xComment(aComment, css::uno::UNO_QUERY_THROW); + + if (!mbExported) + { + // Check that it's resolved when initially read + CPPUNIT_ASSERT_EQUAL(true, xComment->getPropertyValue("Resolved").get()); + // Set to unresolved + xComment->setPropertyValue("Resolved", css::uno::Any(false)); + } + else + { + // After the roundtrip, it keeps the "unresolved" state set above + CPPUNIT_ASSERT_EQUAL(false, xComment->getPropertyValue("Resolved").get()); + } + + // Second comment: initially unresolved, toggled to resolved on import, resolved on roundtrip + CPPUNIT_ASSERT(xFields->hasMoreElements()); + aComment = xFields->nextElement(); + xComment.set(aComment, css::uno::UNO_QUERY_THROW); + + if (!mbExported) + { + // Check that it's unresolved when initially read + CPPUNIT_ASSERT_EQUAL(false, xComment->getPropertyValue("Resolved").get()); + // Set to resolved + xComment->setPropertyValue("Resolved", css::uno::Any(true)); + } + else + { + // After the roundtrip, it keeps the "resolved" state set above + CPPUNIT_ASSERT_EQUAL(true, xComment->getPropertyValue("Resolved").get()); + } +} + +CPPUNIT_TEST_FIXTURE(Test, Test_ShadowDirection) +{ + loadAndSave("tdf142361ShadowDirection.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The attribute 'rotWithShape' has the default value 'true' in OOXML, so Words interprets a + // missing attribute as 'true'. That means that Word rotates the shadow if the shape is + // rotated. Because in LibreOffice a shadow is never rotated, we must not omit this + // attribute. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, + "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing/" + "wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:effectLst/a:outerShdw", + "rotWithShape", "0"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf139549) +{ + loadAndSave("tdf139549.docx"); + // Document contains a VML textbox, the position of the textbox was incorrect. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + OUString aStyle = getXPath(pXmlDoc, "//w:pict/v:shape", "style"); + /* original is: "position:absolute;margin-left:138.5pt;margin-top:40.1pt;width:183pt; + height:68pt;z-index:251675648;mso-position-horizontal:absolute; + mso-position-horizontal-relative:page;mso-position-vertical:absolute; + mso-position-vertical-relative:page" */ + CPPUNIT_ASSERT(!aStyle.isEmpty()); + + sal_Int32 nextTokenPos = 0; + OUString aStyleCommand = aStyle.getToken(0, ';', nextTokenPos); + CPPUNIT_ASSERT(!aStyleCommand.isEmpty()); + + OUString aStyleCommandName = aStyleCommand.getToken(0, ':'); + OUString aStyleCommandValue = aStyleCommand.getToken(1, ':'); + CPPUNIT_ASSERT_EQUAL(OUString("position"), aStyleCommandName); + CPPUNIT_ASSERT_EQUAL(OUString("absolute"), aStyleCommandValue); + + aStyleCommand = aStyle.getToken(0, ';', nextTokenPos); + CPPUNIT_ASSERT(!aStyleCommand.isEmpty()); + + aStyleCommandName = aStyleCommand.getToken(0, ':'); + aStyleCommandValue = aStyleCommand.getToken(1, ':'); + CPPUNIT_ASSERT_EQUAL(OUString("margin-left"), aStyleCommandName); + // Without the fix it failed, because the margin-left was 171.85pt. + CPPUNIT_ASSERT_DOUBLES_EQUAL(138.5, aStyleCommandValue.toFloat(), 0.1); + + aStyleCommand = aStyle.getToken(0, ';', nextTokenPos); + CPPUNIT_ASSERT(!aStyleCommand.isEmpty()); + + aStyleCommandName = aStyleCommand.getToken(0, ':'); + aStyleCommandValue = aStyleCommand.getToken(1, ':'); + CPPUNIT_ASSERT_EQUAL(OUString("margin-top"), aStyleCommandName); + // Without the fix it failed, because the margin-top was 55.45pt. + CPPUNIT_ASSERT_DOUBLES_EQUAL(40.1, aStyleCommandValue.toFloat(), 0.1); +} + + +DECLARE_OOXMLEXPORT_TEST(testTdf143726, "Simple-TOC.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + CPPUNIT_ASSERT(pXmlStyles); + // Without the fix this was "TOA Heading" which belongs to the "Table of Authorities" index in Word + // TOC's heading style should be exported as "TOC Heading" as that's the default Word style name + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='ContentsHeading']/w:name", "val", "TOC Heading"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf152153) +{ + loadAndReload("embedded_images.odt"); + + uno::Reference xNameAccess + = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), + maTempFile.GetURL()); + const uno::Sequence aNames(xNameAccess->getElementNames()); + int nImageFiles = 0; + for (const auto& rElementName : aNames) + if (rElementName.startsWith("word/media/image")) + nImageFiles++; + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 4 + // - Actual : 3 + // i.e. the once embedded picture wouldn't have been saved. + CPPUNIT_ASSERT_EQUAL(4, nImageFiles); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf152152) +{ + loadAndReload("artistic_effects.docx"); + + uno::Reference xNameAccess + = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), + maTempFile.GetURL()); + const uno::Sequence aNames(xNameAccess->getElementNames()); + int nImageFiles = 0; + for (const auto& rElementName : aNames) + if (rElementName.startsWith("word/media/hdphoto")) + nImageFiles++; + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2 + // - Actual : 1 + // i.e. the once WDP picture wouldn't have been saved. + CPPUNIT_ASSERT_EQUAL(2, nImageFiles); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx new file mode 100644 index 000000000..11bbfa865 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx @@ -0,0 +1,1087 @@ +/* -*- 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 + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/ooxmlexport/data/"; + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase(DATA_DIRECTORY, "Office Open XML Text") {} + +protected: + /** + * Denylist handling + */ + bool mustTestImportOf(const char* filename) const override { + // If the testcase is stored in some other format, it's pointless to test. + return o3tl::ends_with(filename, ".docx"); + } +}; + +DECLARE_OOXMLEXPORT_TEST(testTdf135164_cancelledNumbering, "tdf135164_cancelledNumbering.docx") +{ + uno::Reference xPara(getParagraph(1, u"TBMM DÖNEMİ"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(2, "Numbering explicitly cancelled"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(6, "Default style has roman numbering"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("i"), getProperty(xPara, "ListLabelString")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf147861_customField, "tdf147861_customField.docx") +{ + // These should each be specific values, not a shared DocProperty + getParagraph(1, "CustomEditedTitle"); // edited + // A couple of nulls at the end of the string thwarted all attempts at an "equals" comparison. + CPPUNIT_ASSERT(getParagraph(2)->getString().startsWith(" INSERT Custom Title here")); + getParagraph(3, "My Title"); // edited + + // Verify that these are fields, and not just plain text + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("CustomEditedTitle"), xField->getPresentation(false)); + // The " (fixed)" part is unnecessary, but it must be consistent across a round-trip + CPPUNIT_ASSERT_EQUAL(OUString("DocInformation:Title (fixed)"), xField->getPresentation(true)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148380_createField, "tdf148380_createField.docx") +{ + // Verify that these are fields, and not just plain text + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + // This should NOT be "Lorenzo Chavez", or a real date since the user hand-modified the result. + CPPUNIT_ASSERT_EQUAL(OUString("Myself - that's who"), xField->getPresentation(false)); + xField.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("yesterday at noon"), xField->getPresentation(false)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148380_fldLocked, "tdf148380_fldLocked.docx") +{ + getParagraph(2, "4/5/2022 4:29:00 PM"); + getParagraph(4, "1/23/4567 8:9:10 PM"); + + // Verify that these are fields, and not just plain text + // (import only, since export thankfully just dumps these fixed fields as plain text + if (mbExported) + return; + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + // This should NOT be updated at FILEOPEN to match the last modified time - it is locked. + CPPUNIT_ASSERT_EQUAL(OUString("4/5/2022 4:29:00 PM"), xField->getPresentation(false)); + CPPUNIT_ASSERT_EQUAL(OUString("DocInformation:Modified (fixed)"), xField->getPresentation(true)); + xField.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1/23/4567 8:9:10 PM"), xField->getPresentation(false)); + CPPUNIT_ASSERT_EQUAL(OUString("DocInformation:Last printed (fixed)"), xField->getPresentation(true)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148380_usernameField, "tdf148380_usernameField.docx") +{ + // Verify that these are fields, and not just plain text + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + // These should match the as-last-seen-in-the-text name, and not the application's user name + CPPUNIT_ASSERT_EQUAL(OUString("Charlie Brown"), xField->getPresentation(false)); + xField.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("CB"), xField->getPresentation(false)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148380_modifiedField, "tdf148380_modifiedField.docx") +{ + getParagraph(2, "4/5/2022 3:29:00 PM"); // default (unspecified) date format + + // Verify that these are fields, and not just plain text + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + // unspecified SAVEDATE gets default US formatting because style.xml has w:lang w:val="en-US" + CPPUNIT_ASSERT_EQUAL(OUString("4/5/2022 3:29:00 PM"), xField->getPresentation(false)); + xField.set(xFields->nextElement(), uno::UNO_QUERY); + // This was hand-modified and really should be Charlie Brown, not Charles ... + CPPUNIT_ASSERT_EQUAL(OUString("Charlie Brown"), xField->getPresentation(false)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148380_printField, "tdf148380_printField.docx") +{ + // Verify that these are fields, and not just plain text + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + // unspecified SAVEDATE gets default GB formatting because style.xml has w:lang w:val="en-GB" + CPPUNIT_ASSERT_EQUAL(OUString("08/04/2022 07:10:00 AM"), xField->getPresentation(false)); + CPPUNIT_ASSERT_EQUAL(OUString("DocInformation:Modified"), xField->getPresentation(true)); + xField.set(xFields->nextElement(), uno::UNO_QUERY); + // MS Word actually shows "8 o'clock-ish" until the document is reprinted, + // but it seems best to actually show the real last-printed date since it can't be FIXEDFLD + CPPUNIT_ASSERT_EQUAL(OUString("08/04/2022 06:47:00 AM"), xField->getPresentation(false)); + CPPUNIT_ASSERT_EQUAL(OUString("DocInformation:Last printed"), xField->getPresentation(true)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf132475_printField, "tdf132475_printField.docx") +{ + // The last printed date field: formatted two different ways + getParagraph(2, "Thursday, March 17, 2022"); + getParagraph(3, "17-Mar-22"); + // Time zone affects the displayed time in MS Word. LO shows GMT time. Word only updated by F9 + getParagraph(5, "12:49"); + getParagraph(6, "12:49:00 PM"); + + // Verify that these are fields, and not just plain text + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Thursday, March 17, 2022"), xField->getPresentation(false)); + CPPUNIT_ASSERT_EQUAL(OUString("DocInformation:Last printed"), xField->getPresentation(true)); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf135906) +{ + loadAndReload("tdf135906.docx"); + // just test round-tripping. The document was exported as corrupt and didn't re-load. +} + +CPPUNIT_TEST_FIXTURE(Test, TestTdf146802) +{ + load(DATA_DIRECTORY, "tdf146802.docx"); + + // First check if the load failed, as before the fix. + CPPUNIT_ASSERT(mxComponent); + + // There is a group shape with text box inside having an embedded VML formula, + // check if something missing. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Where is the formula?", 2, getShapes()); + // Before the fix the bugdoc failed to load or the formula was missing. +} + +CPPUNIT_TEST_FIXTURE(Test, testParaStyleNumLevel) +{ + loadAndSave("para-style-num-level.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/styles.xml"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // i.e. a custom list level in a para style was lost on import+export. + assertXPath(pXmlDoc, "/w:styles/w:style[@w:styleId='Mystyle']/w:pPr/w:numPr/w:ilvl", "val", "1"); +} + +CPPUNIT_TEST_FIXTURE(Test, testClearingBreak) +{ + // Given a document with a clearing break, when saving to DOCX: + loadAndSave("clearing-break.docx"); + + // Then make sure that the clearing break is not lost: + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Without the accompanying fix in place, this test would have failed with: + // - XPath '/w:document/w:body/w:p/w:r/w:br' number of nodes is incorrect + // i.e. first the clearing break was turned into a plain break, then it was completely lost. + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:br", "clear", "all"); +} + +CPPUNIT_TEST_FIXTURE(Test, testContentControlExport) +{ + // Given a document with a content control around one or more text portions: + mxComponent = loadFromDesktop("private:factory/swriter"); + uno::Reference xMSF(mxComponent, uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xCursor = xText->createTextCursor(); + xText->insertString(xCursor, "test", /*bAbsorb=*/false); + xCursor->gotoStart(/*bExpand=*/false); + xCursor->gotoEnd(/*bExpand=*/true); + uno::Reference xContentControl( + xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY); + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + xContentControlProps->setPropertyValue("ShowingPlaceHolder", uno::Any(true)); + xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true); + + // When exporting to DOCX: + save("Office Open XML Text", maTempFile); + mbExported = true; + + // Then make sure the expected markup is used: + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // XPath '//w:sdt/w:sdtPr/w:showingPlcHdr' number of nodes is incorrect + // i.e. the SDT elements were missing on export. + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:showingPlcHdr", 1); + assertXPath(pXmlDoc, "//w:sdt/w:sdtContent", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testCheckboxContentControlExport) +{ + // Given a document with a checkbox content control around a text portion: + mxComponent = loadFromDesktop("private:factory/swriter"); + uno::Reference xMSF(mxComponent, uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xCursor = xText->createTextCursor(); + xText->insertString(xCursor, OUString(u"☐"), /*bAbsorb=*/false); + xCursor->gotoStart(/*bExpand=*/false); + xCursor->gotoEnd(/*bExpand=*/true); + uno::Reference xContentControl( + xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY); + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + xContentControlProps->setPropertyValue("Checkbox", uno::Any(true)); + xContentControlProps->setPropertyValue("Checked", uno::Any(true)); + xContentControlProps->setPropertyValue("CheckedState", uno::Any(OUString(u"☒"))); + xContentControlProps->setPropertyValue("UncheckedState", uno::Any(OUString(u"☐"))); + xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true); + + // When exporting to DOCX: + save("Office Open XML Text", maTempFile); + mbExported = true; + + // Then make sure the expected markup is used: + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Without the fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // - XPath '//w:sdt/w:sdtPr/w14:checkbox/w14:checked' number of nodes is incorrect + // i.e. and its child elements were lost. + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w14:checkbox/w14:checked", "val", "1"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w14:checkbox/w14:checkedState", "val", "2612"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w14:checkbox/w14:uncheckedState", "val", "2610"); +} + +CPPUNIT_TEST_FIXTURE(Test, testDropdownContentControlExport) +{ + // Given a document with a dropdown content control around a text portion: + mxComponent = loadFromDesktop("private:factory/swriter"); + uno::Reference xMSF(mxComponent, uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xCursor = xText->createTextCursor(); + xText->insertString(xCursor, "choose an item", /*bAbsorb=*/false); + xCursor->gotoStart(/*bExpand=*/false); + xCursor->gotoEnd(/*bExpand=*/true); + uno::Reference xContentControl( + xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY); + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + { + uno::Sequence 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)); + } + xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true); + + // When exporting to DOCX: + save("Office Open XML Text", maTempFile); + mbExported = true; + + // Then make sure the expected markup is used: + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Without the fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // - XPath '//w:sdt/w:sdtPr/w:dropDownList/w:listItem[1]' number of nodes is incorrect + // i.e. the list items were lost on export. + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dropDownList/w:listItem[1]", "displayText", "red"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dropDownList/w:listItem[1]", "value", "R"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dropDownList/w:listItem[2]", "displayText", "green"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dropDownList/w:listItem[2]", "value", "G"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dropDownList/w:listItem[3]", "displayText", "blue"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dropDownList/w:listItem[3]", "value", "B"); +} + +CPPUNIT_TEST_FIXTURE(Test, testPictureContentControlExport) +{ + // Given a document with a picture content control around a text portion: + mxComponent = loadFromDesktop("private:factory/swriter"); + uno::Reference xMSF(mxComponent, uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xCursor = xText->createTextCursor(); + uno::Reference xTextGraphic( + xMSF->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY); + xTextGraphic->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AS_CHARACTER)); + uno::Reference xTextContent(xTextGraphic, uno::UNO_QUERY); + xText->insertTextContent(xCursor, xTextContent, false); + xCursor->gotoStart(/*bExpand=*/false); + xCursor->gotoEnd(/*bExpand=*/true); + uno::Reference xContentControl( + xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY); + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + xContentControlProps->setPropertyValue("Picture", uno::Any(true)); + xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true); + + // When exporting to DOCX: + save("Office Open XML Text", maTempFile); + mbExported = true; + + // Then make sure the expected markup is used: + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Without the fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // i.e. was lost on export. + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:picture", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testDateContentControlExport) +{ + // Given a document with a date content control around a text portion: + mxComponent = loadFromDesktop("private:factory/swriter"); + uno::Reference xMSF(mxComponent, uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xCursor = xText->createTextCursor(); + xText->insertString(xCursor, "test", /*bAbsorb=*/false); + xCursor->gotoStart(/*bExpand=*/false); + xCursor->gotoEnd(/*bExpand=*/true); + uno::Reference xContentControl( + xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY); + uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); + 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-26T00: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"))); + xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true); + + // When exporting to DOCX: + save("Office Open XML Text", maTempFile); + mbExported = true; + + // Then make sure the expected markup is used: + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Without the fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // - XPath '//w:sdt/w:sdtPr/w:date/w:dateFormat' number of nodes is incorrect + // i.e. the was lost on export. + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:date/w:dateFormat", "val", "M/d/yyyy"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:date/w:lid", "val", "en-US"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:date", "fullDate", "2022-05-26T00:00:00Z"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:placeholder/w:docPart", "val", "DefaultPlaceholder_-1854013437"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dataBinding", "prefixMappings", "xmlns:ns0='http://schemas.microsoft.com/vsto/samples' "); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dataBinding", "xpath", "/ns0:employees[1]/ns0:employee[1]/ns0:hireDate[1]"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dataBinding", "storeItemID", "{241A8A02-7FFD-488D-8827-63FBE74E8BC9}"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w15:color", "val", "008000"); +} + +CPPUNIT_TEST_FIXTURE(Test, testNegativePageBorder) +{ + // Given a document with a negative border distance: + createSwDoc(); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + SwDocShell* pDocShell = pTextDoc->GetDocShell(); + SwWrtShell* pWrtShell = pDocShell->GetWrtShell(); + pWrtShell->Insert("test"); + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), + uno::UNO_QUERY); + xPageStyle->setPropertyValue("TopMargin", uno::Any(static_cast(501))); + table::BorderLine2 aBorder; + aBorder.LineWidth = 159; + aBorder.OuterLineWidth = 159; + xPageStyle->setPropertyValue("TopBorder", uno::Any(aBorder)); + sal_Int32 nTopBorderDistance = -646; + xPageStyle->setPropertyValue("TopBorderDistance", uno::Any(nTopBorderDistance)); + + // When exporting to DOCX: + save("Office Open XML Text", maTempFile); + mbExported = true; + + // Then make sure that the page edge -> border space is correct: + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "//w:pgMar", "top", "284"); + assertXPath(pXmlDoc, "//w:pgBorders/w:top", "sz", "36"); + // Without the fix in place, this test would have failed with: + // - Expected: 28 + // - Actual : 0 + // i.e. editeng::BorderDistancesToWord() mis-handled negative border distances. + assertXPath(pXmlDoc, "//w:pgBorders/w:top", "space", "28"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf148494) +{ + loadAndSave("tdf148494.docx"); + + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + // Without the fix in place, this test would have failed with + // - Expected: MACROBUTTON AllCaps Hello World + // - Actual : MACROBUTTONAllCaps Hello World + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:r[3]/w:instrText", " MACROBUTTON AllCaps Hello World "); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf137466, "tdf137466.docx") +{ + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; // initial import, no further checks + + // Ensure that we have + OUString sDocPart = getXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:placeholder/w:docPart", "val"); + CPPUNIT_ASSERT_EQUAL(OUString("DefaultPlaceholder_-1854013440"), sDocPart); + + // Ensure that we have + OUString sColor = getXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w15:color", "val"); + CPPUNIT_ASSERT_EQUAL(OUString("FF0000"), sColor); +} + +DECLARE_OOXMLEXPORT_TEST(testParaListRightIndent, "testParaListRightIndent.docx") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(2000), getProperty(getParagraph(1), "ParaRightMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5001), getProperty(getParagraph(2), "ParaRightMargin")); +} + +CPPUNIT_TEST_FIXTURE(Test, testDontAddNewStyles) +{ + // Given a document that lacks builtin styles, and addition of them is disabled: + { + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Load::DisableBuiltinStyles::set(true, pBatch); + pBatch->commit(); + } + comphelper::ScopeGuard g([] { + std::shared_ptr pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Load::DisableBuiltinStyles::set(false, pBatch); + pBatch->commit(); + }); + + // When saving that document: + loadAndSave("dont-add-new-styles.docx"); + + // Then make sure that export doesn't have additional styles, Caption was one of them: + xmlDocUniquePtr pXmlDoc = parseExport("word/styles.xml"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. builtin styles were added to the export result, even if we opted out. + assertXPath(pXmlDoc, "/w:styles/w:style[@w:styleId='Caption']", 0); +} + +DECLARE_OOXMLEXPORT_TEST(TestWPGZOrder, "testWPGZOrder.docx") +{ + // Check if the load failed. + CPPUNIT_ASSERT(mxComponent); + + // Get the WPG + uno::Reference xGroup(getShape(1), uno::UNO_QUERY_THROW); + uno::Reference xGroupProperties(xGroup, uno::UNO_QUERY_THROW); + + // Initialize a queue for subgroups + std::queue> xGroupList; + xGroupList.push(xGroup); + + // Every textbox shall be visible. + while (xGroupList.size()) + { + // Get the first group + xGroup = xGroupList.front(); + xGroupList.pop(); + for (sal_Int32 i = 0; i < xGroup->getCount(); ++i) + { + // Get the child shape + uno::Reference xChildShapeProperties(xGroup->getByIndex(i), + uno::UNO_QUERY_THROW); + // Check for textbox + if (!xChildShapeProperties->getPropertyValue("TextBox").get()) + { + // Is this a Group Shape? Put it into the queue. + uno::Reference xInnerGroup(xGroup->getByIndex(i), uno::UNO_QUERY); + if (xInnerGroup) + xGroupList.push(xInnerGroup); + continue; + } + + // Get the textbox properties + uno::Reference xTextBoxFrameProperties( + xChildShapeProperties->getPropertyValue("TextBoxContent"), uno::UNO_QUERY_THROW); + + // Assert that the textbox ZOrder greater than the groupshape + CPPUNIT_ASSERT_GREATER(xGroupProperties->getPropertyValue("ZOrder").get(), + xTextBoxFrameProperties->getPropertyValue("ZOrder").get()); + // Before the fix, this failed because that was less, and the textboxes were covered. + } + + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148720, "tdf148720.odt") +{ + const auto& pLayout = parseLayoutDump(); + + const OString sShapeXPaths[] = + { + OString("/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObjGroup/SdrObjList/SdrObject[1]"), + OString("/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObjGroup/SdrObjList/SdrObjGroup/SdrObjList/SdrObjGroup/SdrObjList/SdrObject[1]"), + OString("/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObjGroup/SdrObjList/SdrObjGroup/SdrObjList/SdrObjGroup/SdrObjList/SdrObject[2]"), + OString("/root/page/body/txt/anchored/SwAnchoredDrawObject/SdrObjGroup/SdrObjList/SdrObject[2]") + }; + + const OString sTextXPaths[] = + { + OString("/root/page/body/txt/anchored/fly[1]/infos/bounds"), + OString("/root/page/body/txt/anchored/fly[2]/infos/bounds"), + OString("/root/page/body/txt/anchored/fly[3]/infos/bounds"), + OString("/root/page/body/txt/anchored/fly[4]/infos/bounds") + }; + + const OString sAttribs[] = + { + OString("left"), + OString("top"), + OString("width"), + OString("height") + }; + + for (sal_Int32 i = 0; i < 4; ++i) + { + OUString aShapeVals[4]; + int aTextVals[4] = {0, 0, 0, 0}; + + const auto aOutRect = getXPath(pLayout, sShapeXPaths[i], "aOutRect"); + + sal_uInt16 nCommaPos[4] = {0, 0, 0, 0}; + nCommaPos[1] = aOutRect.indexOf(","); + nCommaPos[2] = aOutRect.indexOf(",", nCommaPos[1] + 1); + nCommaPos[3] = aOutRect.indexOf(",", nCommaPos[2] + 1); + + + aShapeVals[0] = aOutRect.copy(nCommaPos[0], nCommaPos[1] - nCommaPos[0]); + aShapeVals[1] = aOutRect.copy(nCommaPos[1] + 2, nCommaPos[2] - nCommaPos[1] - 2); + aShapeVals[2] = aOutRect.copy(nCommaPos[2] + 2, nCommaPos[3] - nCommaPos[2] - 2); + aShapeVals[3] = aOutRect.copy(nCommaPos[3] + 2, aOutRect.getLength() - nCommaPos[3] - 2); + + for (int ii = 0; ii < 4; ++ii) + { + aTextVals[ii] = getXPath(pLayout, sTextXPaths[i], sAttribs[ii]).toInt32(); + } + + tools::Rectangle ShapeArea(Point(aShapeVals[0].toInt32(), aShapeVals[1].toInt32()), Size(aShapeVals[2].toInt32() + 5, aShapeVals[3].toInt32() + 5)); + + tools::Rectangle TextArea(Point(aTextVals[0], aTextVals[1]), Size(aTextVals[2], aTextVals[3])); + + CPPUNIT_ASSERT(ShapeArea.Contains(TextArea)); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf126287, "tdf126287.docx") +{ + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf123642_BookmarkAtDocEnd, "tdf123642.docx") +{ + // get bookmark interface + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + + // check: we have 1 bookmark (previously there were 0) + CPPUNIT_ASSERT_EQUAL(static_cast(1), xBookmarksByIdx->getCount()); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Bookmark1")); + + // and it is really in exported DOCX (let's ensure) + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; // initial import, no further checks + + CPPUNIT_ASSERT_EQUAL(OUString("Bookmark1"), getXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:bookmarkStart[1]", "name")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148361, "tdf148361.docx") +{ + // Refresh fields and ensure cross-reference to numbered para is okay + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + + uno::Reference xTextField1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("itadmin"), xTextField1->getPresentation(false)); + + OUString aActual = getParagraph(2)->getString(); + // This was "itadmin". + CPPUNIT_ASSERT_EQUAL(OUString("[Type text]"), aActual); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf142407, "tdf142407.docx") +{ + uno::Reference xPageStyles = getStyles("PageStyles"); + uno::Reference xPageStyle(xPageStyles->getByName("Standard"), uno::UNO_QUERY); + sal_Int16 nGridLines; + xPageStyle->getPropertyValue("GridLines") >>= nGridLines; + CPPUNIT_ASSERT_EQUAL( sal_Int16(36), nGridLines); // was 23, left large space before text. +} + +DECLARE_OOXMLEXPORT_TEST(testWPGBodyPr, "WPGbodyPr.docx") +{ + // Is load successful? + CPPUNIT_ASSERT(mxComponent); + + // There are a WPG shape and a picture + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + + // Get the WPG shape + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + // And the embed WPG + uno::Reference xEmbedGroup(xGroup->getByIndex(1), uno::UNO_QUERY); + + // Get the properties of the shapes + uno::Reference xOuterShape(xGroup->getByIndex(0), uno::UNO_QUERY); + uno::Reference xMiddleShape(xEmbedGroup->getByIndex(0), uno::UNO_QUERY); + uno::Reference xInnerShape(xEmbedGroup->getByIndex(1), uno::UNO_QUERY); + + // Get the properties of the textboxes too + uno::Reference xOuterTextBox( + xOuterShape->getPropertyValue("TextBoxContent"), uno::UNO_QUERY); + uno::Reference xMiddleTextBox( + xMiddleShape->getPropertyValue("TextBoxContent"), uno::UNO_QUERY); + uno::Reference xInnerTextBox( + xInnerShape->getPropertyValue("TextBoxContent"), uno::UNO_QUERY); + + // Check the alignments + CPPUNIT_ASSERT_EQUAL(css::drawing::TextVerticalAdjust::TextVerticalAdjust_TOP, + xOuterTextBox->getPropertyValue("TextVerticalAdjust") + .get()); + CPPUNIT_ASSERT_EQUAL(css::drawing::TextVerticalAdjust::TextVerticalAdjust_TOP, + xMiddleTextBox->getPropertyValue("TextVerticalAdjust") + .get()); + CPPUNIT_ASSERT_EQUAL(css::drawing::TextVerticalAdjust::TextVerticalAdjust_CENTER, + xInnerTextBox->getPropertyValue("TextVerticalAdjust") + .get()); + + // Check the inset margins, all were 0 before the fix + CPPUNIT_ASSERT_EQUAL(sal_Int32(499), + xInnerShape->getPropertyValue("TextLowerDistance").get()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(499), + xInnerShape->getPropertyValue("TextUpperDistance").get()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), + xInnerShape->getPropertyValue("TextLeftDistance").get()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(254), + xInnerShape->getPropertyValue("TextRightDistance").get()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf146851_1, "tdf146851_1.docx") +{ + uno::Reference xPara; + + xPara.set(getParagraph(1, "qwerty"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); + + xPara.set(getParagraph(2, "asdfg"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1/"), getProperty(xPara, "ListLabelString")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf146851_2, "tdf146851_2.docx") +{ + // Ensure numbering on second para + uno::Reference xPara; + xPara.set(getParagraph(2, "."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Schedule"), getProperty(xPara, "ListLabelString")); + + // Refresh fields and ensure cross-reference to numbered para is okay + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + + uno::Reference(xFieldsAccess, uno::UNO_QUERY_THROW)->refresh(); + + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + uno::Reference xTextField(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Schedule"), xTextField->getPresentation(false)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148052, "tdf148052.docx") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + + uno::Reference xTextField(xFields->nextElement(), uno::UNO_QUERY); + + // Without the fix in place, this test would have failed with + // - Expected: 14. Aug 18 + // - Actual : 11. Apr 22 + CPPUNIT_ASSERT_EQUAL(OUString("14. Aug 18"), xTextField->getPresentation(false)); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148111, "tdf148111.docx") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + + uno::Reference xFields(xFieldsAccess->createEnumeration()); + std::vector aExpectedValues = { + // These field values are NOT in order in document: getTextFields did provide + // fields in a strange but fixed order + "Title", "Placeholder", "Placeholder", "Placeholder", + "Placeholder", "Placeholder", "Placeholder", "Placeholder", + "Placeholder", "Placeholder", "Placeholder", "Placeholder", + "Placeholder", "Placeholder", "Placeholder", "Placeholder", + "Placeholder", "Title", "Title", "Title", + "Title", "Title", "Title", "Title" + }; + + sal_uInt16 nIndex = 0; + while (xFields->hasMoreElements()) + { + uno::Reference xTextField(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(aExpectedValues[nIndex++], xTextField->getPresentation(false)); + } + + // No more fields + CPPUNIT_ASSERT(!xFields->hasMoreElements()); +} + +DECLARE_OOXMLEXPORT_TEST(TestTdf73499, "tdf73499.docx") +{ + // Ensure, the bugdoc is opened + CPPUNIT_ASSERT(mxComponent); + // Get the groupshape + uno::Reference xGroup(getShape(1), uno::UNO_QUERY_THROW); + + // Get the textboxes of the groupshape + uno::Reference xTextBox1(xGroup->getByIndex(0), uno::UNO_QUERY_THROW); + uno::Reference xTextBox2(xGroup->getByIndex(1), uno::UNO_QUERY_THROW); + + // Get the properties of the textboxes + uno::Reference xTextBox1Properties(xTextBox1, uno::UNO_QUERY_THROW); + uno::Reference xTextBox2Properties(xTextBox2, uno::UNO_QUERY_THROW); + + // Get the name of the textboxes + uno::Reference xTextBox1Name(xTextBox1, uno::UNO_QUERY_THROW); + uno::Reference xTextBox2Name(xTextBox2, uno::UNO_QUERY_THROW); + + // Check for the links, before the fix that were missing + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Link name missing!", xTextBox2Name->getName(), + xTextBox1Properties->getPropertyValue("ChainNextName").get()); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Link name missing!", xTextBox1Name->getName(), + xTextBox2Properties->getPropertyValue("ChainPrevName").get()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf81507, "tdf81507.docx") +{ + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; // initial import, no further checks + + // Ensure that we have + CPPUNIT_ASSERT_EQUAL(OUString("1"), getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:sdt/w:sdtPr/w:text", "multiLine")); + + // Ensure that we have + CPPUNIT_ASSERT_EQUAL(OUString("0"), getXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:sdt/w:sdtPr/w:text", "multiLine")); + + // Ensure that we have + getXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:sdt/w:sdtPr/w:text", ""); + + // Ensure that we have no (not quite correct case, but to ensure import/export are okay) + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "/w:document/w:body/w:p[4]/w:sdt/w:sdtPr/w:text"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), + static_cast(xmlXPathNodeSetGetLength(pXmlObj->nodesetval))); + xmlXPathFreeObject(pXmlObj); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf139948, "tdf139948.docx") +{ + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), + getProperty(getParagraph(1, "No border"), "TopBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), + getProperty(getParagraph(2, "Border below"), "TopBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(88), + getProperty(getParagraph(3, "Borders below and above"), "TopBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(88), + getProperty(getParagraph(4, "Border above"), "TopBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), + getProperty(getParagraph(5, "No border"), "TopBorder").LineWidth); + + + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), + getProperty(getParagraph(1), "BottomBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), + getProperty(getParagraph(2), "BottomBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), + getProperty(getParagraph(3), "BottomBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), + getProperty(getParagraph(4), "BottomBorder").LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), + getProperty(getParagraph(5), "BottomBorder").LineWidth); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf144563, "tdf144563.docx") +{ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + + // Refresh all cross-reference fields + uno::Reference(xFieldsAccess, uno::UNO_QUERY_THROW)->refresh(); + + // Verify values + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + std::vector aExpectedValues = { + // These field values are NOT in order in document: getTextFields did provide + // fields in a strange but fixed order + "1", "1", "1", "1", "1/", "1/", "1/", "1)", "1)", "1)", "1.)", + "1.)", "1.)", "1..", "1..", "1..", "1.", "1.", "1.", "1", "1" + }; + + sal_uInt16 nIndex = 0; + while (xFields->hasMoreElements()) + { + uno::Reference xTextField(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(aExpectedValues[nIndex++], xTextField->getPresentation(false)); + } +} + +// broken test document? +#if !defined(_WIN32) +DECLARE_OOXMLEXPORT_TEST(testTdf146955, "tdf146955.odt") +{ + // import of a (broken?) DOCX export with dozens of frames raised a SAX exception, + // when the code tried to access to a non-existent footnote + uno::Reference xNotes(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xNotes->getFootnotes()->getCount()); +} +#endif + +DECLARE_OOXMLEXPORT_TEST(testTdf144668, "tdf144668.odt") +{ + uno::Reference xPara1(getParagraph(1, u"level1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("[0001]"), getProperty(xPara1, "ListLabelString")); + + uno::Reference xPara2(getParagraph(2, u"level2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("[001]"), getProperty(xPara2, "ListLabelString")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148455_1, "tdf148455_1.docx") +{ + uno::Reference xPara2(getParagraph(3, u"1.1.1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1.1."), getProperty(xPara2, "ListLabelString")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148455_2, "tdf148455_2.docx") +{ + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; // initial import, no further checks + + // Find list id for restarted list + sal_Int32 nListId = getXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:numPr/w:numId", "val").toInt32(); + + xmlDocUniquePtr pNumberingDoc = parseExport("word/numbering.xml"); + + // Ensure we have empty lvlOverride for levels 0 - 1 + getXPath(pNumberingDoc, "/w:numbering/w:num[@w:numId='" + OString::number(nListId) +"']/w:lvlOverride[@w:ilvl='0']", ""); + getXPath(pNumberingDoc, "/w:numbering/w:num[@w:numId='" + OString::number(nListId) +"']/w:lvlOverride[@w:ilvl='1']", ""); + // And normal override for level 2 + getXPath(pNumberingDoc, "/w:numbering/w:num[@w:numId='" + OString::number(nListId) +"']/w:lvlOverride[@w:ilvl='2']/w:startOverride", "val"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf147978enhancedPathABVW) +{ + load(DATA_DIRECTORY, "tdf147978_enhancedPath_commandABVW.odt"); + CPPUNIT_ASSERT(mxComponent); + save("Office Open XML Text", maTempFile); + mxComponent->dispose(); + mxComponent = loadFromDesktop(maTempFile.GetURL(), "com.sun.star.text.TextDocument"); + // Make sure the new implemented export for commands A,B,V and W use the correct arc between + // the given two points, here the short one. + for (sal_Int16 i = 1 ; i <= 4; ++i) + { + uno::Reference xShape = getShape(i); + CPPUNIT_ASSERT_EQUAL(sal_Int32(506), getProperty(xShape, "BoundRect").Height); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148132, "tdf148132.docx") +{ + { + uno::Reference xParagraph = getParagraph(1); + auto xLevels = getProperty< uno::Reference >(xParagraph, "NumberingRules"); + // Get level 2 char style + comphelper::SequenceAsHashMap levelProps(xLevels->getByIndex(1)); + OUString aCharStyleName = levelProps["CharStyleName"].get(); + // Ensure that numbering in this paragraph is 24pt bold italic + // Previously it got overridden by paragraph properties and became 6pt, no bold, no italic + uno::Reference xStyle(getStyles("CharacterStyles")->getByName(aCharStyleName), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(24.f, getProperty(xStyle, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty(xStyle, "CharWeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, getProperty(xStyle, "CharPosture")); + } + // And do the same for second paragraph. Numbering should be identical + { + uno::Reference xParagraph = getParagraph(2); + auto xLevels = getProperty< uno::Reference >(xParagraph, "NumberingRules"); + comphelper::SequenceAsHashMap levelProps(xLevels->getByIndex(1)); + OUString aCharStyleName = levelProps["CharStyleName"].get(); + + uno::Reference xStyle(getStyles("CharacterStyles")->getByName(aCharStyleName), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(24.f, getProperty(xStyle, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty(xStyle, "CharWeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, getProperty(xStyle, "CharPosture")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTdf154481, "tdf154481.docx") +{ + CPPUNIT_ASSERT_EQUAL_MESSAGE("Missing pages!", 7, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf149200) +{ + loadAndSave("tdf149200.docx"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + // Ensure there is no unexpected invalid structure + // There is just one run property + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "count(/w:document/w:body/w:p[1]/w:r[1]/w:rPr/*)"); + CPPUNIT_ASSERT(pXmlObj); + CPPUNIT_ASSERT_EQUAL(double(1), pXmlObj->floatval); + // And it is a color definition with themeColor + CPPUNIT_ASSERT_EQUAL(OUString("dark1"), getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/w:rPr/w:color", "themeColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf149313, "tdf149313.docx") +{ + // only 2, but not 3 pages in document + CPPUNIT_ASSERT_EQUAL(2, getPages()); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // And ensure that pages are with correct sections (have correct dimensions) + CPPUNIT_ASSERT_EQUAL(sal_Int32(4989), getXPath(pXmlDoc, "/root/page[1]/infos/bounds", "height").toInt32()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4989), getXPath(pXmlDoc, "/root/page[1]/infos/bounds", "width").toInt32()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4989), getXPath(pXmlDoc, "/root/page[2]/infos/bounds", "height").toInt32()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(8000), getXPath(pXmlDoc, "/root/page[2]/infos/bounds", "width").toInt32()); +} + +#include +#include +#include +#include + +DECLARE_OOXMLEXPORT_TEST(testTdf148360, "tdf148360.docx") +{ + const auto& pLayout = parseLayoutDump(); + + // Ensure first element is a tab + assertXPath(pLayout, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::TabLeft"); + // and only then goes content + assertXPath(pLayout, "/root/page[1]/body/txt[1]/Text[2]", "nType", "PortionType::Text"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf135923, "tdf135923-min.docx") +{ + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + uno::Reference xParagraph = getParagraphOfText(1, xShape); + + CPPUNIT_ASSERT_EQUAL(COL_WHITE, getProperty(getRun(xParagraph, 1), "CharColor")); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, getProperty(getRun(xParagraph, 2), "CharColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf148273_sectionBulletFormatLeak, "tdf148273_sectionBulletFormatLeak.docx") +{ + // get a paragraph with bullet point after section break + uno::Reference xParagraph = getParagraph(4); + uno::Reference xProps(xParagraph, uno::UNO_QUERY); + + // Make sure that the bullet has no ListAutoFormat inherited from + // the empty paragraph before the section break + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. empty paragraph formats from the first section leaked to the bullet's formatting + uno::Any aValue = xProps->getPropertyValue("ListAutoFormat"); + CPPUNIT_ASSERT_EQUAL(false, aValue.hasValue()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf149089, "tdf149089.docx") +{ + uno::Reference xPageStyles = getStyles("PageStyles"); + uno::Reference xPageStyle(xPageStyles->getByName("Standard"), uno::UNO_QUERY); + sal_Int16 nGridMode; + xPageStyle->getPropertyValue("GridMode") >>= nGridMode; + CPPUNIT_ASSERT_EQUAL( sal_Int16(text::TextGridMode::LINES), nGridMode); // was LINES_AND_CHARS +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf139128) +{ + loadAndReload("tdf139128.odt"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(pXmlDoc); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2 + // - Actual : 0 + // i.e. the line break was lost on export. + assertXPath(pXmlDoc, "//w:br", 2); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx new file mode 100644 index 000000000..86733660b --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx @@ -0,0 +1,167 @@ +/* -*- 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 + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include +#include +#include +#include + +#include +#include +#include + +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/ooxmlexport/data/"; + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase(DATA_DIRECTORY, "Office Open XML Text") {} +}; + +CPPUNIT_TEST_FIXTURE(Test, testTdf150197_predefinedNumbering) +{ + createSwDoc(); + + // The exact numbering style doesn't matter - just any non-bullet pre-defined numbering style. + uno::Sequence aPropertyValues = comphelper::InitPropertySequence({ + { "Style", uno::Any(OUString("Numbering 123")) }, + { "FamilyName", uno::Any(OUString("NumberingStyles")) }, + }); + dispatchCommand(mxComponent, ".uno:StyleApply", aPropertyValues); + + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(getParagraph(1), "ListLabelString")); + + reload("Office Open XML Text", ""); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(getParagraph(1), "ListLabelString")); +} + +CPPUNIT_TEST_FIXTURE(Test, testInlineSdtHeader) +{ + // Without the accompanying fix in place, this test would have failed with an assertion failure, + // we produced not-well-formed XML on save. + loadAndSave("inline-sdt-header.docx"); +} + +CPPUNIT_TEST_FIXTURE(Test, testCellSdtRedline) +{ + // Without the accompanying fix in place, this test would have failed with an assertion failure, + // we produced not-well-formed XML on save. + loadAndSave("cell-sdt-redline.docx"); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf147724, "tdf147724.docx") +{ + const auto& pLayout = parseLayoutDump(); + + // Ensure we load field value from external XML correctly (it was "HERUNTERLADEN") + assertXPathContent(pLayout, "/root/page[1]/body/txt[1]", "Placeholder -> *ABC*"); + + // This SDT has no storage id, it is not an error, but content can be taken from any suitable XML + // There 2 variants possible, both are acceptable + OUString sFieldResult = getXPathContent(pLayout, "/root/page[1]/body/txt[2]"); + CPPUNIT_ASSERT(sFieldResult == "Placeholder -> *HERUNTERLADEN*" || sFieldResult == "Placeholder -> *ABC*"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf150966_regularInset) +{ + // Given a docx document with a rectangular shape with height cy="900000" (EMU), tIns="180000" + // and bIns="360000", resulting in 360000EMU text area height. + load(DATA_DIRECTORY, "tdf150966_regularInset.docx"); + + // The shape is imported as custom shape with attached frame. + // The insets are currently imported as margin top="4.99mm" and bottom="10mm". + // That should result in tIns="179640" and bIns="360000" on export. + + // Without fix the insets were tIns="359280" and bIns="539640". The text area had 1080Emu height + // and Word displayes no text at all. + save("Office Open XML Text", maTempFile); + mbExported = true; + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPathAttrs(pXmlDoc, "//wps:bodyPr", { { "tIns", "179640" }, { "bIns", "360000" } }); +} + +CPPUNIT_TEST_FIXTURE(Test, testImageCropping) +{ + loadAndReload("crop-roundtrip.docx"); + + // the image has no cropping after roundtrip, because it has been physically cropped + // NB: this test should be fixed when the core feature to show image cropped when it + // has the "GraphicCrop" is set is implemented + auto aGraphicCropStruct = getProperty(getShape(1), "GraphicCrop"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aGraphicCropStruct.Left); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aGraphicCropStruct.Right); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aGraphicCropStruct.Top); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aGraphicCropStruct.Bottom); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf152200) +{ + // Given a document with a fly anchored after a FORMTEXT in the end of the paragraph: + load(DATA_DIRECTORY, "tdf152200-field+textbox.docx"); + + // When exporting that back to DOCX: + save("Office Open XML Text", maTempFile); + mbExported = true; + + // Then make sure that fldChar with type 'end' goes prior to the at-char anchored fly. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + const int nRunsBeforeFldCharEnd = countXPathNodes(pXmlDoc, "//w:fldChar[@w:fldCharType='end']/preceding::w:r"); + CPPUNIT_ASSERT(nRunsBeforeFldCharEnd); + const int nRunsBeforeAlternateContent = countXPathNodes(pXmlDoc, "//mc:AlternateContent/preceding::w:r"); + CPPUNIT_ASSERT(nRunsBeforeAlternateContent); + // Without the accompanying fix in place, this test would have failed with: + // - Expected greater than: 6 + // - Actual : 5 + CPPUNIT_ASSERT_GREATER(nRunsBeforeFldCharEnd, nRunsBeforeAlternateContent); + // Make sure we only have one paragraph in body, and only three field characters overal, + // located directly in runs of this paragraph + assertXPath(pXmlDoc, "/w:document/w:body/w:p"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:fldChar", 3); + assertXPath(pXmlDoc, "//w:fldChar", 3); // no field characters elsewhere +} + +CPPUNIT_TEST_FIXTURE(Test, testNumberPortionFormatFromODT) +{ + // Given a document with a single paragraph, direct formatting asks 24pt font size for the + // numbering and the text portion: + load(DATA_DIRECTORY, "number-portion-format.odt"); + + // When saving to DOCX: + save("Office Open XML Text", maTempFile); + mbExported = true; + + // Then make sure that the paragraph marker's char format has that custom font size: + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // - XPath '//w:pPr/w:rPr/w:sz' number of nodes is incorrect + // i.e. was missing under 's . + assertXPath(pXmlDoc, "//w:pPr/w:rPr/w:sz", "val", "48"); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx new file mode 100644 index 000000000..e8bca2ab4 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx @@ -0,0 +1,1199 @@ +/* -*- 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 + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {} + +protected: + /** + * Validation handling + */ + bool mustValidate(const char* filename) const override + { + const char* aAllowlist[] = { + "page-graphic-background.odt", + "zoom.docx", + "empty.odt", + "fdo38244.docx", + "comments-nested.odt" + }; + std::vector vAllowlist(aAllowlist, aAllowlist + SAL_N_ELEMENTS(aAllowlist)); + + return std::find(vAllowlist.begin(), vAllowlist.end(), filename) != vAllowlist.end(); + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testPageGraphicBackground) +{ + loadAndReload("page-graphic-background.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // No idea how the graphic background should be exported (seems there is no + // way to do a non-tiling export to OOXML), but at least the background + // color shouldn't be black. + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xPageStyle, "BackColor")); +} + + +CPPUNIT_TEST_FIXTURE(Test, testCustomProperties) +{ + loadAndSave("custom-properties.docx"); + // tdf#133377 tdf#103987 FILESAVE XLSX: Make sure the custom/core/application + // file properties are stored correctly after roundtrip to .docx + + // Extended file properties - specific to Office package, + // eg. docx - Number of Pages, pptx - Number of Slides + xmlDocUniquePtr pXmlDoc = parseExport("docProps/app.xml"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:Paragraphs", "1"); + //assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:Lines", "1"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:Pages", "1"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:Words", "3"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:Characters", "22"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:CharactersWithSpaces", "24"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:Company", "hhhhkompany"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:Manager", "ffffmenadzer;iiiiisecondmanager"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:HyperlinkBase", "gggghiperlink"); + //assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:DocSecurity", "2"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:AppVersion", "15.0000"); + + // Custom file properties - defined by user + xmlDocUniquePtr pCustomXml = parseExport("docProps/custom.xml"); + assertXPath(pCustomXml, "/custom-properties:Properties/custom-properties:property", 9); + assertXPath(pCustomXml, "/custom-properties:Properties/custom-properties:property[1]", + "name", "testDateProperty"); + assertXPathContent(pCustomXml, "/custom-properties:Properties/custom-properties:property[1]/vt:filetime", + "1982-04-19T10:00:00Z"); + assertXPath(pCustomXml, "/custom-properties:Properties/custom-properties:property[3]", + "name", "testNegativeNumberProperty"); + assertXPathContent(pCustomXml, "/custom-properties:Properties/custom-properties:property[3]/vt:r8", + "-100"); + assertXPath(pCustomXml, "/custom-properties:Properties/custom-properties:property[4]", + "name", "testNumberProperty"); + //assertXPathContent(pCustomXml, "/custom-properties:Properties/custom-properties:property[4]/vt:i4", + // "256"); + assertXPath(pCustomXml, "/custom-properties:Properties/custom-properties:property[5]", + "name", "testRealNumberProperty"); + assertXPathContent(pCustomXml, "/custom-properties:Properties/custom-properties:property[5]/vt:r8", + "-128.1"); + assertXPath(pCustomXml, "/custom-properties:Properties/custom-properties:property[6]", + "name", "testScientificNumber"); + assertXPathContent(pCustomXml, "/custom-properties:Properties/custom-properties:property[6]/vt:r8", + "1.23456789E+023"); + assertXPath(pCustomXml, "/custom-properties:Properties/custom-properties:property[7]", + "name", "testTextProperty"); + assertXPathContent(pCustomXml, "/custom-properties:Properties/custom-properties:property[7]/vt:lpwstr", + "testPropertyValue"); + assertXPath(pCustomXml, "/custom-properties:Properties/custom-properties:property[8]", + "name", "testYesNoProperty"); + assertXPathContent(pCustomXml, "/custom-properties:Properties/custom-properties:property[8]/vt:bool", + "1"); + // Hidden Custom File Property. With Final set, MS Office notifies recipients that the document is final, and sets the document to read-only. + assertXPath(pCustomXml, "/custom-properties:Properties/custom-properties:property[9]", + "name", "_MarkAsFinal"); + assertXPathContent(pCustomXml, "/custom-properties:Properties/custom-properties:property[9]/vt:bool", + "1"); + + // Core file properties - common for all packages (eg. creation date, modify date) + pXmlDoc = parseExport("docProps/core.xml"); + assertXPathContent(pXmlDoc, "/cp:coreProperties/dc:creator", "Bartosz Kosiorek;secondauthor"); + assertXPathContent(pXmlDoc, "/cp:coreProperties/dc:description", "cccckomentarzglowny"); + assertXPathContent(pXmlDoc, "/cp:coreProperties/cp:lastPrinted", "2020-10-15T07:42:00Z"); + assertXPathContent(pXmlDoc, "/cp:coreProperties/dcterms:created", "2020-10-14T16:23:00Z"); + assertXPathContent(pXmlDoc, "/cp:coreProperties/cp:category", "eeeetokategoria"); + assertXPathContent(pXmlDoc, "/cp:coreProperties/cp:version", "xxxxversion"); + assertXPathContent(pXmlDoc, "/cp:coreProperties/cp:contentStatus", "ddddstatusnieznany"); + assertXPathContent(pXmlDoc, "/cp:coreProperties/dc:identifier", "zzzzidentifier"); +} + +DECLARE_OOXMLEXPORT_TEST(testUTF8CustomProperties, "tdf127864.docx") +{ + uno::Reference xDocumentPropertiesSupplier( + mxComponent, uno::UNO_QUERY); + uno::Reference xDocumentProperties + = xDocumentPropertiesSupplier->getDocumentProperties(); + uno::Reference xPropertySet( + xDocumentProperties->getUserDefinedProperties(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(u"первый"), getProperty(xPropertySet, u"первый")); +} + +DECLARE_OOXMLEXPORT_TEST(testKeywords, "tdf143175.docx") +{ + uno::Reference xDocumentPropertiesSupplier( + mxComponent, uno::UNO_QUERY); + uno::Reference xDocumentProperties + = xDocumentPropertiesSupplier->getDocumentProperties(); + uno::Sequence aKeywords(xDocumentProperties->getKeywords()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), aKeywords.getLength()); + CPPUNIT_ASSERT_EQUAL(OUString("One"), aKeywords[0]); + CPPUNIT_ASSERT_EQUAL(OUString("Two"), aKeywords[1]); + CPPUNIT_ASSERT_EQUAL(OUString("Three"), aKeywords[2]); +} + +DECLARE_OOXMLEXPORT_TEST(testZoom, "zoom.docx") +{ + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xViewSettingsSupplier(xModel->getCurrentController(), uno::UNO_QUERY); + uno::Reference xPropertySet(xViewSettingsSupplier->getViewSettings()); + sal_Int16 nValue = 0; + xPropertySet->getPropertyValue("ZoomValue") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(42), nValue); + + // Validation test: order of elements were wrong. + xmlDocUniquePtr pXmlDoc = parseExport("word/styles.xml"); + if (!pXmlDoc) + return; + // Order was: rsid, next. + int nNext = getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "next"); + int nRsid = getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "rsid"); + CPPUNIT_ASSERT(nNext < nRsid); + + pXmlDoc = parseExport("docProps/app.xml"); + // One paragraph in the document. + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:Paragraphs", "1"); + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:Company", "Example Ltd"); +} + +CPPUNIT_TEST_FIXTURE(Test, defaultTabStopNotInStyles) +{ + loadAndReload("empty.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); +// The default tab stop was mistakenly exported to a style. +// xray ThisComponent.StyleFamilies(1)(0).ParaTabStop + uno::Reference< container::XNameAccess > paragraphStyles = getStyles( "ParagraphStyles" ); + uno::Sequence< style::TabStop > stops = getProperty< uno::Sequence< style::TabStop > >( + paragraphStyles->getByName( "Standard" ), "ParaTabStops" ); +// There actually be one tab stop, but it will be the default. + CPPUNIT_ASSERT_EQUAL( static_cast(1), stops.getLength()); + CPPUNIT_ASSERT_EQUAL( style::TabAlign_DEFAULT, stops[ 0 ].Alignment ); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo38244, "fdo38244.docx") +{ + /* + * Comments attached to a range was imported without the range, check for the annotation mark start/end positions. + * + * oParas = ThisComponent.Text.createEnumeration + * oPara = oParas.nextElement + * oRuns = oPara.createEnumeration + * oRun = oRuns.nextElement + * oRun = oRuns.nextElement 'Annotation + * oRun = oRuns.nextElement + * oRun = oRuns.nextElement 'AnnotationEnd + * xray oRun.TextPortionType + */ + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + xRunEnum->nextElement(); + uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), getProperty(xPropertySet, "TextPortionType")); + xRunEnum->nextElement(); + xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), getProperty(xPropertySet, "TextPortionType")); + + /* + * Initials were not imported. + * + * oFields = ThisComponent.TextFields.createEnumeration + * oField = oFields.nextElement + * xray oField.Initials + */ + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty(xPropertySet, "Initials")); + + /* + * There was a fake empty paragraph at the end of the comment text. + * + * oFields = ThisComponent.TextFields.createEnumeration + * oField = oFields.nextElement + * oParas = oField.TextRange.createEnumeration + * oPara = oParas.nextElement + * oPara = oParas.nextElement + */ + + xParaEnumAccess = getProperty< uno::Reference >(xPropertySet, "TextRange"); + xParaEnum = xParaEnumAccess->createEnumeration(); + xParaEnum->nextElement(); + CPPUNIT_ASSERT(!xParaEnum->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(Test, testCommentsNested) +{ + loadAndReload("comments-nested.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xOuter = getProperty< uno::Reference >(getRun(getParagraph(1), 2), "TextField"); + CPPUNIT_ASSERT_EQUAL(OUString("Outer"), getProperty(xOuter, "Content")); + + uno::Reference xInner = getProperty< uno::Reference >(getRun(getParagraph(1), 4), "TextField"); + CPPUNIT_ASSERT_EQUAL(OUString("Inner"), getProperty(xInner, "Content")); +} + +CPPUNIT_TEST_FIXTURE(Test, testMathEscape) +{ + loadAndReload("math-escape.docx"); + CPPUNIT_ASSERT_EQUAL(OUString("\\{ left [ right ] left ( right ) \\}"), getFormula(getRun(getParagraph(1), 1))); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo51034) +{ + loadAndReload("fdo51034.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The problem was that the 'l' param of the HYPERLINK field was parsed with = "#", not += "#". + CPPUNIT_ASSERT_EQUAL(OUString("http://Www.google.com/#a"), getProperty(getRun(getParagraph(1), 1), "HyperLinkURL")); +} + +// Remove all spaces, as LO export/import may change that. +// Replace symbol - (i.e. U+2212) with ASCII - , LO does this change and it shouldn't matter. +static void CHECK_FORMULA(OUString const & expected, OUString const & actual) { + CPPUNIT_ASSERT_EQUAL( + expected.replaceAll( " ", "" ).replaceAll( u"\u2212", "-" ), + actual.replaceAll( " ", "" ).replaceAll( u"\u2212", "-" )); +} + +DECLARE_OOXMLEXPORT_TEST(testMathAccents, "math-accents.docx") +{ + CHECK_FORMULA( + "acute {a} grave {a} check {a} breve {a} circle {a} widevec {a} widetilde {a}" + " widehat {a} dot {a} widevec {a} widevec {a} widetilde {a} underline {a}", + getFormula( getRun( getParagraph( 1 ), 1 ))); +} + +DECLARE_OOXMLEXPORT_TEST(testMathD, "math-d.docx") +{ + CHECK_FORMULA( "left (x mline y mline z right )", getFormula( getRun( getParagraph( 1 ), 1 ))); + CHECK_FORMULA( "left (1 right )", getFormula( getRun( getParagraph( 1 ), 2 ))); + CHECK_FORMULA( "left [2 right ]", getFormula( getRun( getParagraph( 1 ), 3 ))); + CHECK_FORMULA( "left ldbracket 3 right rdbracket", getFormula( getRun( getParagraph( 1 ), 4 ))); + CHECK_FORMULA( "left lline 4 right rline", getFormula( getRun( getParagraph( 1 ), 5 ))); + CHECK_FORMULA( "left ldline 5 right rdline", getFormula( getRun( getParagraph( 1 ), 6 ))); + CHECK_FORMULA( "left langle 6 right rangle", getFormula( getRun( getParagraph( 1 ), 7 ))); + CHECK_FORMULA( "left langle a mline b right rangle", getFormula( getRun( getParagraph( 1 ), 8 ))); + CHECK_FORMULA( "left ({x} over {y} right )", getFormula( getRun( getParagraph( 1 ), 9 ))); +} + +DECLARE_OOXMLEXPORT_TEST(testMathEscaping, "math-escaping.docx") +{ + CHECK_FORMULA( u"\u2212 \u221E < x < \u221E", getFormula( getRun( getParagraph( 1 ), 1 ))); +} + +DECLARE_OOXMLEXPORT_TEST(testMathLim, "math-lim.docx") +{ + CHECK_FORMULA( u"lim from {x \u2192 1} {x}", getFormula( getRun( getParagraph( 1 ), 1 ))); +} + +DECLARE_OOXMLEXPORT_TEST(testMathMatrix, "math-matrix.docx") +{ + CHECK_FORMULA( "left [matrix {1 # 2 ## 3 # 4} right ]", getFormula( getRun( getParagraph( 1 ), 1 ))); +} + +CPPUNIT_TEST_FIXTURE(Test, testMathMso2k7) +{ + loadAndReload("math-mso2k7.docx"); + CHECK_FORMULA( u"A = \u03C0 {r} ^ {2}", getFormula( getRun( getParagraph( 1 ), 1 ))); +// TODO check the stack/binom difference +// CHECK_FORMULA( "{left (x+a right )} ^ {n} = sum from {k=0} to {n} {left (binom {n} {k} right ) {x} ^ {k} {a} ^ {n-k}}", + CHECK_FORMULA( "{left (x+a right )} ^ {n} = sum from {k=0} to {n} {left (stack {n # k} right ) {x} ^ {k} {a} ^ {n-k}}", + getFormula( getRun( getParagraph( 2 ), 1 ))); + CHECK_FORMULA( u"{left (1+x right )} ^ {n} =1+ {nx} over {1!} + {n left (n-1 right ) {x} ^ {2}} over {2!} +\u2026", + getFormula( getRun( getParagraph( 3 ), 1 ))); +// TODO check (cos/sin miss {}) +// CHECK_FORMULA( "f left (x right ) = {a} rsub {0} + sum from {n=1} to {\xe2\x88\x9e} {left ({a} rsub {n} cos {{n\xcf\x80x} over {L}} + {b} rsub {n} sin {{n\xcf\x80x} over {L}} right )}", + CHECK_FORMULA( u"f left (x right ) = {a} rsub {0} + sum from {n=1} to {\u221E} {left ({a} rsub {n} cos {n\u03C0x} over {L} + {b} rsub {n} sin {n\u03C0x} over {L} right )}", + getFormula( getRun( getParagraph( 4 ), 1 ))); + CHECK_FORMULA( "{a} ^ {2} + {b} ^ {2} = {c} ^ {2}", getFormula( getRun( getParagraph( 5 ), 1 ))); + CHECK_FORMULA( u"x = {- b \u00B1 sqrt {{b} ^ {2} -4 ac}} over {2 a}", + getFormula( getRun( getParagraph( 6 ), 1 ))); + CHECK_FORMULA( + u"{e} ^ {x} =1+ {x} over {1!} + {{x} ^ {2}} over {2!} + {{x} ^ {3}} over {3!} +\u2026, -\u221E to ", getFormula( getRun( getParagraph( 1 ), 1 ))); +} + +DECLARE_OOXMLEXPORT_TEST(testMathRad, "math-rad.docx") +{ + CHECK_FORMULA( "sqrt {4}", getFormula( getRun( getParagraph( 1 ), 1 ))); + CHECK_FORMULA( "nroot {3} {x + 1}", getFormula( getRun( getParagraph( 1 ), 2 ))); +} + +DECLARE_OOXMLEXPORT_TEST(testMathSubscripts, "math-subscripts.docx") +{ + CHECK_FORMULA( "{x} ^ {y} + {e} ^ {x}", getFormula( getRun( getParagraph( 1 ), 1 ))); + CHECK_FORMULA( "{x} ^ {b}", getFormula( getRun( getParagraph( 1 ), 2 ))); + CHECK_FORMULA( "{x} rsub {b}", getFormula( getRun( getParagraph( 1 ), 3 ))); + CHECK_FORMULA( "{a} rsub {c} rsup {b}", getFormula( getRun( getParagraph( 1 ), 4 ))); + CHECK_FORMULA( "{x} lsub {2} lsup {1}", getFormula( getRun( getParagraph( 1 ), 5 ))); + CHECK_FORMULA( "{{x csup {6} csub {3}} lsub {4} lsup {5}} rsub {2} rsup {1}", + getFormula( getRun( getParagraph( 1 ), 6 ))); +} + +DECLARE_OOXMLEXPORT_TEST(testMathVerticalStacks, "math-vertical_stacks.docx") +{ + CHECK_FORMULA( "{a} over {b}", getFormula( getRun( getParagraph( 1 ), 1 ))); + CHECK_FORMULA( "{a} / {b}", getFormula( getRun( getParagraph( 2 ), 1 ))); +// TODO check these +// CHECK_FORMULA( "binom {a} {b}", getFormula( getRun( getParagraph( 3 ), 1 ))); +// CHECK_FORMULA( "binom {a} {binom {b} {c}}", getFormula( getRun( getParagraph( 4 ), 1 ))); +} + +CPPUNIT_TEST_FIXTURE(Test, testTable) +{ + loadAndReload("table.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Make sure we write qFormat for well-known style names. + xmlDocUniquePtr pXmlDocCT = parseExport("word/styles.xml"); + CPPUNIT_ASSERT(pXmlDocCT); + assertXPath(pXmlDocCT, "//w:style[@w:styleId='Normal']/w:qFormat", 1); +} + +namespace { + +struct SingleLineBorders { + sal_Int16 top, bottom, left, right; + SingleLineBorders(int t=0, int b=0, int l=0, int r=0) + : top(t), bottom(b), left(l), right(r) {} + sal_Int16 getBorder(int i) const + { + switch (i) { + case 0: return top; + case 1: return bottom; + case 2: return left; + case 3: return right; + default: assert(false); return 0; + } + } +}; + +} + +DECLARE_OOXMLEXPORT_TEST(testTableBorders, "table-borders.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + uno::Reference xTextTable (xTables->getByIndex(0), uno::UNO_QUERY); + + std::map cellBorders; + cellBorders[OUString("A1")] = SingleLineBorders(106, 106, 106, 106); + cellBorders[OUString("B1")] = SingleLineBorders(106, 0, 106, 35); + cellBorders[OUString("C1")] = SingleLineBorders(106, 106, 35, 106); + cellBorders[OUString("A2")] = SingleLineBorders(106, 35, 106, 0); + cellBorders[OUString("B2")] = SingleLineBorders(0, 0, 0, 0); + cellBorders[OUString("C2")] = SingleLineBorders(106, 106, 0, 106); + cellBorders[OUString("A3")] = SingleLineBorders(35, 35, 106, 106); + cellBorders[OUString("B3")] = SingleLineBorders(0, 106, 106, 106); + cellBorders[OUString("C3")] = SingleLineBorders(106, 106, 106, 106); + cellBorders[OUString("A4")] = SingleLineBorders(35, 106, 106, 35); + cellBorders[OUString("B4")] = SingleLineBorders(106, 106, 35, 106); + cellBorders[OUString("C4")] = SingleLineBorders(106, 106, 106, 106); + + const OUString borderNames[] = { + OUString("TopBorder"), + OUString("BottomBorder"), + OUString("LeftBorder"), + OUString("RightBorder"), + }; + + uno::Sequence const cells = xTextTable->getCellNames(); + sal_Int32 nLength = cells.getLength(); + CPPUNIT_ASSERT_EQUAL(static_cast(cellBorders.size()), nLength); + + for (sal_Int32 i = 0; i < nLength; ++i) + { + uno::Reference xCell = xTextTable->getCellByName(cells[i]); + uno::Reference< beans::XPropertySet > xPropSet(xCell, uno::UNO_QUERY_THROW); + const SingleLineBorders& borders = cellBorders[cells[i]]; + + for (sal_Int32 j = 0; j < 4; ++j) + { + uno::Any aBorder = xPropSet->getPropertyValue(borderNames[j]); + table::BorderLine aBorderLine; + if (aBorder >>= aBorderLine) + { + std::stringstream message; + message << cells[i] << "'s " << borderNames[j] << " is incorrect"; + CPPUNIT_ASSERT_EQUAL_MESSAGE(message.str(), + borders.getBorder(j), aBorderLine.OuterLineWidth); + } + } + } +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo51550) +{ + loadAndReload("fdo51550.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The problem was that we lacked the fallback to export the replacement + // graphic for OLE objects. But we can actually export the OLE itself now, + // so check that instead. + uno::Reference xTextEmbeddedObjectsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xEmbeddedObjects(xTextEmbeddedObjectsSupplier->getEmbeddedObjects(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xEmbeddedObjects->getCount()); + + xmlDocUniquePtr pXmlDocCT = parseExport("[Content_Types].xml"); + + if (!pXmlDocCT) + return; // initial import + + assertXPath(pXmlDocCT, "/ContentType:Types/ContentType:Override[@PartName='/word/embeddings/oleObject1.xlsx']", "ContentType", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + + // check the rels too + xmlDocUniquePtr pXmlDocRels = parseExport("word/_rels/document.xml.rels"); + assertXPath(pXmlDocRels, + "/rels:Relationships/rels:Relationship[@Target='embeddings/oleObject1.xlsx']", + "Type", + "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package"); + // check the content too + xmlDocUniquePtr pXmlDocContent = parseExport("word/document.xml"); + assertXPath(pXmlDocContent, + "/w:document/w:body/w:p/w:r/w:object/o:OLEObject", + "ProgID", + "Excel.Sheet.12"); +} + +DECLARE_OOXMLEXPORT_TEST(test1Table1Page, "1-table-1-page.docx") +{ + // 2 problem for this document after export: + // - invalid sectPr inserted at the beginning of the page + // - font of empty cell is not preserved, leading to change in rows height + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTextFrames) +{ + loadAndReload("textframes.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The frames were simply missing, so let's check if all 3 frames were imported back. + CPPUNIT_ASSERT_EQUAL(3, getShapes()); +} + +DECLARE_OOXMLEXPORT_TEST(testTextFrameBorders, "textframe-borders.docx") +{ + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + if (xIndexAccess->getCount()) + { + // After import, a TextFrame is created by the VML import. + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0xD99594), getProperty(xFrame, "BackColor")); + + table::BorderLine2 aBorder = getProperty(xFrame, "TopBorder"); + CPPUNIT_ASSERT_EQUAL(Color(0xC0504D), Color(ColorTransparency, aBorder.Color)); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(35), aBorder.LineWidth); + + table::ShadowFormat aShadowFormat = getProperty(xFrame, "ShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadowFormat.Location); + CPPUNIT_ASSERT_EQUAL(sal_Int16(48), aShadowFormat.ShadowWidth); + CPPUNIT_ASSERT_EQUAL(Color(0x622423), Color(ColorTransparency, aShadowFormat.Color)); + } + else + { + // After export and import, the result is a shape. + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0xD99594), getProperty(xShape, "FillColor")); + + CPPUNIT_ASSERT_EQUAL(Color(0xC0504D), getProperty(xShape, "LineColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(35), getProperty(xShape, "LineWidth")); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(48), getProperty(xShape, "ShadowXDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(48), getProperty(xShape, "ShadowYDistance")); + CPPUNIT_ASSERT_EQUAL(Color(0x622423), getProperty(xShape, "ShadowColor")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testTextframeGradient, "textframe-gradient.docx") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + + uno::Reference xFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame, "FillStyle")); + awt::Gradient aGradient = getProperty(xFrame, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(Color(0xC0504D), Color(ColorTransparency, aGradient.StartColor)); + CPPUNIT_ASSERT_EQUAL(Color(0xD99594), Color(ColorTransparency, aGradient.EndColor)); + CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); + + xFrame.set(getShape(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame, "FillStyle")); + aGradient = getProperty(xFrame, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(Color(0x000000), Color(ColorTransparency, aGradient.StartColor)); + CPPUNIT_ASSERT_EQUAL(Color(0x666666), Color(ColorTransparency, aGradient.EndColor)); + CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); + + // Left / right margin was incorrect: the attribute was missing and we + // didn't have the right default (had 0 instead of the below one). + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(318), getProperty(xFrame, "LeftMargin"), 2); + CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(318), getProperty(xFrame, "RightMargin"), 2); +} + +CPPUNIT_TEST_FIXTURE(Test, testCellBtlr) +{ + loadAndSave("cell-btlr.docx"); + /* + * The problem was that the exporter didn't mirror the workaround of the + * importer, regarding the btLr text direction: the token was completely missing in the output. + */ + + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tcPr/w:textDirection", "val", "btLr"); +} + +DECLARE_OOXMLEXPORT_TEST(testTableStylerPrSz, "table-style-rPr-sz.docx") +{ + // Verify that font size inside the table is 20pt, despite the sz attribute in the table size. + // Also check that other rPr attribute are used: italic, bold, underline + // Office has the same behavior + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xCell->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); +// disabled temporarily, next commit enables it again +#if 0 + CPPUNIT_ASSERT_EQUAL(20.f, getProperty(getRun(xPara, 1), "CharHeight")); +#endif +// CPPUNIT_ASSERT_EQUAL(awt::FontUnderline::SINGLE, getProperty(getRun(xPara, 1), "CharUnderline")); +// CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty(getRun(xPara, 1), "CharWeight")); +// CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, getProperty(getRun(xPara, 1), "CharPosture")); +} + +DECLARE_OOXMLEXPORT_TEST(testMathLiteral, "math-literal.docx") +{ + CHECK_FORMULA( u"iiint from {V} to {\"div\" \"F\"} dV= llint from {S} to {\"F\" \u2219 \"n \" dS}", + getFormula( getRun( getParagraph( 1 ), 1 ))); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo48557) +{ + loadAndReload("fdo48557.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Inner margins of the textframe wasn't exported. + uno::Reference xFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(150), getProperty(xFrame, "TextLeftDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(150), getProperty(xFrame, "TextRightDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(150), getProperty(xFrame, "TextUpperDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(150), getProperty(xFrame, "TextLowerDistance")); +} + +DECLARE_OOXMLEXPORT_TEST(testI120928, "i120928.docx") +{ + // w:numPicBullet was ignored, leading to missing graphic bullet in numbering. + uno::Reference xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProps; + xLevels->getByIndex(0) >>= aProps; // 1st level + + uno::Reference xBitmap; + sal_Int16 nNumberingType = -1; + + for (beans::PropertyValue const & rProp : std::as_const(aProps)) + { + if (rProp.Name == "NumberingType") + nNumberingType = rProp.Value.get(); + else if (rProp.Name == "GraphicBitmap") + xBitmap = rProp.Value.get>(); + } + CPPUNIT_ASSERT_EQUAL(style::NumberingType::BITMAP, nNumberingType); + CPPUNIT_ASSERT(xBitmap.is()); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo64826, "fdo64826.docx") +{ + // 'Track-Changes' (Track Revisions) wasn't exported. + CPPUNIT_ASSERT_EQUAL(true, getProperty(mxComponent, "RecordChanges")); + // 'Show-Changes' should not be exported - default is true. + if (xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml")) + { + assertXPath(pXmlSettings, "/w:settings/w:revisionView", 0); + } +} + +DECLARE_OOXMLEXPORT_TEST(testPageBackground, "page-background.docx") +{ + // 'Document Background' wasn't exported. + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x92D050), getProperty(xPageStyle, "BackColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo65265, "fdo65265.docx") +{ + // Redline (tracked changes) of text formatting were not exported + uno::Reference xParagraph1 = getParagraph(1); + uno::Reference xParagraph2 = getParagraph(2); + + CPPUNIT_ASSERT_EQUAL(OUString("Format"), getProperty(getRun(xParagraph1, 3), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Format"), getProperty(getRun(xParagraph2, 2), "RedlineType")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo65655, "fdo65655.docx") +{ + // 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 + uno::Reference xPropertySet(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + bool bValue = false; + xPropertySet->getPropertyValue("HeaderIsShared") >>= bValue; + CPPUNIT_ASSERT_EQUAL(false, bValue); + xPropertySet->getPropertyValue("FooterIsShared") >>= bValue; + CPPUNIT_ASSERT_EQUAL(false, bValue); +} + +DECLARE_OOXMLEXPORT_TEST(testFDO63053, "fdo63053.docx") +{ + uno::Reference xDocumentPropertiesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties(); + CPPUNIT_ASSERT_EQUAL(OUString("test1&test2"), xDocumentProperties->getTitle()); + CPPUNIT_ASSERT_EQUAL(OUString("test1&test2"), xDocumentProperties->getSubject()); +} + +DECLARE_OOXMLEXPORT_TEST(testWatermark, "watermark.docx") +{ + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + // 1st problem: last character was missing + CPPUNIT_ASSERT_EQUAL(OUString("SAMPLE"), xShape->getString()); + + const uno::Sequence aProps = getProperty< uno::Sequence >(xShape, "CustomShapeGeometry"); + bool bFound = false; + for (beans::PropertyValue const & prop : aProps) + if (prop.Name == "TextPath") + bFound = true; + // 2nd problem: v:textpath wasn't imported + CPPUNIT_ASSERT_EQUAL(true, bFound); + + // 3rd problem: rotation angle was 315, not 45. + CPPUNIT_ASSERT_EQUAL(sal_Int32(45 * 100), getProperty(xShape, "RotateAngle")); + + // 4th problem: mso-position-vertical-relative:margin was ignored, VertOrientRelation was text::RelOrientation::FRAME. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_PRINT_AREA, getProperty(xShape, "VertOrientRelation")); + + // These problems were in the exporter + // The textpath wasn't semi-transparent. + CPPUNIT_ASSERT_EQUAL(sal_Int16(50), getProperty(xShape, "FillTransparence")); + // The textpath had a stroke. + CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_NONE, getProperty(xShape, "LineStyle")); +} + +DECLARE_OOXMLEXPORT_TEST(testWatermarkFont, "watermark-font.docx") +{ + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("TestFont"), xShape->getString()); + + uno::Reference xPropertySet(xShape, uno::UNO_QUERY); + OUString aFont; + float nFontSize; + + // Check font family + CPPUNIT_ASSERT(xPropertySet->getPropertyValue("CharFontName") >>= aFont); + CPPUNIT_ASSERT_EQUAL(OUString("DejaVu Serif"), aFont); + + // Check font size + CPPUNIT_ASSERT(xPropertySet->getPropertyValue("CharHeight") >>= nFontSize); + CPPUNIT_ASSERT_EQUAL(float(72), nFontSize); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo43093, "fdo43093.docx") +{ + // The problem was that the alignment are not exchange when the paragraph are RTL. + uno::Reference xParaRtlLeft(getParagraph( 1, "RTL Left")); + sal_Int32 nRtlLeft = getProperty< sal_Int32 >( xParaRtlLeft, "ParaAdjust" ); + // test the text Direction value for the paragraph + sal_Int16 nRLDir = getProperty< sal_Int32 >( xParaRtlLeft, "WritingMode" ); + + uno::Reference xParaRtlRight(getParagraph( 3, "RTL Right")); + sal_Int32 nRtlRight = getProperty< sal_Int32 >( xParaRtlRight, "ParaAdjust" ); + sal_Int16 nRRDir = getProperty< sal_Int32 >( xParaRtlRight, "WritingMode" ); + + uno::Reference xParaLtrLeft(getParagraph( 5, "LTR Left")); + sal_Int32 nLtrLeft = getProperty< sal_Int32 >( xParaLtrLeft, "ParaAdjust" ); + sal_Int16 nLLDir = getProperty< sal_Int32 >( xParaLtrLeft, "WritingMode" ); + + uno::Reference xParaLtrRight(getParagraph( 7, "LTR Right")); + sal_Int32 nLtrRight = getProperty< sal_Int32 >( xParaLtrRight, "ParaAdjust" ); + sal_Int16 nLRDir = getProperty< sal_Int32 >( xParaLtrRight, "WritingMode" ); + + // this will test the both the text direction and alignment for each paragraph + CPPUNIT_ASSERT_EQUAL( sal_Int32 (style::ParagraphAdjust_LEFT), nRtlLeft); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::RL_TB, nRLDir); + + CPPUNIT_ASSERT_EQUAL( sal_Int32 (style::ParagraphAdjust_RIGHT), nRtlRight); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::RL_TB, nRRDir); + + CPPUNIT_ASSERT_EQUAL( sal_Int32 (style::ParagraphAdjust_LEFT), nLtrLeft); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::LR_TB, nLLDir); + + CPPUNIT_ASSERT_EQUAL( sal_Int32 (style::ParagraphAdjust_RIGHT), nLtrRight); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::LR_TB, nLRDir); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo64238_a, "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 xFooterText = getProperty< uno::Reference >(getStyles("PageStyles")->getByName("Standard"), "FooterText"); + uno::Reference< text::XTextRange > xFooterParagraph = getParagraphOfText( 1, xFooterText ); + uno::Reference xRunEnumAccess(xFooterParagraph, uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + sal_Int32 numOfRuns = 0; + while (xRunEnum->hasMoreElements()) + { + xRunEnum->nextElement(); + numOfRuns++; + } + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), numOfRuns); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo64238_b, "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 xFooterText = getProperty< uno::Reference >(getStyles("PageStyles")->getByName("Standard"), "FooterText"); + uno::Reference< text::XTextRange > xFooterParagraph = getParagraphOfText( 1, xFooterText ); + uno::Reference xRunEnumAccess(xFooterParagraph, uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + sal_Int32 numOfRuns = 0; + while (xRunEnum->hasMoreElements()) + { + xRunEnum->nextElement(); + numOfRuns++; + } + // "This is the ", "ODD", " [", "LEFT", "] header" and the colored paragraph marker + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), numOfRuns); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo56679, "fdo56679.docx") +{ + // The problem was that the DOCX importer and exporter did not handle the 'color' of an underline + // (not the color of the text, the color of the underline itself) + uno::Reference< text::XTextRange > xParagraph = getParagraph( 1 ); + uno::Reference< text::XTextRange > xText = getRun( xParagraph, 2, "This is a simple sentence."); + + CPPUNIT_ASSERT_EQUAL(true, getProperty(xText, "CharUnderlineHasColor")); + CPPUNIT_ASSERT_EQUAL(Color(0xFF0000), getProperty(xText, "CharUnderlineColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo65400, "fdo65400.docx") +{ + // The problem was that if in Word you choose 'Character Shading' - then the text portion + // is marked with 'w:shd val=pct15'. LO did not store this value and so when importing and exporting + // this value was lost (and so Word did not show 'Character Shading' was on) + uno::Reference< text::XTextRange > paragraph1 = getParagraph( 1 ); + uno::Reference< text::XTextRange > shaded = getRun( paragraph1, 2, "normal" ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 0x0026 ), getProperty< sal_Int32 >( shaded, "CharShadingValue" )); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 0xd8d8d8 ), getProperty< sal_Int32 >( shaded, "CharBackColor" )); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo66543, "fdo66543.docx") +{ + // The problem was that when importing DOCX with 'line numbers' - the 'start value' was imported + // but nothing was done with it. + + uno::Reference< text::XTextRange > paragraph1 = getParagraph( 1 ); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), + getProperty(paragraph1, "ParaLineNumberStartValue")); +} + +CPPUNIT_TEST_FIXTURE(Test, testN822175) +{ + loadAndReload("n822175.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xFrame(getShape(1), uno::UNO_QUERY); + // Was text::WrapTextMode_THROUGH, due to missing Surround handling in the exporter. + CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_PARALLEL, getProperty(xFrame, "Surround")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo66688, "fdo66688.docx") +{ + // The problem was that TextFrame imported and exported the wrong value for transparency + // (was stored as 'FillTransparence' instead of 'BackColorTransparency' + uno::Reference xFrame(getShape(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 80 ), getProperty< sal_Int32 >( xFrame, "FillTransparence" ) ); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo66773, "fdo66773.docx") +{ + // The problem was the line spacing was interpreted by Word as 'Multiple 1.08' if no default settings were written. + // Now after the 'docDefaults' section is written in - there is no more problem. + // (Word does not try to calculate some arbitrary value for line spacing). + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + CPPUNIT_ASSERT(xParaEnum->hasMoreElements()); + + style::LineSpacing alineSpacing = getProperty(xParaEnum->nextElement(), "ParaLineSpacing"); + CPPUNIT_ASSERT_EQUAL(style::LineSpacingMode::PROP, alineSpacing.Mode); + CPPUNIT_ASSERT_EQUAL(static_cast(100), static_cast(alineSpacing.Height)); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo58577) +{ + loadAndReload("fdo58577.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The second frame was simply missing, so let's check if both frames were imported back. + CPPUNIT_ASSERT_EQUAL(2, getShapes()); +} + +CPPUNIT_TEST_FIXTURE(Test, testBnc581614) +{ + loadAndReload("bnc581614.doc"); + uno::Reference xFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xFrame, "FillStyle")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo66929, "fdo66929.docx") +{ + // The problem was that the default 'inset' attribute of the 'textbox' node was exported incorrectly. + // A node like '' was exported back as '' + // This is wrong because the original node denotes a specific 'left' inset, and a default 'top','right','bottom' inset + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + if (xIndexAccess->getCount()) + { + // VML import -> TextFrame + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 0 ) , getProperty< sal_Int32 >( xFrame, "LeftBorderDistance" ) ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 127 ), getProperty< sal_Int32 >( xFrame, "TopBorderDistance" ) ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 254 ), getProperty< sal_Int32 >( xFrame, "RightBorderDistance" ) ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 127 ), getProperty< sal_Int32 >( xFrame, "BottomBorderDistance" ) ); + } + else + { + // drawingML import -> shape with TextBox + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xShape, "TextLeftDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(127), getProperty(xShape, "TextUpperDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(254), getProperty(xShape, "TextRightDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(127), getProperty(xShape, "TextLowerDistance")); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testPageBorderSpacingExportCase2) +{ + loadAndSave("page-borders-export-case-2.docx"); + // The problem was that the exporter didn't mirror the workaround of the + // importer, regarding the page border's spacing : the + // and the inner nodes like + // + // The exporter ALWAYS exported 'w:offsetFrom="text"' even when the spacing values where too large + // for Word to handle (larger than 31 points) + + xmlDocUniquePtr pXmlDoc = parseExport(); + + // Assert the XPath expression - page borders + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:pgBorders", "offsetFrom", "page"); + + // Assert the XPath expression - 'left' border + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:pgBorders/w:left", "space", "24"); + + // Assert the XPath expression - 'right' border + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:pgBorders/w:right", "space", "24"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo66145, "fdo66145.docx") +{ + // The Writer ignored the 'First Is Shared' flag + CPPUNIT_ASSERT_EQUAL(OUString("This is the FIRST page header."), + parseDump("/root/page[1]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL( + OUString("This is the header for the REST OF THE FILE."), + parseDump("/root/page[2]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL( + OUString("This is the header for the REST OF THE FILE."), + parseDump("/root/page[3]/header/txt/text()")); +} + +CPPUNIT_TEST_FIXTURE(Test, testGrabBag) +{ + loadAndSave("grabbag.docx"); + // w:mirrorIndents was lost on roundtrip, now should be handled as a grab bag property + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:pPr/w:mirrorIndents"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo66781, "fdo66781.docx") +{ + // The problem was that bullets with level=0 were shown in LO as normal bullets, + // and when saved back to DOCX were saved with level=1 (so hidden bullets became visible) + uno::Reference xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProps; + xLevels->getByIndex(0) >>= aProps; // 1st level + + for (beans::PropertyValue const & rProp : std::as_const(aProps)) + { + if (rProp.Name == "BulletChar") + { + CPPUNIT_ASSERT_EQUAL(OUString("\x0", 1, RTL_TEXTENCODING_ASCII_US), rProp.Value.get()); + return; + } + } + + // Shouldn't reach here + CPPUNIT_FAIL("Did not find bullet with level 0"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo60990) +{ + loadAndReload("fdo60990.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The shape had no background, no paragraph adjust and no font color. + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x00CFE7F5), getProperty(xShape, "FillColor")); + uno::Reference xText = uno::Reference(xShape, uno::UNO_QUERY_THROW)->getText(); + uno::Reference xParagraph = getParagraphOfText(1, xText); + CPPUNIT_ASSERT_EQUAL(style::ParagraphAdjust_CENTER, static_cast(getProperty(xParagraph, "ParaAdjust"))); + CPPUNIT_ASSERT_EQUAL(Color(0x00FF00), getProperty(getRun(xParagraph, 1), "CharColor")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo65718, "fdo65718.docx") +{ + // The problem was that the exporter always exported values of "0" for an images distance from text. + // the actual attributes where 'distT', 'distB', 'distL', 'distR' + uno::Reference xPropertySet(getShape(1), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL(oox::drawingml::convertEmuToHmm(0), getProperty(xPropertySet, "TopMargin") ); + CPPUNIT_ASSERT_EQUAL(oox::drawingml::convertEmuToHmm(0), getProperty(xPropertySet, "BottomMargin") ); + + // 'getProperty' return 318 (instead of 317.5) + // I think this is because it returns an integer, instead of a float. + // The actual exporting to DOCX exports the correct value (114300 = 317.5 * 360) + // The exporting to DOCX uses the 'SvxLRSpacing' that stores the value in TWIPS (180 TWIPS) + // However, the 'LeftMargin' property is an integer property that holds that value in 'MM100' (should hold 317.5, but it is 318) + CPPUNIT_ASSERT_EQUAL(oox::drawingml::convertEmuToHmm(114300), getProperty(xPropertySet, "LeftMargin") ); + CPPUNIT_ASSERT_EQUAL(oox::drawingml::convertEmuToHmm(114300), getProperty(xPropertySet, "RightMargin") ); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo64350, "fdo64350.docx") +{ + // The problem was that page border shadows were not exported + table::ShadowFormat aShadow = getProperty(getStyles("PageStyles")->getByName("Standard"), "ShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo67013, "fdo67013.docx") +{ + /* + * The problem was that borders inside headers \ footers were not exported + * This was checked in xray using these commands: + * + * xHeaderText = ThisComponent.getStyleFamilies().getByName("PageStyles").getByName("Standard").HeaderText + * xHeaderEnum = xHeaderText.createEnumeration() + * xHeaderFirstParagraph = xHeaderEnum.nextElement() + * xHeaderBottomBorder = xHeaderFirstParagraph.BottomBorder + * + * xFooterText = ThisComponent.getStyleFamilies().getByName("PageStyles").getByName("Standard").FooterText + * xFooterEnum = xFooterText.createEnumeration() + * xFooterFirstParagraph = xFooterEnum.nextElement() + * xFooterTopBorder = xFooterFirstParagraph.TopBorder + */ + uno::Reference xHeaderText = getProperty< uno::Reference >(getStyles("PageStyles")->getByName("Standard"), "HeaderText"); + uno::Reference< text::XTextRange > xHeaderParagraph = getParagraphOfText( 1, xHeaderText ); + table::BorderLine2 aHeaderBottomBorder = getProperty(xHeaderParagraph, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL(Color(0x622423), Color(ColorTransparency, aHeaderBottomBorder.Color)); + CPPUNIT_ASSERT_EQUAL(sal_Int16(106), aHeaderBottomBorder.InnerLineWidth); + CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aHeaderBottomBorder.LineDistance); + CPPUNIT_ASSERT_EQUAL(sal_Int16(7), aHeaderBottomBorder.LineStyle); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(159), aHeaderBottomBorder.LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aHeaderBottomBorder.OuterLineWidth); + + uno::Reference xFooterText = getProperty< uno::Reference >(getStyles("PageStyles")->getByName("Standard"), "FooterText"); + uno::Reference< text::XTextRange > xFooterParagraph = getParagraphOfText( 1, xFooterText ); + table::BorderLine2 aFooterTopBorder = getProperty(xFooterParagraph, "TopBorder"); + CPPUNIT_ASSERT_EQUAL(Color(0x622423), Color(ColorTransparency, aFooterTopBorder.Color)); + CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aFooterTopBorder.InnerLineWidth); + CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aFooterTopBorder.LineDistance); + CPPUNIT_ASSERT_EQUAL(sal_Int16(4), aFooterTopBorder.LineStyle); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(159), aFooterTopBorder.LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_Int16(106), aFooterTopBorder.OuterLineWidth); +} + +DECLARE_OOXMLEXPORT_TEST(testParaShadow, "para-shadow.docx") +{ + // The problem was that in w:pBdr, child elements had a w:shadow attribute, but that was ignored. + table::ShadowFormat aShadow = getProperty(getParagraph(2), "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + // w:sz="48" is in eights of a point, 1 pt is 20 twips. + CPPUNIT_ASSERT_EQUAL(sal_Int16(convertTwipToMm100(24/8*20)), aShadow.ShadowWidth); +} + +DECLARE_OOXMLEXPORT_TEST(testTableFloating, "table-floating.docx") +{ + // Both the size and the position of the table was incorrect. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + // Second table was too wide: 16249, i.e. as wide as the first table. + CPPUNIT_ASSERT_EQUAL(sal_Int32(11248), getProperty(xTables->getByIndex(1), "Width")); + + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + if (xIndexAccess->getCount()) + { + // After import, table is inside a TextFrame. + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + // This was 0, should be the opposite of (left margin + half of the border width). + CPPUNIT_ASSERT_EQUAL(sal_Int32(-199), getProperty(xFrame, "HoriOrientPosition")); + // Was 0 as well, should be the right margin. + CPPUNIT_ASSERT_EQUAL(sal_Int32(250), getProperty(xFrame, "RightMargin")); + } + else + { + // After import, table is inside a TextFrame. + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + // This was 0, should be the opposite of (left margin + half of the border width). + CPPUNIT_ASSERT_EQUAL(sal_Int32(-199), getProperty(xShape, "HoriOrientPosition")); + // Was 0 as well, should be the right margin. + CPPUNIT_ASSERT_EQUAL(sal_Int32(250), getProperty(xShape, "RightMargin")); + } +} + +DECLARE_OOXMLEXPORT_TEST(testFdo44689_start_page_0, "fdo44689_start_page_0.docx") +{ + // The problem was that the import & export process did not analyze the 'start from page' attribute of a section + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xPara, "PageNumberOffset")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo44689_start_page_7, "fdo44689_start_page_7.docx") +{ + // The problem was that the import & export process did not analyze the 'start from page' attribute of a section + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int16(7), getProperty(xPara, "PageNumberOffset")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo67737, "fdo67737.docx") +{ + // The problem was that imported shapes did not import and render the 'flip:x' and 'flip:y' attributes + uno::Reference xArrow = getShape(1); + const uno::Sequence aProps = getProperty< uno::Sequence >(xArrow, "CustomShapeGeometry"); + for (beans::PropertyValue const & rProp : aProps) + { + if (rProp.Name == "MirroredY") + { + CPPUNIT_ASSERT_EQUAL( true, rProp.Value.get() ); + return; + } + } + + // Shouldn't reach here + CPPUNIT_FAIL("Did not find MirroredY=true property"); +} + +DECLARE_OOXMLEXPORT_TEST(testTransparentShadow, "transparent-shadow.docx") +{ + uno::Reference xPicture = getShape(1); + sal_Int16 nShadowTransparence = getProperty(xPicture, "ShadowTransparence"); + CPPUNIT_ASSERT_EQUAL(Color(0x808080), getProperty(xPicture, "ShadowColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(50), nShadowTransparence); +} + +CPPUNIT_TEST_FIXTURE(Test, NoFillAttrInImagedata) +{ + loadAndSave("NoFillAttrInImagedata.docx"); + //problem was that type and color2 which are v:fill attributes were written in 'v:imagedata' + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Fallback/w:pict/v:rect/v:imagedata", "type"); + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Fallback/w:pict/v:rect/v:imagedata", "color2"); +} + +DECLARE_OOXMLEXPORT_TEST(testBnc837302, "bnc837302.docx") +{ + // The problem was that text with empty author was not inserted as a redline + uno::Reference xParagraph = getParagraph(1); + + // previously 'AAA' was not an own run + getRun(xParagraph, 3, "AAA"); + // interestingly the 'Insert' is set on the _previous_ run + CPPUNIT_ASSERT_EQUAL(OUString("Insert"), getProperty(getRun(xParagraph, 2), "RedlineType")); + + // make sure we don't introduce a redlined delete in the 2nd paragraph + xParagraph = getParagraph(2); + CPPUNIT_ASSERT_EQUAL(false, hasProperty(getRun(xParagraph, 1), "RedlineType")); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx new file mode 100644 index 000000000..35e1f3ae0 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx @@ -0,0 +1,1224 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {} +}; + +DECLARE_OOXMLEXPORT_TEST(testFdo68418, "fdo68418.docx") +{ + // The problem was that in 'MSWordExportBase::SectionProperties' function in 'wrt8sty.cxx' + // it checked if it 'IsPlausableSingleWordSection'. + // The 'IsPlausableSingleWordSection' compared different aspects of 2 'SwFrameFormat' objects. + // One of the checks was 'do both formats have the same distance from the top and bottom ?' + // This check is correct if both have headers or both don't have headers. + // However - if one has a header, and the other one has an empty header (no header) - it is not correct to compare + // between them (same goes for 'footer'). + uno::Reference xFooterText = getProperty< uno::Reference >(getStyles("PageStyles")->getByName("Standard"), "FooterText"); + uno::Reference< text::XTextRange > xFooterParagraph = getParagraphOfText( 1, xFooterText ); + + // First page footer is empty, second page footer is 'aaaa' + CPPUNIT_ASSERT_EQUAL(OUString("aaaa"), xFooterParagraph->getString()); // I get an error that it expects '' +} + +DECLARE_OOXMLEXPORT_TEST(testA4AndBorders, "a4andborders.docx") +{ + /* + * The problem was that in case of a document with borders, the pgSz attribute + * was exported as a child of pgBorders, thus being ignored on reload. + * We assert dimension against A4 size in mm (to avoid minor rounding errors) + */ + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect Page Width (mm)", sal_Int32(210), getProperty(xPageStyle, "Width") / 100); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect Page Height (mm)", sal_Int32(297), getProperty(xPageStyle, "Height") / 100); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo68787, "fdo68787.docx") +{ + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + // This was 25, the 'lack of w:separator' <-> '0 line width' mapping was missing. + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xPageStyle, "FootnoteLineRelativeWidth")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf92470_footnoteRestart, "tdf92470_footnoteRestart.docx") +{ + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT( pTextDoc ); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT( pDoc ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Footnote doesn't restart every Page", FTNNUM_PAGE, pDoc->GetFootnoteInfo().m_eNum ); + + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(25), getProperty(xPageStyle, "FootnoteLineRelativeWidth")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf108944_footnoteSeparator2) +{ + loadAndReload("tdf108944_footnoteSeparator2.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + //This was zero. The comment was causing the bHasFtnSep flag to be reset to false, so the separator was missing. + CPPUNIT_ASSERT_EQUAL(static_cast(25), getProperty(xPageStyle, "FootnoteLineRelativeWidth")); +} + +CPPUNIT_TEST_FIXTURE(Test, testCharacterBorder) +{ + loadAndReload("charborder.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xRun(getRun(getParagraph(1),1), uno::UNO_QUERY); + // OOXML has just one border attribute () for text border so all side has + // the same border with the same padding + // Border + { + const table::BorderLine2 aTopBorder = getProperty(xRun,"CharTopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(table::BorderLine2(0xFF6600,0,318,0,0,318), aTopBorder); + CPPUNIT_ASSERT_BORDER_EQUAL(aTopBorder, getProperty(xRun,"CharLeftBorder")); + CPPUNIT_ASSERT_BORDER_EQUAL(aTopBorder, getProperty(xRun,"CharBottomBorder")); + CPPUNIT_ASSERT_BORDER_EQUAL(aTopBorder, getProperty(xRun,"CharRightBorder")); + } + + // Padding (w:space) + { + const sal_Int32 nTopPadding = getProperty(xRun,"CharTopBorderDistance"); + // In the original ODT the padding is 150, but the unit conversion round it down. + CPPUNIT_ASSERT_EQUAL(sal_Int32(141), nTopPadding); + CPPUNIT_ASSERT_EQUAL(nTopPadding, getProperty(xRun,"CharLeftBorderDistance")); + CPPUNIT_ASSERT_EQUAL(nTopPadding, getProperty(xRun,"CharBottomBorderDistance")); + CPPUNIT_ASSERT_EQUAL(nTopPadding, getProperty(xRun,"CharRightBorderDistance")); + } + + // Shadow (w:shadow) + /* OOXML use just one bool value for shadow so the next conversions + are made during an export-import round + color: any -> black + location: any -> bottom-right + width: any -> border width */ + { + const table::ShadowFormat aShadow = getProperty(xRun, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + CPPUNIT_ASSERT_EQUAL(sal_Int16(318), aShadow.ShadowWidth); + } + + // Also check shadow when it is in middle of the paragraph + // (problem can be during export with SwWW8AttrIter::HasTextItem()) + { + uno::Reference xMiddleRun(getRun(getParagraph(2),2), uno::UNO_QUERY); + const table::ShadowFormat aShadow = getProperty(xMiddleRun, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + CPPUNIT_ASSERT_EQUAL(sal_Int16(318), aShadow.ShadowWidth); + } + + if (xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml")) + { + // Make sure we write qFormat for custom style names. + assertXPath(pXmlStyles, "//w:style[@w:styleId='Heading']/w:qFormat", 1); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testStyleInheritance) +{ + loadAndSave("style-inheritance.docx"); + + // Check that now styleId's are more like what MSO produces + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + // the 1st style always must be Normal + assertXPath(pXmlStyles, "/w:styles/w:style[1]", "styleId", "Normal"); + // some random style later + assertXPath(pXmlStyles, "/w:styles/w:style[4]", "styleId", "Heading3"); + + // Check that we do _not_ export w:next for styles that point to themselves. + assertXPath(pXmlStyles, "/w:styles/w:style[1]/w:next", 0); + + // Check that we roundtrip correctly - on XML level + assertXPath(pXmlStyles, "/w:styles/w:style[2]/w:next", "val", "Normal"); + // And to be REALLY sure, check it on the API level too ;-) + uno::Reference< container::XNameAccess > paragraphStyles = getStyles("ParagraphStyles"); + uno::Reference< beans::XPropertySet > properties(paragraphStyles->getByName("Heading 1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Standard"), getProperty(properties, "FollowStyle")); + + // This was 0, as export of w:outlineLvl was missing. + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty(properties, "OutlineLevel")); + + properties.set(paragraphStyles->getByName("Heading 11"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Heading 1"), getProperty(properties, "FollowStyle")); + + // Make sure style #2 is Heading 1. + assertXPath(pXmlStyles, "/w:styles/w:style[2]", "styleId", "Heading1"); + // w:ind was copied from the parent (Normal) style without a good reason. + assertXPath(pXmlStyles, "/w:styles/w:style[2]/w:pPr/w:ind", 0); + + // We output exactly 2 properties in rPrDefault, nothing else was + // introduced as an additional default + assertXPath(pXmlStyles, "/w:styles/w:docDefaults/w:rPrDefault/w:rPr/*", 2); + // Check that we output real content of rPrDefault + assertXPath(pXmlStyles, "/w:styles/w:docDefaults/w:rPrDefault/w:rPr/w:rFonts", "ascii", "Times New Roman"); + assertXPath(pXmlStyles, "/w:styles/w:docDefaults/w:rPrDefault/w:rPr/w:lang", "bidi", "ar-SA"); + // pPrDefault contains only one hyphenation property + assertXPath(pXmlStyles, "/w:styles/w:docDefaults/w:pPrDefault/w:pPr/*", 1); + + // Check latent styles + uno::Sequence aGrabBag = getProperty< uno::Sequence >(mxComponent, "InteropGrabBag"); + uno::Sequence aLatentStyles; + for (beans::PropertyValue const & prop : std::as_const(aGrabBag)) + if (prop.Name == "latentStyles") + prop.Value >>= aLatentStyles; + CPPUNIT_ASSERT(aLatentStyles.getLength()); // document should have latent styles + + // Check latent style default attributes + OUString aCount; + uno::Sequence aLatentStyleExceptions; + for (beans::PropertyValue const & prop : std::as_const(aLatentStyles)) + { + if (prop.Name == "count") + aCount = prop.Value.get(); + else if (prop.Name == "lsdExceptions") + prop.Value >>= aLatentStyleExceptions; + } + CPPUNIT_ASSERT_EQUAL(OUString("371"), aCount); // This check the "count" attribute. + + // Check exceptions to the latent style defaults. + uno::Sequence aLatentStyleException; + aLatentStyleExceptions[0].Value >>= aLatentStyleException; + OUString aName; + for (beans::PropertyValue const & prop : std::as_const(aLatentStyleException)) + if (prop.Name == "name") + aName = prop.Value.get(); + CPPUNIT_ASSERT_EQUAL(OUString("Normal"), aName); // This checks the "name" attribute of the first exception. + + // This numbering style wasn't roundtripped. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='NoList']/w:name", "val", "No List"); + + // Table style wasn't roundtripped. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='TableNormal']/w:tblPr/w:tblCellMar/w:left", "w", "108"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='TableNormal']/w:semiHidden", 1); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='TableNormal']/w:unhideWhenUsed", 1); + + // Additional para style properties should be also roundtripped. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='ListParagraph']/w:uiPriority", "val", "34"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Normal']/w:qFormat", 1); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Normal']/w:rsid", "val", "00780346"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Normal']", "default", "1"); + + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Heading1']/w:link", "val", "Heading1Char"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Heading1']/w:locked", 1); + + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Heading11']", "customStyle", "1"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Heading11']/w:autoRedefine", 1); + + // Additional char style properties should be also roundtripped. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='DefaultParagraphFont']", "default", "1"); + + // Finally check the same for numbering styles. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='NoList']", "default", "1"); + + // This was 1, the default style had even for a default style having no RES_PARATR_HYPHENZONE set. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Normal']/w:pPr/w:suppressAutoHyphens", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testCalendar1) +{ + loadAndSave("calendar1.docx"); + // Document has a non-trivial table style, test the roundtrip of it. + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:basedOn", "val", "TableNormal"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:rsid", "val", "00903003"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblPr/w:tblStyleColBandSize", "val", "1"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tcPr/w:shd", "val", "clear"); + + // Table style lost its paragraph / run properties. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:pPr/w:spacing", "lineRule", "auto"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:rPr/w:lang", "eastAsia", "ja-JP"); + + // Table style lost its conditional table formatting properties. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='firstRow']/w:pPr/w:wordWrap", 1); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:rFonts", "hAnsiTheme", "minorHAnsi"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='firstRow']/w:tblPr", 1); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='firstRow']/w:tcPr/w:vAlign", "val", "bottom"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='lastRow']/w:tcPr/w:tcBorders/w:tr2bl", "val", "nil"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='band2Horz']/w:tcPr/w:tcBorders/w:top", "themeColor", "text1"); + + // w:tblLook element and its attributes were missing. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblLook", "firstRow", "1"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblLook", "lastRow", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblLook", "lastColumn", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblLook", "firstColumn", "1"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblLook", "noHBand", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblLook", "noVBand", "1"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblLook", "val", "04a0"); +} + +DECLARE_OOXMLEXPORT_TEST(testCalendar2, "calendar2.docx") +{ + // Problem was that CharCaseMap was style::CaseMap::NONE. + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(style::CaseMap::UPPERCASE, getProperty(getRun(getParagraphOfText(1, xCell->getText()), 1), "CharCaseMap")); + // Font size in the second row was 11. + xCell.set(xTable->getCellByName("A2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty(getRun(getParagraphOfText(1, xCell->getText()), 1), "CharHeight")); + // Font size in the third row was 11 as well. + xCell.set(xTable->getCellByName("B3"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(14.f, getProperty(getRun(getParagraphOfText(1, xCell->getText()), 1), "CharHeight")); + + // This paragraph property was missing in table style. + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + if (!pXmlStyles) + return; + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:pPr/w:jc", "val", "center"); + + // These run properties were missing + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:rPr/w:lang", "val", "en-US"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:rPr/w:lang", "bidi", "ar-SA"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:caps", 1); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:smallCaps", "val", "0"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:color", "themeColor", "accent1"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:spacing", "val", "20"); + + // Table borders were also missing + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblPr/w:tblBorders/w:insideV", "themeTint", "99"); +} + +DECLARE_OOXMLEXPORT_TEST(testCalendar3, "calendar3.docx") +{ + // TableStyle:firstRow (for header rows 1 and 2) color and size overrides document rPrDefault + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x5B9BD5), getProperty(getRun(getParagraphOfText(1, xCell->getText()), 1), "CharColor")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty(getRun(getParagraphOfText(1, xCell->getText()),1), "CharHeight")); + // direct formatting in A1 + uno::Reference xCell2(xTable->getCellByName("A1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x2E74B5), getProperty(getRun(getParagraphOfText(1, xCell2->getText()), 1), "CharColor")); + CPPUNIT_ASSERT_EQUAL(20.f, getProperty(getRun(getParagraphOfText(1, xCell2->getText()),1), "CharHeight")); + + // tdf#132149 Despite specifying portrait, the page size's specified width is greater than its height. + // Both Word and LO display it as landscape, so ensure that it round-trips with landscape dimensions. + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Page Width (mm) ", sal_Int32(148), getProperty(xPageStyle, "Width") / 100); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Page Height (mm)", sal_Int32(105), getProperty(xPageStyle, "Height") / 100); +} + +DECLARE_OOXMLEXPORT_TEST(testCalendar4, "calendar4.docx") +{ + // TableStyle:fontsize - overrides DocDefaults, but not Style. + // In this case the style does not define anything (but does copy-inherit the DocDefaults size 36) + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A3"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(14.f, getProperty(getRun(xCell,1), "CharHeight")); +} + +DECLARE_OOXMLEXPORT_TEST(testCalendar5, "calendar5.docx") +{ + // check text portions with and without direct formatting + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + // text portions with direct formatting + CPPUNIT_ASSERT_EQUAL(Color(0x2E74B5), getProperty(getRun(getParagraphOfText(1, xCell->getText()), 1), "CharColor")); + CPPUNIT_ASSERT_EQUAL(Color(0xFF0000), getProperty(getRun(getParagraphOfText(1, xCell->getText()), 2), "CharColor")); + // default paragraph text color + CPPUNIT_ASSERT_EQUAL(Color(0x5B9BD5), getProperty(getRun(getParagraphOfText(1, xCell->getText()), 3), "CharColor")); + // text portions with direct formatting + CPPUNIT_ASSERT_EQUAL(20.f, getProperty(getRun(getParagraphOfText(1, xCell->getText()),1), "CharHeight")); + CPPUNIT_ASSERT_EQUAL(10.f, getProperty(getRun(getParagraphOfText(1, xCell->getText()),2), "CharHeight")); + // default paragraph text size + CPPUNIT_ASSERT_EQUAL(16.f, getProperty(getRun(getParagraphOfText(1, xCell->getText()),3), "CharHeight")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTcBorders) +{ + loadAndSave("testTcBorders.docx"); + //fdo#76635 : Table borders are not getting preserved. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + assertXPath(pXmlDocument, "/w:document[1]/w:body[1]/w:tbl[1]/w:tr[1]/w:tc[1]/w:tcPr[1]/w:tcBorders[1]/w:bottom[1][@w:val = 'single']",1); + assertXPath(pXmlDocument, "/w:document[1]/w:body[1]/w:tbl[1]/w:tr[1]/w:tc[1]/w:tcPr[1]/w:tcBorders[1]/w:bottom[1][@w:sz = 4]", 1); + assertXPath(pXmlDocument, "/w:document[1]/w:body[1]/w:tbl[1]/w:tr[1]/w:tc[1]/w:tcPr[1]/w:tcBorders[1]/w:bottom[1][@w:space = 0]", 1); + assertXPath(pXmlDocument, "/w:document[1]/w:body[1]/w:tbl[1]/w:tr[1]/w:tc[1]/w:tcPr[1]/w:tcBorders[1]/w:bottom[1][@w:color = 808080]", 1); + + uno::Reference xStyle( + getStyles("CharacterStyles")->getByName("Code Featured Element"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Bold", float(150), getProperty(xStyle, "CharWeight")); +} + +CPPUNIT_TEST_FIXTURE(Test, testQuicktables) +{ + loadAndSave("quicktables.docx"); + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + + // These were missing in the Calendar3 table style. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar3']/w:rPr/w:rFonts", "cstheme", "majorBidi"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar3']/w:rPr/w:color", "themeTint", "80"); + CPPUNIT_ASSERT(getXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar3']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:color", "themeShade").equalsIgnoreAsciiCase("BF")); + + // Calendar4. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar4']/w:pPr/w:snapToGrid", "val", "0"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar4']/w:rPr/w:bCs", 1); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar4']/w:tcPr/w:shd", "themeFill", "accent1"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar4']/w:tcPr/w:shd", "themeFillShade", "80"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar4']/w:tblStylePr[@w:type='firstCol']/w:pPr/w:ind", "rightChars", "0"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar4']/w:tblStylePr[@w:type='firstCol']/w:pPr/w:ind", "right", "144"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar4']/w:tblStylePr[@w:type='band2Horz']/w:tcPr/w:tcMar/w:bottom", "w", "86"); + + // LightList. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='LightList']/w:tblStylePr[@w:type='firstRow']/w:pPr/w:spacing", "before", "0"); + + // MediumList2-Accent1. + CPPUNIT_ASSERT(getXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='MediumList2-Accent1']/w:tblStylePr[@w:type='band1Vert']/w:tcPr/w:shd", "themeFillTint").equalsIgnoreAsciiCase("3F")); + + // MediumShading2-Accent5. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='MediumShading2-Accent5']/w:tblStylePr[@w:type='firstRow']/w:tcPr/w:tcBorders/w:top", "color", "auto"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo71302) +{ + loadAndSave("fdo71302.docx"); + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + + // This got renamed to "Strong Emphasis" without a good reason. + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Strong']", 1); +} + + +DECLARE_OOXMLEXPORT_TEST(testSmartart, "smartart.docx") +{ + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextDocumentPropertySet(xTextDocument, uno::UNO_QUERY); + uno::Sequence aGrabBag(0); + xTextDocumentPropertySet->getPropertyValue("InteropGrabBag") >>= aGrabBag; + CPPUNIT_ASSERT(aGrabBag.hasElements()); // Grab Bag not empty + + bool bTheme = false; + for(beans::PropertyValue const & prop : std::as_const(aGrabBag)) + { + if (prop.Name == "OOXTheme") + { + bTheme = true; + uno::Reference aThemeDom; + CPPUNIT_ASSERT(prop.Value >>= aThemeDom); // PropertyValue of proper type + CPPUNIT_ASSERT(aThemeDom); // Reference not empty + } + } + CPPUNIT_ASSERT(bTheme); // Grab Bag has all the expected elements + + CPPUNIT_ASSERT_EQUAL(1, getShapes()); // One groupshape in the doc + + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xGroup->getCount()); // 1 rendered bitmap from the original shapes + + uno::Reference xGroupPropertySet(getShape(1), uno::UNO_QUERY); + xGroupPropertySet->getPropertyValue("InteropGrabBag") >>= aGrabBag; + CPPUNIT_ASSERT(aGrabBag.hasElements()); // Grab Bag not empty + + bool bData = false, bLayout = false, bQStyle = false, bColor = false, bDrawing = false; + for(beans::PropertyValue const & prop : std::as_const(aGrabBag)) + { + if (prop.Name == "OOXData") + { + bData = true; + uno::Reference aDataDom; + CPPUNIT_ASSERT(prop.Value >>= aDataDom); // PropertyValue of proper type + CPPUNIT_ASSERT(aDataDom); // Reference not empty + } + else if (prop.Name == "OOXLayout") + { + bLayout = true; + uno::Reference aLayoutDom; + CPPUNIT_ASSERT(prop.Value >>= aLayoutDom); // PropertyValue of proper type + CPPUNIT_ASSERT(aLayoutDom); // Reference not empty + } + else if (prop.Name == "OOXStyle") + { + bQStyle = true; + uno::Reference aStyleDom; + CPPUNIT_ASSERT(prop.Value >>= aStyleDom); // PropertyValue of proper type + CPPUNIT_ASSERT(aStyleDom); // Reference not empty + } + else if (prop.Name == "OOXColor") + { + bColor = true; + uno::Reference aColorDom; + CPPUNIT_ASSERT(prop.Value >>= aColorDom); // PropertyValue of proper type + CPPUNIT_ASSERT(aColorDom); // Reference not empty + } + else if (prop.Name == "OOXDrawing") + { + bDrawing = true; + uno::Sequence< uno::Any > diagramDrawing; + uno::Reference aDrawingDom; + CPPUNIT_ASSERT(prop.Value >>= diagramDrawing); + CPPUNIT_ASSERT(diagramDrawing[0] >>= aDrawingDom); // PropertyValue of proper type + CPPUNIT_ASSERT(aDrawingDom); // Reference not empty + } + } + // Grab Bag has all the expected elements: + CPPUNIT_ASSERT(bData); + CPPUNIT_ASSERT(bLayout); + CPPUNIT_ASSERT(bQStyle); + CPPUNIT_ASSERT(bColor); + CPPUNIT_ASSERT(bDrawing); + + uno::Reference xPropertySet(xGroup->getByIndex(0), uno::UNO_QUERY); + OUString nValue; + xPropertySet->getPropertyValue("Name") >>= nValue; + CPPUNIT_ASSERT_EQUAL(OUString("RenderedShapes"), nValue); // Rendered bitmap has the proper name +} + +CPPUNIT_TEST_FIXTURE(Test, testFontNameIsEmpty) +{ + loadAndSave("font-name-is-empty.docx"); + // Check no empty font name is exported + // This test does not fail, if the document contains a font with empty name. + + xmlDocUniquePtr pXmlFontTable = parseExport("word/fontTable.xml"); + xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlFontTable, "/w:fonts/w:font"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + sal_Int32 length = xmlXPathNodeSetGetLength(pXmlNodes); + for(sal_Int32 index = 0; index < length; index++){ + xmlNodePtr pXmlNode = pXmlNodes->nodeTab[index]; + OUString attrVal = OUString::createFromAscii(reinterpret_cast(xmlGetProp(pXmlNode, BAD_CAST("name")))); + if (attrVal.isEmpty()){ + CPPUNIT_FAIL("Font name is empty."); + } + } + xmlXPathFreeObject(pXmlObj); +} + +CPPUNIT_TEST_FIXTURE(Test, testMultiColumnLineSeparator) +{ + loadAndSave("multi-column-line-separator-SAVED.docx"); + // Check for the Column Separator value.It should be FALSE as the document does not contain separator line. + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:pPr/w:sectPr/w:cols","sep","false"); +} + +DECLARE_OOXMLEXPORT_TEST(testCustomXmlGrabBag, "customxml.docx") +{ + // The problem was that item[n].xml and itemProps[n].xml and .rels files for item[n].xml + // files were missing from docx file after saving file. + // This test case tests whether customxml files grabbagged properly in correct object. + + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextDocumentPropertySet(xTextDocument, uno::UNO_QUERY); + uno::Sequence aGrabBag(0); + xTextDocumentPropertySet->getPropertyValue("InteropGrabBag") >>= aGrabBag; + CPPUNIT_ASSERT(aGrabBag.hasElements()); // Grab Bag not empty + bool CustomXml = false; + for(beans::PropertyValue const & prop : std::as_const(aGrabBag)) + { + if (prop.Name == "OOXCustomXml" || prop.Name == "OOXCustomXmlProps") + { + CustomXml = true; + uno::Reference aCustomXmlDom; + uno::Sequence > aCustomXmlDomList; + CPPUNIT_ASSERT(prop.Value >>= aCustomXmlDomList); // PropertyValue of proper type + sal_Int32 length = aCustomXmlDomList.getLength(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), length); + aCustomXmlDom = aCustomXmlDomList[0]; + CPPUNIT_ASSERT(aCustomXmlDom); // Reference not empty + } + } + CPPUNIT_ASSERT(CustomXml); // Grab Bag has all the expected elements +} + +CPPUNIT_TEST_FIXTURE(Test, testCustomXmlRelationships) +{ + loadAndSave("customxml.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("customXml/_rels/item1.xml.rels"); + + // Check there is a relation to itemProps1.xml. + assertXPath(pXmlDoc, "/rels:Relationships/rels:Relationship", 1); + assertXPath(pXmlDoc, "/rels:Relationships/rels:Relationship[@Id='rId1']", "Target", "itemProps1.xml"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo69644) +{ + loadAndSave("fdo69644.docx"); + // The problem was that the exporter exported the table definition + // with only 3 columns, instead of 5 columns. + // Check that the table grid is exported with 5 columns + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblGrid/w:gridCol", 5); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo70812, "fdo70812.docx") +{ + // Import just crashed. + getParagraph(1, "Sample pages document."); +} + +CPPUNIT_TEST_FIXTURE(Test, testPgMargin) +{ + loadAndSave("testPgMargin.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:pgMar", "left", "1440"); +} + +DECLARE_OOXMLEXPORT_TEST(testImageCrop, "ImageCrop.docx") +{ + uno::Reference image = getShape(1); + uno::Reference imageProperties(image, uno::UNO_QUERY); + css::text::GraphicCrop aGraphicCropStruct; + + imageProperties->getPropertyValue( "GraphicCrop" ) >>= aGraphicCropStruct; + + CPPUNIT_ASSERT_EQUAL( sal_Int32( 2955 ), aGraphicCropStruct.Left ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 5477 ), aGraphicCropStruct.Right ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 2856 ), aGraphicCropStruct.Top ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 2291 ), aGraphicCropStruct.Bottom ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf106974_int32Crop, "tdf106974_int32Crop.docx") +{ + uno::Reference image = getShape(1); + uno::Reference imageProperties(image, uno::UNO_QUERY); + css::text::GraphicCrop aGraphicCropStruct; + + imageProperties->getPropertyValue( "GraphicCrop" ) >>= aGraphicCropStruct; + + // The crop is constructed in GraphicProperties::pushToPropMap, where + // GraphicHelper::getOriginalSize tries to get graphic size in mm, then falls back to pixels, + // which are then converted to mm taking screen DPI scaling into account. Thus, the resulting + // values are DPI-dependent. + const double fXScaleFactor = 96.0 / Application::GetDefaultDevice()->GetDPIX(); + + CPPUNIT_ASSERT_MESSAGE( + OString::number(aGraphicCropStruct.Right).getStr(), + 40470 * fXScaleFactor < aGraphicCropStruct.Right); +} + +DECLARE_OOXMLEXPORT_TEST(testLineSpacingexport, "test_line_spacing.docx") +{ + // The Problem was that the w:line attribute value in w:spacing tag was incorrect + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + CPPUNIT_ASSERT(xParaEnum->hasMoreElements()); + + // FIXME The test passes on most machines (including Linux x86_64 with gcc-4.7), but fails on various configs: + // Linux arm, Linux x86_64 with gcc-4.8 and Mac. Need to figure out what goes wrong and fix that. +#if 0 + style::LineSpacing alineSpacing = getProperty(xParaEnum->nextElement(), "ParaLineSpacing"); + CPPUNIT_ASSERT_EQUAL(static_cast(13200), static_cast(alineSpacing.Height)); + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:spacing", "line", "31680"); +#endif +} + +DECLARE_OOXMLEXPORT_TEST(testTextBoxGradientAngle, "fdo65295.docx") +{ + CPPUNIT_ASSERT_EQUAL(8, getShapes()); + + // Angle of frame#1 is 135 degrees, but 'aGradient.Angle' holds value in 1/10 of a degree + uno::Reference xFrame1(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame1, "FillStyle")); + awt::Gradient aGradient1 = getProperty(xFrame1, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(sal_Int16(135 * 10), aGradient1.Angle); + + // Angle of frame#2 is 180 degrees, but 'aGradient.Angle' holds value in 1/10 of a degree + uno::Reference xFrame2(getShape(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame2, "FillStyle")); + awt::Gradient aGradient2 = getProperty(xFrame2, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(sal_Int16(180 * 10), aGradient2.Angle); + + // Angle of frame#3 is 90 degrees, but 'aGradient.Angle' holds value in 1/10 of a degree + uno::Reference xFrame3(getShape(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame3, "FillStyle")); + awt::Gradient aGradient3 = getProperty(xFrame3, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(sal_Int16( 90 * 10), aGradient3.Angle); + + // Angle of frame#4 is 225 degrees, but 'aGradient.Angle' holds value in 1/10 of a degree + uno::Reference xFrame4(getShape(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame4, "FillStyle")); + awt::Gradient aGradient4 = getProperty(xFrame4, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(sal_Int16(225 * 10), aGradient4.Angle); + + // Angle of frame#5 is 270 degrees, but 'aGradient.Angle' holds value in 1/10 of a degree + uno::Reference xFrame5(getShape(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame5, "FillStyle")); + awt::Gradient aGradient5 = getProperty(xFrame5, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(sal_Int16(270 * 10), aGradient5.Angle); + + // Angle of frame#6 is 315 degrees, but 'aGradient.Angle' holds value in 1/10 of a degree + uno::Reference xFrame6(getShape(6), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame6, "FillStyle")); + awt::Gradient aGradient6 = getProperty(xFrame6, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(sal_Int16(315 * 10), aGradient6.Angle); + + // Angle of frame#7 is 0 degrees, but 'aGradient.Angle' holds value in 1/10 of a degree + uno::Reference xFrame7(getShape(7), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame7, "FillStyle")); + awt::Gradient aGradient7 = getProperty(xFrame7, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(sal_Int16( 0 * 10), aGradient7.Angle); + + // Angle of frame#8 is 45 degrees, but 'aGradient.Angle' holds value in 1/10 of a degree + uno::Reference xFrame8(getShape(8), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty(xFrame8, "FillStyle")); + awt::Gradient aGradient8 = getProperty(xFrame8, "FillGradient"); + CPPUNIT_ASSERT_EQUAL(sal_Int16( 45 * 10), aGradient8.Angle); +} + +CPPUNIT_TEST_FIXTURE(Test, testCellGridSpan) +{ + loadAndSave("cell-grid-span.docx"); + // The problem was during export gridSpan value for 1st & 2nd cells for test document + // used to get set wrongly to 5 and 65532 respectively which was the reason for crash during save operation + // Verifying gridSpan element is not present in RoundTripped Document (As it's Default value is 1). + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:tcPr/w:gridSpan",0); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[2]/w:tcPr/w:gridSpan",0); +} +DECLARE_OOXMLEXPORT_TEST(testFdo71646, "fdo71646.docx") +{ + // The problem was after save file created by MS the direction changed to RTL. + uno::Reference xParaLTRLeft(getParagraph( 1, "LTR LEFT")); + sal_Int32 nLTRLeft = getProperty< sal_Int32 >( xParaLTRLeft, "ParaAdjust" ); + // test the text Direction value for the paragraph + sal_Int16 nLRDir = getProperty< sal_Int32 >( xParaLTRLeft, "WritingMode" ); + + // this will test the both the text direction and alignment for paragraph + CPPUNIT_ASSERT_EQUAL( sal_Int32 (style::ParagraphAdjust_LEFT), nLTRLeft); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::LR_TB, nLRDir); +} + +CPPUNIT_TEST_FIXTURE(Test, testParaAutoSpacing) +{ + loadAndSave("para-auto-spacing.docx"); + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:spacing", "beforeAutospacing","1"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:spacing", "afterAutospacing","1"); + + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:spacing", + "beforeAutospacing"); + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:spacing", + "afterAutospacing"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:spacing", "before","400"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:spacing", "after","400"); +} + +DECLARE_OOXMLEXPORT_TEST(testGIFImageCrop, "test_GIF_ImageCrop.docx") +{ + uno::Reference image = getShape(1); + uno::Reference imageProperties(image, uno::UNO_QUERY); + css::text::GraphicCrop aGraphicCropStruct; + + imageProperties->getPropertyValue( "GraphicCrop" ) >>= aGraphicCropStruct; + + // The crop is constructed in GraphicProperties::pushToPropMap, where + // GraphicHelper::getOriginalSize tries to get graphic size in mm, then falls back to pixels, + // which are then converted to mm taking screen DPI scaling into account. Thus, the resulting + // values are DPI-dependent. + const double fXScaleFactor = 96.0 / Application::GetDefaultDevice()->GetDPIX(); + const double fYScaleFactor = 96.0 / Application::GetDefaultDevice()->GetDPIY(); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(1085 * fXScaleFactor, aGraphicCropStruct.Left, 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(3651 * fXScaleFactor, aGraphicCropStruct.Right, 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(953 * fYScaleFactor, aGraphicCropStruct.Top, 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1244 * fYScaleFactor, aGraphicCropStruct.Bottom, 1); +} + +DECLARE_OOXMLEXPORT_TEST(testPNGImageCrop, "test_PNG_ImageCrop.docx") +{ + /* The problem was image cropping information was not getting saved + * after roundtrip. + * Check for presence of cropping parameters in exported file. + */ + uno::Reference image = getShape(1); + uno::Reference imageProperties(image, uno::UNO_QUERY); + css::text::GraphicCrop aGraphicCropStruct; + + imageProperties->getPropertyValue( "GraphicCrop" ) >>= aGraphicCropStruct; + + // The crop is constructed in GraphicProperties::pushToPropMap, where + // GraphicHelper::getOriginalSize tries to get graphic size in mm, then falls back to pixels, + // which are then converted to mm taking screen DPI scaling into account. Thus, the resulting + // values are DPI-dependent. + const double fXScaleFactor = 96.0 / Application::GetDefaultDevice()->GetDPIX(); + const double fYScaleFactor = 96.0 / Application::GetDefaultDevice()->GetDPIY(); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(1058 * fXScaleFactor, aGraphicCropStruct.Left, 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1111 * fXScaleFactor, aGraphicCropStruct.Right, 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1164 * fYScaleFactor, aGraphicCropStruct.Top, 1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(635 * fYScaleFactor, aGraphicCropStruct.Bottom, 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf41542_imagePadding) +{ + loadAndReload("tdf41542_imagePadding.odt"); + CPPUNIT_ASSERT_EQUAL(3, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // borderlessImage - image WITHOUT BORDERS : simulate padding with -crop + text::GraphicCrop crop = getProperty(getShape(2), "GraphicCrop"); + CPPUNIT_ASSERT( crop.Left != 0 ); + CPPUNIT_ASSERT( crop.Right != 0 ); + CPPUNIT_ASSERT_EQUAL( crop.Left, crop.Top); + CPPUNIT_ASSERT_EQUAL( crop.Right, crop.Bottom); + CPPUNIT_ASSERT_EQUAL( crop.Left, crop.Right); + + // borderedImage - image WITH BORDERS : simulate padding with -crop + crop = getProperty(getShape(3), "GraphicCrop"); + CPPUNIT_ASSERT( crop.Left != 0 ); + CPPUNIT_ASSERT( crop.Right != 0 ); + CPPUNIT_ASSERT_EQUAL( crop.Left, crop.Top); + CPPUNIT_ASSERT_EQUAL( crop.Right, crop.Bottom); + CPPUNIT_ASSERT_EQUAL( crop.Left, crop.Right); +} + +CPPUNIT_TEST_FIXTURE(Test, testFootnoteParagraphTag) +{ + loadAndSave("testFootnote.docx"); + /* In footnotes.xml, the paragraph tag inside was getting written into document.xml. + * Check for, paragraph tag is correctly written into footnotes.xml. + */ + xmlDocUniquePtr pXmlFootnotes = parseExport("word/footnotes.xml"); + assertXPath(pXmlFootnotes, "/w:footnotes/w:footnote[3]","id","2"); + assertXPath(pXmlFootnotes, "/w:footnotes/w:footnote[3]/w:p/w:r/w:footnoteRef", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testSpacingLineRule) +{ + loadAndReload("table_lineRule.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:p/w:pPr/w:spacing", "lineRule", "auto"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTableLineSpacing) +{ + loadAndSave("table_atleast.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:pPr/w:spacing", "line", "320"); +} + +DECLARE_OOXMLEXPORT_TEST(testOoxmlTriangle, "ooxml-triangle.docx") +{ + // The problem was that ooxml-triangle shape type wasn't handled by VML + // export (only isosceles-triangle), leading to a missing shape. + getShape(1); +} + +DECLARE_OOXMLEXPORT_TEST(testMce, "mce.docx") +{ + // The shape is red in Word2007, green in Word2010. Check that our import follows the later. + CPPUNIT_ASSERT_EQUAL(Color(0x9bbb59), getProperty(getShape(1), "FillColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, testThemePreservation) +{ + loadAndSave("theme-preservation.docx"); + // check default font theme values have been preserved + xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml"); + assertXPath(pXmlStyles, "/w:styles/w:docDefaults/w:rPrDefault/w:rPr/w:rFonts", "asciiTheme", "minorHAnsi"); + assertXPath(pXmlStyles, "/w:styles/w:docDefaults/w:rPrDefault/w:rPr/w:rFonts", "cstheme", "minorBidi"); + + // check the font theme values in style definitions + assertXPath(pXmlStyles, "/w:styles/w:style[1]/w:rPr/w:rFonts", "eastAsiaTheme", "minorEastAsia"); + + // check the color theme values in style definitions + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Custom1']/w:rPr/w:color", "themeColor", "accent1"); + assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Custom1']/w:rPr/w:color", "themeTint", "99"); + + // check direct format font theme values have been preserved + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[5]/w:r[1]/w:rPr/w:rFonts", "hAnsiTheme", "majorHAnsi"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[5]/w:r[1]/w:rPr/w:rFonts", "asciiTheme", "majorHAnsi"); + + // check theme font color value has been preserved + assertXPath(pXmlDocument, "/w:document/w:body/w:p[4]/w:r[1]/w:rPr/w:color", "themeColor", "accent3"); + OUString sThemeShade = getXPath(pXmlDocument, "/w:document/w:body/w:p[4]/w:r[1]/w:rPr/w:color", "themeShade"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xbf), sThemeShade.toInt32(16)); + + // check the themeFontLang values in settings file + xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml"); + assertXPath(pXmlSettings, "/w:settings/w:themeFontLang", "val", "en-US"); + assertXPath(pXmlSettings, "/w:settings/w:themeFontLang", "eastAsia", "zh-CN"); + assertXPath(pXmlSettings, "/w:settings/w:themeFontLang", "bidi", "he-IL"); + + // check fonts have been applied properly + sal_Unicode fontName[2]; //represents the string "宋体" + fontName[0] = 0x5b8b; + fontName[1] = 0x4f53; + CPPUNIT_ASSERT_EQUAL(OUString(fontName, 2), getProperty(getParagraph(1), "CharFontNameAsian")); + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), + getProperty(getParagraph(2), "CharFontNameComplex")); + CPPUNIT_ASSERT_EQUAL(OUString("Trebuchet MS"), + getProperty(getParagraph(3, "Default style theme font"), "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString("Arial Black"), + getProperty(getRun(getParagraph(4, "Direct format font"), 1), "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString("Trebuchet MS"), + getProperty(getParagraph(5, "Major theme font"), "CharFontName")); + + // check the paragraph background pattern has been preserved including theme colors + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "val", "thinHorzStripe"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeFill", "text2"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeFillTint", "33"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeColor", "accent1"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeShade", "80"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTableThemePreservation) +{ + loadAndSave("table-theme-preservation.docx"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + // check cell theme colors have been preserved + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[1]/w:tcPr/w:shd", "themeFill", "accent6"); + assertXPathNoAttribute(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[1]/w:tcPr/w:shd", + "themeFillShade"); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[1]/w:tcPr/w:shd", "themeFillTint", "33"); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[2]/w:tcPr/w:shd", "themeFill", "accent6"); + assertXPathNoAttribute(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[2]/w:tcPr/w:shd", + "themeFillShade"); + assertXPathNoAttribute(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[2]/w:tcPr/w:shd", + "themeFillTint"); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[3]/w:tcPr/w:shd", "themeFill", "accent6"); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[3]/w:tcPr/w:shd", "themeFillShade", "80"); + assertXPathNoAttribute(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[3]/w:tcPr/w:shd", + "themeFillTint"); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[3]/w:tcPr/w:shd", "val", "horzStripe"); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[3]/w:tcPr/w:shd", "themeColor", "accent3"); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[3]/w:tcPr/w:shd", "themeTint", "33"); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[2]/w:tc[3]/w:tcPr/w:shd", "color", "E7EEEE"); + + // check table style has been preserved + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tblPr/w:tblStyle", "val", "Sombreadoclaro-nfasis1"); + // check table style is not overwritten by other properties + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[2]/w:tcPr/w:tcBorders/*", 0); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[3]/w:tcPr/w:tcBorders/*", 0); + // check that one cell attribute present in the original document has been preserved + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:tcPr/w:tcBorders/*", 1); + + // Check that w:cnfStyle row, cell and paragraph property is preserved. + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "val", "100000000000"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "firstRow", "1"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "lastRow", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "firstColumn", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "lastColumn", "0"); + + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "val", "001000000000"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "oddVBand", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "evenVBand", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "oddHBand", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "evenHBand", "0"); + + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "val", "100000000000"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "firstRowFirstColumn", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "firstRowLastColumn", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "lastRowFirstColumn", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "lastRowLastColumn", "0"); + +} + +CPPUNIT_TEST_FIXTURE(Test, testcantSplit) +{ + loadAndSave("2_table_doc.docx"); + // if Split table value is true for a table then during export do not write + // in table row property,As default row prop is allow row to break across page. + // writing during export was causing problem that all the cell data used to come on same page + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[1]/w:tr/w:trPr/w:cantSplit",0); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[2]/w:tr/w:trPr/w:cantSplit","val","true"); +} + +CPPUNIT_TEST_FIXTURE(Test, testDontSplitTable) +{ + loadAndReload("tdf101589_dontSplitTable.odt"); + CPPUNIT_ASSERT_EQUAL(2, getPages()); + //single row tables need to prevent split by setting row to no split + CPPUNIT_ASSERT_EQUAL( OUString("Row 1"), parseDump("/root/page[2]/body/tab[1]/row[1]/cell[1]/txt[1]") ); + + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable (xTables->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xTable, "Split")); + + uno::Reference xTableRows = xTable->getRows(); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xTableRows->getByIndex(0), "IsSplitAllowed")); +} + +DECLARE_OOXMLEXPORT_TEST(testExtraSectionBreak, "1_page.docx") +{ + // There was a problem for some documents during export.Invalid sectPr getting added + // because of faulty calculation of PageDesc value + // This was the reason for increasing number of pages after RT + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + // tdf126544 Styles were being added before their base/parent/inherited-from style existed, and so were using default settings. + uno::Reference xParaStyles(getStyles("ParagraphStyles")); + uno::Reference xStyle(xParaStyles->getByName("Heading 1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( OUString("Heading Base"), xStyle->getParentStyle() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testcolumnbreak) +{ + loadAndSave("columnbreak.docx"); + CPPUNIT_ASSERT_EQUAL(style::BreakType_COLUMN_BEFORE, getProperty(getParagraph(5, "This is first line after col brk."), "BreakType")); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:r[1]/w:br", "type", "column"); +} + +CPPUNIT_TEST_FIXTURE(Test, testGlossary) +{ + loadAndSave("testGlossary.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/glossary/document.xml"); + assertXPath(pXmlDoc, "/w:glossaryDocument", "Ignorable", "w14 wp14"); +} + +CPPUNIT_TEST_FIXTURE(Test, testGlossaryWithEmail) +{ + // tdf#152289 + loadAndSave("glossaryWithEmail.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/glossary/_rels/document.xml.rels"); + assertXPath(pXmlDoc, "/rels:Relationships/rels:Relationship[@Id='rId4' " + "and @Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink' " + "and @Target='mailto:emailgoeshere@example.com' " + "and @TargetMode='External']"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo71785, "fdo71785.docx") +{ + // crashtest +} + +CPPUNIT_TEST_FIXTURE(Test, testCrashWhileSave) +{ + loadAndSave("testCrashWhileSave.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/footer1.xml"); + CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:ftr/w:tbl/w:tr/w:tc[1]/w:p[1]/w:pPr/w:pStyle", "val").match("Normal")); +} + +CPPUNIT_TEST_FIXTURE(Test, testFileOpenInputOutputError) +{ + loadAndReload("floatingtbl_with_formula.docx"); + // Docx containing Floating table with formula was giving "General input/output error" while opening in LibreOffice + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:pStyle", "val", "Normal"); + + // let's also assert that the formula was exported properly + assertXPathContent(pXmlDoc, "//w:tbl/w:tr/w:tc[2]/w:p/m:oMathPara/m:oMath/m:sSubSup/m:e/m:r/m:t", u"\u03C3"); +} + +CPPUNIT_TEST_FIXTURE(Test, testSingleCellTableBorders) +{ + loadAndSave("tdf124399_SingleCellTableBorders.docx"); + // tdf#124399: Extra borders on single cell tables fixed. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tcPr/w:tcBorders/w:top [@w:val = 'nil']", 1); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr/w:tc/w:tcPr/w:tcBorders/w:bottom [@w:val = 'nil']", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testInsideBorders) +{ + loadAndSave("tdf129242_InsideBorders.docx"); + // tdf#129242: Don't remove inside borders if the table has more than one cells. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + // If this is not 0, then inside borders are removed. + assertXPathChildren(pXmlDocument, "/w:document/w:body/w:tbl/w:tr/w:tc[2]/w:tcPr/w:tcBorders", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testRightBorder) +{ + loadAndSave("tdf129442_RightBorder.docx"); + // tdf#129442: Right border of a one column table was missing. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + // If the right border is missing like in the bug, then there is a tag in tcBorders. + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[1]/w:tc/w:tcPr/w:tcBorders/w:end [@w:val = 'nil']", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testBottomBorder) +{ + loadAndSave("tdf129450_BottomBorder.docx"); + // tdf#129450: Missing bottom border in one row table. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + // If there is no bottom border, it is shown in tcBorders. + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:tcPr/w:tcBorders/w:bottom [@w:val = 'nil']", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testBottomBorders) +{ + loadAndSave("tdf129452_BottomBorders.docx"); + // tdf#129452: Do not omit bottom borders when a column in a table is vertically merged and + // the inside borders are turned off. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[4]/w:tc[1]/w:tcPr/w:tcBorders/w:bottom [@w:val = 'nil']", 0); + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[4]/w:tc[2]/w:tcPr/w:tcBorders/w:bottom [@w:val = 'nil']", 0); + + // But also don't treat separately merged cells as one - the topmost merged cell shouldn't gain a border. + assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[4]/w:tcPr/w:tcBorders/w:bottom", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testFontTypes) +{ + loadAndSave("tdf120344_FontTypes.docx"); + // tdf#120344: Font type of numbering symbols can be different than the font type of the text. + + // Check the font type of the text, should be Consolas. + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[1]/w:r/w:rPr/w:rFonts [@w:ascii='Consolas']", 1); + + // Now the font type of the numbering symbols, should be Arial Black. + xmlDocUniquePtr qXmlDocument = parseExport("word/numbering.xml"); + assertXPath(qXmlDocument, "/w:numbering/w:abstractNum[1]/w:lvl[1]/w:rPr/w:rFonts [@w:ascii='Arial Black']", 1); +} + +CPPUNIT_TEST_FIXTURE(Test, testNumberingLevels) +{ + loadAndSave("tdf95495.docx"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + // tdf#95495: set list level of the custom style based on the setting of the parent style + // [this assertXPath is not a very good test, since the numbering definition is not set on the paragraph itself, + // but in a style. This just tests the current copy-to-paragraph implementation. But leaving it for now, + // since this example is very much a corner case, so anyone trespassing here should double-check everything...] + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:pPr/w:numPr/w:ilvl [@w:val = '1']", 1); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//body/txt[5]/LineBreak", "Line", "A.2.1 .DESCRIPTION"); +} + +CPPUNIT_TEST_FIXTURE(Test, testVerticalBorders) +{ + loadAndSave("calendar3.docx"); + // tdf#130799: Inside vertical borders of a table should not be missing. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + // Left and right borders. + assertXPathChildren(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[3]/w:tc[3]/w:tcPr/w:tcBorders", 2); +} + +CPPUNIT_TEST_FIXTURE(Test, testArrowFlipXY) +{ + loadAndSave("tdf100751_arrowBothFlip.docx"); + // tdf#100751: Both x and y flip should happen. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + OUString arrowStyle = getXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:group/v:shape[2]", "style"); + CPPUNIT_ASSERT(arrowStyle.indexOf(u"flip:xy") != sal_Int32(-1)); +} + +CPPUNIT_TEST_FIXTURE(Test, testArrowPosition) +{ + loadAndSave("tdf104565_ArrowPosition.docx"); + // tdf#104565: Test correct position. + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + // This is the correct Y coordinate, the incorrect was 817880. + assertXPathContent(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor" + "/wp:positionV/wp:posOffset", "516255"); +} + +CPPUNIT_TEST_FIXTURE(Test, testArrowMarker) +{ + loadAndSave("tdf123346_ArrowMarker.docx"); + // tdf#123346: Check arrow marker. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor" + "/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:tailEnd", "type", "arrow"); +} + +CPPUNIT_TEST_FIXTURE(Test, testShapeLineWidth) +{ + loadAndSave("tdf92526_ShapeLineWidth.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // tdf#92526: Make sure that line with stays 0. + xmlDocUniquePtr pXml = parseExport("word/document.xml"); + + // "w" attribute was not exported. + assertXPath(pXml, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing" + "/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln", "w", "0"); +} + +CPPUNIT_TEST_FIXTURE(Test, testRelativeAnchorWidthFromLeftMargin) +{ + loadAndSave("tdf132976_testRelativeAnchorWidthFromLeftMargin.docx"); + // tdf#132976 The size of the width of this shape should come from the size of the left margin. + // It was set to the size of the width of the entire page before. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds", "width", "1133"); +} + +CPPUNIT_TEST_FIXTURE(Test, testRelativeAnchorWidthFromInsideOutsideMargin) +{ + loadAndSave("tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx"); + // tdf#133863 tdf#133864 The sizes of the width of these shapes depend on the sizes of the inside and outside margins. + // The open book: outside --text-- inside | inside --text-- outside + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // Inside + assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[1]/bounds", "width", "1440"); + // Outside + assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[2]/bounds", "width", "2552"); + // Outside + assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[3]/bounds", "width", "2552"); + // Inside + assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[4]/bounds", "width", "1440"); +} + +CPPUNIT_TEST_FIXTURE(Test, testBodyPrUpright) +{ + loadAndSave("tdf123610_handle_upright.docx"); + // tdf#123610: Check grab-bag attribute upright to keep text upright regardless of shape rotation. + + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor" + "/a:graphic/a:graphicData/wps:wsp/wps:bodyPr", "upright", "1"); +} + +CPPUNIT_TEST_FIXTURE(Test, testLostArrow) +{ + loadAndReload("tdf99810-lost-arrow.odt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // tdf#99810: check whether we use normal shape instead of connector shape if the XML namespace + // is wps, because wps: + xmlDocUniquePtr pDoc = parseExport("word/document.xml"); + + assertXPath(pDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor" + "/a:graphic/a:graphicData/wps:wsp"); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx new file mode 100644 index 000000000..25682f90b --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx @@ -0,0 +1,1307 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {} + +protected: + virtual std::unique_ptr preTest(const char* filename) override + { + if (filename == std::string_view("combobox-control.docx") ) + { + std::shared_ptr< comphelper::ConfigurationChanges > batch(comphelper::ConfigurationChanges::create()); + officecfg::Office::Writer::Filter::Import::DOCX::ImportComboBoxAsDropDown::set(true, batch); + batch->commit(); + } + return nullptr; + } + + void verifyComboBoxExport(bool aComboBoxAsDropDown); +}; + +DECLARE_OOXMLEXPORT_TEST(testRelorientation, "relorientation.docx") +{ + uno::Reference xShape = getShape(1); + // This was text::RelOrientation::FRAME, when handling relativeFrom=page, align=right + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xShape, "HoriOrientRelation")); + + uno::Reference xGroup(xShape, uno::UNO_QUERY); + // This resulted in lang::IndexOutOfBoundsException, as nested groupshapes weren't handled. + uno::Reference xShapeDescriptor(xGroup->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.GroupShape"), xShapeDescriptor->getShapeType()); + + // 'actual child size' = 'group ext' * 'child ext' / 'chExt from group', see section 'chExt' in + // [MS-OI29500]. Here for width from file 3108960 * 4896 / 4911 = 3099464 EMU. That corresponds to + // width 8.61cm and 325px in UI in Word and rounds down to 8609 Hmm. Considering scaling of the + // parent group to the anchor extent (* 3118485 / 3108960) we get a display width of 3108960 EMU + // = 8636Hmm. FIXME: Expected value is as in LO 7.2. Reason for difference is yet unknown. + if (mbExported) + { + uno::Reference xYear(xGroup->getByIndex(1), uno::UNO_QUERY); + // This was 2, due to incorrect handling of parent transformations inside DML groupshapes. + CPPUNIT_ASSERT_EQUAL(sal_Int32(8662), xYear->getSize().Width); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testBezier) +{ + loadAndReload("bezier.odt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Check that no shape got lost: a bezier, a line and a text shape. + CPPUNIT_ASSERT_EQUAL(3, getShapes()); +} + +DECLARE_OOXMLEXPORT_TEST(testGroupshapeTextbox, "groupshape-textbox.docx") +{ + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + uno::Reference xShape(xGroup->getByIndex(0), uno::UNO_QUERY); + // The VML export lost text on textboxes inside groupshapes. + // The DML export does not, make sure it stays that way. + CPPUNIT_ASSERT_EQUAL(OUString("first"), xShape->getString()); + // This was 16, i.e. inheriting doc default char height didn't work. + CPPUNIT_ASSERT_EQUAL(11.f, getProperty(getParagraphOfText(1, xShape->getText()), "CharHeight")); +} + +DECLARE_OOXMLEXPORT_TEST(testGroupshapePicture, "groupshape-picture.docx") +{ + // Picture in the groupshape got lost, groupshape had only one child. + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + uno::Reference xShapeDescriptor(xGroup->getByIndex(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.GraphicObjectShape"), xShapeDescriptor->getShapeType()); +} + +DECLARE_OOXMLEXPORT_TEST(testAutofit, "autofit.docx") +{ + CPPUNIT_ASSERT_EQUAL(true, getProperty(getShape(1), "TextAutoGrowHeight")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(getShape(2), "TextAutoGrowHeight")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTrackChangesDeletedParagraphMark) +{ + loadAndSave("testTrackChangesDeletedParagraphMark.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:rPr/w:del"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTrackChangesInsertedParagraphMark) +{ + loadAndSave("testTrackChangesInsertedParagraphMark.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:rPr/w:ins"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTrackChangesDeletedTableRow) +{ + loadAndSave("testTrackChangesDeletedTableRow.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:trPr/w:del"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTrackChangesInsertedTableRow) +{ + loadAndSave("testTrackChangesInsertedTableRow.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[2]/w:trPr/w:ins"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTrackChangesDeletedTableCell) +{ + loadAndSave("testTrackChangesDeletedTableCell.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc/w:tcPr/w:cellDel"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTrackChangesInsertedTableCell) +{ + loadAndSave("testTrackChangesInsertedTableCell.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[3]/w:tc/w:tcPr/w:cellIns"); +} + +DECLARE_OOXMLEXPORT_TEST(testTextBoxPictureFill, "textbox_picturefill.docx") +{ + uno::Reference xFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xFrame, "FillStyle")); + auto xBitmap = getProperty>(xFrame, "FillBitmap"); + CPPUNIT_ASSERT(xBitmap.is()); + uno::Reference xGraphic(xBitmap, uno::UNO_QUERY); + CPPUNIT_ASSERT(xGraphic.is()); + Graphic aGraphic(xGraphic); + CPPUNIT_ASSERT(!aGraphic.IsNone()); + CPPUNIT_ASSERT(aGraphic.GetSizeBytes() > 0L); + CPPUNIT_ASSERT_EQUAL(tools::Long(447), aGraphic.GetSizePixel().Width()); + CPPUNIT_ASSERT_EQUAL(tools::Long(528), aGraphic.GetSizePixel().Height()); +} + +CPPUNIT_TEST_FIXTURE(Test, testFDO73034) +{ + loadAndSave("FDO73034.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:rPr/w:u", "val").match("single")); +} + +CPPUNIT_TEST_FIXTURE(Test, testFDO71834) +{ + loadAndSave("fdo71834.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl[1]/w:tr[2]/w:tc[1]/w:tcPr[1]/w:tcW[1]","type", "dxa"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTrackChangesParagraphProperties) +{ + loadAndSave("testTrackChangesParagraphProperties.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPathChildren(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:pPrChange", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testMsoSpt180) +{ + loadAndReload("mso-spt180.docx"); + uno::Reference xGroup(getShape(1), uno::UNO_QUERY); + const uno::Sequence aProps = getProperty< uno::Sequence >(xGroup->getByIndex(0), "CustomShapeGeometry"); + OUString aType; + for (beans::PropertyValue const & prop : aProps) + if (prop.Name == "Type") + aType = prop.Value.get(); + // This was exported as borderCallout90, which is an invalid drawingML preset shape string. + CPPUNIT_ASSERT_EQUAL(OUString("ooxml-borderCallout1"), aType); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo73550) +{ + loadAndSave("fdo73550.docx"); + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + // This was wrap="none". + assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:rFonts"); +} + +DECLARE_OOXMLEXPORT_TEST(testPageRelSize, "pagerelsize.docx") +{ + // First shape: width is relative from page, but not height. + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xShape, "RelativeWidthRelation")); + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xShape, "RelativeHeightRelation")); + + // Second shape: height is relative from page, but not height. + xShape = getShape(2); + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(xShape, "RelativeHeightRelation")); + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xShape, "RelativeWidthRelation")); +} + +DECLARE_OOXMLEXPORT_TEST(testRelSizeRound, "rel-size-round.docx") +{ + // This was 9: 9.8 was imported as 9 instead of being rounded to 10. + CPPUNIT_ASSERT_EQUAL(sal_Int16(10), getProperty(getShape(1), "RelativeHeight")); +} + +DECLARE_OOXMLEXPORT_TEST(testTestTitlePage, "testTitlePage.docx") +{ + // this has 2 pages in Word + CPPUNIT_ASSERT_EQUAL(OUString("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), parseDump("/root/page[2]/footer/txt/text()")); +} + +DECLARE_OOXMLEXPORT_TEST(testTableRowDataDisplayedTwice, "table-row-data-displayed-twice.docx") +{ + // fdo#73534: There was a problem for some documents during export.Invalid sectPr getting added + // because of wrong condition in code. + // This was the reason for increasing number of pages after RT + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo73556) +{ + loadAndSave("fdo73556.docx"); + /* + * The file contains a table with 3 columns + * the gridcols are as follows: {1210, 1331, 1210} + * whereas the individual cells have {1210, 400, 1210} + * The table column separators were taken from the Grid, while + * the table width was calculated as 2820 from cells instead + * of 3751 from the Grid. + */ + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblGrid/w:gridCol", 3); + sal_Int32 tableWidth = 0; + tableWidth += getXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblGrid/w:gridCol[1]", "w").toInt32(); + tableWidth += getXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblGrid/w:gridCol[2]", "w").toInt32(); + tableWidth += getXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblGrid/w:gridCol[3]", "w").toInt32(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3751), tableWidth); +} + +CPPUNIT_TEST_FIXTURE(Test, testSegFaultWhileSave) +{ + loadAndSave("test_segfault_while_save.docx"); + // fdo#74499 + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT_EQUAL(static_cast(6137), getXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblGrid/w:gridCol[2]", "w").toInt32()); +} + +CPPUNIT_TEST_FIXTURE(Test, fdo69656) +{ + loadAndSave("Table_cell_auto_width_fdo69656.docx"); + // Changed the UT to check "dxa" instead of "auto" + // For this particular issue file few cells have width type "auto" + // LO supports VARIABLE and FIXED width type. + // If type is VARIABLE LO calculates width as percent of PageSize + // Else if the width is fixed it uses the width value. + // After changes for fdo76741 the fixed width is exported as "dxa" for DOCX + + // Check for the width type of table and its cells. + xmlDocUniquePtr pXmlDoc = parseExport(); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblW","type","dxa"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo76741) +{ + loadAndSave("fdo76741.docx"); + + // There are two issue related to table in the saved(exported) file + // - the table alignment in saved file is "left" instead of "center" + // - the table width type in properties is "auto" instead of "dxa" + + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPath(pXmlDoc, "//w:jc", "val", "center"); + assertXPath(pXmlDoc, "//w:tblW", "w", "10081"); + assertXPath(pXmlDoc, "//w:tblW", "type", "dxa"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo73541) +{ + loadAndSave("fdo73541.docx"); + // fdo#73541: The mirrored margins were not imported and mapped correctly in Page Layout + // Hence tag was not exported back in settings.xml + xmlDocUniquePtr pXmlDoc = parseExport("word/settings.xml"); + assertXPath(pXmlDoc, "/w:settings/w:mirrorMargins"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo106029) +{ + loadAndSave("fdo106029.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/settings.xml"); + assertXPath(pXmlDoc, "/w:settings/w:compat/w:doNotExpandShiftReturn"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf146515) +{ + loadAndSave("tdf146515.odt"); + xmlDocUniquePtr pXmlDoc = parseExport("word/settings.xml"); + assertXPath(pXmlDoc, "/w:settings/w:compat/w:usePrinterMetrics"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFDO74106) +{ + loadAndSave("FDO74106.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/numbering.xml"); + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[1]/w:numFmt", "val","hebrew1"); +} + +CPPUNIT_TEST_FIXTURE(Test, testFDO74215) +{ + loadAndSave("FDO74215.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/numbering.xml"); + // tdf#106849 NumPicBullet xShape should not be resized. + + // This is dependent on the running system: see MSWordExportBase::BulletDefinitions + // FIXME: the size of a bullet is defined by GraphicSize property + // (stored in SvxNumberFormat::aGraphicSize) so use that for the size + // (properly convert from 100mm to pt (1 inch is 72 pt, 1 pt is 20 twips). + + // On 96 DPI "width:11.25pt;height:11.25pt"; on 120 DPI "width:9pt;height:9pt" + const OUString sStyle + = getXPath(pXmlDoc, "/w:numbering/w:numPicBullet[2]/w:pict/v:shape", "style"); + { + OUString sWidth = sStyle.getToken(0, ';'); + CPPUNIT_ASSERT(sWidth.startsWith("width:", &sWidth)); + CPPUNIT_ASSERT(sWidth.endsWith("pt", &sWidth)); + const double fWidth = sWidth.toDouble(); + const double fXScaleFactor = 96.0 / Application::GetDefaultDevice()->GetDPIX(); + // note: used to fail on Mac with 14.7945205479452 vs. 14.8 + // note: used to fail on another Mac with 12.1348314606742 vs 12.15 + CPPUNIT_ASSERT_DOUBLES_EQUAL(11.25 * fXScaleFactor, fWidth, 0.1); + } + { + OUString sHeight = sStyle.getToken(1, ';'); + CPPUNIT_ASSERT(sHeight.startsWith("height:", &sHeight)); + CPPUNIT_ASSERT(sHeight.endsWith("pt", &sHeight)); + const double fHeight = sHeight.toDouble(); + const double fYScaleFactor = 96.0 / Application::GetDefaultDevice()->GetDPIY(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(11.25 * fYScaleFactor, fHeight, 0.1); + } +} + +DECLARE_OOXMLEXPORT_TEST(testColumnBreak_ColumnCountIsZero,"fdo74153.docx") +{ + /* fdo73545: Column Break with Column_count = 0 was not getting preserved. + * The was missing after roundtrip + */ + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + if (pXmlDoc) + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[1]/w:br","type","column"); + + //tdf76349 match Word's behavior of treating breaks in single columns as page breaks. + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf90697_complexBreaksHeaders,"tdf90697_complexBreaksHeaders.docx") +{ +// This is a complex document using many types of section breaks and re-defined headers. +// Paragraphs 44-47 were in two columns + uno::Reference xTextSection = getProperty< uno::Reference >(getParagraph(45), "TextSection"); + CPPUNIT_ASSERT(xTextSection.is()); + uno::Reference xTextColumns = getProperty< uno::Reference >(xTextSection, "TextColumns"); + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), xTextColumns->getColumnCount()); + +// after that, the section break should switch things back to one column. + xTextSection = getProperty< uno::Reference >(getParagraph(50), "TextSection"); + CPPUNIT_ASSERT(xTextSection.is()); + xTextColumns = getProperty< uno::Reference >(xTextSection, "TextColumns"); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), xTextColumns->getColumnCount()); +} + +CPPUNIT_TEST_FIXTURE(Test, testIndentation) +{ + loadAndSave("test_indentation.docx"); + // fdo#74141 :There was a problem that in style.xml and document.xml in tag "right" & "left" margin + // attributes gets added(w:right=0 & w:left=0) if these attributes are not set in original document. + // This test is to verify does not contain w:right attribute. + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p/w:pPr/w:ind", "end"); +} + +CPPUNIT_TEST_FIXTURE(Test, testChartInFooter) +{ + loadAndSave("chart-in-footer.docx"); + // fdo#73872: document contains chart in footer. + // The problem was that footer1.xml.rels files for footer1.xml + // files were missing from docx file after roundtrip. + xmlDocUniquePtr pXmlDoc = parseExport("word/_rels/footer2.xml.rels"); + + // Check footer2.xml.rels contains in doc after roundtrip. + // Check Id = rId1 in footer2.xml.rels + assertXPath(pXmlDoc,"/rels:Relationships/rels:Relationship","Id","rId1"); + assertXPath(pXmlDoc, + "/rels:Relationships/rels:Relationship[@Id='rId1']", + "Type", + "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"); + + xmlDocUniquePtr pXmlDocCT = parseExport("[Content_Types].xml"); + assertXPath(pXmlDocCT, + "/ContentType:Types/ContentType:Override[@PartName='/word/charts/chart1.xml']", + "ContentType", + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"); + + // check the content too + xmlDocUniquePtr pXmlDocFooter2 = parseExport("word/footer2.xml"); + assertXPath(pXmlDocFooter2, + "/w:ftr/w:p[1]/w:r/w:drawing/wp:inline/a:graphic/a:graphicData", + "uri", + "http://schemas.openxmlformats.org/drawingml/2006/chart"); + assertXPath(pXmlDocFooter2, + "/w:ftr/w:p[1]/w:r/w:drawing/wp:inline/a:graphic/a:graphicData/c:chart", + "id", + "rId1"); + + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); +} + +CPPUNIT_TEST_FIXTURE(Test, testNestedTextFrames) +{ + loadAndReload("nested-text-frames.odt"); + CPPUNIT_ASSERT_EQUAL(3, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // First problem was LO crashed during export (crash test) + + // Second problem was LO made file corruption, writing out nested text boxes, which can't be handled by Word. + // Test that all three exported text boxes are anchored to the same paragraph and not each other. + uno::Reference xTextContent(getShape(1), uno::UNO_QUERY); + uno::Reference xRange = xTextContent->getAnchor(); + uno::Reference xText = xRange->getText(); + CPPUNIT_ASSERT_EQUAL(OUString("Anchor point"), xText->getString()); + + xTextContent.set(getShape(2), uno::UNO_QUERY); + xRange = xTextContent->getAnchor(); + xText = xRange->getText(); + CPPUNIT_ASSERT_EQUAL(OUString("Anchor point"), xText->getString()); + + xTextContent.set(getShape(3), uno::UNO_QUERY); + xRange = xTextContent->getAnchor(); + xText = xRange->getText(); + CPPUNIT_ASSERT_EQUAL(OUString("Anchor point"), xText->getString()); +} + +DECLARE_OOXMLEXPORT_TEST(testFloatingTablePosition, "floating-table-position.docx") +{ + // Position of shape was wrong, because some conversion was missing. + uno::Reference xShape(getShape(1), uno::UNO_QUERY); + // This was 3295. + CPPUNIT_ASSERT_EQUAL(sal_Int32(5964), getProperty(xShape, "HoriOrientPosition")); + // This was 4611. + CPPUNIT_ASSERT_EQUAL(sal_Int32(8133), getProperty(xShape, "VertOrientPosition")); +} + +CPPUNIT_TEST_FIXTURE(Test, testAbi11739) +{ + loadAndSave("abi11739.docx"); + // Validation test: order of elements were wrong. + xmlDocUniquePtr pXmlDoc = parseExport("word/styles.xml"); + // Order was: uiPriority, link, basedOn. + CPPUNIT_ASSERT(getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "basedOn") < getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "link")); + CPPUNIT_ASSERT(getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "link") < getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "uiPriority")); + // Order was: qFormat, unhideWhenUsed. + CPPUNIT_ASSERT(getXPathPosition(pXmlDoc, "/w:styles/w:style[11]", "unhideWhenUsed") < getXPathPosition(pXmlDoc, "/w:styles/w:style[11]", "qFormat")); +} + +DECLARE_OOXMLEXPORT_TEST(testEmbeddedXlsx, "embedded-xlsx.docx") +{ + // check there are two objects and they are FrameShapes + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(OUString("FrameShape"), getShape(1)->getShapeType()); + CPPUNIT_ASSERT_EQUAL(OUString("FrameShape"), getShape(2)->getShapeType()); + + // check the objects are present in the exported document.xml + xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml"); + if (!pXmlDocument) + return; + assertXPath(pXmlDocument, "/w:document/w:body/w:p/w:r/w:object", 2); + + // finally check the embedded files are present in the zipped document + uno::Reference xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), maTempFile.GetURL()); + const uno::Sequence names = xNameAccess->getElementNames(); + int nSheetFiles = 0; + int nImageFiles = 0; + for (OUString const & n : names) + { + if(n.startsWith("word/embeddings/oleObject")) + nSheetFiles++; + if(n.startsWith("word/media/image")) + nImageFiles++; + } + CPPUNIT_ASSERT_EQUAL(2, nSheetFiles); + CPPUNIT_ASSERT_EQUAL(2, nImageFiles); +} + +CPPUNIT_TEST_FIXTURE(Test, testNumberedLists_StartingWithZero) +{ + loadAndSave("FDO74105.docx"); + /* Issue : Numbered lists Starting with value '0' is not preserved after RT. + * In numbering.xml, an XML tag is optional. If not mentioned, + * the Numbered list should start from 0. + * Problem was LO was writing for all levels 0-8 with default value "1". + */ + xmlDocUniquePtr pXmlDoc = parseExport("word/numbering.xml"); + + // Check that we do _not_ export w:start for . + assertXPath(pXmlDoc, "w:numbering/w:abstractNum[1]/w:lvl[1]/w:start", 0); +} + +CPPUNIT_TEST_FIXTURE(Test, testPageBreak) +{ + loadAndReload("fdo74566.docx"); + /* Break to next page was written into wrong paragraph as . + * LO was not preserving Page Break as . + * Now after fix , LO writes Page Break as the new paragraph and also + * preserves the xml tag . + */ + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + uno::Reference xParagraph2 = getParagraph(2); + uno::Reference xParagraph4 = getParagraph(4); + + getRun(xParagraph2, 1, "First Page Second Line"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[2]/w:br","type","page"); + getRun(xParagraph4, 1, "Second Page First line after Page Break"); +} + +CPPUNIT_TEST_FIXTURE(Test, testOleObject) +{ + loadAndSave("test_ole_object.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + + assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/w:object/v:shape/v:imagedata", + "o:title"); + assertXPath(pXmlDoc, + "/w:document/w:body/w:p[2]/w:r/w:object/o:OLEObject", + "DrawAspect", + "Content"); + // TODO: ProgID="Package" - what is this? Zip with 10k extra header? + + // check the rels too + xmlDocUniquePtr pXmlDocRels = parseExport("word/_rels/document.xml.rels"); + assertXPath(pXmlDocRels, + "/rels:Relationships/rels:Relationship[@Target='embeddings/oleObject1.bin']", + "Type", + "http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"); + // check the media type too + xmlDocUniquePtr pXmlDocCT = parseExport("[Content_Types].xml"); + assertXPath(pXmlDocCT, + "/ContentType:Types/ContentType:Override[@PartName='/word/embeddings/oleObject1.bin']", + "ContentType", + "application/vnd.openxmlformats-officedocument.oleObject"); + +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo74792) +{ + loadAndSave("fdo74792.docx"); + /* + * fdo#74792 : The images associated with smart-art data[i].xml + * were not preserved on exporting to DOCX format + * Added support to grabbag the rels, with associated images. + */ + xmlDocUniquePtr pXmlDoc = parseExport("word/diagrams/_rels/data1.xml.rels"); + assertXPath(pXmlDoc,"/rels:Relationships/rels:Relationship", 4); + uno::Reference xNameAccess = packages::zip::ZipFileAccess::createWithURL( + comphelper::getComponentContext(m_xSFactory), maTempFile.GetURL()); + + //check that images are also saved + uno::Reference xInputStream(xNameAccess->getByName( "word/media/OOXDiagramDataRels1_0.jpeg" /*added anchor id to form a unique name*/ ), uno::UNO_QUERY); + CPPUNIT_ASSERT( xInputStream.is() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testFdo77718) +{ + loadAndSave("fdo77718.docx"); + //in case of multiple smart arts the names for images were getting + //repeated and thereby causing a data loss as the binary stream was + //getting over written. This test case ensures that unique names are + //given for images in different smart arts. + xmlDocUniquePtr pXmlDataRels1 = parseExport("word/diagrams/_rels/data1.xml.rels"); + xmlDocUniquePtr pXmlDataRels2 = parseExport("word/diagrams/_rels/data2.xml.rels"); + + //ensure that the rels file is present. + assertXPath(pXmlDataRels1,"/rels:Relationships/rels:Relationship", 4); + assertXPath(pXmlDataRels2,"/rels:Relationships/rels:Relationship", 4); + + uno::Reference xNameAccess = packages::zip::ZipFileAccess::createWithURL( + comphelper::getComponentContext(m_xSFactory), maTempFile.GetURL()); + + //check that images are also saved + uno::Reference xInputStream1(xNameAccess->getByName( "word/media/OOXDiagramDataRels1_0.jpeg" /*added anchor id to form a unique name*/ ), uno::UNO_QUERY); + CPPUNIT_ASSERT( xInputStream1.is() ); + + //check that images are saved for other smart-arts as well. + uno::Reference xInputStream2(xNameAccess->getByName( "word/media/OOXDiagramDataRels2_0.jpeg" /*added anchor id to form a unique name*/ ), uno::UNO_QUERY); + CPPUNIT_ASSERT( xInputStream2.is() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTableCurruption) +{ + loadAndSave("tableCurrupt.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/header2.xml"); + CPPUNIT_ASSERT(pXmlDoc) ; + assertXPath(pXmlDoc, "/w:hdr/w:tbl[1]/w:tr[1]/w:tc[1]",1); + + // tdf#116549: header paragraph should not have a bottom border. + uno::Reference xHeaderText = getProperty< uno::Reference >(getStyles("PageStyles")->getByName("First Page"), "HeaderText"); + table::BorderLine2 aHeaderBottomBorder = getProperty( getParagraphOfText( 1, xHeaderText ), "BottomBorder"); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), aHeaderBottomBorder.LineWidth); +} + +CPPUNIT_TEST_FIXTURE(Test, testDateControl) +{ + loadAndSave("date-control.docx"); + // check XML + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date", "fullDate", "2014-03-05T00:00:00Z"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:dateFormat", "val", "dddd, dd' de 'MMMM' de 'yyyy"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:lid", "val", "es-ES"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", u"mi\u00E9rcoles, 05 de marzo de 2014"); +} + +CPPUNIT_TEST_FIXTURE(Test, test_Tdf115030) +{ + loadAndSave("tdf115030.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + sal_Unicode aDot = {0x02D9}; + sal_Unicode aDobleDot = {0x00A8}; + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/m:oMath[1]/m:acc/m:accPr/m:chr", "val", OUString(aDot)); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/m:oMath[2]/m:acc/m:accPr/m:chr", "val", OUString(aDobleDot)); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/m:oMathPara/m:oMath[1]/m:acc/m:accPr/m:chr", "val", OUString(aDot)); +} + +CPPUNIT_TEST_FIXTURE(Test, test_OpeningBrace) +{ + loadAndSave("2120112713_OpenBrace.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + // Checking for OpeningBrace tag + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/m:oMath[1]/m:d[1]/m:dPr[1]/m:begChr[1]","val",""); +} + +CPPUNIT_TEST_FIXTURE(Test, test_Tdf132305) +{ + loadAndSave("tdf132305.docx"); + xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/m:oMath[1]/m:bar/m:barPr/m:pos","val","top"); +} + +// Checks that all runs of the field have text properties. +// Old behaviour: only first run has text properties of the field +// +// There are several runs are used in fields: +// +// +// " + emulateTyping(*pXTextDocument, u" -->"); + OUString sReplaced2(sReplaced + u" -->"); + // This was "–>" instead of "-->" + CPPUNIT_ASSERT_EQUAL(sReplaced2, getParagraph(1)->getString()); + emulateTyping(*pXTextDocument, u" "); + sReplaced += u" → "; + // This was "–>" instead of "→" + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + // tdf#83037 + emulateTyping(*pXTextDocument, u"-> "); + sReplaced += u"→ "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + emulateTyping(*pXTextDocument, u"<- "); + sReplaced += u"← "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + emulateTyping(*pXTextDocument, u"<-- "); + sReplaced += u"← "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + emulateTyping(*pXTextDocument, u"<--> "); + sReplaced += u"↔ "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf133524_Romanian) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf133524_ro.fodt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + // 1. Testing autocorrect of " to << and >> inside „...” + // Example: „Sentence and «word».” + // opening primary level quote + emulateTyping(*pXTextDocument, u"\""); + OUString sReplaced(u"„"); + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // opening second level quote + emulateTyping(*pXTextDocument, u"Sentence and \""); + sReplaced += u"Sentence and «"; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // closing second level quote + emulateTyping(*pXTextDocument, u"word\""); + sReplaced += u"word»"; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // closing primary level quote + emulateTyping(*pXTextDocument, u".\""); + sReplaced += u".”"; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // 2. Testing recognition of closing double quotation mark ” + emulateTyping(*pXTextDocument, u" \""); + sReplaced += u" „"; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // 3. Testing recognition of alternative closing double quotation mark “ + emulateTyping(*pXTextDocument, u"Alternative.“ \""); + sReplaced += u"Alternative.“ „"; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf128860) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf128860.fodt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + // Second level ending quote: ‚word' -> ,word‘ + emulateTyping(*pXTextDocument, u",word'"); + OUString sReplaced(u",word\u2019"); + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // Us apostrophe without preceding starting quote: word' -> word’ + emulateTyping(*pXTextDocument, u" word'"); + sReplaced += u" word\u2019"; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // But only after letters: word.' -> word.‘ + emulateTyping(*pXTextDocument, u" word.'"); + sReplaced += u" word.‘"; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf123786) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf123786.fodt"); + + // On Windows, it will detect that system input language is en-US (despite "typing" e.g. Cyrillic characters), + // and will change Russian into English (US); in the latter language, + // the replacement from single quote will not become “, but ’. + SvtSysLocaleOptions aOptions; + aOptions.SetIgnoreLanguageChange(true); + aOptions.Commit(); + + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + // Second level ending quote: „word' -> „word“ + emulateTyping(*pXTextDocument, u"„слово'"); + OUString sReplaced(u"„слово“"); + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // Us apostrophe without preceding starting quote: word' -> word’ + emulateTyping(*pXTextDocument, u" слово'"); + sReplaced += u" слово’"; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // But only after letters: word.' -> word.“ + emulateTyping(*pXTextDocument, u" слово.'"); + sReplaced += u" слово.“"; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf133589) +{ + // Hungarian test document with right-to-left paragraph setting + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf133589.fodt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + // translitere words to Old Hungarian + emulateTyping(*pXTextDocument, u"székely "); + OUString sReplaced(u"𐳥𐳋𐳓𐳉𐳗 "); + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // disambiguate consonants: asszony -> asz|szony + emulateTyping(*pXTextDocument, u"asszony "); + sReplaced += u"𐳀𐳥𐳥𐳛𐳚 "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // disambiguate consonants: kosszarv -> kos|szarv + // (add explicit ZWSP temporarily for consonant disambiguation, because the requested + // hu_HU hyphenation dictionary isn't installed on all testing platform) + // pWrtShell->Insert(u"kosszarv"); + emulateTyping(*pXTextDocument, u"kos\u200Bszarv "); + sReplaced += u"𐳓𐳛𐳤𐳥𐳀𐳢𐳮 "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // transliterate numbers to Old Hungarian + emulateTyping(*pXTextDocument, u"2020 "); + sReplaced += u"𐳺𐳺𐳿𐳼𐳼 "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + // tdf#147546 transliterate punctuation marks + + // question mark + emulateTyping(*pXTextDocument, u"Kérdőjel?"); + sReplaced += u"𐲓𐳋𐳢𐳇𐳟𐳒𐳉𐳖"; + OUString sReplaced2(sReplaced + "?"); + CPPUNIT_ASSERT_EQUAL(sReplaced2, getParagraph(1)->getString()); + emulateTyping(*pXTextDocument, u" "); + sReplaced += u"⸮ "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // comma + emulateTyping(*pXTextDocument, u"Vessző,"); + sReplaced += u"𐲮𐳉𐳥𐳥𐳟"; + sReplaced2 = sReplaced + ","; + CPPUNIT_ASSERT_EQUAL(sReplaced2, getParagraph(1)->getString()); + emulateTyping(*pXTextDocument, u" "); + sReplaced += u"⹁ "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // semicolon + emulateTyping(*pXTextDocument, u"pontosvessző;"); + sReplaced += u"𐳠𐳛𐳙𐳦𐳛𐳤𐳮𐳉𐳥𐳥𐳟"; + sReplaced2 = sReplaced + ";"; + CPPUNIT_ASSERT_EQUAL(sReplaced2, getParagraph(1)->getString()); + emulateTyping(*pXTextDocument, u" "); + sReplaced += u"⁏ "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + // quotation marks + emulateTyping(*pXTextDocument, u"„idézőjel” "); + sReplaced += u"⹂𐳐𐳇𐳋𐳯𐳟𐳒𐳉𐳖‟ "; + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + // tdf#148672 transliterate word with closing bracket + emulateTyping(*pXTextDocument, u"word] "); + sReplaced += u"𐳮𐳛𐳢𐳇] "; // This was "word]" (no transliteration) + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + // tdf#148672 transliterate words with parenthesis (libnumbertext 1.0.11) + emulateTyping(*pXTextDocument, u"(word) "); + sReplaced += u"(𐳮𐳛𐳢𐳇) "; // This was "(word)" (no transliteration) + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + emulateTyping(*pXTextDocument, u"(word "); + sReplaced += u"(𐳮𐳛𐳢𐳇 "; // This was "(word" (no transliteration) + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + emulateTyping(*pXTextDocument, u"word) "); + sReplaced += u"𐳮𐳛𐳢𐳇) "; // This was "word)" (no transliteration) + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + emulateTyping(*pXTextDocument, u"{word} "); + sReplaced += u"{𐳮𐳛𐳢𐳇} "; // This was "(word)" (no transliteration) + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + emulateTyping(*pXTextDocument, u"{word "); + sReplaced += u"{𐳮𐳛𐳢𐳇 "; // This was "(word" (no transliteration) + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + emulateTyping(*pXTextDocument, u"word} "); + sReplaced += u"𐳮𐳛𐳢𐳇} "; // This was "word)" (no transliteration) + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + emulateTyping(*pXTextDocument, u"[word] "); + sReplaced += u"[𐳮𐳛𐳢𐳇] "; // This was "(word)" (no transliteration) + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); + + emulateTyping(*pXTextDocument, u"[word "); + sReplaced += u"[𐳮𐳛𐳢𐳇 "; // This was "(word" (no transliteration) + CPPUNIT_ASSERT_EQUAL(sReplaced, getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testAutoCorr) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + + //Normal AutoCorrect + emulateTyping(*pXTextDocument, u"tset "); + CPPUNIT_ASSERT_EQUAL(OUString("Test "), getParagraph(1)->getString()); + + //AutoCorrect with change style to bolt + emulateTyping(*pXTextDocument, u"Bolt "); + const uno::Reference xRun = getRun(getParagraph(1), 2); + CPPUNIT_ASSERT_EQUAL(OUString("Bolt"), xRun->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty(xRun, "CharFontName")); + + //AutoCorrect inserts Table with 2 rows and 3 columns + emulateTyping(*pXTextDocument, u"4xx "); + const uno::Reference xTable(getParagraphOrTable(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTable->getColumns()->getCount()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf130274) +{ + SwDoc* const pDoc(createSwDoc()); + SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + + CPPUNIT_ASSERT(!pWrtShell->GetLayout()->IsHideRedlines()); + CPPUNIT_ASSERT( + !IDocumentRedlineAccess::IsRedlineOn(pDoc->getIDocumentRedlineAccess().GetRedlineFlags())); + + // "tset" may be replaced by the AutoCorrect in the test profile + emulateTyping(*pXTextDocument, u"tset"); + // select from left to right + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 4, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 4, /*bBasicCall=*/false); + + pWrtShell->SetRedlineFlags(pWrtShell->GetRedlineFlags() | RedlineFlags::On); + // this would crash in AutoCorrect + emulateTyping(*pXTextDocument, u"."); + + CPPUNIT_ASSERT(!pDoc->getIDocumentRedlineAccess().GetRedlineTable().empty()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf83260) +{ + SwDoc* const pDoc(createSwDoc(DATA_DIRECTORY, "tdf83260-1.odt")); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + + // enabled but not shown + CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines()); +#if 0 + CPPUNIT_ASSERT(IDocumentRedlineAccess::IsHideChanges( + pDoc->getIDocumentRedlineAccess().GetRedlineFlags())); +#endif + CPPUNIT_ASSERT( + IDocumentRedlineAccess::IsRedlineOn(pDoc->getIDocumentRedlineAccess().GetRedlineFlags())); + CPPUNIT_ASSERT(!pDoc->getIDocumentRedlineAccess().GetRedlineTable().empty()); + + // the document contains redlines that are combined with CompressRedlines() + // if that happens during AutoCorrect then indexes in Undo are off -> crash + emulateTyping(*pXTextDocument, u"tset "); + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + auto const nActions(rUndoManager.GetUndoActionCount()); + for (auto i = nActions; 0 < i; --i) + { + rUndoManager.Undo(); + } + // check that every text node has a layout frame + for (SwNodeOffset i(0); i < pDoc->GetNodes().Count(); ++i) + { + if (SwTextNode const* const pNode = pDoc->GetNodes()[i]->GetTextNode()) + { + CPPUNIT_ASSERT(pNode->getLayoutFrame(nullptr, nullptr, nullptr)); + } + } + for (auto i = nActions; 0 < i; --i) + { + rUndoManager.Redo(); + } + for (SwNodeOffset i(0); i < pDoc->GetNodes().Count(); ++i) + { + if (SwTextNode const* const pNode = pDoc->GetNodes()[i]->GetTextNode()) + { + CPPUNIT_ASSERT(pNode->getLayoutFrame(nullptr, nullptr, nullptr)); + } + } + for (auto i = nActions; 0 < i; --i) + { + rUndoManager.Undo(); + } + for (SwNodeOffset i(0); i < pDoc->GetNodes().Count(); ++i) + { + if (SwTextNode const* const pNode = pDoc->GetNodes()[i]->GetTextNode()) + { + CPPUNIT_ASSERT(pNode->getLayoutFrame(nullptr, nullptr, nullptr)); + } + } +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf74363) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + //testing autocorrect of initial capitals on start of first paragraph + //Inserting one all-lowercase word into the first paragraph + emulateTyping(*pXTextDocument, u"testing "); + //The word should be capitalized due to autocorrect + CPPUNIT_ASSERT_EQUAL(OUString("Testing "), getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf139922) +{ + createSwDoc(); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN); + Scheduler::ProcessEventsToIdle(); + + emulateTyping(*pTextDoc, u"this is a SEntence. this is a SEntence."); + + // Without the fix in place, this test would have failed with + // - Expected: This is a Sentence. This is a Sentence. + // - Actual : this is a Sentence. This is a Sentence. + CPPUNIT_ASSERT_EQUAL(OUString("This is a Sentence. This is a Sentence."), + getParagraph(2)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf143176) +{ + // Hungarian test document with right-to-left paragraph setting + createSwDoc(DATA_DIRECTORY, "tdf143176.fodt"); + + // transliterate the document to Old Hungarian (note: it only works + // with right-to-left text direction and Default Paragraph Style) + dispatchCommand(mxComponent, ".uno:AutoFormatApply", {}); + + // This was the original "Lorem ipsum..." + CPPUNIT_ASSERT_EQUAL(OUString(u"𐲖𐳛𐳢𐳉𐳘 𐳐𐳠𐳤𐳪𐳘 𐳇𐳛𐳖𐳛𐳢 " + u"𐳤𐳐𐳦 𐳀𐳘𐳉𐳦⹁"), + getParagraph(1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString(u"𐳄𐳛𐳙𐳤𐳉𐳄𐳦𐳉𐳦𐳪𐳢 " + u"𐳀𐳇𐳐𐳠𐳐𐳤𐳄𐳐𐳙𐳍 𐳉𐳖𐳐𐳦."), + getParagraph(2)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testInsertLongDateFormat) +{ + // only for Hungarian, yet + createSwDoc(DATA_DIRECTORY, "tdf133524.fodt"); + dispatchCommand(mxComponent, ".uno:InsertDateField", {}); + // Make sure that the document starts with a field now, and its expanded string value contains space + const uno::Reference xField = getRun(getParagraph(1), 1); + CPPUNIT_ASSERT_EQUAL(OUString("TextField"), getProperty(xField, "TextPortionType")); + // the date format was "YYYY-MM-DD", but now "YYYY. MMM DD." + CPPUNIT_ASSERT(xField->getString().indexOf(" ") > -1); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf129270) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf129270.odt"); + CPPUNIT_ASSERT(pDoc); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + + // Go to document end + pWrtShell->SttEndDoc(/*bStt=*/false); + + // Press enter + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN); + Scheduler::ProcessEventsToIdle(); + + // Numbering for previous outline should remain the same "2" + CPPUNIT_ASSERT_EQUAL(OUString("2"), getProperty(getParagraph(4), "ListLabelString")); + + // Numbering for newly created outline should be "2.1" + CPPUNIT_ASSERT_EQUAL(OUString("2.1"), + getProperty(getParagraph(5), "ListLabelString")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testInsertPdf) +{ + auto pPdfium = vcl::pdf::PDFiumLibrary::get(); + if (!pPdfium) + { + return; + } + + createSwDoc(); + + // insert the PDF into the document + uno::Sequence aArgs(comphelper::InitPropertySequence( + { { "FileName", + uno::Any(m_directories.getURLFromSrc(DATA_DIRECTORY) + "hello-world.pdf") } })); + dispatchCommand(mxComponent, ".uno:InsertGraphic", aArgs); + + // Save and load cycle + reload("writer8", "testInsertPdf.odt"); + + uno::Reference xShape = getShape(1); + // Assert that we have a replacement graphics + auto xReplacementGraphic + = getProperty>(xShape, "ReplacementGraphic"); + CPPUNIT_ASSERT(xReplacementGraphic.is()); + + auto xGraphic = getProperty>(xShape, "Graphic"); + CPPUNIT_ASSERT(xGraphic.is()); + // Assert that the graphic is a PDF + CPPUNIT_ASSERT_EQUAL(OUString("application/pdf"), getProperty(xGraphic, "MimeType")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf143760WrapContourToOff) +{ + // Actually, this is an ooxmlexport test. It is here because here is a ready environment + // to change a shape by dispatchCommand. + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf143760_ContourToWrapOff.docx"); + CPPUNIT_ASSERT(pDoc); + CPPUNIT_ASSERT_EQUAL(true, getProperty(getShape(1), "SurroundContour")); + + // Mark the object + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0); + SdrObject* pObject = pPage->GetObj(0); + CPPUNIT_ASSERT(pObject); + SdrView* pView = pWrtShell->GetDrawView(); + pView->MarkObj(pObject, pView->GetSdrPageView()); + + // Set "wrap off" + dispatchCommand(mxComponent, ".uno:WrapOff", {}); + CPPUNIT_ASSERT_EQUAL(false, getProperty(getShape(1), "SurroundContour")); + + // Without fix this had failed, because the shape was written to file with contour. + reload("Office Open XML Text", "tdf143760_ContourToWrapOff.docx"); + CPPUNIT_ASSERT_EQUAL(false, getProperty(getShape(1), "SurroundContour")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testHatchFill) +{ + createSwDoc(); + + // Add a rectangle shape to the document. + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xShape( + xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setSize(awt::Size(10000, 10000)); + xShape->setPosition(awt::Point(1000, 1000)); + uno::Reference xShapeProps(xShape, uno::UNO_QUERY); + xShapeProps->setPropertyValue("FillStyle", uno::Any(drawing::FillStyle_HATCH)); + xShapeProps->setPropertyValue("FillHatchName", uno::Any(OUString("Black 0 Degrees"))); + xShapeProps->setPropertyValue("FillBackground", uno::Any(false)); + xShapeProps->setPropertyValue("FillTransparence", uno::Any(sal_Int32(30))); + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); + xDrawPage->add(xShape); + + // Save it as DOCX and load it again. + reload("Office Open XML Text", "hatchFill.docx"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + + // tdf#127989 Without fix this had failed, because the background of the hatch was not set as 'no background'. + CPPUNIT_ASSERT(!getProperty(getShape(1), "FillBackground")); + + // tdf#146822 Without fix this had failed, because the transparency value of the hatch was not exported. + CPPUNIT_ASSERT_EQUAL(sal_Int32(30), getProperty(getShape(1), "FillTransparence")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testNestedGroupTextBoxCopyCrash) +{ + createSwDoc(DATA_DIRECTORY, "tdf149550.docx"); + + dispatchCommand(mxComponent, ".uno:SelectAll", {}); + Scheduler::ProcessEventsToIdle(); + dispatchCommand(mxComponent, ".uno:Copy", {}); + Scheduler::ProcessEventsToIdle(); + // This crashed here before the fix. + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_ESCAPE); + Scheduler::ProcessEventsToIdle(); + dispatchCommand(mxComponent, ".uno:Paste", {}); + Scheduler::ProcessEventsToIdle(); + + CPPUNIT_ASSERT_MESSAGE("Where is the doc, it crashed, isn't it?!", mxComponent); + + auto pLayout = parseLayoutDump(); + // There must be 2 textboxes! + assertXPath(pLayout, "/root/page/body/txt/anchored/fly[2]"); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testCrashOnExit) +{ + // Load the bugdoc with a table and a textbox shape inside. + CPPUNIT_ASSERT(createSwDoc(DATA_DIRECTORY, "tdf142715.odt")); + + // Get the textbox selected + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + auto xShape = getShape(1); + CPPUNIT_ASSERT(xShape); + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(xModel); + uno::Reference xController = xModel->getCurrentController(); + CPPUNIT_ASSERT(xController); + uno::Reference xSelection(xController, uno::UNO_QUERY); + CPPUNIT_ASSERT(xSelection); + CPPUNIT_ASSERT(xSelection->select(uno::Any(xShape))); + CPPUNIT_ASSERT(xSelection->getSelection().hasValue()); + uno::Reference xProperties(xShape, uno::UNO_QUERY); + + // Check if the textbox is selected + CPPUNIT_ASSERT_EQUAL(true, xProperties->getPropertyValue("TextBox").get()); + + // Remove the textbox + dispatchCommand(mxComponent, ".uno:RemoveTextBox", {}); + Scheduler::ProcessEventsToIdle(); + + CPPUNIT_ASSERT_EQUAL(false, xProperties->getPropertyValue("TextBox").get()); + + // Readd the textbox (to run the textboxhelper::create() method) + dispatchCommand(mxComponent, ".uno:AddTextBox", {}); + Scheduler::ProcessEventsToIdle(); + + CPPUNIT_ASSERT_EQUAL(true, xProperties->getPropertyValue("TextBox").get()); + + // save and reload + reload("writer8", "tdf142715_.odt"); + + // Before the fix this crashed here and could not reopen. + CPPUNIT_ASSERT_MESSAGE("Crash on exit, isn't it?", mxComponent); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testCaptionShape) +{ + createSwDoc(); + + // Add a caption shape to the document. + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xShape( + xFactory->createInstance("com.sun.star.drawing.CaptionShape"), uno::UNO_QUERY); + xShape->setSize(awt::Size(10000, 10000)); + xShape->setPosition(awt::Point(1000, 1000)); + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); + xDrawPage->add(xShape); + + // Save it as DOCX and load it again. + reload("Office Open XML Text", "captionshape.docx"); + + // Without fix in place, the shape was lost on export. + CPPUNIT_ASSERT_EQUAL(1, getShapes()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf148799) +{ + // load a document with table formulas with comma delimiter, + // but with a document language with default point delimiter + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf148799.docx"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + // check formula update + // put cursor in the first table row + pWrtShell->Down(/*bSelect=*/false, /*nCount=*/1); + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), xTextTable->getRows()->getCount()); + // These were "** Expression is faulty **" + uno::Reference xCellA1(xTextTable->getCellByName("D3"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2.3"), xCellA1->getString()); + uno::Reference xCellA3(xTextTable->getCellByName("D4"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2345"), xCellA3->getString()); + uno::Reference xCellA4(xTextTable->getCellByName("D5"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("23684.5"), xCellA4->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf151993) +{ + // load a document with table formulas with comma delimiter + // (with a document language with default comma delimiter) + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf151993.docx"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + // check formula update + + // put cursor in the first table row + pWrtShell->Down(/*bSelect=*/false, /*nCount=*/1); + + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), + uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + + uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getRows()->getCount()); + + // This was 0 + uno::Reference xCellA1(xTextTable->getCellByName("A2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("30"), xCellA1->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf151462) +{ + createSwDoc(DATA_DIRECTORY, "tdf151462.odt"); + // xmlDocUniquePtr pLayout = parseLayoutDump(); + dispatchCommand(mxComponent, ".uno:UpdateAllIndexes", {}); + Scheduler::ProcessEventsToIdle(); + xmlDocUniquePtr pLayout = parseLayoutDump(); + // tdf#151462 - without the fix in place, there would be just the first index entry + assertXPath(pLayout, + "/root/page[1]/body/txt[2]/anchored/fly/section/txt[1]/SwParaPortion/" + "SwLineLayout[1]/SwLinePortion[1]", + "portion", "sub one"); + assertXPath(pLayout, + "/root/page[1]/body/txt[2]/anchored/fly/section/txt[2]/SwParaPortion/" + "SwLineLayout[1]/SwLinePortion[1]", + "portion", "sub two"); + assertXPath(pLayout, + "/root/page[1]/body/txt[2]/anchored/fly/section/txt[3]/SwParaPortion/" + "SwLineLayout[1]/SwLinePortion[1]", + "portion", "sub three"); + // tdf#151462 - without the fix in place, there would be just the first index entry + assertXPath(pLayout, + "/root/page[1]/body/txt[6]/anchored/fly/section/txt[1]/SwParaPortion/" + "SwLineLayout[1]/SwLinePortion[1]", + "portion", "another sub one"); + assertXPath(pLayout, + "/root/page[1]/body/txt[6]/anchored/fly/section/txt[2]/SwParaPortion/" + "SwLineLayout[1]/SwLinePortion[1]", + "portion", "another sub two"); + assertXPath(pLayout, + "/root/page[1]/body/txt[6]/anchored/fly/section/txt[3]/SwParaPortion/" + "SwLineLayout[1]/SwLinePortion[1]", + "portion", "another sub three"); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/uiwriter/uiwriter7.cxx b/sw/qa/extras/uiwriter/uiwriter7.cxx new file mode 100644 index 000000000..833a35f97 --- /dev/null +++ b/sw/qa/extras/uiwriter/uiwriter7.cxx @@ -0,0 +1,2818 @@ +/* -*- 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace +{ +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/uiwriter/data/"; + +int CountFilesInDirectory(const OUString& rURL) +{ + int nRet = 0; + + osl::Directory aDir(rURL); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, aDir.open()); + + osl::DirectoryItem aItem; + osl::FileStatus aFileStatus(osl_FileStatus_Mask_FileURL | osl_FileStatus_Mask_Type); + while (aDir.getNextItem(aItem) == osl::FileBase::E_None) + { + aItem.getFileStatus(aFileStatus); + if (aFileStatus.getFileType() != osl::FileStatus::Directory) + ++nRet; + } + + return nRet; +} + +} //namespace + +class SwUiWriterTest7 : public SwModelTestBase +{ +}; + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testExportToPicture) +{ + createSwDoc(); + uno::Sequence aFilterData( + comphelper::InitPropertySequence({ { "PixelWidth", uno::Any(sal_Int32(610)) }, + { "PixelHeight", uno::Any(sal_Int32(610)) } })); + uno::Sequence aDescriptor(comphelper::InitPropertySequence( + { { "FilterName", uno::Any(OUString("writer_png_Export")) }, + { "FilterData", uno::Any(aFilterData) } })); + utl::TempFile aTempFile; + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(aTempFile.GetURL(), aDescriptor); + bool extchk = aTempFile.IsValid(); + CPPUNIT_ASSERT_EQUAL(true, extchk); + osl::File tmpFile(aTempFile.GetURL()); + tmpFile.open(sal_uInt32(osl_File_OpenFlag_Read)); + sal_uInt64 val; + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, tmpFile.getSize(val)); + CPPUNIT_ASSERT(val > 100); + aTempFile.EnableKillingFile(); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf77340) +{ + createSwDoc(); + //Getting some paragraph style in our document + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xStyle( + xFactory->createInstance("com.sun.star.style.ParagraphStyle"), uno::UNO_QUERY); + uno::Reference xPropSet(xStyle, uno::UNO_QUERY_THROW); + xPropSet->setPropertyValue("ParaBackColor", uno::Any(sal_Int32(0xFF00FF))); + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xNameAccess(xSupplier->getStyleFamilies()); + uno::Reference xNameCont; + xNameAccess->getByName("ParagraphStyles") >>= xNameCont; + xNameCont->insertByName("myStyle", uno::Any(xStyle)); + CPPUNIT_ASSERT_EQUAL(OUString("myStyle"), xStyle->getName()); + //Setting the properties with proper values + xPropSet->setPropertyValue("PageDescName", uno::Any(OUString("First Page"))); + xPropSet->setPropertyValue("PageNumberOffset", uno::Any(sal_Int16(3))); + //Getting the properties and checking that they have proper values + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("First Page")), + xPropSet->getPropertyValue("PageDescName")); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int16(3)), xPropSet->getPropertyValue("PageNumberOffset")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf153819) +{ + // copy a table before a deleted table in Hide Changes mode + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf153819.fodt"); + CPPUNIT_ASSERT(pDoc); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + // hide changes + CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines()); + dispatchCommand(mxComponent, ".uno:SelectTable", {}); + dispatchCommand(mxComponent, ".uno:Copy", {}); + dispatchCommand(mxComponent, ".uno:GoDown", {}); + // Without the fix in place, this test would have crashed here + dispatchCommand(mxComponent, ".uno:Paste", {}); + // FIXME: Show Changes, otherwise ~SwTableNode() would have crashed + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf79236) +{ + SwDoc* pDoc = createSwDoc(); + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + //Getting some paragraph style + SwTextFormatColl* pTextFormat = pDoc->FindTextFormatCollByName(u"Text Body"); + const SwAttrSet& rAttrSet = pTextFormat->GetAttrSet(); + std::unique_ptr pNewSet = rAttrSet.Clone(); + sal_uInt16 initialCount = pNewSet->Count(); + SvxAdjustItem AdjustItem = rAttrSet.GetAdjust(); + SvxAdjust initialAdjust = AdjustItem.GetAdjust(); + //By default the adjust is LEFT + CPPUNIT_ASSERT_EQUAL(SvxAdjust::Left, initialAdjust); + //Changing the adjust to RIGHT + AdjustItem.SetAdjust(SvxAdjust::Right); + //Checking whether the change is made or not + SvxAdjust modifiedAdjust = AdjustItem.GetAdjust(); + CPPUNIT_ASSERT_EQUAL(SvxAdjust::Right, modifiedAdjust); + //Modifying the itemset, putting *one* item + pNewSet->Put(AdjustItem); + //The count should increment by 1 + sal_uInt16 modifiedCount = pNewSet->Count(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(initialCount + 1), modifiedCount); + //Setting the updated item set on the style + pDoc->ChgFormat(*pTextFormat, *pNewSet); + //Checking the Changes + SwTextFormatColl* pTextFormat2 = pDoc->FindTextFormatCollByName(u"Text Body"); + const SwAttrSet& rAttrSet2 = pTextFormat2->GetAttrSet(); + const SvxAdjustItem& rAdjustItem2 = rAttrSet2.GetAdjust(); + SvxAdjust Adjust2 = rAdjustItem2.GetAdjust(); + //The adjust should be RIGHT as per the modifications made + CPPUNIT_ASSERT_EQUAL(SvxAdjust::Right, Adjust2); + //Undo the changes + rUndoManager.Undo(); + SwTextFormatColl* pTextFormat3 = pDoc->FindTextFormatCollByName(u"Text Body"); + const SwAttrSet& rAttrSet3 = pTextFormat3->GetAttrSet(); + const SvxAdjustItem& rAdjustItem3 = rAttrSet3.GetAdjust(); + SvxAdjust Adjust3 = rAdjustItem3.GetAdjust(); + //The adjust should be back to default, LEFT + CPPUNIT_ASSERT_EQUAL(SvxAdjust::Left, Adjust3); + //Redo the changes + rUndoManager.Redo(); + SwTextFormatColl* pTextFormat4 = pDoc->FindTextFormatCollByName(u"Text Body"); + const SwAttrSet& rAttrSet4 = pTextFormat4->GetAttrSet(); + const SvxAdjustItem& rAdjustItem4 = rAttrSet4.GetAdjust(); + SvxAdjust Adjust4 = rAdjustItem4.GetAdjust(); + //The adjust should be RIGHT as per the modifications made + CPPUNIT_ASSERT_EQUAL(SvxAdjust::Right, Adjust4); + //Undo the changes + rUndoManager.Undo(); + SwTextFormatColl* pTextFormat5 = pDoc->FindTextFormatCollByName(u"Text Body"); + const SwAttrSet& rAttrSet5 = pTextFormat5->GetAttrSet(); + const SvxAdjustItem& rAdjustItem5 = rAttrSet5.GetAdjust(); + SvxAdjust Adjust5 = rAdjustItem5.GetAdjust(); + //The adjust should be back to default, LEFT + CPPUNIT_ASSERT_EQUAL(SvxAdjust::Left, Adjust5); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTextSearch) +{ + // Create a new empty Writer document + SwDoc* pDoc = createSwDoc(); + SwPaM* pCursor = pDoc->GetEditShell()->GetCursor(); + IDocumentContentOperations& rIDCO(pDoc->getIDocumentContentOperations()); + // Insert some text + rIDCO.InsertString(*pCursor, "Hello World This is a test"); + // Use cursor to select part of text + for (int i = 0; i < 10; i++) + { + pCursor->Move(fnMoveBackward); + } + pCursor->SetMark(); + for (int i = 0; i < 4; i++) + { + pCursor->Move(fnMoveBackward); + } + //Checking that the proper selection is made + CPPUNIT_ASSERT_EQUAL(OUString("This"), pCursor->GetText()); + // Apply a "Bold" attribute to selection + SvxWeightItem aWeightItem(WEIGHT_BOLD, RES_CHRATR_WEIGHT); + rIDCO.InsertPoolItem(*pCursor, aWeightItem); + //making another selection of text + for (int i = 0; i < 7; i++) + { + pCursor->Move(fnMoveBackward); + } + pCursor->SetMark(); + for (int i = 0; i < 5; i++) + { + pCursor->Move(fnMoveBackward); + } + //Checking that the proper selection is made + CPPUNIT_ASSERT_EQUAL(OUString("Hello"), pCursor->GetText()); + // Apply a "Bold" attribute to selection + rIDCO.InsertPoolItem(*pCursor, aWeightItem); + //Performing Search Operation and also covering the UNO coverage for setProperty + uno::Reference xSearch(mxComponent, uno::UNO_QUERY); + uno::Reference xSearchDes = xSearch->createSearchDescriptor(); + uno::Reference xProp(xSearchDes, uno::UNO_QUERY); + //setting some properties + uno::Sequence aDescriptor(comphelper::InitPropertySequence( + { { "CharWeight", uno::Any(float(css::awt::FontWeight::BOLD)) } })); + xProp->setSearchAttributes(aDescriptor); + //receiving the defined properties and asserting them with expected values, covering UNO + uno::Sequence aPropVal2(xProp->getSearchAttributes()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aPropVal2.getLength()); + CPPUNIT_ASSERT_EQUAL(OUString("CharWeight"), aPropVal2[0].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(float(css::awt::FontWeight::BOLD)), aPropVal2[0].Value); + //specifying the search attributes + uno::Reference xPropSet(xSearchDes, uno::UNO_QUERY_THROW); + xPropSet->setPropertyValue("SearchWords", uno::Any(true)); + xPropSet->setPropertyValue("SearchCaseSensitive", uno::Any(true)); + //this will search all the BOLD words + uno::Reference xIndex(xSearch->findAll(xSearchDes)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndex->getCount()); + //Replacing the searched string via XReplaceable + uno::Reference xReplace(mxComponent, uno::UNO_QUERY); + uno::Reference xReplaceDes = xReplace->createReplaceDescriptor(); + uno::Reference xProp2(xReplaceDes, uno::UNO_QUERY); + xProp2->setReplaceAttributes(aDescriptor); + //checking that the proper attributes are there or not + uno::Sequence aRepProp(xProp2->getReplaceAttributes()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aRepProp.getLength()); + CPPUNIT_ASSERT_EQUAL(OUString("CharWeight"), aRepProp[0].Name); + CPPUNIT_ASSERT_EQUAL(uno::Any(float(css::awt::FontWeight::BOLD)), aRepProp[0].Value); + //setting strings for replacement + xReplaceDes->setSearchString("test"); + xReplaceDes->setReplaceString("task"); + //checking the replaceString + CPPUNIT_ASSERT_EQUAL(OUString("task"), xReplaceDes->getReplaceString()); + //this will replace *normal*test to *bold*task + sal_Int32 ReplaceCount = xReplace->replaceAll(xReplaceDes); + //There should be only 1 replacement since there is only one occurrence of "test" in the document + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), ReplaceCount); + //Now performing search again for BOLD words, count should be 3 due to replacement + uno::Reference xIndex2(xReplace->findAll(xSearchDes)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xIndex2->getCount()); + // regex tests + xSearchDes->setPropertyValue("SearchRegularExpression", uno::Any(true)); + // regex: test correct matching combined with attributes like BOLD + xSearchDes->setSearchString(".*"); // should match all bold words in the text + xIndex.set(xReplace->findAll(xSearchDes), uno::UNO_SET_THROW); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xIndex->getCount()); + uno::Reference xFound(xIndex->getByIndex(0), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("Hello"), xFound->getString()); + xFound.set(xIndex->getByIndex(1), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("This"), xFound->getString()); + xFound.set(xIndex->getByIndex(2), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("task"), xFound->getString()); + // regex: test anchor combined with attributes like BOLD + xSearchDes->setSearchString("^.*|.*$"); // should match first and last words (they are bold) + xIndex.set(xReplace->findAll(xSearchDes), uno::UNO_SET_THROW); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndex->getCount()); + xFound.set(xIndex->getByIndex(0), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("Hello"), xFound->getString()); + xFound.set(xIndex->getByIndex(1), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("task"), xFound->getString()); + // regex: test look-ahead/look-behind assertions outside of the bold text + xSearchDes->setSearchString("(?<= ).*(?= )"); // should match second bold word + xIndex.set(xReplace->findAll(xSearchDes), uno::UNO_SET_THROW); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndex->getCount()); + xFound.set(xIndex->getByIndex(0), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("This"), xFound->getString()); + xReplaceDes->setPropertyValue("SearchRegularExpression", uno::Any(true)); + // regex: test correct match of paragraph start + xReplaceDes->setSearchString("^."); // should only match first character of the paragraph + xReplaceDes->setReplaceString("C"); + ReplaceCount = xReplace->replaceAll(xReplaceDes); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), ReplaceCount); + // regex: test correct match of word start + xReplaceDes->setSearchString("\\b\\w"); // should match all words' first characters + xReplaceDes->setReplaceString("x&"); + ReplaceCount = xReplace->replaceAll(xReplaceDes); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), ReplaceCount); + // regex: test negative look-behind assertion + xReplaceDes->setSearchString("(?setReplaceString("y"); + ReplaceCount = xReplace->replaceAll(xReplaceDes); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), ReplaceCount); + // regex: test positive look-behind assertion + xReplaceDes->setSearchString("(?<=xCelly xWorld xTh)i"); // only "i" in "xThis", not in "xis" + xReplaceDes->setReplaceString("z"); + ReplaceCount = xReplace->replaceAll(xReplaceDes); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), ReplaceCount); + // regex: use capturing group to test reference + xReplaceDes->setSearchString("\\b(\\w\\w\\w\\w)\\w"); + xReplaceDes->setReplaceString("$1q"); // only fifth characters in words should change + ReplaceCount = xReplace->replaceAll(xReplaceDes); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), ReplaceCount); + // check of the end result + CPPUNIT_ASSERT_EQUAL(OUString("xCelqy xWorqd xThzq xis xa xtasq"), + pCursor->GetNode().GetTextNode()->GetText()); + // regex: use positive look-ahead assertion + xReplaceDes->setSearchString("Wor(?=qd xThzq xis xa xtasq)"); + xReplaceDes->setReplaceString("&p"); // testing & reference + ReplaceCount = xReplace->replaceAll(xReplaceDes); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), ReplaceCount); + // regex: use negative look-ahead assertion + xReplaceDes->setSearchString("x(?!Worpqd xThzq xis xa xtasq)"); + xReplaceDes->setReplaceString("m"); + ReplaceCount = xReplace->replaceAll(xReplaceDes); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), ReplaceCount); // one of the 6 "x" must not be replaced + // check of the end result + CPPUNIT_ASSERT_EQUAL(OUString("mCelqy xWorpqd mThzq mis ma mtasq"), + pCursor->GetNode().GetTextNode()->GetText()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf69282) +{ + SwDoc* source = createSwDoc(); + uno::Reference xSourceDoc = mxComponent; + mxComponent.clear(); + SwDoc* target = createSwDoc(); + SwPageDesc* sPageDesc = source->MakePageDesc("SourceStyle"); + SwPageDesc* tPageDesc = target->MakePageDesc("TargetStyle"); + sPageDesc->ChgFirstShare(false); + CPPUNIT_ASSERT(!sPageDesc->IsFirstShared()); + SwFrameFormat& rSourceMasterFormat = sPageDesc->GetMaster(); + //Setting horizontal spaces on master + SvxLRSpaceItem horizontalSpace(RES_LR_SPACE); + horizontalSpace.SetLeft(11); + horizontalSpace.SetRight(12); + rSourceMasterFormat.SetFormatAttr(horizontalSpace); + //Setting vertical spaces on master + SvxULSpaceItem verticalSpace(RES_UL_SPACE); + verticalSpace.SetUpper(13); + verticalSpace.SetLower(14); + rSourceMasterFormat.SetFormatAttr(verticalSpace); + //Changing the style and copying it to target + source->ChgPageDesc("SourceStyle", *sPageDesc); + target->CopyPageDesc(*sPageDesc, *tPageDesc); + //Checking the set values on all Formats in target + SwFrameFormat& rTargetMasterFormat = tPageDesc->GetMaster(); + SwFrameFormat& rTargetLeftFormat = tPageDesc->GetLeft(); + SwFrameFormat& rTargetFirstMasterFormat = tPageDesc->GetFirstMaster(); + SwFrameFormat& rTargetFirstLeftFormat = tPageDesc->GetFirstLeft(); + //Checking horizontal spaces + const SvxLRSpaceItem MasterLRSpace = rTargetMasterFormat.GetLRSpace(); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetLeft(), MasterLRSpace.GetLeft()); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetRight(), MasterLRSpace.GetRight()); + const SvxLRSpaceItem LeftLRSpace = rTargetLeftFormat.GetLRSpace(); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetLeft(), LeftLRSpace.GetLeft()); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetRight(), LeftLRSpace.GetRight()); + const SvxLRSpaceItem FirstMasterLRSpace = rTargetFirstMasterFormat.GetLRSpace(); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetLeft(), FirstMasterLRSpace.GetLeft()); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetRight(), FirstMasterLRSpace.GetRight()); + const SvxLRSpaceItem FirstLeftLRSpace = rTargetFirstLeftFormat.GetLRSpace(); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetLeft(), FirstLeftLRSpace.GetLeft()); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetRight(), FirstLeftLRSpace.GetRight()); + //Checking vertical spaces + const SvxULSpaceItem MasterULSpace = rTargetMasterFormat.GetULSpace(); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetUpper(), MasterULSpace.GetUpper()); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetLower(), MasterULSpace.GetLower()); + const SvxULSpaceItem LeftULSpace = rTargetLeftFormat.GetULSpace(); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetUpper(), LeftULSpace.GetUpper()); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetLower(), LeftULSpace.GetLower()); + const SvxULSpaceItem FirstMasterULSpace = rTargetFirstMasterFormat.GetULSpace(); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetUpper(), FirstMasterULSpace.GetUpper()); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetLower(), FirstMasterULSpace.GetLower()); + const SvxULSpaceItem FirstLeftULSpace = rTargetFirstLeftFormat.GetULSpace(); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetUpper(), FirstLeftULSpace.GetUpper()); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetLower(), FirstLeftULSpace.GetLower()); + xSourceDoc->dispose(); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf69282WithMirror) +{ + SwDoc* source = createSwDoc(); + uno::Reference xSourceDoc = mxComponent; + mxComponent.clear(); + SwDoc* target = createSwDoc(); + SwPageDesc* sPageDesc = source->MakePageDesc("SourceStyle"); + SwPageDesc* tPageDesc = target->MakePageDesc("TargetStyle"); + //Enabling Mirror + sPageDesc->SetUseOn(UseOnPage::Mirror); + SwFrameFormat& rSourceMasterFormat = sPageDesc->GetMaster(); + //Setting horizontal spaces on master + SvxLRSpaceItem horizontalSpace(RES_LR_SPACE); + horizontalSpace.SetLeft(11); + horizontalSpace.SetRight(12); + rSourceMasterFormat.SetFormatAttr(horizontalSpace); + //Setting vertical spaces on master + SvxULSpaceItem verticalSpace(RES_UL_SPACE); + verticalSpace.SetUpper(13); + verticalSpace.SetLower(14); + rSourceMasterFormat.SetFormatAttr(verticalSpace); + //Changing the style and copying it to target + source->ChgPageDesc("SourceStyle", *sPageDesc); + target->CopyPageDesc(*sPageDesc, *tPageDesc); + //Checking the set values on all Formats in target + SwFrameFormat& rTargetMasterFormat = tPageDesc->GetMaster(); + SwFrameFormat& rTargetLeftFormat = tPageDesc->GetLeft(); + SwFrameFormat& rTargetFirstMasterFormat = tPageDesc->GetFirstMaster(); + SwFrameFormat& rTargetFirstLeftFormat = tPageDesc->GetFirstLeft(); + //Checking horizontal spaces + const SvxLRSpaceItem MasterLRSpace = rTargetMasterFormat.GetLRSpace(); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetLeft(), MasterLRSpace.GetLeft()); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetRight(), MasterLRSpace.GetRight()); + //mirror effect should be present + const SvxLRSpaceItem LeftLRSpace = rTargetLeftFormat.GetLRSpace(); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetRight(), LeftLRSpace.GetLeft()); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetLeft(), LeftLRSpace.GetRight()); + const SvxLRSpaceItem FirstMasterLRSpace = rTargetFirstMasterFormat.GetLRSpace(); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetLeft(), FirstMasterLRSpace.GetLeft()); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetRight(), FirstMasterLRSpace.GetRight()); + //mirror effect should be present + const SvxLRSpaceItem FirstLeftLRSpace = rTargetFirstLeftFormat.GetLRSpace(); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetRight(), FirstLeftLRSpace.GetLeft()); + CPPUNIT_ASSERT_EQUAL(horizontalSpace.GetLeft(), FirstLeftLRSpace.GetRight()); + //Checking vertical spaces + const SvxULSpaceItem MasterULSpace = rTargetMasterFormat.GetULSpace(); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetUpper(), MasterULSpace.GetUpper()); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetLower(), MasterULSpace.GetLower()); + const SvxULSpaceItem LeftULSpace = rTargetLeftFormat.GetULSpace(); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetUpper(), LeftULSpace.GetUpper()); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetLower(), LeftULSpace.GetLower()); + const SvxULSpaceItem FirstMasterULSpace = rTargetFirstMasterFormat.GetULSpace(); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetUpper(), FirstMasterULSpace.GetUpper()); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetLower(), FirstMasterULSpace.GetLower()); + const SvxULSpaceItem FirstLeftULSpace = rTargetFirstLeftFormat.GetULSpace(); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetUpper(), FirstLeftULSpace.GetUpper()); + CPPUNIT_ASSERT_EQUAL(verticalSpace.GetLower(), FirstLeftULSpace.GetLower()); + xSourceDoc->dispose(); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf78742) +{ + //testing with service type and any .ods file + OUString path = m_directories.getURLFromSrc(DATA_DIRECTORY) + "calc-data-source.ods"; + SfxMedium aMedium(path, StreamMode::READ | StreamMode::SHARE_DENYWRITE); + SfxFilterMatcher aMatcher("com.sun.star.text.TextDocument"); + std::shared_ptr pFilter; + ErrCode filter = aMatcher.DetectFilter(aMedium, pFilter); + CPPUNIT_ASSERT_EQUAL(ERRCODE_IO_ABORT, filter); + //it should not return any Filter + CPPUNIT_ASSERT(!pFilter); + //testing without service type and any .ods file + SfxMedium aMedium2(path, StreamMode::READ | StreamMode::SHARE_DENYWRITE); + SfxFilterMatcher aMatcher2; + std::shared_ptr pFilter2; + ErrCode filter2 = aMatcher2.DetectFilter(aMedium2, pFilter2); + CPPUNIT_ASSERT_EQUAL(ERRCODE_NONE, filter2); + //Filter should be returned with proper Name + CPPUNIT_ASSERT_EQUAL(OUString("calc8"), pFilter2->GetFilterName()); + //testing with service type and any .odt file + OUString path2 = m_directories.getURLFromSrc(DATA_DIRECTORY) + "fdo69893.odt"; + SfxMedium aMedium3(path2, StreamMode::READ | StreamMode::SHARE_DENYWRITE); + SfxFilterMatcher aMatcher3("com.sun.star.text.TextDocument"); + std::shared_ptr pFilter3; + ErrCode filter3 = aMatcher3.DetectFilter(aMedium3, pFilter3); + CPPUNIT_ASSERT_EQUAL(ERRCODE_NONE, filter3); + //Filter should be returned with proper Name + CPPUNIT_ASSERT_EQUAL(OUString("writer8"), pFilter3->GetFilterName()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testUnoParagraph) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + //Inserting some text content in the document + pWrtShell->Insert("This is initial text in paragraph one"); + pWrtShell->SplitNode(); + //Inserting second paragraph + pWrtShell->Insert("This is initial text in paragraph two"); + //now testing the SwXParagraph + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText(xTextDocument->getText()); + uno::Reference xParaAccess(xText, uno::UNO_QUERY); + uno::Reference xPara(xParaAccess->createEnumeration()); + //getting first paragraph + uno::Reference xFirstParaContent(xPara->nextElement(), uno::UNO_QUERY); + uno::Reference xFirstPara(xFirstParaContent, uno::UNO_QUERY); + //testing the initial text + CPPUNIT_ASSERT_EQUAL(OUString("This is initial text in paragraph one"), + xFirstPara->getString()); + //changing the text content in first paragraph + xFirstPara->setString("This is modified text in paragraph one"); + //testing the changes + CPPUNIT_ASSERT_EQUAL(OUString("This is modified text in paragraph one"), + xFirstPara->getString()); + //getting second paragraph + uno::Reference xSecondParaContent(xPara->nextElement(), uno::UNO_QUERY); + uno::Reference xSecondPara(xSecondParaContent, uno::UNO_QUERY); + //testing the initial text + CPPUNIT_ASSERT_EQUAL(OUString("This is initial text in paragraph two"), + xSecondPara->getString()); + //changing the text content in second paragraph + xSecondPara->setString("This is modified text in paragraph two"); + //testing the changes + CPPUNIT_ASSERT_EQUAL(OUString("This is modified text in paragraph two"), + xSecondPara->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf72788) +{ + //Create a new empty Writer document + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwPaM* pCursor = pDoc->GetEditShell()->GetCursor(); + IDocumentContentOperations& rIDCO(pDoc->getIDocumentContentOperations()); + //Insert some text - two paragraphs + rIDCO.InsertString(*pCursor, "this is text"); + //Position of word 9876543210 + //Position of word 0123456789 + //Change Paragraph + pWrtShell->SplitNode(); + //Insert second paragraph + rIDCO.InsertString(*pCursor, "more text"); + //Position of word 012345678 + //Make the following selection *bold* + //this[is text + //more] text + //Move cursor back + for (int i = 0; i < 5; i++) + { + pCursor->Move(fnMoveBackward); + } + //Start selection + pCursor->SetMark(); + for (int i = 0; i < 12; i++) + { + pCursor->Move(fnMoveBackward); + } + //Check the text selection + CPPUNIT_ASSERT_EQUAL(OUString(u"is text" + OUStringChar(CH_TXTATR_NEWLINE) + u"more"), + pCursor->GetText()); + //Apply a *Bold* attribute to selection + SvxWeightItem aWeightItem(WEIGHT_BOLD, RES_CHRATR_WEIGHT); + rIDCO.InsertPoolItem(*pCursor, aWeightItem); + SfxItemSet aSet(pDoc->GetAttrPool(), svl::Items); + //Add selected text's attributes to aSet + pCursor->GetNode().GetTextNode()->GetParaAttr(aSet, 5, 12); + SfxPoolItem const* pPoolItem = aSet.GetItem(RES_CHRATR_WEIGHT); + //Check that bold is active on the selection and it's in aSet + CPPUNIT_ASSERT_EQUAL(true, (*pPoolItem == aWeightItem)); + //Make selection to remove formatting in first paragraph + //[this is text + //]more text + pWrtShell->StartOfSection(); + //Start selection + pCursor->SetMark(); + for (int i = 0; i < 13; i++) + { + pCursor->Move(fnMoveForward); + } + //Clear all the Direct Formatting ( Ctrl + M ) + SwTextNode* pTextNode = pCursor->GetNode().GetTextNode(); + SwIndex aSt(pTextNode, 0); + sal_Int32 nEnd = pTextNode->Len(); + pTextNode->RstTextAttr(aSt, nEnd - aSt.GetIndex()); + //In case of Regression RstTextAttr() call will result to infinite recursion + //Check that bold is removed in first paragraph + aSet.ClearItem(); + pTextNode->GetParaAttr(aSet, 5, 12); + SfxPoolItem const* pPoolItem2 = aSet.GetItem(RES_CHRATR_WEIGHT); + CPPUNIT_ASSERT_EQUAL(true, (*pPoolItem2 != aWeightItem)); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf60967) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwPaM* pCursor = pDoc->GetEditShell()->GetCursor(); + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + pWrtShell->ChangeHeaderOrFooter(u"Default Page Style", true, true, true); + //Inserting table + SwInsertTableOptions TableOpt(SwInsertTableFlags::DefaultBorder, 0); + pWrtShell->InsertTable(TableOpt, 2, 2); + //getting the cursor's position just after the table insert + SwPosition aPosAfterTable(*(pCursor->GetPoint())); + //moving cursor to B2 (bottom right cell) + pCursor->Move(fnMoveBackward); + SwPosition aPosInTable(*(pCursor->GetPoint())); + //deleting paragraph following table with Ctrl+Shift+Del + bool val = pWrtShell->DelToEndOfSentence(); + CPPUNIT_ASSERT_EQUAL(true, val); + //getting the cursor's position just after the paragraph deletion + SwPosition aPosAfterDel(*(pCursor->GetPoint())); + //moving cursor forward to check whether there is any node following the table, BTW there should not be any such node + pCursor->Move(fnMoveForward); + SwPosition aPosMoveAfterDel(*(pCursor->GetPoint())); + //checking the positions to verify that the paragraph is actually deleted + CPPUNIT_ASSERT_EQUAL(aPosAfterDel, aPosInTable); + CPPUNIT_ASSERT_EQUAL(aPosMoveAfterDel, aPosInTable); + //Undo the changes + rUndoManager.Undo(); + { + //paragraph *text node* should be back + SwPosition aPosAfterUndo(*(pCursor->GetPoint())); + //after undo aPosAfterTable increases the node position by one, since this contains the position *text node* so aPosAfterUndo should be less than aPosAfterTable + CPPUNIT_ASSERT(aPosAfterTable > aPosAfterUndo); + //moving cursor forward to check whether there is any node following the paragraph, BTW there should not be any such node as paragraph node is the last one in header + pCursor->Move(fnMoveForward); + SwPosition aPosMoveAfterUndo(*(pCursor->GetPoint())); + //checking positions to verify that paragraph node is the last one and we are paragraph node only + CPPUNIT_ASSERT(aPosAfterTable > aPosMoveAfterUndo); + CPPUNIT_ASSERT_EQUAL(aPosAfterUndo, aPosMoveAfterUndo); + } + //Redo the changes + rUndoManager.Redo(); + //paragraph *text node* should not be there + SwPosition aPosAfterRedo(*(pCursor->GetPoint())); + //position should be exactly same as it was after deletion of *text node* + CPPUNIT_ASSERT_EQUAL(aPosAfterRedo, aPosMoveAfterDel); + //moving the cursor forward, but it should not actually move as there is no *text node* after the table due to this same position is expected after move as it was before move + pCursor->Move(fnMoveForward); + SwPosition aPosAfterUndoMove(*(pCursor->GetPoint())); + CPPUNIT_ASSERT_EQUAL(aPosAfterRedo, aPosAfterUndoMove); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testSearchWithTransliterate) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + { + SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1); + SwPaM aPaM(aIdx); + pDoc->getIDocumentContentOperations().InsertString(aPaM, "This is paragraph one"); + pWrtShell->SplitNode(); + } + { + SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1); + SwPaM aPaM(aIdx); + pDoc->getIDocumentContentOperations().InsertString(aPaM, "This is Other PARAGRAPH"); + } + i18nutil::SearchOptions2 SearchOpt; + SearchOpt.algorithmType = css::util::SearchAlgorithms_ABSOLUTE; + SearchOpt.searchFlag = css::util::SearchFlags::ALL_IGNORE_CASE; + SearchOpt.searchString = "other"; + SearchOpt.replaceString.clear(); + SearchOpt.changedChars = 0; + SearchOpt.deletedChars = 0; + SearchOpt.insertedChars = 0; + SearchOpt.transliterateFlags = TransliterationFlags::IGNORE_DIACRITICS_CTL; + SearchOpt.AlgorithmType2 = css::util::SearchAlgorithms2::ABSOLUTE; + SearchOpt.WildcardEscapeCharacter = 0; + //transliteration option set so that at least one of the search strings is not found + sal_uLong case1 + = pWrtShell->SearchPattern(SearchOpt, true, SwDocPositions::Start, SwDocPositions::End); + SwShellCursor* pShellCursor = pWrtShell->getShellCursor(true); + CPPUNIT_ASSERT_EQUAL(OUString(), pShellCursor->GetText()); + CPPUNIT_ASSERT_EQUAL(0, static_cast(case1)); + SearchOpt.searchString = "paragraph"; + SearchOpt.transliterateFlags = TransliterationFlags::IGNORE_KASHIDA_CTL; + //transliteration option set so that all search strings are found + sal_uLong case2 + = pWrtShell->SearchPattern(SearchOpt, true, SwDocPositions::Start, SwDocPositions::End); + pShellCursor = pWrtShell->getShellCursor(true); + CPPUNIT_ASSERT_EQUAL(OUString("paragraph"), pShellCursor->GetText()); + CPPUNIT_ASSERT_EQUAL(1, static_cast(case2)); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf73660) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + OUString aData1 = "First" + OUStringChar(CHAR_SOFTHYPHEN) + "Word"; + OUString aData2 = "Seco" + OUStringChar(CHAR_SOFTHYPHEN) + "nd"; + OUString aData3 = OUStringChar(CHAR_SOFTHYPHEN) + "Third"; + OUString aData4 = "Fourth" + OUStringChar(CHAR_SOFTHYPHEN); + pWrtShell->Insert("We are inserting some text in the document to check the search feature "); + pWrtShell->Insert(aData1 + " "); + pWrtShell->Insert(aData2 + " "); + pWrtShell->Insert(aData3 + " "); + pWrtShell->Insert(aData4 + " "); + pWrtShell->Insert("Fifth "); + pWrtShell->Insert("Now we have enough text let's test search for all the cases"); + //searching for all 5 strings entered with soft-hyphen, search string contains no soft-hyphen + i18nutil::SearchOptions2 searchOpt; + searchOpt.algorithmType = css::util::SearchAlgorithms_REGEXP; + searchOpt.searchFlag = css::util::SearchFlags::NORM_WORD_ONLY; + //case 1 + searchOpt.searchString = "First"; + CPPUNIT_ASSERT_EQUAL( + sal_uLong(1), + pWrtShell->SearchPattern(searchOpt, true, SwDocPositions::Start, SwDocPositions::End)); + //case 2 + searchOpt.searchString = "Second"; + CPPUNIT_ASSERT_EQUAL( + sal_uLong(1), + pWrtShell->SearchPattern(searchOpt, true, SwDocPositions::Start, SwDocPositions::End)); + //case 3 + searchOpt.searchString = "Third"; + CPPUNIT_ASSERT_EQUAL( + sal_uLong(1), + pWrtShell->SearchPattern(searchOpt, true, SwDocPositions::Start, SwDocPositions::End)); + //case 4 + searchOpt.searchString = "Fourth"; + CPPUNIT_ASSERT_EQUAL( + sal_uLong(1), + pWrtShell->SearchPattern(searchOpt, true, SwDocPositions::Start, SwDocPositions::End)); + //case 5 + searchOpt.searchString = "Fifth"; + CPPUNIT_ASSERT_EQUAL( + sal_uLong(1), + pWrtShell->SearchPattern(searchOpt, true, SwDocPositions::Start, SwDocPositions::End)); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testNewDocModifiedState) +{ + //creating a new doc + SwDoc* pDoc = new SwDoc(); + //getting the state of the document via IDocumentState + IDocumentState& rState(pDoc->getIDocumentState()); + //the state should not be modified, no modifications yet + CPPUNIT_ASSERT(!(rState.IsModified())); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf77342) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwPaM* pCursor = pDoc->GetEditShell()->GetCursor(); + //inserting first footnote + pWrtShell->InsertFootnote(""); + SwFieldType* pField = pWrtShell->GetFieldType(0, SwFieldIds::GetRef); + SwGetRefFieldType* pRefType = static_cast(pField); + //moving cursor to the starting of document + pWrtShell->StartOfSection(); + //inserting reference field 1 + SwGetRefField aField1(pRefType, "", "", REF_FOOTNOTE, sal_uInt16(0), REF_CONTENT); + pWrtShell->InsertField2(aField1); + //inserting second footnote + pWrtShell->InsertFootnote(""); + pWrtShell->StartOfSection(); + pCursor->Move(fnMoveForward); + //inserting reference field 2 + SwGetRefField aField2(pRefType, "", "", REF_FOOTNOTE, sal_uInt16(1), REF_CONTENT); + pWrtShell->InsertField2(aField2); + //inserting third footnote + pWrtShell->InsertFootnote(""); + pWrtShell->StartOfSection(); + pCursor->Move(fnMoveForward); + pCursor->Move(fnMoveForward); + //inserting reference field 3 + SwGetRefField aField3(pRefType, "", "", REF_FOOTNOTE, sal_uInt16(2), REF_CONTENT); + pWrtShell->InsertField2(aField3); + //updating the fields + IDocumentFieldsAccess& rField(pDoc->getIDocumentFieldsAccess()); + rField.UpdateExpFields(nullptr, true); + //creating new clipboard doc + rtl::Reference xClpDoc(new SwDoc()); + xClpDoc->SetClipBoard(true); + xClpDoc->getIDocumentFieldsAccess().LockExpFields(); + //selecting reference field 2 and reference field 3 and footnote 1 and footnote 2 + //selection is such that more than one and not all footnotes and ref fields are selected + pCursor->Move(fnMoveBackward); + pCursor->Move(fnMoveBackward); + //start marking + pCursor->SetMark(); + pCursor->Move(fnMoveForward); + pCursor->Move(fnMoveForward); + pCursor->Move(fnMoveForward); + //copying the selection to clipboard + pWrtShell->Copy(*xClpDoc); + //deleting selection mark after copy + pCursor->DeleteMark(); + //checking that the footnotes reference fields have same values after copy operation + uno::Any aAny; + sal_uInt16 aFormat; + //reference field 1 + pWrtShell->StartOfSection(); + SwField* pRef1 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pRef1->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pRef1->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(0)), aAny); + //reference field 2 + pCursor->Move(fnMoveForward); + SwField* pRef2 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pRef2->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pRef2->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(1)), aAny); + //reference field 3 + pCursor->Move(fnMoveForward); + SwField* pRef3 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pRef3->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pRef3->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(2)), aAny); + //moving cursor to the end of the document + pWrtShell->EndOfSection(); + //pasting the copied selection at current cursor position + pWrtShell->Paste(*xClpDoc); + //checking the fields, both new and old, for proper values + pWrtShell->StartOfSection(); + //old reference field 1 + SwField* pOldRef11 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef11->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef11->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(0)), aAny); + //old reference field 2 + pCursor->Move(fnMoveForward); + SwField* pOldRef12 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef12->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef12->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(1)), aAny); + //old reference field 3 + pCursor->Move(fnMoveForward); + SwField* pOldRef13 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef13->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef13->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(2)), aAny); + //old footnote 1 + pCursor->Move(fnMoveForward); + SwTextNode* pTextNd1 = pCursor->GetNode().GetTextNode(); + SwTextAttr* const pFootnote1 + = pTextNd1->GetTextAttrForCharAt(pCursor->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN); + const SwFormatFootnote& rFootnote1(pFootnote1->GetFootnote()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rFootnote1.GetNumber()); + SwTextFootnote* pTFNote1 = static_cast(pFootnote1); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), pTFNote1->GetSeqRefNo()); + //old footnote 2 + pCursor->Move(fnMoveForward); + SwTextNode* pTextNd2 = pCursor->GetNode().GetTextNode(); + SwTextAttr* const pFootnote2 + = pTextNd2->GetTextAttrForCharAt(pCursor->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN); + const SwFormatFootnote& rFootnote2(pFootnote2->GetFootnote()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), rFootnote2.GetNumber()); + SwTextFootnote* pTFNote2 = static_cast(pFootnote2); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), pTFNote2->GetSeqRefNo()); + //old footnote 3 + pCursor->Move(fnMoveForward); + SwTextNode* pTextNd3 = pCursor->GetNode().GetTextNode(); + SwTextAttr* const pFootnote3 + = pTextNd3->GetTextAttrForCharAt(pCursor->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN); + const SwFormatFootnote& rFootnote3(pFootnote3->GetFootnote()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(3), rFootnote3.GetNumber()); + SwTextFootnote* pTFNote3 = static_cast(pFootnote3); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pTFNote3->GetSeqRefNo()); + //new reference field 1 + pCursor->Move(fnMoveForward); + SwField* pNewRef11 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pNewRef11->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pNewRef11->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(1)), aAny); + //new reference field 2 + pCursor->Move(fnMoveForward); + SwField* pNewRef12 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pNewRef12->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pNewRef12->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(3)), aAny); + //new footnote 1 + pCursor->Move(fnMoveForward); + SwTextNode* pTextNd4 = pCursor->GetNode().GetTextNode(); + SwTextAttr* const pFootnote4 + = pTextNd4->GetTextAttrForCharAt(pCursor->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN); + const SwFormatFootnote& rFootnote4(pFootnote4->GetFootnote()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(4), rFootnote4.GetNumber()); + SwTextFootnote* pTFNote4 = static_cast(pFootnote4); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(3), pTFNote4->GetSeqRefNo()); + //moving the cursor to the starting of document + pWrtShell->StartOfSection(); + //pasting the selection again at current cursor position + pWrtShell->Paste(*xClpDoc); + //checking the fields, both new and old, for proper values + pWrtShell->StartOfSection(); + //new reference field 1 + SwField* pNewRef21 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pNewRef21->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pNewRef21->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(1)), aAny); + //new reference field 2 + pCursor->Move(fnMoveForward); + SwField* pNewRef22 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pNewRef22->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pNewRef22->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(4)), aAny); + //new footnote 1 + pCursor->Move(fnMoveForward); + SwTextNode* pTextNd11 = pCursor->GetNode().GetTextNode(); + SwTextAttr* const pFootnote11 + = pTextNd11->GetTextAttrForCharAt(pCursor->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN); + const SwFormatFootnote& rFootnote11(pFootnote11->GetFootnote()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rFootnote11.GetNumber()); + SwTextFootnote* pTFNote11 = static_cast(pFootnote11); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(4), pTFNote11->GetSeqRefNo()); + //old reference field 1 + pCursor->Move(fnMoveForward); + SwField* pOldRef21 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef21->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef21->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(0)), aAny); + //old reference field 2 + pCursor->Move(fnMoveForward); + SwField* pOldRef22 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef22->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef22->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(1)), aAny); + //old reference field 3 + pCursor->Move(fnMoveForward); + SwField* pOldRef23 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef23->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef23->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(2)), aAny); + //old footnote 1 + pCursor->Move(fnMoveForward); + SwTextNode* pTextNd12 = pCursor->GetNode().GetTextNode(); + SwTextAttr* const pFootnote12 + = pTextNd12->GetTextAttrForCharAt(pCursor->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN); + const SwFormatFootnote& rFootnote12(pFootnote12->GetFootnote()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), rFootnote12.GetNumber()); + SwTextFootnote* pTFNote12 = static_cast(pFootnote12); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), pTFNote12->GetSeqRefNo()); + //old footnote 2 + pCursor->Move(fnMoveForward); + SwTextNode* pTextNd13 = pCursor->GetNode().GetTextNode(); + SwTextAttr* const pFootnote13 + = pTextNd13->GetTextAttrForCharAt(pCursor->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN); + const SwFormatFootnote& rFootnote13(pFootnote13->GetFootnote()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(3), rFootnote13.GetNumber()); + SwTextFootnote* pTFNote13 = static_cast(pFootnote13); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), pTFNote13->GetSeqRefNo()); + //old footnote 3 + pCursor->Move(fnMoveForward); + SwTextNode* pTextNd14 = pCursor->GetNode().GetTextNode(); + SwTextAttr* const pFootnote14 + = pTextNd14->GetTextAttrForCharAt(pCursor->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN); + const SwFormatFootnote& rFootnote14(pFootnote14->GetFootnote()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(4), rFootnote14.GetNumber()); + SwTextFootnote* pTFNote14 = static_cast(pFootnote14); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pTFNote14->GetSeqRefNo()); + //old reference field 4 + pCursor->Move(fnMoveForward); + SwField* pOldRef24 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef24->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef24->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(1)), aAny); + //old reference field 5 + pCursor->Move(fnMoveForward); + SwField* pOldRef25 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef25->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef25->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(3)), aAny); + //old footnote 4 + pCursor->Move(fnMoveForward); + SwTextNode* pTextNd15 = pCursor->GetNode().GetTextNode(); + SwTextAttr* const pFootnote15 + = pTextNd15->GetTextAttrForCharAt(pCursor->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN); + const SwFormatFootnote& rFootnote15(pFootnote15->GetFootnote()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(5), rFootnote15.GetNumber()); + SwTextFootnote* pTFNote15 = static_cast(pFootnote15); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(3), pTFNote15->GetSeqRefNo()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf63553) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwPaM* pCursor = pDoc->GetEditShell()->GetCursor(); + //inserting sequence field 1 + SwSetExpFieldType* pSeqType = static_cast( + pWrtShell->GetFieldType(SwFieldIds::SetExp, "Illustration")); + SwSetExpField aSetField1(pSeqType, "", SVX_NUM_ARABIC); + pWrtShell->InsertField2(aSetField1); + SwGetRefFieldType* pRefType + = static_cast(pWrtShell->GetFieldType(0, SwFieldIds::GetRef)); + //moving cursor to the starting of document + pWrtShell->StartOfSection(); + //inserting reference field 1 + SwGetRefField aGetField1(pRefType, "Illustration", "", REF_SEQUENCEFLD, sal_uInt16(0), + REF_CONTENT); + pWrtShell->InsertField2(aGetField1); + //now we have ref1-seq1 + //moving the cursor + pCursor->Move(fnMoveForward); + //inserting sequence field 2 + SwSetExpField aSetField2(pSeqType, "", SVX_NUM_ARABIC); + pWrtShell->InsertField2(aSetField2); + //moving the cursor + pWrtShell->StartOfSection(); + pCursor->Move(fnMoveForward); + //inserting reference field 2 + SwGetRefField aGetField2(pRefType, "Illustration", "", REF_SEQUENCEFLD, sal_uInt16(1), + REF_CONTENT); + pWrtShell->InsertField2(aGetField2); + //now we have ref1-ref2-seq1-seq2 + //moving the cursor + pCursor->Move(fnMoveForward); + pCursor->Move(fnMoveForward); + //inserting sequence field 3 + SwSetExpField aSetField3(pSeqType, "", SVX_NUM_ARABIC); + pWrtShell->InsertField2(aSetField3); + pWrtShell->StartOfSection(); + pCursor->Move(fnMoveForward); + pCursor->Move(fnMoveForward); + //inserting reference field 3 + SwGetRefField aGetField3(pRefType, "Illustration", "", REF_SEQUENCEFLD, sal_uInt16(2), + REF_CONTENT); + pWrtShell->InsertField2(aGetField3); + //now after insertion we have ref1-ref2-ref3-seq1-seq2-seq3 + //updating the fields + IDocumentFieldsAccess& rField(pDoc->getIDocumentFieldsAccess()); + rField.UpdateExpFields(nullptr, true); + //creating new clipboard doc + rtl::Reference xClpDoc(new SwDoc()); + xClpDoc->SetClipBoard(true); + xClpDoc->getIDocumentFieldsAccess().LockExpFields(); + //selecting reference field 2 and 3 and sequence field 1 and 2 + //selection is such that more than one and not all sequence fields and reference fields are selected + //ref1-[ref2-ref3-seq1-seq2]-seq3 + pWrtShell->StartOfSection(); + pCursor->Move(fnMoveForward); + //start marking + pCursor->SetMark(); + pCursor->Move(fnMoveForward); + pCursor->Move(fnMoveForward); + pCursor->Move(fnMoveForward); + pCursor->Move(fnMoveForward); + //copying the selection to clipboard + pWrtShell->Copy(*xClpDoc); + //deleting selection mark after copy + pCursor->DeleteMark(); + //checking whether the sequence and reference fields have same values after copy operation + uno::Any aAny; + sal_uInt16 aFormat; + //reference field 1 + pWrtShell->StartOfSection(); + SwField* pRef1 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pRef1->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pRef1->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(0)), aAny); + //reference field 2 + pCursor->Move(fnMoveForward); + SwField* pRef2 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pRef2->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pRef2->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(1)), aAny); + //reference field 3 + pCursor->Move(fnMoveForward); + SwField* pRef3 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pRef3->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pRef3->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(2)), aAny); + //sequence field 1 + pCursor->Move(fnMoveForward); + SwSetExpField* pSeqF1 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pSeqF1->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pSeqF1->GetFieldName()); + //sequence field 2 + pCursor->Move(fnMoveForward); + SwSetExpField* pSeqF2 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), pSeqF2->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pSeqF2->GetFieldName()); + //sequence field 3 + pCursor->Move(fnMoveForward); + SwSetExpField* pSeqF3 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), pSeqF3->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pSeqF3->GetFieldName()); + //moving cursor to the end of the document + pWrtShell->EndOfSection(); + //pasting the copied selection at current cursor position + pWrtShell->Paste(*xClpDoc); + //checking the fields, both new and old, for proper values + pWrtShell->StartOfSection(); + //now we have ref1-ref2-ref3-seq1-seq2-seq3-nref1-nref2-nseq1-nseq2 + //old reference field 1 + SwField* pOldRef11 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef11->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef11->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(0)), aAny); + //old reference field 2 + pCursor->Move(fnMoveForward); + SwField* pOldRef12 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef12->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef12->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(1)), aAny); + //old reference field 3 + pCursor->Move(fnMoveForward); + SwField* pOldRef13 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef13->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef13->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(2)), aAny); + //old sequence field 1 + pCursor->Move(fnMoveForward); + SwSetExpField* pSeq1 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pSeq1->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pSeq1->GetFieldName()); + //old sequence field 2 + pCursor->Move(fnMoveForward); + SwSetExpField* pSeq2 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), pSeq2->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pSeq2->GetFieldName()); + //old sequence field 3 + pCursor->Move(fnMoveForward); + SwSetExpField* pSeq3 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), pSeq3->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pSeq3->GetFieldName()); + //new reference field 1 + pCursor->Move(fnMoveForward); + SwField* pNewRef11 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pNewRef11->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pNewRef11->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(4)), aAny); + //new reference field 2 + pCursor->Move(fnMoveForward); + SwField* pNewRef12 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pNewRef12->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pNewRef12->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(2)), aAny); + //new sequence field 1 + pCursor->Move(fnMoveForward); + SwSetExpField* pNewSeq1 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(3), pNewSeq1->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pNewSeq1->GetFieldName()); + //new sequence field 2 + pCursor->Move(fnMoveForward); + SwSetExpField* pNewSeq2 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(4), pNewSeq2->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pNewSeq2->GetFieldName()); + //moving the cursor to the starting of document + pWrtShell->StartOfSection(); + //pasting the selection again at current cursor position + pWrtShell->Paste(*xClpDoc); + //checking the fields, both new and old, for proper values + pWrtShell->StartOfSection(); + //now we have [nnref1-nnref2-nnseq1-nnseq2]-ref1-[ref2-ref3-seq1-seq2]-seq3-[nref1-nref2-nseq1-nseq2] + //new reference field 1 + SwField* pNewRef21 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pNewRef21->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pNewRef21->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(6)), aAny); + //new reference field 2 + pCursor->Move(fnMoveForward); + SwField* pNewRef22 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pNewRef22->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pNewRef22->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(2)), aAny); + //new sequence field 1 + pCursor->Move(fnMoveForward); + SwSetExpField* pNewSeq11 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(5), pNewSeq11->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pNewSeq11->GetFieldName()); + //new sequence field 2 + pCursor->Move(fnMoveForward); + SwSetExpField* pNewSeq12 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(6), pNewSeq12->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pNewSeq12->GetFieldName()); + //old reference field 1 + pCursor->Move(fnMoveForward); + SwField* pOldRef21 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef21->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef21->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(0)), aAny); + //old reference field 2 + pCursor->Move(fnMoveForward); + SwField* pOldRef22 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef22->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef22->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(1)), aAny); + //old reference field 3 + pCursor->Move(fnMoveForward); + SwField* pOldRef23 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef23->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef23->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(2)), aAny); + //old sequence field 1 + pCursor->Move(fnMoveForward); + SwSetExpField* pOldSeq11 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pOldSeq11->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pOldSeq11->GetFieldName()); + //old sequence field 2 + pCursor->Move(fnMoveForward); + SwSetExpField* pOldSeq12 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), pOldSeq12->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pOldSeq12->GetFieldName()); + //old sequence field 3 + pCursor->Move(fnMoveForward); + SwSetExpField* pOldSeq13 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), pOldSeq13->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pOldSeq13->GetFieldName()); + //old reference field 4 + pCursor->Move(fnMoveForward); + SwField* pOldRef24 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef24->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef24->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(4)), aAny); + //old reference field 5 + pCursor->Move(fnMoveForward); + SwField* pOldRef25 = SwCursorShell::GetFieldAtCursor(pCursor, true); + aFormat = pOldRef25->GetFormat(); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(REF_CONTENT), aFormat); + pOldRef25->QueryValue(aAny, sal_uInt16(FIELD_PROP_SHORT1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_uInt16(2)), aAny); + //old sequence field 4 + pCursor->Move(fnMoveForward); + SwSetExpField* pOldSeq14 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(3), pOldSeq14->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pOldSeq14->GetFieldName()); + //old sequence field 5 + pCursor->Move(fnMoveForward); + SwSetExpField* pOldSeq15 + = static_cast(SwCursorShell::GetFieldAtCursor(pCursor, true)); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(4), pOldSeq15->GetSeqNumber()); + CPPUNIT_ASSERT_EQUAL(OUString("Number range Illustration"), pOldSeq15->GetFieldName()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf74230) +{ + createSwDoc(); + //exporting the empty document to ODT via TempFile + uno::Sequence aDescriptor; + utl::TempFile aTempFile; + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(aTempFile.GetURL(), aDescriptor); + CPPUNIT_ASSERT(aTempFile.IsValid()); + //loading an XML DOM of the "styles.xml" of the TempFile + xmlDocUniquePtr pXmlDoc = parseExportInternal(aTempFile.GetURL(), "styles.xml"); + //pXmlDoc should not be null + CPPUNIT_ASSERT(pXmlDoc); + //asserting XPath in loaded XML DOM + assertXPath(pXmlDoc, "//office:styles/style:default-style[@style:family='graphic']/" + "style:graphic-properties[@svg:stroke-color='#3465a4']"); + assertXPath(pXmlDoc, "//office:styles/style:default-style[@style:family='graphic']/" + "style:graphic-properties[@draw:fill-color='#729fcf']"); + //deleting the TempFile + aTempFile.EnableKillingFile(); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf80663) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + //Inserting 2x2 Table + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + SwInsertTableOptions TableOpt(SwInsertTableFlags::DefaultBorder, 0); + pWrtShell->InsertTable(TableOpt, 2, 2); + //Checking for the number of rows and columns + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Deleting the first row + pWrtShell->StartOfSection(); //moves the cursor to the start of Doc + pWrtShell->SelTableRow(); //selects the first row + pWrtShell->DeleteRow(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Redo changes + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Deleting the second row + pWrtShell->GoNextCell(); //moves the cursor to next cell + pWrtShell->SelTableRow(); //selects the second row + pWrtShell->DeleteRow(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Redo changes + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Deleting the first column + pWrtShell->StartOfSection(); //moves the cursor to the start of Doc + pWrtShell->SelTableCol(); //selects first column + pWrtShell->DeleteCol(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Redo changes + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Deleting the second column + pWrtShell->StartOfSection(); //moves the cursor to the start of Doc + pWrtShell->GoNextCell(); //moves the cursor to next cell + pWrtShell->SelTableCol(); //selects second column + pWrtShell->DeleteCol(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Redo changes + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf57197) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + //Inserting 1x1 Table + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + SwInsertTableOptions TableOpt(SwInsertTableFlags::DefaultBorder, 0); + pWrtShell->InsertTable(TableOpt, 1, 1); + //Checking for the number of rows and columns + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Inserting one row before the existing row + pWrtShell->StartOfSection(); //moves the cursor to the start of Doc + pWrtShell->InsertRow(1, false); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Redo changes + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Inserting one row after the existing row + pWrtShell->StartOfSection(); //moves the cursor to the start of Doc + pWrtShell->InsertRow(1, true); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Redo changes + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Inserting one column before the existing column + pWrtShell->StartOfSection(); //moves the cursor to the start of Doc + pWrtShell->InsertCol(1, false); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Redo changes + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Inserting one column after the existing column + pWrtShell->StartOfSection(); //moves the cursor to the start of Doc + pWrtShell->InsertCol(1, true); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + //Redo changes + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTable->getColumns()->getCount()); + //Undo changes + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf131990) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + CPPUNIT_ASSERT(!pWrtShell->Up(false, 1, true)); + CPPUNIT_ASSERT(!pWrtShell->Down(false, 1, true)); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf90808) +{ + createSwDoc(); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextRange = xTextDocument->getText(); + uno::Reference xText = xTextRange->getText(); + uno::Reference xCursor(xText->createTextCursor(), uno::UNO_QUERY); + //inserting text into document so that the paragraph is not empty + xText->setString("Hello World!"); + uno::Reference xFact(mxComponent, uno::UNO_QUERY); + //creating bookmark 1 + uno::Reference xHeadingBookmark1( + xFact->createInstance("com.sun.star.text.Bookmark"), uno::UNO_QUERY); + uno::Reference xHeadingName1(xHeadingBookmark1, uno::UNO_QUERY); + xHeadingName1->setName("__RefHeading__1"); + //moving cursor to the starting of paragraph + xCursor->gotoStartOfParagraph(false); + //inserting the bookmark in paragraph + xText->insertTextContent(xCursor, xHeadingBookmark1, true); + //creating bookmark 2 + uno::Reference xHeadingBookmark2( + xFact->createInstance("com.sun.star.text.Bookmark"), uno::UNO_QUERY); + uno::Reference xHeadingName2(xHeadingBookmark2, uno::UNO_QUERY); + xHeadingName2->setName("__RefHeading__2"); + //inserting the bookmark in same paragraph, at the end + //only one bookmark of this type is allowed in each paragraph an exception of com.sun.star.lang.IllegalArgumentException must be thrown when inserting the other bookmark in same paragraph + xCursor->gotoEndOfParagraph(true); + CPPUNIT_ASSERT_THROW(xText->insertTextContent(xCursor, xHeadingBookmark2, true), + css::lang::IllegalArgumentException); + //now testing for __RefNumPara__ + //creating bookmark 1 + uno::Reference xNumBookmark1( + xFact->createInstance("com.sun.star.text.Bookmark"), uno::UNO_QUERY); + uno::Reference xNumName1(xNumBookmark1, uno::UNO_QUERY); + xNumName1->setName("__RefNumPara__1"); + //moving cursor to the starting of paragraph + xCursor->gotoStartOfParagraph(false); + //inserting the bookmark in paragraph + xText->insertTextContent(xCursor, xNumBookmark1, true); + //creating bookmark 2 + uno::Reference xNumBookmark2( + xFact->createInstance("com.sun.star.text.Bookmark"), uno::UNO_QUERY); + uno::Reference xNumName2(xNumBookmark2, uno::UNO_QUERY); + xNumName2->setName("__RefNumPara__2"); + //inserting the bookmark in same paragraph, at the end + //only one bookmark of this type is allowed in each paragraph an exception of com.sun.star.lang.IllegalArgumentException must be thrown when inserting the other bookmark in same paragraph + xCursor->gotoEndOfParagraph(true); + CPPUNIT_ASSERT_THROW(xText->insertTextContent(xCursor, xNumBookmark2, true), + css::lang::IllegalArgumentException); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf97601) +{ + // Instructions from the bugreport to trigger an infinite loop. + createSwDoc(DATA_DIRECTORY, "tdf97601.odt"); + uno::Reference xEmbeddedObjectsSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference xEmbeddedObjects + = xEmbeddedObjectsSupplier->getEmbeddedObjects(); + uno::Reference xChart; + xEmbeddedObjects->getByName("myChart") >>= xChart; + uno::Reference xChartComponent; + xChart->getPropertyValue("Component") >>= xChartComponent; + uno::Sequence> aDataSequences + = xChartComponent->getDataSequences(); + uno::Reference xChartState(xChart, uno::UNO_QUERY); + xChartState->getExtendedControlOverEmbeddedObject()->changeState(1); + uno::Reference xDataSequenceModifiable(aDataSequences[2]->getValues(), + uno::UNO_QUERY); + xDataSequenceModifiable->setModified(true); + + // Make sure that the chart is marked as modified. + uno::Reference xModifiable(xChartComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, bool(xModifiable->isModified())); + calcLayout(); + // This never returned. + Scheduler::ProcessEventsToIdle(); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf75137) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwShellCursor* pShellCursor = pWrtShell->getShellCursor(true); + pWrtShell->InsertFootnote("This is first footnote"); + SwNodeOffset firstIndex = pShellCursor->GetNode().GetIndex(); + pShellCursor->GotoFootnoteAnchor(); + pWrtShell->InsertFootnote("This is second footnote"); + pWrtShell->Up(false); + SwNodeOffset secondIndex = pShellCursor->GetNode().GetIndex(); + pWrtShell->Down(false); + SwNodeOffset thirdIndex = pShellCursor->GetNode().GetIndex(); + CPPUNIT_ASSERT_EQUAL(firstIndex, thirdIndex); + CPPUNIT_ASSERT(firstIndex != secondIndex); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf83798) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf83798.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->GotoNextTOXBase(); + const SwTOXBase* pTOXBase = pWrtShell->GetCurTOX(); + pWrtShell->UpdateTableOf(*pTOXBase); + SwPaM* pCursor = pDoc->GetEditShell()->GetCursor(); + pCursor->SetMark(); + pCursor->Move(fnMoveForward, GoInNode); + pCursor->Move(fnMoveBackward, GoInContent); + CPPUNIT_ASSERT_EQUAL(OUString("Table of Contents"), pCursor->GetText()); + pCursor->Move(fnMoveForward, GoInContent); + pCursor->DeleteMark(); + pCursor->SetMark(); + pCursor->Move(fnMoveForward, GoInContent); + CPPUNIT_ASSERT_EQUAL(OUString("1"), pCursor->GetText()); + pCursor->DeleteMark(); + pCursor->Move(fnMoveForward, GoInNode); + pCursor->SetMark(); + pCursor->Move(fnMoveForward, GoInContent); + pCursor->Move(fnMoveForward, GoInContent); + pCursor->Move(fnMoveForward, GoInContent); + CPPUNIT_ASSERT_EQUAL(OUString("1.A"), pCursor->GetText()); + pCursor->DeleteMark(); + pCursor->Move(fnMoveForward, GoInNode); + pCursor->SetMark(); + pCursor->Move(fnMoveForward, GoInContent); + CPPUNIT_ASSERT_EQUAL(OUString("2"), pCursor->GetText()); + pCursor->DeleteMark(); + pCursor->Move(fnMoveForward, GoInNode); + pCursor->SetMark(); + pCursor->Move(fnMoveForward, GoInContent); + pCursor->Move(fnMoveForward, GoInContent); + pCursor->Move(fnMoveForward, GoInContent); + CPPUNIT_ASSERT_EQUAL(OUString("2.A"), pCursor->GetText()); + pCursor->DeleteMark(); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf89714) +{ + createSwDoc(); + uno::Reference xFact(mxComponent, uno::UNO_QUERY); + uno::Reference xInterface(xFact->createInstance("com.sun.star.text.Defaults"), + uno::UNO_QUERY); + uno::Reference xPropState(xInterface, uno::UNO_QUERY); + //enabled Paragraph Orphan and Widows by default starting in LO5.1 + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int8(2)), xPropState->getPropertyDefault("ParaOrphans")); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int8(2)), xPropState->getPropertyDefault("ParaWidows")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf130287) +{ + //create a new writer document + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + //insert a 1-cell table in the newly created document + SwInsertTableOptions TableOpt(SwInsertTableFlags::DefaultBorder, 0); + pWrtShell->InsertTable(TableOpt, 1, 1); + //checking for the row and column + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTable->getColumns()->getCount()); + uno::Reference xCell = xTable->getCellByName("A1"); + uno::Reference xCellText(xCell, uno::UNO_QUERY); + uno::Reference xParagraph = getParagraphOfText(1, xCellText); + // they were 2 (orphan/widow control enabled unnecessarily in Table Contents paragraph style) + CPPUNIT_ASSERT_EQUAL(sal_Int8(0), getProperty(xParagraph, "ParaOrphans")); + CPPUNIT_ASSERT_EQUAL(sal_Int8(0), getProperty(xParagraph, "ParaWidows")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testPropertyDefaults) +{ + createSwDoc(); + uno::Reference xFact(mxComponent, uno::UNO_QUERY); + uno::Reference xInterface(xFact->createInstance("com.sun.star.text.Defaults"), + uno::UNO_QUERY); + uno::Reference xPropSet(xInterface, uno::UNO_QUERY_THROW); + uno::Reference xPropState(xInterface, uno::UNO_QUERY); + //testing CharFontName from style::CharacterProperties + //getting property default + uno::Any aCharFontName = xPropState->getPropertyDefault("CharFontName"); + //asserting property default and defaults received from "css.text.Defaults" service + CPPUNIT_ASSERT_EQUAL(xPropSet->getPropertyValue("CharFontName"), aCharFontName); + //changing the default value + xPropSet->setPropertyValue("CharFontName", uno::Any(OUString("Symbol"))); + CPPUNIT_ASSERT_EQUAL(uno::Any(OUString("Symbol")), xPropSet->getPropertyValue("CharFontName")); + //resetting the value to default + xPropState->setPropertyToDefault("CharFontName"); + CPPUNIT_ASSERT_EQUAL(xPropSet->getPropertyValue("CharFontName"), aCharFontName); + //testing CharHeight from style::CharacterProperties + //getting property default + uno::Any aCharHeight = xPropState->getPropertyDefault("CharHeight"); + //asserting property default and defaults received from "css.text.Defaults" service + CPPUNIT_ASSERT_EQUAL(xPropSet->getPropertyValue("CharHeight"), aCharHeight); + //changing the default value + xPropSet->setPropertyValue("CharHeight", uno::Any(float(14))); + CPPUNIT_ASSERT_EQUAL(uno::Any(float(14)), xPropSet->getPropertyValue("CharHeight")); + //resetting the value to default + xPropState->setPropertyToDefault("CharHeight"); + CPPUNIT_ASSERT_EQUAL(xPropSet->getPropertyValue("CharHeight"), aCharHeight); + //testing CharWeight from style::CharacterProperties + uno::Any aCharWeight = xPropSet->getPropertyValue("CharWeight"); + //changing the default value + xPropSet->setPropertyValue("CharWeight", uno::Any(float(awt::FontWeight::BOLD))); + CPPUNIT_ASSERT_EQUAL(uno::Any(float(awt::FontWeight::BOLD)), + xPropSet->getPropertyValue("CharWeight")); + //resetting the value to default + xPropState->setPropertyToDefault("CharWeight"); + CPPUNIT_ASSERT_EQUAL(xPropSet->getPropertyValue("CharWeight"), aCharWeight); + //testing CharUnderline from style::CharacterProperties + uno::Any aCharUnderline = xPropSet->getPropertyValue("CharUnderline"); + //changing the default value + xPropSet->setPropertyValue("CharUnderline", uno::Any(sal_Int16(awt::FontUnderline::SINGLE))); + CPPUNIT_ASSERT_EQUAL(uno::Any(sal_Int16(awt::FontUnderline::SINGLE)), + xPropSet->getPropertyValue("CharUnderline")); + //resetting the value to default + xPropState->setPropertyToDefault("CharUnderline"); + CPPUNIT_ASSERT_EQUAL(xPropSet->getPropertyValue("CharUnderline"), aCharUnderline); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTableBackgroundColor) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwInsertTableOptions TableOpt(SwInsertTableFlags::DefaultBorder, 0); + pWrtShell->InsertTable(TableOpt, 3, 3); //Inserting Table + //Checking Rows and Columns of Inserted Table + uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTable->getRows()->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTable->getColumns()->getCount()); + pWrtShell->StartOfSection(); + pWrtShell->SelTableRow(); //Selecting First Row + pWrtShell->ClearMark(); + //Modifying the color of Table Box + pWrtShell->SetBoxBackground( + SvxBrushItem(Color(sal_Int32(0xFF00FF)), sal_Int16(RES_BACKGROUND))); + //Checking cells for background color only A1 should be modified + uno::Reference xCell; + xCell = xTable->getCellByName("A1"); + CPPUNIT_ASSERT_EQUAL(Color(0xFF00FF), getProperty(xCell, "BackColor")); + xCell = xTable->getCellByName("A2"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xCell, "BackColor")); + xCell = xTable->getCellByName("A3"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xCell, "BackColor")); + xCell = xTable->getCellByName("B1"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xCell, "BackColor")); + xCell = xTable->getCellByName("B2"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xCell, "BackColor")); + xCell = xTable->getCellByName("B3"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xCell, "BackColor")); + xCell = xTable->getCellByName("C1"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xCell, "BackColor")); + xCell = xTable->getCellByName("C2"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xCell, "BackColor")); + xCell = xTable->getCellByName("C3"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xCell, "BackColor")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf88899) +{ + createSwDoc(); + uno::Reference xDocumentPropertiesSupplier( + mxComponent, uno::UNO_QUERY); + uno::Reference xProps( + xDocumentPropertiesSupplier->getDocumentProperties()); + uno::Reference xUserProps = xProps->getUserDefinedProperties(); + css::util::DateTime aDateTime + = { sal_uInt32(1234567), sal_uInt16(3), sal_uInt16(3), sal_uInt16(3), + sal_uInt16(10), sal_uInt16(11), sal_uInt16(2014), true }; + xUserProps->addProperty("dateTime", sal_Int16(beans::PropertyAttribute::OPTIONAL), + uno::Any(aDateTime)); + uno::Reference xFact(mxComponent, uno::UNO_QUERY); + uno::Reference xTextField( + xFact->createInstance("com.sun.star.text.textfield.docinfo.Custom"), uno::UNO_QUERY); + //Setting Name Property + uno::Reference xPropSet(xTextField, uno::UNO_QUERY_THROW); + xPropSet->setPropertyValue("Name", uno::Any(OUString("dateTime"))); + //Setting NumberFormat + uno::Reference xNumberFormatsSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference xNumFormat(xNumberFormatsSupplier->getNumberFormats(), + uno::UNO_QUERY); + css::lang::Locale alocale; + alocale.Language = "en"; + alocale.Country = "US"; + sal_Int16 key = xNumFormat->getStandardFormat(util::NumberFormat::DATETIME, alocale); + xPropSet->setPropertyValue("NumberFormat", uno::Any(key)); + //Inserting Text Content + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextRange = xTextDocument->getText(); + uno::Reference xText = xTextRange->getText(); + xText->insertTextContent(xTextRange, xTextField, true); + //Retrieving the contents for verification + CPPUNIT_ASSERT_EQUAL(OUString("11/10/14 03:03 AM"), xTextField->getPresentation(false)); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf90362) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf90362.fodt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + // Ensure correct initial setting + std::shared_ptr batch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Writer::Cursor::Option::IgnoreProtectedArea::set(false, batch); + batch->commit(); + // First check if the end of the second paragraph is indeed protected. + pWrtShell->EndPara(); + pWrtShell->Down(/*bSelect=*/false); + CPPUNIT_ASSERT_EQUAL(true, pWrtShell->HasReadonlySel()); + + // Then enable ignoring of protected areas and make sure that this time the cursor is read-write. + officecfg::Office::Writer::Cursor::Option::IgnoreProtectedArea::set(true, batch); + batch->commit(); + CPPUNIT_ASSERT_EQUAL(false, pWrtShell->HasReadonlySel()); + // Clean up, otherwise following tests will have that option set + officecfg::Office::Writer::Cursor::Option::IgnoreProtectedArea::set(false, batch); + batch->commit(); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testUndoDelAsCharTdf107512) +{ + SwDoc* pDoc(createSwDoc()); + sw::UndoManager& rUndoManager(pDoc->GetUndoManager()); + IDocumentContentOperations& rIDCO(pDoc->getIDocumentContentOperations()); + SwCursorShell* pShell(pDoc->GetEditShell()); + SfxItemSet frameSet(pDoc->GetAttrPool(), svl::Items); + SfxItemSet grfSet(pDoc->GetAttrPool(), svl::Items); + rIDCO.InsertString(*pShell->GetCursor(), "foo"); + pShell->ClearMark(); + SwFormatAnchor anchor(RndStdIds::FLY_AS_CHAR); + frameSet.Put(anchor); + GraphicObject grf; + pShell->SttEndDoc(true); + CPPUNIT_ASSERT(rIDCO.InsertGraphicObject(*pShell->GetCursor(), grf, &frameSet, &grfSet)); + pShell->SttEndDoc(false); + CPPUNIT_ASSERT(rIDCO.InsertGraphicObject(*pShell->GetCursor(), grf, &frameSet, &grfSet)); + CPPUNIT_ASSERT_EQUAL(size_t(2), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + SvxCharHiddenItem hidden(true, RES_CHRATR_HIDDEN); + pShell->SelectTextModel(1, 4); + rIDCO.InsertPoolItem(*pShell->GetCursor(), hidden); + // now we have "\1foo\1" with the "foo" hidden + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(4, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT_EQUAL( + OUString(OUStringChar(CH_TXTATR_BREAKWORD) + u"foo" + OUStringChar(CH_TXTATR_BREAKWORD)), + pShell->GetCursor()->GetNode().GetTextNode()->GetText()); + SfxPoolItem const* pItem; + SfxItemSet query(pDoc->GetAttrPool(), svl::Items); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 1, 4); + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + CPPUNIT_ASSERT(static_cast(pItem)->GetValue()); + query.ClearItem(RES_CHRATR_HIDDEN); + + // delete from the start + pShell->SelectTextModel(0, 4); + rIDCO.DeleteAndJoin(*pShell->GetCursor()); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 0, 1); + CPPUNIT_ASSERT_EQUAL(SfxItemState::DEFAULT, + query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + query.ClearItem(RES_CHRATR_HIDDEN); + rUndoManager.Undo(); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(4, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT_EQUAL(size_t(2), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + CPPUNIT_ASSERT_EQUAL( + OUString(OUStringChar(CH_TXTATR_BREAKWORD) + u"foo" + OUStringChar(CH_TXTATR_BREAKWORD)), + pShell->GetCursor()->GetNode().GetTextNode()->GetText()); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 0, 1); + CPPUNIT_ASSERT_EQUAL(SfxItemState::DEFAULT, + query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + query.ClearItem(RES_CHRATR_HIDDEN); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 1, 4); + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + CPPUNIT_ASSERT(static_cast(pItem)->GetValue()); + query.ClearItem(RES_CHRATR_HIDDEN); + rUndoManager.Redo(); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 0, 1); + CPPUNIT_ASSERT_EQUAL(SfxItemState::DEFAULT, + query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + query.ClearItem(RES_CHRATR_HIDDEN); + rUndoManager.Undo(); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(4, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT_EQUAL(size_t(2), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + CPPUNIT_ASSERT_EQUAL( + OUString(OUStringChar(CH_TXTATR_BREAKWORD) + u"foo" + OUStringChar(CH_TXTATR_BREAKWORD)), + pShell->GetCursor()->GetNode().GetTextNode()->GetText()); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 0, 1); + CPPUNIT_ASSERT_EQUAL(SfxItemState::DEFAULT, + query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + query.ClearItem(RES_CHRATR_HIDDEN); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 1, 4); + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + CPPUNIT_ASSERT(static_cast(pItem)->GetValue()); + query.ClearItem(RES_CHRATR_HIDDEN); + + // delete from the end + pShell->SelectTextModel(1, 5); + rIDCO.DeleteAndJoin(*pShell->GetCursor()); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 4, 5); + CPPUNIT_ASSERT_EQUAL(SfxItemState::DEFAULT, + query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + query.ClearItem(RES_CHRATR_HIDDEN); + rUndoManager.Undo(); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(4, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT_EQUAL(size_t(2), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + CPPUNIT_ASSERT_EQUAL( + OUString(OUStringChar(CH_TXTATR_BREAKWORD) + u"foo" + OUStringChar(CH_TXTATR_BREAKWORD)), + pShell->GetCursor()->GetNode().GetTextNode()->GetText()); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 4, 5); + CPPUNIT_ASSERT_EQUAL(SfxItemState::DEFAULT, + query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + query.ClearItem(RES_CHRATR_HIDDEN); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 1, 4); + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + CPPUNIT_ASSERT(static_cast(pItem)->GetValue()); + query.ClearItem(RES_CHRATR_HIDDEN); + rUndoManager.Redo(); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 4, 5); + CPPUNIT_ASSERT_EQUAL(SfxItemState::DEFAULT, + query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + query.ClearItem(RES_CHRATR_HIDDEN); + rUndoManager.Undo(); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT( + pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(4, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT_EQUAL(size_t(2), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + CPPUNIT_ASSERT_EQUAL( + OUString(OUStringChar(CH_TXTATR_BREAKWORD) + u"foo" + OUStringChar(CH_TXTATR_BREAKWORD)), + pShell->GetCursor()->GetNode().GetTextNode()->GetText()); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 4, 5); + CPPUNIT_ASSERT_EQUAL(SfxItemState::DEFAULT, + query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + query.ClearItem(RES_CHRATR_HIDDEN); + pShell->GetCursor()->GetNode().GetTextNode()->GetParaAttr(query, 1, 4); + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, query.GetItemState(RES_CHRATR_HIDDEN, false, &pItem)); + CPPUNIT_ASSERT(static_cast(pItem)->GetValue()); + query.ClearItem(RES_CHRATR_HIDDEN); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testUndoCharAttribute) +{ + // Create a new empty Writer document + SwDoc* pDoc = createSwDoc(); + SwPaM* pCursor = pDoc->GetEditShell()->GetCursor(); + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + IDocumentContentOperations& rIDCO(pDoc->getIDocumentContentOperations()); + // Insert some text + rIDCO.InsertString(*pCursor, "This will be bolded"); + // Position of word 9876543210 + // Use cursor to select part of text + pCursor->SetMark(); + for (int i = 0; i < 9; i++) + { + pCursor->Move(fnMoveBackward); + } + // Check that correct text was selected + CPPUNIT_ASSERT_EQUAL(OUString("be bolded"), pCursor->GetText()); + // Apply a "Bold" attribute to selection + SvxWeightItem aWeightItem(WEIGHT_BOLD, RES_CHRATR_WEIGHT); + rIDCO.InsertPoolItem(*pCursor, aWeightItem); + SfxItemSet aSet(pDoc->GetAttrPool(), svl::Items); + // Adds selected text's attributes to aSet + pCursor->GetNode().GetTextNode()->GetParaAttr(aSet, 10, 19); + SfxPoolItem const* pPoolItem = aSet.GetItem(RES_CHRATR_WEIGHT); + // Check that bold is active on the selection; checks if it's in aSet + CPPUNIT_ASSERT_EQUAL(true, (*pPoolItem == aWeightItem)); + // Invoke Undo + rUndoManager.Undo(); + // Check that bold is no longer active + aSet.ClearItem(RES_CHRATR_WEIGHT); + pCursor->GetNode().GetTextNode()->GetParaAttr(aSet, 10, 19); + pPoolItem = aSet.GetItem(RES_CHRATR_WEIGHT); + CPPUNIT_ASSERT_EQUAL(false, (*pPoolItem == aWeightItem)); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testUndoDelAsChar) +{ + SwDoc* pDoc(createSwDoc()); + sw::UndoManager& rUndoManager(pDoc->GetUndoManager()); + IDocumentContentOperations& rIDCO(pDoc->getIDocumentContentOperations()); + SwCursorShell* pShell(pDoc->GetEditShell()); + SfxItemSet frameSet(pDoc->GetAttrPool(), svl::Items); + SfxItemSet grfSet(pDoc->GetAttrPool(), svl::Items); + SwFormatAnchor anchor(RndStdIds::FLY_AS_CHAR); + frameSet.Put(anchor); + GraphicObject grf; + CPPUNIT_ASSERT(rIDCO.InsertGraphicObject(*pShell->GetCursor(), grf, &frameSet, &grfSet)); + CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + pShell->SetMark(); + pShell->Left(1, CRSR_SKIP_CHARS); + rIDCO.DeleteAndJoin(*pShell->GetCursor()); + CPPUNIT_ASSERT_EQUAL(size_t(0), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT(!pShell->GetCursor()->GetNode().GetTextNode()->HasHints()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT(pShell->GetCursor()->GetNode().GetTextNode()->HasHints()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + rUndoManager.Redo(); + CPPUNIT_ASSERT_EQUAL(size_t(0), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT(!pShell->GetCursor()->GetNode().GetTextNode()->HasHints()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pShell->GetCursor()->GetNode().GetTextNode()->Len()); + rUndoManager.Undo(); + CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetFlyCount(FLYCNTTYPE_GRF)); + CPPUNIT_ASSERT(pShell->GetCursor()->GetNode().GetTextNode()->HasHints()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pShell->GetCursor()->GetNode().GetTextNode()->Len()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf86639) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf86639.rtf"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwTextFormatColl* pColl = pDoc->FindTextFormatCollByName(u"Heading"); + pWrtShell->SetTextFormatColl(pColl); + OUString aExpected = pColl->GetAttrSet().GetFont().GetFamilyName(); + // This was Calibri, should be Liberation Sans. + CPPUNIT_ASSERT_EQUAL(aExpected, + getProperty(getRun(getParagraph(1), 1), "CharFontName")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf90883TableBoxGetCoordinates) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf90883.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Down(true); + SwSelBoxes aBoxes; + ::GetTableSel(*pWrtShell, aBoxes); + CPPUNIT_ASSERT_EQUAL(2, static_cast(aBoxes.size())); + Point pos(aBoxes[0]->GetCoordinates()); + CPPUNIT_ASSERT_EQUAL(1, static_cast(pos.X())); + CPPUNIT_ASSERT_EQUAL(1, static_cast(pos.Y())); + pos = aBoxes[1]->GetCoordinates(); + CPPUNIT_ASSERT_EQUAL(1, static_cast(pos.X())); + CPPUNIT_ASSERT_EQUAL(2, static_cast(pos.Y())); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testEmbeddedDataSource) +{ + // Initially no data source. + uno::Reference xComponentContext( + comphelper::getProcessComponentContext()); + uno::Reference xDatabaseContext + = sdb::DatabaseContext::create(xComponentContext); + CPPUNIT_ASSERT(!xDatabaseContext->hasByName("calc-data-source")); + + // Load: should have a component and a data source, too. + // Path with "#" must not cause issues + createSwDoc(OUStringConcatenation(DATA_DIRECTORY + OUString::Concat(u"hash%23path/")), + "embedded-data-source.odt"); + CPPUNIT_ASSERT(xDatabaseContext->hasByName("calc-data-source")); + + // Data source has a table named Sheet1. + uno::Reference xDataSource(xDatabaseContext->getByName("calc-data-source"), + uno::UNO_QUERY); + CPPUNIT_ASSERT(xDataSource.is()); + auto xConnection = xDataSource->getConnection("", ""); + uno::Reference xTables + = css::uno::Reference(xConnection, uno::UNO_QUERY_THROW) + ->getTables(); + CPPUNIT_ASSERT(xTables.is()); + CPPUNIT_ASSERT(xTables->hasByName("Sheet1")); + xConnection->close(); + + // Reload: should still have a component and a data source, too. + reload("writer8", "embedded-data-source.odt"); + CPPUNIT_ASSERT(mxComponent.is()); + CPPUNIT_ASSERT(xDatabaseContext->hasByName("calc-data-source")); + + // Data source has a table named Sheet1 after saving to a different directory. + xDataSource.set(xDatabaseContext->getByName("calc-data-source"), uno::UNO_QUERY); + CPPUNIT_ASSERT(xDataSource.is()); + xConnection = xDataSource->getConnection("", ""); + xTables = css::uno::Reference(xConnection, uno::UNO_QUERY_THROW) + ->getTables(); + CPPUNIT_ASSERT(xTables.is()); + CPPUNIT_ASSERT(xTables->hasByName("Sheet1")); + xConnection->close(); + + // Close: should not have a data source anymore. + mxComponent->dispose(); + mxComponent.clear(); + CPPUNIT_ASSERT(!xDatabaseContext->hasByName("calc-data-source")); + + // Now open again the saved result, and instead of 'save as', just 'save'. + mxComponent = loadFromDesktop(maTempFile.GetURL(), "com.sun.star.text.TextDocument"); + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + xStorable->store(); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testUnoCursorPointer) +{ + auto xDocComponent( + loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument")); + auto pxDocDocument(dynamic_cast(xDocComponent.get())); + CPPUNIT_ASSERT(pxDocDocument); + SwDoc* const pDoc(pxDocDocument->GetDocShell()->GetDoc()); + std::unique_ptr pIdx(new SwNodeIndex(pDoc->GetNodes().GetEndOfContent(), -1)); + std::unique_ptr pPos(new SwPosition(*pIdx)); + sw::UnoCursorPointer pCursor(pDoc->CreateUnoCursor(*pPos)); + CPPUNIT_ASSERT(static_cast(pCursor)); + pPos.reset(); // we need to kill the SwPosition before disposing + pIdx.reset(); // we need to kill the SwNodeIndex before disposing + xDocComponent->dispose(); + CPPUNIT_ASSERT(!static_cast(pCursor)); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTextTableCellNames) +{ + sal_Int32 nCol, nRow2; + SwXTextTable::GetCellPosition("z1", nCol, nRow2); + CPPUNIT_ASSERT_EQUAL(static_cast(51), nCol); + SwXTextTable::GetCellPosition("AA1", nCol, nRow2); + CPPUNIT_ASSERT_EQUAL(static_cast(52), nCol); + SwXTextTable::GetCellPosition("AB1", nCol, nRow2); + CPPUNIT_ASSERT_EQUAL(static_cast(53), nCol); + SwXTextTable::GetCellPosition("BB1", nCol, nRow2); + CPPUNIT_ASSERT_EQUAL(static_cast(105), nCol); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testShapeAnchorUndo) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "draw-anchor-undo.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0); + SdrObject* pObject = pPage->GetObj(0); + tools::Rectangle aOrigLogicRect(pObject->GetLogicRect()); + + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + rUndoManager.StartUndo(SwUndoId::START, nullptr); + + pWrtShell->SelectObj(Point(), 0, pObject); + + pWrtShell->GetDrawView()->MoveMarkedObj(Size(100, 100)); + pWrtShell->ChgAnchor(RndStdIds::FLY_AT_PARA, true); + + rUndoManager.EndUndo(SwUndoId::END, nullptr); + + CPPUNIT_ASSERT(aOrigLogicRect != pObject->GetLogicRect()); + + rUndoManager.Undo(); + + CPPUNIT_ASSERT_EQUAL(pObject->GetLogicRect(), aOrigLogicRect); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf127635) +{ + SwDoc* pDoc = createSwDoc(); + + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'a', 0); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, ' ', 0); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'b', 0); + Scheduler::ProcessEventsToIdle(); + + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + + //Select 'a' + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false); + + // enable redlining + dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + // hide + dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {}); + + CPPUNIT_ASSERT_MESSAGE("redlining should be on", + pDoc->getIDocumentRedlineAccess().IsRedlineOn()); + CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines()); + + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'c', 0); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, ' ', 0); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'd', 0); + Scheduler::ProcessEventsToIdle(); + + SwEditShell* const pEditShell(pDoc->GetEditShell()); + // accept all redlines + while (pEditShell->GetRedlineCount()) + pEditShell->AcceptRedline(0); + + // Without the fix in place, this test would have failed with + // - Expected: C d b + // - Actual : Cd b + CPPUNIT_ASSERT_EQUAL(OUString("C d b"), getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testDde) +{ +#if HAVE_FEATURE_UI + // Type asdf and copy it. + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("asdf"); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 4, /*bBasicCall=*/false); + uno::Sequence aPropertyValues; + dispatchCommand(mxComponent, ".uno:Copy", aPropertyValues); + + // Go before the selection and paste as a DDE link. + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + aPropertyValues = comphelper::InitPropertySequence( + { { "SelectedFormat", uno::Any(static_cast(SotClipboardFormatId::LINK)) } }); + dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aPropertyValues); + + // Make sure that the document starts with a field now, and its expanded string value contains asdf. + const uno::Reference xField = getRun(getParagraph(1), 1); + CPPUNIT_ASSERT_EQUAL(OUString("TextField"), getProperty(xField, "TextPortionType")); + CPPUNIT_ASSERT(xField->getString().endsWith("asdf")); +#endif +} + +namespace +{ +//IdleTask class to add a low priority Idle task +class IdleTask +{ +public: + bool GetFlag() const; + IdleTask(); + DECL_LINK(FlipFlag, Timer*, void); + +private: + bool flag; + Idle maIdle{ "sw uiwriter IdleTask" }; +}; +} + +//constructor of IdleTask Class +IdleTask::IdleTask() + : flag(false) +{ + //setting the Priority of Idle task to LOW, LOWEST + maIdle.SetPriority(TaskPriority::LOWEST); + //set idle for callback + maIdle.SetInvokeHandler(LINK(this, IdleTask, FlipFlag)); + //starting the idle + maIdle.Start(); +} + +//GetFlag() of IdleTask Class +bool IdleTask::GetFlag() const +{ + //returning the status of current flag + return flag; +} + +//Callback function of IdleTask Class +IMPL_LINK(IdleTask, FlipFlag, Timer*, , void) +{ + //setting the flag to make sure that low priority idle task has been dispatched + flag = true; +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testDocModState) +{ + //creating a new writer document via the XDesktop(to have more shells etc.) + SwDoc* pDoc = createSwDoc(); + //creating instance of IdleTask Class + IdleTask idleTask; + //checking the state of the document via IDocumentState + IDocumentState& rState(pDoc->getIDocumentState()); + //the state should not be modified + CPPUNIT_ASSERT(!(rState.IsModified())); + //checking the state of the document via SfxObjectShell + SwDocShell* pShell(pDoc->GetDocShell()); + CPPUNIT_ASSERT(!(pShell->IsModified())); + //looping around yield until low priority idle task is dispatched and flag is flipped + while (!idleTask.GetFlag()) + { + //dispatching all the events via VCL main-loop + Application::Yield(); + } + //again checking for the state via IDocumentState + CPPUNIT_ASSERT(!(rState.IsModified())); + //again checking for the state via SfxObjectShell + CPPUNIT_ASSERT(!(pShell->IsModified())); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf94804) +{ + //create new writer document + SwDoc* pDoc = createSwDoc(); + //get cursor for making bookmark at a particular location + SwPaM* pCrsr = pDoc->GetEditShell()->GetCursor(); + IDocumentMarkAccess* pIDMAccess(pDoc->getIDocumentMarkAccess()); + //make first bookmark, CROSSREF_HEADING, with *empty* name + sw::mark::IMark* pMark1( + pIDMAccess->makeMark(*pCrsr, "", IDocumentMarkAccess::MarkType::CROSSREF_HEADING_BOOKMARK, + ::sw::mark::InsertMode::New)); + //get the new(autogenerated) bookmark name + OUString bookmark1name = pMark1->GetName(); + //match the bookmark name, it should be like "__RefHeading__**" + CPPUNIT_ASSERT(bookmark1name.match("__RefHeading__")); + //make second bookmark, CROSSREF_NUMITEM, with *empty* name + sw::mark::IMark* pMark2( + pIDMAccess->makeMark(*pCrsr, "", IDocumentMarkAccess::MarkType::CROSSREF_NUMITEM_BOOKMARK, + ::sw::mark::InsertMode::New)); + //get the new(autogenerated) bookmark name + OUString bookmark2name = pMark2->GetName(); + //match the bookmark name, it should be like "__RefNumPara__**" + CPPUNIT_ASSERT(bookmark2name.match("__RefNumPara__")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testUnicodeNotationToggle) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "unicodeAltX.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + OUString sOriginalDocString; + OUString sDocString; + OUString sExpectedString; + uno::Sequence aPropertyValues; + + pWrtShell->EndPara(); + sOriginalDocString = pWrtShell->GetCursor()->GetNode().GetTextNode()->GetText(); + CPPUNIT_ASSERT_EQUAL(OUString("uU+002b"), sOriginalDocString); + + dispatchCommand(mxComponent, ".uno:UnicodeNotationToggle", aPropertyValues); + sExpectedString = "u+"; + sDocString = pWrtShell->GetCursor()->GetNode().GetTextNode()->GetText(); + CPPUNIT_ASSERT_EQUAL(sDocString, sExpectedString); + + dispatchCommand(mxComponent, ".uno:UnicodeNotationToggle", aPropertyValues); + sDocString = pWrtShell->GetCursor()->GetNode().GetTextNode()->GetText(); + CPPUNIT_ASSERT_EQUAL(sDocString, sOriginalDocString); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf34957) +{ + createSwDoc(DATA_DIRECTORY, "tdf34957.odt"); + // table with "keep with next" always started on a new page if the table was large, + // regardless of whether it was already kept with the previous paragraph, + // or whether the following paragraph actually fit on the same page (MAB 3.6 - 5.0) + CPPUNIT_ASSERT_EQUAL(OUString("Row 1"), + parseDump("/root/page[2]/body/tab[1]/row[2]/cell[1]/txt")); + CPPUNIT_ASSERT_EQUAL(OUString("Row 1"), + parseDump("/root/page[4]/body/tab[1]/row[2]/cell[1]/txt")); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf89954) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf89954.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->EndPara(); + SwXTextDocument* pXTextDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pXTextDocument); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 't', 0); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'e', 0); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 's', 0); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 't', 0); + pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, '.', 0); + Scheduler::ProcessEventsToIdle(); + + SwNodeIndex aNodeIndex(pDoc->GetNodes().GetEndOfContent(), -1); + // Placeholder character for the comment anchor was ^A (CH_TXTATR_BREAKWORD), not (CH_TXTATR_INWORD). + // As a result, autocorrect did not turn the 't' input into 'T'. + CPPUNIT_ASSERT_EQUAL(OUString(u"Tes\uFFF9t. Test."), + aNodeIndex.GetNode().GetTextNode()->GetText()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf89720) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf89720.odt"); + SwView* pView = pDoc->GetDocShell()->GetView(); + SwPostItMgr* pPostItMgr = pView->GetPostItMgr(); + for (std::unique_ptr const& pItem : *pPostItMgr) + { + if (pItem->mpPostIt->IsFollow()) + // This was non-0: reply comments had a text range overlay, + // resulting in unexpected dark color. + CPPUNIT_ASSERT(!pItem->mpPostIt->TextRange()); + } +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf88986) +{ + // Create a text shell. + SwDoc* pDoc = createSwDoc(); + SwView* pView = pDoc->GetDocShell()->GetView(); + SwTextShell aShell(*pView); + + // Create the item set that is normally passed to the insert frame dialog. + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr); + SfxItemSet aSet = aShell.CreateInsertFrameItemSet(aMgr); + + // This was missing along with the gradient and other tables. + CPPUNIT_ASSERT(aSet.HasItem(SID_COLOR_TABLE)); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf78150) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("foobar"); + + CPPUNIT_ASSERT_EQUAL(OUString("foobar"), getParagraph(1)->getString()); + + dispatchCommand(mxComponent, ".uno:DelToStartOfWord", {}); + + // Without the fix, test fails with: + // equality assertion failed + // - Expected: + // - Actual : f + CPPUNIT_ASSERT_EQUAL(OUString(""), getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf138873) +{ + SwDoc* pDoc = createSwDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("A B C"); + + CPPUNIT_ASSERT_EQUAL(OUString("A B C"), getParagraph(1)->getString()); + + // Select B + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false); + + pWrtShell->Insert("DDD"); + + CPPUNIT_ASSERT_EQUAL(OUString("A DDD C"), getParagraph(1)->getString()); + + dispatchCommand(mxComponent, ".uno:Undo", {}); + Scheduler::ProcessEventsToIdle(); + + CPPUNIT_ASSERT_EQUAL(OUString("A B C"), getParagraph(1)->getString()); + + // Select B and C + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 2, /*bBasicCall=*/false); + + dispatchCommand(mxComponent, ".uno:Copy", {}); + Scheduler::ProcessEventsToIdle(); + + dispatchCommand(mxComponent, ".uno:Paste", {}); + Scheduler::ProcessEventsToIdle(); + + // Without the fix in place, this test would have failed with + // - Expected: A B C + // - Actual : A CB CB + CPPUNIT_ASSERT_EQUAL(OUString("A B C"), getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf87922) +{ + // Create an SwDrawTextInfo. + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf87922.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwScriptInfo* pScriptInfo = nullptr; + // Get access to the single paragraph in the document. + SwNodeIndex aNodeIndex(pDoc->GetNodes().GetEndOfContent(), -1); + const OUString& rText = aNodeIndex.GetNode().GetTextNode()->GetText(); + sal_Int32 nLength = rText.getLength(); + SwDrawTextInfo aDrawTextInfo(pWrtShell, *pWrtShell->GetOut(), pScriptInfo, rText, + TextFrameIndex(0), TextFrameIndex(nLength)); + // Root -> page -> body -> text. + SwTextFrame* pTextFrame + = static_cast(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()); + aDrawTextInfo.SetFrame(pTextFrame); + + // If no color background color is found, assume white. + Color* pColor = sw::GetActiveRetoucheColor(); + *pColor = COL_WHITE; + + // Make sure that automatic color on black background is white, not black. + vcl::Font aFont; + aDrawTextInfo.ApplyAutoColor(&aFont); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, aFont.GetColor()); +} + +#if HAVE_MORE_FONTS +namespace +{ +struct PortionItem +{ + PortionItem(OUString const& sItemType, sal_Int32 nLength, PortionType nTextType) + : msItemType(sItemType) + , mnLength(nLength) + , mnTextType(nTextType) + { + } + + OUString msItemType; + sal_Int32 mnLength; + PortionType mnTextType; +}; + +class PortionHandler : public SwPortionHandler +{ +public: + std::vector mPortionItems; + explicit PortionHandler() + : SwPortionHandler() + { + } + + void clear() { mPortionItems.clear(); } + + virtual void Text(TextFrameIndex nLength, PortionType nType, sal_Int32 /*nHeight*/, + sal_Int32 /*nWidth*/) override + { + mPortionItems.emplace_back("text", sal_Int32(nLength), nType); + } + + virtual void Special(TextFrameIndex nLength, const OUString& /*rText*/, PortionType nType, + sal_Int32 /*nHeight*/, sal_Int32 /*nWidth*/, + const SwFont* /*pFont*/) override + { + mPortionItems.emplace_back("special", sal_Int32(nLength), nType); + } + + virtual void LineBreak(sal_Int32 /*nWidth*/) override + { + mPortionItems.emplace_back("line_break", 0, PortionType::NONE); + } + + virtual void Skip(TextFrameIndex nLength) override + { + mPortionItems.emplace_back("skip", sal_Int32(nLength), PortionType::NONE); + } + + virtual void Finish() override { mPortionItems.emplace_back("finish", 0, PortionType::NONE); } +}; +} +#endif + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf77014) +{ +#if HAVE_MORE_FONTS + // The problem described in the bug tdf#77014 is that the input + // field text ("ThisIsAllOneWord") is broken up on linebreak, but + // it should be in one piece (like normal text). + + // This test checks that the input field is in one piece and if the + // input field has more words, it is broken up at the correct place. + + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf77014.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + SwTextFrame* pTextFrame + = static_cast(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()); + + PortionHandler aHandler; + pTextFrame->VisitPortions(aHandler); + + { + // Input Field - "One Two Three Four Five" = 25 chars + CPPUNIT_ASSERT_EQUAL(OUString("text"), aHandler.mPortionItems[0].msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(25), aHandler.mPortionItems[0].mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::InputField, aHandler.mPortionItems[0].mnTextType); + + CPPUNIT_ASSERT_EQUAL(OUString("line_break"), aHandler.mPortionItems[1].msItemType); + + CPPUNIT_ASSERT_EQUAL(OUString("finish"), aHandler.mPortionItems[2].msItemType); + } + + aHandler.clear(); + + pTextFrame = static_cast(pTextFrame->GetNext()); + pTextFrame->VisitPortions(aHandler); + + { + // Input Field - "ThisIsAllOneWord" = 18 chars + CPPUNIT_ASSERT_EQUAL(OUString("text"), aHandler.mPortionItems[0].msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(18), aHandler.mPortionItems[0].mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::InputField, aHandler.mPortionItems[0].mnTextType); + + CPPUNIT_ASSERT_EQUAL(OUString("line_break"), aHandler.mPortionItems[1].msItemType); + + CPPUNIT_ASSERT_EQUAL(OUString("finish"), aHandler.mPortionItems[2].msItemType); + } + + aHandler.clear(); + + // skip empty paragraph + pTextFrame = static_cast(pTextFrame->GetNext()); + + pTextFrame = static_cast(pTextFrame->GetNext()); + pTextFrame->VisitPortions(aHandler); + + { + // Text "The purpose of this report is to summarize the results of the existing bug in the LO suite" + // = 91 chars + auto& rPortionItem = aHandler.mPortionItems[0]; + CPPUNIT_ASSERT_EQUAL(OUString("text"), rPortionItem.msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(91), rPortionItem.mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::Text, rPortionItem.mnTextType); + + // NEW LINE + rPortionItem = aHandler.mPortionItems[1]; + CPPUNIT_ASSERT_EQUAL(OUString("line_break"), rPortionItem.msItemType); + + // Input Field: "ThisIsAllOneWord" = 18 chars + // which is 16 chars + 2 hidden chars (start & end input field) = 18 chars + // If this is correct then the input field is in one piece + rPortionItem = aHandler.mPortionItems[2]; + CPPUNIT_ASSERT_EQUAL(OUString("text"), rPortionItem.msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(18), rPortionItem.mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::InputField, rPortionItem.mnTextType); + + // Text "." + rPortionItem = aHandler.mPortionItems[3]; + CPPUNIT_ASSERT_EQUAL(OUString("text"), rPortionItem.msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rPortionItem.mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::Text, rPortionItem.mnTextType); + + // NEW LINE + rPortionItem = aHandler.mPortionItems[4]; + CPPUNIT_ASSERT_EQUAL(OUString("line_break"), rPortionItem.msItemType); + + rPortionItem = aHandler.mPortionItems[5]; + CPPUNIT_ASSERT_EQUAL(OUString("finish"), rPortionItem.msItemType); + } + + aHandler.clear(); + + pTextFrame = static_cast(pTextFrame->GetNext()); + pTextFrame->VisitPortions(aHandler); + { + printf("Portions:\n"); + + for (const auto& rPortionItem : aHandler.mPortionItems) + { + printf("-- Type: %s length: %" SAL_PRIdINT32 " text type: %d\n", + rPortionItem.msItemType.toUtf8().getStr(), rPortionItem.mnLength, + sal_uInt16(rPortionItem.mnTextType)); + } + + // Text "The purpose of this report is to summarize the results of the existing bug in the LO suite" + // 91 chars + auto& rPortionItem = aHandler.mPortionItems[0]; + CPPUNIT_ASSERT_EQUAL(OUString("text"), rPortionItem.msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(91), rPortionItem.mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::Text, rPortionItem.mnTextType); + + // The input field here has more words ("One Two Three Four Five") + // and it should break after "Two". + // Input Field: "One Two" = 7 chars + 1 start input field hidden character = 8 chars + rPortionItem = aHandler.mPortionItems[1]; + CPPUNIT_ASSERT_EQUAL(OUString("text"), rPortionItem.msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(8), rPortionItem.mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::InputField, rPortionItem.mnTextType); + + rPortionItem = aHandler.mPortionItems[2]; + CPPUNIT_ASSERT_EQUAL(OUString("text"), rPortionItem.msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rPortionItem.mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::Hole, rPortionItem.mnTextType); + + // NEW LINE + rPortionItem = aHandler.mPortionItems[3]; + CPPUNIT_ASSERT_EQUAL(OUString("line_break"), rPortionItem.msItemType); + + // Input Field: "Three Four Five" = 16 chars + 1 end input field hidden character = 16 chars + rPortionItem = aHandler.mPortionItems[4]; + CPPUNIT_ASSERT_EQUAL(OUString("text"), rPortionItem.msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), rPortionItem.mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::InputField, rPortionItem.mnTextType); + + // Text "." + rPortionItem = aHandler.mPortionItems[5]; + CPPUNIT_ASSERT_EQUAL(OUString("text"), rPortionItem.msItemType); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), rPortionItem.mnLength); + CPPUNIT_ASSERT_EQUAL(PortionType::Text, rPortionItem.mnTextType); + + // NEW LINE + rPortionItem = aHandler.mPortionItems[6]; + CPPUNIT_ASSERT_EQUAL(OUString("line_break"), rPortionItem.msItemType); + + rPortionItem = aHandler.mPortionItems[7]; + CPPUNIT_ASSERT_EQUAL(OUString("finish"), rPortionItem.msItemType); + } +#endif +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf92648) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf92648.docx"); + SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0); + // Make sure we have ten draw shapes. + // Yes, we have if the left/right pages have different header/footer, + // but if not we have only nine of them: + CPPUNIT_ASSERT_EQUAL(sal_Int32(9), SwTextBoxHelper::getCount(pPage)); + // and the text boxes haven't got zero height + sal_Int32 nCount = 0; + for (const SwFrameFormat* pFormat : *pDoc->GetSpzFrameFormats()) + { + if (!SwTextBoxHelper::isTextBox(pFormat, RES_FLYFRMFMT)) + continue; + SwFormatFrameSize aSize(pFormat->GetFrameSize()); + CPPUNIT_ASSERT(aSize.GetHeight() != 0); + ++nCount; + } + // and we have had five of them. + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), nCount); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf103978_backgroundTextShape) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf103978_backgroundTextShape.docx"); + + // there is only one shape. It has an attached textbox + bool bShapeIsOpaque = getProperty(getShape(1), "Opaque"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Shape is in the foreground", false, bShapeIsOpaque); + sal_Int32 nCount = 0; + for (const SwFrameFormat* pFormat : *pDoc->GetSpzFrameFormats()) + { + if (!SwTextBoxHelper::isTextBox(pFormat, RES_FLYFRMFMT)) + continue; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Textbox syncs the shape's transparency", bShapeIsOpaque, + pFormat->GetOpaque().GetValue()); + ++nCount; + } + //ensure that we don't skip the for loop without an error + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number of TextBoxes", sal_Int32(1), nCount); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf117225) +{ + // Test that saving a document with an embedded object does not leak + // tempfiles in the directory of the target file. + OUString aTargetDirectory + = m_directories.getURLFromWorkdir(u"/CppunitTest/sw_uiwriter7.test.user/"); + OUString aTargetFile = aTargetDirectory + "tdf117225.odt"; + OUString aSourceFile = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf117225.odt"; + osl::File::copy(aSourceFile, aTargetFile); + mxComponent = loadFromDesktop(aTargetFile); + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + int nExpected = CountFilesInDirectory(aTargetDirectory); + xStorable->store(); + int nActual = CountFilesInDirectory(aTargetDirectory); + // nActual was nExpected + 1, i.e. we leaked a tempfile. + CPPUNIT_ASSERT_EQUAL(nExpected, nActual); + + OUString aTargetFileSaveAs = aTargetDirectory + "tdf117225-save-as.odt"; + xStorable->storeAsURL(aTargetFileSaveAs, {}); + ++nExpected; + nActual = CountFilesInDirectory(aTargetDirectory); + // nActual was nExpected + 1, i.e. we leaked a tempfile. + CPPUNIT_ASSERT_EQUAL(nExpected, nActual); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf149184) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "simplefooter.docx"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + // Removing the footer for all styles + pWrtShell->ChangeHeaderOrFooter(u"", false, false, false); + + // export to simplefooter.doc + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence aStoreProps = comphelper::InitPropertySequence({ + { "FilterName", uno::Any(OUString("MS Word 97")) }, + }); + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + + // Without the fix in place, the test fails with: + // [CUT] sw_uiwriter7 + // Segmentation fault (core dumped) + // [_RUN_____] testTdf149184::TestBody + xStorable->storeToURL(aTempFile.GetURL(), aStoreProps); +} + +CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf149089) +{ + createSwDoc(DATA_DIRECTORY, "tdf149089.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nPorLen1 = getXPath(pXmlDoc, "(//SwLinePortion)[1]", "length").toInt32(); + sal_Int32 nPorLen2 = getXPath(pXmlDoc, "(//SwLinePortion)[2]", "length").toInt32(); + sal_Int32 nPorLen3 = getXPath(pXmlDoc, "(//SwLinePortion)[3]", "length").toInt32(); + // Two SwTextPortion and one SwKernPortion + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), nPorLen1); // SwTextPortion "一一 " + CPPUNIT_ASSERT_EQUAL(sal_Int32(12), nPorLen2); // SwTextPortion "BUG 11111111" + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nPorLen3); // SwKernPortion + + sal_Int32 nPorWidth1 = getXPath(pXmlDoc, "(//SwLinePortion)[1]", "width").toInt32(); + sal_Int32 nPorWidth2 = getXPath(pXmlDoc, "(//SwLinePortion)[2]", "width").toInt32(); + sal_Int32 nPorWidth3 = getXPath(pXmlDoc, "(//SwLinePortion)[3]", "width").toInt32(); + sal_Int32 nGridWidth1 = nPorWidth1 / 3; + sal_Int32 nGridWidth2 = (nPorWidth2 + nPorWidth3) / 7; + CPPUNIT_ASSERT_EQUAL(nGridWidth1, nGridWidth2); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/unowriter/data/bookmarkintable.fodt b/sw/qa/extras/unowriter/data/bookmarkintable.fodt new file mode 100644 index 000000000..641200fef --- /dev/null +++ b/sw/qa/extras/unowriter/data/bookmarkintable.fodt @@ -0,0 +1,82 @@ + + + 2020-11-24T13:16:34.2483766402020-11-24T14:47:04.359492742PT2M22S2LibreOfficeDev/7.1.0.0.alpha1$Linux_X86_64 LibreOffice_project/a871df849fad8f923db945cf0606f30603380ef7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + afoob + + + + + + + diff --git a/sw/qa/extras/unowriter/data/image-comment-at-char.odt b/sw/qa/extras/unowriter/data/image-comment-at-char.odt new file mode 100644 index 000000000..ba959d68a Binary files /dev/null and b/sw/qa/extras/unowriter/data/image-comment-at-char.odt differ diff --git a/sw/qa/extras/unowriter/data/renderable-page-position.odt b/sw/qa/extras/unowriter/data/renderable-page-position.odt new file mode 100644 index 000000000..3baddaf21 Binary files /dev/null and b/sw/qa/extras/unowriter/data/renderable-page-position.odt differ diff --git a/sw/qa/extras/unowriter/data/selection-in-table-enum.odt b/sw/qa/extras/unowriter/data/selection-in-table-enum.odt new file mode 100644 index 000000000..bef9b0ea7 Binary files /dev/null and b/sw/qa/extras/unowriter/data/selection-in-table-enum.odt differ diff --git a/sw/qa/extras/unowriter/data/table-line-spacing.docx b/sw/qa/extras/unowriter/data/table-line-spacing.docx new file mode 100644 index 000000000..60621f03c Binary files /dev/null and b/sw/qa/extras/unowriter/data/table-line-spacing.docx differ diff --git a/sw/qa/extras/unowriter/data/tdf134250.fodt b/sw/qa/extras/unowriter/data/tdf134250.fodt new file mode 100644 index 000000000..86aaa140c --- /dev/null +++ b/sw/qa/extras/unowriter/data/tdf134250.fodt @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foo + + + + bar + + + + diff --git a/sw/qa/extras/unowriter/data/tdf134252.fodt b/sw/qa/extras/unowriter/data/tdf134252.fodt new file mode 100644 index 000000000..6e19ac847 --- /dev/null +++ b/sw/qa/extras/unowriter/data/tdf134252.fodt @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bar + + + + + baz + + + + + + foo + + + + diff --git a/sw/qa/extras/unowriter/data/tdf134252_onlytable_protected.fodt b/sw/qa/extras/unowriter/data/tdf134252_onlytable_protected.fodt new file mode 100644 index 000000000..f588fdba0 --- /dev/null +++ b/sw/qa/extras/unowriter/data/tdf134252_onlytable_protected.fodt @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + baz + + + + + foo + + + diff --git a/sw/qa/extras/unowriter/data/test.jpg b/sw/qa/extras/unowriter/data/test.jpg new file mode 100644 index 000000000..12b393569 Binary files /dev/null and b/sw/qa/extras/unowriter/data/test.jpg differ diff --git a/sw/qa/extras/unowriter/data/view-cursor-page-style.fodt b/sw/qa/extras/unowriter/data/view-cursor-page-style.fodt new file mode 100644 index 000000000..c386e72c9 --- /dev/null +++ b/sw/qa/extras/unowriter/data/view-cursor-page-style.fodt @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + 01020304050607080910111213141516 + + + diff --git a/sw/qa/extras/unowriter/data/xautotextgroup.odt b/sw/qa/extras/unowriter/data/xautotextgroup.odt new file mode 100644 index 000000000..e1cb9e7ea Binary files /dev/null and b/sw/qa/extras/unowriter/data/xautotextgroup.odt differ diff --git a/sw/qa/extras/unowriter/unowriter.cxx b/sw/qa/extras/unowriter/unowriter.cxx new file mode 100644 index 000000000..8daa22949 --- /dev/null +++ b/sw/qa/extras/unowriter/unowriter.cxx @@ -0,0 +1,1210 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace ::com::sun::star; + +namespace +{ +constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/unowriter/data/"; + +/// Listener implementation for testPasteListener. +class PasteListener : public cppu::WeakImplHelper +{ + OUString m_aString; + uno::Reference m_xTextGraphicObject; + +public: + void SAL_CALL notifyPasteEvent(const uno::Sequence& rEvent) override; + + OUString& GetString(); + uno::Reference& GetTextGraphicObject(); +}; + +void PasteListener::notifyPasteEvent(const uno::Sequence& rEvent) +{ + comphelper::SequenceAsHashMap aMap(rEvent); + auto it = aMap.find("TextRange"); + if (it != aMap.end()) + { + auto xTextRange = it->second.get>(); + if (xTextRange.is()) + m_aString = xTextRange->getString(); + return; + } + + it = aMap.find("TextGraphicObject"); + if (it != aMap.end()) + { + auto xTextGraphicObject = it->second.get>(); + if (xTextGraphicObject.is()) + m_xTextGraphicObject = xTextGraphicObject; + } +} + +OUString& PasteListener::GetString() { return m_aString; } + +uno::Reference& PasteListener::GetTextGraphicObject() +{ + return m_xTextGraphicObject; +} +} + +/// Test to assert UNO API call results of Writer. +class SwUnoWriter : public SwModelTestBase +{ +public: + SwUnoWriter() + : SwModelTestBase(DATA_DIRECTORY, "writer8") + { + } +}; + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testDefaultCharStyle) +{ + // Create a new document, type a character, set its char style to Emphasis + // and assert the style was set. + loadURL("private:factory/swriter", nullptr); + + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xBodyText = xTextDocument->getText(); + xBodyText->insertString(xBodyText->getStart(), "x", false); + + uno::Reference xCursor(xBodyText->createTextCursor()); + xCursor->goLeft(1, true); + + uno::Reference xCursorProps(xCursor, uno::UNO_QUERY); + xCursorProps->setPropertyValue("CharStyleName", uno::Any(OUString("Emphasis"))); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty(xCursorProps, "CharPosture")); + + // Now reset the char style and assert that the font slant is back to none. + // This resulted in a lang.IllegalArgumentException, Standard was not + // mapped to 'Default Style'. + xCursorProps->setPropertyValue("CharStyleName", uno::Any(OUString("Standard"))); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty(xCursorProps, "CharPosture")); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testInsertStringExpandsHints) +{ + loadURL("private:factory/swriter", nullptr); + uno::Reference const xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference const xText(xTextDocument->getText()); + uno::Reference const xCursor(xText->createTextCursor()); + uno::Reference const xProps(xCursor, uno::UNO_QUERY); + + xText->insertString(xCursor, "ab", false); + xCursor->gotoStart(false); + xCursor->goRight(1, true); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty(xProps, "CharPosture")); + xProps->setPropertyValue("CharPosture", uno::Any(awt::FontSlant_ITALIC)); + xCursor->collapseToEnd(); + xText->insertString(xCursor, "x", false); + xCursor->goLeft(1, true); + CPPUNIT_ASSERT_EQUAL(OUString("x"), xCursor->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, getProperty(xProps, "CharPosture")); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testInsertTextPortionNotExpandsHints) +{ + loadURL("private:factory/swriter", nullptr); + uno::Reference const xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference const xText(xTextDocument->getText()); + uno::Reference const xTextA(xText, uno::UNO_QUERY); + uno::Reference const xCursor(xText->createTextCursor()); + uno::Reference const xProps(xCursor, uno::UNO_QUERY); + + xText->insertString(xCursor, "ab", false); + xCursor->gotoStart(false); + xCursor->goRight(1, true); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty(xProps, "CharPosture")); + xProps->setPropertyValue("CharPosture", uno::Any(awt::FontSlant_ITALIC)); + xCursor->collapseToEnd(); + xTextA->insertTextPortion("x", uno::Sequence(), xCursor); + xCursor->goLeft(1, true); + CPPUNIT_ASSERT_EQUAL(OUString("x"), xCursor->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty(xProps, "CharPosture")); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testInsertTextContentExpandsHints) +{ + loadURL("private:factory/swriter", nullptr); + uno::Reference const xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference const xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference const xText(xTextDocument->getText()); + uno::Reference const xCursor(xText->createTextCursor()); + uno::Reference const xProps(xCursor, uno::UNO_QUERY); + + xText->insertString(xCursor, "ab", false); + xCursor->gotoStart(false); + xCursor->goRight(1, true); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty(xProps, "CharPosture")); + xProps->setPropertyValue("CharPosture", uno::Any(awt::FontSlant_ITALIC)); + xCursor->collapseToEnd(); + uno::Reference const xContent( + xFactory->createInstance("com.sun.star.text.Footnote"), uno::UNO_QUERY); + xText->insertTextContent(xCursor, xContent, false); + xCursor->goLeft(1, true); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xCursor->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, getProperty(xProps, "CharPosture")); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testInsertTextContentWithPropertiesNotExpandsHints) +{ + loadURL("private:factory/swriter", nullptr); + uno::Reference const xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference const xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference const xText(xTextDocument->getText()); + uno::Reference const xTextA(xText, uno::UNO_QUERY); + uno::Reference const xCursor(xText->createTextCursor()); + uno::Reference const xProps(xCursor, uno::UNO_QUERY); + + xText->insertString(xCursor, "ab", false); + xCursor->gotoStart(false); + xCursor->goRight(1, true); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty(xProps, "CharPosture")); + xProps->setPropertyValue("CharPosture", uno::Any(awt::FontSlant_ITALIC)); + xCursor->collapseToEnd(); + uno::Reference const xContent( + xFactory->createInstance("com.sun.star.text.Footnote"), uno::UNO_QUERY); + xTextA->insertTextContentWithProperties(xContent, uno::Sequence(), + xCursor); + xCursor->goLeft(1, true); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xCursor->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty(xProps, "CharPosture")); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testGraphicDescriptorURL) +{ + loadURL("private:factory/swriter", nullptr); + + // Create a graphic object, but don't insert it yet. + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xTextGraphic( + xFactory->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY); + + // Set a URL on it. + OUString aGraphicURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "test.jpg"; + xTextGraphic->setPropertyValue("GraphicURL", uno::Any(aGraphicURL)); + xTextGraphic->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AT_CHARACTER)); + + // Insert it. + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xBodyText = xTextDocument->getText(); + uno::Reference xCursor(xBodyText->createTextCursor()); + uno::Reference xTextContent(xTextGraphic, uno::UNO_QUERY); + xBodyText->insertTextContent(xCursor, xTextContent, false); + + // This failed, the graphic object had no graphic. + auto xGraphic = getProperty>(getShape(1), "Graphic"); + CPPUNIT_ASSERT(xGraphic.is()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testGraphicDescriptorURLBitmap) +{ + loadURL("private:factory/swriter", nullptr); + + // Load a bitmap into the bitmap table. + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xBitmaps( + xFactory->createInstance("com.sun.star.drawing.BitmapTable"), uno::UNO_QUERY); + OUString aGraphicURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "test.jpg"; + xBitmaps->insertByName("test", uno::Any(aGraphicURL)); + + // Create a graphic. + uno::Reference xTextGraphic( + xFactory->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY); + xTextGraphic->setPropertyValue("GraphicURL", xBitmaps->getByName("test")); + xTextGraphic->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AT_CHARACTER)); + + // Insert it. + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xBodyText = xTextDocument->getText(); + uno::Reference xCursor(xBodyText->createTextCursor()); + uno::Reference xTextContent(xTextGraphic, uno::UNO_QUERY); + xBodyText->insertTextContent(xCursor, xTextContent, false); + + // This failed: setting GraphicURL to the result of getByName() did not + // work anymore. + auto xGraphic = getProperty>(getShape(1), "Graphic"); + CPPUNIT_ASSERT(xGraphic.is()); +} + +static bool ensureAutoTextExistsByTitle(const uno::Reference& autoTextGroup, + std::u16string_view autoTextName) +{ + const uno::Sequence aTitles(autoTextGroup->getTitles()); + for (const auto& rTitle : aTitles) + { + if (rTitle == autoTextName) + return true; + } + return false; +} + +static bool ensureAutoTextExistsByName(const uno::Reference& autoTextGroup, + std::u16string_view autoTextName) +{ + const uno::Sequence aTitles(autoTextGroup->getElementNames()); + for (const auto& rTitle : aTitles) + { + if (rTitle == autoTextName) + return true; + } + return false; +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testXAutoTextGroup) +{ + load(mpTestDocumentPath, "xautotextgroup.odt"); + uno::Reference xAutoTextContainer + = text::AutoTextContainer::create(comphelper::getProcessComponentContext()); + + uno::Reference xTextRange = getRun(getParagraph(1), 1); + + static const OUStringLiteral sGroupName = u"TestGroup*1"; + static const OUStringLiteral sTextName = u"TEST"; + static const OUStringLiteral sTextNameNew = u"TESTRENAMED"; + static const OUStringLiteral sTextTitle = u"Test Auto Text"; + static const OUStringLiteral sTextTitleNew = u"Test Auto Text Renamed"; + + // Create new temporary group + uno::Reference xAutoTextGroup + = xAutoTextContainer->insertNewByName(sGroupName); + CPPUNIT_ASSERT_MESSAGE("AutoTextGroup was not found!", xAutoTextGroup.is()); + + // Insert new element and ensure it exists + uno::Reference xAutoTextEntry + = xAutoTextGroup->insertNewByName(sTextName, sTextTitle, xTextRange); + CPPUNIT_ASSERT_MESSAGE("AutoText was not inserted!", xAutoTextEntry.is()); + CPPUNIT_ASSERT_MESSAGE("Can't find newly created AutoText by title!", + ensureAutoTextExistsByTitle(xAutoTextGroup, sTextTitle)); + CPPUNIT_ASSERT_MESSAGE("Can't find newly created AutoText by name!", + ensureAutoTextExistsByName(xAutoTextGroup, sTextName)); + + // Insert once again the same should throw an exception + CPPUNIT_ASSERT_THROW_MESSAGE("We expect an exception on insertion of same AutoText", + xAutoTextGroup->insertNewByName(sTextName, sTextTitle, xTextRange), + container::ElementExistException); + + // Rename it & ensure everything is ok + xAutoTextGroup->renameByName(sTextName, sTextNameNew, sTextTitleNew); + CPPUNIT_ASSERT_MESSAGE("Can't find renamed AutoText by title!", + ensureAutoTextExistsByTitle(xAutoTextGroup, sTextTitleNew)); + CPPUNIT_ASSERT_MESSAGE("Can't find renamed AutoText by name!", + ensureAutoTextExistsByName(xAutoTextGroup, sTextNameNew)); + // Not found by old names + CPPUNIT_ASSERT_MESSAGE("Found AutoText by old title!", + !ensureAutoTextExistsByTitle(xAutoTextGroup, sTextTitle)); + CPPUNIT_ASSERT_MESSAGE("Found AutoText by old name!", + !ensureAutoTextExistsByName(xAutoTextGroup, sTextName)); + + // Rename not existing should throw an exception + CPPUNIT_ASSERT_THROW_MESSAGE( + "We expect an exception on renaming not-existing AutoText", + xAutoTextGroup->renameByName(sTextName, sTextNameNew, sTextTitleNew), + container::ElementExistException); + + // Remove it and ensure it does not exist + xAutoTextGroup->removeByName(sTextNameNew); + CPPUNIT_ASSERT_MESSAGE("AutoText was not removed!", + !ensureAutoTextExistsByTitle(xAutoTextGroup, sTextTitleNew)); + CPPUNIT_ASSERT_MESSAGE("AutoText was not removed!", + !ensureAutoTextExistsByName(xAutoTextGroup, sTextNameNew)); + + // Remove non-existing element should throw an exception + CPPUNIT_ASSERT_THROW_MESSAGE("We expect an exception on removing not-existing AutoText", + xAutoTextGroup->removeByName(sTextName), + container::NoSuchElementException); + + // Remove our temporary group + xAutoTextContainer->removeByName(sGroupName); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testSectionAnchorCopyTableAtStart) +{ + // this contains a section that starts with a table + load(DATA_DIRECTORY, "tdf134250.fodt"); + + uno::Reference const xTextTablesSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference const xTables(xTextTablesSupplier->getTextTables(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + + uno::Reference const xTextSectionsSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference const xSections( + xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + + uno::Reference const xSection(xSections->getByIndex(0), uno::UNO_QUERY); + uno::Reference const xAnchor(xSection->getAnchor()); + CPPUNIT_ASSERT_EQUAL(OUString("foo" SAL_NEWLINE_STRING "bar"), xAnchor->getString()); + + // copy the content of the section to a clipboard document + uno::Reference const xTS( + uno::Reference(mxComponent, uno::UNO_QUERY_THROW)->getCurrentController(), + uno::UNO_QUERY); + uno::Reference const xTTS(xTS, uno::UNO_QUERY); + uno::Reference const xTransferable( + xTTS->getTransferableForTextRange(xAnchor)); + + // check this doesn't throw + CPPUNIT_ASSERT(xAnchor->getText().is()); + CPPUNIT_ASSERT(xAnchor->getStart().is()); + CPPUNIT_ASSERT(xAnchor->getEnd().is()); + + // replace section content + xAnchor->setString("quux"); + + // table in section was deleted, but not section itself + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + CPPUNIT_ASSERT_EQUAL(OUString("\"" + "quux" /*SAL_NEWLINE_STRING*/ "\""), + OUString("\"" + xAnchor->getString() + "\"")); + + // now paste it + uno::Reference const xTVCS(xTS, uno::UNO_QUERY); + uno::Reference const xCursor(xTVCS->getViewCursor()); + xCursor->gotoEnd(false); + xTS->insertTransferable(xTransferable); + + // table in section was pasted, but not section itself + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + xCursor->gotoStart(true); + CPPUNIT_ASSERT_EQUAL(OUString("quux" SAL_NEWLINE_STRING "foo" SAL_NEWLINE_STRING "bar"), + xCursor->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testSectionAnchorCopyTableAtEnd) +{ + // this contains a section that ends with a table (plus another section) + load(DATA_DIRECTORY, "tdf134252.fodt"); + + uno::Reference const xTextTablesSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference const xTables(xTextTablesSupplier->getTextTables(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + + uno::Reference const xTextSectionsSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference const xSections( + xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount()); + + uno::Reference const xSection(xSections->getByIndex(0), uno::UNO_QUERY); + uno::Reference const xAnchor(xSection->getAnchor()); + CPPUNIT_ASSERT_EQUAL(OUString("bar" SAL_NEWLINE_STRING "baz" SAL_NEWLINE_STRING), + xAnchor->getString()); + + // copy the content of the section to a clipboard document + uno::Reference const xTS( + uno::Reference(mxComponent, uno::UNO_QUERY_THROW)->getCurrentController(), + uno::UNO_QUERY); + uno::Reference const xTTS(xTS, uno::UNO_QUERY); + uno::Reference const xTransferable( + xTTS->getTransferableForTextRange(xAnchor)); + + // check this doesn't throw + CPPUNIT_ASSERT(xAnchor->getText().is()); + CPPUNIT_ASSERT(xAnchor->getStart().is()); + CPPUNIT_ASSERT(xAnchor->getEnd().is()); + + // replace section content + xAnchor->setString("quux"); + + // table in section was deleted, but not section itself + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount()); + CPPUNIT_ASSERT_EQUAL(OUString("\"" + "quux" /*SAL_NEWLINE_STRING*/ "\""), + OUString("\"" + xAnchor->getString() + "\"")); + + // now paste it + uno::Reference const xTVCS(xTS, uno::UNO_QUERY); + uno::Reference const xCursor(xTVCS->getViewCursor()); + xCursor->gotoEnd(false); + xTS->insertTransferable(xTransferable); + + // table in section was pasted, but not section itself + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount()); + // note: this selects the 2nd section because it calls StartOfSection() + // not SttEndDoc() like it should? + xCursor->gotoStart(true); + CPPUNIT_ASSERT_EQUAL(OUString(/*"quux" SAL_NEWLINE_STRING */ + "foobar" SAL_NEWLINE_STRING "baz" SAL_NEWLINE_STRING), + xCursor->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testSectionAnchorCopyTable) +{ + // this contains a section that ends with a table (plus another section) + load(DATA_DIRECTORY, "tdf134252_onlytable_protected.fodt"); + + uno::Reference const xTextTablesSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference const xTables(xTextTablesSupplier->getTextTables(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + + uno::Reference const xTextSectionsSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference const xSections( + xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + + uno::Reference const xSection(xSections->getByIndex(0), uno::UNO_QUERY); + uno::Reference const xAnchor(xSection->getAnchor()); + CPPUNIT_ASSERT_EQUAL(OUString("baz" SAL_NEWLINE_STRING), xAnchor->getString()); + + // copy the content of the section to a clipboard document + uno::Reference const xTS( + uno::Reference(mxComponent, uno::UNO_QUERY_THROW)->getCurrentController(), + uno::UNO_QUERY); + uno::Reference const xTTS(xTS, uno::UNO_QUERY); + uno::Reference const xTransferable( + xTTS->getTransferableForTextRange(xAnchor)); + + // check this doesn't throw + CPPUNIT_ASSERT(xAnchor->getText().is()); + CPPUNIT_ASSERT(xAnchor->getStart().is()); + CPPUNIT_ASSERT(xAnchor->getEnd().is()); + + // replace section content + xAnchor->setString("quux"); + + // table in section was deleted, but not section itself + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + CPPUNIT_ASSERT_EQUAL(OUString("\"" + "quux" /*SAL_NEWLINE_STRING*/ "\""), + OUString("\"" + xAnchor->getString() + "\"")); + + // now paste it + uno::Reference const xTVCS(xTS, uno::UNO_QUERY); + uno::Reference const xCursor(xTVCS->getViewCursor()); + xCursor->gotoEnd(false); + xTS->insertTransferable(xTransferable); + + // table in section was pasted, but not section itself + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount()); + xCursor->gotoStart(true); + CPPUNIT_ASSERT_EQUAL( + OUString("quux" SAL_NEWLINE_STRING "foo" SAL_NEWLINE_STRING "baz" SAL_NEWLINE_STRING), + xCursor->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testTextRangeInTable) +{ + load(DATA_DIRECTORY, "bookmarkintable.fodt"); + + uno::Reference const xBS(mxComponent, uno::UNO_QUERY); + uno::Reference const xMarks(xBS->getBookmarks()); + uno::Reference const xMark(xMarks->getByName("Bookmark 1"), uno::UNO_QUERY); + uno::Reference const xAnchor(xMark->getAnchor(), uno::UNO_QUERY); + uno::Reference const xEnum(xAnchor->createEnumeration()); + uno::Reference const xPara(xEnum->nextElement(), uno::UNO_QUERY); + // not the top-level table! + CPPUNIT_ASSERT(!xPara->supportsService("com.sun.star.text.TextTable")); + CPPUNIT_ASSERT(!xEnum->hasMoreElements()); + uno::Reference const xParaEA(xPara, uno::UNO_QUERY); + uno::Reference const xPortions(xParaEA->createEnumeration()); + uno::Reference const xP1(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Bookmark"), getProperty(xP1, "TextPortionType")); + uno::Reference const xP2(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty(xP2, "TextPortionType")); + uno::Reference const xP2R(xP2, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("foo"), xP2R->getString()); + uno::Reference const xP3(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Bookmark"), getProperty(xP3, "TextPortionType")); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testXURI) +{ + uno::Reference xContext(::comphelper::getProcessComponentContext()); + + // createKnown() + uno::Reference xURIcreateKnown( + rdf::URI::createKnown(xContext, rdf::URIs::ODF_PREFIX), uno::UNO_SET_THROW); + CPPUNIT_ASSERT(xURIcreateKnown.is()); + CPPUNIT_ASSERT_EQUAL(OUString("http://docs.oasis-open.org/ns/office/1.2/meta/odf#"), + xURIcreateKnown->getNamespace()); + CPPUNIT_ASSERT_EQUAL(OUString("prefix"), xURIcreateKnown->getLocalName()); + CPPUNIT_ASSERT_EQUAL(OUString("http://docs.oasis-open.org/ns/office/1.2/meta/odf#prefix"), + xURIcreateKnown->getStringValue()); + + // createKnown() with invalid constant + CPPUNIT_ASSERT_THROW_MESSAGE("We expect an exception on invalid constant", + rdf::URI::createKnown(xContext, 12345), + lang::IllegalArgumentException); + + // create() + uno::Reference xURIcreate( + rdf::URI::create(xContext, "http://example.com/url#somedata"), uno::UNO_SET_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/url#"), xURIcreate->getNamespace()); + CPPUNIT_ASSERT_EQUAL(OUString("somedata"), xURIcreate->getLocalName()); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/url#somedata"), xURIcreate->getStringValue()); + + // create() without local name split with "/" + uno::Reference xURIcreate2(rdf::URI::create(xContext, "http://example.com/url"), + uno::UNO_SET_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/"), xURIcreate2->getNamespace()); + CPPUNIT_ASSERT_EQUAL(OUString("url"), xURIcreate2->getLocalName()); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/url"), xURIcreate2->getStringValue()); + + // create() without prefix + uno::Reference xURIcreate3(rdf::URI::create(xContext, "#somedata"), + uno::UNO_SET_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("#"), xURIcreate3->getNamespace()); + CPPUNIT_ASSERT_EQUAL(OUString("somedata"), xURIcreate3->getLocalName()); + CPPUNIT_ASSERT_EQUAL(OUString("#somedata"), xURIcreate3->getStringValue()); + + // create() with invalid URI + CPPUNIT_ASSERT_THROW_MESSAGE("We expect an exception on invalid URI", + rdf::URI::create(xContext, "some junk and not URI"), + lang::IllegalArgumentException); + + // createNS() + uno::Reference xURIcreateNS( + rdf::URI::createNS(xContext, "http://example.com/url#", "somedata"), uno::UNO_SET_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/url#"), xURIcreateNS->getNamespace()); + CPPUNIT_ASSERT_EQUAL(OUString("somedata"), xURIcreateNS->getLocalName()); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/url#somedata"), + xURIcreateNS->getStringValue()); + + // TODO: What's going on here? Is such usecase valid? + uno::Reference xURIcreateNS2( + rdf::URI::createNS(xContext, "http://example.com/url", "somedata"), uno::UNO_SET_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/"), xURIcreateNS2->getNamespace()); + CPPUNIT_ASSERT_EQUAL(OUString("urlsomedata"), xURIcreateNS2->getLocalName()); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/urlsomedata"), + xURIcreateNS2->getStringValue()); + + // createNS() some invalid cases + CPPUNIT_ASSERT_THROW_MESSAGE("We expect an exception on invalid URI", + rdf::URI::createNS(xContext, "bla", "bla"), + lang::IllegalArgumentException); + + CPPUNIT_ASSERT_THROW_MESSAGE("We expect an exception on invalid URI", + rdf::URI::createNS(xContext, OUString(), OUString()), + lang::IllegalArgumentException); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testSetPagePrintSettings) +{ + // Create an empty new document with a single char + loadURL("private:factory/swriter", nullptr); + + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xBodyText = xTextDocument->getText(); + xBodyText->insertString(xBodyText->getStart(), "x", false); + + uno::Reference xPagePrintable(mxComponent, uno::UNO_QUERY); + + // set some stuff, try to get it back + uno::Sequence aProps{ + comphelper::makePropertyValue("PageColumns", sal_Int16(2)), + comphelper::makePropertyValue("IsLandscape", true) + }; + + xPagePrintable->setPagePrintSettings(aProps); + const comphelper::SequenceAsHashMap aMap(xPagePrintable->getPagePrintSettings()); + + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), aMap.getValue("PageColumns").get()); + CPPUNIT_ASSERT_EQUAL(true, aMap.getValue("IsLandscape").get()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testDeleteFlyAtCharAtStart) +{ + loadURL("private:factory/swriter", nullptr); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* const pWrtShell(pTextDoc->GetDocShell()->GetWrtShell()); + SwDoc* const pDoc(pWrtShell->GetDoc()); + + // insert some text + IDocumentContentOperations& rIDCO(pDoc->getIDocumentContentOperations()); + rIDCO.InsertString(*pWrtShell->GetCursor(), "foo bar baz"); + + // insert fly anchored at start of body text + pWrtShell->ClearMark(); + pWrtShell->SttEndDoc(true); + SfxItemSet frameSet(pDoc->GetAttrPool(), svl::Items); + SfxItemSet grfSet(pDoc->GetAttrPool(), svl::Items); + SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR); + frameSet.Put(anchor); + GraphicObject grf; + CPPUNIT_ASSERT(rIDCO.InsertGraphicObject(*pWrtShell->GetCursor(), grf, &frameSet, &grfSet)); + + // check fly + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + uno::Reference const xShape(getShape(1), uno::UNO_QUERY); + // anchored at start of body text? + uno::Reference const xText(pTextDoc->getText()); + uno::Reference const xTextRC(xText, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), + xTextRC->compareRegionStarts(xText->getStart(), xShape->getAnchor())); + + // delete 1st character + uno::Reference const xCursor(xText->createTextCursor()); + xCursor->goRight(1, true); + xCursor->setString(""); + + // there is exactly one fly + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + + // select entire body text + xCursor->gotoStart(true); + xCursor->gotoEnd(true); + xCursor->setString(""); + + // there is no fly + CPPUNIT_ASSERT_EQUAL(0, getShapes()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testSelectionInTableEnum) +{ + load(mpTestDocumentPath, "selection-in-table-enum.odt"); + // Select the A1 cell's text. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + pWrtShell->Down(/*bSelect=*/false); + pWrtShell->EndPara(/*bSelect=*/true); + CPPUNIT_ASSERT_EQUAL(OUString("A1"), + pWrtShell->GetCursor()->GetNode().GetTextNode()->GetText()); + + // Access the selection. + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(xModel.is()); + uno::Reference xSelections(xModel->getCurrentSelection(), + uno::UNO_QUERY); + CPPUNIT_ASSERT(xSelections.is()); + uno::Reference xSelection(xSelections->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xSelection.is()); + + // Enumerate paragraphs in the selection. + uno::Reference xCursor( + xSelection->getText()->createTextCursorByRange(xSelection), uno::UNO_QUERY); + CPPUNIT_ASSERT(xCursor.is()); + uno::Reference xEnum = xCursor->createEnumeration(); + xEnum->nextElement(); + // Without the accompanying fix in place, this test would have failed: i.e. + // the enumeration contained a second paragraph, even if the cell has only + // one paragraph. + CPPUNIT_ASSERT(!xEnum->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testSelectionInTableEnumEnd) +{ + load(mpTestDocumentPath, "selection-in-table-enum.odt"); + // Select from "Before" till the table end. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + pWrtShell->Down(/*bSelect=*/true); + + // Access the selection. + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(xModel.is()); + uno::Reference xSelections(xModel->getCurrentSelection(), + uno::UNO_QUERY); + CPPUNIT_ASSERT(xSelections.is()); + uno::Reference xSelection(xSelections->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xSelection.is()); + CPPUNIT_ASSERT_EQUAL(OUString("Before" SAL_NEWLINE_STRING "A1" SAL_NEWLINE_STRING + "B1" SAL_NEWLINE_STRING "C2" SAL_NEWLINE_STRING + "A2" SAL_NEWLINE_STRING "B2" SAL_NEWLINE_STRING + "C2" SAL_NEWLINE_STRING), + xSelection->getString()); + + // Enumerate paragraphs in the selection. + uno::Reference xCursor( + xSelection->getText()->createTextCursorByRange(xSelection), uno::UNO_QUERY); + CPPUNIT_ASSERT(xCursor.is()); + uno::Reference xEnum = xCursor->createEnumeration(); + // Before. + xEnum->nextElement(); + // Table. + xEnum->nextElement(); + // Without the accompanying fix in place, this test would have failed: i.e. + // the enumeration contained the paragraph after the table, but no part of + // that paragraph was part of the selection. + CPPUNIT_ASSERT(!xEnum->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testRenderablePagePosition) +{ + load(mpTestDocumentPath, "renderable-page-position.odt"); + // Make sure that the document has 2 pages. + uno::Reference xRenderable(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(mxComponent.is()); + + uno::Any aSelection(mxComponent); + + uno::Reference xToolkit = VCLUnoHelper::CreateToolkit(); + uno::Reference xDevice(xToolkit->createScreenCompatibleDevice(32, 32)); + + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xController = xModel->getCurrentController(); + + beans::PropertyValues aRenderOptions = { + comphelper::makePropertyValue("IsPrinter", true), + comphelper::makePropertyValue("RenderDevice", xDevice), + comphelper::makePropertyValue("View", xController), + comphelper::makePropertyValue("RenderToGraphic", true), + }; + + sal_Int32 nPages = xRenderable->getRendererCount(aSelection, aRenderOptions); + CPPUNIT_ASSERT_EQUAL(static_cast(2), nPages); + + // Make sure that the first page has some offset. + comphelper::SequenceAsHashMap aRenderer1( + xRenderable->getRenderer(0, aSelection, aRenderOptions)); + // Without the accompanying fix in place, this test would have failed: i.e. + // there was no PagePos key in this map. + awt::Point aPosition1 = aRenderer1["PagePos"].get(); + CPPUNIT_ASSERT_GREATER(static_cast(0), aPosition1.X); + CPPUNIT_ASSERT_GREATER(static_cast(0), aPosition1.Y); + + // Make sure that the second page is below the first one. + comphelper::SequenceAsHashMap aRenderer2( + xRenderable->getRenderer(1, aSelection, aRenderOptions)); + awt::Point aPosition2 = aRenderer2["PagePos"].get(); + CPPUNIT_ASSERT_GREATER(static_cast(0), aPosition2.X); + CPPUNIT_ASSERT_GREATER(aPosition1.Y, aPosition2.Y); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testPasteListener) +{ + loadURL("private:factory/swriter", nullptr); + + // Insert initial string. + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xBodyText = xTextDocument->getText(); + xBodyText->insertString(xBodyText->getStart(), "ABCDEF", false); + + // Add paste listener. + uno::Reference xBroadcaster(mxComponent, uno::UNO_QUERY); + uno::Reference xListener(new PasteListener); + auto pListener = static_cast(xListener.get()); + xBroadcaster->addPasteEventListener(xListener); + + // Cut "DE" and then paste it. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 3, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 2, /*bBasicCall=*/false); + rtl::Reference pTransfer = new SwTransferable(*pWrtShell); + pTransfer->Cut(); + TransferableDataHelper aHelper(pTransfer); + SwTransferable::Paste(*pWrtShell, aHelper); + // Without working listener registration in place, this test would have + // failed with 'Expected: DE; Actual:', i.e. the paste listener was not + // invoked. + CPPUNIT_ASSERT_EQUAL(OUString("DE"), pListener->GetString()); + + // Make sure that paste did not overwrite anything. + CPPUNIT_ASSERT_EQUAL(OUString("ABCDEF"), xBodyText->getString()); + + // Paste again, this time overwriting "BC". + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 4, /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 2, /*bBasicCall=*/false); + pListener->GetString().clear(); + SwTransferable::Paste(*pWrtShell, aHelper); + CPPUNIT_ASSERT_EQUAL(OUString("DE"), pListener->GetString()); + + // Make sure that paste overwrote "BC". + CPPUNIT_ASSERT_EQUAL(OUString("ADEDEF"), xBodyText->getString()); + + // Test image paste. + SwView& rView = pWrtShell->GetView(); + OUString aGraphicURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "test.jpg"; + rView.InsertGraphic(aGraphicURL, OUString(), /*bAsLink=*/false, + &GraphicFilter::GetGraphicFilter()); + + // Test that the pasted image is anchored as-char. + SwFlyFrame* pFly = pWrtShell->GetSelectedFlyFrame(); + CPPUNIT_ASSERT(pFly); + SwFrameFormat* pFlyFormat = pFly->GetFormat(); + CPPUNIT_ASSERT(pFlyFormat); + RndStdIds eFlyAnchor = pFlyFormat->GetAnchor().GetAnchorId(); + // Without the working image listener in place, this test would have + // failed, eFlyAnchor was FLY_AT_PARA. + CPPUNIT_ASSERT_EQUAL(RndStdIds::FLY_AT_CHAR, eFlyAnchor); + + pTransfer->Cut(); + pListener->GetString().clear(); + SwTransferable::Paste(*pWrtShell, aHelper); + // Without the working image listener in place, this test would have + // failed, the listener was not invoked in case of a graphic paste. + CPPUNIT_ASSERT(pListener->GetTextGraphicObject().is()); + CPPUNIT_ASSERT(pListener->GetString().isEmpty()); + + // Deregister paste listener, make sure it's not invoked. + xBroadcaster->removePasteEventListener(xListener); + pListener->GetString().clear(); + SwTransferable::Paste(*pWrtShell, aHelper); + CPPUNIT_ASSERT(pListener->GetString().isEmpty()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testImageCommentAtChar) +{ + // Load a document with an at-char image in it (and a comment on the image). + load(mpTestDocumentPath, "image-comment-at-char.odt"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + + // Verify that we have an annotation mark (comment with a text range) in the document. + // Without the accompanying fix in place, this test would have failed, as comments lost their + // ranges on load when their range only covered the placeholder character of the comment (which + // is also the anchor position of the image). + IDocumentMarkAccess* pMarks = pDoc->getIDocumentMarkAccess(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), pMarks->getAnnotationMarksCount()); + + uno::Reference xPara = getParagraph(1); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), + getProperty(getRun(xPara, 1), "TextPortionType")); + // Without the accompanying fix in place, this test would have failed with 'Expected: + // Annotation; Actual: Frame', i.e. the comment-start portion was after the commented image. + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), + getProperty(getRun(xPara, 2), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), + getProperty(getRun(xPara, 3), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), + getProperty(getRun(xPara, 4), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), + getProperty(getRun(xPara, 5), "TextPortionType")); + + // Without the accompanying fix in place, this test would have failed with 'Expected: + // 5892; Actual: 1738', i.e. the anchor pos was between the "aaa" and "bbb" portions, not at the + // center of the page (horizontally) where the image is. On macOS, though, with the fix in + // place the actual value consistently is even greater with 6283 now instead of 5892, for + // whatever reason. + SwView* pView = pDoc->GetDocShell()->GetView(); + SwPostItMgr* pPostItMgr = pView->GetPostItMgr(); + for (const auto& pItem : *pPostItMgr) + { + const SwRect& rAnchor = pItem->mpPostIt->GetAnchorRect(); + CPPUNIT_ASSERT_GREATEREQUAL(static_cast(5892), rAnchor.Left()); + } +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testChapterNumberingCharStyle) +{ + loadURL("private:factory/swriter", nullptr); + + uno::Reference xDoc(mxComponent, uno::UNO_QUERY); + uno::Reference xStyle( + xDoc->createInstance("com.sun.star.style.CharacterStyle"), uno::UNO_QUERY); + uno::Reference xStyleN(xStyle, uno::UNO_QUERY); + xStyle->setPropertyValue("CharColor", uno::Any(sal_Int32(0x00FF0000))); + uno::Reference xSFS(mxComponent, uno::UNO_QUERY); + uno::Reference xStyles( + xSFS->getStyleFamilies()->getByName("CharacterStyles"), uno::UNO_QUERY); + xStyles->insertByName("red", uno::Any(xStyle)); + + uno::Reference xCNS(mxComponent, uno::UNO_QUERY); + uno::Reference xOutline(xCNS->getChapterNumberingRules()); + { + comphelper::SequenceAsHashMap hashMap(xOutline->getByIndex(0)); + hashMap["CharStyleName"] <<= OUString("red"); + uno::Sequence props; + hashMap >> props; + xOutline->replaceByIndex(0, uno::Any(props)); + } + // now rename the style + xStyleN->setName("reddishred"); + { + comphelper::SequenceAsHashMap hashMap(xOutline->getByIndex(0)); + + // tdf#137810 this failed, was old value "red" + CPPUNIT_ASSERT_EQUAL(OUString("reddishred"), hashMap["CharStyleName"].get()); + } +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testViewCursorPageStyle) +{ + // Load a document with 2 pages, but a single paragraph. + load(mpTestDocumentPath, "view-cursor-page-style.fodt"); + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(xModel.is()); + uno::Reference xController(xModel->getCurrentController(), + uno::UNO_QUERY); + CPPUNIT_ASSERT(xController.is()); + uno::Reference xViewCursor(xController->getViewCursor(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xViewCursor.is()); + + // Go to the first page, which has an explicit page style. + xViewCursor->jumpToPage(1); + OUString aActualPageStyleName = getProperty(xViewCursor, "PageStyleName"); + CPPUNIT_ASSERT_EQUAL(OUString("First Page"), aActualPageStyleName); + + // Go to the second page, which is still the first paragraph, but the page style is different, + // as the explicit 'First Page' page style has a next style defined (Standard). + xViewCursor->jumpToPage(2); + aActualPageStyleName = getProperty(xViewCursor, "PageStyleName"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: Standard + // - Actual : First Page + // i.e. the cursor position was determined only based on the node index, ignoring the content + // index. + CPPUNIT_ASSERT_EQUAL(OUString("Standard"), aActualPageStyleName); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testXTextCursor_setPropertyValues) +{ + // Create a new document, type a character, pass a set of property/value pairs consisting of one + // unknown property and CharStyleName, assert that it threw UnknownPropertyException (actually + // wrapped into WrappedTargetException), and assert the style was set, not discarded. + loadURL("private:factory/swriter", nullptr); + + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xBodyText = xTextDocument->getText(); + xBodyText->insertString(xBodyText->getStart(), "x", false); + + uno::Reference xCursor(xBodyText->createTextCursor()); + xCursor->goLeft(1, true); + + uno::Reference xCursorProps(xCursor, uno::UNO_QUERY); + uno::Sequence aPropNames = { "OneUnknownProperty", "CharStyleName" }; + uno::Sequence aPropValues = { uno::Any(), uno::Any(OUString("Emphasis")) }; + CPPUNIT_ASSERT_THROW(xCursorProps->setPropertyValues(aPropNames, aPropValues), + lang::WrappedTargetException); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), + getProperty(xCursorProps, "CharStyleName")); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testShapeAllowOverlap) +{ + // Test the AllowOverlap frame/shape property. + + // Create a new document and insert a rectangle. + loadURL("private:factory/swriter", nullptr); + uno::Reference xDocument(mxComponent, uno::UNO_QUERY); + awt::Point aPoint(1000, 1000); + awt::Size aSize(10000, 10000); + uno::Reference xShape( + xDocument->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY); + xShape->setPosition(aPoint); + xShape->setSize(aSize); + uno::Reference xDrawPageSupplier(xDocument, uno::UNO_QUERY); + xDrawPageSupplier->getDrawPage()->add(xShape); + + // The property is on by default, turn it off & verify. + uno::Reference xShapeProperties(xShape, uno::UNO_QUERY); + xShapeProperties->setPropertyValue("AllowOverlap", uno::Any(false)); + CPPUNIT_ASSERT(!getProperty(xShapeProperties, "AllowOverlap")); + + // Turn it back to on & verify. + xShapeProperties->setPropertyValue("AllowOverlap", uno::Any(true)); + CPPUNIT_ASSERT(getProperty(xShapeProperties, "AllowOverlap")); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testTextConvertToTableLineSpacing) +{ + // Load a document which has a table with a single cell. + // The cell has both a table style and a paragraph style, with different line spacing + // heights. + load(mpTestDocumentPath, "table-line-spacing.docx"); + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell = xTable->getCellByName("A1"); + uno::Reference xCellText(xCell, uno::UNO_QUERY); + uno::Reference xParagraph = getParagraphOfText(1, xCellText); + style::LineSpacing aLineSpacing + = getProperty(xParagraph, "ParaLineSpacing"); + // Make sure that we take the line spacing from the paragraph style, not from the table style. + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 388 + // - Actual : 635 + // I.e. the 360 twips line spacing was taken from the table style, not the 220 twips one from + // the paragraph style. + CPPUNIT_ASSERT_EQUAL(static_cast(convertTwipToMm100(220)), aLineSpacing.Height); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testMultiSelect) +{ + // Create a new document and add a text with several repeated sequences. + loadURL("private:factory/swriter", nullptr); + uno::Reference xTextDocument(mxComponent, css::uno::UNO_QUERY_THROW); + auto xSimpleText = xTextDocument->getText(); + xSimpleText->insertString(xSimpleText->getStart(), "Abc aBc abC", false); + + // Create a search descriptor and find all occurencies of search string + css::uno::Reference xSearchable(mxComponent, css::uno::UNO_QUERY_THROW); + auto xSearchDescriptor = xSearchable->createSearchDescriptor(); + xSearchDescriptor->setPropertyValue("SearchStyles", css::uno::Any(false)); + xSearchDescriptor->setPropertyValue("SearchCaseSensitive", css::uno::Any(false)); + xSearchDescriptor->setPropertyValue("SearchBackwards", css::uno::Any(true)); + xSearchDescriptor->setPropertyValue("SearchRegularExpression", css::uno::Any(false)); + xSearchDescriptor->setSearchString("abc"); + auto xSearchResult = xSearchable->findAll(xSearchDescriptor); + + // Select them all + auto xController = xTextDocument->getCurrentController(); + css::uno::Reference xSelectionSupplier( + xController, css::uno::UNO_QUERY_THROW); + xSelectionSupplier->select(css::uno::Any(xSearchResult)); + css::uno::Reference xSelection(xSelectionSupplier->getSelection(), + css::uno::UNO_QUERY_THROW); + // Now check that they all are selected in the reverse order ("SearchBackwards"). + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xSelection->getCount()); + css::uno::Reference xTextRange(xSelection->getByIndex(0), + css::uno::UNO_QUERY_THROW); + // For #0, result was empty (cursor was put before the last occurrence without selection) + CPPUNIT_ASSERT_EQUAL(OUString("abC"), xTextRange->getString()); + xTextRange.set(xSelection->getByIndex(1), css::uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("aBc"), xTextRange->getString()); + xTextRange.set(xSelection->getByIndex(2), css::uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("Abc"), xTextRange->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testTransparentText) +{ + // Test the CharTransparence text portion property. + + // Create a new document. + loadURL("private:factory/swriter", nullptr); + + // Set a custom transparency. + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + sal_Int16 nExpected = 42; + xParagraph->setPropertyValue("CharTransparence", uno::Any(nExpected)); + + // Get the transparency & verify. + CPPUNIT_ASSERT_EQUAL(nExpected, getProperty(xParagraph, "CharTransparence")); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testTdf129839) +{ + // Create a new document and add a table + loadURL("private:factory/swriter", nullptr); + css::uno::Reference xTextDocument(mxComponent, + css::uno::UNO_QUERY_THROW); + css::uno::Reference xFac(xTextDocument, + css::uno::UNO_QUERY_THROW); + css::uno::Reference xTable( + xFac->createInstance("com.sun.star.text.TextTable"), css::uno::UNO_QUERY_THROW); + xTable->initialize(4, 4); + auto xSimpleText = xTextDocument->getText(); + xSimpleText->insertTextContent(xSimpleText->createTextCursor(), xTable, true); + css::uno::Reference xTableCellRange(xTable, css::uno::UNO_QUERY_THROW); + // Get instance of SwXCellRange + css::uno::Reference xCellRange( + xTableCellRange->getCellRangeByPosition(0, 0, 1, 1), css::uno::UNO_QUERY_THROW); + // Test retrieval of VertOrient property - this crashed + css::uno::Any aOrient = xCellRange->getPropertyValue("VertOrient"); + CPPUNIT_ASSERT_EQUAL(css::uno::Any(css::text::VertOrientation::NONE), aOrient); +} + +CPPUNIT_TEST_FIXTURE(SwUnoWriter, testTdf129841) +{ + // Create a new document and add a table + loadURL("private:factory/swriter", nullptr); + css::uno::Reference xTextDocument(mxComponent, + css::uno::UNO_QUERY_THROW); + css::uno::Reference xFac(xTextDocument, + css::uno::UNO_QUERY_THROW); + css::uno::Reference xTable( + xFac->createInstance("com.sun.star.text.TextTable"), css::uno::UNO_QUERY_THROW); + xTable->initialize(4, 4); + auto xSimpleText = xTextDocument->getText(); + xSimpleText->insertTextContent(xSimpleText->createTextCursor(), xTable, true); + // Get SwXTextTableCursor + css::uno::Reference xTableCursor(xTable->createCursorByCellName("A1"), + css::uno::UNO_QUERY_THROW); + css::uno::Reference xTableCellRange(xTable, css::uno::UNO_QUERY_THROW); + // Get SwXCellRange for the same cell + css::uno::Reference xCellRange( + xTableCellRange->getCellRangeByName("A1:A1"), css::uno::UNO_QUERY_THROW); + static const OUStringLiteral sBackColor = u"BackColor"; + // Apply background color to table cursor, and read background color from cell range + css::uno::Any aRefColor(sal_Int32(0x00FF0000)); + xTableCursor->setPropertyValue(sBackColor, aRefColor); + css::uno::Any aColor = xCellRange->getPropertyValue(sBackColor); + // This failed + CPPUNIT_ASSERT_EQUAL(aRefColor, aColor); + // Now the other way round + aRefColor <<= sal_Int32(0x0000FF00); + xCellRange->setPropertyValue(sBackColor, aRefColor); + aColor = xTableCursor->getPropertyValue(sBackColor); + CPPUNIT_ASSERT_EQUAL(aRefColor, aColor); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ww8export/data/all_gaps_word.doc b/sw/qa/extras/ww8export/data/all_gaps_word.doc new file mode 100644 index 000000000..d5c61a6c4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/all_gaps_word.doc differ diff --git a/sw/qa/extras/ww8export/data/arabic-zero-numbering.doc b/sw/qa/extras/ww8export/data/arabic-zero-numbering.doc new file mode 100644 index 000000000..c198c4aa4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/arabic-zero-numbering.doc differ diff --git a/sw/qa/extras/ww8export/data/bnc636128.doc b/sw/qa/extras/ww8export/data/bnc636128.doc new file mode 100644 index 000000000..5f92c3e2e Binary files /dev/null and b/sw/qa/extras/ww8export/data/bnc636128.doc differ diff --git a/sw/qa/extras/ww8export/data/bnc787942.doc b/sw/qa/extras/ww8export/data/bnc787942.doc new file mode 100644 index 000000000..06b2c39f2 Binary files /dev/null and b/sw/qa/extras/ww8export/data/bnc787942.doc differ diff --git a/sw/qa/extras/ww8export/data/bnc821208.doc b/sw/qa/extras/ww8export/data/bnc821208.doc new file mode 100644 index 000000000..cfe76806e Binary files /dev/null and b/sw/qa/extras/ww8export/data/bnc821208.doc differ diff --git a/sw/qa/extras/ww8export/data/bnc863018b.doc b/sw/qa/extras/ww8export/data/bnc863018b.doc new file mode 100644 index 000000000..c9744b856 Binary files /dev/null and b/sw/qa/extras/ww8export/data/bnc863018b.doc differ diff --git a/sw/qa/extras/ww8export/data/bordercolours.doc b/sw/qa/extras/ww8export/data/bordercolours.doc new file mode 100644 index 000000000..c442223ea Binary files /dev/null and b/sw/qa/extras/ww8export/data/bordercolours.doc differ diff --git a/sw/qa/extras/ww8export/data/bordercolours.odt b/sw/qa/extras/ww8export/data/bordercolours.odt new file mode 100644 index 000000000..f34d595f3 Binary files /dev/null and b/sw/qa/extras/ww8export/data/bordercolours.odt differ diff --git a/sw/qa/extras/ww8export/data/btlr-cell.doc b/sw/qa/extras/ww8export/data/btlr-cell.doc new file mode 100644 index 000000000..f99e9e67e Binary files /dev/null and b/sw/qa/extras/ww8export/data/btlr-cell.doc differ diff --git a/sw/qa/extras/ww8export/data/btlr-frame.odt b/sw/qa/extras/ww8export/data/btlr-frame.odt new file mode 100644 index 000000000..31cb03849 Binary files /dev/null and b/sw/qa/extras/ww8export/data/btlr-frame.odt differ diff --git a/sw/qa/extras/ww8export/data/cell-bg-color.odt b/sw/qa/extras/ww8export/data/cell-bg-color.odt new file mode 100644 index 000000000..3565f40c2 Binary files /dev/null and b/sw/qa/extras/ww8export/data/cell-bg-color.odt differ diff --git a/sw/qa/extras/ww8export/data/charborder.odt b/sw/qa/extras/ww8export/data/charborder.odt new file mode 100644 index 000000000..0829c0348 Binary files /dev/null and b/sw/qa/extras/ww8export/data/charborder.odt differ diff --git a/sw/qa/extras/ww8export/data/checkbox_control.odt b/sw/qa/extras/ww8export/data/checkbox_control.odt new file mode 100644 index 000000000..b5281b30e Binary files /dev/null and b/sw/qa/extras/ww8export/data/checkbox_control.odt differ diff --git a/sw/qa/extras/ww8export/data/cjklist30.doc b/sw/qa/extras/ww8export/data/cjklist30.doc new file mode 100644 index 000000000..48f22cf79 Binary files /dev/null and b/sw/qa/extras/ww8export/data/cjklist30.doc differ diff --git a/sw/qa/extras/ww8export/data/cjklist31.doc b/sw/qa/extras/ww8export/data/cjklist31.doc new file mode 100644 index 000000000..4a7d3e7e1 Binary files /dev/null and b/sw/qa/extras/ww8export/data/cjklist31.doc differ diff --git a/sw/qa/extras/ww8export/data/cjklist34.doc b/sw/qa/extras/ww8export/data/cjklist34.doc new file mode 100644 index 000000000..551fc8952 Binary files /dev/null and b/sw/qa/extras/ww8export/data/cjklist34.doc differ diff --git a/sw/qa/extras/ww8export/data/cjklist35.doc b/sw/qa/extras/ww8export/data/cjklist35.doc new file mode 100644 index 000000000..33d247029 Binary files /dev/null and b/sw/qa/extras/ww8export/data/cjklist35.doc differ diff --git a/sw/qa/extras/ww8export/data/clearing-break.doc b/sw/qa/extras/ww8export/data/clearing-break.doc new file mode 100644 index 000000000..87b51128d Binary files /dev/null and b/sw/qa/extras/ww8export/data/clearing-break.doc differ diff --git a/sw/qa/extras/ww8export/data/comment-export.odt b/sw/qa/extras/ww8export/data/comment-export.odt new file mode 100644 index 000000000..66873d869 Binary files /dev/null and b/sw/qa/extras/ww8export/data/comment-export.odt differ diff --git a/sw/qa/extras/ww8export/data/commented-table.doc b/sw/qa/extras/ww8export/data/commented-table.doc new file mode 100644 index 000000000..049c7e3a4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/commented-table.doc differ diff --git a/sw/qa/extras/ww8export/data/comments-nested.doc b/sw/qa/extras/ww8export/data/comments-nested.doc new file mode 100644 index 000000000..339a15b11 Binary files /dev/null and b/sw/qa/extras/ww8export/data/comments-nested.doc differ diff --git a/sw/qa/extras/ww8export/data/cp1000044.doc b/sw/qa/extras/ww8export/data/cp1000044.doc new file mode 100644 index 000000000..ea30cc002 Binary files /dev/null and b/sw/qa/extras/ww8export/data/cp1000044.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo36868.doc b/sw/qa/extras/ww8export/data/fdo36868.doc new file mode 100644 index 000000000..382c6b267 Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo36868.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo42144.odt b/sw/qa/extras/ww8export/data/fdo42144.odt new file mode 100644 index 000000000..be9490079 Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo42144.odt differ diff --git a/sw/qa/extras/ww8export/data/fdo45724.odt b/sw/qa/extras/ww8export/data/fdo45724.odt new file mode 100644 index 000000000..45c6d9a58 Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo45724.odt differ diff --git a/sw/qa/extras/ww8export/data/fdo46020.odt b/sw/qa/extras/ww8export/data/fdo46020.odt new file mode 100644 index 000000000..478c931b2 Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo46020.odt differ diff --git a/sw/qa/extras/ww8export/data/fdo53985.doc b/sw/qa/extras/ww8export/data/fdo53985.doc new file mode 100644 index 000000000..0c8f278dc Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo53985.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo56513.doc b/sw/qa/extras/ww8export/data/fdo56513.doc new file mode 100644 index 000000000..f5be1c3cd Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo56513.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo59530.doc b/sw/qa/extras/ww8export/data/fdo59530.doc new file mode 100644 index 000000000..90bd4ce04 Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo59530.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo66304-1.odt b/sw/qa/extras/ww8export/data/fdo66304-1.odt new file mode 100644 index 000000000..c3fb9bcfa Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo66304-1.odt differ diff --git a/sw/qa/extras/ww8export/data/fdo68963.doc b/sw/qa/extras/ww8export/data/fdo68963.doc new file mode 100644 index 000000000..b31741f7c Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo68963.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo68967.doc b/sw/qa/extras/ww8export/data/fdo68967.doc new file mode 100644 index 000000000..05271c3d8 Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo68967.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo77454.doc b/sw/qa/extras/ww8export/data/fdo77454.doc new file mode 100644 index 000000000..4e2d7b2ad Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo77454.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo77844.doc b/sw/qa/extras/ww8export/data/fdo77844.doc new file mode 100644 index 000000000..cd7368d5d Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo77844.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo80333.doc b/sw/qa/extras/ww8export/data/fdo80333.doc new file mode 100644 index 000000000..773a922ba Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo80333.doc differ diff --git a/sw/qa/extras/ww8export/data/fdo81102.doc b/sw/qa/extras/ww8export/data/fdo81102.doc new file mode 100644 index 000000000..e8a550768 Binary files /dev/null and b/sw/qa/extras/ww8export/data/fdo81102.doc differ diff --git a/sw/qa/extras/ww8export/data/first-header-footer.doc b/sw/qa/extras/ww8export/data/first-header-footer.doc new file mode 100644 index 000000000..023c49486 Binary files /dev/null and b/sw/qa/extras/ww8export/data/first-header-footer.doc differ diff --git a/sw/qa/extras/ww8export/data/gutter-left.doc b/sw/qa/extras/ww8export/data/gutter-left.doc new file mode 100644 index 000000000..0d76e8748 Binary files /dev/null and b/sw/qa/extras/ww8export/data/gutter-left.doc differ diff --git a/sw/qa/extras/ww8export/data/gutter-top.doc b/sw/qa/extras/ww8export/data/gutter-top.doc new file mode 100644 index 000000000..07ffa3945 Binary files /dev/null and b/sw/qa/extras/ww8export/data/gutter-top.doc differ diff --git a/sw/qa/extras/ww8export/data/i120158.doc b/sw/qa/extras/ww8export/data/i120158.doc new file mode 100644 index 000000000..6adf3ec13 Binary files /dev/null and b/sw/qa/extras/ww8export/data/i120158.doc differ diff --git a/sw/qa/extras/ww8export/data/image-comment-at-char.doc b/sw/qa/extras/ww8export/data/image-comment-at-char.doc new file mode 100644 index 000000000..e0d5e2cba Binary files /dev/null and b/sw/qa/extras/ww8export/data/image-comment-at-char.doc differ diff --git a/sw/qa/extras/ww8export/data/list-nolevel.doc b/sw/qa/extras/ww8export/data/list-nolevel.doc new file mode 100644 index 000000000..04e34996f Binary files /dev/null and b/sw/qa/extras/ww8export/data/list-nolevel.doc differ diff --git a/sw/qa/extras/ww8export/data/mailmerge.doc b/sw/qa/extras/ww8export/data/mailmerge.doc new file mode 100644 index 000000000..6ed882769 Binary files /dev/null and b/sw/qa/extras/ww8export/data/mailmerge.doc differ diff --git a/sw/qa/extras/ww8export/data/msobrightnesscontrast.doc b/sw/qa/extras/ww8export/data/msobrightnesscontrast.doc new file mode 100644 index 000000000..675d6d370 Binary files /dev/null and b/sw/qa/extras/ww8export/data/msobrightnesscontrast.doc differ diff --git a/sw/qa/extras/ww8export/data/n325936.doc b/sw/qa/extras/ww8export/data/n325936.doc new file mode 100644 index 000000000..23d0f6025 Binary files /dev/null and b/sw/qa/extras/ww8export/data/n325936.doc differ diff --git a/sw/qa/extras/ww8export/data/n652364.doc b/sw/qa/extras/ww8export/data/n652364.doc new file mode 100644 index 000000000..f7a0fe0d5 Binary files /dev/null and b/sw/qa/extras/ww8export/data/n652364.doc differ diff --git a/sw/qa/extras/ww8export/data/n750255.doc b/sw/qa/extras/ww8export/data/n750255.doc new file mode 100644 index 000000000..c0475c4ed Binary files /dev/null and b/sw/qa/extras/ww8export/data/n750255.doc differ diff --git a/sw/qa/extras/ww8export/data/n757118.doc b/sw/qa/extras/ww8export/data/n757118.doc new file mode 100644 index 000000000..2c6948521 Binary files /dev/null and b/sw/qa/extras/ww8export/data/n757118.doc differ diff --git a/sw/qa/extras/ww8export/data/n757905.doc b/sw/qa/extras/ww8export/data/n757905.doc new file mode 100644 index 000000000..0fb7b097c Binary files /dev/null and b/sw/qa/extras/ww8export/data/n757905.doc differ diff --git a/sw/qa/extras/ww8export/data/n757910.doc b/sw/qa/extras/ww8export/data/n757910.doc new file mode 100644 index 000000000..49a0e59f8 Binary files /dev/null and b/sw/qa/extras/ww8export/data/n757910.doc differ diff --git a/sw/qa/extras/ww8export/data/n760294.doc b/sw/qa/extras/ww8export/data/n760294.doc new file mode 100644 index 000000000..04960d060 Binary files /dev/null and b/sw/qa/extras/ww8export/data/n760294.doc differ diff --git a/sw/qa/extras/ww8export/data/n816603.doc b/sw/qa/extras/ww8export/data/n816603.doc new file mode 100644 index 000000000..9186f628f Binary files /dev/null and b/sw/qa/extras/ww8export/data/n816603.doc differ diff --git a/sw/qa/extras/ww8export/data/n823651.doc b/sw/qa/extras/ww8export/data/n823651.doc new file mode 100644 index 000000000..51b383c42 Binary files /dev/null and b/sw/qa/extras/ww8export/data/n823651.doc differ diff --git a/sw/qa/extras/ww8export/data/new-page-styles.doc b/sw/qa/extras/ww8export/data/new-page-styles.doc new file mode 100644 index 000000000..c3886fd6b Binary files /dev/null and b/sw/qa/extras/ww8export/data/new-page-styles.doc differ diff --git a/sw/qa/extras/ww8export/data/object_cross_reference.odt b/sw/qa/extras/ww8export/data/object_cross_reference.odt new file mode 100644 index 000000000..9eaca352b Binary files /dev/null and b/sw/qa/extras/ww8export/data/object_cross_reference.odt differ diff --git a/sw/qa/extras/ww8export/data/ooo92948-1.doc b/sw/qa/extras/ww8export/data/ooo92948-1.doc new file mode 100644 index 000000000..f355eaa26 Binary files /dev/null and b/sw/qa/extras/ww8export/data/ooo92948-1.doc differ diff --git a/sw/qa/extras/ww8export/data/page-border.doc b/sw/qa/extras/ww8export/data/page-border.doc new file mode 100644 index 000000000..c2dec4fed Binary files /dev/null and b/sw/qa/extras/ww8export/data/page-border.doc differ diff --git a/sw/qa/extras/ww8export/data/redline-export-1.odt b/sw/qa/extras/ww8export/data/redline-export-1.odt new file mode 100644 index 000000000..31aacce47 Binary files /dev/null and b/sw/qa/extras/ww8export/data/redline-export-1.odt differ diff --git a/sw/qa/extras/ww8export/data/redline-export-2.odt b/sw/qa/extras/ww8export/data/redline-export-2.odt new file mode 100644 index 000000000..2aca5eee4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/redline-export-2.odt differ diff --git a/sw/qa/extras/ww8export/data/redline-export-3.odt b/sw/qa/extras/ww8export/data/redline-export-3.odt new file mode 100644 index 000000000..6d0d80a08 Binary files /dev/null and b/sw/qa/extras/ww8export/data/redline-export-3.odt differ diff --git a/sw/qa/extras/ww8export/data/rtl-gutter.doc b/sw/qa/extras/ww8export/data/rtl-gutter.doc new file mode 100644 index 000000000..37cbf8707 Binary files /dev/null and b/sw/qa/extras/ww8export/data/rtl-gutter.doc differ diff --git a/sw/qa/extras/ww8export/data/shapes-line-ellipse.doc b/sw/qa/extras/ww8export/data/shapes-line-ellipse.doc new file mode 100644 index 000000000..184881c00 Binary files /dev/null and b/sw/qa/extras/ww8export/data/shapes-line-ellipse.doc differ diff --git a/sw/qa/extras/ww8export/data/table_cross_reference.odt b/sw/qa/extras/ww8export/data/table_cross_reference.odt new file mode 100644 index 000000000..95f33139c Binary files /dev/null and b/sw/qa/extras/ww8export/data/table_cross_reference.odt differ diff --git a/sw/qa/extras/ww8export/data/table_cross_reference_custom_format.odt b/sw/qa/extras/ww8export/data/table_cross_reference_custom_format.odt new file mode 100644 index 000000000..1c41e364c Binary files /dev/null and b/sw/qa/extras/ww8export/data/table_cross_reference_custom_format.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf100961_fixedDateTime.doc b/sw/qa/extras/ww8export/data/tdf100961_fixedDateTime.doc new file mode 100644 index 000000000..86f0e478d Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf100961_fixedDateTime.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf101826_xattrTextBoxFill.doc b/sw/qa/extras/ww8export/data/tdf101826_xattrTextBoxFill.doc new file mode 100644 index 000000000..206f48309 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf101826_xattrTextBoxFill.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf102334.doc b/sw/qa/extras/ww8export/data/tdf102334.doc new file mode 100644 index 000000000..d007257cf Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf102334.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf104239_chapterNumberTortureTest.doc b/sw/qa/extras/ww8export/data/tdf104239_chapterNumberTortureTest.doc new file mode 100644 index 000000000..dc8f65e76 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf104239_chapterNumberTortureTest.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf104239_chapterNumbering.doc b/sw/qa/extras/ww8export/data/tdf104239_chapterNumbering.doc new file mode 100644 index 000000000..2e237b2e3 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf104239_chapterNumbering.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf104239_chapterNumberingLevels.doc b/sw/qa/extras/ww8export/data/tdf104239_chapterNumberingLevels.doc new file mode 100644 index 000000000..8a7583c32 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf104239_chapterNumberingLevels.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf104239_numbering.doc b/sw/qa/extras/ww8export/data/tdf104239_numbering.doc new file mode 100644 index 000000000..ee8ad09e4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf104239_numbering.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf104239_sharedOutlineNumId.doc b/sw/qa/extras/ww8export/data/tdf104239_sharedOutlineNumId.doc new file mode 100644 index 000000000..c5deb4857 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf104239_sharedOutlineNumId.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf104334.doc b/sw/qa/extras/ww8export/data/tdf104334.doc new file mode 100644 index 000000000..877caff0c Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf104334.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf104596_wrapInHeaderTable.doc b/sw/qa/extras/ww8export/data/tdf104596_wrapInHeaderTable.doc new file mode 100644 index 000000000..17fba7945 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf104596_wrapInHeaderTable.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf104805.doc b/sw/qa/extras/ww8export/data/tdf104805.doc new file mode 100644 index 000000000..a2dd81dd0 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf104805.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf105570.doc b/sw/qa/extras/ww8export/data/tdf105570.doc new file mode 100644 index 000000000..1bace7709 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf105570.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf106062_nonHangingFootnote.odt b/sw/qa/extras/ww8export/data/tdf106062_nonHangingFootnote.odt new file mode 100644 index 000000000..af5e225ea Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf106062_nonHangingFootnote.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf106174_rtlParaAlign.docx b/sw/qa/extras/ww8export/data/tdf106174_rtlParaAlign.docx new file mode 100644 index 000000000..a222f5881 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf106174_rtlParaAlign.docx differ diff --git a/sw/qa/extras/ww8export/data/tdf106291.doc b/sw/qa/extras/ww8export/data/tdf106291.doc new file mode 100644 index 000000000..893004d46 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf106291.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf106541_cancelOutline.doc b/sw/qa/extras/ww8export/data/tdf106541_cancelOutline.doc new file mode 100644 index 000000000..6b3f016f3 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf106541_cancelOutline.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf106541_inheritChapterNumbering.doc b/sw/qa/extras/ww8export/data/tdf106541_inheritChapterNumbering.doc new file mode 100644 index 000000000..f56b9d6b6 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf106541_inheritChapterNumbering.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf106541_inheritChapterNumberingB.doc b/sw/qa/extras/ww8export/data/tdf106541_inheritChapterNumberingB.doc new file mode 100644 index 000000000..0ff47ca3e Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf106541_inheritChapterNumberingB.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf106541_inheritOutlineNumbering.doc b/sw/qa/extras/ww8export/data/tdf106541_inheritOutlineNumbering.doc new file mode 100644 index 000000000..2fe243fe8 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf106541_inheritOutlineNumbering.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf107773.doc b/sw/qa/extras/ww8export/data/tdf107773.doc new file mode 100644 index 000000000..31c7b7c5c Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf107773.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf108072.doc b/sw/qa/extras/ww8export/data/tdf108072.doc new file mode 100644 index 000000000..03e8b2a53 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf108072.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf108448_endNote.odt b/sw/qa/extras/ww8export/data/tdf108448_endNote.odt new file mode 100644 index 000000000..bc4a751a8 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf108448_endNote.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf108518_CRnumformatting.doc b/sw/qa/extras/ww8export/data/tdf108518_CRnumformatting.doc new file mode 100644 index 000000000..536e92fd4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf108518_CRnumformatting.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf111480.doc b/sw/qa/extras/ww8export/data/tdf111480.doc new file mode 100644 index 000000000..888126066 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf111480.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf112074_RTLtableJustification.doc b/sw/qa/extras/ww8export/data/tdf112074_RTLtableJustification.doc new file mode 100644 index 000000000..64ea6521e Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf112074_RTLtableJustification.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf112118.doc b/sw/qa/extras/ww8export/data/tdf112118.doc new file mode 100644 index 000000000..f1aaa9b54 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf112118.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf112346.doc b/sw/qa/extras/ww8export/data/tdf112346.doc new file mode 100644 index 000000000..af0cca219 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf112346.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf112517_maxSprms.doc b/sw/qa/extras/ww8export/data/tdf112517_maxSprms.doc new file mode 100644 index 000000000..95de03d3b Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf112517_maxSprms.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf112535.doc b/sw/qa/extras/ww8export/data/tdf112535.doc new file mode 100644 index 000000000..4eea19ecd Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf112535.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf112618_textbox_no_bg.doc b/sw/qa/extras/ww8export/data/tdf112618_textbox_no_bg.doc new file mode 100644 index 000000000..c7d9823b0 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf112618_textbox_no_bg.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf114308.doc b/sw/qa/extras/ww8export/data/tdf114308.doc new file mode 100644 index 000000000..36e6c7ec6 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf114308.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf115896_layoutInCell.doc b/sw/qa/extras/ww8export/data/tdf115896_layoutInCell.doc new file mode 100644 index 000000000..c7e6fc680 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf115896_layoutInCell.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf116194.doc b/sw/qa/extras/ww8export/data/tdf116194.doc new file mode 100644 index 000000000..ca1edf68d Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf116194.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf116436_tableBackground.odt b/sw/qa/extras/ww8export/data/tdf116436_tableBackground.odt new file mode 100644 index 000000000..1ae65f788 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf116436_tableBackground.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf116570_exportFootnote.odt b/sw/qa/extras/ww8export/data/tdf116570_exportFootnote.odt new file mode 100644 index 000000000..c1598eb71 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf116570_exportFootnote.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf117217_largeTableBackgrounds.odt b/sw/qa/extras/ww8export/data/tdf117217_largeTableBackgrounds.odt new file mode 100644 index 000000000..bbb1eaab3 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf117217_largeTableBackgrounds.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf117503.docx b/sw/qa/extras/ww8export/data/tdf117503.docx new file mode 100644 index 000000000..f817f035b Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf117503.docx differ diff --git a/sw/qa/extras/ww8export/data/tdf117885.doc b/sw/qa/extras/ww8export/data/tdf117885.doc new file mode 100644 index 000000000..bf8d0ef03 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf117885.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf118133.docx b/sw/qa/extras/ww8export/data/tdf118133.docx new file mode 100644 index 000000000..613aa1bd7 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf118133.docx differ diff --git a/sw/qa/extras/ww8export/data/tdf118375_240degClockwise.doc b/sw/qa/extras/ww8export/data/tdf118375_240degClockwise.doc new file mode 100644 index 000000000..99d15e20c Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf118375_240degClockwise.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf118412.doc b/sw/qa/extras/ww8export/data/tdf118412.doc new file mode 100644 index 000000000..ef9b26cb3 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf118412.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf118564.doc b/sw/qa/extras/ww8export/data/tdf118564.doc new file mode 100644 index 000000000..4040e05e2 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf118564.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf119232_startEvenPage.doc b/sw/qa/extras/ww8export/data/tdf119232_startEvenPage.doc new file mode 100644 index 000000000..c50bf46c0 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf119232_startEvenPage.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf120003.doc b/sw/qa/extras/ww8export/data/tdf120003.doc new file mode 100644 index 000000000..c544fa5a9 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf120003.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf120225_textControlCrossRef.doc b/sw/qa/extras/ww8export/data/tdf120225_textControlCrossRef.doc new file mode 100644 index 000000000..713cdc336 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf120225_textControlCrossRef.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf120394.doc b/sw/qa/extras/ww8export/data/tdf120394.doc new file mode 100644 index 000000000..2ee9058a5 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf120394.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf120412_proportionalEscapement.odt b/sw/qa/extras/ww8export/data/tdf120412_proportionalEscapement.odt new file mode 100644 index 000000000..ecd5841a8 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf120412_proportionalEscapement.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf120711.doc b/sw/qa/extras/ww8export/data/tdf120711.doc new file mode 100644 index 000000000..90e7c05ce Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf120711.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf121110_absJustify.doc b/sw/qa/extras/ww8export/data/tdf121110_absJustify.doc new file mode 100644 index 000000000..0b9f581d4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf121110_absJustify.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf121111_fillStyleNone.docx b/sw/qa/extras/ww8export/data/tdf121111_fillStyleNone.docx new file mode 100644 index 000000000..434d182eb Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf121111_fillStyleNone.docx differ diff --git a/sw/qa/extras/ww8export/data/tdf122425_2.doc b/sw/qa/extras/ww8export/data/tdf122425_2.doc new file mode 100644 index 000000000..8debcddc1 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf122425_2.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf122429_header.doc b/sw/qa/extras/ww8export/data/tdf122429_header.doc new file mode 100644 index 000000000..37afc067b Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf122429_header.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf122460_header.odt b/sw/qa/extras/ww8export/data/tdf122460_header.odt new file mode 100644 index 000000000..420121dc9 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf122460_header.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf123433_fillStyleStop.doc b/sw/qa/extras/ww8export/data/tdf123433_fillStyleStop.doc new file mode 100644 index 000000000..f8321e96e Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf123433_fillStyleStop.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf124937.doc b/sw/qa/extras/ww8export/data/tdf124937.doc new file mode 100644 index 000000000..eb1ab2d9e Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf124937.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf126708_containsemf.odt b/sw/qa/extras/ww8export/data/tdf126708_containsemf.odt new file mode 100644 index 000000000..31b0fab8d Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf126708_containsemf.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf127166_prstDash_Word97.doc b/sw/qa/extras/ww8export/data/tdf127166_prstDash_Word97.doc new file mode 100644 index 000000000..21cd47a4c Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf127166_prstDash_Word97.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf127316_autoEscapement.odt b/sw/qa/extras/ww8export/data/tdf127316_autoEscapement.odt new file mode 100644 index 000000000..95987d456 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf127316_autoEscapement.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf127316_autoEscapement2.odt b/sw/qa/extras/ww8export/data/tdf127316_autoEscapement2.odt new file mode 100644 index 000000000..d98fae0ad Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf127316_autoEscapement2.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf127862_pageFillStyle.odt b/sw/qa/extras/ww8export/data/tdf127862_pageFillStyle.odt new file mode 100644 index 000000000..c382c9aa6 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf127862_pageFillStyle.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf128501.doc b/sw/qa/extras/ww8export/data/tdf128501.doc new file mode 100644 index 000000000..3313e397a Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf128501.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf128605.doc b/sw/qa/extras/ww8export/data/tdf128605.doc new file mode 100644 index 000000000..2bbfe6b73 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf128605.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf128608_fillStyleNoneB.odt b/sw/qa/extras/ww8export/data/tdf128608_fillStyleNoneB.odt new file mode 100644 index 000000000..917dc96d4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf128608_fillStyleNoneB.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf128608_tableParaBackColor.doc b/sw/qa/extras/ww8export/data/tdf128608_tableParaBackColor.doc new file mode 100644 index 000000000..d9b16ca53 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf128608_tableParaBackColor.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf128700_relativeTableWidth.doc b/sw/qa/extras/ww8export/data/tdf128700_relativeTableWidth.doc new file mode 100644 index 000000000..9fa798ea3 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf128700_relativeTableWidth.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf129247.docx b/sw/qa/extras/ww8export/data/tdf129247.docx new file mode 100644 index 000000000..a5ea1c1c1 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf129247.docx differ diff --git a/sw/qa/extras/ww8export/data/tdf129522_removeShadowStyle.odt b/sw/qa/extras/ww8export/data/tdf129522_removeShadowStyle.odt new file mode 100644 index 000000000..7ced9fc64 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf129522_removeShadowStyle.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf130262.doc b/sw/qa/extras/ww8export/data/tdf130262.doc new file mode 100644 index 000000000..fb60beacd Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf130262.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf132094_transparentPageImage.doc b/sw/qa/extras/ww8export/data/tdf132094_transparentPageImage.doc new file mode 100644 index 000000000..1b8a29e0e Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf132094_transparentPageImage.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf132726.odt b/sw/qa/extras/ww8export/data/tdf132726.odt new file mode 100644 index 000000000..c8106c2b5 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf132726.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf133453_realFontSize.doc b/sw/qa/extras/ww8export/data/tdf133453_realFontSize.doc new file mode 100644 index 000000000..6fa503680 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf133453_realFontSize.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf134264.docx b/sw/qa/extras/ww8export/data/tdf134264.docx new file mode 100644 index 000000000..5acb4cf4e Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf134264.docx differ diff --git a/sw/qa/extras/ww8export/data/tdf134570.doc b/sw/qa/extras/ww8export/data/tdf134570.doc new file mode 100644 index 000000000..17f7842d7 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf134570.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf134948.odt b/sw/qa/extras/ww8export/data/tdf134948.odt new file mode 100644 index 000000000..a6227fb5e Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf134948.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf135672_tableGrows.doc b/sw/qa/extras/ww8export/data/tdf135672_tableGrows.doc new file mode 100644 index 000000000..a2ae57def Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf135672_tableGrows.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf136620.odt b/sw/qa/extras/ww8export/data/tdf136620.odt new file mode 100644 index 000000000..bb8536ec9 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf136620.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf136814.odt b/sw/qa/extras/ww8export/data/tdf136814.odt new file mode 100644 index 000000000..2318de04b Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf136814.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt b/sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt new file mode 100644 index 000000000..8c9996361 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf138345_paraCharHighlight.doc b/sw/qa/extras/ww8export/data/tdf138345_paraCharHighlight.doc new file mode 100644 index 000000000..3da7e9286 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf138345_paraCharHighlight.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf139495_tinyHeader.doc b/sw/qa/extras/ww8export/data/tdf139495_tinyHeader.doc new file mode 100644 index 000000000..c45a6c25f Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf139495_tinyHeader.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf142760.doc b/sw/qa/extras/ww8export/data/tdf142760.doc new file mode 100644 index 000000000..1e90532fe Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf142760.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf142840.odt b/sw/qa/extras/ww8export/data/tdf142840.odt new file mode 100644 index 000000000..27af4cdb5 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf142840.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf147861_customField.doc b/sw/qa/extras/ww8export/data/tdf147861_customField.doc new file mode 100644 index 000000000..f18d65f40 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf147861_customField.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf148380_createField.doc b/sw/qa/extras/ww8export/data/tdf148380_createField.doc new file mode 100644 index 000000000..79c5e59c5 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf148380_createField.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf148380_fldLocked.doc b/sw/qa/extras/ww8export/data/tdf148380_fldLocked.doc new file mode 100644 index 000000000..cee6982ee Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf148380_fldLocked.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf36117_verticalAdjustment.doc b/sw/qa/extras/ww8export/data/tdf36117_verticalAdjustment.doc new file mode 100644 index 000000000..f7afd4191 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf36117_verticalAdjustment.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf37153_considerWrapOnObjPos.doc b/sw/qa/extras/ww8export/data/tdf37153_considerWrapOnObjPos.doc new file mode 100644 index 000000000..08ba2f9d5 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf37153_considerWrapOnObjPos.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf37778_readonlySection.doc b/sw/qa/extras/ww8export/data/tdf37778_readonlySection.doc new file mode 100644 index 000000000..5e4fcdd76 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf37778_readonlySection.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf38778_properties_in_run_for_field.doc b/sw/qa/extras/ww8export/data/tdf38778_properties_in_run_for_field.doc new file mode 100644 index 000000000..960fe50da Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf38778_properties_in_run_for_field.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf41542_borderlessPadding.odt b/sw/qa/extras/ww8export/data/tdf41542_borderlessPadding.odt new file mode 100644 index 000000000..9585041de Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf41542_borderlessPadding.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf41542_imagePadding.odt b/sw/qa/extras/ww8export/data/tdf41542_imagePadding.odt new file mode 100644 index 000000000..019e19f24 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf41542_imagePadding.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf46441-2.odt b/sw/qa/extras/ww8export/data/tdf46441-2.odt new file mode 100644 index 000000000..ed73406c5 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf46441-2.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf49102_mergedCellNumbering.doc b/sw/qa/extras/ww8export/data/tdf49102_mergedCellNumbering.doc new file mode 100644 index 000000000..747136d47 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf49102_mergedCellNumbering.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf55427_footnote2endnote.odt b/sw/qa/extras/ww8export/data/tdf55427_footnote2endnote.odt new file mode 100644 index 000000000..7f77f6d39 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf55427_footnote2endnote.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.doc b/sw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.doc new file mode 100644 index 000000000..367f7873d Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf56321_flipImage_both.doc b/sw/qa/extras/ww8export/data/tdf56321_flipImage_both.doc new file mode 100644 index 000000000..a5293f29f Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf56321_flipImage_both.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf59896.doc b/sw/qa/extras/ww8export/data/tdf59896.doc new file mode 100644 index 000000000..a3c724299 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf59896.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf60378_mergedBorders.doc b/sw/qa/extras/ww8export/data/tdf60378_mergedBorders.doc new file mode 100644 index 000000000..3278f4631 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf60378_mergedBorders.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf70838.odt b/sw/qa/extras/ww8export/data/tdf70838.odt new file mode 100644 index 000000000..65d20ecb6 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf70838.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf70838b_verticalRotation.odt b/sw/qa/extras/ww8export/data/tdf70838b_verticalRotation.odt new file mode 100644 index 000000000..556f2564c Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf70838b_verticalRotation.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf73056_cellMargins.doc b/sw/qa/extras/ww8export/data/tdf73056_cellMargins.doc new file mode 100644 index 000000000..7ae12d452 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf73056_cellMargins.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf74328.doc b/sw/qa/extras/ww8export/data/tdf74328.doc new file mode 100644 index 000000000..a82978547 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf74328.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf75539_relativeWidth.doc b/sw/qa/extras/ww8export/data/tdf75539_relativeWidth.doc new file mode 100644 index 000000000..ac811a8f3 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf75539_relativeWidth.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf75748_inheritChapterNumberingC.doc b/sw/qa/extras/ww8export/data/tdf75748_inheritChapterNumberingC.doc new file mode 100644 index 000000000..7f393612c Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf75748_inheritChapterNumberingC.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf76349_textboxMargins.doc b/sw/qa/extras/ww8export/data/tdf76349_textboxMargins.doc new file mode 100644 index 000000000..95bc59807 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf76349_textboxMargins.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf77964.doc b/sw/qa/extras/ww8export/data/tdf77964.doc new file mode 100644 index 000000000..6ef50ab15 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf77964.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf79186_noLayoutInCell.odt b/sw/qa/extras/ww8export/data/tdf79186_noLayoutInCell.odt new file mode 100644 index 000000000..e512f0907 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf79186_noLayoutInCell.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf79435_legacyInputFields.docx b/sw/qa/extras/ww8export/data/tdf79435_legacyInputFields.docx new file mode 100644 index 000000000..55d1a1f22 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf79435_legacyInputFields.docx differ diff --git a/sw/qa/extras/ww8export/data/tdf79553_lineNumbers.doc b/sw/qa/extras/ww8export/data/tdf79553_lineNumbers.doc new file mode 100644 index 000000000..260f5ce18 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf79553_lineNumbers.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf79639.doc b/sw/qa/extras/ww8export/data/tdf79639.doc new file mode 100644 index 000000000..1a996b62b Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf79639.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf80635_marginLeft.doc b/sw/qa/extras/ww8export/data/tdf80635_marginLeft.doc new file mode 100644 index 000000000..ad70ff641 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf80635_marginLeft.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf80635_marginRightRTL.doc b/sw/qa/extras/ww8export/data/tdf80635_marginRightRTL.doc new file mode 100644 index 000000000..6e509a190 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf80635_marginRightRTL.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf80635_pageLeft.doc b/sw/qa/extras/ww8export/data/tdf80635_pageLeft.doc new file mode 100644 index 000000000..16f32e3e3 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf80635_pageLeft.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf80635_pageRightRTL.doc b/sw/qa/extras/ww8export/data/tdf80635_pageRightRTL.doc new file mode 100644 index 000000000..71f9adf4a Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf80635_pageRightRTL.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf81705_outlineLevel.doc b/sw/qa/extras/ww8export/data/tdf81705_outlineLevel.doc new file mode 100644 index 000000000..55d188356 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf81705_outlineLevel.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf89377_tableWithBreakBeforeParaStyle.doc b/sw/qa/extras/ww8export/data/tdf89377_tableWithBreakBeforeParaStyle.doc new file mode 100644 index 000000000..ef6415f16 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf89377_tableWithBreakBeforeParaStyle.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf91083.odt b/sw/qa/extras/ww8export/data/tdf91083.odt new file mode 100644 index 000000000..e4f55e58a Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf91083.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf91083_tableKeep2.odt b/sw/qa/extras/ww8export/data/tdf91083_tableKeep2.odt new file mode 100644 index 000000000..19a1ac843 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf91083_tableKeep2.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf91083_tableKeep3.odt b/sw/qa/extras/ww8export/data/tdf91083_tableKeep3.odt new file mode 100644 index 000000000..d3a13baf4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf91083_tableKeep3.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf91687.doc b/sw/qa/extras/ww8export/data/tdf91687.doc new file mode 100644 index 000000000..d1c1e0a0c Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf91687.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf92281.doc b/sw/qa/extras/ww8export/data/tdf92281.doc new file mode 100644 index 000000000..2893eb37a Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf92281.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf94009_zeroPgMargin.odt b/sw/qa/extras/ww8export/data/tdf94009_zeroPgMargin.odt new file mode 100644 index 000000000..e3143ec04 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf94009_zeroPgMargin.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf94326_notOutlineNumbering.doc b/sw/qa/extras/ww8export/data/tdf94326_notOutlineNumbering.doc new file mode 100644 index 000000000..2df22e931 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf94326_notOutlineNumbering.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf94386.odt b/sw/qa/extras/ww8export/data/tdf94386.odt new file mode 100644 index 000000000..0e8d0bd0d Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf94386.odt differ diff --git a/sw/qa/extras/ww8export/data/tdf95321.doc b/sw/qa/extras/ww8export/data/tdf95321.doc new file mode 100644 index 000000000..8b85472b5 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf95321.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf95576.doc b/sw/qa/extras/ww8export/data/tdf95576.doc new file mode 100644 index 000000000..a8a601885 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf95576.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf96277.doc b/sw/qa/extras/ww8export/data/tdf96277.doc new file mode 100644 index 000000000..904b2da13 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf96277.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf98620_rtlJustify.doc b/sw/qa/extras/ww8export/data/tdf98620_rtlJustify.doc new file mode 100644 index 000000000..c643b96a4 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf98620_rtlJustify.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf99100.doc b/sw/qa/extras/ww8export/data/tdf99100.doc new file mode 100644 index 000000000..6352ae355 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf99100.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf99120.doc b/sw/qa/extras/ww8export/data/tdf99120.doc new file mode 100644 index 000000000..a93721c57 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf99120.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf99197_defaultLTR.doc b/sw/qa/extras/ww8export/data/tdf99197_defaultLTR.doc new file mode 100644 index 000000000..721b68882 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf99197_defaultLTR.doc differ diff --git a/sw/qa/extras/ww8export/data/tdf99474.odt b/sw/qa/extras/ww8export/data/tdf99474.odt new file mode 100644 index 000000000..7530488bb Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf99474.odt differ diff --git a/sw/qa/extras/ww8export/data/testTdf107931_KERN_DocEnabled_disabledDefStyle.doc b/sw/qa/extras/ww8export/data/testTdf107931_KERN_DocEnabled_disabledDefStyle.doc new file mode 100644 index 000000000..101b02a0b Binary files /dev/null and b/sw/qa/extras/ww8export/data/testTdf107931_KERN_DocEnabled_disabledDefStyle.doc differ diff --git a/sw/qa/extras/ww8export/data/testTdf107931_KERN_enabledDefStyle.doc b/sw/qa/extras/ww8export/data/testTdf107931_KERN_enabledDefStyle.doc new file mode 100644 index 000000000..35f6371fb Binary files /dev/null and b/sw/qa/extras/ww8export/data/testTdf107931_KERN_enabledDefStyle.doc differ diff --git a/sw/qa/extras/ww8export/data/transparent-text.doc b/sw/qa/extras/ww8export/data/transparent-text.doc new file mode 100644 index 000000000..b458db29c Binary files /dev/null and b/sw/qa/extras/ww8export/data/transparent-text.doc differ diff --git a/sw/qa/extras/ww8export/data/tscp.doc b/sw/qa/extras/ww8export/data/tscp.doc new file mode 100644 index 000000000..9830b288c Binary files /dev/null and b/sw/qa/extras/ww8export/data/tscp.doc differ diff --git a/sw/qa/extras/ww8export/data/zoom.doc b/sw/qa/extras/ww8export/data/zoom.doc new file mode 100644 index 000000000..70548966d Binary files /dev/null and b/sw/qa/extras/ww8export/data/zoom.doc differ diff --git a/sw/qa/extras/ww8export/data/zoomtype.doc b/sw/qa/extras/ww8export/data/zoomtype.doc new file mode 100644 index 000000000..882375416 Binary files /dev/null and b/sw/qa/extras/ww8export/data/zoomtype.doc differ diff --git a/sw/qa/extras/ww8export/ww8export.cxx b/sw/qa/extras/ww8export/ww8export.cxx new file mode 100644 index 000000000..835154122 --- /dev/null +++ b/sw/qa/extras/ww8export/ww8export.cxx @@ -0,0 +1,1570 @@ +/* -*- 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 + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ww8export/data/", "MS Word 97") {} + + bool mustTestImportOf(const char* filename) const override + { + // If the testcase is stored in some other format, it's pointless to test. + return o3tl::ends_with(filename, ".doc"); + } + + /** + * Validation handling + */ + bool mustValidate(const char* filename) const override + { + const std::vector aDenylist = + { + // the following doc exports currently don't pass binary validation + "tdf56321_flipImage_both.doc", + "cjklist30.doc", + "cjklist31.doc", + "cjklist34.doc", + "cjklist35.doc", + "fdo77454.doc", + "new-page-styles.doc", + "tdf36117_verticalAdjustment.doc", + "bnc636128.doc", + "tdf92281.doc", + "fdo59530.doc", + "fdo56513.doc", + "tscp.doc", + "zoom.doc", + "comments-nested.doc", + "commented-table.doc", + "zoomtype.doc", + "n325936.doc", + "first-header-footer.doc" + }; + + // Don't bother with non-.doc files; weed out denylisted .doc files + return (o3tl::ends_with(filename, ".doc") && std::find(aDenylist.begin(), aDenylist.end(), filename) == aDenylist.end()); + } +protected: + + virtual void postLoad(const char* pFilename) override + { + if (pFilename == std::string_view("tdf94386.odt")) + { + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + + // emulate the behavior from tdf#94386 - insert an envelope to the + // document + SfxItemSet aSet(pWrtShell->GetView().GetCurShell()->GetPool(), svl::Items); + aSet.Put(SwEnvItem()); + SfxRequest aRequest(FN_ENVELOP, SfxCallMode::SYNCHRON, aSet); + SW_MOD()->ExecOther(aRequest); + } + } +}; + +DECLARE_WW8EXPORT_TEST(testN757910, "n757910.doc") +{ + // The internal margin was larger than 0.28cm + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + uno::Reference xPropertySet(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + sal_Int32 nValue = 0; + xPropertySet->getPropertyValue("LeftBorderDistance") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int32(280), nValue); + + // The border width was zero + table::BorderLine2 aBorder; + xPropertySet->getPropertyValue("LeftBorder") >>= aBorder; + CPPUNIT_ASSERT(aBorder.LineWidth > 0); +} + +DECLARE_WW8EXPORT_TEST(testN760294, "n760294.doc") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + table::TableBorder aTableBorder; + xTable->getPropertyValue("TableBorder") >>= aTableBorder; + CPPUNIT_ASSERT_EQUAL(aTableBorder.TopLine.InnerLineWidth, aTableBorder.TopLine.OuterLineWidth); + CPPUNIT_ASSERT_EQUAL(aTableBorder.TopLine.InnerLineWidth, aTableBorder.TopLine.LineDistance); +} + +DECLARE_WW8EXPORT_TEST(testN750255, "n750255.doc") +{ +/* +Column break without columns on the page is a page break, so check those paragraphs +are on page 2 (page style 'Convert 1') and page 3 (page style 'Convert 2') +enum = ThisComponent.Text.createEnumeration +enum.nextElement +para1 = enum.nextElement +xray para1.String +xray para1.PageStyleName +para2 = enum.nextElement +xray para2.String +xray para2.PageStyleName +*/ + uno::Reference textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference paraEnumAccess(textDocument->getText(), uno::UNO_QUERY); + // list of paragraphs + uno::Reference paraEnum = paraEnumAccess->createEnumeration(); + // go to 1st paragraph + (void) paraEnum->nextElement(); + // get the 2nd and 3rd paragraph + uno::Reference paragraph1(paraEnum->nextElement(), uno::UNO_QUERY); + uno::Reference paragraph2(paraEnum->nextElement(), uno::UNO_QUERY); + uno::Reference text1(paragraph1, uno::UNO_QUERY); + uno::Reference text2(paragraph2, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( OUString( "one" ), text1->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "two" ), text2->getString()); + uno::Reference paragraphProperties1(paragraph1, uno::UNO_QUERY); + uno::Reference paragraphProperties2(paragraph2, uno::UNO_QUERY); + OUString pageStyle1, pageStyle2; + paragraphProperties1->getPropertyValue( "PageStyleName" ) >>= pageStyle1; + paragraphProperties2->getPropertyValue( "PageStyleName" ) >>= pageStyle2; + CPPUNIT_ASSERT_EQUAL( OUString( "Convert 1" ), pageStyle1 ); + CPPUNIT_ASSERT_EQUAL( OUString( "Convert 2" ), pageStyle2 ); + +} + +DECLARE_WW8EXPORT_TEST(testN652364, "n652364.doc") +{ +/* +Related to 750255 above, column break with columns on the page however should be a column break. +enum = ThisComponent.Text.createEnumeration +enum.nextElement +para1 = enum.nextElement +xray para1.String +xray para1.PageStyleName +enum.nextElement +para2 = enum.nextElement +xray para2.String +xray para2.PageStyleName +*/ + uno::Reference textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference paraEnumAccess(textDocument->getText(), uno::UNO_QUERY); + // list of paragraphs + uno::Reference paraEnum = paraEnumAccess->createEnumeration(); + // get the 2nd and 4th paragraph + (void) paraEnum->nextElement(); + uno::Reference paragraph1(paraEnum->nextElement(), uno::UNO_QUERY); + (void) paraEnum->nextElement(); + uno::Reference paragraph2(paraEnum->nextElement(), uno::UNO_QUERY); + uno::Reference text1(paragraph1, uno::UNO_QUERY); + uno::Reference text2(paragraph2, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( OUString( "text1" ), text1->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "text2" ), text2->getString()); + uno::Reference paragraphProperties1(paragraph1, uno::UNO_QUERY); + uno::Reference paragraphProperties2(paragraph2, uno::UNO_QUERY); + OUString pageStyle1, pageStyle2; + paragraphProperties1->getPropertyValue( "PageStyleName" ) >>= pageStyle1; + paragraphProperties2->getPropertyValue( "PageStyleName" ) >>= pageStyle2; + // "Standard" is the style for the first page (2nd is "Convert 1"). + CPPUNIT_ASSERT_EQUAL( OUString( "Standard" ), pageStyle1 ); + CPPUNIT_ASSERT_EQUAL( OUString( "Standard" ), pageStyle2 ); +} + +DECLARE_WW8EXPORT_TEST(testN757118, "n757118.doc") +{ +/* +Two pairs of horizontal rules (one absolute width, one relative width) +have the same width (full page width, half page width). +xray ThisComponent.DrawPage.getByIndex(0).BoundRect +*/ + uno::Reference rule1 = getShape(1), rule2 = getShape(2), rule3 = getShape(3), rule4 = getShape(4); + uno::Reference ruleProperties1(rule1, uno::UNO_QUERY); + uno::Reference ruleProperties2(rule2, uno::UNO_QUERY); + uno::Reference ruleProperties3(rule3, uno::UNO_QUERY); + uno::Reference ruleProperties4(rule4, uno::UNO_QUERY); + awt::Rectangle boundRect1, boundRect2, boundRect3, boundRect4; + ruleProperties1->getPropertyValue( "BoundRect" ) >>= boundRect1; + ruleProperties2->getPropertyValue( "BoundRect" ) >>= boundRect2; + ruleProperties3->getPropertyValue( "BoundRect" ) >>= boundRect3; + ruleProperties4->getPropertyValue( "BoundRect" ) >>= boundRect4; + // compare, allow for < 5 differences because of rounding errors + CPPUNIT_ASSERT( abs( boundRect1.Width - boundRect3.Width ) < 5 ); + CPPUNIT_ASSERT( abs( boundRect2.Width - boundRect4.Width ) < 5 ); +} + +DECLARE_WW8EXPORT_TEST(testTdf75539_relativeWidth, "tdf75539_relativeWidth.doc") +{ + //divide everything by 10 to give a margin of error for rounding etc. + sal_Int32 pageWidth = parseDump("/root/page[1]/body/infos/bounds", "width").toInt32()/10; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Page width", sal_Int32(9354/10), pageWidth); + CPPUNIT_ASSERT_EQUAL_MESSAGE("100% width line", pageWidth, parseDump("/root/page[1]/body/txt[2]/Special", "nWidth").toInt32()/10); + CPPUNIT_ASSERT_EQUAL_MESSAGE("50% width line", pageWidth/2, parseDump("/root/page[1]/body/txt[4]/Special", "nWidth").toInt32()/10); + CPPUNIT_ASSERT_EQUAL_MESSAGE("25% width line", pageWidth/4, parseDump("/root/page[1]/body/txt[6]/Special", "nWidth").toInt32()/10); + CPPUNIT_ASSERT_EQUAL_MESSAGE("10% width line", pageWidth/10, parseDump("/root/page[1]/body/txt[8]/Special", "nWidth").toInt32()/10); +} + +DECLARE_WW8EXPORT_TEST(testN757905, "n757905.doc") +{ + // The problem was that the paragraph had only a single fly + // (as-character-anchored), and the height of that was smaller than the + // paragraph height. When in Word-compat mode, we should take the max of + // the two, not just the height of the fly. + + OUString aHeight = parseDump("/root/page/body/txt/infos/bounds", "height"); + CPPUNIT_ASSERT(sal_Int32(31) < aHeight.toInt32()); +} + +DECLARE_WW8EXPORT_TEST(testAllGapsWord, "all_gaps_word.doc") +{ + BorderTest borderTest; + BorderTest::testTheBorders(mxComponent, true); +} + +DECLARE_WW8EXPORT_TEST(testI120158, "i120158.doc") +{ + // See https://bz.apache.org/ooo/show_bug.cgi?id=120158 + uno::Reference textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference paraEnumAccess(textDocument->getText(), uno::UNO_QUERY); + // list of paragraphs + uno::Reference paraEnum = paraEnumAccess->createEnumeration(); + // get contents of 1st paragraph as text + uno::Reference paragraph0(paraEnum->nextElement(), uno::UNO_QUERY); + uno::Reference text0(paragraph0, uno::UNO_QUERY); + OUString sFieldResult = text0->getString(); + CPPUNIT_ASSERT(sFieldResult.endsWith("AM") || sFieldResult.endsWith("PM")); +} + +DECLARE_WW8EXPORT_TEST(testN816603, "n816603.doc") +{ + // Bugdoc was 5 pages in Word, 1 in Writer due to pointlessly wrapping the + // table in a frame. Exact layout may depend on fonts available, etc. -- + // but at least make sure that our table spans over multiple pages now. + CPPUNIT_ASSERT(getPages() > 1); +} + +DECLARE_WW8EXPORT_TEST(testPageBorder, "page-border.doc") +{ + // Page border was missing (LineWidth was 0), due to wrong interpretation of pgbApplyTo. + table::BorderLine2 aBorder = getProperty(getStyles("PageStyles")->getByName("Standard"), "TopBorder"); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(convertTwipToMm100(6 * 20)), aBorder.LineWidth); +} + +DECLARE_WW8EXPORT_TEST(testN823651, "n823651.doc") +{ + // Character height was 10pt instead of 7.5pt in the header. + uno::Reference xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + uno::Reference xText = getProperty< uno::Reference >(xStyle, "HeaderTextFirst")->getText(); + CPPUNIT_ASSERT_EQUAL(7.5f, getProperty(getParagraphOfText(1, xText), "CharHeight")); +} + +DECLARE_WW8EXPORT_TEST(testFdo36868, "fdo36868.doc") +{ + OUString aText = parseDump("/root/page/body/txt[3]/Special[@nType='PortionType::Number']", "rText"); + // This was 1.1. + CPPUNIT_ASSERT_EQUAL(OUString("2.1"), aText); +} + +DECLARE_WW8EXPORT_TEST(testListNolevel, "list-nolevel.doc") +{ + // Similar to fdo#36868, numbering portions had wrong values. + OUString aText = parseDump("/root/page/body/txt[1]/Special[@nType='PortionType::Number']", "rText"); + // PortionType::Number was completely missing. + CPPUNIT_ASSERT_EQUAL(OUString("1."), aText); +} + +DECLARE_WW8EXPORT_TEST(testHeaderApoTable, "ooo92948-1.doc") +{ + // the problem was that a table anchored in the header was split across + // 3 text frames and quite messed up + + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + uno::Reference xFrame(xIndexAccess->getByIndex(1), uno::UNO_QUERY); + +// uno::Reference xHeaderText = getProperty>(getStyles("PageStyles")->getByName("Standard"), "HeaderTextFirst"); +// uno::Reference xPara(getParagraphOfText(9, xHeaderText)); +//TODO why does this not work +// uno::Reference xFrame(getParagraphAnchoredObject(1, xPara)); + + uno::Reference xTable(getParagraphOrTable(1, xFrame)); + getCell(xTable, "A1", "Aan" SAL_NEWLINE_STRING "Recipient" SAL_NEWLINE_STRING "Recipient" SAL_NEWLINE_STRING); + getCell(xTable, "A2", "Kopie aan" SAL_NEWLINE_STRING); + getCell(xTable, "A3", "Datum" SAL_NEWLINE_STRING "31 juli 2008"); + getCell(xTable, "A4", "Locatie" SAL_NEWLINE_STRING "Locationr"); + getCell(xTable, "A5", "Van" SAL_NEWLINE_STRING "Sender "); + getCell(xTable, "A6", "Directie" SAL_NEWLINE_STRING "Department"); + getCell(xTable, "A7", "Telefoon" SAL_NEWLINE_STRING "Phone"); +} + +DECLARE_WW8EXPORT_TEST(testBnc821208, "bnc821208.doc") +{ + // WW8Num1z0 earned a Symbol font, turning numbers into rectangles. + uno::Reference xPropertyState(getStyles("CharacterStyles")->getByName("WW8Num1z0"), uno::UNO_QUERY); + beans::PropertyState ePropertyState = xPropertyState->getPropertyState("CharFontName"); + // This was beans::PropertyState_DIRECT_VALUE. + CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DEFAULT_VALUE, ePropertyState); + + // Background of the numbering itself should have been the default, was yellow (0xffff00). + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty(xPropertyState, "CharBackColor")); +} + +DECLARE_WW8EXPORT_TEST(testCp1000044, "cp1000044.doc") +{ + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + // It wasn't possible to fill out this form. + CPPUNIT_ASSERT_EQUAL(false, bool(xStorable->isReadonly())); + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT_EQUAL( true, pDoc->getIDocumentSettingAccess().get( DocumentSettingId::PROTECT_FORM ) ); + + uno::Sequence aGrabBag = getProperty< uno::Sequence >(mxComponent, "InteropGrabBag"); + sal_Int32 nPasswordHash = 0; + for ( sal_Int32 i = 0; i < aGrabBag.getLength(); ++i ) + { + if ( aGrabBag[i].Name == "FormPasswordHash" ) + aGrabBag[i].Value >>= nPasswordHash; + } + CPPUNIT_ASSERT_EQUAL_MESSAGE("Password Hash", sal_Int32(609995782), nPasswordHash); +} + +DECLARE_WW8EXPORT_TEST(testBorderColours, "bordercolours.doc") +{ + // The following 6 colours can only be represented with WW9 (Word 2000) + // BRC (BoRder Control) structures. We can tell that they have been + // exported/imported using a WW8 (Word '97) BRC if they instead come + // through as one of the 16 colours listed at this link: + // http://msdn.microsoft.com/en-us/library/dd773060.aspx + table::BorderLine2 expectedTop(0xFA670C, 0, 53, 0, 1, 53); + table::BorderLine2 expectedLeft(0xD99594, 0, 79, 0, 0, 79); + table::BorderLine2 expectedRight(0xB2A1C7, 53, 53, 53, 3, 159); + table::BorderLine2 expectedBottom(0xB6DDE8, 0, 106, 0, 14, 106); + table::BorderLine2 expectedDashedRed(0xFA670C, 0, 53, 0, 2, 53); + table::BorderLine2 expectedDoubleGreen(0xC2D69B, 26, 106, 26, 4, 159); + + // Paragraph border + uno::Reference bookmarksSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference bookmarks = + bookmarksSupplier->getBookmarks(); + uno::Reference bookmark( + bookmarks->getByName("ParagraphBorder"), uno::UNO_QUERY); + uno::Reference anchor(bookmark->getAnchor()); + table::BorderLine2 border; + border = getProperty(anchor, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedLeft, border); + border = getProperty(anchor, "RightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(anchor, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedBottom, border); + + // Page border + OUString pageStyleName = getProperty(anchor, "PageStyleName"); + uno::Reference pageStyle( + getStyles("PageStyles")->getByName(pageStyleName), uno::UNO_QUERY); + border = getProperty(pageStyle, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(pageStyle, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedLeft, border); + border = getProperty(pageStyle, "RightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(pageStyle, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedBottom, border); + + // Character border + bookmark.set(bookmarks->getByName("CharBorder"), uno::UNO_QUERY); + anchor = bookmark->getAnchor(); + border = getProperty(anchor, "CharTopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "CharLeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "CharRightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "CharBottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + + // Table border + uno::Reference tablesSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference tables = + tablesSupplier->getTextTables(); + uno::Reference table( + tables->getByName("Table1"), uno::UNO_QUERY); + table::TableBorder2 tableBorder = getProperty( + table, "TableBorder2"); + CPPUNIT_ASSERT_EQUAL(expectedTop.Color, tableBorder.TopLine.Color); + CPPUNIT_ASSERT_EQUAL(expectedLeft.Color, tableBorder.LeftLine.Color); + CPPUNIT_ASSERT_EQUAL(expectedRight.Color, tableBorder.RightLine.Color); + CPPUNIT_ASSERT_EQUAL(expectedBottom.Color, tableBorder.BottomLine.Color); + + // Table cells + uno::Reference cell = + table->getCellByName("A2"); + border = getProperty(cell, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(cell, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedLeft, border); + border = getProperty(cell, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedBottom, border); + + cell = table->getCellByName("B2"); + border = getProperty(cell, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDoubleGreen, border); + border = getProperty(cell, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(cell, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDoubleGreen, border); + + cell = table->getCellByName("C2"); + border = getProperty(cell, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDoubleGreen, border); + border = getProperty(cell, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDashedRed, border); + border = getProperty(cell, "RightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(cell, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDoubleGreen, border); + + // Picture border + // (#if'd out as they are not yet imported with correct colours) +#if 0 + bookmark.set(bookmarks->getByName("PictureBorder"),uno::UNO_QUERY); + anchor = bookmark->getAnchor(); + border = getProperty(anchor, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedLeft, border); + border = getProperty(anchor, "RightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(anchor, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedBottom, border); +#endif +} + +DECLARE_WW8EXPORT_TEST(testMsoBrightnessContrast, "msobrightnesscontrast.doc") +{ + uno::Reference image = getShape(1); + uno::Reference imageProperties(image, uno::UNO_QUERY); + uno::Reference graphic; + imageProperties->getPropertyValue( "Graphic" ) >>= graphic; + Graphic vclGraphic(graphic); + BitmapEx bitmap(vclGraphic.GetBitmapEx()); + CPPUNIT_ASSERT_EQUAL( tools::Long(58), bitmap.GetSizePixel().Width()); + CPPUNIT_ASSERT_EQUAL( tools::Long(320), bitmap.GetSizePixel().Height()); + CPPUNIT_ASSERT_EQUAL( Color(206,206,206), bitmap.GetPixelColor(16,27)); + CPPUNIT_ASSERT_EQUAL( Color(206,206,206), bitmap.GetPixelColor(22,48)); +} + +DECLARE_WW8EXPORT_TEST(testTdf95321, "tdf95321.doc") +{ + // The problem was that there should be content in the second cell + // but there wasn't. + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Second Column"), uno::Reference(xTable->getCellByName("B1"), uno::UNO_QUERY_THROW)->getString()); +} + +DECLARE_WW8EXPORT_TEST(testFdo77844, "fdo77844.doc") +{ + uno::Reference pageStyles = getStyles("PageStyles"); + + // get a page cursor + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xTextViewCursorSupplier( + xModel->getCurrentController(), uno::UNO_QUERY); + uno::Reference xCursor( + xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY); + + // check that the first page has no header + xCursor->jumpToFirstPage(); + OUString pageStyleName = getProperty(xCursor, "PageStyleName"); + uno::Reference pageStyle( + pageStyles->getByName(pageStyleName), uno::UNO_QUERY); + bool headerIsOn = getProperty(pageStyle, "HeaderIsOn"); + CPPUNIT_ASSERT(!headerIsOn); + + // check that the second page has a header + xCursor->jumpToPage(2); + pageStyleName = getProperty(xCursor, "PageStyleName"); + pageStyle.set( + pageStyles->getByName(pageStyleName), uno::UNO_QUERY); + headerIsOn = getProperty(pageStyle, "HeaderIsOn"); + CPPUNIT_ASSERT(headerIsOn); + + // check that the third page has a header + xCursor->jumpToPage(3); + pageStyleName = getProperty(xCursor, "PageStyleName"); + pageStyle.set( + pageStyles->getByName(pageStyleName), uno::UNO_QUERY); + headerIsOn = getProperty(pageStyle, "HeaderIsOn"); + CPPUNIT_ASSERT(headerIsOn); + + // check that the fourth page has no header + // (#if'd out as this is not yet imported correctly) +#if 0 + xCursor->jumpToPage(4); + pageStyleName = getProperty(xCursor, "PageStyleName"); + pageStyle.set( + pageStyles->getByName(pageStyleName), uno::UNO_QUERY); + headerIsOn = getProperty(pageStyle, "HeaderIsOn"); + CPPUNIT_ASSERT(!headerIsOn); +#endif +} + +DECLARE_WW8EXPORT_TEST(testFdp80333, "fdo80333.doc") +{ + // Despite there is no character border, border shadow was imported + uno::Reference xRun(getRun(getParagraph(1),1), uno::UNO_QUERY); + const table::ShadowFormat aShadow = getProperty(xRun, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_NONE, aShadow.Location); +} + +DECLARE_WW8EXPORT_TEST(testFdo81102, "fdo81102.doc") +{ + // get page style at beginning of document + uno::Reference textDocument( + mxComponent, uno::UNO_QUERY); + uno::Reference start = + textDocument->getText()->getStart(); + OUString pageStyleName = getProperty(start, "PageStyleName"); + uno::Reference pageStyle( + getStyles("PageStyles")->getByName(pageStyleName), uno::UNO_QUERY); + + // check that left and right pages do not share the same header + bool headerIsShared = getProperty(pageStyle, "HeaderIsShared"); + CPPUNIT_ASSERT(!headerIsShared); +} + +DECLARE_WW8EXPORT_TEST(testBnc787942, "bnc787942.doc") +{ + // The frame ended up on the second page instead of first. + + // this is on page 1 in Word + parseDump("/root/page[1]/body/txt[4]/anchored"); +} + +DECLARE_WW8EXPORT_TEST(testLayoutHanging, "fdo68967.doc") +{ + // This must not hang in layout +} + +#if HAVE_MORE_FONTS +DECLARE_WW8EXPORT_TEST(testfdo68963, "fdo68963.doc") +{ + // The problem was that the text was not displayed. + CPPUNIT_ASSERT ( !parseDump("/root/page/body/tab/row[2]/cell[1]/txt/Special", "rText").isEmpty() ); + CPPUNIT_ASSERT_EQUAL( OUString("Topic 1"), parseDump("/root/page/body/tab/row[2]/cell[1]/txt/Special", "rText") ); + // all crossreference bookmarks should have a target. Shouldn't be any "Reference source not found" in the xml + CPPUNIT_ASSERT_EQUAL(static_cast(-1), parseDump("/root/page/body/txt[24]/Special[2]","rText").indexOf("Reference source not found")); +} +#endif + +DECLARE_WW8EXPORT_TEST(testTdf99100, "tdf99100.doc") +{ + uno::Reference xHeaderText = getProperty< uno::Reference >(getStyles("PageStyles")->getByName("Standard"), "HeaderText"); + auto xField = getProperty< uno::Reference >(getRun(getParagraphOfText(1, xHeaderText), 2), "TextField"); + // This failed: the second text portion wasn't a field. + CPPUNIT_ASSERT(xField.is()); + CPPUNIT_ASSERT(xField->supportsService("com.sun.star.text.textfield.Chapter")); +} + +DECLARE_WW8EXPORT_TEST(testTdf74328, "tdf74328.doc") +{ +/* +reading page numbers at sections > 255, in this case 256 +*/ + uno::Reference textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextCursor = textDocument->getText()->createTextCursor( ); + uno::Reference xProps(xTextCursor, uno::UNO_QUERY); + uno::Any aOffset = xProps->getPropertyValue("PageNumberOffset"); + sal_Int16 nOffset = 0; + aOffset >>= nOffset; + CPPUNIT_ASSERT_EQUAL(sal_Int16(256), nOffset); +} + +DECLARE_WW8EXPORT_TEST(testTdf95576, "tdf95576.doc") +{ + // The first three paragraphs in this document (which are headings) + // should have zero indent and first line indent + for (int nPara = 1; nPara <= 3; ++nPara) { + std::cout << "nPara = " << nPara << "\n"; + auto xPara = getParagraph(nPara); + + // get the numbering rules effective at this paragraph + uno::Reference xNumRules = + getProperty< uno::Reference >( + xPara, "NumberingRules"); + + // get the numbering level of this paragraph, and the properties + // associated with that numbering level + int numLevel = getProperty(xPara, "NumberingLevel"); + uno::Sequence< beans::PropertyValue > aPropertyValues; + xNumRules->getByIndex(numLevel) >>= aPropertyValues; + + // Now look through these properties for the indent and + // first line indent settings + sal_Int32 nIndentAt = -1; + sal_Int32 nFirstLineIndent = -1; + for(int j = 0 ; j< aPropertyValues.getLength() ; ++j) + { + auto aProp = aPropertyValues[j]; + std::cout << "Prop.Name: " << aProp.Name << "\n"; + if (aProp.Name == "FirstLineIndent") { + nFirstLineIndent = aProp.Value.get(); + } else if (aProp.Name == "IndentAt") { + nIndentAt = aProp.Value.get(); + } + } + + // The indent and first line indent should be zero + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nIndentAt); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nFirstLineIndent); + } +} + +DECLARE_WW8EXPORT_TEST(testTdf59896, "tdf59896.doc") +{ + // This was awt::FontWeight::NORMAL, i.e. the first run wasn't bold, when it should be bold + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty(getRun(getParagraph(1), 1), "CharWeight")); +} + +DECLARE_WW8EXPORT_TEST(testTdf102334, "tdf102334.doc") +{ + // This was false, i.e. the first run wasn't hidden, when it should have been + CPPUNIT_ASSERT_EQUAL(true, getProperty(getRun(getParagraph(7), 1), "CharHidden")); +} + +DECLARE_WW8EXPORT_TEST(testTdf128605, "tdf128605.doc") +{ + OUString aPara1PageStyleName = getProperty(getParagraph(1), "PageStyleName"); + OUString aPara2PageStyleName = getProperty(getParagraph(2), "PageStyleName"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: Standard + // - Actual : Convert 1 + // i.e. the continuous section break resulted in an unwanted page break. + CPPUNIT_ASSERT_EQUAL(aPara1PageStyleName, aPara2PageStyleName); +} + +DECLARE_WW8EXPORT_TEST(testTdf112535, "tdf112535.doc") +{ + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT(pDoc->GetSpzFrameFormats()); + + SwFrameFormats& rFormats = *pDoc->GetSpzFrameFormats(); + CPPUNIT_ASSERT(!rFormats.empty()); + + const SwFrameFormat* pFormat = rFormats[0]; + CPPUNIT_ASSERT(pFormat); + + // Without the accompanying fix in place, this test would have failed: auto-contour was enabled + // in Writer, but not in Word. + CPPUNIT_ASSERT(!pFormat->GetSurround().IsContour()); +} + +DECLARE_WW8EXPORT_TEST(testTdf106291, "tdf106291.doc") +{ + // Table cell was merged vertically instead of horizontally -> had incorrect dimensions + OUString cellWidth = parseDump("/root/page[1]/body/tab/row/cell[1]/infos/bounds", "width"); + OUString cellHeight = parseDump("/root/page[1]/body/tab/row/cell[1]/infos/bounds", "height"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(8650), cellWidth.toInt32()); + CPPUNIT_ASSERT(cellHeight.toInt32() > 200); // height might depend on font size +} + +DECLARE_WW8EXPORT_TEST(testTransparentText, "transparent-text.doc") +{ + uno::Reference xHeaderText = getProperty>( + getStyles("PageStyles")->getByName("Standard"), "HeaderText"); + uno::Reference xParagraph = getParagraphOfText(3, xHeaderText); + // Without the accompanying fix in place, this test would have failed: transparency was set to + // 100%, so the text was not readable. + sal_Int32 nExpected(COL_BLACK); + sal_Int32 nActual(getProperty(xParagraph, "CharTransparence")); + CPPUNIT_ASSERT_EQUAL(nExpected, nActual); +} + +DECLARE_WW8EXPORT_TEST( testTdf105570, "tdf105570.doc" ) +{ + /***** + * MS-DOC specification ( https://msdn.microsoft.com/en-us/library/cc313153 ) + * ch. 2.6.3, sprmTTableHeader: + * A Bool8 value that specifies that the current table row is a header row. + * If the value is 0x01 but sprmTTableHeader is not applied with a value of 0x01 + * for a previous row in the same table, then this property MUST be ignored. + * + * The document have three tables with three rows. + * Table 1 has { 1, 0, 0 } values of the "repeat as header row" property for each row + * Table 2 has { 1, 1, 0 } + * Table 3 has { 0, 1, 1 } + ****/ + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwShellCursor* pShellCursor = pWrtShell->getShellCursor( false ); + SwNodeIndex aIdx = pShellCursor->Start()->nNode; + + // Find first table + SwTableNode* pTableNd = aIdx.GetNode().FindTableNode(); + + CPPUNIT_ASSERT_EQUAL( sal_uInt16(1), pTableNd->GetTable().GetRowsToRepeat() ); + + // Go to next table + aIdx.Assign( *pTableNd->EndOfSectionNode(), 1 ); + while ( nullptr == (pTableNd = aIdx.GetNode().GetTableNode()) ) ++aIdx; + + CPPUNIT_ASSERT_EQUAL( sal_uInt16(2), pTableNd->GetTable().GetRowsToRepeat() ); + + // Go to next table + aIdx.Assign( *pTableNd->EndOfSectionNode(), 1 ); + while ( nullptr == (pTableNd = aIdx.GetNode().GetTableNode()) ) ++aIdx; + + // As first row hasn't sprmTTableHeader set, all following must be ignored, so no rows must be repeated + CPPUNIT_ASSERT_EQUAL( sal_uInt16(0), pTableNd->GetTable().GetRowsToRepeat() ); +} + +DECLARE_WW8EXPORT_TEST(testTdf112346, "tdf112346.doc") +{ + // This was 1, multi-page table was imported as a floating one. + CPPUNIT_ASSERT_EQUAL(0, getShapes()); +} + +DECLARE_WW8EXPORT_TEST(testTdf79639, "tdf79639.doc") +{ + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // as the floating table in the header wasn't converted to a TextFrame. + CPPUNIT_ASSERT_EQUAL(1, getShapes()); +} + +DECLARE_WW8EXPORT_TEST(testTdf122425_2, "tdf122425_2.doc") +{ + // This is for graphic objects in headers/footers + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwPosFlyFrames aPosFlyFrames = pDoc->GetAllFlyFormats(nullptr, false); + // There is one fly frame in the document: the text box + CPPUNIT_ASSERT_EQUAL(size_t(1), aPosFlyFrames.size()); + for (const auto& rPosFlyFrame : aPosFlyFrames) + { + const SwFrameFormat& rFormat = rPosFlyFrame->GetFormat(); + const SfxPoolItem* pItem = nullptr; + + // Check for correct explicitly-set values of UL spacings. Previously this was "DEFAULT", + // and resulted in inherited values (114 = 2 mm) used. + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, rFormat.GetItemState(RES_UL_SPACE, false, &pItem)); + auto pUL = static_cast(pItem); + CPPUNIT_ASSERT(pUL); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pUL->GetUpper()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pUL->GetLower()); + } +} + +DECLARE_WW8EXPORT_TEST(testTdf130262, "tdf130262.doc") +{ + // We had an infinite layout loop +} + +DECLARE_WW8EXPORT_TEST(testTdf38778, "tdf38778_properties_in_run_for_field.doc") +{ + CPPUNIT_ASSERT_EQUAL(10.0f, getProperty(getRun(getParagraph(1), 1), "CharHeight")); + CPPUNIT_ASSERT_EQUAL(OUString("Courier New"), getProperty(getRun(getParagraph(1), 1), "CharFontName")); +} + +DECLARE_WW8EXPORT_TEST(testN325936, "n325936.doc") +{ + /* + * The problem was that the transparent background of the drawing in the + * header was exported as non-transparent. + * + * xray ThisComponent.DrawPage(0).BackColorTransparency + */ + + CPPUNIT_ASSERT_EQUAL(Color(0x000064), getProperty< Color >(getShape(1), "BackColorTransparency")); +} + +DECLARE_WW8EXPORT_TEST(testTscp, "tscp.doc") +{ + uno::Reference xComponentContext(comphelper::getProcessComponentContext()); + uno::Reference xType = rdf::URI::create(xComponentContext, "urn:bails"); + uno::Reference xDocumentMetadataAccess(mxComponent, uno::UNO_QUERY); + uno::Sequence< uno::Reference > aGraphNames = xDocumentMetadataAccess->getMetadataGraphsWithType(xType); + // This failed, no graphs had the urn:bails type. + CPPUNIT_ASSERT_EQUAL(static_cast(1), aGraphNames.getLength()); + uno::Reference xGraphName = aGraphNames[0]; + uno::Reference xGraph = xDocumentMetadataAccess->getRDFRepository()->getGraph(xGraphName); + + // No RDF statement on the first paragraph. + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + uno::Reference xStatements = xGraph->getStatements(xParagraph, uno::Reference(), uno::Reference()); + CPPUNIT_ASSERT_EQUAL(false, static_cast(xStatements->hasMoreElements())); + + // 3 RDF statements on the second paragraph. + xParagraph.set(getParagraph(2), uno::UNO_QUERY); + std::map aExpectedStatements = + { + {"urn:bails:ExportControl:BusinessAuthorization:Identifier", "urn:example:tscp:1"}, + {"urn:bails:ExportControl:BusinessAuthorizationCategory:Identifier", "urn:example:tscp:1:confidential"}, + {"urn:bails:ExportControl:Authorization:StartValidity", "2015-11-27"} + }; + std::map aActualStatements; + xStatements = xGraph->getStatements(xParagraph, uno::Reference(), uno::Reference()); + while (xStatements->hasMoreElements()) + { + rdf::Statement aStatement = xStatements->nextElement().get(); + aActualStatements[aStatement.Predicate->getNamespace() + aStatement.Predicate->getLocalName()] = aStatement.Object->getStringValue(); + } + CPPUNIT_ASSERT(bool(aExpectedStatements == aActualStatements)); + + // No RDF statement on the third paragraph. + xParagraph.set(getParagraph(3), uno::UNO_QUERY); + xStatements = xGraph->getStatements(xParagraph, uno::Reference(), uno::Reference()); + CPPUNIT_ASSERT_EQUAL(false, static_cast(xStatements->hasMoreElements())); +} + +DECLARE_WW8EXPORT_TEST(testFdo45724, "fdo45724.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The text and background color of the control shape was not correct. + uno::Reference xControlShape(getShape(1), uno::UNO_QUERY); + uno::Reference xComponent(xControlShape->getControl(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, getProperty(xComponent, "BackgroundColor")); + CPPUNIT_ASSERT_EQUAL(OUString("xxx"), xComponent->getCurrentValue().get()); +} + +DECLARE_WW8EXPORT_TEST(testTdf136620, "tdf136620.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + uno::Reference xShape = getShape(1); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(5636), xShape->getPosition().X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1826), xShape->getPosition().Y); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6630), xShape->getSize().Height); + + // Without the fix in place, this test would have failed with + // - Expected: 5853 + // - Actual : 850 + CPPUNIT_ASSERT_EQUAL(sal_Int32(5853), xShape->getSize().Width); +} + +DECLARE_WW8EXPORT_TEST(testFdo46020, "fdo46020.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The footnote in that document wasn't exported, check that it is actually exported + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xFootnotes->getCount()); +} + +DECLARE_WW8EXPORT_TEST(testFirstHeaderFooter, "first-header-footer.doc") +{ + // 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()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page footer"), parseDump("/root/page[1]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page header"), parseDump("/root/page[2]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page footer"), parseDump("/root/page[2]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page header"), parseDump("/root/page[3]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer"), parseDump("/root/page[3]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page header2"), parseDump("/root/page[4]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("First page footer 2"), parseDump("/root/page[4]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page header 2"), parseDump("/root/page[5]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer 2"), parseDump("/root/page[5]/footer/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page header 2"), parseDump("/root/page[6]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Even page footer 2"), parseDump("/root/page[6]/footer/txt/text()")); +} + +DECLARE_WW8EXPORT_TEST(testZoom, "zoom.doc") +{ + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xViewSettingsSupplier(xModel->getCurrentController(), uno::UNO_QUERY); + uno::Reference xPropertySet(xViewSettingsSupplier->getViewSettings()); + sal_Int16 nValue = 0; + xPropertySet->getPropertyValue("ZoomValue") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(42), nValue); +} + +DECLARE_WW8EXPORT_TEST(testZoomType, "zoomtype.doc") +{ + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xViewSettingsSupplier(xModel->getCurrentController(), uno::UNO_QUERY); + uno::Reference xPropertySet(xViewSettingsSupplier->getViewSettings()); + sal_Int16 nValue = 0; + xPropertySet->getPropertyValue("ZoomType") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(view::DocumentZoomType::PAGE_WIDTH), nValue); +} + +DECLARE_WW8EXPORT_TEST(test56513, "fdo56513.doc") +{ + CPPUNIT_ASSERT_EQUAL(OUString("This is the header of the first section"), parseDump("/root/page[1]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("This is the first page header of the second section"), parseDump("/root/page[2]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("This is the non-first-page header of the second section"), parseDump("/root/page[3]/header/txt/text()")); +} + +DECLARE_WW8EXPORT_TEST(testNewPageStylesTable, "new-page-styles.doc") +{ + CPPUNIT_ASSERT_EQUAL(OUString("Sigma Space Performance Goals and Results (Page 1)*"), parseDump("/root/page[1]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Sigma Space Performance Assessment (Page 2)****"), parseDump("/root/page[2]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Sigma Space Performance Goals: Next Year (Page 3)*******"), parseDump("/root/page[3]/header/txt/text()")); +} + +DECLARE_WW8EXPORT_TEST(testFdo42144, "fdo42144.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Footer wasn't disabled -- instead empty footer was exported. + uno::Reference xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xStyle, "FooterIsOn")); +} + +DECLARE_WW8EXPORT_TEST(testCharacterBorder, "charborder.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xRun(getRun(getParagraph(1),1), uno::UNO_QUERY); + // WW8 has just one border attribute (sprmCBrc) for text border so all side has + // the same border + // Border + { + const table::BorderLine2 aTopBorder = getProperty(xRun,"CharTopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(table::BorderLine2(0xFF3333,0,318,0,0,318), aTopBorder); + CPPUNIT_ASSERT_BORDER_EQUAL(aTopBorder, getProperty(xRun,"CharLeftBorder")); + CPPUNIT_ASSERT_BORDER_EQUAL(aTopBorder, getProperty(xRun,"CharBottomBorder")); + CPPUNIT_ASSERT_BORDER_EQUAL(aTopBorder, getProperty(xRun,"CharRightBorder")); + } + + // Padding (dptSpace) it is constant 0 + { + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xRun,"CharTopBorderDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xRun,"CharLeftBorderDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xRun,"CharBottomBorderDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xRun,"CharRightBorderDistance")); + } + + // Shadow (fShadow) + /* WW8 use just one bool value for shadow so the next conversions + are made during an export-import round + color: any -> black + location: any -> bottom-right + width: any -> border width */ + { + const table::ShadowFormat aShadow = getProperty(xRun, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + CPPUNIT_ASSERT_EQUAL(sal_Int16(318), aShadow.ShadowWidth); + } +} + +DECLARE_WW8EXPORT_TEST(testTdf41542_imagePadding, "tdf41542_imagePadding.odt") +{ + CPPUNIT_ASSERT_EQUAL(3, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // borderlessImage - image WITHOUT BORDERS : simulate padding with -crop + text::GraphicCrop crop = getProperty(getShape(2), "GraphicCrop"); + CPPUNIT_ASSERT( crop.Left != 0 ); + CPPUNIT_ASSERT( crop.Right != 0 ); + CPPUNIT_ASSERT_EQUAL( crop.Left, crop.Top ); + CPPUNIT_ASSERT_EQUAL( crop.Right, crop.Bottom ); + CPPUNIT_ASSERT_EQUAL( crop.Left, crop.Right ); + + // borderedImage - image WITH BORDERS : simulate padding with -crop + crop = getProperty(getShape(3), "GraphicCrop"); + CPPUNIT_ASSERT( crop.Left != 0 ); + CPPUNIT_ASSERT( crop.Right != 0 ); + CPPUNIT_ASSERT_EQUAL( crop.Left, crop.Top ); + CPPUNIT_ASSERT_EQUAL( crop.Right, crop.Bottom ); + CPPUNIT_ASSERT_EQUAL( crop.Left, crop.Right ); +} + +DECLARE_WW8EXPORT_TEST(testFdo77454, "fdo77454.doc") +{ + { + // check negative crops round-trip (with border/padding of 1) + text::GraphicCrop const crop = + getProperty(getShape(1), "GraphicCrop"); + CPPUNIT_ASSERT(abs(sal_Int32( -439) - crop.Left) <= 2); + CPPUNIT_ASSERT(abs(sal_Int32(-7040) - crop.Right) <= 2); + CPPUNIT_ASSERT(abs(sal_Int32( -220) - crop.Top) <= 2); + CPPUNIT_ASSERT(abs(sal_Int32(-7040) - crop.Bottom) <= 2); + } + + { + // check positive crops round-trip (with padding of 1) + text::GraphicCrop const crop = + getProperty(getShape(2), "GraphicCrop"); + CPPUNIT_ASSERT(abs(sal_Int32( 326) - crop.Left) <= 3); + CPPUNIT_ASSERT(abs(sal_Int32(1208) - crop.Right) <= 3); + CPPUNIT_ASSERT(abs(sal_Int32(1635) - crop.Top) <= 3); + CPPUNIT_ASSERT(abs(sal_Int32( 95) - crop.Bottom) <= 3); + } +} + +DECLARE_WW8EXPORT_TEST(testFdo59530, "fdo59530.doc") +{ + // See ooxmlexport's testFdo38244(). + // Test comment range feature. + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + xRunEnum->nextElement(); + uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), getProperty(xPropertySet, "TextPortionType")); + xRunEnum->nextElement(); + xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), getProperty(xPropertySet, "TextPortionType")); + + // Test initials. + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty(xPropertySet, "Initials")); + + // Test commented text range which spans over more text nodes + // Comment starts in the second paragraph + xRunEnumAccess.set(xParaEnum->nextElement(), uno::UNO_QUERY); + xRunEnum = xRunEnumAccess->createEnumeration(); + xRunEnum->nextElement(); + xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), getProperty(xPropertySet, "TextPortionType")); + // Comment ends in the third paragraph + xRunEnumAccess.set(xParaEnum->nextElement(), uno::UNO_QUERY); + xRunEnum = xRunEnumAccess->createEnumeration(); + xRunEnum->nextElement(); + xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), getProperty(xPropertySet, "TextPortionType")); +} + +DECLARE_WW8EXPORT_TEST(testCommentsNested, "comments-nested.doc") +{ + uno::Reference xOuter = getProperty< uno::Reference >(getRun(getParagraph(1), 2), "TextField"); + CPPUNIT_ASSERT_EQUAL(OUString("Outer"), getProperty(xOuter, "Content")); + + uno::Reference xInner = getProperty< uno::Reference >(getRun(getParagraph(1), 4), "TextField"); + CPPUNIT_ASSERT_EQUAL(OUString("Inner"), getProperty(xInner, "Content")); +} + +DECLARE_WW8EXPORT_TEST(testBorderColoursExport, "bordercolours.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // This is very close to testBorderColours in ww8import.cxx, but for export + + // The following 6 colours can only be represented with WW9 (Word 2000) + // BRC (BoRder Control) structures. We can tell that they have been + // exported/imported using a WW8 (Word '97) BRC if they instead come + // through as one of the 16 colours listed at this link: + // http://msdn.microsoft.com/en-us/library/dd773060.aspx + table::BorderLine2 expectedTop(0xFA670C, 0, 53, 0, 1, 53); + table::BorderLine2 expectedLeft(0xD99594, 0, 79, 0, 0, 79); + table::BorderLine2 expectedRight(0xB2A1C7, 53, 53, 53, 3, 159); + table::BorderLine2 expectedBottom(0xB6DDE8, 0, 106, 0, 14, 106); + table::BorderLine2 expectedDashedRed(0xFA670C, 0, 53, 0, 2, 53); + table::BorderLine2 expectedDoubleGreen(0xC2D69B, 26, 106, 26, 4, 159); + + // Paragraph border + uno::Reference bookmarksSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference bookmarks = + bookmarksSupplier->getBookmarks(); + uno::Reference bookmark( + bookmarks->getByName("ParagraphBorder"), uno::UNO_QUERY); + uno::Reference anchor(bookmark->getAnchor()); + table::BorderLine2 border; + border = getProperty(anchor, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedLeft, border); + border = getProperty(anchor, "RightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(anchor, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedBottom, border); + + // Page border + OUString pageStyleName = getProperty(anchor, "PageStyleName"); + uno::Reference pageStyle( + getStyles("PageStyles")->getByName(pageStyleName), uno::UNO_QUERY); + border = getProperty(pageStyle, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(pageStyle, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedLeft, border); + border = getProperty(pageStyle, "RightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(pageStyle, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedBottom, border); + + // Character border + bookmark.set(bookmarks->getByName("CharBorder"), uno::UNO_QUERY); + anchor = bookmark->getAnchor(); + border = getProperty(anchor, "CharTopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "CharLeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "CharRightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "CharBottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + + // Table border + uno::Reference tablesSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference tables = + tablesSupplier->getTextTables(); + uno::Reference table( + tables->getByName("Table1"), uno::UNO_QUERY); + table::TableBorder2 tableBorder = getProperty( + table, "TableBorder2"); + CPPUNIT_ASSERT_EQUAL(expectedTop.Color, tableBorder.TopLine.Color); + CPPUNIT_ASSERT_EQUAL(expectedLeft.Color, tableBorder.LeftLine.Color); + CPPUNIT_ASSERT_EQUAL(expectedRight.Color, tableBorder.RightLine.Color); +#if 0 + // #if'd out because the "fine dashed" border line style for table borders + // does not seem to save or load correctly in odt format at present + CPPUNIT_ASSERT_EQUAL(expectedBottom.Color, tableBorder.BottomLine.Color); +#endif + + // Table cells + uno::Reference cell = + table->getCellByName("A2"); + border = getProperty(cell, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(cell, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedLeft, border); +#if 0 + // #if'd out because the "fine dashed" border line style for table borders + // does not seem to save or load correctly in odt format at present + border = getProperty(cell, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedBottom, border); +#endif + + cell = table->getCellByName("B2"); + border = getProperty(cell, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDoubleGreen, border); + border = getProperty(cell, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(cell, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDoubleGreen, border); + + cell = table->getCellByName("C2"); + border = getProperty(cell, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDoubleGreen, border); + border = getProperty(cell, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDashedRed, border); + border = getProperty(cell, "RightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(cell, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedDoubleGreen, border); + + // Picture border + // (#if'd out as they are not yet exported with correct colours) +#if 0 + bookmark.set(bookmarks->getByName("PictureBorder"),uno::UNO_QUERY); + anchor = bookmark->getAnchor(); + border = getProperty(anchor, "TopBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedTop, border); + border = getProperty(anchor, "LeftBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedLeft, border); + border = getProperty(anchor, "RightBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedRight, border); + border = getProperty(anchor, "BottomBorder"); + CPPUNIT_ASSERT_BORDER_EQUAL(expectedBottom, border); +#endif +} + +DECLARE_WW8EXPORT_TEST(testRedlineExport1, "redline-export-1.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xParagraph = getParagraph(1); + uno::Reference xRunEnumAccess(xParagraph, uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + //there must be no redline information on the first line before and after reloading + while (xRunEnum->hasMoreElements()) + { + uno::Reference xRun(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(false, hasProperty(xRun, "RedlineType")); + } +} + +DECLARE_WW8EXPORT_TEST(testRedlineExport2, "redline-export-2.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + //there must be redline information on the first portion of the third paragraph before and after reloading + CPPUNIT_ASSERT_EQUAL(true, hasProperty(getRun(getParagraph(3), 1), "RedlineType")); +} + +DECLARE_WW8EXPORT_TEST(testRedlineExport3, "redline-export-3.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + //there must be redline information just on the para-break boundary between para one and two + CPPUNIT_ASSERT_EQUAL(false, hasProperty(getRun(getParagraph(1), 1), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(true, hasProperty(getRun(getParagraph(1), 2), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(true, hasProperty(getRun(getParagraph(2), 1), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(false, hasProperty(getRun(getParagraph(2), 2), "RedlineType")); +} + +DECLARE_WW8EXPORT_TEST(testCellBgColor, "cell-bg-color.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0xCC0000), getProperty(xTable->getCellByName("A1"), "BackColor")); +} + +DECLARE_WW8EXPORT_TEST(testBnc636128, "bnc636128.doc") +{ + // Import / export of FFData.cch was missing. + uno::Reference xFormField = getProperty< uno::Reference >(getRun(getParagraph(1), 2), "Bookmark"); + uno::Reference xParameters = xFormField->getParameters(); + // This resulted in a container.NoSuchElementException. + CPPUNIT_ASSERT_EQUAL(sal_uInt16(5), xParameters->getByName("MaxLength").get()); +} + + +DECLARE_WW8EXPORT_TEST(testWw8Cjklist30, "cjklist30.doc") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::TIAN_GAN_ZH, numFormat); +} + +DECLARE_WW8EXPORT_TEST(testWw8Cjklist31, "cjklist31.doc") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::DI_ZI_ZH, numFormat); +} + +DECLARE_WW8EXPORT_TEST(testWw8Cjklist34, "cjklist34.doc") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::NUMBER_UPPER_ZH_TW, numFormat); +} + +DECLARE_WW8EXPORT_TEST(testWw8Cjklist35, "cjklist35.doc") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(1); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::NUMBER_LOWER_ZH, numFormat); +} + +DECLARE_WW8EXPORT_TEST(testTdf118564, "tdf118564.doc") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(3); + CPPUNIT_ASSERT_EQUAL(style::NumberingType::NUMBER_LOWER_ZH, numFormat); +} + +DECLARE_WW8EXPORT_TEST(testTdf92281, "tdf92281.doc") +{ + uno::Reference xRun(getRun(getParagraph(1),1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontNameAsian")); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontNameComplex")); + + uno::Reference xXText = getParagraph(1)->getText(); + uno::Reference xCursor = xXText->createTextCursor(); + + xCursor->goRight( 5 , false ); + uno::Reference< beans::XPropertySet > xPropSet(xCursor, uno::UNO_QUERY); + static constexpr OUStringLiteral aFontname = u"\u65B0\u7D30\u660E\u9AD4;PMingLiU"; + CPPUNIT_ASSERT_EQUAL(OUString("Calibri"), getProperty(xPropSet, "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString(aFontname), getProperty(xPropSet, "CharFontNameAsian")); + CPPUNIT_ASSERT_EQUAL(OUString("Times New Roman"), getProperty(xPropSet, "CharFontNameComplex")); +} + +DECLARE_WW8EXPORT_TEST(testCommentedTable, "commented-table.doc") +{ + // Document has a non-trivial commented text range, as the range contains a table. + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + // After first import, there was an off-by-one during import, so this was "efore.\nA1\nB1\nAfte". (Notice the additional "e" prefix.) + // After export and import, things got worse, this was "\nA1\nB1\nAfte". + CPPUNIT_ASSERT_EQUAL(OUString("fore." SAL_NEWLINE_STRING "A1" SAL_NEWLINE_STRING "B1" SAL_NEWLINE_STRING "Afte"), xField->getAnchor()->getString()); +} + +DECLARE_WW8EXPORT_TEST(testTextVerticalAdjustment, "tdf36117_verticalAdjustment.doc") +{ + //Preserve the page vertical alignment setting for .doc + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT(pDoc); + + SwPageDesc* pDesc = &pDoc->GetPageDesc( 0 ); + drawing::TextVerticalAdjust nVA = pDesc->GetVerticalAdjustment(); + CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_CENTER, nVA ); + + pDesc = &pDoc->GetPageDesc( 1 ); + nVA = pDesc->GetVerticalAdjustment(); + CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_TOP, nVA ); + + pDesc = &pDoc->GetPageDesc( 2 ); + nVA = pDesc->GetVerticalAdjustment(); + CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_BOTTOM, nVA ); + + pDesc = &pDoc->GetPageDesc( 3 ); + nVA = pDesc->GetVerticalAdjustment(); + CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_BLOCK, nVA ); +} + +DECLARE_WW8EXPORT_TEST(testRES_MIRROR_GRAPH_BOTH, "tdf56321_flipImage_both.doc") +{ + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT(pDoc); + + for (SwNodeOffset n(0); ; n++) + { + SwNode* pNode = pDoc->GetNodes()[ n ]; + if (SwGrfNode *pGrfNode = pNode->GetGrfNode()) + { + CPPUNIT_ASSERT_EQUAL(int(MirrorGraph::Both), static_cast(pGrfNode->GetSwAttrSet().GetMirrorGrf().GetValue())); + break; + } + } +} + +DECLARE_WW8EXPORT_TEST(testCommentExport, "comment-export.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + struct TextPortionInfo { + OUString sKind; + OUString sText; + int nAnnotationID; + }; + + const TextPortionInfo aTextPortions[] = { + {OUString("Annotation"), OUString("Comment on [A...A]"), 0}, + {OUString("Text"), OUString("[A xx "), 0}, + {OUString("Annotation"), OUString("Comment on [B...B]"), 1}, + {OUString("Text"), OUString("[B x "), 0}, + {OUString("Annotation"), OUString("Comment on [C..C]"), 2}, + {OUString("Text"), OUString("[C x B]"), 0}, + {OUString("AnnotationEnd"), OUString(), 1}, + {OUString("Text"), OUString(" x C]"), 0}, + {OUString("AnnotationEnd"), OUString(), 2}, + {OUString("Text"), OUString(" xx A]"), 0}, + {OUString("AnnotationEnd"), OUString(), 0}, + {OUString("Text"), OUString(" Comment on a point"), 0}, + {OUString("Annotation"), OUString("Comment on point"), 3}, + {OUString("Text"), OUString("x "), 0}, + {OUString("Annotation"), OUString("Comment on AA...BB"), 4}, + {OUString("Annotation"), OUString("Comment on AAAAAA"), 5}, + {OUString("Text"), OUString("AAAAAA"), 0}, + {OUString("AnnotationEnd"), OUString(), 5}, + {OUString("Text"), OUString(" BBBBBB"), 0}, + {OUString("AnnotationEnd"), OUString(), 4} + }; + + OUString sNames[6]; + + const int nNumberOfTextPortions = SAL_N_ELEMENTS(aTextPortions); + + uno::Reference xPara = getParagraph(1); + + for (int i = 0; i < nNumberOfTextPortions; ++i) + { + OUString sKind = aTextPortions[i].sKind; + uno::Reference xRun = getRun(xPara, i + 1); + uno::Reference xPropertySet(xRun, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sKind, getProperty(xPropertySet, "TextPortionType")); + + if (sKind == "Text") + { + // Check if textportion has the correct text + CPPUNIT_ASSERT_EQUAL(aTextPortions[i].sText, xRun->getString()); + } + else if (sKind == "Annotation") + { + // Check if the comment text is correct and save the name of the comment + uno::Reference xComment = getProperty< uno::Reference >(xRun, "TextField"); + CPPUNIT_ASSERT_EQUAL(aTextPortions[i].sText, getProperty(xComment, "Content")); + sNames[aTextPortions[i].nAnnotationID] = getProperty(xComment, "Name"); + } + else // if (sKind == OUString("AnnotationEnd")) + { + // Check if the correct Annotation ends here (by Name) + uno::Reference xBookmark(getProperty< uno::Reference >(xRun, "Bookmark"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sNames[aTextPortions[i].nAnnotationID], xBookmark->getName()); + } + } +} + +#if HAVE_MORE_FONTS +DECLARE_WW8EXPORT_TEST(testTableKeep, "tdf91083.odt") +{ + CPPUNIT_ASSERT_EQUAL(7, getPages()); + //emulate table "keep with next" -do not split table + CPPUNIT_ASSERT_EQUAL( OUString("Row 1"), parseDump("/root/page[3]/body/tab[1]/row[2]/cell[1]/txt[1]") ); + CPPUNIT_ASSERT_EQUAL( OUString("Row 1"), parseDump("/root/page[6]/body/tab[1]/row[2]/cell[1]/txt[1]") ); +} +#endif + +DECLARE_WW8EXPORT_TEST(tesTdf91083_tableKeep2, "tdf91083_tableKeep2.odt") +{ + //emulate table "keep with next" - split large row in order to keep with previous paragraph + CPPUNIT_ASSERT_EQUAL_MESSAGE("Table doesn't split, so it starts on page 2", + OUString("0"), parseDump("count(//page[1]//tab)") ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Page 2 starts with a paragraph/title, not a table", + OUString("KeepWithNext"), parseDump("//page[2]/body/txt[1]") ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Table sticks with previous paragraph, so it starts on page 2", + OUString("1"), parseDump("count(//page[2]//tab)") ); + CPPUNIT_ASSERT_MESSAGE("Row itself splits, not the table at a row boundary", + "Cell 2" != parseDump("//page[3]//tab//row[2]/cell[1]/txt[1]") ); +} + +DECLARE_WW8EXPORT_TEST(tesTdf91083_tableKeep3, "tdf91083_tableKeep3.odt") +{ + CPPUNIT_ASSERT_EQUAL(3, getPages()); + //emulate table "keep with next" - split single row table in order to keep with previous paragraph + CPPUNIT_ASSERT_EQUAL_MESSAGE("Table doesn't split, so it starts on page 2", + OUString("0"), parseDump("count(//page[1]//tab)") ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Table sticks with previous paragraph, so it starts on page 2", + OUString("1"), parseDump("count(//page[2]//tab)") ); +} + +DECLARE_WW8EXPORT_TEST(testTdf76349_textboxMargins, "tdf76349_textboxMargins.doc") +{ + // textboxes without borders were losing their spacing items in round-tripping + CPPUNIT_ASSERT( 0 < parseDump("/root/page/body/txt/anchored/fly/infos/prtBounds", "left").toInt32() ); + + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Textbox background color", Color(0xD8, 0xD8, 0xD8), getProperty(xShape, "BackColor")); +} + +DECLARE_WW8EXPORT_TEST(testMoveRange, "fdo66304-1.odt") +{ + //the save must survive without asserting +} + +DECLARE_WW8EXPORT_TEST(testClearFramePams, "tdf46441-2.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + //the save must survive without asserting +} + +DECLARE_WW8EXPORT_TEST(testTdf94386, "tdf94386.odt") +{ + // check that the first and next page use different page styles + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xTextViewCursorSupplier( + xModel->getCurrentController(), uno::UNO_QUERY); + uno::Reference xCursor( + xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY); + + xCursor->jumpToFirstPage(); + OUString firstPageStyleName = getProperty(xCursor, "PageStyleName"); + xCursor->jumpToLastPage(); + OUString lastPageStyleName = getProperty(xCursor, "PageStyleName"); + CPPUNIT_ASSERT(firstPageStyleName != lastPageStyleName); + + uno::Reference xFirstPropertySet(getStyles("PageStyles")->getByName(firstPageStyleName), uno::UNO_QUERY); + awt::Size fSize; + xFirstPropertySet->getPropertyValue("Size") >>= fSize; + + uno::Reference xNextPropertySet(getStyles("PageStyles")->getByName(lastPageStyleName), uno::UNO_QUERY); + awt::Size lSize; + xNextPropertySet->getPropertyValue("Size") >>= lSize; + + CPPUNIT_ASSERT((fSize.Width != lSize.Width)); + CPPUNIT_ASSERT((fSize.Height != lSize.Height)); +} + +DECLARE_WW8EXPORT_TEST(testTdf99474, "tdf99474.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // The bullet colour of paragraph #3 should be COL_AUTO + auto xPara = getParagraph(3); + uno::Reference xNumRules = + getProperty< uno::Reference >( + xPara, "NumberingRules"); + + int numLevel = getProperty(xPara, "NumberingLevel"); + uno::Sequence< beans::PropertyValue > aPropertyValues; + xNumRules->getByIndex(numLevel) >>= aPropertyValues; + OUString charStyleName; + for(int j = 0 ; j< aPropertyValues.getLength() ; ++j) + { + auto aProp = aPropertyValues[j]; + if (aProp.Name == "CharStyleName") { + charStyleName = aProp.Value.get(); + break; + } + } + CPPUNIT_ASSERT(charStyleName.getLength()); + uno::Reference xStyle( + getStyles("CharacterStyles")->getByName(charStyleName), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(xStyle, "CharColor")); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ww8export/ww8export2.cxx b/sw/qa/extras/ww8export/ww8export2.cxx new file mode 100644 index 000000000..40311d9e5 --- /dev/null +++ b/sw/qa/extras/ww8export/ww8export2.cxx @@ -0,0 +1,1104 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ww8export/data/", "MS Word 97") {} + + bool mustTestImportOf(const char* filename) const override + { + // If the testcase is stored in some other format, it's pointless to test. + return o3tl::ends_with(filename, ".doc"); + } + +}; +DECLARE_WW8EXPORT_TEST(testTdf99120, "tdf99120.doc") +{ + CPPUNIT_ASSERT_EQUAL(OUString("Section 1, odd."), parseDump("/root/page[1]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Section 1, even."), parseDump("/root/page[2]/header/txt/text()")); + // This failed: the header was empty on the 3rd page, as the first page header was shown. + CPPUNIT_ASSERT_EQUAL(OUString("Section 2, odd."), parseDump("/root/page[3]/header/txt/text()")); + CPPUNIT_ASSERT_EQUAL(OUString("Section 2, even."), parseDump("/root/page[4]/header/txt/text()")); +} + +DECLARE_WW8EXPORT_TEST(testTdf41542_borderlessPadding, "tdf41542_borderlessPadding.odt") +{ + // the page style's borderless padding should force this to 3 pages, not 1 + CPPUNIT_ASSERT_EQUAL( 3, getPages() ); +} + +DECLARE_WW8EXPORT_TEST(testTdf60378_mergedBorders, "tdf60378_mergedBorders.doc") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + // The border width was zero + table::BorderLine2 aBorder = getProperty(xTable->getCellByName("B2"), "RightBorder"); + CPPUNIT_ASSERT(aBorder.LineWidth > 0); +} + +DECLARE_WW8EXPORT_TEST(testTdf55528_relativeTableWidth, "tdf55528_relativeTableWidth.doc") +{ + + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Table relative width percent", sal_Int16(98), getProperty(xTable, "RelativeWidth")); + } + +DECLARE_WW8EXPORT_TEST(testTdf128700_relativeTableWidth, "tdf128700_relativeTableWidth.doc") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + // Since the table has been converted into a floating frame, the relative width either needed to be transferred + // onto the frame, or else just thrown out. Otherwise it becomes relative to the size of the frame. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Floated table can't use relative width", sal_Int16(0), getProperty(xTable, "RelativeWidth")); +} + +DECLARE_WW8EXPORT_TEST(testTdf116436_tableBackground, "tdf116436_tableBackground.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell = xTable->getCellByName("A1"); + CPPUNIT_ASSERT_EQUAL(Color(0xF8DF7C), getProperty(xCell, "BackColor")); + xCell.set(xTable->getCellByName("A6")); + CPPUNIT_ASSERT_EQUAL(Color(0x81D41A), getProperty(xCell, "BackColor")); + xCell.set(xTable->getCellByName("B6")); + CPPUNIT_ASSERT_EQUAL(Color(0xFFFBCC), getProperty(xCell, "BackColor")); +} + +DECLARE_WW8EXPORT_TEST(testTdf37153, "tdf37153_considerWrapOnObjPos.doc") +{ + CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_THROUGH, getProperty(getShape(1), "Surround")); + + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(text::VertOrientation::BOTTOM, getProperty(xTable->getCellByName("A1"), "VertOrient")); + + //For MSO compatibility, the image should be at the top of the cell, not at the bottom - despite VertOrientation::BOTTOM + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nFlyTop = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/txt/anchored/fly/infos/bounds", "top").toInt32(); + CPPUNIT_ASSERT_MESSAGE("FlyTop should be 3820, not 6623", nFlyTop < 4000); + sal_Int32 nTextTop = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[2]/txt[1]/infos/bounds", "top").toInt32(); + CPPUNIT_ASSERT_MESSAGE("TextTop should be 5388", nTextTop > 4000); +} + +DECLARE_WW8EXPORT_TEST(testTdf49102_mergedCellNumbering, "tdf49102_mergedCellNumbering.doc") +{ + CPPUNIT_ASSERT_EQUAL( OUString("2."), parseDump("/root/page/body/tab/row[4]/cell/txt/Special[@nType='PortionType::Number']", "rText") ); +} + +DECLARE_WW8EXPORT_TEST(testTdf55427_footnote2endnote, "tdf55427_footnote2endnote.odt") +{ + uno::Reference xPageStyle(getStyles("ParagraphStyles")->getByName("Footnote"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Footnote style is rose color", Color(0xFF007F), getProperty< Color >(xPageStyle, "CharColor")); + xPageStyle.set(getStyles("ParagraphStyles")->getByName("Endnote"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Endnote style is cyan3 color", Color(0x2BD0D2), getProperty< Color >(xPageStyle, "CharColor")); + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + // The footnote numbering type of ARABIC will not transfer over when those footnotes are converted to endnotes. + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Footnote numbering type", SVX_NUM_ARABIC, pDoc->GetFootnoteInfo().m_aFormat.GetNumberingType() ); + // The original document has a real endnote using ROMAN_LOWER numbering, so that setting MUST remain unchanged. + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Endnote numbering type", SVX_NUM_ROMAN_LOWER, pDoc->GetEndNoteInfo().m_aFormat.GetNumberingType() ); + + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + + uno::Reference xEndnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xEndnotes = xEndnotesSupplier->getEndnotes(); + uno::Reference xEndnote; + xEndnotes->getByIndex(0) >>= xEndnote; + uno::Reference xEndnoteText; + xEndnotes->getByIndex(0) >>= xEndnoteText; + + // ODT footnote-at-document-end's closest DOC match is an endnote, so the two imports will not exactly match by design. + if (!mbExported) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE( "original footnote count", sal_Int32(5), xFootnotes->getCount() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "original endnote count", sal_Int32(1), xEndnotes->getCount() ); + + uno::Reference xFootnote; + xFootnotes->getByIndex(0) >>= xFootnote; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "original footnote's number", OUString("1"), xFootnote->getAnchor()->getString() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "original endnote's number", OUString("i"), xEndnote->getAnchor()->getString() ); + + uno::Reference xFootnoteText; + xFootnotes->getByIndex(0) >>= xFootnoteText; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "original footnote style", OUString("Footnote"), getProperty(getParagraphOfText(1, xFootnoteText), "ParaStyleName") ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "original endnote style", OUString("Endnote"), getProperty(getParagraphOfText(1, xEndnoteText), "ParaStyleName") ); + } + else + { + // These asserted items are major differences in the conversion from footnote to endnote, NOT necessary conditions for a proper functioning document. + CPPUNIT_ASSERT_EQUAL_MESSAGE( "At-Document-End footnotes were converted into endnotes", sal_Int32(0), xFootnotes->getCount() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "At-Document-End footnotes became endnotes", sal_Int32(6), xEndnotes->getCount() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "converted footnote's number", OUString("i"), xEndnote->getAnchor()->getString() ); + xEndnotes->getByIndex(4) >>= xEndnote; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "original endnote's new number", OUString("v"), xEndnote->getAnchor()->getString() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "retained footnote style", OUString("Footnote"), getProperty(getParagraphOfText(1, xEndnoteText), "ParaStyleName") ); + xEndnotes->getByIndex(4) >>= xEndnoteText; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "original endnote style", OUString("Endnote"), getProperty(getParagraphOfText(1, xEndnoteText), "ParaStyleName") ); + } +} + +DECLARE_WW8EXPORT_TEST(testTdf107931_KERN_DocEnabled_disabledDefStyle, "testTdf107931_KERN_DocEnabled_disabledDefStyle.doc") +{ + // Paragraph 3: the default style has kerning disabled + CPPUNIT_ASSERT(!getProperty(getRun(getParagraph(3), 1), "CharAutoKerning")); + // Paragraph 4: style with kerning disabled + CPPUNIT_ASSERT(!getProperty(getRun(getParagraph(4), 1), "CharAutoKerning")); + // Paragraph 5: style with kerning enabled + CPPUNIT_ASSERT(getProperty(getRun(getParagraph(5), 1), "CharAutoKerning")); + // Paragraph 6: directly applied character properties: kerning disabled + CPPUNIT_ASSERT(!getProperty(getRun(getParagraph(6), 1), "CharAutoKerning")); + // Paragraph 7: directly applied character properties: kerning enabled + CPPUNIT_ASSERT(getProperty(getRun(getParagraph(7), 1), "CharAutoKerning")); +} + +DECLARE_WW8EXPORT_TEST(testTdf107931_KERN_enabledDefStyle, "testTdf107931_KERN_enabledDefStyle.doc") +{ + // Paragraph 3: the default style has kerning enabled + CPPUNIT_ASSERT(getProperty(getRun(getParagraph(3), 1), "CharAutoKerning")); + // Paragraph 4: style with kerning disabled + CPPUNIT_ASSERT(!getProperty(getRun(getParagraph(4), 1), "CharAutoKerning")); + // Paragraph 5: style with kerning enabled + CPPUNIT_ASSERT(getProperty(getRun(getParagraph(5), 1), "CharAutoKerning")); + // Paragraph 6: directly applied character properties: kerning disabled + CPPUNIT_ASSERT(!getProperty(getRun(getParagraph(6), 1), "CharAutoKerning")); + // Paragraph 7: directly applied character properties: kerning enabled + CPPUNIT_ASSERT(getProperty(getRun(getParagraph(7), 1), "CharAutoKerning")); +} + +DECLARE_WW8EXPORT_TEST(testTdf89377, "tdf89377_tableWithBreakBeforeParaStyle.doc") +{ + // the paragraph style should set table's text-flow break-before-page + CPPUNIT_ASSERT_EQUAL( 2, getPages() ); +} + +DECLARE_WW8EXPORT_TEST(testTdf96277, "tdf96277.doc") +{ + // mismatch between anchoring at paragraph and ULSpacing to Page + CPPUNIT_ASSERT_EQUAL( 1, getPages() ); +} + +DECLARE_WW8EXPORT_TEST(testBnc863018b, "bnc863018b.doc") +{ + // The whitespace above the table should allow text to flow between the table anchor and the table. + // Since it doesn't, don't add the whitespace. + CPPUNIT_ASSERT_EQUAL( 1, getPages() ); +} + +DECLARE_WW8EXPORT_TEST(testTdf112517_maxSprms, "tdf112517_maxSprms.doc") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( sal_Int32(28), xTable->getRows()->getCount() ); +} + +DECLARE_WW8EXPORT_TEST(testTdf108448_endNote, "tdf108448_endNote.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xEndnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xEndnotes = xEndnotesSupplier->getEndnotes(); + uno::Reference xEndnote; + xEndnotes->getByIndex(0) >>= xEndnote; + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of paragraphs in Endnote i", 1, getParagraphs(xEndnote) ); +} + +DECLARE_WW8EXPORT_TEST(testTdf106062_nonHangingFootnote, "tdf106062_nonHangingFootnote.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + uno::Reference xTextRange(xFootnotes->getByIndex(0), uno::UNO_QUERY); + // This failed, tab between the footnote number and the footnote content was lost on import. + CPPUNIT_ASSERT_MESSAGE( "Footnote starts with a tab", xTextRange->getString().startsWith("\t") ); +} + +DECLARE_WW8EXPORT_TEST(testTdf116570_exportFootnote, "tdf116570_exportFootnote.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + uno::Reference xFootnoteText; + xFootnotes->getByIndex(0) >>= xFootnoteText; + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of paragraphs in first footnote", 2, getParagraphs(xFootnoteText) ); +} + +DECLARE_WW8EXPORT_TEST(testTdf80635_pageRightRTL, "tdf80635_pageRightRTL.doc") +{ + // tdf#80635 - transfer the float orientation to the table. + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Horizontal Orientation", text::HoriOrientation::LEFT_AND_WIDTH, getProperty(xTable, "HoriOrient")); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Table Indent", tools::Long(3500), getProperty(xTable, "LeftMargin"), 100); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Did you fix me? Text probably should wrap here", 2, getPages() ); + // If so, replace test with the table set to a greater preferred width so that the text shouldn't wrap +} + +DECLARE_WW8EXPORT_TEST(testTdf80635_marginRTL, "tdf80635_marginRightRTL.doc") +{ + // tdf#80635 - transfer the float orientation to the table. + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + if ( !mbExported ) + CPPUNIT_ASSERT_EQUAL_MESSAGE("Horizontal Orientation", text::HoriOrientation::RIGHT, getProperty(xTable, "HoriOrient")); +} + +DECLARE_WW8EXPORT_TEST(testTdf80635_marginLeft, "tdf80635_marginLeft.doc") +{ + // tdf#80635 - transfer the float orientation to the table. + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + // This was just the GetMinLeft of -199 + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Table Indent", tools::Long(-2950), getProperty(xTable, "LeftMargin"), 100); +} + +DECLARE_WW8EXPORT_TEST(testTdf80635_pageLeft, "tdf80635_pageLeft.doc") +{ + // tdf#80635 - transfer the float orientation to the table. + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + // This was just the GetMinLeft of -199 + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Table Indent", tools::Long(-2750), getProperty(xTable, "LeftMargin"), 100); +} + +DECLARE_WW8EXPORT_TEST(testTdf99197_defaultLTR, "tdf99197_defaultLTR.doc") +{ + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Default Paragraph style, LTR", + text::WritingMode2::LR_TB, getProperty(getParagraph(1), "WritingMode") ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "myDefaultStyle - no base style, LTR", + text::WritingMode2::LR_TB, getProperty(getParagraph(2), "WritingMode") ); +} + +DECLARE_WW8EXPORT_TEST(testTdf107773, "tdf107773.doc") +{ + // This was 1, multi-page table was imported as a floating one. + CPPUNIT_ASSERT_EQUAL(0, getShapes()); + + // tdf#80635 - transfer the float orientation to the table. + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Horizontal Orientation", text::HoriOrientation::CENTER, getProperty(xTable, "HoriOrient")); +} + +DECLARE_WW8EXPORT_TEST(testTdf112074_RTLtableJustification, "tdf112074_RTLtableJustification.doc") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Right To Left writing mode", text::WritingMode2::RL_TB, getProperty(xTable, "WritingMode")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Horizontal Orientation", text::HoriOrientation::LEFT_AND_WIDTH, getProperty(xTable, "HoriOrient")); + CPPUNIT_ASSERT_MESSAGE("Table Indent", getProperty(xTable, "LeftMargin") > 3000); + CPPUNIT_ASSERT_MESSAGE("Table Indent is 3750", getProperty(xTable, "LeftMargin") < 4000 ); + CPPUNIT_ASSERT_EQUAL( style::ParagraphAdjust_RIGHT, static_cast(getProperty(getParagraphOrTable(2), "ParaAdjust")) ); +} + +DECLARE_WW8EXPORT_TEST(testTdf98620_rtlJustify, "tdf98620_rtlJustify.doc") +{ + CPPUNIT_ASSERT_EQUAL( style::ParagraphAdjust_RIGHT, static_cast(getProperty(getParagraph(1), "ParaAdjust")) ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Right To Left style", text::WritingMode2::RL_TB, getProperty(getParagraph(1), "WritingMode")); +} + +DECLARE_WW8EXPORT_TEST(testTdf121110_absJustify, "tdf121110_absJustify.doc") +{ + CPPUNIT_ASSERT_EQUAL( style::ParagraphAdjust_RIGHT, static_cast(getProperty(getParagraph(1), "ParaAdjust")) ); + CPPUNIT_ASSERT_EQUAL( style::ParagraphAdjust_LEFT, static_cast(getProperty(getParagraph(3), "ParaAdjust")) ); +} + +DECLARE_WW8EXPORT_TEST(testTdf106174_rtlParaAlign, "tdf106174_rtlParaAlign.docx") +{ + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_CENTER), getProperty(getParagraph(1), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_CENTER), getProperty(getParagraph(2), "ParaAdjust")); + uno::Reference xPropertySet(getStyles("ParagraphStyles")->getByName("Another paragraph aligned to right"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(xPropertySet, "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(3), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(4), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(5), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(6), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(7), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(8), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(9), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(10), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(11), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(12), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_LEFT), getProperty(getParagraph(13), "ParaAdjust")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(14), "ParaAdjust")); +} + +DECLARE_WW8EXPORT_TEST(testTdf119232_startEvenPage, "tdf119232_startEvenPage.doc") +{ + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), getProperty(getParagraph(1), "PageNumberOffset")); +} + +DECLARE_WW8EXPORT_TEST(testTdf104805, "tdf104805.doc") +{ + // Prefix was "." instead of empty, so the second paragraph was + // rendered as ".1" instead of "1.". + // Unittest modified due to Prefix/Suffix support obsolete + uno::Reference xPara(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf104334, "tdf104334.doc") +{ + // This failed with a container::NoSuchElementException: STYLEREF was + // mapped to SwChapterField, and the field result was "This is a Heading 1" + // instead of just "1". + CPPUNIT_ASSERT_EQUAL(OUString("1"), getRun(getParagraph(2), 4)->getString()); +} + +DECLARE_WW8EXPORT_TEST(testTdf108072, "tdf108072.doc") +{ + // The property IsSplitAllowed was imported from an obsolete property, sprmTFCantSplit90 + // instead of sprmTFCantSplit. sprmTFCantSplit90 is set to true for merged rows, so + // for merged rows incorrect settings were imported, which prevented them from breaking over pages. + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows = xTable->getRows(); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xTableRows->getByIndex(0), "IsSplitAllowed")); +} + +DECLARE_WW8EXPORT_TEST(testTdf123321, "shapes-line-ellipse.doc") +{ + // These are the 3 lines in which 1st and 3rd one were disappearing before + uno::Reference l1 = getShape(7); + uno::Reference l2 = getShape(8); + uno::Reference l3 = getShape(9); + + // first line (smallest) + // Fails without the fix: Expected: 423, Actual: 2 + CPPUNIT_ASSERT_EQUAL(sal_Int32(423), l1->getSize().Height); + // Fails without the fix: Expected: 0, Actual: 2 + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), l1->getSize().Width); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7908), l1->getPosition().X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(37), l1->getPosition().Y); + + // second line (larger) + CPPUNIT_ASSERT_EQUAL(sal_Int32(2542), l2->getSize().Height); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), l2->getSize().Width); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7916), l2->getPosition().X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(289), l2->getPosition().Y); + + // third line (largest) + // Fails without the fix: Expected: 7027, Actual: 2 + CPPUNIT_ASSERT_EQUAL(sal_Int32(7027), l3->getSize().Height); + // Fails without the fix: Expected: 0, Actual: 2 + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), l3->getSize().Width); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7911), l3->getPosition().X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(231), l3->getPosition().Y); +} + +DECLARE_WW8EXPORT_TEST(testTdf91687, "tdf91687.doc") +{ + // Exported Watermarks were resized + uno::Reference xWatermark = getShape(1); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(5172), xWatermark->getSize().Height); + CPPUNIT_ASSERT_EQUAL(sal_Int32(18105), xWatermark->getSize().Width); +} + +DECLARE_WW8EXPORT_TEST(testTdf114308, "tdf114308.doc") +{ + // Watermark with no additional padding + uno::Reference xWatermark = getShape(1); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(8729), xWatermark->getSize().Height); +} + +DECLARE_WW8EXPORT_TEST(testTdf111480, "tdf111480.doc") +{ + // Circular text was imported horizontally + uno::Reference xText = getShape(1); + + CPPUNIT_ASSERT(xText->getSize().Height > 11000); + CPPUNIT_ASSERT(xText->getSize().Width > 11000); +} + +DECLARE_WW8EXPORT_TEST(testTdf70838, "tdf70838.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0); + tools::Rectangle aRect = pPage->GetObj(0)->GetSnapRect(); + CPPUNIT_ASSERT(aRect.GetHeight() > aRect.GetWidth()); +} + +DECLARE_WW8EXPORT_TEST(testTdf70838b_verticalRotation, "tdf70838b_verticalRotation.odt") +{ + CPPUNIT_ASSERT_EQUAL(3, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0); + tools::Rectangle aGroupShape = pPage->GetObj(0)->GetSnapRect(); + tools::Rectangle aLine = pPage->GetObj(2)->GetSnapRect(); + + CPPUNIT_ASSERT_MESSAGE("Smiley faces are round", aGroupShape.GetHeight() > aGroupShape.GetWidth()); + CPPUNIT_ASSERT_MESSAGE("Line is taller, not wider", aLine.GetHeight() > aLine.GetWidth()); +} + +DECLARE_WW8EXPORT_TEST( testTdf129247, "tdf129247.docx" ) +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // Without the fix in place, the checkbox wouldn't be exported + CPPUNIT_ASSERT_EQUAL(1, getShapes()); +} + +DECLARE_WW8EXPORT_TEST( testActiveXCheckbox, "checkbox_control.odt" ) +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // First check box anchored as a floating object + uno::Reference xControlShape; + if(!mbExported) + xControlShape.set(getShape(1), uno::UNO_QUERY); + else + xControlShape.set(getShape(2), uno::UNO_QUERY); + CPPUNIT_ASSERT(xControlShape.is()); + + // Check whether we have the right control + uno::Reference xPropertySet(xControlShape->getControl(), uno::UNO_QUERY); + uno::Reference xServiceInfo(xPropertySet, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, bool(xServiceInfo->supportsService( "com.sun.star.form.component.CheckBox"))); + CPPUNIT_ASSERT_EQUAL(OUString("Floating Checkbox"), getProperty(xPropertySet, "Label")); + + // Check anchor type + uno::Reference xPropertySet2(xControlShape, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER,getProperty(xPropertySet2,"AnchorType")); + + // Second check box anchored inline / as character + if(!mbExported) + xControlShape.set(getShape(2), uno::UNO_QUERY); + else + xControlShape.set(getShape(1), uno::UNO_QUERY); + + // Check whether we have the right control + xPropertySet.set(xControlShape->getControl(), uno::UNO_QUERY); + xServiceInfo.set(xPropertySet, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, bool(xServiceInfo->supportsService("com.sun.star.form.component.CheckBox"))); + CPPUNIT_ASSERT_EQUAL(OUString("Inline Checkbox"), getProperty(xPropertySet, "Label")); + + // Check anchor type + xPropertySet2.set(xControlShape, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AS_CHARACTER,getProperty(xPropertySet2,"AnchorType")); +} + +DECLARE_WW8EXPORT_TEST( testTdf115896_layoutInCell, "tdf115896_layoutInCell.doc" ) +{ + // Check anchor type - was anchored to page because of unknown version of Word + uno::Reference xPropertySet(getShape(1), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER,getProperty(xPropertySet,"AnchorType")); +} + +DECLARE_WW8EXPORT_TEST(testTdf67207_MERGEFIELD, "mailmerge.doc") +{ + uno::Reference xTextField = getProperty< uno::Reference >(getRun(getParagraph(1), 2), "TextField"); + CPPUNIT_ASSERT(xTextField.is()); + uno::Reference xServiceInfo(xTextField, uno::UNO_QUERY_THROW); + uno::Reference xDependent(xTextField, uno::UNO_QUERY_THROW); + + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.Database")); + OUString sValue; + xTextField->getPropertyValue("Content") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString(u"«Name»"), sValue); + + uno::Reference xFiledMaster = xDependent->getTextFieldMaster(); + uno::Reference xFiledMasterServiceInfo(xFiledMaster, uno::UNO_QUERY_THROW); + + CPPUNIT_ASSERT(xFiledMasterServiceInfo->supportsService("com.sun.star.text.fieldmaster.Database")); + + // Defined properties: DataBaseName, Name, DataTableName, DataColumnName, DependentTextFields, DataCommandType, InstanceName, DataBaseURL + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("Name") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("Name"), sValue); + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("DataColumnName") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("Name"), sValue); + CPPUNIT_ASSERT(xFiledMaster->getPropertyValue("InstanceName") >>= sValue); + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.text.fieldmaster.DataBase.Name"), sValue); +} + +DECLARE_OOXMLEXPORT_TEST( testTableCrossReference, "table_cross_reference.odt" ) +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // tdf#42346: Cross references to tables were not saved + // MSO uses simple bookmarks for referencing table caption, so we do the same by export + if (!mbExported) + return; + + // Check whether we have all the necessary bookmarks exported and imported back + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(4), xBookmarksByIdx->getCount()); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_number_only")); + + // Check bookmark text ranges + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table 1: Table caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table 1"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + + // Check reference fields + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + + sal_uInt16 nIndex = 0; + while (xFields->hasMoreElements()) + { + uno::Reference xServiceInfo(xFields->nextElement(), uno::UNO_QUERY); + uno::Reference xPropertySet(xServiceInfo, uno::UNO_QUERY); + switch (nIndex) + { + // Full reference to table caption + case 0: + { + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Table 1: Table caption"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_full"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Reference to table number + case 1: + { + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_number_only"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Reference to caption only + case 2: + { + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_caption_only"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Reference to category and number + case 3: + { + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Table 1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_label_and_number"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Reference to page of the table + case 4: + { + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_full"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Page style reference / exported as simple page reference + case 5: + { + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("1"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_full"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + // Above / below reference + case 6: + { + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextField.GetReference")); + OUString sValue; + sal_Int16 nValue; + xPropertySet->getPropertyValue("CurrentPresentation") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("above"), sValue); + xPropertySet->getPropertyValue("SourceName") >>= sValue; + CPPUNIT_ASSERT_EQUAL(OUString("Ref_Table0_full"), sValue); + xPropertySet->getPropertyValue("SequenceNumber") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), nValue); + break; + } + default: + break; + } + ++nIndex; + } + CPPUNIT_ASSERT_EQUAL(sal_uInt16(8), nIndex); +} + +DECLARE_OOXMLEXPORT_TEST( testTableCrossReferenceCustomFormat, "table_cross_reference_custom_format.odt" ) +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // tdf#42346: Cross references to tables were not saved + // Check also captions with custom formatting + if (!mbExported) + return; + + // Check whether we have all the necessary bookmarks exported and imported back + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(16), xBookmarksByIdx->getCount()); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table0_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table1_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table1_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table1_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table1_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table2_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table2_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table2_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table2_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table3_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table3_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table3_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Table3_number_only")); + + // Check bookmark text ranges + // First table's caption + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1. Table: Table caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1. Table"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + // Second table's caption + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table1_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("2. TableTable caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table1_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("2. Table"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table1_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table1_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("2"), xRange->getString()); + } + // Third table's caption + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table2_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("3) Table Table caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table2_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("3) Table"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table2_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table2_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("3"), xRange->getString()); + } + // Fourth table's caption + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table3_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table 4- Table caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table3_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table 4"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table3_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Table caption"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Table3_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("4"), xRange->getString()); + } +} + +DECLARE_OOXMLEXPORT_TEST( testObjectCrossReference, "object_cross_reference.odt" ) +{ + CPPUNIT_ASSERT_EQUAL(2, getPages()); + // tdf#42346: Cross references to objects were not saved + // MSO uses simple bookmarks for referencing table caption, so we do the same by export + if (!mbExported) + return; + + // Check whether we have all the necessary bookmarks exported and imported back + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(15), xBookmarksByIdx->getCount()); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing0_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Drawing1_full")); + + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration0_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Illustration1_caption_only")); + + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text0_full")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text0_label_and_number")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text0_caption_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text0_number_only")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Ref_Text1_label_and_number")); + + // Check bookmark text ranges + // Cross references to shapes + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Drawing0_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Drawing 1: A rectangle"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Drawing0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Drawing 1"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Drawing0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("A rectangle"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Drawing0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Drawing1_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Drawing 2: a circle"), xRange->getString()); + } + + // Cross references to pictures + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Illustration0_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Illustration 1: A picture"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Illustration0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Illustration 1"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Illustration0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("A picture"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Illustration0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Illustration1_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("an other image"), xRange->getString()); + } + + // Cross references to text frames + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Text0_full"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Text 1: A frame"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Text0_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Text 1"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Text0_caption_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("A frame"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Text0_number_only"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("1"), xRange->getString()); + } + { + uno::Reference xContent(xBookmarksByName->getByName("Ref_Text1_label_and_number"), uno::UNO_QUERY); + uno::Reference xRange = xContent->getAnchor(); + CPPUNIT_ASSERT_EQUAL(OUString("Text 2"), xRange->getString()); + } +} + +DECLARE_WW8EXPORT_TEST(testTdf112118_DOC, "tdf112118.doc") +{ + static const struct { + const char* styleName; + struct { + const char* sideName; + sal_Int32 nMargin; + sal_Int32 nBorderDistance; + sal_Int32 nBorderWidth; + } sideParams[4]; + } styleParams[] = { // Margin (MS-style), border distance, border width + { + "Standard", + { + { "Top", 496, 847, 159 }, // 851 twip, 24 pt (from text), 4.5 pt + { "Left", 2083, 706, 212 }, // 1701 twip, 20 pt (from text), 6.0 pt + { "Bottom", 1401, 564, 35 }, // 1134 twip, 16 pt (from text), 1.0 pt + { "Right", 3471, 423, 106 } // 2268 twip, 12 pt (from text), 3.0 pt + } + }, + { + "Convert 1", + { + { "Top", 847, 496, 159 }, // 851 twip, 24 pt (from edge), 4.5 pt + { "Left", 706, 2083, 212 }, // 1701 twip, 20 pt (from edge), 6.0 pt + { "Bottom", 564, 1401, 35 }, // 1134 twip, 16 pt (from edge), 1.0 pt + { "Right", 423, 3471, 106 } // 2268 twip, 12 pt (from edge), 3.0 pt + } + } + }; + auto xStyles = getStyles("PageStyles"); + + for (const auto& style : styleParams) + { + const OUString sName = OUString::createFromAscii(style.styleName); + uno::Reference xStyle(xStyles->getByName(sName), uno::UNO_QUERY_THROW); + for (const auto& side : style.sideParams) + { + const OUString sSide = OUString::createFromAscii(side.sideName); + const OString sStage = style.styleName + OString::Concat(" ") + side.sideName; + + sal_Int32 nMargin = getProperty(xStyle, sSide + "Margin"); + CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(sStage + " margin width").getStr(), + side.nMargin, nMargin); + + sal_Int32 nBorderDistance = getProperty(xStyle, sSide + "BorderDistance"); + CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(sStage + " border distance").getStr(), + side.nBorderDistance, nBorderDistance); + + table::BorderLine aBorder = getProperty(xStyle, sSide + "Border"); + CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(sStage + " border width").getStr(), + side.nBorderWidth, + sal_Int32(aBorder.OuterLineWidth + aBorder.InnerLineWidth + aBorder.LineDistance)); + + // Check that AUTO border color is imported as black + CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(sStage + " border color").getStr(), + sal_Int32(COL_BLACK), aBorder.Color); + } + } +} + +DECLARE_WW8EXPORT_TEST(testTdf117503, "tdf117503.docx") +{ + // This was 3, first page + standard page styles were not merged together + // on export. + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_WW8EXPORT_TEST(testTdf117885, "tdf117885.doc") +{ + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + /* Get the vertical position of the paragraph containing the text "Start" */ + sal_Int32 nParaA_Top = getXPath(pXmlDoc, + "/root/page/body/column[1]/body/txt[text()='Start']/infos/bounds", "top" + ).toInt32(); + + /* Get the vertical position of the paragraph containing the text "Top B" */ + sal_Int32 nParaB_Top = getXPath(pXmlDoc, + "/root/page/body/column[2]/body/txt[text()='Top B']/infos/bounds", "top" + ).toInt32(); + + /* These two paragraphs are supposed to be at the top of the left + * and right columns respectively. Check that they actually line up: */ + CPPUNIT_ASSERT_EQUAL(nParaA_Top, nParaB_Top); +} + +DECLARE_WW8EXPORT_TEST(testTdf118133, "tdf118133.docx") +{ + // This was 0, doc import + doc export resulted in lost image due to broken + // lazy-loading of tiff images. + CPPUNIT_ASSERT_EQUAL(static_cast(15240), getShape(1)->getSize().Width); +} + +DECLARE_WW8EXPORT_TEST(testTdf118412, "tdf118412.doc") +{ + /* Check that the first page's bottom margin is 1.251cm (not 2.540cm) */ + OUString sPageStyleName = getProperty(getParagraph(1), "PageStyleName"); + uno::Reference xPageStyle( + getStyles("PageStyles")->getByName(sPageStyleName), uno::UNO_QUERY); + sal_Int32 nBottomMargin = getProperty(xPageStyle, "BottomMargin"); + CPPUNIT_ASSERT_EQUAL(static_cast(1251), nBottomMargin); +} + +CPPUNIT_TEST_FIXTURE(Test, testContentControlExport) +{ + // Given a document with a (rich text) content control: + mxComponent = loadFromDesktop("private:factory/swriter"); + uno::Reference xMSF(mxComponent, uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText = xTextDocument->getText(); + uno::Reference xCursor = xText->createTextCursor(); + xText->insertString(xCursor, "test", /*bAbsorb=*/false); + xCursor->gotoStart(/*bExpand=*/false); + xCursor->gotoEnd(/*bExpand=*/true); + uno::Reference xContentControl( + xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY); + xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true); + + // When saving that document to DOC and loading it back: + reload("MS Word 97", ""); + + // Then make sure the dummy character at the end is filtered out: + OUString aBodyText = getBodyText(); + // Without the accompanying fix in place, this test would have failed: + // - Expected: test + // - Actual : test + // i.e. the CH_TXTATR_BREAKWORD at the end was written, then the import replaced that with a + // space. + CPPUNIT_ASSERT_EQUAL(OUString("test"), aBodyText); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ww8export/ww8export3.cxx b/sw/qa/extras/ww8export/ww8export3.cxx new file mode 100644 index 000000000..067d3486e --- /dev/null +++ b/sw/qa/extras/ww8export/ww8export3.cxx @@ -0,0 +1,1104 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() + : SwModelTestBase("/sw/qa/extras/ww8export/data/", "MS Word 97") + { + } + + bool mustTestImportOf(const char* filename) const override + { + // If the testcase is stored in some other format, it's pointless to test. + return o3tl::ends_with(filename, ".doc"); + } +}; + +DECLARE_WW8EXPORT_TEST(testTdf37778_readonlySection, "tdf37778_readonlySection.doc") +{ + uno::Reference xStorable(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT( xStorable->isReadonly() ); + + uno::Reference xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + // The problem was that section protection was being enabled in addition to being read-only. + // This created an explicit section with protection. There should be just the default, non-explicit section. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Number of Sections", sal_Int32(0), xSections->getCount()); + + // tdf#127862: page fill color (in this case white) was lost + uno::Reference xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT(drawing::FillStyle_NONE != getProperty(xStyle, "FillStyle")); + + // tdf#136983 + uno::Reference xDPS(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Last printed date", sal_Int16(2009), xDPS->getDocumentProperties()->getPrintDate().Year); +} + +DECLARE_WW8EXPORT_TEST(testTdf100961_fixedDateTime, "tdf100961_fixedDateTime.doc") +{ + // This should be a fixed date/time field, not the current time. + getParagraph(1, "05.01.19 04:06:08"); + + css::uno::Reference xSupplier(mxComponent, + css::uno::UNO_QUERY_THROW); + auto xFieldsAccess(xSupplier->getTextFields()); + auto xFields(xFieldsAccess->createEnumeration()); + + css::uno::Reference xField(xFields->nextElement(), css::uno::UNO_QUERY); + // Check fixed property was imported and date value was parsed correctly + CPPUNIT_ASSERT_EQUAL(true, getProperty(xField, "IsFixed")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xField, "IsDate")); + auto datetime = getProperty(xField, "DateTimeValue"); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(5), datetime.Day); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), datetime.Month); + CPPUNIT_ASSERT_EQUAL(sal_Int16(2019), datetime.Year); + + xField.set(xFields->nextElement(), css::uno::UNO_QUERY); + // Check fixed property was imported and time value was parsed correctly + CPPUNIT_ASSERT_EQUAL(true, getProperty(xField, "IsFixed")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xField, "IsDate")); + datetime = getProperty(xField, "DateTimeValue"); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(4), datetime.Hours); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(6), datetime.Minutes); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(8), datetime.Seconds); +} + +DECLARE_WW8EXPORT_TEST(testTdf147861_customField, "tdf147861_customField.doc") +{ + // These should each be specific values, not a shared DocProperty + getParagraph(1, "CustomEditedTitle"); // edited + // A couple of \x0\x0 at the end of the import variable thwart an equality comparison + CPPUNIT_ASSERT(getParagraph(2)->getString().startsWith(" INSERT Custom Title here")); + getParagraph(3, "My Title"); // edited + + // Verify that these are fields, and not just plain text + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("CustomEditedTitle"), xField->getPresentation(false)); + // The " (fixed)" part is unnecessary, but it must be consistent across a round-trip + CPPUNIT_ASSERT_EQUAL(OUString("DocInformation:Title (fixed)"), xField->getPresentation(true)); +} + +DECLARE_WW8EXPORT_TEST(testTdf148380_createField, "tdf148380_createField.doc") +{ + // Verify that these are fields, and not just plain text + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + // This should NOT be "Lorenzo Chavez", or a real date since the user hand-modified the result. + CPPUNIT_ASSERT_EQUAL(OUString("Myself - that's who"), xField->getPresentation(false)); + xField.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("yesterday at noon"), xField->getPresentation(false)); +} + +DECLARE_WW8EXPORT_TEST(testTdf148380_fldLocked, "tdf148380_fldLocked.doc") +{ + getParagraph(2, "4/5/2022 4:29:00 PM"); + getParagraph(4, "1/23/4567 8:9:10 PM"); + + // Verify that these are fields, and not just plain text + // (import only, since export thankfully just dumps these fixed fields as plain text + if (mbExported) + return; + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + auto xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Reference xField(xFields->nextElement(), uno::UNO_QUERY); + // This should NOT be updated at FILEOPEN to match the last modified time - it is locked. + CPPUNIT_ASSERT_EQUAL(OUString("4/5/2022 4:29:00 PM"), xField->getPresentation(false)); + CPPUNIT_ASSERT_EQUAL(OUString("DocInformation:Modified (fixed)"), xField->getPresentation(true)); + xField.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1/23/4567 8:9:10 PM"), xField->getPresentation(false)); + CPPUNIT_ASSERT_EQUAL(OUString("DocInformation:Last printed (fixed)"), xField->getPresentation(true)); +} + +DECLARE_WW8EXPORT_TEST(testTdf138345_paraCharHighlight, "tdf138345_paraCharHighlight.doc") +{ + uno::Reference xRun(getRun(getParagraph(9), 1, "A side benefit is that "), uno::UNO_QUERY_THROW); + // Paragraph style paraNoCharBackground cancel paraCharBackground using COL_TRANSPARENT. + // Before this fix, the paragraph was by default covered with a yellow CharHighlight. + CPPUNIT_ASSERT_EQUAL(static_cast(COL_AUTO), getProperty(xRun, "CharHighlight")); + CPPUNIT_ASSERT_EQUAL(static_cast(COL_AUTO), getProperty(xRun, "CharBackColor")); + + xRun.set(getRun(getParagraph(9), 2), uno::UNO_QUERY_THROW); + // Character style formatting must not contain a highlight setting at all. + CPPUNIT_ASSERT_EQUAL(static_cast(COL_AUTO), getProperty(xRun, "CharHighlight")); + CPPUNIT_ASSERT_EQUAL(static_cast(COL_AUTO), getProperty(xRun, "CharBackColor")); + + //tdf#118711 - don't explicitly specify the default page style at the beginning of the document + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(uno::Any(), xPara->getPropertyValue("PageDescName")); +} + +DECLARE_WW8EXPORT_TEST(testTdf104596_wrapInHeaderTable, "tdf104596_wrapInHeaderTable.doc") +{ + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + sal_Int32 nRowHeight = getXPath(pXmlDoc, "//header/tab/row[1]/infos/bounds", "height").toInt32(); + // The fly is supposed to be no-wrap, so the text should come underneath it, not wrap-through, + // thus making the row much higher. Before, height was 706. Now it is 1067. + CPPUNIT_ASSERT_MESSAGE("Text must wrap under green box", nRowHeight > 1000); +} + +DECLARE_WW8EXPORT_TEST(testGutterLeft, "gutter-left.doc") +{ + uno::Reference xPageStyle; + getStyles("PageStyles")->getByName("Standard") >>= xPageStyle; + sal_Int32 nGutterMargin{}; + xPageStyle->getPropertyValue("GutterMargin") >>= nGutterMargin; + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1270 + // - Actual : 0 + // i.e. gutter margin was lost. + CPPUNIT_ASSERT_EQUAL(static_cast(1270), nGutterMargin); +} + +CPPUNIT_TEST_FIXTURE(Test, testGutterTop) +{ + load(mpTestDocumentPath, "gutter-top.doc"); + reload(mpFilter, "gutter-top.doc"); + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xSettings( + xFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY); + bool bGutterAtTop{}; + xSettings->getPropertyValue("GutterAtTop") >>= bGutterAtTop; + // Without the accompanying fix in place, this test would have failed, because the gutter was + // at the left. + CPPUNIT_ASSERT(bGutterAtTop); +} + +DECLARE_WW8EXPORT_TEST(testArabicZeroNumbering, "arabic-zero-numbering.doc") +{ + auto xNumberingRules + = getProperty>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 64 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO. + CPPUNIT_ASSERT_EQUAL(o3tl::narrowing(style::NumberingType::ARABIC_ZERO), + aMap["NumberingType"].get()); +} + +DECLARE_WW8EXPORT_TEST(testTdf128501, "tdf128501.doc") +{ + if (!mbExported) + { + uno::Reference xShapeDescriptor = getShape(1); + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.CustomShape"), xShapeDescriptor->getShapeType()); + } + else + { + uno::Reference xShapeDescriptor = getShape(1); + // Without the fix in place, this test would have failed with + // - Expected: FrameShape + // - Actual : com.sun.star.drawing.CustomShape + CPPUNIT_ASSERT_EQUAL(OUString("FrameShape"), xShapeDescriptor->getShapeType()); + } +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testArabicZeroNumberingFootnote) +{ + // Create a document, set footnote numbering type to ARABIC_ZERO. + loadURL("private:factory/swriter", nullptr); + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnoteSettings + = xFootnotesSupplier->getFootnoteSettings(); + sal_uInt16 nNumberingType = style::NumberingType::ARABIC_ZERO; + xFootnoteSettings->setPropertyValue("NumberingType", uno::Any(nNumberingType)); + + // Insert a footnote. + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnote( + xFactory->createInstance("com.sun.star.text.Footnote"), uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextContentAppend(xTextDocument->getText(), + uno::UNO_QUERY); + xTextContentAppend->appendTextContent(xFootnote, {}); + + reload("MS Word 97", ""); + xFootnotesSupplier.set(mxComponent, uno::UNO_QUERY); + sal_uInt16 nExpected = style::NumberingType::ARABIC_ZERO; + auto nActual = getProperty(xFootnotesSupplier->getFootnoteSettings(), "NumberingType"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 64 + // - Actual : 4 + // i.e. the numbering type was ARABIC, not ARABIC_ZERO. + CPPUNIT_ASSERT_EQUAL(nExpected, nActual); +} + +CPPUNIT_TEST_FIXTURE(SwModelTestBase, testChicagoNumberingFootnote) +{ + // Create a document, set footnote numbering type to SYMBOL_CHICAGO. + loadURL("private:factory/swriter", nullptr); + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnoteSettings + = xFootnotesSupplier->getFootnoteSettings(); + sal_uInt16 nNumberingType = style::NumberingType::SYMBOL_CHICAGO; + xFootnoteSettings->setPropertyValue("NumberingType", uno::Any(nNumberingType)); + + // Insert a footnote. + uno::Reference xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnote( + xFactory->createInstance("com.sun.star.text.Footnote"), uno::UNO_QUERY); + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xTextContentAppend(xTextDocument->getText(), + uno::UNO_QUERY); + xTextContentAppend->appendTextContent(xFootnote, {}); + + reload("MS Word 97", ""); + xFootnotesSupplier.set(mxComponent, uno::UNO_QUERY); + sal_uInt16 nExpected = style::NumberingType::SYMBOL_CHICAGO; + auto nActual = getProperty(xFootnotesSupplier->getFootnoteSettings(), "NumberingType"); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 63 + // - Actual : 4 + // i.e. the numbering type was ARABIC, not SYMBOL_CHICAGO. + CPPUNIT_ASSERT_EQUAL(nExpected, nActual); +} + +DECLARE_WW8EXPORT_TEST(testHyperLinkURLSaving, "tdf120003.doc") +{ + OUString URL = getProperty(getShape(1), "HyperLinkURL"); + // Without the fix in place, this test would have failed with + // - Expected: https://www.libreoffice.org/ + // - Actual : tps://www.libreoffice.org/ + CPPUNIT_ASSERT_EQUAL(OUString("https://www.libreoffice.org/"), URL); +} + +DECLARE_WW8EXPORT_TEST(testdf79553_lineNumbers, "tdf79553_lineNumbers.doc") +{ + bool bValue = false; + sal_Int32 nValue = -1; + + uno::Reference< text::XTextDocument > xtextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference< text::XLineNumberingProperties > xLineProperties( xtextDocument, uno::UNO_QUERY_THROW ); + uno::Reference< beans::XPropertySet > xPropertySet = xLineProperties->getLineNumberingProperties(); + + xPropertySet->getPropertyValue("IsOn") >>= bValue; + CPPUNIT_ASSERT_EQUAL(true, bValue); + + xPropertySet->getPropertyValue("Distance") >>= nValue; + CPPUNIT_ASSERT_MESSAGE("automatic distance", nValue > 0); +} + +DECLARE_WW8EXPORT_TEST(testTdf138302_restartNumbering, "tdf138302_restartNumbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xPara(getParagraph(8), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); + + + // tdf#143982: automatic tables should export as something better than just left-and-size + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + CPPUNIT_ASSERT(getProperty(xTable, "IsWidthRelative")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xTable, "RelativeWidth")); +} + +DECLARE_WW8EXPORT_TEST(testTdf122429_header, "tdf122429_header.doc") +{ + uno::Reference pageStyles = getStyles("PageStyles"); + uno::Reference pageStyle(pageStyles->getByName("Default Page Style"), uno::UNO_QUERY); + bool headerIsOn = getProperty(pageStyle, "HeaderIsOn"); + CPPUNIT_ASSERT(headerIsOn); +} + +DECLARE_WW8EXPORT_TEST(testTdf122460_header, "tdf122460_header.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference pageStyles = getStyles("PageStyles"); + uno::Reference pageStyle(pageStyles->getByName("Default Page Style"), uno::UNO_QUERY); + bool headerIsOn = getProperty(pageStyle, "HeaderIsOn"); + CPPUNIT_ASSERT(headerIsOn); +} + +DECLARE_WW8EXPORT_TEST(testTdf139495_tinyHeader, "tdf139495_tinyHeader.doc") +{ + // In Word 2003, this is one page, but definitely not six pages. + CPPUNIT_ASSERT(getPages() < 3); +} + +DECLARE_WW8EXPORT_TEST(testTdf124937, "tdf124937.doc") +{ + // Check it doesn't crash at import time + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); +} + +DECLARE_WW8EXPORT_TEST(testFdo53985, "fdo53985.doc") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), xTables->getCount()); // Only 4 tables were imported. + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Compatibility: Protect form", true, pDoc->getIDocumentSettingAccess().get( DocumentSettingId::PROTECT_FORM ) ); + + uno::Reference xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), xSections->getCount()); // The first paragraph wasn't counted as a section. + + uno::Reference xSect(xSections->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section1 is protected", true, getProperty(xSect, "IsProtected")); + xSect.set(xSections->getByIndex(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Section4 is protected", false, getProperty(xSect, "IsProtected")); +} + +DECLARE_WW8EXPORT_TEST(testTdf73056_cellMargins, "tdf73056_cellMargins.doc") +{ + uno::Reference< text::XTextTablesSupplier > xTablesSupplier( mxComponent, uno::UNO_QUERY ); + uno::Reference< container::XIndexAccess > xTables( xTablesSupplier->getTextTables(), uno::UNO_QUERY ); + uno::Reference< text::XTextTable > xTable1( xTables->getByIndex( 0 ), uno::UNO_QUERY ); + uno::Reference< table::XCell > xCell = xTable1->getCellByName( "B4" ); + + // only the first cell with specific margins was processed, leaving the rest at table defaults. Was 0. + uno::Reference< beans::XPropertySet > xPropSet( xCell, uno::UNO_QUERY_THROW ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "bottom cell spacing to contents", + sal_Int32(101), getProperty(xPropSet, "BottomBorderDistance" ) ); +} + +DECLARE_WW8EXPORT_TEST(testTdf135672_tableGrows, "tdf135672_tableGrows.doc") +{ + auto const xTable(getParagraphOrTable(1)); + // This would shift left every round-trip. First time was -259, next -418. + CPPUNIT_ASSERT_EQUAL(sal_Int32(-101), getProperty(xTable, "LeftMargin")); + + // This would grow every round-trip. First time was 11118, next 11435 + CPPUNIT_ASSERT_EQUAL(sal_Int32(10800), getProperty(xTable, "Width")); +} + +DECLARE_WW8EXPORT_TEST(testTdf79435_legacyInputFields, "tdf79435_legacyInputFields.docx") +{ + //using .docx input file to verify cross-format compatibility. + uno::Reference xFormField = getProperty< uno::Reference >(getRun(getParagraph(5), 3), "Bookmark"); + uno::Reference xParameters(xFormField->getParameters()); + + OUString sTmp; + // Too often the string reader can fail during import - fix that first to prevent round-tripping garbage. + // (for example BR-1010B.doc from tdf#48097) + //xParameters->getByName("EntryMacro") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("test"), sTmp); + //xParameters->getByName("Help") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("F1Help"), sTmp); + //xParameters->getByName("ExitMacro") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("test"), sTmp); + xParameters->getByName("Description") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("StatusHelp"), sTmp); + //xParameters->getByName("Content") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("Camelcase"), sTmp); + //xParameters->getByName("Format") >>= sTmp; + //CPPUNIT_ASSERT_EQUAL(OUString("TITLE CASE"), sTmp); + + sal_uInt16 nMaxLength = 0; + xParameters->getByName("MaxLength") >>= nMaxLength; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Max Length", sal_uInt16(10), nMaxLength); + + // too bad this is based on character runs - just found try trial and error. + xFormField = getProperty< uno::Reference >(getRun(getParagraph(6), 2), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("calculated"), sTmp); + + xFormField = getProperty< uno::Reference >(getRun(getParagraph(7), 2), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("currentDate"), sTmp); + + xFormField = getProperty< uno::Reference >(getRun(getParagraph(7), 7), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("currentTime"), sTmp); + + xFormField = getProperty< uno::Reference >(getRun(getParagraph(8), 2), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("number"), sTmp); + + xFormField = getProperty< uno::Reference >(getRun(getParagraph(8), 7), "Bookmark"); + xParameters.set(xFormField->getParameters()); + xParameters->getByName("Type") >>= sTmp; + CPPUNIT_ASSERT_EQUAL(OUString("date"), sTmp); +} + +DECLARE_WW8EXPORT_TEST(testTdf134264, "tdf134264.docx") +{ + // Without the fix in place, ADDRESSBLOCK fields would have been lost after RT + CPPUNIT_ASSERT_EQUAL(OUString("MF"), getParagraph(1)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("M19"), getParagraph(2)->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("1815"), getParagraph(3)->getString()); +} + +DECLARE_WW8EXPORT_TEST(testTdf120225_textControlCrossRef, "tdf120225_textControlCrossRef.doc") +{ + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference xRunEnum = xRunEnumAccess->createEnumeration(); + xRunEnum->nextElement(); + uno::Reference xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + + CPPUNIT_ASSERT_EQUAL(OUString("TextFieldStart"), getProperty(xPropertySet, "TextPortionType")); + uno::Reference xBookmark(getProperty< uno::Reference >(xPropertySet, "Bookmark"), uno::UNO_QUERY_THROW); + + // Critical test: does TextField's bookmark name match cross-reference? + const OUString& sTextFieldName( xBookmark->getName() ); + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sTextFieldName, getProperty(xPropertySet, "SourceName")); + + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + // TextFields should not be turned into real bookmarks. + CPPUNIT_ASSERT_EQUAL(static_cast(0), xBookmarksByIdx->getCount()); + + // The actual name isn't critical, but if it fails, it is worth asking why. + CPPUNIT_ASSERT_EQUAL(OUString("Text1"), sTextFieldName); +} + +DECLARE_WW8EXPORT_TEST(testTdf134948, "tdf134948.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Only 1 paragraph", 1, getParagraphs()); +} + +DECLARE_WW8EXPORT_TEST(testTdf132726, "tdf132726.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xRun = getRun(getParagraph(1), 1, "What sentence has a yellow background? "); + CPPUNIT_ASSERT_EQUAL( COL_AUTO, getProperty(xRun, "CharBackColor")); + + xRun = getRun(getParagraph(1), 2, "Why, this sentence of course"); + CPPUNIT_ASSERT_EQUAL( COL_YELLOW, getProperty(xRun, "CharBackColor")); +} + +DECLARE_WW8EXPORT_TEST(testTdf127316_autoEscapement, "tdf127316_autoEscapement.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xPara = getParagraph(2); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1, "Normal text "), "CharEscapement"), 0); + // Negative escapements (subscripts) were decreasing by 1% every round-trip due to bad manual rounding. + // This should be roughly .2*35% of the ORIGINAL (non-reduced) size. However, during export the + // proportional height has to be changed into direct formatting, which then changes the relative percent. + // In this case, a 24pt font, proportional at 65% becomes roughly a 16pt font. + // Thus an escapement of 7% (1.68pt) becomes roughly 10.5% for the 16pt font. + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Subscript", -10.f, getProperty(getRun(xPara, 2), "CharEscapement"), 1); +} + +DECLARE_WW8EXPORT_TEST(testTdf127316_autoEscapement2, "tdf127316_autoEscapement2.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getPages()); + uno::Reference xPara = getParagraph(1); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1, "Base1"), "CharEscapement"), 0); + // Font is 80% of 40pt or 32pt, original escapement is 6.4pt, so round-trip escapement is 20%. + CPPUNIT_ASSERT_DOUBLES_EQUAL(20.f, getProperty(getRun(xPara, 2,"AutoSuperscript"), "CharEscapement"), 1); + xPara.set( getParagraph(3) ); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1, "Base3"), "CharEscapement"), 0); + // font is 20% of 40pt or 8pt, original escapement is 25.6pt, so round-trip escapement is 320%. + CPPUNIT_ASSERT_DOUBLES_EQUAL(320.f, getProperty(getRun(xPara, 2,"AutoSuperscript"), "CharEscapement"), 3); +} + +DECLARE_WW8EXPORT_TEST(testTdf120412_proportionalEscapement, "tdf120412_proportionalEscapement.odt") +{ + uno::Reference xPara = getParagraph(2); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 2, "Base"), "CharEscapement"), 0); + // Import was limiting to 100%. And export based the position on the original height, not the proportional height. + CPPUNIT_ASSERT_DOUBLES_EQUAL( 150.f, getProperty(getRun(xPara, 3,"Super"), "CharEscapement"), 2); + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +DECLARE_WW8EXPORT_TEST(testTdf133453_realFontSize, "tdf133453_realFontSize.doc") +{ + CPPUNIT_ASSERT_EQUAL( -95.f, getProperty(getRun(getParagraph(1), 2, "2"), "CharEscapement") ); +} + +DECLARE_WW8EXPORT_TEST(testTdf116194, "tdf116194.doc") +{ + CPPUNIT_ASSERT_EQUAL( Color(0xc00000), getProperty(getRun(getParagraph(1), 1), "CharColor")); +} + +DECLARE_WW8EXPORT_TEST(testTdf121111_fillStyleNone, "tdf121111_fillStyleNone.docx") +{ + uno::Reference xStyle(getStyles("ParagraphStyles")->getByName("Numbering - First level"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0xb8cce4), getProperty(xStyle, "ParaBackColor"));//R:184 G:204 B:228 + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle, "FillStyle")); + + uno::Reference xText(getParagraph(12)); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(xText, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("No fill", drawing::FillStyle_NONE, getProperty(xText, "FillStyle")); +} + +DECLARE_WW8EXPORT_TEST(testTdf128608_fillStyleNoneB, "tdf128608_fillStyleNoneB.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xText(getParagraph(1)); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(xText, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL_MESSAGE("No fill", drawing::FillStyle_NONE, getProperty(xText, "FillStyle")); +} + +DECLARE_WW8EXPORT_TEST(testTdf132094_transparentPageImage, "tdf132094_transparentPageImage.doc") +{ + uno::Reference image (getShape(1), uno::UNO_QUERY); + // Don't add fillstyle when none is set. + // Well, ok, at least make it transparent if you do uselessly set a solid color... + const bool bFillNone = drawing::FillStyle_NONE == getProperty(image, "FillStyle"); + const bool bTransparent = sal_Int16(0) != getProperty(image, "FillTransparence"); + CPPUNIT_ASSERT_MESSAGE("no background fill", bTransparent || bFillNone); +} + +DECLARE_WW8EXPORT_TEST(testTdf112618_textbox_no_bg, "tdf112618_textbox_no_bg.doc") +{ + Color nTransparence = getProperty(getShape(2), "FillTransparence"); + CPPUNIT_ASSERT_EQUAL(Color(0x000064), nTransparence); + CPPUNIT_ASSERT_EQUAL(nTransparence, getProperty(getShape(2), "BackColorTransparency")); +} + +DECLARE_WW8EXPORT_TEST(testTdf101826_xattrTextBoxFill, "tdf101826_xattrTextBoxFill.doc") +{ + //Basic 1 Color Fill: gradient from yellow(FFFF00) to brown(767600) currently saves as mid-color + CPPUNIT_ASSERT_MESSAGE("background color", Color(0xFF, 0xFF, 0x00) != getProperty(getShape(1), "BackColor")); + //Basic 2 Color Fill: gradient from yellow(FFFF00) to green(00B050) currently saves as mid-color + CPPUNIT_ASSERT_MESSAGE("background color", Color(0xFF, 0xFF, 0x00) != getProperty(getShape(4), "BackColor")); + //Basic Picture Fill: Tux image + CPPUNIT_ASSERT_EQUAL_MESSAGE("background image", drawing::FillStyle_BITMAP, getProperty(getShape(5), "FillStyle")); +} + +DECLARE_WW8EXPORT_TEST(testTdf123433_fillStyleStop, "tdf123433_fillStyleStop.doc") +{ + uno::Reference xText(getParagraph(12)); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xText, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(xText, "ParaBackColor")); +} + +DECLARE_WW8EXPORT_TEST(testTdf127862_pageFillStyle, "tdf127862_pageFillStyle.odt") +{ + CPPUNIT_ASSERT_EQUAL(6, getPages()); + uno::Reference xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT(drawing::FillStyle_NONE != getProperty(xStyle, "FillStyle")); +} + +DECLARE_WW8EXPORT_TEST(testTdf128608_tableParaBackColor, "tdf128608_tableParaBackColor.doc") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A4"), uno::UNO_QUERY); + + uno::Reference xParaEnumAccess(xCell->getText(), uno::UNO_QUERY); + uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); + // ParaBackColor doesn't seem to be used in this case, but keep it here to make sure it stays as AUTO. + CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty(xPara, "ParaBackColor")); + // No paragraph background colour/fill. (The cell background colour should be used.) + CPPUNIT_ASSERT_EQUAL_MESSAGE("No fillstyle", drawing::FillStyle_NONE, getProperty(xPara, "FillStyle")); +} + +DECLARE_WW8EXPORT_TEST(testTdf117217_largeTableBackgrounds, "tdf117217_largeTableBackgrounds.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + // Cell 22: light-red == 16711680 + uno::Reference xCell(xTable->getCellByName("V1"), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL_MESSAGE("light red", Color(0xE0C2CD), getProperty(xCell, "BackColor")); + xCell.set(xTable->getCellByName("Z1"), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL_MESSAGE("light red", Color(0xE0C2CD), getProperty(xCell, "BackColor")); +} + +DECLARE_WW8EXPORT_TEST(testTdf94009_zeroPgMargin, "tdf94009_zeroPgMargin.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference defaultStyle(getStyles("PageStyles")->getByName("Standard"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(defaultStyle, "TopMargin")); +} + +DECLARE_WW8EXPORT_TEST(testTdf108518_CRnumformatting, "tdf108518_CRnumformatting.doc") +{ + CPPUNIT_ASSERT_EQUAL(OUString("6.2.3."), parseDump("//body/txt[4]/Special[@nType='PortionType::Number']", "rText")); + //Without this fix in place, it would become 200 (and non-bold). + CPPUNIT_ASSERT_EQUAL(OUString("220"), parseDump("//body/txt[4]/Special[@nType='PortionType::Number']", "nHeight")); +} + +DECLARE_WW8EXPORT_TEST(testTdf120711_joinedParagraphWithChangeTracking, "tdf120711.doc") +{ + sal_Int16 numFormat = getNumberingTypeOfParagraph(5); + // last paragraph is not a list item + CPPUNIT_ASSERT(style::NumberingType::CHAR_SPECIAL != numFormat); +} + +DECLARE_WW8EXPORT_TEST(testTdf129522_removeShadowStyle, "tdf129522_removeShadowStyle.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference< container::XNameAccess > paragraphStyles = getStyles("ParagraphStyles"); + uno::Reference< beans::XPropertySet > xStyleProps(paragraphStyles->getByName("Shadow"), uno::UNO_QUERY_THROW); + table::ShadowFormat aShadow = getProperty(xStyleProps, "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + + // Shadows were inherited regardless of whether the style disabled them. + xStyleProps.set(paragraphStyles->getByName("Shadow-removed"), uno::UNO_QUERY_THROW); + aShadow = getProperty(xStyleProps, "ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_NONE, aShadow.Location); + + uno::Reference< container::XNameAccess > characterStyles = getStyles("CharacterStyles"); + xStyleProps.set(characterStyles->getByName("CharShadow"), uno::UNO_QUERY_THROW); + aShadow = getProperty(xStyleProps, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); + + xStyleProps.set(characterStyles->getByName("CharShadow-removed"), uno::UNO_QUERY_THROW); + aShadow = getProperty(xStyleProps, "CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_NONE, aShadow.Location); +} + +DECLARE_WW8EXPORT_TEST(testTdf81705_outlineLevel, "tdf81705_outlineLevel.doc") +{ + // direct formatting resets outline level to body text (0) + CPPUNIT_ASSERT_EQUAL_MESSAGE("Paragraph C", sal_uInt16(0), getProperty(getParagraph(3), "OutlineLevel")); + // myStyle sets outline level to 1. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Paragraph D", sal_uInt16(1), getProperty(getParagraph(4), "OutlineLevel")); +} + +DECLARE_WW8EXPORT_TEST(testBtlrCell, "btlr-cell.doc") +{ + // Without the accompanying fix in place, this test would have failed, as + // the btlr text direction in the A1 cell was lost on DOC import and + // export. + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables = xSupplier->getTextTables(); + uno::Reference xTable(xTables->getByName("Table1"), uno::UNO_QUERY); + uno::Reference xA1(xTable->getCellByName("A1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::BT_LR, getProperty(xA1, "WritingMode")); + + uno::Reference xB1(xTable->getCellByName("B1"), uno::UNO_QUERY); + auto nActual = getProperty(xB1, "WritingMode"); + CPPUNIT_ASSERT(nActual == text::WritingMode2::LR_TB || nActual == text::WritingMode2::CONTEXT); + + uno::Reference xC1(xTable->getCellByName("C1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::TB_RL, getProperty(xC1, "WritingMode")); +} + +DECLARE_WW8EXPORT_TEST(testTdf118375export, "tdf118375_240degClockwise.doc") +{ + // The input document has one custom shape, which is rotated 240deg. Check + // that it has the same position as in Word. + uno::Reference xDrawPagesSupplier(mxComponent, + uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_MESSAGE("Could not get XDrawPagesSupplier", xDrawPagesSupplier.is()); + uno::Reference xDrawPages(xDrawPagesSupplier->getDrawPages()); + uno::Reference xDrawPage(xDrawPages->getByIndex(0), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_MESSAGE("Could not get xDrawPage", xDrawPage.is()); + uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE("Could not get xShape", xShape.is()); + uno::Reference xShapeProps(xShape, uno::UNO_QUERY); + CPPUNIT_ASSERT_MESSAGE("Could not get the shape properties", xShapeProps.is()); + sal_Int32 nPosX = {}, nPosY = {}; + CPPUNIT_ASSERT(xShapeProps->getPropertyValue("HoriOrientPosition") >>= nPosX); + CPPUNIT_ASSERT(xShapeProps->getPropertyValue("VertOrientPosition") >>= nPosY); + // Allow some tolerance because rounding errors through integer arithmetic + // in rotation. + CPPUNIT_ASSERT_DOUBLES_EQUAL(5200.0, static_cast(nPosX), 1.0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1152.0, static_cast(nPosY), 1.0); +} + +DECLARE_WW8EXPORT_TEST(testImageCommentAtChar, "image-comment-at-char.doc") +{ + uno::Reference xPara = getParagraph(1); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), + getProperty(getRun(xPara, 1), "TextPortionType")); + // Without the accompanying fix in place, this test would have failed with 'Expected: + // Annotation; Actual: Frame', i.e. the comment start before the image was lost. + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), + getProperty(getRun(xPara, 2), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), + getProperty(getRun(xPara, 3), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), + getProperty(getRun(xPara, 4), "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), + getProperty(getRun(xPara, 5), "TextPortionType")); +} + +DECLARE_WW8EXPORT_TEST(testTdf126708emf, "tdf126708_containsemf.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xShape = getShape(1); + // First check the size of the EMF graphic contained in the shape. + auto xGraphic = getProperty< uno::Reference >( + xShape, "Graphic"); + auto xSize = getProperty(xGraphic, "Size100thMM"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(8501), xSize.Height); + CPPUNIT_ASSERT_EQUAL(sal_Int32(18939), xSize.Width); + + // Now check that the shape itself has a decent size. + // This size varies slightly when round tripping through doc format. + xSize = getProperty(xShape, "Size"); + CPPUNIT_ASSERT(abs(xSize.Height - 7629) <= 6); + CPPUNIT_ASSERT(abs(xSize.Width - 17000) <= 6); +} + +DECLARE_WW8EXPORT_TEST(testBtlrFrame, "btlr-frame.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + if (!mbExported) + { + return; + } + + // Without the accompanying fix in place, this test would have failed with a + // beans.UnknownPropertyException, as the writing direction was lost, so the default direction + // resulted in a conversion to a Writer text frame. + uno::Reference xFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(9000), getProperty(xFrame, "RotateAngle")); +} + +DECLARE_WW8EXPORT_TEST(testPresetDash, "tdf127166_prstDash_Word97.doc") +{ + // Error was, that the 'sys' preset dash styles were neither imported not + // exported, the mixed styles had wrong dash-dot order, they were imported + // with absolute values. + const drawing::LineDash dashParams[] = + { + {drawing::DashStyle_RECTRELATIVE, 1, 400, 0, 0, 300}, // dash + {drawing::DashStyle_RECTRELATIVE, 1, 400, 1, 100, 300}, // dashDot + {drawing::DashStyle_RECTRELATIVE, 1, 100, 0, 0, 300}, // dot + {drawing::DashStyle_RECTRELATIVE, 1, 800, 0, 0, 300}, // lgDash + {drawing::DashStyle_RECTRELATIVE, 1, 800, 1, 100, 300}, // lgDashDot + {drawing::DashStyle_RECTRELATIVE, 1, 800, 2, 100, 300}, // lgDashDotDot + {drawing::DashStyle_RECTRELATIVE, 1, 300, 0, 0, 100}, // sysDash + {drawing::DashStyle_RECTRELATIVE, 1, 300, 1, 100, 100}, // sysDashDot + {drawing::DashStyle_RECTRELATIVE, 1, 300, 2, 100, 100}, // sysDashDotDot + {drawing::DashStyle_RECTRELATIVE, 1, 100, 0, 0, 100} // sysDot + }; + drawing::LineDash aPresetLineDash; + drawing::LineDash aShapeLineDash; + for (sal_uInt16 i = 0; i < 10; i++) + { + aPresetLineDash = dashParams[i]; + uno::Reference xShape = getShape(i+1); + aShapeLineDash = getProperty(xShape, "LineDash"); + bool bIsEqual = aPresetLineDash.Style == aShapeLineDash.Style + && aPresetLineDash.Dots == aShapeLineDash.Dots + && aPresetLineDash.DotLen == aShapeLineDash.DotLen + && aPresetLineDash.Dashes == aShapeLineDash.Dashes + && aPresetLineDash.DashLen == aShapeLineDash.DashLen + && aPresetLineDash.Distance == aShapeLineDash.Distance; + CPPUNIT_ASSERT_MESSAGE("LineDash differ", bIsEqual); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testRtlGutter) +{ + auto verify = [this]() { + uno::Reference xStandard( + getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT(getProperty(xStandard, "RtlGutter")); + }; + + // Given a document with RTL gutter, when loading it: + load(mpTestDocumentPath, "rtl-gutter.doc"); + // Then make sure the section's gutter is still RTL: + // Without the accompanying fix in place, this test would have failed as the SPRM was missing. + verify(); + reload(mpFilter, "rtl-gutter.doc"); + verify(); +} + +DECLARE_WW8EXPORT_TEST(testTdf94326_notOutlineNumbering, "tdf94326_notOutlineNumbering.doc") +{ + // The directly applied numbering list must not be lost. + uno::Reference xPara(getParagraph(2, u"ОБЩИЕ ПОЛОЖЕНИЯ"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf106541_cancelOutline, "tdf106541_cancelOutline.doc") +{ + // The ability to cancel numbering must not be lost. + uno::Reference xPara(getParagraph(1, "Cancelled by style"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(2, "Cancelled by inherited style"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(4, "Cancelled by direct paragraph formatting"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf104239_chapterNumbering, "tdf104239_chapterNumbering.doc") +{ + uno::Reference xNumberingSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xNumberingRules = xNumberingSupplier->getChapterNumberingRules(); + + comphelper::SequenceAsHashMap hashMap(xNumberingRules->getByIndex(0)); + CPPUNIT_ASSERT(hashMap["HeadingStyleName"].get().match("Heading 1")); + sal_uInt16 nNumberingType = style::NumberingType::CHARS_UPPER_LETTER_N; + CPPUNIT_ASSERT_EQUAL(nNumberingType, hashMap["NumberingType"].get()); + + hashMap = xNumberingRules->getByIndex(5); + CPPUNIT_ASSERT(hashMap["HeadingStyleName"].get().match("Heading 6")); + nNumberingType = style::NumberingType::ARABIC; + CPPUNIT_ASSERT_EQUAL(nNumberingType, hashMap["NumberingType"].get()); +} + +DECLARE_WW8EXPORT_TEST(testTdf106541_inheritChapterNumbering, "tdf106541_inheritChapterNumbering.doc") +{ + // The level and numbering are inherited from Heading 1. + uno::Reference xPara(getParagraph(3, "Letter A"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("a."), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf106541_inheritChapterNumberingB, "tdf106541_inheritChapterNumberingB.doc") +{ + // The level and numbering are inherited from Heading 1. + uno::Reference xPara(getParagraph(1, "Chapter 1, level 1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(2, "Chapter 1, level 2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf75748_inheritChapterNumberingC, "tdf75748_inheritChapterNumberingC.doc") +{ + uno::Reference xPara(getParagraph(5, "Inherited from Heading 3"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("II.B.1."), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf104239_numbering, "tdf104239_numbering.doc") +{ + // The paragraph starts with "paraksta Pieņemšanas". [Roundtrip by Word 2016 avoids the problem.] + uno::Reference xPara(getParagraph(51), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("3.3.1."), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf104239_chapterNumberingLevels, "tdf104239_chapterNumberingLevels.doc") +{ + uno::Reference xPara(getParagraph(1, "Heading 1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Article I."), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(2, "Heading 2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(3, "Heading 3"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("First"), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(4, "Heading 4"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(8, "Heading 9"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1.1.1.1.1.1.1.1."), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf104239_chapterNumberTortureTest, "tdf104239_chapterNumberTortureTest.doc") +{ + // There is no point in identifying what the wrong values where in this test, + //because EVERYTHING was wrong, and MANY different fixes are required to solve the problems. + uno::Reference xPara(getParagraph(1, "No numId in style or paragraph"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(2, "Paragraph cancels numbering(0)"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(3, "First numbered line"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1st.i.a.1.I"), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(7, "inheritOnly: inherit outlineLvl and listLvl."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2nd.ii"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty(xPara, "NumberingLevel")); // Level 2 + xPara.set(getParagraph(9, "outline with Body listLvl(9)."), uno::UNO_QUERY); + if (!mbExported) + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(10, "outline with Body listLvl(9) #2."), uno::UNO_QUERY); + if (!mbExported) + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(11, "direct formatting - Body listLvl(9)."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); + xPara.set(getParagraph(12, "direct numId, inherit listLvl."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("2nd.ii.a.1.I"), getProperty(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(4), getProperty(xPara, "NumberingLevel")); // Level 5 + xPara.set(getParagraph(13, "Style numId0 cancels inherited numbering."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf106541_inheritOutlineNumbering, "tdf106541_inheritOutlineNumbering.doc") +{ + // The level and numbering are inherited from Level2. + uno::Reference xPara(getParagraph(2, "This should be a sub-point."), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf104239_sharedOutlineNumId, "tdf104239_sharedOutlineNumId.doc") +{ + uno::Reference xPara(getParagraph(5, "Principes"), uno::UNO_QUERY); + // This was ".1." previously. + CPPUNIT_ASSERT_EQUAL(OUString("2.1."), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf120394, "tdf120394.doc") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + { + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1.1.1"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(8), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(9), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1.1.2"), getProperty(xPara, "ListLabelString")); + } + { + uno::Reference xPara(getParagraph(10), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xPara, "ListLabelString")); + } +} + +DECLARE_WW8EXPORT_TEST(testTdf142760, "tdf142760.doc") +{ + // Without the fix in place, this test would have failed with + // - Expected: 2 + // - Actual : 6 + CPPUNIT_ASSERT_EQUAL(2, getPages()); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); +} + +DECLARE_WW8EXPORT_TEST(testTdf134570, "tdf134570.doc") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), getProperty(xPara, "NumberingLevel")); + CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty(xPara, "ListLabelString")); +} + +DECLARE_WW8EXPORT_TEST(testTdf136814, "tdf136814.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + sal_Int32 nBorderDistance = static_cast(106); + + CPPUNIT_ASSERT_EQUAL(nBorderDistance, getProperty(xStyle, "TopBorderDistance")); + CPPUNIT_ASSERT_EQUAL(nBorderDistance, getProperty(xStyle, "RightBorderDistance")); + CPPUNIT_ASSERT_EQUAL(nBorderDistance, getProperty(xStyle, "BottomBorderDistance")); + CPPUNIT_ASSERT_EQUAL(nBorderDistance, getProperty(xStyle, "LeftBorderDistance")); +} + +DECLARE_WW8EXPORT_TEST(testTdf79186_noLayoutInCell, "tdf79186_noLayoutInCell.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + CPPUNIT_ASSERT(!getProperty(getShape(1), "IsFollowingTextFlow")); +} + +CPPUNIT_TEST_FIXTURE(Test, testClearingBreak) +{ + auto verify = [this]() { + uno::Reference xParagraph(getParagraph(1), uno::UNO_QUERY); + uno::Reference xPortions = xParagraph->createEnumeration(); + xPortions->nextElement(); + xPortions->nextElement(); + // 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 first para was just a fly + text portion, the clearing break was lost. + uno::Reference xPortion(xPortions->nextElement(), uno::UNO_QUERY); + OUString aPortionType; + xPortion->getPropertyValue("TextPortionType") >>= aPortionType; + CPPUNIT_ASSERT_EQUAL(OUString("LineBreak"), aPortionType); + uno::Reference xLineBreak; + xPortion->getPropertyValue("LineBreak") >>= xLineBreak; + sal_Int16 eClear{}; + uno::Reference xLineBreakProps(xLineBreak, uno::UNO_QUERY); + xLineBreakProps->getPropertyValue("Clear") >>= eClear; + CPPUNIT_ASSERT_EQUAL(static_cast(SwLineBreakClear::ALL), eClear); + }; + + // Given a document with a clearing break: + // When loading that file: + load(mpTestDocumentPath, "clearing-break.doc"); + // Then make sure that the clear property of the break is not ignored: + verify(); + reload(mpFilter, "clearing-break.doc"); + // Make sure that the clear property of the break is not ignored during export: + verify(); +} + +DECLARE_WW8EXPORT_TEST(testTdf142840, "tdf142840.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + uno::Reference xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + uno::Reference xBookmarksByName = xBookmarksSupplier->getBookmarks(); + + // Ensure space are replaced by underscore in bookmark name (it was working before, but ensure this) + CPPUNIT_ASSERT_EQUAL(static_cast(1), xBookmarksByIdx->getCount()); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("Chapter_1")); + CPPUNIT_ASSERT(!xBookmarksByName->hasByName("Chapter 1")); + + // And hyperlink is referring bookmark with underscore also (this was broken) + CPPUNIT_ASSERT_EQUAL(OUString("#Chapter_1"), getProperty(getRun(getParagraph(1), 1), "HyperLinkURL")); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ww8export/ww8export4.cxx b/sw/qa/extras/ww8export/ww8export4.cxx new file mode 100644 index 000000000..7a19938ca --- /dev/null +++ b/sw/qa/extras/ww8export/ww8export4.cxx @@ -0,0 +1,51 @@ +/* -*- 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 + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() + : SwModelTestBase("/sw/qa/extras/ww8export/data/", "MS Word 97") + { + } + + bool mustTestImportOf(const char* filename) const override + { + // If the testcase is stored in some other format, it's pointless to test. + return o3tl::ends_with(filename, ".doc"); + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testTdf77964) +{ + loadAndReload("tdf77964.doc"); + // both images were loading as AT_PARA instead of AS_CHAR. Image2 visually had text wrapping. + CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AS_CHARACTER, getProperty(getShapeByName(u"Image2"), "AnchorType")); +} + + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ww8import/data/bnc875715.doc b/sw/qa/extras/ww8import/data/bnc875715.doc new file mode 100644 index 000000000..af15e1434 Binary files /dev/null and b/sw/qa/extras/ww8import/data/bnc875715.doc differ diff --git a/sw/qa/extras/ww8import/data/changes-in-footnote.doc b/sw/qa/extras/ww8import/data/changes-in-footnote.doc new file mode 100644 index 000000000..789795eb0 Binary files /dev/null and b/sw/qa/extras/ww8import/data/changes-in-footnote.doc differ diff --git a/sw/qa/extras/ww8import/data/floating-table-section-columns.doc b/sw/qa/extras/ww8import/data/floating-table-section-columns.doc new file mode 100644 index 000000000..6471ded39 Binary files /dev/null and b/sw/qa/extras/ww8import/data/floating-table-section-columns.doc differ diff --git a/sw/qa/extras/ww8import/data/floating-table-section-margins.doc b/sw/qa/extras/ww8import/data/floating-table-section-margins.doc new file mode 100644 index 000000000..f414be7f1 Binary files /dev/null and b/sw/qa/extras/ww8import/data/floating-table-section-margins.doc differ diff --git a/sw/qa/extras/ww8import/data/image-lazy-read-0size.doc b/sw/qa/extras/ww8import/data/image-lazy-read-0size.doc new file mode 100644 index 000000000..80306cb1d Binary files /dev/null and b/sw/qa/extras/ww8import/data/image-lazy-read-0size.doc differ diff --git a/sw/qa/extras/ww8import/data/image-lazy-read.doc b/sw/qa/extras/ww8import/data/image-lazy-read.doc new file mode 100644 index 000000000..95017d2ac Binary files /dev/null and b/sw/qa/extras/ww8import/data/image-lazy-read.doc differ diff --git a/sw/qa/extras/ww8import/data/n816593.doc b/sw/qa/extras/ww8import/data/n816593.doc new file mode 100644 index 000000000..71cb9c486 Binary files /dev/null and b/sw/qa/extras/ww8import/data/n816593.doc differ diff --git a/sw/qa/extras/ww8import/data/tdf106799.doc b/sw/qa/extras/ww8import/data/tdf106799.doc new file mode 100644 index 000000000..0637e8cce Binary files /dev/null and b/sw/qa/extras/ww8import/data/tdf106799.doc differ diff --git a/sw/qa/extras/ww8import/data/tdf110987 b/sw/qa/extras/ww8import/data/tdf110987 new file mode 100644 index 000000000..16195c0e1 Binary files /dev/null and b/sw/qa/extras/ww8import/data/tdf110987 differ diff --git a/sw/qa/extras/ww8import/data/tdf120761_zOrder.dot b/sw/qa/extras/ww8import/data/tdf120761_zOrder.dot new file mode 100644 index 000000000..b70a7d840 Binary files /dev/null and b/sw/qa/extras/ww8import/data/tdf120761_zOrder.dot differ diff --git a/sw/qa/extras/ww8import/data/tdf121734.doc b/sw/qa/extras/ww8import/data/tdf121734.doc new file mode 100644 index 000000000..11a9bf503 Binary files /dev/null and b/sw/qa/extras/ww8import/data/tdf121734.doc differ diff --git a/sw/qa/extras/ww8import/data/tdf122425_1.doc b/sw/qa/extras/ww8import/data/tdf122425_1.doc new file mode 100644 index 000000000..f0e5b148d Binary files /dev/null and b/sw/qa/extras/ww8import/data/tdf122425_1.doc differ diff --git a/sw/qa/extras/ww8import/data/tdf124601.doc b/sw/qa/extras/ww8import/data/tdf124601.doc new file mode 100644 index 000000000..f617d4b26 Binary files /dev/null and b/sw/qa/extras/ww8import/data/tdf124601.doc differ diff --git a/sw/qa/extras/ww8import/data/tdf125281.doc b/sw/qa/extras/ww8import/data/tdf125281.doc new file mode 100644 index 000000000..15146f9e3 Binary files /dev/null and b/sw/qa/extras/ww8import/data/tdf125281.doc differ diff --git a/sw/qa/extras/ww8import/ww8import.cxx b/sw/qa/extras/ww8import/ww8import.cxx new file mode 100644 index 000000000..47a31eb65 --- /dev/null +++ b/sw/qa/extras/ww8import/ww8import.cxx @@ -0,0 +1,306 @@ +/* -*- 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 + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +// tests should only be added to ww8IMPORT *if* they fail round-tripping in ww8EXPORT + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ww8import/data/", "MS Word 97") + { + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testFloatingTableSectionMargins) +{ + load(mpTestDocumentPath, "floating-table-section-margins.doc"); + sal_Int32 pageLeft = parseDump("/root/page[2]/infos/bounds", "left").toInt32(); + sal_Int32 pageWidth = parseDump("/root/page[2]/infos/bounds", "width").toInt32(); + sal_Int32 tableLeft = parseDump("//tab/infos/bounds", "left").toInt32(); + sal_Int32 tableWidth = parseDump("//tab/infos/bounds", "width").toInt32(); + CPPUNIT_ASSERT( pageWidth > 0 ); + CPPUNIT_ASSERT( tableWidth > 0 ); + // The table's resulting position should be roughly centered. + CPPUNIT_ASSERT( abs(( pageLeft + pageWidth / 2 ) - ( tableLeft + tableWidth / 2 )) < 20 ); + + uno::Reference xTextSection = getProperty< uno::Reference >(getParagraph(2), "TextSection"); + CPPUNIT_ASSERT(xTextSection.is()); + uno::Reference xTextColumns = getProperty< uno::Reference >(xTextSection, "TextColumns"); + OUString pageStyleName = getProperty(getParagraph(2), "PageStyleName"); + uno::Reference pageStyle( getStyles("PageStyles")->getByName(pageStyleName), uno::UNO_QUERY); + uno::Reference xPageStyle(getStyles("PageStyles")->getByName(pageStyleName), uno::UNO_QUERY); + uno::Reference xPageColumns = getProperty< uno::Reference >(xPageStyle, "TextColumns"); + + //either one or the other should get the column's, not both. + CPPUNIT_ASSERT( xTextColumns->getColumnCount() != xPageColumns->getColumnCount()); +} + +CPPUNIT_TEST_FIXTURE(Test, testN816593) +{ + load(mpTestDocumentPath, "n816593.doc"); + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + // Make sure that even if we import the two tables as non-floating, we + // still consider them different, and not merge them. + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount()); +} + +CPPUNIT_TEST_FIXTURE(Test, testBnc875715) +{ + load(mpTestDocumentPath, "bnc875715.doc"); + uno::Reference xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + // Was incorrectly set as -1270. + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xSections->getByIndex(0), "SectionLeftMargin")); +} + +CPPUNIT_TEST_FIXTURE(Test, testFloatingTableSectionColumns) +{ + load(mpTestDocumentPath, "floating-table-section-columns.doc"); + OUString tableWidth = parseDump("/root/page[1]/body/section/column[2]/body/txt/anchored/fly/tab/infos/bounds", "width"); + // table width was restricted by a column + CPPUNIT_ASSERT( tableWidth.toInt32() > 10000 ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf124601) +{ + load(mpTestDocumentPath, "tdf124601.doc"); + // Without the accompanying fix in place, this test would have failed, as the importer lost the + // fLayoutInCell shape property for wrap-though shapes. + CPPUNIT_ASSERT(getProperty(getShapeByName(u"Grafik 18"), "IsFollowingTextFlow")); + CPPUNIT_ASSERT(getProperty(getShapeByName(u"Grafik 19"), "IsFollowingTextFlow")); +} + +CPPUNIT_TEST_FIXTURE(Test, testImageLazyRead) +{ + load(mpTestDocumentPath, "image-lazy-read.doc"); + auto xGraphic = getProperty>(getShape(1), "Graphic"); + Graphic aGraphic(xGraphic); + // This failed, import loaded the graphic, it wasn't lazy-read. + CPPUNIT_ASSERT(!aGraphic.isAvailable()); +} + +CPPUNIT_TEST_FIXTURE(Test, testImageLazyRead0size) +{ + load(mpTestDocumentPath, "image-lazy-read-0size.doc"); + // Load a document with a single bitmap in it: it's declared as a WMF one, but actually a TGA + // bitmap. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwNode* pNode = pDoc->GetNodes()[SwNodeOffset(6)]; + SwGrfNode* pGrfNode = pNode->GetGrfNode(); + CPPUNIT_ASSERT(pGrfNode); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 7590x10440 + // - Actual : 0x0 + // i.e. the size was 0, even if the actual bitmap had a non-0 size. + CPPUNIT_ASSERT_EQUAL(Size(7590, 10440), pGrfNode->GetTwipSize()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf106799) +{ + load(mpTestDocumentPath, "tdf106799.doc"); + // Ensure that all text portions are calculated before testing. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwViewShell* pViewShell + = pTextDoc->GetDocShell()->GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell(); + CPPUNIT_ASSERT(pViewShell); + pViewShell->Reformat(); + + sal_Int32 const nCellWidths[3][4] = { { 9528, 0, 0, 0 },{ 2382, 2382, 2382, 2382 },{ 2382, 2382, 2382, 2382 } }; + sal_Int32 const nCellTxtLns[3][4] = { { 1, 0, 0, 0 },{ 1, 0, 0, 0},{ 1, 1, 1, 1 } }; + // Table was distorted because of missing sprmPFInnerTableCell at paragraph marks (0x0D) with sprmPFInnerTtp + for (sal_Int32 nRow : { 0, 1, 2 }) + for (sal_Int32 nCell : { 0, 1, 2, 3 }) + { + OString cellXPath("/root/page/body/tab/row/cell/tab/row[" + OString::number(nRow+1) + "]/cell[" + OString::number(nCell+1) + "]/"); + CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellWidths[nRow][nCell], parseDump(cellXPath + "infos/bounds", "width").toInt32()); + if (nCellTxtLns[nRow][nCell] != 0) + CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellTxtLns[nRow][nCell], parseDump(cellXPath + "txt/Text", "nLength").toInt32()); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf121734) +{ + load(mpTestDocumentPath, "tdf121734.doc"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwPosFlyFrames aPosFlyFrames = pDoc->GetAllFlyFormats(nullptr, false); + // There is only one fly frame in the document: the one with the imported floating table + CPPUNIT_ASSERT_EQUAL(size_t(1), aPosFlyFrames.size()); + for (const auto& rPosFlyFrame : aPosFlyFrames) + { + const SwFrameFormat& rFormat = rPosFlyFrame->GetFormat(); + const SfxPoolItem* pItem = nullptr; + + // The LR and UL spacings and borders must all be set explicitly; + // spacings and border distances must be 0; borders must be absent. + + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, rFormat.GetItemState(RES_LR_SPACE, false, &pItem)); + auto pLR = static_cast(pItem); + CPPUNIT_ASSERT(pLR); + CPPUNIT_ASSERT_EQUAL(tools::Long(0), pLR->GetLeft()); + CPPUNIT_ASSERT_EQUAL(tools::Long(0), pLR->GetRight()); + + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, rFormat.GetItemState(RES_UL_SPACE, false, &pItem)); + auto pUL = static_cast(pItem); + CPPUNIT_ASSERT(pUL); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pUL->GetUpper()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pUL->GetLower()); + + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, rFormat.GetItemState(RES_BOX, false, &pItem)); + auto pBox = static_cast(pItem); + CPPUNIT_ASSERT(pBox); + for (auto eLine : { SvxBoxItemLine::TOP, SvxBoxItemLine::BOTTOM, + SvxBoxItemLine::LEFT, SvxBoxItemLine::RIGHT }) + { + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), pBox->GetDistance(eLine)); + CPPUNIT_ASSERT(!pBox->GetLine(eLine)); + } + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf125281) +{ + load(mpTestDocumentPath, "tdf125281.doc"); +#if !defined(_WIN32) + // Windows fails with actual == 26171 for some reason; also lazy load isn't lazy in Windows + // debug builds, reason is not known at the moment. + + // Load a .doc file which has an embedded .emf image. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwNode* pNode = pDoc->GetNodes()[SwNodeOffset(6)]; + CPPUNIT_ASSERT(pNode->IsGrfNode()); + SwGrfNode* pGrfNode = pNode->GetGrfNode(); + const Graphic& rGraphic = pGrfNode->GetGrf(); + + // Without the accompanying fix in place, this test would have failed, as pref size was 0 till + // an actual Paint() was performed (and even then, it was wrong). + tools::Long nExpected = 25664; + CPPUNIT_ASSERT_EQUAL(nExpected, rGraphic.GetPrefSize().getWidth()); + + // Without the accompanying fix in place, this test would have failed, as setting the pref size + // swapped the image in. + CPPUNIT_ASSERT(!rGraphic.isAvailable()); +#endif +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf122425_1) +{ + load(mpTestDocumentPath, "tdf122425_1.doc"); + // This is for header text in case we use a hack for fixed-height headers + // (see SwWW8ImplReader::Read_HdFtTextAsHackedFrame) + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwPosFlyFrames aPosFlyFrames = pDoc->GetAllFlyFormats(nullptr, false); + // There are two fly frames in the document: for first page's header, and for other pages' + CPPUNIT_ASSERT_EQUAL(size_t(2), aPosFlyFrames.size()); + for (const auto& rPosFlyFrame : aPosFlyFrames) + { + const SwFrameFormat& rFormat = rPosFlyFrame->GetFormat(); + const SfxPoolItem* pItem = nullptr; + + // The LR and UL spacings and borders must all be set explicitly; + // spacings and border distances must be 0; borders must be absent + + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, rFormat.GetItemState(RES_LR_SPACE, false, &pItem)); + auto pLR = static_cast(pItem); + CPPUNIT_ASSERT(pLR); + CPPUNIT_ASSERT_EQUAL(tools::Long(0), pLR->GetLeft()); + CPPUNIT_ASSERT_EQUAL(tools::Long(0), pLR->GetRight()); + + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, rFormat.GetItemState(RES_UL_SPACE, false, &pItem)); + auto pUL = static_cast(pItem); + CPPUNIT_ASSERT(pUL); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pUL->GetUpper()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pUL->GetLower()); + + CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, rFormat.GetItemState(RES_BOX, false, &pItem)); + auto pBox = static_cast(pItem); + CPPUNIT_ASSERT(pBox); + for (auto eLine : { SvxBoxItemLine::TOP, SvxBoxItemLine::BOTTOM, + SvxBoxItemLine::LEFT, SvxBoxItemLine::RIGHT }) + { + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), pBox->GetDistance(eLine)); + CPPUNIT_ASSERT(!pBox->GetLine(eLine)); + } + } + + //tdf#139495: without the fix, a negative number was converted into a uInt16, overflowing to 115501 + auto nDist = getProperty(getStyles("PageStyles")->getByName("Standard"), "HeaderBodyDistance"); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nDist); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf110987) +{ + load(mpTestDocumentPath, "tdf110987"); + // The input document is an empty .doc, but without file name + // extension. Check that it was loaded as a normal .doc document, + // and not a template. + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + OUString sFilterName = pTextDoc->GetDocShell()->GetMedium()->GetFilter()->GetFilterName(); + CPPUNIT_ASSERT(sFilterName != "MS Word 97 Vorlage"); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf120761_zOrder) +{ + load(mpTestDocumentPath, "tdf120761_zOrder.dot"); + //The blue shape was covering everything (highest zorder = 2) instead of the lowest(0) + uno::Reference xShape(getShapeByName(u"Picture 2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), getProperty(xShape, "ZOrder")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf142003) +{ + load(mpTestDocumentPath, "changes-in-footnote.doc"); + + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + SwEditShell* const pEditShell(pTextDoc->GetDocShell()->GetDoc()->GetEditShell()); + pEditShell->AcceptRedline(0); + + //The changes were offset from where they should have been + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes = xFootnotesSupplier->getFootnotes(); + uno::Reference xParagraph(xFootnotes->getByIndex(0), uno::UNO_QUERY); + //before change was incorrect, Loren ipsum , doconsectetur ... + CPPUNIT_ASSERT(xParagraph->getString().startsWith("Lorem ipsum , consectetur adipiscing elit.")); +} + +// tests should only be added to ww8IMPORT *if* they fail round-tripping in ww8EXPORT + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3