diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
commit | 267c6f2ac71f92999e969232431ba04678e7437e (patch) | |
tree | 358c9467650e1d0a1d7227a21dac2e3d08b622b2 /sw/qa/extras/odfexport | |
parent | Initial commit. (diff) | |
download | libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.tar.xz libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.zip |
Adding upstream version 4:24.2.0.upstream/4%24.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sw/qa/extras/odfexport')
138 files changed, 6356 insertions, 0 deletions
diff --git a/sw/qa/extras/odfexport/data/2_MathType3.docx b/sw/qa/extras/odfexport/data/2_MathType3.docx Binary files differnew file mode 100644 index 0000000000..0694921b39 --- /dev/null +++ b/sw/qa/extras/odfexport/data/2_MathType3.docx diff --git a/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt b/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt new file mode 100644 index 0000000000..64d6205372 --- /dev/null +++ b/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:initial-creator>ms </meta:initial-creator><meta:creation-date>2015-08-24T21:49:45.305718699</meta:creation-date><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/><meta:generator>LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba</meta:generator></office:meta> + <office:font-face-decls> + <style:font-face style:name="Lohit Devanagari1" svg:font-family="'Lohit Devanagari'"/> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Lohit Devanagari" svg:font-family="'Lohit Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Source Han Sans CN Regular" svg:font-family="'Source Han Sans CN Regular'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Sans CN Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Sans CN Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + + <text:list-style style:name="WW8Num2"> + <text:list-level-style-number text:level="1" style:num-prefix="daj o úroveň viac" style:num-format="1"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.27cm" fo:text-indent="-0.635cm" fo:margin-left="1.27cm"/> + </style:list-level-properties> + </text:list-level-style-number> + <text:list-level-style-number text:level="2" style:num-format="1" text:display-levels="2"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1cm" fo:text-indent="-1cm" fo:margin-left="1cm"/> + </style:list-level-properties> + </text:list-level-style-number> + <text:list-level-style-number text:level="3" style:num-format="1" text:display-levels="3"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.6cm" fo:text-indent="-1.6cm" fo:margin-left="2.6cm"/> + </style:list-level-properties> + </text:list-level-style-number> + <text:list-level-style-number text:level="4" style:num-suffix=")" style:num-format="a" style:num-letter-sync="true"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.801cm" fo:text-indent="-0.55cm" fo:margin-left="1.801cm"/> + </style:list-level-properties> + </text:list-level-style-number> + <text:list-level-style-number text:level="5" style:num-suffix=")" style:num-format="a" style:num-letter-sync="true"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.18cm" fo:text-indent="-0.64cm" fo:margin-left="3.18cm"/> + </style:list-level-properties> + </text:list-level-style-number> + <text:list-level-style-number text:level="6" style:num-suffix=" " style:num-format="1" text:display-levels="6"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.445cm" fo:text-indent="-0.635cm" fo:margin-left="4.445cm"/> + </style:list-level-properties> + </text:list-level-style-number> + <text:list-level-style-number text:level="7" style:num-suffix=" " style:num-format="1" text:display-levels="7"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.08cm" fo:text-indent="-0.635cm" fo:margin-left="5.08cm"/> + </style:list-level-properties> + </text:list-level-style-number> + <text:list-level-style-number text:level="8" style:num-suffix=" " style:num-format="1" text:display-levels="8"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.715cm" fo:text-indent="-0.635cm" fo:margin-left="5.715cm"/> + </style:list-level-properties> + </text:list-level-style-number> + <text:list-level-style-number text:level="9" style:num-suffix=" " style:num-format="1" text:display-levels="9"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="6.35cm" fo:text-indent="-0.635cm" fo:margin-left="6.35cm"/> + </style:list-level-properties> + </text:list-level-style-number> + <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="6.985cm" fo:text-indent="-0.635cm" fo:margin-left="6.985cm"/> + </style:list-level-properties> + </text:list-level-style-number> + </text:list-style> + + </office:styles> + <office:automatic-styles> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num2"> + <style:text-properties officeooo:rsid="0014f4d6" officeooo:paragraph-rsid="0014f4d6"/> + </style:style> + <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num2"> + <style:text-properties officeooo:rsid="0014f4d6" officeooo:paragraph-rsid="00150749"/> + </style:style> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + </office:master-styles> + <office:body> + <office:text> + <text:list xml:id="list1703205442746379122" text:style-name="WW8Num2"> + <text:list-item> + <text:list> + <text:list-item> + <text:p text:style-name="P2"><text:bookmark-start text:name="__RefHeading__8284_1826734303"/><text:bookmark-start text:name="__RefHeading__1673_25705824"/>text<text:bookmark-end text:name="__RefHeading__8284_1826734303"/><text:bookmark-end text:name="__RefHeading__1673_25705824"/></text:p> + </text:list-item> + <text:list-item> + <text:p text:style-name="P3">cross-reference to <text:bookmark-ref text:reference-format="number" text:ref-name="__RefHeading__1673_25705824">1.1</text:bookmark-ref> <text:span text:style-name="T1">(Numbered paragraph - Number) and </text:span><text:span text:style-name="T1"><text:bookmark-ref text:reference-format="number-no-superior" text:ref-name="__RefHeading__1673_25705824">1.1</text:bookmark-ref></text:span><text:span text:style-name="T1">(Numbered paragraph - no context)</text:span></text:p> + </text:list-item> + </text:list> + </text:list-item> + </text:list> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/odfexport/data/Custom-Style-TOC.docx b/sw/qa/extras/odfexport/data/Custom-Style-TOC.docx Binary files differnew file mode 100644 index 0000000000..2b4c57054f --- /dev/null +++ b/sw/qa/extras/odfexport/data/Custom-Style-TOC.docx 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 Binary files differnew file mode 100644 index 0000000000..4b03bd7fd1 --- /dev/null +++ b/sw/qa/extras/odfexport/data/Formcontrol needs high z-index.odt diff --git a/sw/qa/extras/odfexport/data/IsLegal.fodt b/sw/qa/extras/odfexport/data/IsLegal.fodt new file mode 100644 index 0000000000..a4af751fb1 --- /dev/null +++ b/sw/qa/extras/odfexport/data/IsLegal.fodt @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:officeooo="http://openoffice.org/2009/office" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:styles> + <style:style style:name="Custom1" style:family="paragraph" style:default-outline-level="1"/> + <style:style style:name="Custom2" style:family="paragraph" style:default-outline-level="2"/> + <text:outline-style style:name="Outline"> + <text:outline-level-style text:level="1" loext:num-list-format="CH %1%" style:num-prefix="CH " style:num-format="I"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="nothing"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="2" loext:is-legal="true" loext:num-list-format="Sect %1%.%2%" style:num-prefix="Sect " style:num-format="01, 02, 03, ..." text:display-levels="2"> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.81cm" fo:text-indent="1.27cm"/> + </style:list-level-properties> + </text:outline-level-style> + </text:outline-style> + </office:styles> + <office:body> + <office:text> + <text:h text:style-name="Custom1" text:outline-level="1"/> + <text:h text:style-name="Custom2" text:outline-level="2">Foo</text:h> + <text:h text:style-name="Custom1" text:outline-level="1"/> + <text:h text:style-name="Custom2" text:outline-level="2">Bar</text:h> + </office:text> + </office:body> +</office:document>
\ No newline at end of file diff --git a/sw/qa/extras/odfexport/data/MadeByLO7.odt b/sw/qa/extras/odfexport/data/MadeByLO7.odt Binary files differnew file mode 100644 index 0000000000..9587fffe64 --- /dev/null +++ b/sw/qa/extras/odfexport/data/MadeByLO7.odt diff --git a/sw/qa/extras/odfexport/data/ParagraphMarkerMarkup.fodt b/sw/qa/extras/odfexport/data/ParagraphMarkerMarkup.fodt new file mode 100644 index 0000000000..c3a21261da --- /dev/null +++ b/sw/qa/extras/odfexport/data/ParagraphMarkerMarkup.fodt @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:styles> + <style:style style:name="Standard" style:family="paragraph" style:class="text"> + <style:text-properties fo:font-size="11pt"/> + </style:style> + </office:styles> + <office:automatic-styles> + <style:style style:name="T1" style:family="text"> + <style:text-properties fo:font-size="8pt"/> + </style:style> + <style:style style:name="T2" style:family="text"> + <style:text-properties fo:font-size="9pt" fo:color="#ff0000"/> + </style:style> + </office:automatic-styles> + <office:body> + <office:text> + <text:p text:style-name="Standard" loext:marker-style-name="T2"><text:span text:style-name="T1">text</text:span></text:p> + </office:text> + </office:body> +</office:document>
\ No newline at end of file diff --git a/sw/qa/extras/odfexport/data/WordTest_edit.odt b/sw/qa/extras/odfexport/data/WordTest_edit.odt Binary files differnew file mode 100644 index 0000000000..4c14295e93 --- /dev/null +++ b/sw/qa/extras/odfexport/data/WordTest_edit.odt diff --git a/sw/qa/extras/odfexport/data/allow-overlap.odt b/sw/qa/extras/odfexport/data/allow-overlap.odt Binary files differnew file mode 100644 index 0000000000..b23f5b360b --- /dev/null +++ b/sw/qa/extras/odfexport/data/allow-overlap.odt diff --git a/sw/qa/extras/odfexport/data/arabic-zero-numbering.odt b/sw/qa/extras/odfexport/data/arabic-zero-numbering.odt Binary files differnew file mode 100644 index 0000000000..2a445b2274 --- /dev/null +++ b/sw/qa/extras/odfexport/data/arabic-zero-numbering.odt diff --git a/sw/qa/extras/odfexport/data/arabic-zero3-numbering.odt b/sw/qa/extras/odfexport/data/arabic-zero3-numbering.odt Binary files differnew file mode 100644 index 0000000000..0bdca270ee --- /dev/null +++ b/sw/qa/extras/odfexport/data/arabic-zero3-numbering.odt diff --git a/sw/qa/extras/odfexport/data/arabic-zero4-numbering.odt b/sw/qa/extras/odfexport/data/arabic-zero4-numbering.odt Binary files differnew file mode 100644 index 0000000000..2eb9b49ced --- /dev/null +++ b/sw/qa/extras/odfexport/data/arabic-zero4-numbering.odt diff --git a/sw/qa/extras/odfexport/data/arabic-zero5-numbering.odt b/sw/qa/extras/odfexport/data/arabic-zero5-numbering.odt Binary files differnew file mode 100644 index 0000000000..3526ee8d70 --- /dev/null +++ b/sw/qa/extras/odfexport/data/arabic-zero5-numbering.odt diff --git a/sw/qa/extras/odfexport/data/border_types.odt b/sw/qa/extras/odfexport/data/border_types.odt Binary files differnew file mode 100644 index 0000000000..97b72436f0 --- /dev/null +++ b/sw/qa/extras/odfexport/data/border_types.odt diff --git a/sw/qa/extras/odfexport/data/btlr-cell.odt b/sw/qa/extras/odfexport/data/btlr-cell.odt Binary files differnew file mode 100644 index 0000000000..c010fa9f51 --- /dev/null +++ b/sw/qa/extras/odfexport/data/btlr-cell.odt diff --git a/sw/qa/extras/odfexport/data/btlr-frame.odt b/sw/qa/extras/odfexport/data/btlr-frame.odt Binary files differnew file mode 100644 index 0000000000..31cb03849c --- /dev/null +++ b/sw/qa/extras/odfexport/data/btlr-frame.odt diff --git a/sw/qa/extras/odfexport/data/chapter-number-new-line.odt b/sw/qa/extras/odfexport/data/chapter-number-new-line.odt Binary files differnew file mode 100644 index 0000000000..68a427f72e --- /dev/null +++ b/sw/qa/extras/odfexport/data/chapter-number-new-line.odt diff --git a/sw/qa/extras/odfexport/data/charborder.odt b/sw/qa/extras/odfexport/data/charborder.odt Binary files differnew file mode 100644 index 0000000000..0d4d50691a --- /dev/null +++ b/sw/qa/extras/odfexport/data/charborder.odt diff --git a/sw/qa/extras/odfexport/data/embedded-font-props.odt b/sw/qa/extras/odfexport/data/embedded-font-props.odt Binary files differnew file mode 100644 index 0000000000..6eb073e29f --- /dev/null +++ b/sw/qa/extras/odfexport/data/embedded-font-props.odt diff --git a/sw/qa/extras/odfexport/data/embedded-pdf.odt b/sw/qa/extras/odfexport/data/embedded-pdf.odt Binary files differnew file mode 100644 index 0000000000..3adb4cf11d --- /dev/null +++ b/sw/qa/extras/odfexport/data/embedded-pdf.odt diff --git a/sw/qa/extras/odfexport/data/fdo38244.odt b/sw/qa/extras/odfexport/data/fdo38244.odt Binary files differnew file mode 100644 index 0000000000..0fcc168a8b --- /dev/null +++ b/sw/qa/extras/odfexport/data/fdo38244.odt diff --git a/sw/qa/extras/odfexport/data/fdo43807.odt b/sw/qa/extras/odfexport/data/fdo43807.odt Binary files differnew file mode 100644 index 0000000000..ae03c59043 --- /dev/null +++ b/sw/qa/extras/odfexport/data/fdo43807.odt diff --git a/sw/qa/extras/odfexport/data/fdo58949.docx b/sw/qa/extras/odfexport/data/fdo58949.docx Binary files differnew file mode 100644 index 0000000000..d8f568b16c --- /dev/null +++ b/sw/qa/extras/odfexport/data/fdo58949.docx diff --git a/sw/qa/extras/odfexport/data/fdo60769.odt b/sw/qa/extras/odfexport/data/fdo60769.odt Binary files differnew file mode 100644 index 0000000000..b3c39376b8 --- /dev/null +++ b/sw/qa/extras/odfexport/data/fdo60769.odt diff --git a/sw/qa/extras/odfexport/data/fdo79358.odt b/sw/qa/extras/odfexport/data/fdo79358.odt Binary files differnew file mode 100644 index 0000000000..a1d2572a6d --- /dev/null +++ b/sw/qa/extras/odfexport/data/fdo79358.odt diff --git a/sw/qa/extras/odfexport/data/fdo86963.odt b/sw/qa/extras/odfexport/data/fdo86963.odt Binary files differnew file mode 100644 index 0000000000..72896e1399 --- /dev/null +++ b/sw/qa/extras/odfexport/data/fdo86963.odt diff --git a/sw/qa/extras/odfexport/data/fillbitmap3.odt b/sw/qa/extras/odfexport/data/fillbitmap3.odt Binary files differnew file mode 100644 index 0000000000..90308a5ec4 --- /dev/null +++ b/sw/qa/extras/odfexport/data/fillbitmap3.odt 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 0000000000..b991033485 --- /dev/null +++ b/sw/qa/extras/odfexport/data/footnote-collect-at-end-of-section.fodt @@ -0,0 +1,192 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:creation-date>2019-10-21T13:59:35.847339849</meta:creation-date><dc:date>2019-10-21T14:28:45.221080424</dc:date><meta:editing-duration>PT23M48S</meta:editing-duration><meta:editing-cycles>2</meta:editing-cycles><meta:generator>LibreOffice_powered_by_CIBDev/6.1.7.5$Linux_X86_64 LibreOffice_project/3ab5486449d1f3ca0247a9c133da746401c57e28</meta:generator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="8" meta:word-count="8" meta:character-count="25" meta:non-whitespace-character-count="25"/></office:meta> + <office:settings> + <config:config-item-set config:name="ooo:view-settings"> + <config:config-item config:name="ShowRedlineChanges" config:type="boolean">false</config:config-item> + </config:config-item-set> + </office:settings> + <office:font-face-decls> + <style:font-face style:name="Lohit Devanagari1" svg:font-family="'Lohit Devanagari'"/> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Lohit Devanagari" svg:font-family="'Lohit Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Source Han Sans CN" svg:font-family="'Source Han Sans CN'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Source Han Serif CN" svg:font-family="'Source Han Serif CN'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Serif CN" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Serif CN" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text"> + <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" loext:contextual-spacing="false" fo:keep-with-next="always"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Source Han Sans CN" style:font-family-asian="'Source Han Sans CN'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/> + </style:style> + <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> + <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" loext:contextual-spacing="false" fo:line-height="115%"/> + </style:style> + <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin-left="0.598cm" fo:margin-right="0cm" fo:text-indent="-0.598cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="Endnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin-left="0.598cm" fo:margin-right="0cm" fo:text-indent="-0.598cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="Footnote_20_Symbol" style:display-name="Footnote Symbol" style:family="text"/> + <style:style style:name="Footnote_20_anchor" style:display-name="Footnote anchor" style:family="text"> + <style:text-properties style:text-position="super 58%"/> + </style:style> + <style:style style:name="Endnote_20_Symbol" style:display-name="Endnote Symbol" style:family="text"/> + <style:style style:name="Endnote_20_anchor" style:display-name="Endnote anchor" style:family="text"> + <style:text-properties style:text-position="super 58%"/> + </style:style> + <text:outline-style style:name="Outline"> + <text:outline-level-style text:level="1" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="2" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="3" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="4" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="5" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="6" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="7" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="8" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="9" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="10" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + </text:outline-style> + <text:notes-configuration text:note-class="footnote" text:default-style-name="Footnote" text:citation-style-name="Footnote_20_Symbol" text:citation-body-style-name="Footnote_20_anchor" text:master-page-name="Footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="chapter"/> + <text:notes-configuration text:note-class="endnote" text:default-style-name="Endnote" text:citation-style-name="Endnote_20_Symbol" text:citation-body-style-name="Endnote_20_anchor" text:master-page-name="Endnote" style:num-format="i" text:start-value="0"/> + <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/> + </office:styles> + <office:automatic-styles> + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Footnote"> + <style:text-properties officeooo:rsid="00126297" officeooo:paragraph-rsid="00126297"/> + </style:style> + <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Footnote"> + <style:text-properties officeooo:rsid="0001a183" officeooo:paragraph-rsid="0001a183"/> + </style:style> + <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Footnote"> + <style:text-properties officeooo:rsid="00126297" officeooo:paragraph-rsid="00126297"/> + </style:style> + <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Footnote"> + <style:text-properties officeooo:rsid="0001a183" officeooo:paragraph-rsid="0001a183"/> + </style:style> + <style:style style:name="P5" style:family="paragraph" style:parent-style-name="Footnote"> + <style:text-properties officeooo:rsid="00126297" officeooo:paragraph-rsid="00126297"/> + </style:style> + <style:style style:name="Sect1" style:family="section"> + <style:section-properties text:dont-balance-text-columns="false" style:editable="false"> + <style:columns fo:column-count="1" fo:column-gap="0cm"/> + <text:notes-configuration text:note-class="footnote" text:start-value="1"/> + </style:section-properties> + </style:style> + <style:style style:name="Sect2" style:family="section"> + <style:section-properties style:editable="false"> + <style:columns fo:column-count="1" fo:column-gap="0cm"/> + <text:notes-configuration text:note-class="footnote" text:start-value="1"/> + </style:section-properties> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + <style:page-layout style:name="pm2"> + <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm"> + <style:footnote-sep style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + <style:master-page style:name="Footnote" style:page-layout-name="pm2"/> + <style:master-page style:name="Endnote" style:page-layout-name="pm2"/> + </office:master-styles> + <office:body> + <office:text> + <text:tracked-changes text:track-changes="false"> + <text:changed-region xml:id="ct217160384" text:id="ct217160384"> + <text:deletion> + <office:change-info> + <dc:creator>Unknown Author</dc:creator> + <dc:date>2019-10-21T14:28:28</dc:date> + </office:change-info> + <text:p text:style-name="Standard"><text:note text:id="ftn6" text:note-class="footnote"><text:note-citation>2</text:note-citation><text:note-body> + <text:p text:style-name="P1">two</text:p></text:note-body></text:note><text:note text:id="ftn6" text:note-class="footnote"><text:note-citation>3</text:note-citation><text:note-body> + <text:p text:style-name="P2">three</text:p></text:note-body></text:note></text:p> + </text:deletion> + </text:changed-region> + </text:tracked-changes> + <text:section text:style-name="Sect1" text:name="Section1"> + <text:p text:style-name="Standard"><text:note text:id="ftn1" text:note-class="footnote"><text:note-citation>1</text:note-citation><text:note-body> + <text:p text:style-name="P1">one</text:p></text:note-body></text:note><text:note text:id="ftn2" text:note-class="footnote"><text:note-citation>2</text:note-citation><text:note-body> + <text:p text:style-name="P1">two</text:p></text:note-body></text:note></text:p> + </text:section> + <text:section text:style-name="Sect2" text:name="Section2"> + <text:p text:style-name="Standard"><text:note text:id="ftn3" text:note-class="footnote"><text:note-citation>1</text:note-citation><text:note-body> + <text:p text:style-name="P1">one</text:p></text:note-body></text:note><text:change text:change-id="ct217160384"/><text:note text:id="ftn5" text:note-class="footnote"><text:note-citation>2</text:note-citation><text:note-body> + <text:p text:style-name="P2">four</text:p></text:note-body></text:note></text:p> + </text:section> + <text:p text:style-name="Standard"/> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/odfexport/data/framebackgrounds.odt b/sw/qa/extras/odfexport/data/framebackgrounds.odt Binary files differnew file mode 100644 index 0000000000..9ad338c2d1 --- /dev/null +++ b/sw/qa/extras/odfexport/data/framebackgrounds.odt diff --git a/sw/qa/extras/odfexport/data/gerrit13858.odt b/sw/qa/extras/odfexport/data/gerrit13858.odt Binary files differnew file mode 100644 index 0000000000..9b3dd37ff1 --- /dev/null +++ b/sw/qa/extras/odfexport/data/gerrit13858.odt diff --git a/sw/qa/extras/odfexport/data/gutter-left.odt b/sw/qa/extras/odfexport/data/gutter-left.odt Binary files differnew file mode 100644 index 0000000000..a047ecaa33 --- /dev/null +++ b/sw/qa/extras/odfexport/data/gutter-left.odt diff --git a/sw/qa/extras/odfexport/data/image-mimetype.odt b/sw/qa/extras/odfexport/data/image-mimetype.odt Binary files differnew file mode 100644 index 0000000000..4c4924a1b2 --- /dev/null +++ b/sw/qa/extras/odfexport/data/image-mimetype.odt diff --git a/sw/qa/extras/odfexport/data/listformat.docx b/sw/qa/extras/odfexport/data/listformat.docx Binary files differnew file mode 100644 index 0000000000..338678d82d --- /dev/null +++ b/sw/qa/extras/odfexport/data/listformat.docx diff --git a/sw/qa/extras/odfexport/data/listformat.odt b/sw/qa/extras/odfexport/data/listformat.odt Binary files differnew file mode 100644 index 0000000000..ec3992c8fd --- /dev/null +++ b/sw/qa/extras/odfexport/data/listformat.odt diff --git a/sw/qa/extras/odfexport/data/nestedTableInFooter.odt b/sw/qa/extras/odfexport/data/nestedTableInFooter.odt Binary files differnew file mode 100644 index 0000000000..0356f04ee1 --- /dev/null +++ b/sw/qa/extras/odfexport/data/nestedTableInFooter.odt diff --git a/sw/qa/extras/odfexport/data/ooo321_stylepagenumber.odt b/sw/qa/extras/odfexport/data/ooo321_stylepagenumber.odt Binary files differnew file mode 100644 index 0000000000..aae70e1063 --- /dev/null +++ b/sw/qa/extras/odfexport/data/ooo321_stylepagenumber.odt diff --git a/sw/qa/extras/odfexport/data/oooxml_embedded.sxw b/sw/qa/extras/odfexport/data/oooxml_embedded.sxw Binary files differnew file mode 100644 index 0000000000..e4fe14aef5 --- /dev/null +++ b/sw/qa/extras/odfexport/data/oooxml_embedded.sxw diff --git a/sw/qa/extras/odfexport/data/page-content-bottom.odt b/sw/qa/extras/odfexport/data/page-content-bottom.odt Binary files differnew file mode 100644 index 0000000000..263ca7df40 --- /dev/null +++ b/sw/qa/extras/odfexport/data/page-content-bottom.odt diff --git a/sw/qa/extras/odfexport/data/page-content-top.odt b/sw/qa/extras/odfexport/data/page-content-top.odt Binary files differnew file mode 100644 index 0000000000..755d50242e --- /dev/null +++ b/sw/qa/extras/odfexport/data/page-content-top.odt diff --git a/sw/qa/extras/odfexport/data/pagestyle_background_lo64.odt b/sw/qa/extras/odfexport/data/pagestyle_background_lo64.odt Binary files differnew file mode 100644 index 0000000000..c8b3c3fdd0 --- /dev/null +++ b/sw/qa/extras/odfexport/data/pagestyle_background_lo64.odt diff --git a/sw/qa/extras/odfexport/data/pagestyle_background_lo70.odt b/sw/qa/extras/odfexport/data/pagestyle_background_lo70.odt Binary files differnew file mode 100644 index 0000000000..eb8b4a0e72 --- /dev/null +++ b/sw/qa/extras/odfexport/data/pagestyle_background_lo70.odt diff --git a/sw/qa/extras/odfexport/data/pagestyle_background_ooo33.odt b/sw/qa/extras/odfexport/data/pagestyle_background_ooo33.odt Binary files differnew file mode 100644 index 0000000000..92098d0bcf --- /dev/null +++ b/sw/qa/extras/odfexport/data/pagestyle_background_ooo33.odt 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 0000000000..cd4cde9623 --- /dev/null +++ b/sw/qa/extras/odfexport/data/protection-key.fodt @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + + <office:styles> + + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + + </office:styles> + <office:automatic-styles> + + <style:style style:name="Sect" style:family="section"> + <style:section-properties style:editable="false"> + <style:columns fo:column-count="1" fo:column-gap="0cm"/> + </style:section-properties> + </style:style> + + </office:automatic-styles> + <office:body> + <office:text> + + <!-- UTF-16 LE, bad SHA1 --> + <text:section text:style-name="Sect" text:name="Section0" text:protected="true" text:protection-key="vbnhxyBKtPHCA1wB21zG1Oha8ZA="> + <text:p text:style-name="Standard"/> + </text:section> + + <!-- echo -n $(echo -n 1012345678901234567890123456789012345678901234567890 | sha1sum | cut -f 1 -d ' ') | xxd -r -p | base64 --> + <!-- UTF-8, good SHA1 --> + <text:section text:style-name="Sect" text:name="Section1" text:protected="true" text:protection-key="nLHas0RIwepGDaH4c2hpyIUvIS8="> + <text:p text:style-name="Standard"/> + </text:section> + + <!-- echo -n $(echo -n 1012345678901234567890123456789012345678901234567890 | sha256sum | cut -f 1 -d ' ') | xxd -r -p | base64 --> + <!-- UTF-8, SHA256, ODF 1.2 URI --> + <text:section text:style-name="Sect" text:name="Section2" text:protected="true" text:protection-key="1tnJohagR2T0yF/v69hLPuumSTsj32CumW97nkKGuSQ=" text:protection-key-digest-algorithm="http://www.w3.org/2000/09/xmldsig#sha256"> + <text:p text:style-name="Standard"/> + </text:section> + + <!-- UTF-8, SHA256, W3C URI --> + <text:section text:style-name="Sect" text:name="Section3" text:protected="true" text:protection-key="1tnJohagR2T0yF/v69hLPuumSTsj32CumW97nkKGuSQ=" text:protection-key-digest-algorithm="http://www.w3.org/2001/04/xmlenc#sha256"> + <text:p text:style-name="Standard"/> + </text:section> + + <text:p text:style-name="Standard"/> + </office:text> + </office:body> +</office:document> + diff --git a/sw/qa/extras/odfexport/data/qrcode-properties.odt b/sw/qa/extras/odfexport/data/qrcode-properties.odt Binary files differnew file mode 100644 index 0000000000..2de59b0414 --- /dev/null +++ b/sw/qa/extras/odfexport/data/qrcode-properties.odt diff --git a/sw/qa/extras/odfexport/data/redlineTextFrame.odt b/sw/qa/extras/odfexport/data/redlineTextFrame.odt Binary files differnew file mode 100644 index 0000000000..0986c3792f --- /dev/null +++ b/sw/qa/extras/odfexport/data/redlineTextFrame.odt diff --git a/sw/qa/extras/odfexport/data/referencelanguage.odt b/sw/qa/extras/odfexport/data/referencelanguage.odt Binary files differnew file mode 100644 index 0000000000..9614bb3e31 --- /dev/null +++ b/sw/qa/extras/odfexport/data/referencelanguage.odt diff --git a/sw/qa/extras/odfexport/data/relh-page-tdf80282.odt b/sw/qa/extras/odfexport/data/relh-page-tdf80282.odt Binary files differnew file mode 100644 index 0000000000..6b3c583d36 --- /dev/null +++ b/sw/qa/extras/odfexport/data/relh-page-tdf80282.odt diff --git a/sw/qa/extras/odfexport/data/relh-page.odt b/sw/qa/extras/odfexport/data/relh-page.odt Binary files differnew file mode 100644 index 0000000000..2dcf641243 --- /dev/null +++ b/sw/qa/extras/odfexport/data/relh-page.odt diff --git a/sw/qa/extras/odfexport/data/relw-page.odt b/sw/qa/extras/odfexport/data/relw-page.odt Binary files differnew file mode 100644 index 0000000000..047d91e876 --- /dev/null +++ b/sw/qa/extras/odfexport/data/relw-page.odt diff --git a/sw/qa/extras/odfexport/data/resolved-comment.odt b/sw/qa/extras/odfexport/data/resolved-comment.odt Binary files differnew file mode 100644 index 0000000000..e136cac3d8 --- /dev/null +++ b/sw/qa/extras/odfexport/data/resolved-comment.odt diff --git a/sw/qa/extras/odfexport/data/rovas-numbering.odt b/sw/qa/extras/odfexport/data/rovas-numbering.odt Binary files differnew file mode 100644 index 0000000000..72cb8895a9 --- /dev/null +++ b/sw/qa/extras/odfexport/data/rovas-numbering.odt diff --git a/sw/qa/extras/odfexport/data/ruby-position.odt b/sw/qa/extras/odfexport/data/ruby-position.odt Binary files differnew file mode 100644 index 0000000000..7086144bf1 --- /dev/null +++ b/sw/qa/extras/odfexport/data/ruby-position.odt 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 0000000000..b9c97eb9e3 --- /dev/null +++ b/sw/qa/extras/odfexport/data/section-columns-separator.fodt @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:automatic-styles> + <style:style style:name="Sect1" style:family="section"> + <style:section-properties text:dont-balance-text-columns="false" style:editable="false"> + <style:columns fo:column-count="2" fo:column-gap="0.6cm"> + <style:column-sep style:width="0.009cm" style:color="#99AABB" style:height="50%" style:style="dotted" style:vertical-align="bottom"/> + <style:column style:rel-width="32767*" fo:start-indent="0cm" fo:end-indent="0.248cm"/> + <style:column style:rel-width="32768*" fo:start-indent="0.248cm" fo:end-indent="0cm"/> + </style:columns> + </style:section-properties> + </style:style> + </office:automatic-styles> + <office:body> + <office:text> + <text:section text:style-name="Sect1" text:name="Section1"> + <text:p>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.</text:p> + <text:p>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.</text:p> + <text:p>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.</text:p> + </text:section> + </office:text> + </office:body> +</office:document>
\ 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 0000000000..b8a5c1e670 --- /dev/null +++ b/sw/qa/extras/odfexport/data/sender-initials.fodt @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:initial-creator>ms </meta:initial-creator><meta:creation-date>2015-08-24T21:49:45.305718699</meta:creation-date><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/><meta:generator>LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba</meta:generator></office:meta> + <office:font-face-decls> + <style:font-face style:name="Lohit Devanagari1" svg:font-family="'Lohit Devanagari'"/> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Lohit Devanagari" svg:font-family="'Lohit Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Source Han Sans CN Regular" svg:font-family="'Source Han Sans CN Regular'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Sans CN Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Sans CN Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + </office:styles> + <office:automatic-styles> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard"> + <style:text-properties officeooo:rsid="000b01fe" officeooo:paragraph-rsid="000b01fe"/> + </style:style> + <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard"> + <style:text-properties officeooo:rsid="000b01fe" officeooo:paragraph-rsid="000b01fe"/> + </style:style> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + </office:master-styles> + <office:body> + <office:text> + + <!-- ODF 1.3 --> + <text:p text:style-name="P1"><office:annotation office:name="__Annotation__528782_647779260"><meta:creator-initials>I</meta:creator-initials><dc:date>2018-05-08T11:09:30.015915376</dc:date><text:p text:style-name="P2">bar</text:p></office:annotation>Foo<office:annotation-end office:name="__Annotation__528782_647779260"/></text:p> + <!-- LO extension before 2013 --> + <text:p text:style-name="P1"><office:annotation office:name="__Annotation__528782_647779260"><text:sender-initials>I</text:sender-initials><dc:date>2018-05-08T11:09:30.015915376</dc:date><text:p text:style-name="P2">bar</text:p></office:annotation>Foo<office:annotation-end office:name="__Annotation__528782_647779260"/></text:p> + <!-- LO extension since 2013 --> + <text:p text:style-name="P1"><office:annotation office:name="__Annotation__528782_647779260"><loext:sender-initials>I</loext:sender-initials><dc:date>2018-05-08T11:09:30.015915376</dc:date><text:p text:style-name="P2">bar</text:p></office:annotation>Foo<office:annotation-end office:name="__Annotation__528782_647779260"/></text:p> + <!-- ODF 1.0 --> + <text:p text:style-name="P1"> + <text:sender-initials>I</text:sender-initials> + </text:p> + <!-- accidental export of loext namespace 2013-2017 --> + <text:p text:style-name="P1"> + <loext:sender-initials>I</loext:sender-initials> + </text:p> + + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/odfexport/data/sha1_correct.odt b/sw/qa/extras/odfexport/data/sha1_correct.odt Binary files differnew file mode 100644 index 0000000000..01cbb0a073 --- /dev/null +++ b/sw/qa/extras/odfexport/data/sha1_correct.odt diff --git a/sw/qa/extras/odfexport/data/sha1_wrong.odt b/sw/qa/extras/odfexport/data/sha1_wrong.odt Binary files differnew file mode 100644 index 0000000000..94032025b3 --- /dev/null +++ b/sw/qa/extras/odfexport/data/sha1_wrong.odt diff --git a/sw/qa/extras/odfexport/data/shape-relsize.odt b/sw/qa/extras/odfexport/data/shape-relsize.odt Binary files differnew file mode 100644 index 0000000000..05a3ffa591 --- /dev/null +++ b/sw/qa/extras/odfexport/data/shape-relsize.odt diff --git a/sw/qa/extras/odfexport/data/shape-with-hyperlink.odt b/sw/qa/extras/odfexport/data/shape-with-hyperlink.odt Binary files differnew file mode 100644 index 0000000000..7b11278284 --- /dev/null +++ b/sw/qa/extras/odfexport/data/shape-with-hyperlink.odt diff --git a/sw/qa/extras/odfexport/data/shapes-hyperlink.odt b/sw/qa/extras/odfexport/data/shapes-hyperlink.odt Binary files differnew file mode 100644 index 0000000000..f8f4e15565 --- /dev/null +++ b/sw/qa/extras/odfexport/data/shapes-hyperlink.odt 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 0000000000..ddceff9f35 --- /dev/null +++ b/sw/qa/extras/odfexport/data/signatureline-properties.fodt @@ -0,0 +1,596 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:creation-date>2017-12-11T16:12:21.947863528</meta:creation-date><dc:date>2017-12-11T16:12:44.952307632</dc:date><meta:editing-duration>PT27S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0"/><meta:generator>LibreOfficeDev/6.1.0.0.alpha0$Linux_X86_64 LibreOffice_project/f694d0c29b4f38b6c40850c61ec6aeac3969fd88</meta:generator></office:meta> + <office:settings> + <config:config-item-set config:name="ooo:view-settings"> + <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item> + <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item> + <config:config-item config:name="ViewAreaWidth" config:type="long">47891</config:config-item> + <config:config-item config:name="ViewAreaHeight" config:type="long">23206</config:config-item> + <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item> + <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item> + <config:config-item-map-indexed config:name="Views"> + <config:config-item-map-entry> + <config:config-item config:name="ViewId" config:type="string">view2</config:config-item> + <config:config-item config:name="ViewLeft" config:type="long">21447</config:config-item> + <config:config-item config:name="ViewTop" config:type="long">2501</config:config-item> + <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item> + <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item> + <config:config-item config:name="VisibleRight" config:type="long">47890</config:config-item> + <config:config-item config:name="VisibleBottom" config:type="long">23204</config:config-item> + <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> + <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item> + <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item> + <config:config-item config:name="ZoomFactor" config:type="short">100</config:config-item> + <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item> + <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> + </config:config-item-map-entry> + </config:config-item-map-indexed> + </config:config-item-set> + <config:config-item-set config:name="ooo:configuration-settings"> + <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintFaxName" config:type="string"/> + <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item> + <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item> + <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterSetup" config:type="base64Binary"/> + <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item> + <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/> + <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item> + <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item> + <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item> + <config:config-item config:name="RsidRoot" config:type="int">855097</config:config-item> + <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item> + <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item> + <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item> + <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item> + <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item> + <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item> + <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item> + <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/> + <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item> + <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterName" config:type="string"/> + <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item> + <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/> + <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item> + <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item> + <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/> + <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item> + <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item> + <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> + <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item> + <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">true</config:config-item> + <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item> + <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="Rsid" config:type="int">1224071</config:config-item> + <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item> + <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item> + <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item> + <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item> + <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item> + <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item> + <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item> + <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintEmptyPages" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item> + </config:config-item-set> + </office:settings> + <office:scripts> + <office:script script:language="ooo:Basic"> + <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/> + </office:script> + </office:scripts> + <office:font-face-decls> + <style:font-face style:name="Lohit Devanagari1" svg:font-family="'Lohit Devanagari'"/> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Lohit Devanagari" svg:font-family="'Lohit Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans CJK SC Regular" svg:font-family="'Noto Sans CJK SC Regular'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Sans CJK SC Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Sans CJK SC Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text"> + <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" loext:contextual-spacing="false" fo:keep-with-next="always"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Noto Sans CJK SC Regular" style:font-family-asian="'Noto Sans CJK SC Regular'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/> + </style:style> + <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> + <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" loext:contextual-spacing="false" fo:line-height="115%"/> + </style:style> + <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list"> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" loext:contextual-spacing="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="'Lohit Devanagari'" style:font-size-complex="12pt" style:font-style-complex="italic"/> + </style:style> + <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"/> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <text:outline-style style:name="Outline"> + <text:outline-level-style text:level="1" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="2" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="3" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="4" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="5" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="6" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="7" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="8" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="9" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="10" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + </text:outline-style> + <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> + <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/> + <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/> + </office:styles> + <office:automatic-styles> + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard"> + <loext:graphic-properties draw:fill="none"/> + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" fo:background-color="transparent"/> + </style:style> + <style:style style:name="P2" style:family="paragraph"> + <loext:graphic-properties draw:fill="none"/> + <style:paragraph-properties fo:text-align="center"/> + </style:style> + <style:style style:name="gr1" style:family="graphic"> + <style:graphic-properties draw:stroke="none" draw:fill="none" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:color-mode="standard" draw:luminance="0%" draw:contrast="0%" draw:gamma="100%" draw:red="0%" draw:green="0%" draw:blue="0%" fo:clip="rect(0cm, 0cm, 0cm, 0cm)" draw:image-opacity="100%" style:mirror="none" style:run-through="background" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" draw:wrap-influence-on-position="once-concurrent" style:flow-with-text="false"/> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + </office:master-styles> + <office:body> + <office:text> + <text:sequence-decls> + <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> + <text:sequence-decl text:display-outline-level="0" text:name="Table"/> + <text:sequence-decl text:display-outline-level="0" text:name="Text"/> + <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> + </text:sequence-decls> + <text:p text:style-name="Standard"><draw:frame text:anchor-type="paragraph" draw:z-index="0" draw:style-name="gr1" draw:text-style-name="P2" svg:width="6.002cm" svg:height="3.001cm" svg:x="0cm" svg:y="0cm"> + <draw:image loext:mime-type="image/svg+xml"> + <office:binary-data>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= + </office:binary-data> + <text:p/> + </draw:image> + <draw:image loext:mime-type="image/png"> + <office:binary-data>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== + </office:binary-data> + </draw:image> + <svg:desc>140</svg:desc> + <loext:signatureline loext:id="{3C24159B-3B98-4F60-AB52-00E7721758E9}" loext:suggested-signer-name="John Doe" loext:suggested-signer-title="Farmer" loext:suggested-signer-email="john@farmers.org" loext:signing-instructions="Please farm here." loext:show-sign-date="true" loext:can-add-comment="true"/> + </draw:frame></text:p> + </office:text> + </office:body> +</office:document>
\ 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 Binary files differnew file mode 100644 index 0000000000..0f07d93f24 --- /dev/null +++ b/sw/qa/extras/odfexport/data/spellout-numberingtypes.odt 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 0000000000..76c36c6988 --- /dev/null +++ b/sw/qa/extras/odfexport/data/style-link.fodt @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<office:document xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:styles> + <style:style style:name="List_20_Paragraph" style:display-name="List Paragraph" style:family="paragraph" loext:linked-style-name="List_20_Paragraph_20_Char"/> + <style:style style:name="List_20_Paragraph_20_Char" style:display-name="List Paragraph Char" style:family="text" loext:linked-style-name="List_20_Paragraph"/> + </office:styles> + <office:master-styles> + <style:master-page style:name="Standard"/> + </office:master-styles> + <office:body> + <office:text> + <text:p/> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/odfexport/data/sw_hatch.odt b/sw/qa/extras/odfexport/data/sw_hatch.odt Binary files differnew file mode 100644 index 0000000000..45e36c6ecc --- /dev/null +++ b/sw/qa/extras/odfexport/data/sw_hatch.odt 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 Binary files differnew file mode 100644 index 0000000000..44dbf0bdec --- /dev/null +++ b/sw/qa/extras/odfexport/data/table-in-frame-in-table-in-header-base.odt diff --git a/sw/qa/extras/odfexport/data/table_number_format_3.docx b/sw/qa/extras/odfexport/data/table_number_format_3.docx Binary files differnew file mode 100644 index 0000000000..1bb423e455 --- /dev/null +++ b/sw/qa/extras/odfexport/data/table_number_format_3.docx diff --git a/sw/qa/extras/odfexport/data/table_styles_1.odt b/sw/qa/extras/odfexport/data/table_styles_1.odt Binary files differnew file mode 100644 index 0000000000..701fd92c2a --- /dev/null +++ b/sw/qa/extras/odfexport/data/table_styles_1.odt diff --git a/sw/qa/extras/odfexport/data/table_styles_2.odt b/sw/qa/extras/odfexport/data/table_styles_2.odt Binary files differnew file mode 100644 index 0000000000..735ea44319 --- /dev/null +++ b/sw/qa/extras/odfexport/data/table_styles_2.odt diff --git a/sw/qa/extras/odfexport/data/table_styles_3.odt b/sw/qa/extras/odfexport/data/table_styles_3.odt Binary files differnew file mode 100644 index 0000000000..7367864890 --- /dev/null +++ b/sw/qa/extras/odfexport/data/table_styles_3.odt diff --git a/sw/qa/extras/odfexport/data/table_styles_4.odt b/sw/qa/extras/odfexport/data/table_styles_4.odt Binary files differnew file mode 100644 index 0000000000..0d96127e3b --- /dev/null +++ b/sw/qa/extras/odfexport/data/table_styles_4.odt diff --git a/sw/qa/extras/odfexport/data/table_styles_5.odt b/sw/qa/extras/odfexport/data/table_styles_5.odt Binary files differnew file mode 100644 index 0000000000..c90958322a --- /dev/null +++ b/sw/qa/extras/odfexport/data/table_styles_5.odt diff --git a/sw/qa/extras/odfexport/data/tdf100492.odt b/sw/qa/extras/odfexport/data/tdf100492.odt Binary files differnew file mode 100644 index 0000000000..e17bd67c50 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf100492.odt diff --git a/sw/qa/extras/odfexport/data/tdf101710.odt b/sw/qa/extras/odfexport/data/tdf101710.odt Binary files differnew file mode 100644 index 0000000000..50ab736070 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf101710.odt diff --git a/sw/qa/extras/odfexport/data/tdf101856.odt b/sw/qa/extras/odfexport/data/tdf101856.odt Binary files differnew file mode 100644 index 0000000000..bddd150228 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf101856.odt diff --git a/sw/qa/extras/odfexport/data/tdf101856_overlapped.odt b/sw/qa/extras/odfexport/data/tdf101856_overlapped.odt Binary files differnew file mode 100644 index 0000000000..c05df538da --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf101856_overlapped.odt diff --git a/sw/qa/extras/odfexport/data/tdf103091.fodt b/sw/qa/extras/odfexport/data/tdf103091.fodt new file mode 100644 index 0000000000..7b7d35cd46 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf103091.fodt @@ -0,0 +1,307 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:initial-creator>ms </meta:initial-creator><meta:creation-date>2017-06-15T21:56:46</meta:creation-date><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/><dc:date>2017-06-15T21:59:44</dc:date><dc:creator>ms </dc:creator><meta:editing-duration>P0D</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:generator>LibreOffice/3.5$Linux_X86_64 LibreOffice_project/3215f89-f603614-ab984f2-7348103-1225a5b</meta:generator></office:meta> + <office:font-face-decls> + <style:font-face style:name="DejaVu Sans1" svg:font-family="'DejaVu Sans'" style:font-family-generic="swiss"/> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="DejaVu Sans" svg:font-family="'DejaVu Sans'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="DejaVu Sans Mono" svg:font-family="'DejaVu Sans Mono'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#808080" draw:fill-color="#cfe7f5" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="DejaVu Sans Mono" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="DejaVu Sans" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text"> + <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:keep-with-next="always"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-size="14pt" style:font-name-asian="DejaVu Sans Mono" style:font-size-asian="14pt" style:font-name-complex="DejaVu Sans" style:font-size-complex="14pt"/> + </style:style> + <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> + <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm"/> + <style:map style:condition="table-header()" style:apply-style-name="Addressee"/> + <style:map style:condition="table()" style:apply-style-name="Bibliography_20_1"/> + <style:map style:condition="text-box()" style:apply-style-name="Bibliography_20_Heading"/> + <style:map style:condition="section()" style:apply-style-name="Caption"/> + <style:map style:condition="footnote()" style:apply-style-name="Salutation"/> + <style:map style:condition="endnote()" style:apply-style-name="Contents_20_1"/> + <style:map style:condition="header()" style:apply-style-name="Contents_20_2"/> + <style:map style:condition="footer()" style:apply-style-name="Contents_20_3"/> + <style:map style:condition="outline-level()=1" style:apply-style-name="Contents_20_4"/> + <style:map style:condition="outline-level()=2" style:apply-style-name="Contents_20_5"/> + <style:map style:condition="outline-level()=3" style:apply-style-name="Contents_20_6"/> + <style:map style:condition="outline-level()=4" style:apply-style-name="Contents_20_7"/> + <style:map style:condition="outline-level()=5" style:apply-style-name="Contents_20_8"/> + <style:map style:condition="outline-level()=6" style:apply-style-name="Contents_20_9"/> + <style:map style:condition="outline-level()=7" style:apply-style-name="Contents_20_10"/> + <style:map style:condition="outline-level()=8" style:apply-style-name="Contents_20_Heading"/> + <style:map style:condition="outline-level()=9" style:apply-style-name="Standard"/> + <style:map style:condition="outline-level()=10" style:apply-style-name="Drawing"/> + <style:map style:condition="list-level()=1" style:apply-style-name="Endnote"/> + <style:map style:condition="list-level()=2" style:apply-style-name="First_20_line_20_indent"/> + <style:map style:condition="list-level()=3" style:apply-style-name="Footer"/> + <style:map style:condition="list-level()=4" style:apply-style-name="Footer_20_left"/> + <style:map style:condition="list-level()=5" style:apply-style-name="Footer_20_right"/> + <style:map style:condition="list-level()=6" style:apply-style-name="Footnote"/> + <style:map style:condition="list-level()=7" style:apply-style-name="Frame_20_contents"/> + <style:map style:condition="list-level()=8" style:apply-style-name="Hanging_20_indent"/> + <style:map style:condition="list-level()=9" style:apply-style-name="Header"/> + <style:map style:condition="list-level()=10" style:apply-style-name="Header_20_left"/> + </style:style> + <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list"> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="DejaVu Sans1"/> + </style:style> + <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="DejaVu Sans1" style:font-size-complex="12pt" style:font-style-complex="italic"/> + </style:style> + <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"/> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="DejaVu Sans1"/> + </style:style> + <style:style style:name="Addressee" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.106cm" text:number-lines="false" text:line-number="0"/> + </style:style> + <style:style style:name="Bibliography_20_1" style:display-name="Bibliography 1" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="17cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Bibliography_20_Heading" style:display-name="Bibliography Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="16pt" fo:font-weight="bold" style:font-size-asian="16pt" style:font-weight-asian="bold" style:font-size-complex="16pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Salutation" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"/> + </style:style> + <style:style style:name="Contents_20_1" style:display-name="Contents 1" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="17cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_2" style:display-name="Contents 2" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="0.499cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="16.501cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_3" style:display-name="Contents 3" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="0.998cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="16.002cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_4" style:display-name="Contents 4" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="1.498cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="15.503cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_5" style:display-name="Contents 5" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="1.997cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="15.004cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_6" style:display-name="Contents 6" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="2.496cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="14.504cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_7" style:display-name="Contents 7" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="2.995cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="14.005cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_8" style:display-name="Contents 8" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="3.494cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="13.506cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_9" style:display-name="Contents 9" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="3.993cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="13.007cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_10" style:display-name="Contents 10" style:family="paragraph" style:parent-style-name="Index" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="4.493cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="12.508cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Contents_20_Heading" style:display-name="Contents Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="16pt" fo:font-weight="bold" style:font-size-asian="16pt" style:font-weight-asian="bold" style:font-size-complex="16pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Drawing" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/> + <style:style style:name="Endnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="0.598cm" fo:margin-right="0cm" fo:text-indent="-0.598cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="First_20_line_20_indent" style:display-name="First line indent" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="text"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0.499cm" style:auto-text-indent="false"/> + </style:style> + <style:style style:name="Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"> + <style:tab-stops> + <style:tab-stop style:position="8.5cm" style:type="center"/> + <style:tab-stop style:position="17cm" style:type="right"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Footer_20_left" style:display-name="Footer left" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"> + <style:tab-stops> + <style:tab-stop style:position="8.5cm" style:type="center"/> + <style:tab-stop style:position="17cm" style:type="right"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Footer_20_right" style:display-name="Footer right" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"> + <style:tab-stops> + <style:tab-stop style:position="8.5cm" style:type="center"/> + <style:tab-stop style:position="17cm" style:type="right"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="0.598cm" fo:margin-right="0cm" fo:text-indent="-0.598cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="Frame_20_contents" style:display-name="Frame contents" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="extra"/> + <style:style style:name="Hanging_20_indent" style:display-name="Hanging indent" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="text"> + <style:paragraph-properties fo:margin="100%" fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="-0.499cm" style:auto-text-indent="false"> + <style:tab-stops> + <style:tab-stop style:position="0cm"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Header" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"> + <style:tab-stops> + <style:tab-stop style:position="8.5cm" style:type="center"/> + <style:tab-stop style:position="17cm" style:type="right"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Header_20_left" style:display-name="Header left" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"> + <style:tab-stops> + <style:tab-stop style:position="8.5cm" style:type="center"/> + <style:tab-stop style:position="17cm" style:type="right"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <text:outline-style style:name="Outline"> + <text:outline-level-style text:level="1" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.762cm" fo:text-indent="-0.762cm" fo:margin-left="0.762cm"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="2" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.016cm" fo:text-indent="-1.016cm" fo:margin-left="1.016cm"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="3" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.27cm" fo:text-indent="-1.27cm" fo:margin-left="1.27cm"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="4" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.524cm" fo:text-indent="-1.524cm" fo:margin-left="1.524cm"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="5" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.778cm" fo:text-indent="-1.778cm" fo:margin-left="1.778cm"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="6" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.032cm" fo:text-indent="-2.032cm" fo:margin-left="2.032cm"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="7" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.286cm" fo:text-indent="-2.286cm" fo:margin-left="2.286cm"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="8" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.54cm" fo:text-indent="-2.54cm" fo:margin-left="2.54cm"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="9" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.794cm" fo:text-indent="-2.794cm" fo:margin-left="2.794cm"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="10" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.048cm" fo:text-indent="-3.048cm" fo:margin-left="3.048cm"/> + </style:list-level-properties> + </text:outline-level-style> + </text:outline-style> + <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> + <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/> + <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/> + </office:styles> + <office:automatic-styles> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin="2cm" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + </office:master-styles> + <office:body> + <office:text> + <text:sequence-decls> + <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> + <text:sequence-decl text:display-outline-level="0" text:name="Table"/> + <text:sequence-decl text:display-outline-level="0" text:name="Text"/> + <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> + </text:sequence-decls> + <text:p text:style-name="Standard"/> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/odfexport/data/tdf103567.odt b/sw/qa/extras/odfexport/data/tdf103567.odt Binary files differnew file mode 100644 index 0000000000..cbd29bd298 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf103567.odt diff --git a/sw/qa/extras/odfexport/data/tdf104254_noHeaderWrapping.odt b/sw/qa/extras/odfexport/data/tdf104254_noHeaderWrapping.odt Binary files differnew file mode 100644 index 0000000000..06dde4802b --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf104254_noHeaderWrapping.odt diff --git a/sw/qa/extras/odfexport/data/tdf107292.odt b/sw/qa/extras/odfexport/data/tdf107292.odt Binary files differnew file mode 100644 index 0000000000..f35da387f9 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf107292.odt diff --git a/sw/qa/extras/odfexport/data/tdf107696.odt b/sw/qa/extras/odfexport/data/tdf107696.odt Binary files differnew file mode 100644 index 0000000000..c24100bbdf --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf107696.odt diff --git a/sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt b/sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt Binary files differnew file mode 100644 index 0000000000..8fcf98a627 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt diff --git a/sw/qa/extras/odfexport/data/tdf114287.odt b/sw/qa/extras/odfexport/data/tdf114287.odt Binary files differnew file mode 100644 index 0000000000..a9e9d38e29 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf114287.odt diff --git a/sw/qa/extras/odfexport/data/tdf115815.odt b/sw/qa/extras/odfexport/data/tdf115815.odt Binary files differnew file mode 100644 index 0000000000..7c2aad0da6 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf115815.odt diff --git a/sw/qa/extras/odfexport/data/tdf118502.odt b/sw/qa/extras/odfexport/data/tdf118502.odt Binary files differnew file mode 100644 index 0000000000..f006d607ac --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf118502.odt diff --git a/sw/qa/extras/odfexport/data/tdf118637.odt b/sw/qa/extras/odfexport/data/tdf118637.odt Binary files differnew file mode 100644 index 0000000000..c2a8b4f530 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf118637.odt diff --git a/sw/qa/extras/odfexport/data/tdf121658.odt b/sw/qa/extras/odfexport/data/tdf121658.odt Binary files differnew file mode 100644 index 0000000000..1ab6f75c8d --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf121658.odt diff --git a/sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt b/sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt Binary files differnew file mode 100644 index 0000000000..21969e9e54 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt diff --git a/sw/qa/extras/odfexport/data/tdf128504.docx b/sw/qa/extras/odfexport/data/tdf128504.docx Binary files differnew file mode 100644 index 0000000000..2e6e5225b8 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf128504.docx diff --git a/sw/qa/extras/odfexport/data/tdf129520.docx b/sw/qa/extras/odfexport/data/tdf129520.docx Binary files differnew file mode 100644 index 0000000000..4f74826ada --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf129520.docx 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 0000000000..8958bd6853 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf129568-ui.fodt @@ -0,0 +1,368 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ooo="http://openoffice.org/2004/office" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:creation-date>2020-02-03T11:01:15.202549120</meta:creation-date><dc:date>2020-02-03T11:02:08.562696933</dc:date><meta:editing-duration>PT55S</meta:editing-duration><meta:editing-cycles>2</meta:editing-cycles><meta:generator>LibreOffice/6.3.4.2.0$Linux_X86_64 LibreOffice_project/30$Build-2</meta:generator><meta:document-statistic meta:table-count="1" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/></office:meta> + <office:settings> + <config:config-item-set config:name="ooo:view-settings"> + <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item> + <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item> + <config:config-item config:name="ViewAreaWidth" config:type="long">25137</config:config-item> + <config:config-item config:name="ViewAreaHeight" config:type="long">13522</config:config-item> + <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item> + <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item> + <config:config-item-map-indexed config:name="Views"> + <config:config-item-map-entry> + <config:config-item config:name="ViewId" config:type="string">view2</config:config-item> + <config:config-item config:name="ViewLeft" config:type="long">4165</config:config-item> + <config:config-item config:name="ViewTop" config:type="long">2616</config:config-item> + <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item> + <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item> + <config:config-item config:name="VisibleRight" config:type="long">25135</config:config-item> + <config:config-item config:name="VisibleBottom" config:type="long">13520</config:config-item> + <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> + <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item> + <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item> + <config:config-item config:name="ZoomFactor" config:type="short">100</config:config-item> + <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item> + <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> + </config:config-item-map-entry> + </config:config-item-map-indexed> + </config:config-item-set> + <config:config-item-set config:name="ooo:configuration-settings"> + <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item> + <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintFaxName" config:type="string"/> + <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item> + <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item> + <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item> + <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item> + <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item> + <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item> + <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item> + <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item> + <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item> + <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item> + <config:config-item config:name="RsidRoot" config:type="int">1284982</config:config-item> + <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterName" config:type="string"/> + <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item> + <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item> + <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item> + <config:config-item config:name="Rsid" config:type="int">1284982</config:config-item> + <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/> + <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintEmptyPages" config:type="boolean">false</config:config-item> + <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item> + <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item> + <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item> + <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item> + <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item> + <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item> + <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item> + <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item> + <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item> + <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item> + <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item> + <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/> + <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item> + <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item> + <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item> + <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/> + <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item> + <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item> + <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item> + <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item> + <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item> + <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item> + <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item> + <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> + <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/> + <config:config-item config:name="PrinterSetup" config:type="base64Binary"/> + <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item> + </config:config-item-set> + </office:settings> + <office:scripts> + <office:script script:language="ooo:Basic"> + <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/> + </office:script> + </office:scripts> + <office:font-face-decls> + <style:font-face style:name="Lohit Devanagari1" svg:font-family="'Lohit Devanagari'"/> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Lohit Devanagari" svg:font-family="'Lohit Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans CJK SC" svg:font-family="'Noto Sans CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.1181in" draw:shadow-offset-y="0.1181in" draw:start-line-spacing-horizontal="0.1114in" draw:start-line-spacing-vertical="0.1114in" draw:end-line-spacing-horizontal="0.1114in" draw:end-line-spacing-vertical="0.1114in" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Tahoma" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="0.4925in" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Tahoma" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text"> + <style:paragraph-properties fo:margin-top="0.1665in" fo:margin-bottom="0.0835in" loext:contextual-spacing="false" fo:keep-with-next="always"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Noto Sans CJK SC" style:font-family-asian="'Noto Sans CJK SC'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/> + </style:style> + <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> + <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0972in" loext:contextual-spacing="false" fo:line-height="115%"/> + </style:style> + <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list"> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin-top="0.0835in" fo:margin-bottom="0.0835in" loext:contextual-spacing="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="'Lohit Devanagari'" style:font-size-complex="12pt" style:font-style-complex="italic"/> + </style:style> + <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"/> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"/> + </style:style> + <text:outline-style style:name="Outline"> + <text:outline-level-style text:level="1" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="2" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="3" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="4" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="5" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="6" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="7" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="8" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="9" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="10" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + </text:outline-style> + <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> + <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/> + <text:linenumbering-configuration text:number-lines="false" text:offset="0.1965in" style:num-format="1" text:number-position="left" text:increment="5"/> + <style:style style:name="Default_20_Table_20_Style.1" style:display-name="Default Table Style.1" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.2" style:display-name="Default Table Style.2" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.3" style:display-name="Default Table Style.3" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.4" style:display-name="Default Table Style.4" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.5" style:display-name="Default Table Style.5" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.6" style:display-name="Default Table Style.6" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.7" style:display-name="Default Table Style.7" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.8" style:display-name="Default Table Style.8" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.9" style:display-name="Default Table Style.9" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.10" style:display-name="Default Table Style.10" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.11" style:display-name="Default Table Style.11" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.12" style:display-name="Default Table Style.12" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.13" style:display-name="Default Table Style.13" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.14" style:display-name="Default Table Style.14" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.15" style:display-name="Default Table Style.15" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Table_20_Style.16" style:display-name="Default Table Style.16" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <table:table-template table:name="Default Style" table:first-row-end-column="row" table:first-row-start-column="row" table:last-row-end-column="row" table:last-row-start-column="row"> + <table:first-row table:style-name="Default_20_Table_20_Style.1"/> + <table:last-row table:style-name="Default_20_Table_20_Style.2"/> + <table:first-column table:style-name="Default_20_Table_20_Style.3"/> + <table:last-column table:style-name="Default_20_Table_20_Style.4"/> + <table:body table:style-name="Default_20_Table_20_Style.9"/> + <table:even-rows table:style-name="Default_20_Table_20_Style.5"/> + <table:odd-rows table:style-name="Default_20_Table_20_Style.6"/> + <table:even-columns table:style-name="Default_20_Table_20_Style.7"/> + <table:odd-columns table:style-name="Default_20_Table_20_Style.8"/> + <table:background table:style-name="Default_20_Table_20_Style.10"/> + <loext:first-row-even-column table:style-name="Default_20_Table_20_Style.15"/> + <loext:last-row-even-column table:style-name="Default_20_Table_20_Style.16"/> + <loext:first-row-end-column table:style-name="Default_20_Table_20_Style.12"/> + <loext:first-row-start-column table:style-name="Default_20_Table_20_Style.11"/> + <loext:last-row-end-column table:style-name="Default_20_Table_20_Style.14"/> + <loext:last-row-start-column table:style-name="Default_20_Table_20_Style.13"/> + </table:table-template> + </office:styles> + <office:automatic-styles> + <style:style style:name="Table1" style:family="table" style:master-page-name=""> + <style:table-properties style:width="6.6931in" style:page-number="auto" fo:break-before="auto" fo:break-after="auto" table:align="margins" style:shadow="none" fo:keep-with-next="auto" style:may-break-between-rows="true" table:border-model="collapsing"/> + </style:style> + <style:style style:name="Table1.A" style:family="table-column"> + <style:table-column-properties style:column-width="6.6931in" style:rel-column-width="65535*"/> + </style:style> + <style:style style:name="Table1.1" style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:style> + <style:style style:name="Table1.A1" style:family="table-cell"> + <style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="0.5pt solid #000000" style:writing-mode="page"> + <style:background-image/> + </style:table-cell-properties> + </style:style> + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Table_20_Contents"> + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/> + <style:text-properties fo:color="#000000" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Serif" fo:font-size="12pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:font-size-asian="12pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-size-complex="12pt" style:font-style-complex="normal" style:font-weight-complex="normal" style:text-overline-style="none" style:text-overline-color="font-color"/> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="8.2681in" fo:page-height="11.6929in" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.7874in" fo:margin-bottom="0.7874in" fo:margin-left="0.7874in" fo:margin-right="0.7874in" style:writing-mode="lr-tb" style:footnote-max-height="0in"> + <style:footnote-sep style:width="0.0071in" style:distance-before-sep="0.0398in" style:distance-after-sep="0.0398in" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + </office:master-styles> + <office:body> + <office:text> + <office:forms form:automatic-focus="false" form:apply-design-mode="false"/> + <text:sequence-decls> + <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> + <text:sequence-decl text:display-outline-level="0" text:name="Table"/> + <text:sequence-decl text:display-outline-level="0" text:name="Text"/> + <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> + <text:sequence-decl text:display-outline-level="0" text:name="Figure"/> + </text:sequence-decls> + <table:table table:name="Table1" table:style-name="Table1" table:template-name="Default Table Style"> + <table:table-column table:style-name="Table1.A"/> + <table:table-row table:style-name="Table1.1"> + <table:table-cell table:style-name="Table1.A1" office:value-type="string"> + <text:p text:style-name="P1"/> + </table:table-cell> + </table:table-row> + </table:table> + <text:p text:style-name="Standard"/> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/odfexport/data/tdf129568.fodt b/sw/qa/extras/odfexport/data/tdf129568.fodt new file mode 100644 index 0000000000..30256a6cd5 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf129568.fodt @@ -0,0 +1,368 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ooo="http://openoffice.org/2004/office" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:creation-date>2020-02-03T11:01:15.202549120</meta:creation-date><dc:date>2020-02-03T11:02:08.562696933</dc:date><meta:editing-duration>PT55S</meta:editing-duration><meta:editing-cycles>2</meta:editing-cycles><meta:generator>LibreOffice/6.3.4.2.0$Linux_X86_64 LibreOffice_project/30$Build-2</meta:generator><meta:document-statistic meta:table-count="1" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/></office:meta> + <office:settings> + <config:config-item-set config:name="ooo:view-settings"> + <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item> + <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item> + <config:config-item config:name="ViewAreaWidth" config:type="long">25137</config:config-item> + <config:config-item config:name="ViewAreaHeight" config:type="long">13522</config:config-item> + <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item> + <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item> + <config:config-item-map-indexed config:name="Views"> + <config:config-item-map-entry> + <config:config-item config:name="ViewId" config:type="string">view2</config:config-item> + <config:config-item config:name="ViewLeft" config:type="long">4165</config:config-item> + <config:config-item config:name="ViewTop" config:type="long">2616</config:config-item> + <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item> + <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item> + <config:config-item config:name="VisibleRight" config:type="long">25135</config:config-item> + <config:config-item config:name="VisibleBottom" config:type="long">13520</config:config-item> + <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> + <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item> + <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item> + <config:config-item config:name="ZoomFactor" config:type="short">100</config:config-item> + <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item> + <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> + </config:config-item-map-entry> + </config:config-item-map-indexed> + </config:config-item-set> + <config:config-item-set config:name="ooo:configuration-settings"> + <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item> + <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintFaxName" config:type="string"/> + <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item> + <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item> + <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item> + <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item> + <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item> + <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item> + <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item> + <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item> + <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item> + <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item> + <config:config-item config:name="RsidRoot" config:type="int">1284982</config:config-item> + <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterName" config:type="string"/> + <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item> + <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item> + <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item> + <config:config-item config:name="Rsid" config:type="int">1284982</config:config-item> + <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/> + <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintEmptyPages" config:type="boolean">false</config:config-item> + <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item> + <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item> + <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item> + <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item> + <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item> + <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item> + <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item> + <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item> + <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item> + <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item> + <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item> + <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/> + <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item> + <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item> + <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item> + <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/> + <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item> + <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item> + <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item> + <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item> + <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item> + <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item> + <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item> + <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> + <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/> + <config:config-item config:name="PrinterSetup" config:type="base64Binary"/> + <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item> + </config:config-item-set> + </office:settings> + <office:scripts> + <office:script script:language="ooo:Basic"> + <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/> + </office:script> + </office:scripts> + <office:font-face-decls> + <style:font-face style:name="Lohit Devanagari1" svg:font-family="'Lohit Devanagari'"/> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Lohit Devanagari" svg:font-family="'Lohit Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans CJK SC" svg:font-family="'Noto Sans CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.1181in" draw:shadow-offset-y="0.1181in" draw:start-line-spacing-horizontal="0.1114in" draw:start-line-spacing-vertical="0.1114in" draw:end-line-spacing-horizontal="0.1114in" draw:end-line-spacing-vertical="0.1114in" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Tahoma" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="0.4925in" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Tahoma" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text"> + <style:paragraph-properties fo:margin-top="0.1665in" fo:margin-bottom="0.0835in" loext:contextual-spacing="false" fo:keep-with-next="always"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Noto Sans CJK SC" style:font-family-asian="'Noto Sans CJK SC'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/> + </style:style> + <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> + <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0972in" loext:contextual-spacing="false" fo:line-height="115%"/> + </style:style> + <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list"> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin-top="0.0835in" fo:margin-bottom="0.0835in" loext:contextual-spacing="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="'Lohit Devanagari'" style:font-size-complex="12pt" style:font-style-complex="italic"/> + </style:style> + <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"/> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"/> + </style:style> + <text:outline-style style:name="Outline"> + <text:outline-level-style text:level="1" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="2" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="3" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="4" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="5" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="6" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="7" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="8" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="9" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="10" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + </text:outline-style> + <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> + <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/> + <text:linenumbering-configuration text:number-lines="false" text:offset="0.1965in" style:num-format="1" text:number-position="left" text:increment="5"/> + <style:style style:name="Default_20_Style.1" style:display-name="Default Style.1" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.2" style:display-name="Default Style.2" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.3" style:display-name="Default Style.3" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.4" style:display-name="Default Style.4" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.5" style:display-name="Default Style.5" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.6" style:display-name="Default Style.6" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.7" style:display-name="Default Style.7" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.8" style:display-name="Default Style.8" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.9" style:display-name="Default Style.9" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.10" style:display-name="Default Style.10" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.11" style:display-name="Default Style.11" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.12" style:display-name="Default Style.12" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.13" style:display-name="Default Style.13" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.14" style:display-name="Default Style.14" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.15" style:display-name="Default Style.15" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <style:style style:name="Default_20_Style.16" style:display-name="Default Style.16" style:family="table-cell"> + <style:table-cell-properties fo:background-color="#ffff00" fo:border-left="0.51pt solid #000000" fo:border-top="0.51pt solid #000000" fo:border-bottom="0.51pt solid #000000"/> + <style:text-properties style:font-name-complex="Lohit Devanagari" style:font-family-complex="'Lohit Devanagari'"/> + </style:style> + <table:table-template table:name="Default Style" table:first-row-end-column="row" table:first-row-start-column="row" table:last-row-end-column="row" table:last-row-start-column="row"> + <table:first-row table:style-name="Default_20_Style.1"/> + <table:last-row table:style-name="Default_20_Style.2"/> + <table:first-column table:style-name="Default_20_Style.3"/> + <table:last-column table:style-name="Default_20_Style.4"/> + <table:body table:style-name="Default_20_Style.9"/> + <table:even-rows table:style-name="Default_20_Style.5"/> + <table:odd-rows table:style-name="Default_20_Style.6"/> + <table:even-columns table:style-name="Default_20_Style.7"/> + <table:odd-columns table:style-name="Default_20_Style.8"/> + <table:background table:style-name="Default_20_Style.10"/> + <loext:first-row-even-column table:style-name="Default_20_Style.15"/> + <loext:last-row-even-column table:style-name="Default_20_Style.16"/> + <loext:first-row-end-column table:style-name="Default_20_Style.12"/> + <loext:first-row-start-column table:style-name="Default_20_Style.11"/> + <loext:last-row-end-column table:style-name="Default_20_Style.14"/> + <loext:last-row-start-column table:style-name="Default_20_Style.13"/> + </table:table-template> + </office:styles> + <office:automatic-styles> + <style:style style:name="Table1" style:family="table" style:master-page-name=""> + <style:table-properties style:width="6.6931in" style:page-number="auto" fo:break-before="auto" fo:break-after="auto" table:align="margins" style:shadow="none" fo:keep-with-next="auto" style:may-break-between-rows="true" table:border-model="collapsing"/> + </style:style> + <style:style style:name="Table1.A" style:family="table-column"> + <style:table-column-properties style:column-width="6.6931in" style:rel-column-width="65535*"/> + </style:style> + <style:style style:name="Table1.1" style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:style> + <style:style style:name="Table1.A1" style:family="table-cell"> + <style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="0.5pt solid #000000" style:writing-mode="page"> + <style:background-image/> + </style:table-cell-properties> + </style:style> + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Table_20_Contents"> + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/> + <style:text-properties fo:color="#000000" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Serif" fo:font-size="12pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:font-size-asian="12pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-size-complex="12pt" style:font-style-complex="normal" style:font-weight-complex="normal" style:text-overline-style="none" style:text-overline-color="font-color"/> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="8.2681in" fo:page-height="11.6929in" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.7874in" fo:margin-bottom="0.7874in" fo:margin-left="0.7874in" fo:margin-right="0.7874in" style:writing-mode="lr-tb" style:footnote-max-height="0in"> + <style:footnote-sep style:width="0.0071in" style:distance-before-sep="0.0398in" style:distance-after-sep="0.0398in" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + </office:master-styles> + <office:body> + <office:text> + <office:forms form:automatic-focus="false" form:apply-design-mode="false"/> + <text:sequence-decls> + <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> + <text:sequence-decl text:display-outline-level="0" text:name="Table"/> + <text:sequence-decl text:display-outline-level="0" text:name="Text"/> + <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> + <text:sequence-decl text:display-outline-level="0" text:name="Figure"/> + </text:sequence-decls> + <table:table table:name="Table1" table:style-name="Table1" table:template-name="Default Style"> + <table:table-column table:style-name="Table1.A"/> + <table:table-row table:style-name="Table1.1"> + <table:table-cell table:style-name="Table1.A1" office:value-type="string"> + <text:p text:style-name="P1"/> + </table:table-cell> + </table:table-row> + </table:table> + <text:p text:style-name="Standard"/> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/odfexport/data/tdf130314.docx b/sw/qa/extras/odfexport/data/tdf130314.docx Binary files differnew file mode 100644 index 0000000000..592ffbf5b3 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf130314.docx diff --git a/sw/qa/extras/odfexport/data/tdf130950.odt b/sw/qa/extras/odfexport/data/tdf130950.odt Binary files differnew file mode 100644 index 0000000000..a669cb87b5 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf130950.odt diff --git a/sw/qa/extras/odfexport/data/tdf131025_noZerosInTable.odt b/sw/qa/extras/odfexport/data/tdf131025_noZerosInTable.odt Binary files differnew file mode 100644 index 0000000000..f2bffb050a --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf131025_noZerosInTable.odt diff --git a/sw/qa/extras/odfexport/data/tdf131621.ott b/sw/qa/extras/odfexport/data/tdf131621.ott Binary files differnew file mode 100644 index 0000000000..8590c16ae1 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf131621.ott diff --git a/sw/qa/extras/odfexport/data/tdf131812.odt b/sw/qa/extras/odfexport/data/tdf131812.odt Binary files differnew file mode 100644 index 0000000000..c2833ff25d --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf131812.odt diff --git a/sw/qa/extras/odfexport/data/tdf132642_keepWithNextTable.odt b/sw/qa/extras/odfexport/data/tdf132642_keepWithNextTable.odt Binary files differnew file mode 100644 index 0000000000..739cd0078a --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf132642_keepWithNextTable.odt diff --git a/sw/qa/extras/odfexport/data/tdf133507_contextualSpacingSection.odt b/sw/qa/extras/odfexport/data/tdf133507_contextualSpacingSection.odt Binary files differnew file mode 100644 index 0000000000..efc1c3f592 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf133507_contextualSpacingSection.odt diff --git a/sw/qa/extras/odfexport/data/tdf134987.docx b/sw/qa/extras/odfexport/data/tdf134987.docx Binary files differnew file mode 100644 index 0000000000..c828bf442e --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf134987.docx diff --git a/sw/qa/extras/odfexport/data/tdf135144.docx b/sw/qa/extras/odfexport/data/tdf135144.docx Binary files differnew file mode 100644 index 0000000000..012c40432b --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf135144.docx diff --git a/sw/qa/extras/odfexport/data/tdf135338_firstLeftPageFooter.odt b/sw/qa/extras/odfexport/data/tdf135338_firstLeftPageFooter.odt Binary files differnew file mode 100644 index 0000000000..4f98088758 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf135338_firstLeftPageFooter.odt diff --git a/sw/qa/extras/odfexport/data/tdf136645.odt b/sw/qa/extras/odfexport/data/tdf136645.odt Binary files differnew file mode 100644 index 0000000000..a8487c3173 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf136645.odt diff --git a/sw/qa/extras/odfexport/data/tdf137199.docx b/sw/qa/extras/odfexport/data/tdf137199.docx Binary files differnew file mode 100644 index 0000000000..25b52977be --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf137199.docx diff --git a/sw/qa/extras/odfexport/data/tdf139126.odt b/sw/qa/extras/odfexport/data/tdf139126.odt Binary files differnew file mode 100644 index 0000000000..0648f0abed --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf139126.odt diff --git a/sw/qa/extras/odfexport/data/tdf140437.odt b/sw/qa/extras/odfexport/data/tdf140437.odt Binary files differnew file mode 100644 index 0000000000..8ed9ee77ce --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf140437.odt diff --git a/sw/qa/extras/odfexport/data/tdf142483.odt b/sw/qa/extras/odfexport/data/tdf142483.odt Binary files differnew file mode 100644 index 0000000000..d6aba2bbd9 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf142483.odt diff --git a/sw/qa/extras/odfexport/data/tdf143605.odt b/sw/qa/extras/odfexport/data/tdf143605.odt Binary files differnew file mode 100644 index 0000000000..7fb597e6d7 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf143605.odt diff --git a/sw/qa/extras/odfexport/data/tdf143793_noBodyWrapping.odt b/sw/qa/extras/odfexport/data/tdf143793_noBodyWrapping.odt Binary files differnew file mode 100644 index 0000000000..c2de181f11 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf143793_noBodyWrapping.odt diff --git a/sw/qa/extras/odfexport/data/tdf144319.odt b/sw/qa/extras/odfexport/data/tdf144319.odt Binary files differnew file mode 100644 index 0000000000..937482c34f --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf144319.odt diff --git a/sw/qa/extras/odfexport/data/tdf145226.fodt b/sw/qa/extras/odfexport/data/tdf145226.fodt new file mode 100644 index 0000000000..426f2621f1 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf145226.fodt @@ -0,0 +1,188 @@ +<?xml version='1.0' encoding='UTF-8'?> +<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:creation-date>2022-08-09T14:29:03.676750586</meta:creation-date><dc:date>2022-08-09T14:29:17.977094506</dc:date><meta:editing-duration>PT14S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="1" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/><meta:generator>LibreOfficeDev/7.5.0.0.alpha0$Linux_X86_64 LibreOffice_project/e77bfe281403e49c58730489e94b62032c296e75</meta:generator></office:meta> + <office:font-face-decls> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Lohit Devanagari1" svg:font-family="'Lohit Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Noto Serif CJK SC" svg:font-family="'Noto Serif CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" loext:opacity="0%" loext:color-lum-mod="100%" loext:color-lum-off="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="ZA" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="ZA" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:orphans="0" fo:widows="0" text:number-lines="false" text:line-number="0"/> + </style:style> + <text:outline-style style:name="Outline"> + <text:outline-level-style text:level="1" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="2" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="3" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="4" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="5" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="6" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="7" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="8" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="9" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + <text:outline-level-style text:level="10" style:num-format=""> + <style:list-level-properties text:list-level-position-and-space-mode="label-alignment"> + <style:list-level-label-alignment text:label-followed-by="listtab"/> + </style:list-level-properties> + </text:outline-level-style> + </text:outline-style> + <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> + <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/> + <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/> + </office:styles> + <office:automatic-styles> + <style:style style:name="Table1" style:family="table"> + <style:table-properties style:width="17cm" table:align="margins"/> + </style:style> + <style:style style:name="Table1.A" style:family="table-column"> + <style:table-column-properties style:column-width="4.251cm" style:rel-column-width="16383*"/> + </style:style> + <style:style style:name="Table1.A1" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="0.5pt solid #000000"/> + </style:style> + <style:style style:name="Table1.D1" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.097cm" fo:border="0.5pt solid #000000"/> + </style:style> + <style:style style:name="Table1.A2" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/> + </style:style> + <style:style style:name="Table1.D2" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="0.5pt solid #000000" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm" loext:margin-gutter="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + </office:master-styles> + <office:body> + <office:text> + <text:sequence-decls> + <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> + <text:sequence-decl text:display-outline-level="0" text:name="Table"/> + <text:sequence-decl text:display-outline-level="0" text:name="Text"/> + <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> + <text:sequence-decl text:display-outline-level="0" text:name="Figure"/> + </text:sequence-decls> + <table:table table:name="Table1" table:style-name="Table1"> + <table:table-column table:style-name="Table1.A" table:number-columns-repeated="4"/> + <table:table-row> + <table:table-cell table:style-name="Table1.A1" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.A1" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.A1" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.D1" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.D2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.D2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + <table:table-cell table:style-name="Table1.D2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"/> + </table:table-cell> + </table:table-row> + </table:table> + <text:p text:style-name="Standard"/> + </office:text> + </office:body> +</office:document>
\ No newline at end of file diff --git a/sw/qa/extras/odfexport/data/tdf145361.odt b/sw/qa/extras/odfexport/data/tdf145361.odt Binary files differnew file mode 100644 index 0000000000..e5a6a03c9c --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf145361.odt diff --git a/sw/qa/extras/odfexport/data/tdf145871.odt b/sw/qa/extras/odfexport/data/tdf145871.odt Binary files differnew file mode 100644 index 0000000000..78677452f5 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf145871.odt diff --git a/sw/qa/extras/odfexport/data/tdf146264.odt b/sw/qa/extras/odfexport/data/tdf146264.odt Binary files differnew file mode 100644 index 0000000000..941c7db74f --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf146264.odt diff --git a/sw/qa/extras/odfexport/data/tdf149248.odt b/sw/qa/extras/odfexport/data/tdf149248.odt Binary files differnew file mode 100644 index 0000000000..18685bd0a5 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf149248.odt diff --git a/sw/qa/extras/odfexport/data/tdf149324.odt b/sw/qa/extras/odfexport/data/tdf149324.odt Binary files differnew file mode 100644 index 0000000000..da4b87d89e --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf149324.odt diff --git a/sw/qa/extras/odfexport/data/tdf149420.odt b/sw/qa/extras/odfexport/data/tdf149420.odt Binary files differnew file mode 100644 index 0000000000..249d7267eb --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf149420.odt diff --git a/sw/qa/extras/odfexport/data/tdf150149.fodt b/sw/qa/extras/odfexport/data/tdf150149.fodt new file mode 100644 index 0000000000..51aea046a2 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf150149.fodt @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:automatic-styles> + <style:style style:name="Table1" style:family="table"> + <style:table-properties style:width="5cm" table:align="left"/> + </style:style> + <style:style style:name="Sect1" style:family="section"> + <style:section-properties text:dont-balance-text-columns="false" style:editable="false"> + <style:columns fo:column-count="3" fo:column-gap="0.5cm"> + </style:columns> + </style:section-properties> + </style:style> + </office:automatic-styles> + <office:body> + <office:text> + <text:section text:style-name="Sect1" text:name="Section1"> + <table:table table:name="Table1" table:style-name="Table1"> + <table:table-column table:number-columns-repeated="3"/> + <table:table-header-rows> + <table:table-row> + <table:table-cell> + <text:p>A</text:p> + </table:table-cell> + <table:table-cell> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell> + <text:p>C</text:p> + </table:table-cell> + </table:table-row> + </table:table-header-rows> + <table:table-row> + <table:table-cell/> + <table:table-cell/> + <table:table-cell/> + </table:table-row> + <table:table-row> + <table:table-cell/> + <table:table-cell/> + <table:table-cell/> + </table:table-row> + <table:table-row> + <table:table-cell/> + <table:table-cell/> + <table:table-cell/> + </table:table-row> + <table:table-row> + <table:table-cell/> + <table:table-cell/> + <table:table-cell/> + </table:table-row> + <table:table-row> + <table:table-cell/> + <table:table-cell/> + <table:table-cell/> + </table:table-row> + <table:table-row> + <table:table-cell/> + <table:table-cell/> + <table:table-cell/> + </table:table-row> + <table:table-row> + <table:table-cell/> + <table:table-cell/> + <table:table-cell/> + </table:table-row> + <table:table-row> + <table:table-cell/> + <table:table-cell/> + <table:table-cell/> + </table:table-row> + </table:table> + <text:p/> + </text:section> + </office:text> + </office:body> +</office:document> + diff --git a/sw/qa/extras/odfexport/data/tdf150394.odt b/sw/qa/extras/odfexport/data/tdf150394.odt Binary files differnew file mode 100644 index 0000000000..e514f405bc --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf150394.odt diff --git a/sw/qa/extras/odfexport/data/tdf151100.docx b/sw/qa/extras/odfexport/data/tdf151100.docx Binary files differnew file mode 100644 index 0000000000..e0341bdb9c --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf151100.docx diff --git a/sw/qa/extras/odfexport/data/tdf152710.odt b/sw/qa/extras/odfexport/data/tdf152710.odt Binary files differnew file mode 100644 index 0000000000..9fadf26458 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf152710.odt diff --git a/sw/qa/extras/odfexport/data/tdf156905.odt b/sw/qa/extras/odfexport/data/tdf156905.odt Binary files differnew file mode 100644 index 0000000000..41fe7a1d8c --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf156905.odt diff --git a/sw/qa/extras/odfexport/data/tdf43569_conditionalfield.doc b/sw/qa/extras/odfexport/data/tdf43569_conditionalfield.doc Binary files differnew file mode 100644 index 0000000000..456a6ed833 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf43569_conditionalfield.doc diff --git a/sw/qa/extras/odfexport/data/tdf57317_autoListName.odt b/sw/qa/extras/odfexport/data/tdf57317_autoListName.odt Binary files differnew file mode 100644 index 0000000000..3aafbc5193 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf57317_autoListName.odt diff --git a/sw/qa/extras/odfexport/data/tdf66305.odt b/sw/qa/extras/odfexport/data/tdf66305.odt Binary files differnew file mode 100644 index 0000000000..4a310a83d4 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf66305.odt diff --git a/sw/qa/extras/odfexport/data/tdf77961.odt b/sw/qa/extras/odfexport/data/tdf77961.odt Binary files differnew file mode 100644 index 0000000000..a6205e018d --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf77961.odt diff --git a/sw/qa/extras/odfexport/data/tdf92379.fodt b/sw/qa/extras/odfexport/data/tdf92379.fodt new file mode 100644 index 0000000000..762a04d577 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf92379.fodt @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta><meta:initial-creator>ms </meta:initial-creator><meta:creation-date>2015-08-24T21:49:45.305718699</meta:creation-date><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/><meta:generator>LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba</meta:generator></office:meta> + <office:font-face-decls> + <style:font-face style:name="Lohit Devanagari1" svg:font-family="'Lohit Devanagari'"/> + <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Lohit Devanagari" svg:font-family="'Lohit Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Source Han Sans CN Regular" svg:font-family="'Source Han Sans CN Regular'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Sans CN Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Sans CN Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + + <!-- "encarts" from bugdoc --> + <style:style style:name="encarts" style:family="graphic"> + <style:graphic-properties svg:width="3.9701in" svg:height="0.1402in" text:anchor-type="paragraph" fo:background-color="#ffcc99" style:background-transparency="0%" draw:fill="solid" fo:padding="0.0193in" fo:border="0.79pt solid #661900" style:shadow="none" draw:shadow-opacity="100%"> + <style:background-image/> + <style:columns fo:column-count="1" fo:column-gap="0in"/> + </style:graphic-properties> + </style:style> + <style:style style:name="Untitled1" style:family="graphic" style:parent-style-name="encarts"> + <style:graphic-properties fo:background-color="transparent" style:background-transparency="100%" draw:fill="solid"> + <style:background-image/> + </style:graphic-properties> + </style:style> + + <!-- "Titre Avis expert" and derived styles from bugdoc --> + <style:style style:name="Titre_20_Avis_20_expert" style:display-name="Titre Avis expert" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name=""> + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false" style:page-number="auto" fo:background-color="#661900"> + <style:background-image/> + </style:paragraph-properties> + <style:text-properties fo:color="#ffffff" /> + </style:style> + <style:style style:name="Avis_20_expert_20_questions" style:display-name="Avis expert questions" style:family="paragraph" style:parent-style-name="Titre_20_Avis_20_expert" style:master-page-name=""> + <style:paragraph-properties fo:line-height="100%" fo:text-align="start" style:justify-single-word="false" style:page-number="auto" fo:background-color="transparent"> + <style:background-image/> + </style:paragraph-properties> + <style:text-properties fo:color="#661900" /> + </style:style> + <style:style style:name="avis_20_expert_20_questions_20_non_20_cadres" style:display-name="avis expert questions non cadres" style:family="paragraph" style:parent-style-name="Avis_20_expert_20_questions" style:master-page-name=""> + <style:paragraph-properties style:page-number="auto" fo:background-color="#801900" style:shadow="none"> + <style:tab-stops/> + <style:background-image/> + </style:paragraph-properties> + </style:style> + <style:style style:name="Avis_20_expert_20_rXponses" style:display-name="Avis expert rXponses" style:family="paragraph" style:parent-style-name="Avis_20_expert_20_questions" style:master-page-name=""> + <style:paragraph-properties fo:line-height="100%" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:hyphenation-ladder-count="1" style:page-number="auto" fo:background-color="transparent"> + <style:background-image/> + </style:paragraph-properties> + <style:text-properties fo:color="#461900" fo:hyphenate="true" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:style> + + </office:styles> + <office:automatic-styles> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"/> + </office:master-styles> + <office:body> + <office:text> + <text:p text:style-name="Standard"/> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/odfexport/data/tdf95806.docx b/sw/qa/extras/odfexport/data/tdf95806.docx Binary files differnew file mode 100644 index 0000000000..65bfaae3e4 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf95806.docx diff --git a/sw/qa/extras/odfexport/data/tdf99631.docx b/sw/qa/extras/odfexport/data/tdf99631.docx Binary files differnew file mode 100644 index 0000000000..c72950b724 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf99631.docx diff --git a/sw/qa/extras/odfexport/data/testTdf52065_centerTabs.odt b/sw/qa/extras/odfexport/data/testTdf52065_centerTabs.odt Binary files differnew file mode 100644 index 0000000000..8cdaf3eb9f --- /dev/null +++ b/sw/qa/extras/odfexport/data/testTdf52065_centerTabs.odt diff --git a/sw/qa/extras/odfexport/data/textbox-rounded-corners.odt b/sw/qa/extras/odfexport/data/textbox-rounded-corners.odt Binary files differnew file mode 100644 index 0000000000..add7512c6c --- /dev/null +++ b/sw/qa/extras/odfexport/data/textbox-rounded-corners.odt diff --git a/sw/qa/extras/odfexport/data/textframe-gradient.odt b/sw/qa/extras/odfexport/data/textframe-gradient.odt Binary files differnew file mode 100644 index 0000000000..cdcae4fff6 --- /dev/null +++ b/sw/qa/extras/odfexport/data/textframe-gradient.odt diff --git a/sw/qa/extras/odfexport/data/textframe-transparent-shadow.odt b/sw/qa/extras/odfexport/data/textframe-transparent-shadow.odt Binary files differnew file mode 100644 index 0000000000..508e853c9d --- /dev/null +++ b/sw/qa/extras/odfexport/data/textframe-transparent-shadow.odt diff --git a/sw/qa/extras/odfexport/data/textframe-vertadjust.odt b/sw/qa/extras/odfexport/data/textframe-vertadjust.odt Binary files differnew file mode 100644 index 0000000000..bbf3416c09 --- /dev/null +++ b/sw/qa/extras/odfexport/data/textframe-vertadjust.odt diff --git a/sw/qa/extras/odfexport/data/user-field-decl-fly.odt b/sw/qa/extras/odfexport/data/user-field-decl-fly.odt Binary files differnew file mode 100644 index 0000000000..2ffe3ae555 --- /dev/null +++ b/sw/qa/extras/odfexport/data/user-field-decl-fly.odt diff --git a/sw/qa/extras/odfexport/data/user-field-decl.odt b/sw/qa/extras/odfexport/data/user-field-decl.odt Binary files differnew file mode 100644 index 0000000000..f037f403ec --- /dev/null +++ b/sw/qa/extras/odfexport/data/user-field-decl.odt diff --git a/sw/qa/extras/odfexport/data/userdefattr-tablecell.odt b/sw/qa/extras/odfexport/data/userdefattr-tablecell.odt Binary files differnew file mode 100644 index 0000000000..c8f6dcca5f --- /dev/null +++ b/sw/qa/extras/odfexport/data/userdefattr-tablecell.odt diff --git a/sw/qa/extras/odfexport/data/whitespace.odt b/sw/qa/extras/odfexport/data/whitespace.odt Binary files differnew file mode 100644 index 0000000000..fe2b3dd574 --- /dev/null +++ b/sw/qa/extras/odfexport/data/whitespace.odt diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx new file mode 100644 index 0000000000..51cfa15b7b --- /dev/null +++ b/sw/qa/extras/odfexport/odfexport.cxx @@ -0,0 +1,2708 @@ +/* -*- 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 <algorithm> +#include <memory> +#include <swmodeltestbase.hxx> + +#include <com/sun/star/awt/FontSlant.hpp> +#include <com/sun/star/awt/Gradient2.hpp> +#include <com/sun/star/container/XIndexReplace.hpp> +#include <com/sun/star/drawing/FillStyle.hpp> +#include <com/sun/star/drawing/PointSequenceSequence.hpp> +#include <com/sun/star/drawing/GraphicExportFilter.hpp> +#include <com/sun/star/drawing/XGraphicExportFilter.hpp> +#include <com/sun/star/drawing/BarCode.hpp> +#include <com/sun/star/drawing/BarCodeErrorCorrection.hpp> +#include <com/sun/star/table/ShadowFormat.hpp> +#include <com/sun/star/table/XCellRange.hpp> +#include <com/sun/star/text/RelOrientation.hpp> +#include <com/sun/star/text/XDocumentIndex.hpp> +#include <com/sun/star/drawing/TextVerticalAdjust.hpp> +#include <com/sun/star/graphic/XGraphic.hpp> +#include <officecfg/Office/Common.hxx> +#include <com/sun/star/document/XEmbeddedObjectSupplier.hpp> +#include <com/sun/star/text/XTextEmbeddedObjectsSupplier.hpp> +#include <com/sun/star/text/XTextField.hpp> +#include <com/sun/star/text/WritingMode2.hpp> +#include <com/sun/star/util/XModifiable.hpp> +#include <com/sun/star/text/XTextFieldsSupplier.hpp> +#include <com/sun/star/container/XIndexContainer.hpp> +#include <com/sun/star/document/XStorageBasedDocument.hpp> +#include <com/sun/star/text/XTextFramesSupplier.hpp> +#include <com/sun/star/text/XDocumentIndexesSupplier.hpp> +#include <com/sun/star/text/XTextDocument.hpp> +#include <com/sun/star/util/XRefreshable.hpp> +#include <com/sun/star/container/XContentEnumerationAccess.hpp> +#include <com/sun/star/text/XTextTable.hpp> + +#include <comphelper/storagehelper.hxx> +#include <comphelper/fileformat.h> +#include <comphelper/propertysequence.hxx> +#include <comphelper/documentconstants.hxx> +#include <unotools/streamwrap.hxx> +#include <svl/PasswordHelper.hxx> +#include <comphelper/sequenceashashmap.hxx> +#include <vcl/filter/PDFiumLibrary.hxx> +#include <comphelper/scopeguard.hxx> +#include <basegfx/utils/gradienttools.hxx> +#include <docmodel/uno/UnoGradientTools.hxx> + +#include <docufld.hxx> // for SwHiddenTextField::ParseIfFieldDefinition() method call +#include <unoprnms.hxx> +#include <sortedobjs.hxx> +#include <flyfrm.hxx> +#include <ftnidx.hxx> +#include <txtftn.hxx> +#include <unotxdoc.hxx> +#include <docsh.hxx> +#include <IDocumentLayoutAccess.hxx> +#include <rootfrm.hxx> +#include <o3tl/string_view.hxx> + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/odfexport/data/", "writer8") {} +}; + +CPPUNIT_TEST_FIXTURE(Test, testMathObjectFlatExport) +{ + comphelper::ScopeGuard g([this]() { + mpFilter = "writer8"; + std::shared_ptr<comphelper::ConfigurationChanges> 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<comphelper::ConfigurationChanges> pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Cache::Writer::OLE_Objects::set(1, pBatch); + pBatch->commit(); + loadAndReload("2_MathType3.docx"); + + uno::Reference<util::XModifiable> xModifiable(mxComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(!xModifiable->isModified()); + // see above, 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(u"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(u" 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(u" 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(u" 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(u"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(u"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: <field:fieldmark-start> + <field:fieldmark-end>. +CPPUNIT_TEST_FIXTURE(Test, testTdf43569) +{ + loadAndReload("tdf43569_conditionalfield.doc"); + // check if our parser is valid + testTdf43569_CheckIfFieldParse(); + + // now check field creation during import + uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); + + // at least one field should be detected + CPPUNIT_ASSERT(xFields->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf130314) +{ + loadAndReload("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"_ostr, "z-index"_ostr, "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"_ostr, "run-through"_ostr, "background"); + // shape in foreground, previously index 1 + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p[1]/draw:custom-shape"_ostr, "z-index"_ostr, "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"_ostr, "run-through"_ostr, "foreground"); + // shape in foreground, previously index 0 + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p[3]/draw:custom-shape"_ostr, "z-index"_ostr, "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"_ostr, "run-through"_ostr, "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"_ostr, "z-index"_ostr, "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"_ostr, "run-through"_ostr, "foreground"); + // form control, previously index 0 + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p[2]/draw:control"_ostr, "z-index"_ostr, "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"_ostr, 0); +} + +DECLARE_ODFEXPORT_TEST(testTdf139126, "tdf139126.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<text::XTextTablesSupplier> xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xTables = xSupplier->getTextTables(); + uno::Reference<text::XTextTable> xTable(xTables->getByName("Table1"), uno::UNO_QUERY); + + uno::Reference<text::XTextRange> 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<text::XTextRange> xE2(xTable->getCellByName("E2"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("** Expression is faulty **"), xE2->getString()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf125877) +{ + loadAndReload("tdf95806.docx"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<text::XTextTablesSupplier> xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xTables(xSupplier->getTextTables(), 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<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> 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"_ostr, 1); + assertXPath(pXmlDoc, "//table:table-header-rows/table:table-row/table:table-cell"_ostr, 3); +} + +DECLARE_ODFEXPORT_TEST(testTdf103567, "tdf103567.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<drawing::XShape> const xShape(getShape(1)); + + // contour wrap polygon + css::drawing::PointSequenceSequence const pointss( + getProperty<css::drawing::PointSequenceSequence>(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<container::XIndexContainer> const xImageMap( + getProperty<uno::Reference<container::XIndexContainer>>(xShape, "ImageMap")); + + uno::Reference<beans::XPropertySet> const xEntry(xImageMap->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/"), getProperty<OUString>(xEntry, "URL")); + awt::Rectangle const rect(getProperty<awt::Rectangle>(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"_ostr, 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"_ostr, 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<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), xIndexAccess->getCount()); + uno::Reference<drawing::XShape> xTextFrame; + awt::Gradient aGradientxTextFrame; + //Frame 1 + xTextFrame = getShape(1); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + //Frame 2 + xTextFrame = getShape(2); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x006600), getProperty<Color>(xTextFrame, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + //Frame 3 + xTextFrame = getShape(3); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x006600), getProperty<Color>(xTextFrame, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + //Frame 4 + xTextFrame = getShape(4); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x579D1C), getProperty<Color>(xTextFrame, "FillColor")); + aGradientxTextFrame = getProperty<awt::Gradient>(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + //Frame 5 + xTextFrame = getShape(5); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(OUString("Subtle Tango Green"), getProperty<OUString>(xTextFrame, "FillGradientName")); + //Frame 6 + xTextFrame = getShape(6); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Subtle Tango Green"), getProperty<OUString>(xTextFrame, "FillGradientName")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + //Frame 7 + xTextFrame = getShape(7); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Subtle Tango Green"), getProperty<OUString>(xTextFrame, "FillGradientName")); + aGradientxTextFrame = getProperty<awt::Gradient>(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + //Frame 8 + xTextFrame = getShape(8); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty<OUString>(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTextFrame, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + //Frame 9 + xTextFrame = getShape(9); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty<OUString>(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xTextFrame, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + //Frame 10 + xTextFrame = getShape(10); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty<OUString>(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTextFrame, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + //Frame 11 + xTextFrame = getShape(11); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty<OUString>(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xTextFrame, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + //Frame 12 + xTextFrame = getShape(12); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty<OUString>(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTextFrame, "FillBackground")); + aGradientxTextFrame = getProperty<awt::Gradient>(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + //Frame 13 + xTextFrame = getShape(13); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Black 0 Degrees"), getProperty<OUString>(xTextFrame, "FillHatchName")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xTextFrame, "FillBackground")); + aGradientxTextFrame = getProperty<awt::Gradient>(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + //Frame 14 + xTextFrame = getShape(14); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty<OUString>(xTextFrame, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapPositionOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapPositionOffsetY")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapOffsetY")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xTextFrame, "FillBitmapTile")); + //Frame 15 + xTextFrame = getShape(15); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty<OUString>(xTextFrame, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(45), getProperty<sal_Int32>(xTextFrame, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapPositionOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapPositionOffsetY")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapOffsetY")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xTextFrame, "FillBitmapTile")); + //Frame 16 + xTextFrame = getShape(16); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty<drawing::FillStyle>(xTextFrame, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty<OUString>(xTextFrame, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapPositionOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapPositionOffsetY")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapOffsetX")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTextFrame, "FillBitmapOffsetY")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xTextFrame, "FillBitmapTile")); + aGradientxTextFrame = getProperty<awt::Gradient>(xTextFrame, "FillTransparenceGradient"); + CPPUNIT_ASSERT_EQUAL(css::awt::GradientStyle_LINEAR, aGradientxTextFrame.Style); + + if (isExported()) + { + 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']"_ostr, 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%']"_ostr, 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%']"_ostr, 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"); +} + +CPPUNIT_TEST_FIXTURE(Test, testOOoxmlEmbedded) +{ + loadAndReload("oooxml_embedded.sxw"); + uno::Reference<text::XTextEmbeddedObjectsSupplier> xTEOSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xAccess(xTEOSupplier->getEmbeddedObjects()); + uno::Sequence<OUString> aSeq(xAccess->getElementNames()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), aSeq.getLength()); + uno::Reference<document::XEmbeddedObjectSupplier> xEOSupplier1(xAccess->getByName("Object1"), uno::UNO_QUERY); + uno::Reference<lang::XComponent> xObj1(xEOSupplier1->getEmbeddedObject()); + uno::Reference<document::XEmbeddedObjectSupplier> xEOSupplier2(xAccess->getByName("Object2"), uno::UNO_QUERY); + uno::Reference<lang::XComponent> xObj2(xEOSupplier2->getEmbeddedObject()); + uno::Reference<document::XEmbeddedObjectSupplier> xEOSupplier3(xAccess->getByName("Object3"), uno::UNO_QUERY); + uno::Reference<lang::XComponent> xObj3(xEOSupplier3->getEmbeddedObject()); + uno::Reference<document::XEmbeddedObjectSupplier> xEOSupplier4(xAccess->getByName("Object4"), uno::UNO_QUERY); + uno::Reference<lang::XComponent> xObj4(xEOSupplier4->getEmbeddedObject()); + //checking first object + uno::Reference<document::XStorageBasedDocument> xSBDoc1(xObj1, uno::UNO_QUERY); + uno::Reference<embed::XStorage> xStorage1(xSBDoc1->getDocumentStorage()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage1)); + //checking second object + uno::Reference<document::XStorageBasedDocument> xSBDoc2(xObj2, uno::UNO_QUERY); + uno::Reference<embed::XStorage> xStorage2(xSBDoc2->getDocumentStorage()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage2)); + //checking third object + uno::Reference<document::XStorageBasedDocument> xSBDoc3(xObj3, uno::UNO_QUERY); + uno::Reference<embed::XStorage> xStorage3(xSBDoc3->getDocumentStorage()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage3)); + //checking fourth object + uno::Reference<document::XStorageBasedDocument> xSBDoc4(xObj4, uno::UNO_QUERY); + uno::Reference<embed::XStorage> xStorage4(xSBDoc4->getDocumentStorage()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(SOFFICE_FILEFORMAT_8), comphelper::OStorageHelper::GetXStorageFormat(xStorage4)); +} + +DECLARE_ODFEXPORT_TEST(testTdf152710, "tdf152710.odt") +{ + // Without this fix in place, this test would have crash at import time + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +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<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> 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<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); + + // at least one field should be detected + CPPUNIT_ASSERT(xFields->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf131621) +{ + loadAndReload("tdf131621.ott"); + CPPUNIT_ASSERT_EQUAL(12, getShapes()); + //Crash test, Check number of pages + CPPUNIT_ASSERT_EQUAL( 1, getPages() ); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf135144) +{ + loadAndReload("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<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration(); + xRunEnum->nextElement(); + uno::Reference<beans::XPropertySet> xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), getProperty<OUString>(xPropertySet, "TextPortionType")); + xRunEnum->nextElement(); + xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), getProperty<OUString>(xPropertySet, "TextPortionType")); + + // Test properties + uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); + xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("__Fieldmark__4_1833023242"), getProperty<OUString>(xPropertySet, "Name")); + CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty<OUString>(xPropertySet, "Initials")); +} + +CPPUNIT_TEST_FIXTURE(Test, testSenderInitials) +{ + loadAndReload("sender-initials.fodt"); + // Test sender-initial properties (both annotation metadata and text field) + uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); + // first 3 are annotations, last 2 are text fields + for (unsigned i = 0; i < 3; ++i) + { + uno::Reference<beans::XPropertySet> xPropertySet(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("I"), getProperty<OUString>(xPropertySet, "Initials")); + } + for (unsigned i = 0; i < 2; ++i) + { + uno::Reference<beans::XPropertySet> xPropertySet(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xPropertySet, "IsFixed")); + CPPUNIT_ASSERT_EQUAL(OUString("I"), getProperty<OUString>(xPropertySet, "Content")); + } +} + +DECLARE_ODFEXPORT_TEST(testResolvedComment, "resolved-comment.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); + uno::Reference<beans::XPropertySet> xPropertySet(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xPropertySet, "Resolved")); + xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xPropertySet, "Resolved")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf92379) +{ + loadAndReload("tdf92379.fodt"); + // frame style fo:background-color was not imported + uno::Reference<container::XNameAccess> xStyles(getStyles("FrameStyles")); + uno::Reference<beans::XPropertySet> xStyle(xStyles->getByName("encarts"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0xffcc99), getProperty<Color>(xStyle, "BackColorRGB")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xStyle, "BackColorTransparency")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty<drawing::FillStyle>(xStyle, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0xffcc99), getProperty<Color>(xStyle, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty<sal_Int16>(xStyle, "FillTransparence")); + + uno::Reference<beans::XPropertySet> xFrameStyle2(xStyles->getByName("Untitled1"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, getProperty<Color>(xFrameStyle2, "BackColorRGB")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xFrameStyle2, "BackTransparent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(100), getProperty<sal_Int32>(xFrameStyle2, "BackColorTransparency")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty<drawing::FillStyle>(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<sal_Int32>(xFrameStyle2, "FillColor")); +// CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty<sal_Int16>(xFrameStyle2, "FillTransparence")); + + if (isExported()) + { + 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']"_ostr, 1); + assertXPath(pXmlDoc, "//style:style[@style:family='graphic' and @style:name='Untitled1']/style:graphic-properties[@fo:background-color='transparent']"_ostr, 1); + } + + // paragraph style fo:background-color was wrongly inherited despite being + // overridden in derived style + uno::Reference<container::XNameAccess> xParaStyles(getStyles("ParagraphStyles")); + uno::Reference<beans::XPropertySet> xStyle1(xParaStyles->getByName( + "Titre Avis expert"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x661900), getProperty<Color>(xStyle1, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xStyle1, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty<drawing::FillStyle>(xStyle1, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x661900), getProperty<Color>(xStyle1, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty<sal_Int16>(xStyle1, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, getProperty<Color>(xStyle1, "CharColor")); + + uno::Reference<beans::XPropertySet> xStyle2(xParaStyles->getByName( + "Avis expert questions"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, getProperty<Color>(xStyle2, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xStyle2, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty<drawing::FillStyle>(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<sal_Int32>(xStyle2, "FillColor")); +// CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty<sal_Int16>(xStyle2, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(Color(0x661900), getProperty<Color>(xStyle2, "CharColor")); + + uno::Reference<beans::XPropertySet> xStyle31(xParaStyles->getByName( + "avis expert questions non cadres"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(0x801900), getProperty<Color>(xStyle31, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xStyle31, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty<drawing::FillStyle>(xStyle31, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(Color(0x801900), getProperty<Color>(xStyle31, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty<sal_Int16>(xStyle31, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(Color(0x661900), getProperty<Color>(xStyle31, "CharColor")); + + uno::Reference<beans::XPropertySet> xStyle32(xParaStyles->getByName( + "Avis expert rXponses"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, getProperty<Color>(xStyle32, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xStyle32, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty<drawing::FillStyle>(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<sal_Int32>(xStyle32, "FillColor")); +// CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty<sal_Int16>(xStyle32, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(Color(0x461900), getProperty<Color>(xStyle32, "CharColor")); + + if (isExported()) + { + 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']"_ostr, 1); + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Avis expert questions']/style:paragraph-properties[@fo:background-color='transparent']"_ostr, 1); + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='avis expert questions non cadres']/style:paragraph-properties[@fo:background-color='#801900']"_ostr, 1); + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Avis expert rXponses']/style:paragraph-properties[@fo:background-color='transparent']"_ostr, 1); + } +} + +DECLARE_ODFEXPORT_TEST(testFdo79358, "fdo79358.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + // the boolean properties of the index were not exported properly + uno::Reference<text::XDocumentIndexesSupplier> xIndexSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xIndexes = xIndexSupplier->getDocumentIndexes(); + uno::Reference<text::XDocumentIndex> xTOCIndex(xIndexes->getByIndex(0), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xTOCProps(xTOCIndex, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTOCProps, "CreateFromOutline")); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTOCProps, "CreateFromMarks")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xTOCProps, "CreateFromLevelParagraphStyles")); + // check that the source styles are preserved too while at it + uno::Reference<container::XIndexReplace> xLevels( + getProperty< uno::Reference<container::XIndexReplace> >(xTOCProps, + "LevelParagraphStyles")); + uno::Sequence<OUString> seq { "Heading" }; + CPPUNIT_ASSERT_EQUAL(uno::Any(seq), xLevels->getByIndex(1)); + CPPUNIT_ASSERT_EQUAL(uno::Any(uno::Sequence<OUString>()), xLevels->getByIndex(2)); +} + +DECLARE_ODFEXPORT_TEST(testTextframeGradient, "textframe-gradient.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount()); + + uno::Reference<beans::XPropertySet> xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty<drawing::FillStyle>(xFrame, "FillStyle")); + awt::Gradient2 aGradient = getProperty<awt::Gradient2>(xFrame, "FillGradient"); + + // MCGR: Use the completely imported gradient to check for correctness + basegfx::BColorStops aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); + + CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0)); + CPPUNIT_ASSERT_EQUAL(Color(0xc0504d), Color(aColorStops[0].getStopColor())); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0xd99594), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); + + xFrame.set(xIndexAccess->getByIndex(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty<drawing::FillStyle>(xFrame, "FillStyle")); + aGradient = getProperty<awt::Gradient2>(xFrame, "FillGradient"); + + // MCGR: Use the completely imported gradient to check for correctness + aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); + + CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x000000), Color(aColorStops[0].getStopColor())); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x666666), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); +} + +CPPUNIT_TEST_FIXTURE(Test, testDuplicateCrossRefHeadingBookmark) +{ + loadAndReload("CrossRefHeadingBookmark.fodt"); + // the file contains invalid duplicate heading cross reference bookmarks + // but we have to round trip them, tdf#94804 + + uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xBookmarks = + xBookmarksSupplier->getBookmarks(); + uno::Reference<text::XTextContent> 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<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<util::XRefreshable>(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY_THROW)->refresh(); + + uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); + uno::Any aField1 = xFields->nextElement(); + uno::Reference<text::XTextField> xField1(aField1, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), xField1->getPresentation(false)); + uno::Any aField2 = xFields->nextElement(); + uno::Reference<text::XTextField> 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<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration(); + while (xRunEnum->hasMoreElements()) + { + uno::Reference<beans::XPropertySet> xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + OUString aType = getProperty<OUString>(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<beans::XPropertySet> xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + OUString aType = getProperty<OUString>(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<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration(); + bool bAnnotationStart = false; + bool bBeforeAnnotation = true; + OUString sTextBeforeAnnotation; + while (xRunEnum->hasMoreElements()) + { + uno::Reference<beans::XPropertySet> xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY); + OUString aType = getProperty<OUString>(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<text::XTextRange> 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<comphelper::ConfigurationChanges> pBatch( + comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Filter::Microsoft::Import::MathTypeToMath::set(true, pBatch); + pBatch->commit(); + }); + + std::shared_ptr<comphelper::ConfigurationChanges> 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. + */ + + save("writer8"); + + uno::Sequence<uno::Any> aArgs{ uno::Any(maTempFile.GetURL()) }; + uno::Reference<container::XNameAccess> xNameAccess(m_xSFactory->createInstanceWithArguments("com.sun.star.packages.zip.ZipFileAccess", aArgs), uno::UNO_QUERY); + const css::uno::Sequence<OUString> 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); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf134987) +{ + loadAndReload("tdf134987.docx"); + uno::Reference<text::XTextEmbeddedObjectsSupplier> xTEOSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xAccess(xTEOSupplier->getEmbeddedObjects()); + uno::Sequence<OUString> aSeq(xAccess->getElementNames()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), aSeq.getLength()); + + OUString aMediaType; + // checking first object (formula) + { + uno::Reference<document::XEmbeddedObjectSupplier> xEOSupplier(xAccess->getByName("Object1"), uno::UNO_QUERY); + uno::Reference<lang::XComponent> xObj(xEOSupplier->getEmbeddedObject()); + CPPUNIT_ASSERT(xObj.is()); + + uno::Reference<document::XStorageBasedDocument> xSBDoc(xObj, uno::UNO_QUERY); + uno::Reference<embed::XStorage> 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<document::XEmbeddedObjectSupplier> xEOSupplier(xAccess->getByName("Diagram 1"), uno::UNO_QUERY); + uno::Reference<lang::XComponent> xObj(xEOSupplier->getEmbeddedObject()); + CPPUNIT_ASSERT(xObj.is()); + + uno::Reference<document::XStorageBasedDocument> xSBDoc(xObj, uno::UNO_QUERY); + uno::Reference<embed::XStorage> 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<document::XEmbeddedObjectSupplier> xEOSupplier(xAccess->getByName("Diagram 2"), uno::UNO_QUERY); + uno::Reference<lang::XComponent> xObj(xEOSupplier->getEmbeddedObject()); + CPPUNIT_ASSERT(xObj.is()); + + uno::Reference<document::XStorageBasedDocument> xSBDoc(xObj, uno::UNO_QUERY); + uno::Reference<embed::XStorage> 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<text::XTextContent> xTable1(getParagraphOrTable(1)); +// actually no break attribute is written in this case +// CPPUNIT_ASSERT_EQUAL(style::BreakType_PAGE_BEFORE, getProperty<style::BreakType>(xTable1, "BreakType")); + CPPUNIT_ASSERT_EQUAL(OUString("Left Page"), getProperty<OUString>(xTable1, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty<sal_Int16>(xTable1, "PageNumberOffset")); + + uno::Reference<text::XTextContent> xPara1(getParagraphOrTable(2)); + CPPUNIT_ASSERT_EQUAL(OUString("Right Page"), getProperty<OUString>(xPara1, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty<sal_Int16>(xPara1, "PageNumberOffset")); + + // i#114163 tdf#77111: OOo < 3.3 bug, it wrote "auto" as "0" for tables + uno::Reference<beans::XPropertySet> xTable0(getParagraphOrTable(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Left Page"), getProperty<OUString>(xTable0, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(uno::Any(), xTable0->getPropertyValue("PageNumberOffset")); + + uno::Reference<beans::XPropertySet> xPara0(getParagraphOrTable(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Right Page"), getProperty<OUString>(xPara0, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(uno::Any(), xPara0->getPropertyValue("PageNumberOffset")); + + uno::Reference<container::XNameAccess> xParaStyles = getStyles("ParagraphStyles"); + uno::Reference<beans::XPropertySet> xStyle1(xParaStyles->getByName("stylewithbreak1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Right Page"), getProperty<OUString>(xStyle1, "PageDescName")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), getProperty<sal_Int16>(xStyle1, "PageNumberOffset")); + + uno::Reference<beans::XPropertySet> xStyle0(xParaStyles->getByName("stylewithbreak0"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("First Page"), getProperty<OUString>(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<beans::XPropertySet> xSet(getParagraph(1), uno::UNO_QUERY); + + // Top border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty<table::BorderLine2>(xSet,"TopBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty<sal_Int32>(xSet,"TopBorderDistance")); + + // Bottom border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty<table::BorderLine2>(xSet,"BottomBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty<sal_Int32>(xSet,"BottomBorderDistance")); + + // Left border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty<table::BorderLine2>(xSet,"LeftBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty<sal_Int32>(xSet,"LeftBorderDistance")); + + // Right border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParTopBorder, getProperty<table::BorderLine2>(xSet,"RightBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParTopPadding, getProperty<sal_Int32>(xSet,"RightBorderDistance")); + + // Shadow + const table::ShadowFormat aShadow = getProperty<table::ShadowFormat>(xSet,"ParaShadowFormat"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(false, static_cast<bool>(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<beans::XPropertySet> xSet(getParagraph(1), uno::UNO_QUERY); + + // Top border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty<table::BorderLine2>(xSet,"CharTopBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty<sal_Int32>(xSet,"CharTopBorderDistance")); + + // Bottom border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty<table::BorderLine2>(xSet,"CharBottomBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty<sal_Int32>(xSet,"CharBottomBorderDistance")); + + // Left border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty<table::BorderLine2>(xSet,"CharLeftBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty<sal_Int32>(xSet,"CharLeftBorderDistance")); + + // Right border (same as top border) + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty<table::BorderLine2>(xSet,"CharRightBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty<sal_Int32>(xSet,"CharRightBorderDistance")); + + // Shadow + const table::ShadowFormat aShadow = getProperty<table::ShadowFormat>(xSet,"CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(Color(0xFF3333), Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(false, static_cast<bool>(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<bool>(xAutoStylesEnum->hasMoreElements())); + + // Top border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty<table::BorderLine2>(xSet,"CharTopBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty<sal_Int32>(xSet,"CharTopBorderDistance")); + + // Bottom border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty<table::BorderLine2>(xSet,"CharBottomBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty<sal_Int32>(xSet,"CharBottomBorderDistance")); + + // Left border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty<table::BorderLine2>(xSet,"CharLeftBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty<sal_Int32>(xSet,"CharLeftBorderDistance")); + + // Right border + CPPUNIT_ASSERT_BORDER_EQUAL(aFirstParCharTopBorder, getProperty<table::BorderLine2>(xSet,"CharRightBorder")); + CPPUNIT_ASSERT_EQUAL(aFirstParCharTopPadding, getProperty<sal_Int32>(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<table::BorderLine2>(xSet,"CharTopBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[0], getProperty<sal_Int32>(xSet,"CharTopBorderDistance")); + + // Bottom border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[1], getProperty<table::BorderLine2>(xSet,"CharBottomBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[1], getProperty<sal_Int32>(xSet,"CharBottomBorderDistance")); + + // Left border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[2], getProperty<table::BorderLine2>(xSet,"CharLeftBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[2], getProperty<sal_Int32>(xSet,"CharLeftBorderDistance")); + + // Right border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[3], getProperty<table::BorderLine2>(xSet,"CharRightBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[3], getProperty<sal_Int32>(xSet,"CharRightBorderDistance")); + + // Shadow + const table::ShadowFormat aShadow = getProperty<table::ShadowFormat>(xSet,"CharShadowFormat"); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aShadow.Color)); + CPPUNIT_ASSERT_EQUAL(false, static_cast<bool>(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<table::BorderLine2>(xStyleSet,"CharTopBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[0], getProperty<sal_Int32>(xStyleSet,"CharTopBorderDistance")); + + // Bottom border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[1], getProperty<table::BorderLine2>(xStyleSet,"CharBottomBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[1], getProperty<sal_Int32>(xStyleSet,"CharBottomBorderDistance")); + + // Left border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[2], getProperty<table::BorderLine2>(xStyleSet,"CharLeftBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[2], getProperty<sal_Int32>(xStyleSet,"CharLeftBorderDistance")); + + // Right border + CPPUNIT_ASSERT_BORDER_EQUAL(aBorderArray[3], getProperty<table::BorderLine2>(xStyleSet,"CharRightBorder")); + CPPUNIT_ASSERT_EQUAL(aDistances[3], getProperty<sal_Int32>(xStyleSet,"CharRightBorderDistance")); + } + } +} + +CPPUNIT_TEST_FIXTURE(Test, testProtectionKey) +{ + loadAndReload("protection-key.fodt"); + OUString constexpr password(u"1012345678901234567890123456789012345678901234567890"_ustr); + + // check 1 invalid OOo legacy password and 3 valid ODF 1.2 passwords + uno::Reference<text::XTextSectionsSupplier> xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xSect0(xSections->getByIndex(0), uno::UNO_QUERY); + uno::Sequence<sal_Int8> const key0(getProperty<uno::Sequence<sal_Int8>>(xSect0, "ProtectionKey")); + CPPUNIT_ASSERT(SvPasswordHelper::CompareHashPassword(key0, password)); + uno::Reference<beans::XPropertySet> xSect1(xSections->getByIndex(1), uno::UNO_QUERY); + uno::Sequence<sal_Int8> const key1(getProperty<uno::Sequence<sal_Int8>>(xSect1, "ProtectionKey")); + CPPUNIT_ASSERT(SvPasswordHelper::CompareHashPassword(key1, password)); + uno::Reference<beans::XPropertySet> xSect2(xSections->getByIndex(2), uno::UNO_QUERY); + uno::Sequence<sal_Int8> const key2(getProperty<uno::Sequence<sal_Int8>>(xSect2, "ProtectionKey")); + CPPUNIT_ASSERT(SvPasswordHelper::CompareHashPassword(key2, password)); + uno::Reference<beans::XPropertySet> xSect3(xSections->getByIndex(3), uno::UNO_QUERY); + uno::Sequence<sal_Int8> const key3(getProperty<uno::Sequence<sal_Int8>>(xSect3, "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 (isExported()) + { + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + assertXPath(pXmlDoc, "//text:section[@text:name='Section0' and @text:protected='true' and @text:protection-key='vbnhxyBKtPHCA1wB21zG1Oha8ZA=']"_ostr); + assertXPath(pXmlDoc, "//text:section[@text:name='Section1' and @text:protected='true' and @text:protection-key='nLHas0RIwepGDaH4c2hpyIUvIS8=']"_ostr); + 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=']"_ostr); + 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=']"_ostr); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf128188) +{ + loadAndReload("footnote-collect-at-end-of-section.fodt"); + SwDoc *const pDoc = dynamic_cast<SwXTextDocument&>(*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<beans::XPropertySet> xSet(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Drop Caps"),getProperty<OUString>(xSet,"DropCapCharStyleName")); + + xSet.set(getParagraph(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("User Defined Drop Caps"),getProperty<OUString>(xSet,"DropCapCharStyleName")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf103091) +{ + loadAndReload("tdf103091.fodt"); + // check that all conditional paragraph style conditions are imported + uno::Reference<container::XNameAccess> xParaStyles(getStyles("ParagraphStyles")); + uno::Reference<beans::XPropertySet> xStyle1(xParaStyles->getByName( + "Text body"), uno::UNO_QUERY); + auto conditions(getProperty<uno::Sequence<beans::NamedValue>>(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<drawing::XShape> xPicture = getShape(1); + // ODF stores opacity of 75%, that means 25% transparency. + CPPUNIT_ASSERT_EQUAL(sal_Int32(25), getProperty<sal_Int32>(xPicture, "ShadowTransparence")); +} + +DECLARE_ODFEXPORT_TEST(testRelhPage, "relh-page.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<drawing::XShape> xTextFrame = getShape(1); + // This was text::RelOrientation::FRAME (the default), RelativeHeightRelation was not handled in xmloff. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty<sal_Int16>(xTextFrame, "RelativeHeightRelation")); + // Make sure rel-height-rel doesn't affect width. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty<sal_Int16>(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"_ostr, "height"_ostr).toInt32()); +} + +DECLARE_ODFEXPORT_TEST(testRelhPageTdf80282, "relh-page-tdf80282.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<drawing::XShape> xTextFrame = getShape(1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Height", sal_Int32(8391), parseDump("//anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Width", sal_Int32(5953), parseDump("//anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32()); +} + +DECLARE_ODFEXPORT_TEST(testRelwPage, "relw-page.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<drawing::XShape> xTextFrame = getShape(1); + // This was text::RelOrientation::FRAME (the default), RelativeWidthRelation was not handled in xmloff. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty<sal_Int16>(xTextFrame, "RelativeWidthRelation")); + // Make sure rel-width-rel doesn't affect height. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty<sal_Int16>(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"_ostr, "width"_ostr).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<beans::XPropertySet> xFrame(getTextFrameByName("Rectangle 1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_TOP, getProperty<drawing::TextVerticalAdjust>(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<drawing::TextVerticalAdjust>(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<drawing::TextVerticalAdjust>(xFrame, "TextVerticalAdjust")); +} + +DECLARE_ODFEXPORT_TEST(testTdf111891_frameVertStyle, "tdf111891_frameVertStyle.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<beans::XPropertySet> xFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_BOTTOM, getProperty<drawing::TextVerticalAdjust>(xFrame, "TextVerticalAdjust")); +} + +DECLARE_ODFEXPORT_TEST(testShapeRelsize, "shape-relsize.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<drawing::XShape> 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<sal_Int16>(xShape, "RelativeWidth")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(20), getProperty<sal_Int16>(xShape, "RelativeHeight")); + + // Relation was "page" for both width and height, should be "paragraph" for width. + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty<sal_Int16>(xShape, "RelativeWidthRelation")); + // And make sure that height stays "page". + CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty<sal_Int16>(xShape, "RelativeHeightRelation")); +} + +DECLARE_ODFEXPORT_TEST(testTextboxRoundedCorners, "textbox-rounded-corners.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<drawing::XShape> xShape = getShape(1); + comphelper::SequenceAsHashMap aCustomShapeGeometry(getProperty< uno::Sequence<beans::PropertyValue> >(xShape, "CustomShapeGeometry")); + + // Test that the shape is a rounded rectangle. + CPPUNIT_ASSERT_EQUAL(OUString("round-rectangle"), aCustomShapeGeometry["Type"].get<OUString>()); + + // The shape text should start with a table, with "a" in its A1 cell. + uno::Reference<text::XText> xText = uno::Reference<text::XTextRange>(xShape, uno::UNO_QUERY_THROW)->getText(); + uno::Reference<text::XTextTable> xTable(getParagraphOrTable(1, xText), uno::UNO_QUERY); + uno::Reference<text::XTextRange> 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 (isExported()) + { + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + // This failed, as draw:custom-shape had a table:table child. + assertXPath(pXmlDoc, "//draw:custom-shape/loext:table"_ostr, "name"_ostr, "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<container::XEnumerationAccess> xPara; + uno::Reference<container::XEnumeration> xPortions; + uno::Reference<text::XTextRange> 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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/"), getProperty<OUString>(xPortion, "HyperLinkURL")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Ruby"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(), xPortion->getString()); + CPPUNIT_ASSERT_EQUAL(OUString("foo"), getProperty<OUString>(xPortion, "RubyText")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Ruby"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("InContentMetadata"), getProperty<OUString>(xPortion, "TextPortionType")); + { + // what a stupid idea to require recursively enumerating this + uno::Reference<container::XEnumerationAccess> xMeta( + getProperty<uno::Reference<text::XTextContent>>(xPortion, "InContentMetadata"), uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xMetaPortions = + xMeta->createEnumeration(); + uno::Reference<text::XTextRange> xMP(xMetaPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("TextField"), getProperty<OUString>(xPortion, "TextPortionType")); + { + // what a stupid idea to require recursively enumerating this + uno::Reference<container::XEnumerationAccess> xMeta( + getProperty<uno::Reference<text::XTextContent>>(xPortion, "TextField"), uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xMetaPortions = + xMeta->createEnumeration(); + uno::Reference<text::XTextRange> xMP(xMetaPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty<OUString>(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty<OUString>(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty<OUString>(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" X"), xPortion->getString()); + CPPUNIT_ASSERT(!xPortions->hasMoreElements()); + + xPara.set(getParagraphOrTable(10), uno::UNO_QUERY); + uno::Reference<container::XContentEnumerationAccess> xCEA(xPara, uno::UNO_QUERY); + uno::Reference<container::XEnumeration> 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<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Footnote"), getProperty<OUString>(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("TextField"), getProperty<OUString>(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Annotation"), getProperty<OUString>(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("AnnotationEnd"), getProperty<OUString>(xPortion, "TextPortionType")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Bookmark"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Bookmark"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Bookmark"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Redline"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Redline"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Redline"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Redline"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("ReferenceMark"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("ReferenceMark"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("ReferenceMark"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("DocumentIndexMark"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString("X "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("DocumentIndexMark"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT_EQUAL(OUString(" "), xPortion->getString()); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("DocumentIndexMark"), getProperty<OUString>(xPortion, "TextPortionType")); + CPPUNIT_ASSERT(!getProperty<bool>(xPortion, "IsCollapsed")); + xPortion.set(xPortions->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(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"_ostr, "width"_ostr).toInt32()); + + //- Expected: 6000 + //- Actual : 6360 + CPPUNIT_ASSERT_EQUAL(sal_Int32(6000), parseDump("/root/page/body/section/column[2]/body/infos/bounds"_ostr, "width"_ostr).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<text::XTextTablesSupplier> xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xTables = xSupplier->getTextTables(); + uno::Reference<text::XTextTable> xTable(xTables->getByName("Table1"), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xA1(xTable->getCellByName("A1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::BT_LR, getProperty<sal_Int16>(xA1, "WritingMode")); + + uno::Reference<beans::XPropertySet> xB1(xTable->getCellByName("B1"), uno::UNO_QUERY); + auto nActual = getProperty<sal_Int16>(xB1, "WritingMode"); + CPPUNIT_ASSERT(nActual == text::WritingMode2::LR_TB || nActual == text::WritingMode2::CONTEXT); + + uno::Reference<beans::XPropertySet> xC1(xTable->getCellByName("C1"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::TB_RL, getProperty<sal_Int16>(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<beans::XPropertySet> xTextFrame(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xTextFrame.is()); + + auto nActual = getProperty<sal_Int16>(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<SwXTextDocument *>(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<size_t>(1), rAnchored.size()); + + auto* pFlyFrame = dynamic_cast<SwFlyFrame*>(rAnchored[0]); + CPPUNIT_ASSERT(pFlyFrame); + CPPUNIT_ASSERT(pFlyFrame->IsVertLRBT()); + + if (!isExported()) + // 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<SwFlyFrame*>(rAnchored[0]); + CPPUNIT_ASSERT(pFlyFrame); + CPPUNIT_ASSERT(!pFlyFrame->IsVertLRBT()); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf129520) +{ + loadAndReload("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()); +} + +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()"_ostr)); +} + +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<text::XTextDocument> textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xParaEnumAccess(textDocument->getText(), uno::UNO_QUERY); + // list of paragraphs + uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration(); + do + { + uno::Reference<lang::XServiceInfo> xServiceInfo; + if (xParaEnum->nextElement() >>= xServiceInfo) + { + if (xServiceInfo->supportsService("com.sun.star.text.TextTable")) + { + uno::Reference<table::XCellRange> const xCellRange(xServiceInfo, uno::UNO_QUERY_THROW); + + for (sal_Int32 row = 0; row < 15; row += 2) + { + uno::Reference<table::XCell> 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<container::XNameAccess> xStyles(getStyles("PageStyles")); + uno::Reference<beans::XPropertySet> xStyle(xStyles->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, getProperty<drawing::FillStyle>(xStyle, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Blue -45 Degrees"), getProperty<OUString>(xStyle, "FillHatchName")); + CPPUNIT_ASSERT(!getProperty<sal_Bool>(xStyle, "FillBackground")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty<sal_Int16>(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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "fill-color"_ostr, "#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"_ostr, "opacity"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "repeat"_ostr, "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"_ostr, "fill-image-ref-point"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "repeat"_ostr, "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"_ostr, "fill-image-ref-point"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "fill-color"_ostr, "#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"_ostr, "opacity"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "repeat"_ostr, "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"_ostr, "fill-image-ref-point"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "repeat"_ostr, "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"_ostr, "fill-image-ref-point"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "repeat"_ostr, "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"_ostr, "fill-image-ref-point"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "gradient-step-count"_ostr, "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"_ostr, "opacity"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "fill-hatch-solid"_ostr, "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"_ostr, "opacity"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "fill-color"_ostr, "#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"_ostr, "opacity"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "repeat"_ostr, "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"_ostr, "fill-image-ref-point"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "repeat"_ostr, "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"_ostr, "fill-image-ref-point"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "repeat"_ostr, "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"_ostr, "fill-image-ref-point"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "gradient-step-count"_ostr, "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"_ostr, "opacity"_ostr, "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"_ostr, "background-size"_ostr, "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"_ostr, "fill"_ostr, "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"_ostr, "fill-hatch-solid"_ostr, "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"_ostr, "opacity"_ostr, "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"_ostr, "fill"_ostr, "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:styles/style:style[@style:name='Text_20_body']/loext:graphic-properties"_ostr, "fill-color"_ostr, "#c0c0c0"); + assertXPath(pXmlDoc, + "/office:document-styles/office:styles/style:style[@style:name='Text_20_body']/loext:graphic-properties[@draw:fill-image-name]"_ostr, 0); + + // page style page-layout + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:page-layout-properties"_ostr, "fill"_ostr, "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:page-layout-properties"_ostr, "fill-image-name"_ostr, "nav_5f_up"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:header-style/style:header-footer-properties"_ostr, "fill"_ostr, "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:header-style/style:header-footer-properties"_ostr, "fill-image-name"_ostr, "nav_5f_up"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:footer-style/style:header-footer-properties"_ostr, "fill"_ostr, "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm1']/style:footer-style/style:header-footer-properties"_ostr, "fill-image-name"_ostr, "nav_5f_up"); + + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:page-layout-properties"_ostr, "fill"_ostr, "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:page-layout-properties[@draw:fill-image-name]"_ostr, 0); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:header-style/style:header-footer-properties"_ostr, "fill"_ostr, "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]"_ostr, 0); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:page-layout[@style:name='Mpm2']/style:footer-style/style:header-footer-properties"_ostr, "fill"_ostr, "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]"_ostr, 0); + + // page style drawing-page + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp1']/style:drawing-page-properties"_ostr, "fill"_ostr, "bitmap"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp1']/style:drawing-page-properties"_ostr, "fill-image-name"_ostr, "nav_5f_up"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp2']/style:drawing-page-properties"_ostr, "fill"_ostr, "solid"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp2']/style:drawing-page-properties"_ostr, "fill-color"_ostr, "#c0c0c0"); + assertXPath(pXmlDoc, + "/office:document-styles/office:automatic-styles/style:style[@style:name='Mdp2']/style:drawing-page-properties[@draw:fill-image-name]"_ostr, 0); + + // the named items + assertXPath(pXmlDoc, + "/office:document-styles/office:styles/draw:fill-image"_ostr, 1); + assertXPath(pXmlDoc, + "/office:document-styles/office:styles/draw:fill-image"_ostr, "name"_ostr, "nav_5f_up"); +} + +DECLARE_ODFEXPORT_TEST(testCellUserDefineAttr, "userdefattr-tablecell.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<text::XTextTable> xTable(getParagraphOrTable(1), uno::UNO_QUERY); + uno::Reference<table::XCell> const xCellA1(xTable->getCellByName("A1"), uno::UNO_SET_THROW); + uno::Reference<table::XCell> const xCellB1(xTable->getCellByName("B1"), uno::UNO_SET_THROW); + uno::Reference<table::XCell> 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<drawing::XShape> xShape = getShape(1); + // This failed, pdf+png replacement graphics pair didn't survive an ODT roundtrip. + auto xReplacementGraphic = getProperty<uno::Reference<graphic::XGraphic>>(xShape, "ReplacementGraphic"); + CPPUNIT_ASSERT(xReplacementGraphic.is()); + + auto xGraphic = getProperty<uno::Reference<graphic::XGraphic>>(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<OUString>(xGraphic, "MimeType")); + + if (isExported()) + { + uno::Sequence<uno::Any> aArgs{ uno::Any(maTempFile.GetURL()) }; + uno::Reference<container::XNameAccess> xNameAccess(m_xSFactory->createInstanceWithArguments("com.sun.star.packages.zip.ZipFileAccess", aArgs), uno::UNO_QUERY); + bool bHasBitmap = false; + const uno::Sequence<OUString> 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<style::XStyleFamiliesSupplier> XFamiliesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xFamilies(XFamiliesSupplier->getStyleFamilies()); + uno::Reference<container::XNameAccess> xCellFamily(xFamilies->getByName("CellStyles"), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xCell1Style; + xCellFamily->getByName("Test style.1") >>= xCell1Style; + + sal_Int32 nInt32 = 0xF0F0F0; + table::BorderLine2 oBorder; + + CPPUNIT_ASSERT_EQUAL(Color(0xCC0000), getProperty<Color>(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<style::XStyleFamiliesSupplier> XFamiliesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xFamilies(XFamiliesSupplier->getStyleFamilies()); + uno::Reference<container::XNameAccess> xTableFamily(xFamilies->getByName("TableStyles"), uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xTableStyle(xTableFamily->getByName("Test style2"), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> 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<Color>(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<Color>(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<Color>(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"); + + // <style:paragraph-properties> + // 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"_ostr, "background-color"_ostr); + // border-left place + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties"_ostr, "border-right"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties"_ostr, "border-top"_ostr); + // border-bottom place + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties"_ostr, "padding"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties"_ostr, "padding-left"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties"_ostr, "padding-right"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties"_ostr, "padding-top"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties"_ostr, "padding-bottom"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:table-cell-properties"_ostr, "writing-mode"_ostr); + + // <style:paragraph-properties> 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']"_ostr, 2); + + // <style:text-properties> + // 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"_ostr, "text-shadow"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "text-outline"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "text-line-through-style"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "text-line-through-type"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "text-underline-style"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "text-underline-color"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-size"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-weight"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-style"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-family"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-family-generic"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-pitch"_ostr); + // font-size-asian place + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-weight-asian"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-style-asian"_ostr); + // 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"_ostr, "font-style-name-asian"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-family-generic-asian"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-pitch-asian"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-size-complex"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-weight-complex"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-style-complex"_ostr); + // 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"_ostr, "font-style-name-complex"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-family-generic-complex"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style3.2']/style:text-properties"_ostr, "font-pitch-complex"_ostr); + +} + +CPPUNIT_TEST_FIXTURE(Test, testTableStyles4) +{ + createSwDoc("table_styles_4.odt"); + // Test if loaded styles overwrite existing styles + uno::Reference<style::XStyleFamiliesSupplier> XFamiliesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xFamilies(XFamiliesSupplier->getStyleFamilies()); + uno::Reference<container::XNameAccess> xTableFamily(xFamilies->getByName("TableStyles"), uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xTableStyle(xTableFamily->getByName("Green"), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xCell1Style; + + xTableStyle->getByName("first-row-start-column") >>= xCell1Style; + CPPUNIT_ASSERT_EQUAL(Color(0x00ff00), getProperty<Color>(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']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.2']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.3']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.4']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.5']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.6']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.7']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.8']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.9']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.10']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.11']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.12']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.13']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.14']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.15']"_ostr, "parent-style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-styles/office:styles/style:style[@style:display-name='Test style.16']"_ostr, "parent-style-name"_ostr); + +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf145226) +{ + loadAndReload("tdf145226.fodt"); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + + assertXPathNoAttribute(pXmlDoc, "/office:document-content/office:body/office:text/table:table/table:table-row[1]"_ostr, "style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-content/office:body/office:text/table:table/table:table-row[2]"_ostr, "style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-content/office:body/office:text/table:table/table:table-row[3]"_ostr, "style-name"_ostr); + assertXPathNoAttribute(pXmlDoc, "/office:document-content/office:body/office:text/table:table/table:table-row[4]"_ostr, "style-name"_ostr); +} + +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<beans::XPropertySet> xStyle(getStyles("CellStyles")->getByName("Test Style.11"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(10104), getProperty<sal_uInt32>(xStyle, "NumberFormat")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf129568) +{ + loadAndReload("tdf129568.fodt"); + // Test that export doesn't fail, and that style is imported and in use. + uno::Reference<style::XStyle> xStyle(getStyles("CellStyles")->getByName("Default Style.1"), uno::UNO_QUERY); + CPPUNIT_ASSERT(xStyle->isInUse()); + CPPUNIT_ASSERT_EQUAL(Color(0xffff00), getProperty<Color>(xStyle, "BackColor")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf129568ui) +{ + loadAndReload("tdf129568-ui.fodt"); + // Same as above, but styles referenced by UI name. + uno::Reference<style::XStyle> xStyle(getStyles("CellStyles")->getByName("Default Style.1"), uno::UNO_QUERY); + CPPUNIT_ASSERT(xStyle->isInUse()); + CPPUNIT_ASSERT_EQUAL(Color(0xffff00), getProperty<Color>(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']"_ostr); +} + + +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 0000000000..6db396c40d --- /dev/null +++ b/sw/qa/extras/odfexport/odfexport2.cxx @@ -0,0 +1,1133 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <swmodeltestbase.hxx> + +#include <com/sun/star/drawing/BarCode.hpp> +#include <com/sun/star/drawing/BarCodeErrorCorrection.hpp> +#include <com/sun/star/drawing/GraphicExportFilter.hpp> +#include <com/sun/star/drawing/XGraphicExportFilter.hpp> +#include <com/sun/star/io/XOutputStream.hpp> +#include <com/sun/star/style/VerticalAlignment.hpp> +#include <com/sun/star/text/ColumnSeparatorStyle.hpp> +#include <com/sun/star/text/XBookmarksSupplier.hpp> +#include <com/sun/star/text/XChapterNumberingSupplier.hpp> +#include <com/sun/star/text/XDocumentIndex.hpp> +#include <com/sun/star/text/XDocumentIndexesSupplier.hpp> +#include <com/sun/star/text/XTextColumns.hpp> +#include <com/sun/star/text/XTextFieldsSupplier.hpp> +#include <com/sun/star/text/XTextTable.hpp> +#include <com/sun/star/text/XTextTablesSupplier.hpp> +#include <com/sun/star/util/XRefreshable.hpp> +#include <unotools/localedatawrapper.hxx> +#include <unotools/streamwrap.hxx> +#include <comphelper/processfactory.hxx> +#include <comphelper/propertysequence.hxx> +#include <comphelper/sequenceashashmap.hxx> +#include <unoprnms.hxx> +#include <unotxdoc.hxx> +#include <docsh.hxx> + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/odfexport/data/", "writer8") {} +}; + +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]"_ostr, "font-style"_ostr, "normal"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[1]"_ostr, "font-weight"_ostr, "normal"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[2]"_ostr, "font-style"_ostr, "normal"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[2]"_ostr, "font-weight"_ostr, "bold"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[3]"_ostr, "font-style"_ostr, "italic"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[3]"_ostr, "font-weight"_ostr, "normal"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[4]"_ostr, "font-style"_ostr, "italic"); + assertXPath(pXmlDoc, "//style:font-face[@style:name='Liberation Serif']/svg:font-face-src/svg:font-face-uri[4]"_ostr, "font-weight"_ostr, "bold"); +#endif +} + +DECLARE_ODFEXPORT_TEST(testTdf100492, "tdf100492.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<drawing::XShape> xShape = getShape(1); + CPPUNIT_ASSERT(xShape.is()); + + // Save the first shape to a SVG + uno::Reference<drawing::XGraphicExportFilter> xGraphicExporter = drawing::GraphicExportFilter::create(comphelper::getProcessComponentContext()); + uno::Reference<lang::XComponent> xSourceDoc(xShape, uno::UNO_QUERY); + xGraphicExporter->setSourceDocument(xSourceDoc); + + SvMemoryStream aStream; + uno::Reference<io::XOutputStream> xOutputStream(new utl::OStreamWrapper(aStream)); + uno::Sequence<beans::PropertyValue> 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<container::XNameAccess> xStyles(getStyles("PageStyles")); + uno::Reference<beans::XPropertySet> xStyle(xStyles->getByName("Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( false , getProperty<bool>(xStyle, "GridDisplay")); + CPPUNIT_ASSERT_EQUAL( false , getProperty<bool>(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...”"_ustr, "a 2", + "Az v", "az 1", "Az e)", "az 1", + "Az (5)", "az 1", "A 2", "az 1" }; + uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + // update "A (4)" to "Az (5)" + uno::Reference<util::XRefreshable>(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY_THROW)->refresh(); + + uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); + + uno::Any aHu(OUString("Hu")); + uno::Any ahu(OUString("hu")); + for (auto const& sFieldText : aFieldTexts) + { + uno::Any aField = xFields->nextElement(); + uno::Reference<lang::XServiceInfo> xServiceInfo(aField, uno::UNO_QUERY); + if (xServiceInfo->supportsService("com.sun.star.text.textfield.GetReference")) + { + uno::Reference<beans::XPropertySet> xPropertySet(aField, uno::UNO_QUERY); + uno::Any aLang = xPropertySet->getPropertyValue("ReferenceFieldLanguage"); + CPPUNIT_ASSERT_EQUAL(true, aLang == aHu || aLang == ahu); + uno::Reference<text::XTextContent> xField(aField, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sFieldText, 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']"_ostr, 1); + assertXPath(pXmlDoc, "//style:style[@style:family='ruby']/style:ruby-properties[@style:ruby-position='below']"_ostr, 1); +} + +DECLARE_ODFEXPORT_TEST(testAllowOverlap, "allow-overlap.odt") +{ + CPPUNIT_ASSERT_EQUAL(2, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<drawing::XShape> xShape = getShape(1); + // Without the accompanying fix in place, this test would have failed with: + // - Expression: !getProperty<bool>(xShape, "AllowOverlap") + // i.e. the custom AllowOverlap=false shape property was lost on import/export. + CPPUNIT_ASSERT(!getProperty<bool>(xShape, "AllowOverlap")); + xShape = getShape(2); + CPPUNIT_ASSERT(!getProperty<bool>(xShape, "AllowOverlap")); +} + +CPPUNIT_TEST_FIXTURE(Test, testSignatureLineProperties) +{ + loadAndReload("signatureline-properties.fodt"); + uno::Reference<drawing::XShape> xShape = getShape(1); + CPPUNIT_ASSERT(xShape.is()); + + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xShape, "IsSignatureLine")); + CPPUNIT_ASSERT_EQUAL(OUString("{3C24159B-3B98-4F60-AB52-00E7721758E9}"), + getProperty<OUString>(xShape, "SignatureLineId")); + CPPUNIT_ASSERT_EQUAL(OUString("John Doe"), + getProperty<OUString>(xShape, "SignatureLineSuggestedSignerName")); + CPPUNIT_ASSERT_EQUAL(OUString("Farmer"), + getProperty<OUString>(xShape, "SignatureLineSuggestedSignerTitle")); + CPPUNIT_ASSERT_EQUAL(OUString("john@farmers.org"), + getProperty<OUString>(xShape, "SignatureLineSuggestedSignerEmail")); + CPPUNIT_ASSERT_EQUAL(OUString("Please farm here."), + getProperty<OUString>(xShape, "SignatureLineSigningInstructions")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xShape, "SignatureLineCanAddComment")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xShape, "SignatureLineShowSignDate")); + + // tdf#130917 This needs to be always set when importing a doc, ooxml export expects it. + uno::Reference<graphic::XGraphic> xUnsignedGraphic; + uno::Reference<beans::XPropertySet> 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<drawing::XShape> xShape = getShape(1); + CPPUNIT_ASSERT(xShape.is()); + + css::drawing::BarCode aBarCode = getProperty<css::drawing::BarCode>(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<text::XChapterNumberingSupplier> xNumberingSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> 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<sal_Int16>()); +} + +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ᵉʳ"_ustr, "First", "One" }; + // fallback for old platforms without std::codecvt and std::regex supports + OUString const aFieldTextFallbacks[] = { "Ordinal-number 1", "Ordinal 1", "1" }; + uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + // update text field content + uno::Reference<util::XRefreshable>(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY_THROW)->refresh(); + + uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); + + for (size_t i = 0; i < SAL_N_ELEMENTS(aFieldTexts); i++) + { + uno::Any aField = xFields->nextElement(); + uno::Reference<lang::XServiceInfo> xServiceInfo(aField, uno::UNO_QUERY); + if (xServiceInfo->supportsService("com.sun.star.text.textfield.PageNumber")) + { + uno::Reference<text::XTextContent> xField(aField, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, aFieldTexts[i].equals(xField->getAnchor()->getString()) || + aFieldTextFallbacks[i%3].equals(xField->getAnchor()->getString())); + } + } +} + +DECLARE_ODFEXPORT_TEST(tdf133507_contextualSpacingSection, "tdf133507_contextualSpacingSection.odt") +{ + // Previously this was one page (no UL spacing) or three pages (every para had spacing) + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + +// 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<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xBookmarksByName = xBookmarksSupplier->getBookmarks(); + + // check: we have 2 bookmarks + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xBookmarksByIdx->getCount()); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkNonHidden")); + CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkHidden")); + + // <text:bookmark-start text:name="BookmarkNonHidden"/> + uno::Reference<beans::XPropertySet> xBookmark1(xBookmarksByName->getByName("BookmarkNonHidden"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xBookmark1, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xBookmark1, UNO_NAME_BOOKMARK_HIDDEN)); + + // <text:bookmark-start text:name="BookmarkHidden"/> + uno::Reference<beans::XPropertySet> xBookmark2(xBookmarksByName->getByName("BookmarkHidden"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xBookmark2, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(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<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xBookmarksByName = xBookmarksSupplier->getBookmarks(); + + // check: we have 2 bookmarks + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(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")); + + // <text:bookmark-start text:name="BookmarkVisible"/> + uno::Reference<beans::XPropertySet> xBookmark1(xBookmarksByName->getByName("BookmarkVisible"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xBookmark1, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xBookmark1, UNO_NAME_BOOKMARK_HIDDEN)); + + // <text:bookmark-start text:name="BookmarkHidden" loext:condition="" loext:hidden="true"/> + uno::Reference<beans::XPropertySet> xBookmark2(xBookmarksByName->getByName("BookmarkHidden"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xBookmark2, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xBookmark2, UNO_NAME_BOOKMARK_HIDDEN)); + + // <text:bookmark-start text:name="BookmarkVisibleWithCondition" loext:condition="0==1" loext:hidden="true"/> + uno::Reference<beans::XPropertySet> xBookmark3(xBookmarksByName->getByName("BookmarkVisibleWithCondition"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("0==1"), getProperty<OUString>(xBookmark3, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xBookmark3, UNO_NAME_BOOKMARK_HIDDEN)); + + // <text:bookmark-start text:name="BookmarkNotHiddenWithCondition" loext:condition="1==1" loext:hidden="false"/> + // + // 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<beans::XPropertySet> xBookmark4(xBookmarksByName->getByName("BookmarkNotHiddenWithCondition"), uno::UNO_QUERY); +// CPPUNIT_ASSERT_EQUAL(OUString("1==1"), getProperty<OUString>(xBookmark4, UNO_NAME_BOOKMARK_CONDITION)); +// CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xBookmark4, UNO_NAME_BOOKMARK_HIDDEN)); + + // <text:bookmark-start text:name="BookmarkHiddenWithCondition" loext:condition="1==1" loext:hidden="true"/> + uno::Reference<beans::XPropertySet> xBookmark5(xBookmarksByName->getByName("BookmarkHiddenWithCondition"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1==1"), getProperty<OUString>(xBookmark5, UNO_NAME_BOOKMARK_CONDITION)); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xBookmark5, UNO_NAME_BOOKMARK_HIDDEN)); +} + +DECLARE_ODFEXPORT_TEST(tdf118502, "tdf118502.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<drawing::XShape> 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<uno::Reference<graphic::XGraphic>>(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']"_ostr, "4516"); + assertXPathContent(pXmlDoc, "//config:config-item[@config:name='VisibleAreaHeight']"_ostr, "903"); + + xmlDocUniquePtr pXmlDoc2 = parseExport("Object 2/settings.xml"); + assertXPathContent(pXmlDoc2, "//config:config-item[@config:name='VisibleAreaWidth']"_ostr, "4516"); + assertXPathContent(pXmlDoc2, "//config:config-item[@config:name='VisibleAreaHeight']"_ostr, "1355"); +} + +CPPUNIT_TEST_FIXTURE(Test, tdf145871) +{ + loadAndReload("tdf145871.odt"); + uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + uno::Reference<text::XTextTable> xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference<table::XTableRows> xTableRows = xTextTable->getRows(); + + // Without the fix in place, this test would have failed with + // - Expected: 3150 + // - Actual : 5851 + CPPUNIT_ASSERT_EQUAL(sal_Int64(3150) , getProperty<sal_Int64>(xTableRows->getByIndex(0), "Height")); +} + +CPPUNIT_TEST_FIXTURE(Test, tdf128504) +{ + loadAndReload("tdf128504.docx"); + uno::Reference<text::XTextRange> xPara = getParagraph(6); + uno::Reference<beans::XPropertySet> xRun(getRun(xPara,1), uno::UNO_QUERY); + OUString unVisitedStyleName = getProperty<OUString>(xRun, "UnvisitedCharStyleName"); + CPPUNIT_ASSERT(!unVisitedStyleName.equalsIgnoreAsciiCase("Internet Link")); + OUString visitedStyleName = getProperty<OUString>(xRun, "VisitedCharStyleName"); + CPPUNIT_ASSERT(!visitedStyleName.equalsIgnoreAsciiCase("Visited Internet Link")); +} + +DECLARE_ODFEXPORT_TEST(tdf121658, "tdf121658.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<container::XNameAccess> xParaStyles(getStyles("ParagraphStyles")); + uno::Reference<beans::XPropertySet> xStyle1(xParaStyles->getByName( + "Standard"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xStyle1, "ParaHyphenationNoCaps")); +} + +DECLARE_ODFEXPORT_TEST(tdf149248, "tdf149248.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(getParagraph(2), "ParaHyphenationNoLastWord")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(getParagraph(4), "ParaHyphenationNoLastWord")); +} + +DECLARE_ODFEXPORT_TEST(testThemeCrash, "tdf156905.odt") +{ + // first it started to crash at import time, later at export time + CPPUNIT_ASSERT_EQUAL(4, getPages()); +} + +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<sal_uInt16>(getParagraph(2), "ParaHyphenationMinWordLength")); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(7), getProperty<sal_uInt16>(getParagraph(4), "ParaHyphenationMinWordLength")); +} + +DECLARE_ODFEXPORT_TEST(tdf149420, "tdf149420.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), getProperty<sal_uInt16>(getParagraph(2), "ParaHyphenationZone")); + CPPUNIT_ASSERT_EQUAL(sal_uInt16(567), getProperty<sal_uInt16>(getParagraph(4), "ParaHyphenationZone")); +} + +DECLARE_ODFEXPORT_TEST(testArabicZeroNumbering, "arabic-zero-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty<uno::Reference<container::XIndexAccess>>(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<sal_uInt16>(style::NumberingType::ARABIC_ZERO), + aMap["NumberingType"].get<sal_uInt16>()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZero3Numbering, "arabic-zero3-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty<uno::Reference<container::XIndexAccess>>(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<sal_uInt16>(style::NumberingType::ARABIC_ZERO3), + aMap["NumberingType"].get<sal_uInt16>()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZero4Numbering, "arabic-zero4-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty<uno::Reference<container::XIndexAccess>>(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<sal_uInt16>(style::NumberingType::ARABIC_ZERO4), + aMap["NumberingType"].get<sal_uInt16>()); +} + +DECLARE_ODFEXPORT_TEST(testArabicZero5Numbering, "arabic-zero5-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty<uno::Reference<container::XIndexAccess>>(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<sal_uInt16>(style::NumberingType::ARABIC_ZERO5), + aMap["NumberingType"].get<sal_uInt16>()); +} + +DECLARE_ODFEXPORT_TEST(testRovasNumbering, "rovas-numbering.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + auto xNumberingRules + = getProperty<uno::Reference<container::XIndexAccess>>(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<sal_uInt16>(style::NumberingType::SZEKELY_ROVAS), + aMap["NumberingType"].get<sal_uInt16>()); +} + +DECLARE_ODFEXPORT_TEST(testPageContentTop, "page-content-top.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<beans::XPropertySet> xShape(getShape(1), uno::UNO_QUERY); + sal_Int16 nExpected = text::RelOrientation::PAGE_PRINT_AREA_TOP; + CPPUNIT_ASSERT_EQUAL(nExpected, getProperty<sal_Int16>(xShape, "VertOrientRelation")); +} + +DECLARE_ODFEXPORT_TEST(testPageContentBottom, "page-content-bottom.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<beans::XPropertySet> xShape(getShape(1), uno::UNO_QUERY); + sal_Int16 nExpected = text::RelOrientation::PAGE_PRINT_AREA_BOTTOM; + CPPUNIT_ASSERT_EQUAL(nExpected, getProperty<sal_Int16>(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: <font-face>" + + CPPUNIT_ASSERT_EQUAL(1, getPages()); + + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + + assertXPath(pXmlDoc, "/office:document-content/office:font-face-decls/style:style"_ostr, 0); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:family='table']"_ostr, 1); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:family='table-column']"_ostr, 2); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:family='paragraph']"_ostr, 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']"_ostr, 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']"_ostr, 2); +} + +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']"_ostr, 1); +} + +DECLARE_ODFEXPORT_TEST(testGutterLeft, "gutter-left.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + uno::Reference<beans::XPropertySet> 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<sal_Int32>(1270), nGutterMargin); +} + +DECLARE_ODFEXPORT_TEST(testTdf52065_centerTabs, "testTdf52065_centerTabs.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + sal_Int32 nTabStop = parseDump("//body/txt[4]/SwParaPortion/SwLineLayout/child::*[3]"_ostr, "width"_ostr).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(u"Pečiatka zamestnávateľa"_ustr, parseDump("//body/txt[4]/SwParaPortion/SwLineLayout/child::*[4]"_ostr, "portion"_ostr)); + + // tdf#149547: __XXX___invalid CharacterStyles should not be imported/exported + CPPUNIT_ASSERT(!getStyles("CharacterStyles")->hasByName("__XXX___invalid")); +} + +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"_ostr, "height"_ostr).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<text::XTextTablesSupplier> xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xTables = xSupplier->getTextTables(); + uno::Reference<text::XTextTable> xTable(xTables->getByName("Table1"), uno::UNO_QUERY); + + uno::Reference<text::XTextRange> xCell(xTable->getCellByName("C3"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("5 gp"), xCell->getString()); +} + +DECLARE_ODFEXPORT_TEST(testTdf153090, "Custom-Style-TOC.docx") +{ + uno::Reference<text::XDocumentIndexesSupplier> xIndexSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xIndexes(xIndexSupplier->getDocumentIndexes()); + uno::Reference<text::XDocumentIndex> xTOC(xIndexes->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("_CustomImageCaption"), getProperty<OUString>(xTOC, "CreateFromParagraphStyle")); + // tdf#153659 this was imported as "table of figures" instead of "Figure Index 1" + // thus custom settings were not retained after ToF update + CPPUNIT_ASSERT_EQUAL(OUString("Figure Index 1"), getProperty<OUString>(getParagraph(1), "ParaStyleName")); + + xTOC->update(); + OUString const tocContent(xTOC->getAnchor()->getString()); + CPPUNIT_ASSERT(tocContent.indexOf("1. Abb. Ein Haus") != -1); + CPPUNIT_ASSERT(tocContent.indexOf("2. Abb.Ein Schiff!") != -1); + CPPUNIT_ASSERT(tocContent.indexOf(u"1. ábra Small house with Hungarian description category") != -1); +} + +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"_ostr, "height"_ostr).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<OUString>(getParagraph(1), "ListLabelString")); + + CPPUNIT_ASSERT_EQUAL(OUString("1)"), getProperty<OUString>(getParagraph(2), "ListLabelString")); + + CPPUNIT_ASSERT_EQUAL(OUString("HELLO1WORLD!"), getProperty<OUString>(getParagraph(3), "ListLabelString")); + + CPPUNIT_ASSERT_EQUAL(OUString("HELLO2WORLD!"), getProperty<OUString>(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<OUString>(getParagraph(1), "ListLabelString")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf57317_autoListName) +{ + createSwDoc("tdf57317_autoListName.odt"); + // The list style (from styles.xml) overrides a duplicate named auto-style + //uno::Any aNumStyle = getStyles("NumberingStyles")->getByName("L1"); + //CPPUNIT_ASSERT(aNumStyle.hasValue()); + uno::Reference<beans::XPropertySet> xPara(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(">1<"), getProperty<OUString>(xPara, "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString("L1"), getProperty<OUString>(xPara, "NumberingStyleName")); + + dispatchCommand(mxComponent, ".uno:SelectAll", {}); + dispatchCommand(mxComponent, ".uno:DefaultBullet", {}); + + // This was failing with a duplicate auto numbering style name of L1 instead of a unique name, + // thus it was showing the same info as before the bullet modification. + saveAndReload("writer8"); + xPara.set(getParagraph(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xPara, "ListLabelString")); + + uno::Reference<container::XIndexAccess> xLevels(xPara->getPropertyValue("NumberingRules"), + uno::UNO_QUERY); + uno::Sequence<beans::PropertyValue> aProps; + xLevels->getByIndex(0) >>= aProps; + for (beans::PropertyValue const& rProp : std::as_const(aProps)) + { + if (rProp.Name == "BulletChar") + return; + } + CPPUNIT_FAIL("no BulletChar property"); +} + +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<OUString>(getParagraph(1), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1/1<<"), getProperty<OUString>(getParagraph(2), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1/1/1<<"), getProperty<OUString>(getParagraph(3), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1/1/2<<"), getProperty<OUString>(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']"_ostr, "num-list-format"_ostr, ">%1%<"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='2']"_ostr, "num-list-format"_ostr, ">>%1%/%2%<<"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='3']"_ostr, "num-list-format"_ostr, ">>%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']"_ostr, "num-prefix"_ostr, ">"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='1']"_ostr, "num-suffix"_ostr, "<"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='2']"_ostr, "num-prefix"_ostr, ">>"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='2']"_ostr, "num-suffix"_ostr, "<<"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='3']"_ostr, "num-prefix"_ostr, ">>"); + assertXPath(pXmlDoc, "/office:document-styles/office:styles/text:list-style[@style:name='WWNum1']/" + "text:list-level-style-number[@text:level='3']"_ostr, "num-suffix"_ostr, "<<"); +} + +DECLARE_ODFEXPORT_TEST(testShapeWithHyperlink, "shape-with-hyperlink.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + CPPUNIT_ASSERT_EQUAL(1, getPages()); + if (isExported()) + { + 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"_ostr, + "href"_ostr, "http://shape.com/"); + } +} + +DECLARE_ODFEXPORT_TEST(testShapesHyperlink, "shapes-hyperlink.odt") +{ + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(5, getShapes()); + uno::Reference<beans::XPropertySet> const xPropSet1(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice.org/"), getProperty<OUString>(xPropSet1, "Hyperlink")); + + uno::Reference<beans::XPropertySet> const xPropSet2(getShape(2), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice2.org/"), getProperty<OUString>(xPropSet2, "Hyperlink")); + + uno::Reference<beans::XPropertySet> const xPropSet3(getShape(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice3.org/"), getProperty<OUString>(xPropSet3, "Hyperlink")); + + uno::Reference<beans::XPropertySet> const xPropSet4(getShape(4), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice4.org/"), getProperty<OUString>(xPropSet4, "Hyperlink")); + + uno::Reference<beans::XPropertySet> const xPropSet5(getShape(5), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://libreoffice5.org/"), getProperty<OUString>(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<OUString>(getParagraph(1), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1.1<<"), getProperty<OUString>(getParagraph(2), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1.1.1<<"), getProperty<OUString>(getParagraph(3), "ListLabelString")); + CPPUNIT_ASSERT_EQUAL(OUString(">>1.1.2<<"), getProperty<OUString>(getParagraph(4), "ListLabelString")); + + if (isExported()) + { + 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']"_ostr, "num-list-format"_ostr, ">%1%<"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='2']"_ostr, "num-list-format"_ostr, ">>%1%.%2%<<"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='3']"_ostr, "num-list-format"_ostr, ">>%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']"_ostr, "num-prefix"_ostr, ">"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='1']"_ostr, "num-suffix"_ostr, "<"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='2']"_ostr, "num-prefix"_ostr, ">>"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='2']"_ostr, "num-suffix"_ostr, "<<"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='3']"_ostr, "num-prefix"_ostr, ">>"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/text:list-style[@style:name='L1']/" + "text:list-level-style-number[@text:level='3']"_ostr, "num-suffix"_ostr, "<<"); + } +} + +CPPUNIT_TEST_FIXTURE(Test, testStyleLink) +{ + // Given a document with a para and a char style that links each other, when loading that + // document: + createSwDoc("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<OUString>(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<OUString>(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"_ostr, + "char"_ostr, cDecimal); + assertXPath( + pXmlDoc, + "//style:style[@style:name='P2']/style:paragraph-properties/style:tab-stops/style:tab-stop"_ostr, + "char"_ostr, cDecimal); +} + +DECLARE_ODFEXPORT_TEST(testTdf114287, "tdf114287.odt") +{ + uno::Reference<container::XIndexAccess> const xLevels1( + getProperty<uno::Reference<container::XIndexAccess>>(getParagraph(2), "NumberingRules")); + uno::Reference<container::XNamed> const xNum1(xLevels1, uno::UNO_QUERY); + ::comphelper::SequenceAsHashMap props1(xLevels1->getByIndex(0)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-700), props1["FirstLineIndent"].get<sal_Int32>()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1330), props1["IndentAt"].get<sal_Int32>()); + + // 1: automatic style applies list-style-name and margin-left + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1000), getProperty<sal_Int32>(getParagraph(2), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5001), getProperty<sal_Int32>(getParagraph(2), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(2), "ParaRightMargin")); + + // list is continued + uno::Reference<container::XNamed> const xNum2( + getProperty<uno::Reference<container::XNamed>>(getParagraph(9), "NumberingRules")); + CPPUNIT_ASSERT_EQUAL(xNum1->getName(), xNum2->getName()); + + // 2: style applies list-style-name and margin-left, list applies list-style-name + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1000), getProperty<sal_Int32>(getParagraph(9), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5001), getProperty<sal_Int32>(getParagraph(9), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(9), "ParaRightMargin")); + + // list is continued + uno::Reference<container::XNamed> const xNum3( + getProperty<uno::Reference<container::XNamed>>(getParagraph(16), "NumberingRules")); + CPPUNIT_ASSERT_EQUAL(xNum1->getName(), xNum3->getName()); + + // 3: style applies margin-left, automatic style applies list-style-name + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1000), getProperty<sal_Int32>(getParagraph(16), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5001), getProperty<sal_Int32>(getParagraph(16), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(16), "ParaRightMargin")); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/infos/prtBounds"_ostr, "left"_ostr, "2268"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/infos/prtBounds"_ostr, "right"_ostr, "11339"); + // the problem was that the list style name of the list must override the + // paragraph style even though it's the same list style + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/infos/prtBounds"_ostr, "left"_ostr, "357"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/infos/prtBounds"_ostr, "right"_ostr, "11339"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[16]/infos/prtBounds"_ostr, "left"_ostr, "357"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[16]/infos/prtBounds"_ostr, "right"_ostr, "11339"); +} + +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<uno::Reference<uno::XInterface>>(getParagraph(1), "TextSection"); + auto xColumns = getProperty<uno::Reference<text::XTextColumns>>(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<sal_Int32>(50), + getProperty<sal_Int32>(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<sal_Int16>(xColumns, "SeparatorLineStyle")); + + // Check the rest of the properties, too + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xColumns, "IsAutomatic")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(600), getProperty<sal_Int32>(xColumns, "AutomaticDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(9), getProperty<sal_Int32>(xColumns, "SeparatorLineWidth")); + CPPUNIT_ASSERT_EQUAL(Color(0x99, 0xAA, 0xBB), + getProperty<Color>(xColumns, "SeparatorLineColor")); + CPPUNIT_ASSERT_EQUAL( + css::style::VerticalAlignment_BOTTOM, + getProperty<css::style::VerticalAlignment>(xColumns, "SeparatorLineVerticalAlignment")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xColumns, "SeparatorLineIsOn")); +} + +DECLARE_ODFEXPORT_TEST(testTdf78510, "WordTest_edit.odt") +{ + uno::Reference<container::XIndexAccess> const xLevels1( + getProperty<uno::Reference<container::XIndexAccess>>(getParagraph(1), "NumberingRules")); + ::comphelper::SequenceAsHashMap props1(xLevels1->getByIndex(0)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1000), props1["FirstLineIndent"].get<sal_Int32>()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2000), props1["IndentAt"].get<sal_Int32>()); + + // 1: inherited from paragraph style and overridden by list + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(1), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1270), getProperty<sal_Int32>(getParagraph(1), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(1), "ParaRightMargin")); + // 2: as 1 + paragraph sets firstline + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), getProperty<sal_Int32>(getParagraph(2), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1270), getProperty<sal_Int32>(getParagraph(2), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(2), "ParaRightMargin")); + // 3: as 1 + paragraph sets textleft + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(3), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3000), getProperty<sal_Int32>(getParagraph(3), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(3), "ParaRightMargin")); + // 4: as 1 + paragraph sets firstline, textleft + CPPUNIT_ASSERT_EQUAL(sal_Int32(-2000), getProperty<sal_Int32>(getParagraph(4), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3000), getProperty<sal_Int32>(getParagraph(4), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(4), "ParaRightMargin")); + // 5: as 1 + paragraph sets firstline + CPPUNIT_ASSERT_EQUAL(sal_Int32(-2000), getProperty<sal_Int32>(getParagraph(5), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1270), getProperty<sal_Int32>(getParagraph(5), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(5), "ParaRightMargin")); + // 6: as 1 + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(6), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1270), getProperty<sal_Int32>(getParagraph(6), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(6), "ParaRightMargin")); + + uno::Reference<container::XIndexAccess> const xLevels8( + getProperty<uno::Reference<container::XIndexAccess>>(getParagraph(8), "NumberingRules")); + ::comphelper::SequenceAsHashMap props8(xLevels8->getByIndex(0)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), props8["FirstLineIndent"].get<sal_Int32>()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), props8["IndentAt"].get<sal_Int32>()); + + // 8: inherited from paragraph style and overridden by list + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(8), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1270), getProperty<sal_Int32>(getParagraph(8), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(8), "ParaRightMargin")); + // 9: as 8 + paragraph sets firstline + CPPUNIT_ASSERT_EQUAL(sal_Int32(2000), getProperty<sal_Int32>(getParagraph(9), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1270), getProperty<sal_Int32>(getParagraph(9), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(9), "ParaRightMargin")); + // 10: as 8 + paragraph sets textleft + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(10), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3000), getProperty<sal_Int32>(getParagraph(10), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(10), "ParaRightMargin")); + // 11: as 8 + paragraph sets firstline, textleft + CPPUNIT_ASSERT_EQUAL(sal_Int32(-2000), getProperty<sal_Int32>(getParagraph(11), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3000), getProperty<sal_Int32>(getParagraph(11), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(11), "ParaRightMargin")); + // 12: as 8 + paragraph sets firstline + CPPUNIT_ASSERT_EQUAL(sal_Int32(-2000), getProperty<sal_Int32>(getParagraph(12), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1270), getProperty<sal_Int32>(getParagraph(12), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(12), "ParaRightMargin")); + // 13: as 8 + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(13), "ParaFirstLineIndent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1270), getProperty<sal_Int32>(getParagraph(13), "ParaLeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(13), "ParaRightMargin")); + + // unfortunately it appears that the portions don't have a position + // so it's not possible to check the first-line-offset that's applied + // (the first-line-indent is computed on the fly in SwTextMargin when + // painting) + { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/infos/prtBounds"_ostr, "left"_ostr, "567"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/infos/prtBounds"_ostr, "left"_ostr, "1134"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/infos/prtBounds"_ostr, "left"_ostr, "1134"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/infos/prtBounds"_ostr, "left"_ostr, "567"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[4]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/infos/prtBounds"_ostr, "left"_ostr, "0"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[5]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/infos/prtBounds"_ostr, "left"_ostr, "567"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[6]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/infos/prtBounds"_ostr, "left"_ostr, "567"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[8]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/infos/prtBounds"_ostr, "left"_ostr, "567"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[9]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/infos/prtBounds"_ostr, "left"_ostr, "1701"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[10]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/infos/prtBounds"_ostr, "left"_ostr, "567"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[11]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[12]/infos/prtBounds"_ostr, "left"_ostr, "-567"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[12]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[13]/infos/prtBounds"_ostr, "left"_ostr, "567"); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[13]/infos/prtBounds"_ostr, "right"_ostr, "9359"); + } + + // now check the positions where text is actually painted - + // wonder how fragile this is... + // FIXME some platform difference, 1st one is 2306 on Linux, 3087 on WNT ? + // some Mac has 3110 +#if !defined(_WIN32) && !defined(MACOSX) + { + SwDocShell *const pShell(dynamic_cast<SwXTextDocument&>(*mxComponent).GetDocShell()); + std::shared_ptr<GDIMetaFile> pMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump aDumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *pMetaFile); + + // 1: inherited from paragraph style and overridden by list + // bullet char is extra + + assertXPath(pXmlDoc, "//textarray[1]"_ostr, "x"_ostr, "2306"); + // text is after a tab from list - haven't checked if that is correct? + assertXPath(pXmlDoc, "//textarray[2]"_ostr, "x"_ostr, "2873"); + // second line + assertXPath(pXmlDoc, "//textarray[3]"_ostr, "x"_ostr, "2873"); + // 2: as 1 + paragraph sets firstline + assertXPath(pXmlDoc, "//textarray[4]"_ostr, "x"_ostr, "3440"); + assertXPath(pXmlDoc, "//textarray[5]"_ostr, "x"_ostr, "3593"); + assertXPath(pXmlDoc, "//textarray[6]"_ostr, "x"_ostr, "2873"); + // 3: as 1 + paragraph sets textleft + assertXPath(pXmlDoc, "//textarray[7]"_ostr, "x"_ostr, "2873"); + assertXPath(pXmlDoc, "//textarray[8]"_ostr, "x"_ostr, "3440"); + assertXPath(pXmlDoc, "//textarray[9]"_ostr, "x"_ostr, "3440"); + // 4: as 1 + paragraph sets firstline, textleft + assertXPath(pXmlDoc, "//textarray[10]"_ostr, "x"_ostr, "2306"); + assertXPath(pXmlDoc, "//textarray[11]"_ostr, "x"_ostr, "3440"); + assertXPath(pXmlDoc, "//textarray[12]"_ostr, "x"_ostr, "3440"); + // 5: as 1 + paragraph sets firstline + assertXPath(pXmlDoc, "//textarray[13]"_ostr, "x"_ostr, "1739"); + assertXPath(pXmlDoc, "//textarray[14]"_ostr, "x"_ostr, "2873"); + assertXPath(pXmlDoc, "//textarray[15]"_ostr, "x"_ostr, "2873"); + // 6: as 1 + assertXPath(pXmlDoc, "//textarray[16]"_ostr, "x"_ostr, "2306"); + assertXPath(pXmlDoc, "//textarray[17]"_ostr, "x"_ostr, "2873"); + + // 8: inherited from paragraph style and overridden by list + assertXPath(pXmlDoc, "//textarray[18]"_ostr, "x"_ostr, "2873"); + assertXPath(pXmlDoc, "//textarray[19]"_ostr, "x"_ostr, "3746"); + assertXPath(pXmlDoc, "//textarray[20]"_ostr, "x"_ostr, "2306"); + // 9: as 8 + paragraph sets firstline + assertXPath(pXmlDoc, "//textarray[21]"_ostr, "x"_ostr, "3440"); + assertXPath(pXmlDoc, "//textarray[22]"_ostr, "x"_ostr, "3746"); + assertXPath(pXmlDoc, "//textarray[23]"_ostr, "x"_ostr, "2306"); + // 10: as 8 + paragraph sets textleft + assertXPath(pXmlDoc, "//textarray[24]"_ostr, "x"_ostr, "4007"); + assertXPath(pXmlDoc, "//textarray[25]"_ostr, "x"_ostr, "4880"); + assertXPath(pXmlDoc, "//textarray[26]"_ostr, "x"_ostr, "3440"); + // 11: as 8 + paragraph sets firstline, textleft + assertXPath(pXmlDoc, "//textarray[27]"_ostr, "x"_ostr, "2306"); + assertXPath(pXmlDoc, "//textarray[28]"_ostr, "x"_ostr, "3440"); + assertXPath(pXmlDoc, "//textarray[29]"_ostr, "x"_ostr, "3440"); + // 12: as 8 + paragraph sets firstline + assertXPath(pXmlDoc, "//textarray[30]"_ostr, "x"_ostr, "1172"); + assertXPath(pXmlDoc, "//textarray[31]"_ostr, "x"_ostr, "1739"); + assertXPath(pXmlDoc, "//textarray[32]"_ostr, "x"_ostr, "2306"); + // 13: as 8 + assertXPath(pXmlDoc, "//textarray[33]"_ostr, "x"_ostr, "2873"); + assertXPath(pXmlDoc, "//textarray[34]"_ostr, "x"_ostr, "3746"); + } +#endif +} + +CPPUNIT_TEST_FIXTURE(Test, testParagraphMarkerMarkupRoundtrip) +{ + loadAndReload("ParagraphMarkerMarkup.fodt"); + // Test that the markup stays at save-and-reload + xmlDocUniquePtr pXmlDoc = parseExport("content.xml"); + assertXPath(pXmlDoc, "/office:document-content/office:body/office:text/text:p"_ostr, "marker-style-name"_ostr, "T2"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:name='T2']/style:text-properties"_ostr, "font-size"_ostr, "9pt"); + assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:name='T2']/style:text-properties"_ostr, "color"_ostr, "#ff0000"); +} + +CPPUNIT_TEST_FIXTURE(Test, testCommentStyles) +{ + createSwDoc(); + + auto xFactory(mxComponent.queryThrow<lang::XMultiServiceFactory>()); + auto xComment(xFactory->createInstance("com.sun.star.text.textfield.Annotation").queryThrow<text::XTextContent>()); + auto xCommentText(getProperty<uno::Reference<text::XTextRange>>(xComment, "TextRange")); + xCommentText->setString("Hello World"); + xCommentText.queryThrow<beans::XPropertySet>()->setPropertyValue("ParaStyleName", uno::Any(OUString("Heading"))); + + xComment->attach(getParagraph(1)->getEnd()); + + saveAndReload("writer8"); + + auto xFields(mxComponent.queryThrow<text::XTextFieldsSupplier>()->getTextFields()->createEnumeration()); + xComment.set(xFields->nextElement().queryThrow<text::XTextContent>()); + CPPUNIT_ASSERT(xComment.queryThrow<lang::XServiceInfo>()->supportsService("com.sun.star.text.textfield.Annotation")); + + xCommentText.set(getProperty<uno::Reference<text::XTextRange>>(xComment, "TextRange")); + CPPUNIT_ASSERT_EQUAL(OUString("Heading"), getProperty<OUString>(xCommentText, "ParaStyleName")); + + auto xStyleFamilies(mxComponent.queryThrow<style::XStyleFamiliesSupplier>()->getStyleFamilies()); + auto xParaStyles(xStyleFamilies->getByName("ParagraphStyles")); + auto xStyle(xParaStyles.queryThrow<container::XNameAccess>()->getByName("Heading")); + CPPUNIT_ASSERT_EQUAL(getProperty<float>(xStyle, "CharHeight"), getProperty<float>(xCommentText, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DEFAULT_VALUE, + xCommentText.queryThrow<beans::XPropertyState>()->getPropertyState("CharHeight")); +} + +CPPUNIT_TEST_FIXTURE(Test, testTdf150408_IsLegal) +{ + loadAndReload("IsLegal.fodt"); + + // Second level's numbering should use Arabic numbers for first level reference + auto xPara = getParagraph(1); + CPPUNIT_ASSERT_EQUAL(OUString("CH I"), getProperty<OUString>(xPara, "ListLabelString")); + xPara = getParagraph(2); + CPPUNIT_ASSERT_EQUAL(OUString("Sect 1.01"), getProperty<OUString>(xPara, "ListLabelString")); + xPara = getParagraph(3); + CPPUNIT_ASSERT_EQUAL(OUString("CH II"), getProperty<OUString>(xPara, "ListLabelString")); + xPara = getParagraph(4); + CPPUNIT_ASSERT_EQUAL(OUString("Sect 2.01"), getProperty<OUString>(xPara, "ListLabelString")); + + // Test that the markup stays at save-and-reload + xmlDocUniquePtr pXmlDoc = parseExport("styles.xml"); + assertXPath( + pXmlDoc, + "/office:document-styles/office:styles/text:outline-style/text:outline-level-style[2]"_ostr, + "is-legal"_ostr, "true"); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |