tdf#161327 Interpret angle units in dr3d:end-angle ..
.. and draw:rotation in <draw:hatch> element.
ODF 1.1 has not specified the syntax of datatype 'angle'. Since ODF 1.2
it is specified as double with unit "deg", "grad" or "rad", or without
unit. The unit-less value is specified to be in degrees. But OOo, AOO
and all LO versions had written the value unit-less in 1/10th of a
degree in some cases.
To fix it, LibreOffic will be enabled to read units. When then the
active versions are able to read units, starting with the then actual
version, LibreOffice will write angles with unit 'deg'.
This has already be done for gradients, see tdf#89475. This patch
starts the first step to make LibreOffice able to read units for
dr3d:end-angle (UNO D3DEndAngle) and for draw:rotation (UNO
FillHatch.Angle). I have not found further cases of writing 1/10deg.
The patch still writes unit-less 1/10th of a degree for export to
ODF 1.3 and earlier. When it is time to write unit degree or when
LibreOffice supports the next ODF versions, some places need to be
adapted. They are marked.
The converter convertAngle is renamed to convert10thDegAngle() to
indicate, that it is special. The parts, which were specific to
gradients are moved to the gradients, so that it is now usable for
dr3d:angle and draw:rotation too.
I intend to write next a patch that enables LibreOffice to read angle
units for cases where LibreOffice already writes unit-less values in
degree. That is not so urgent, but to bring LibreOffice nearer to ODF,
reading angle units should be implemented nevertheless.
The file xmlbahdl.hxx is moved from xmloff/source/style to xmloff/inc
to have access to it from xmloff/source/draw.
Change-Id: I8ffc2735f8bcfefb86efa80eb05f900c32403f31
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168336
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
diff --git a/include/sax/tools/converter.hxx b/include/sax/tools/converter.hxx
index d797eac..bb97acc 100644
--- a/include/sax/tools/converter.hxx
+++ b/include/sax/tools/converter.hxx
@@ -199,16 +199,16 @@ public:
static bool convertDouble(double& rValue, std::string_view rString);
/** convert number, 10th of degrees with range [0..3600] to SVG angle */
static void convertAngle(OUStringBuffer& rBuffer, sal_Int16 nAngle,
SvtSaveOptions::ODFSaneDefaultVersion nVersion);
static void convert10thDegAngle(OUStringBuffer& rBuffer, sal_Int16 nAngle,
const bool isWrongOOo10thDegAngle);
/** convert SVG angle to number, 10th of degrees with range [0..3600] */
static bool convertAngle(sal_Int16& rAngle, std::u16string_view rString,
bool isWrongOOo10thDegAngle);
/** convert SVG angle to number in 10th of degrees */
static bool convert10thDegAngle(sal_Int16& rAngle, std::u16string_view rString,
bool isWrongOOo10thDegAngle);
/** convert SVG angle to number, 10th of degrees with range [0..3600] */
static bool convertAngle(sal_Int16& rAngle, std::string_view rString,
bool isWrongOOo10thDegAngle);
/** convert SVG angle to number in 10th of degrees */
static bool convert10thDegAngle(sal_Int16& rAngle, std::string_view rString,
bool isWrongOOo10thDegAngle);
/** convert double to XMLSchema-2 "duration" string; negative durations allowed */
static void convertDuration(OUStringBuffer& rBuffer,
diff --git a/sax/source/tools/converter.cxx b/sax/source/tools/converter.cxx
index 09156a0a..bc2342d 100644
--- a/sax/source/tools/converter.cxx
+++ b/sax/source/tools/converter.cxx
@@ -725,25 +725,24 @@ bool Converter::convertDouble(double& rValue, std::string_view rString)
}
/** convert number, 10th of degrees with range [0..3600] to SVG angle */
void Converter::convertAngle(OUStringBuffer& rBuffer, sal_Int16 const nAngle,
SvtSaveOptions::ODFSaneDefaultVersion const nVersion)
void Converter::convert10thDegAngle(OUStringBuffer& rBuffer, sal_Int16 const nAngle,
const bool isWrongOOo10thDegAngle)
{
if (nVersion < SvtSaveOptions::ODFSVER_012 || nVersion == SvtSaveOptions::ODFSVER_012_EXT_COMPAT)
if (isWrongOOo10thDegAngle)
{
// wrong, but backward compatible with OOo/LO < 4.4
rBuffer.append(static_cast<sal_Int32>(nAngle));
}
else
{ // OFFICE-3774 tdf#89475 write valid ODF 1.2 angle; needs LO 4.4 to import
{
double fAngle(double(nAngle) / 10.0);
::sax::Converter::convertDouble(rBuffer, fAngle);
rBuffer.append("deg");
}
}
/** convert SVG angle to number, 10th of degrees with range [0..3600] */
bool Converter::convertAngle(sal_Int16& rAngle, std::u16string_view rString,
bool const isWrongOOo10thDegAngle)
/** convert SVG angle to number in 10th of degrees */
bool Converter::convert10thDegAngle(sal_Int16& rAngle, std::u16string_view rString,
bool const isWrongOOo10thDegAngle)
{
// ODF 1.1 leaves it undefined what the number means, but ODF 1.2 says it's
// degrees, while OOo has historically used 10th of degrees :(
@@ -751,49 +750,30 @@ bool Converter::convertAngle(sal_Int16& rAngle, std::u16string_view rString,
// degrees for now for the sake of existing OOo/LO documents, until the
// new versions that can read "deg" suffix are widely deployed and we can
// start to write the "deg" suffix.
sal_Int32 nValue(0);
double fValue(0.0);
bool bRet = ::sax::Converter::convertDouble(fValue, rString);
if (std::u16string_view::npos != rString.find(u"deg"))
{
nValue = fValue * 10.0;
}
else if (std::u16string_view::npos != rString.find(u"grad"))
{
nValue = (fValue * 9.0 / 10.0) * 10.0;
}
else if (std::u16string_view::npos != rString.find(u"rad"))
{
nValue = basegfx::rad2deg<10>(fValue);
}
else // no explicit unit
{
if (isWrongOOo10thDegAngle)
{
nValue = fValue; // wrong, but backward compatible with OOo/LO < 7.0
}
else
{
nValue = fValue * 10.0; // ODF 1.2
}
}
// limit to valid range [0..3600]
nValue = nValue % 3600;
if (nValue < 0)
{
nValue += 3600;
}
assert(0 <= nValue && nValue <= 3600);
double fAngle(0.0);
bool bRet = ::sax::Converter::convertDouble(fAngle, rString);
if (bRet)
{
rAngle = sal::static_int_cast<sal_Int16>(nValue);
if (std::u16string_view::npos != rString.find(u"deg"))
fAngle *= 10.0;
else if (std::u16string_view::npos != rString.find(u"grad"))
fAngle *= 9.0; // 360deg = 400grad
else if (std::u16string_view::npos != rString.find(u"rad"))
fAngle = basegfx::rad2deg<10>(fAngle);
else // no explicit unit
{ // isWrongOOo10thDegAngle = true: nothing to do here. Wrong, but backward compatible.
if (!isWrongOOo10thDegAngle)
fAngle *= 10.0; // conform to ODF 1.2 and newer
}
fAngle = std::clamp<double>(basegfx::fround(fAngle), SHRT_MIN, SHRT_MAX);
rAngle = static_cast<sal_Int16>(fAngle);
}
return bRet;
}
/** convert SVG angle to number, 10th of degrees with range [0..3600] */
bool Converter::convertAngle(sal_Int16& rAngle, std::string_view rString,
bool const isWrongOOo10thDegAngle)
bool Converter::convert10thDegAngle(sal_Int16& rAngle, std::string_view rString,
bool const isWrongOOo10thDegAngle)
{
// ODF 1.1 leaves it undefined what the number means, but ODF 1.2 says it's
// degrees, while OOo has historically used 10th of degrees :(
@@ -801,42 +781,23 @@ bool Converter::convertAngle(sal_Int16& rAngle, std::string_view rString,
// degrees for now for the sake of existing OOo/LO documents, until the
// new versions that can read "deg" suffix are widely deployed and we can
// start to write the "deg" suffix.
sal_Int32 nValue(0);
double fValue(0.0);
bool bRet = ::sax::Converter::convertDouble(fValue, rString);
if (std::string_view::npos != rString.find("deg"))
{
nValue = fValue * 10.0;
}
else if (std::string_view::npos != rString.find("grad"))
{
nValue = (fValue * 9.0 / 10.0) * 10.0;
}
else if (std::string_view::npos != rString.find("rad"))
{
nValue = basegfx::rad2deg<10>(fValue);
}
else // no explicit unit
{
if (isWrongOOo10thDegAngle)
{
nValue = fValue; // wrong, but backward compatible with OOo/LO < 7.0
}
else
{
nValue = fValue * 10.0; // ODF 1.2
}
}
// limit to valid range [0..3600]
nValue = nValue % 3600;
if (nValue < 0)
{
nValue += 3600;
}
assert(0 <= nValue && nValue <= 3600);
double fAngle(0.0);
bool bRet = ::sax::Converter::convertDouble(fAngle, rString);
if (bRet)
{
rAngle = sal::static_int_cast<sal_Int16>(nValue);
if (std::string_view::npos != rString.find("deg"))
fAngle *= 10.0;
else if (std::string_view::npos != rString.find("grad"))
fAngle *= 9.0; // 360deg = 400grad
else if (std::string_view::npos != rString.find("rad"))
fAngle = basegfx::rad2deg<10>(fAngle);
else // no explicit unit
{ // isWrongOOo10thDegAngle = true: nothing to do here. Wrong, but backward compatible.
if (!isWrongOOo10thDegAngle)
fAngle *= 10.0; // conform to ODF 1.2 and newer
}
fAngle = std::clamp<double>(basegfx::fround(fAngle), SHRT_MIN, SHRT_MAX);
rAngle = static_cast<sal_Int16>(fAngle);
}
return bRet;
}
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index d865b47..bbde4f8 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -1040,7 +1040,7 @@ CPPUNIT_TEST_FIXTURE(SdImportTest, testGradientAngle)
CPPUNIT_ASSERT_EQUAL(sal_Int16(270), gradient.Angle); // 27deg
CPPUNIT_ASSERT(xGradients->getByName(u"Gradient 11"_ustr) >>= gradient);
CPPUNIT_ASSERT_EQUAL(sal_Int16(1145), gradient.Angle); // 2rad
CPPUNIT_ASSERT_EQUAL(sal_Int16(1146), gradient.Angle); // 2rad = 114.591deg
CPPUNIT_ASSERT(xGradients->getByName(u"Gradient 12"_ustr) >>= gradient);
CPPUNIT_ASSERT_EQUAL(sal_Int16(900), gradient.Angle); // 100grad
@@ -1049,7 +1049,7 @@ CPPUNIT_TEST_FIXTURE(SdImportTest, testGradientAngle)
CPPUNIT_ASSERT_EQUAL(sal_Int16(3599), gradient.Angle); // -1
CPPUNIT_ASSERT(xGradients->getByName(u"Gradient 14"_ustr) >>= gradient);
CPPUNIT_ASSERT_EQUAL(sal_Int16(3028), gradient.Angle); // -1rad
CPPUNIT_ASSERT_EQUAL(sal_Int16(3027), gradient.Angle); // -1rad = -57.295deg -> 302.704deg
CPPUNIT_ASSERT(xGradients->getByName(u"Gradient 15"_ustr) >>= gradient);
CPPUNIT_ASSERT_EQUAL(sal_Int16(300), gradient.Angle); // 3900
@@ -1071,10 +1071,10 @@ CPPUNIT_TEST_FIXTURE(SdImportTest, testGradientAngle)
CPPUNIT_ASSERT_EQUAL(sal_Int16(900), gradient.Angle); // 90deg
CPPUNIT_ASSERT(xTranspGradients->getByName(u"Transparency 3"_ustr) >>= gradient);
CPPUNIT_ASSERT_EQUAL(sal_Int16(572), gradient.Angle); // 1.0rad
CPPUNIT_ASSERT_EQUAL(sal_Int16(573), gradient.Angle); // 1.0rad = 57.295deg
CPPUNIT_ASSERT(xTranspGradients->getByName(u"Transparency 4"_ustr) >>= gradient);
CPPUNIT_ASSERT_EQUAL(sal_Int16(1800), gradient.Angle); // 1000grad
CPPUNIT_ASSERT_EQUAL(sal_Int16(1800), gradient.Angle); // 1000grad = 900deg -> 180deg
}
CPPUNIT_TEST_FIXTURE(SdImportTest, testN778859)
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index 8a02d8b..05b7c93 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -15221,6 +15221,7 @@ xmloff/inc/txtfldi.hxx
xmloff/inc/txtlists.hxx
xmloff/inc/txtvfldi.hxx
xmloff/inc/xexptran.hxx
xmloff/inc/xmlbahdl.hxx
xmloff/inc/xmlmultiimagehelper.hxx
xmloff/inc/xmlsdtypes.hxx
xmloff/inc/xmltabe.hxx
@@ -15521,7 +15522,6 @@ xmloff/source/style/weighhdl.cxx
xmloff/source/style/weighhdl.hxx
xmloff/source/style/xmlaustp.cxx
xmloff/source/style/xmlbahdl.cxx
xmloff/source/style/xmlbahdl.hxx
xmloff/source/style/xmlexppr.cxx
xmloff/source/style/xmlimppr.cxx
xmloff/source/style/xmlnume.cxx
diff --git a/xmloff/source/style/xmlbahdl.hxx b/xmloff/inc/xmlbahdl.hxx
similarity index 100%
rename from xmloff/source/style/xmlbahdl.hxx
rename to xmloff/inc/xmlbahdl.hxx
diff --git a/xmloff/inc/xmlsdtypes.hxx b/xmloff/inc/xmlsdtypes.hxx
index c6e0ad3..42bf8b8 100644
--- a/xmloff/inc/xmlsdtypes.hxx
+++ b/xmloff/inc/xmlsdtypes.hxx
@@ -119,6 +119,7 @@
#define XML_SD_TYPE_CELL_ROTATION_ANGLE (XML_SD_TYPES_START + 79 )
#define XML_SD_TYPE_WRITINGMODE2 (XML_SD_TYPES_START + 80 )
#define XML_SD_TYPE_LATHE_ENDANGLE (XML_SD_TYPES_START + 81 )
#define CTF_NUMBERINGRULES 1000
#define CTF_CONTROLWRITINGMODE 1001
diff --git a/xmloff/qa/unit/data/tdf161327_HatchAngle.fodg b/xmloff/qa/unit/data/tdf161327_HatchAngle.fodg
new file mode 100644
index 0000000..a304237
--- /dev/null
+++ b/xmloff/qa/unit/data/tdf161327_HatchAngle.fodg
@@ -0,0 +1,404 @@
<?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:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:smil="urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xmlns:officeooo="http://openoffice.org/2009/office" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.graphics">
<office:meta><meta:creation-date>2024-06-08T22:15:21.577000000</meta:creation-date><dc:title>24cm x 16cm</dc:title><meta:editing-duration>PT24M13S</meta:editing-duration><meta:editing-cycles>2</meta:editing-cycles><meta:generator>LODev_daily_installed/24.8.0.0.alpha1$Windows_X86_64 LibreOffice_project/fbe57382eef1138999f63e01b6152d4d05749807</meta:generator><meta:initial-creator>Regina Henschel</meta:initial-creator><dc:date>2024-06-08T22:50:25.268000000</dc:date><dc:creator>Regina Henschel</dc:creator><meta:document-statistic meta:object-count="4"/><meta:template xlink:type="simple" xlink:actuate="onRequest" xlink:title="24cm x 16cm" xlink:href="../../../../../AppsUser/LODev_en_user/user/template/24cm%20x%2016cm.otg" meta:date="2024-06-08T22:15:21.421000000"/></office:meta>
<office:settings>
<config:config-item-set config:name="ooo:view-settings">
<config:config-item config:name="VisibleAreaTop" config:type="int">-2233</config:config-item>
<config:config-item config:name="VisibleAreaLeft" config:type="int">-250</config:config-item>
<config:config-item config:name="VisibleAreaWidth" config:type="int">21500</config:config-item>
<config:config-item config:name="VisibleAreaHeight" config:type="int">3967</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">view1</config:config-item>
<config:config-item config:name="GridIsVisible" config:type="boolean">true</config:config-item>
<config:config-item config:name="GridIsFront" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsSnapToGrid" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsSnapToPageMargins" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsSnapToSnapLines" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsSnapToObjectFrame" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsSnapToObjectPoints" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPlusHandlesAlwaysVisible" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsFrameDragSingles" config:type="boolean">true</config:config-item>
<config:config-item config:name="EliminatePolyPointLimitAngle" config:type="int">1500</config:config-item>
<config:config-item config:name="IsEliminatePolyPoints" config:type="boolean">false</config:config-item>
<config:config-item config:name="VisibleLayers" config:type="base64Binary">Hw==</config:config-item>
<config:config-item config:name="PrintableLayers" config:type="base64Binary">Hw==</config:config-item>
<config:config-item config:name="LockedLayers" config:type="base64Binary"/>
<config:config-item config:name="NoAttribs" config:type="boolean">false</config:config-item>
<config:config-item config:name="NoColors" config:type="boolean">true</config:config-item>
<config:config-item config:name="RulerIsVisible" config:type="boolean">true</config:config-item>
<config:config-item config:name="PageKind" config:type="short">0</config:config-item>
<config:config-item config:name="SelectedPage" config:type="short">0</config:config-item>
<config:config-item config:name="IsLayerMode" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsDoubleClickTextEdit" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsClickChangeRotation" config:type="boolean">false</config:config-item>
<config:config-item config:name="SlidesPerRow" config:type="short">4</config:config-item>
<config:config-item config:name="EditMode" config:type="int">0</config:config-item>
<config:config-item config:name="VisibleAreaTop" config:type="int">-2233</config:config-item>
<config:config-item config:name="VisibleAreaLeft" config:type="int">-250</config:config-item>
<config:config-item config:name="VisibleAreaWidth" config:type="int">21501</config:config-item>
<config:config-item config:name="VisibleAreaHeight" config:type="int">11534</config:config-item>
<config:config-item config:name="GridCoarseWidth" config:type="int">500</config:config-item>
<config:config-item config:name="GridCoarseHeight" config:type="int">500</config:config-item>
<config:config-item config:name="GridFineWidth" config:type="int">100</config:config-item>
<config:config-item config:name="GridFineHeight" config:type="int">100</config:config-item>
<config:config-item config:name="GridSnapWidthXNumerator" config:type="int">500</config:config-item>
<config:config-item config:name="GridSnapWidthXDenominator" config:type="int">5</config:config-item>
<config:config-item config:name="GridSnapWidthYNumerator" config:type="int">500</config:config-item>
<config:config-item config:name="GridSnapWidthYDenominator" config:type="int">5</config:config-item>
<config:config-item config:name="IsAngleSnapEnabled" config:type="boolean">false</config:config-item>
<config:config-item config:name="SnapAngle" config:type="int">1500</config:config-item>
<config:config-item config:name="ZoomOnPage" config:type="boolean">false</config:config-item>
<config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
<config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
<config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
<config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
</config:config-item-map-entry>
</config:config-item-map-indexed>
</config:config-item-set>
<config:config-item-set config:name="ooo:configuration-settings">
<config:config-item config:name="DefaultTabStop" config:type="int">1251</config:config-item>
<config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
<config:config-item config:name="PrinterName" config:type="string">EPSON6FC99C (WP-4025 Series)</config:config-item>
<config:config-item config:name="PrinterSetup" config:type="base64Binary">iAv+/0VQU09ONkZDOTlDIChXUC00MDI1IFNlcmllcykAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARVBTT04gV1AtNDAyNSBTZXJpZXMAAAAAAAAAAAAAAAAWAAEAWgoAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAEUAUABTAE8ATgA2AEYAQwA5ADkAQwAgACgAVwBQAC0ANAAwADIANQAgAFMAZQByAGkAZQBzACkAAAAAAAAAAAABBAAB3AB0CQ+bgAcBAAkAmgs0CGQAAQAHAFgCAgABAFgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0CQAAAQEBAQABAAABAAAAAAAAAAAAAAA4AAAAfAgAALQIAABAAAAA9AgAAIAAAAAAAAAAAAAAAAMACQRFAFAAUwBPAE4AIABXAFAALQA0ADAAMgA1ACAAUwBlAHIAaQBlAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABYAgAAAAAAAAAAAAABAAAAAgAAAAAAAQBYAlgCBwAAAAAACQA0CJoLHgAeAB4AHgA0CJoLOwORBAEAAAAOABYAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAAAAAAAAACAAAAAAIAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABkAGQANAiaCx4AHgAeAB4ACQAAAAAAAAAAAAAA//8AAAAAAAAAAB4AHgABAAAAAwDgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAgAAAAAAAAAAAAEAMgAyANT+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYACoAAAAgAAEAAAAgAAAAQAAAAAYAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs/wAAAAAAAAAAAABCAAAAAQAAALAAAAAAAAAAAAAAAAAAAAAeAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBARIAQ09NUEFUX0RVUExFWF9NT0RFDwBEdXBsZXhNb2RlOjpPZmYMAFBSSU5URVJfTkFNRRwARVBTT042RkM5OUMgKFdQLTQwMjUgU2VyaWVzKQsARFJJVkVSX05BTUUUAEVQU09OIFdQLTQwMjUgU2VyaWVz</config:config-item>
<config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintPageName" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintDate" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintTilePage" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintTime" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintHiddenPages" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsPrintFitPage" 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="IsPrintBooklet" config:type="boolean">false</config:config-item>
<config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsPrintBookletFront" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsPrintBookletBack" config:type="boolean">true</config:config-item>
<config:config-item config:name="PrintQuality" config:type="int">0</config:config-item>
<config:config-item config:name="DashTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/standard.sod</config:config-item>
<config:config-item config:name="ColorTableURL" config:type="string">$(inst)/share/palette/html.soc</config:config-item>
<config:config-item config:name="ParagraphSummation" config:type="boolean">false</config:config-item>
<config:config-item config:name="LineEndTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/standard.soe</config:config-item>
<config:config-item config:name="HatchTableURL" config:type="string">$(user)/config/standard.soh</config:config-item>
<config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
<config:config-item config:name="GradientTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/standard.sog</config:config-item>
<config:config-item config:name="BitmapTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/standard.sob</config:config-item>
<config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
<config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
<config:config-item config:name="PageNumberFormat" config:type="int">4</config:config-item>
<config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
<config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
<config:config-item config:name="PrinterIndependentLayout" config:type="string">low-resolution</config:config-item>
<config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
<config:config-item config:name="SaveVersionOnClose" 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="EmbedOnlyUsedFonts" 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="MeasureUnit" config:type="short">2</config:config-item>
<config:config-item config:name="ScaleNumerator" config:type="int">1</config:config-item>
<config:config-item config:name="ScaleDenominator" config:type="int">1</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">
<ooo:library-embedded ooo:name="Standard"/>
</ooo:libraries>
</office:script>
</office:scripts>
<office:font-face-decls>
<style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
<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="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="Microsoft YaHei" svg:font-family="'Microsoft YaHei'" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="Noto Sans" svg:font-family="'Noto Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
<style:font-face style:name="Segoe UI" svg:font-family="'Segoe UI'" 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>
<draw:gradient draw:name="Filled" draw:style="linear" draw:start-color="#ffffff" draw:end-color="#cccccc" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#ffffff"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#cccccc"/></draw:gradient>
<draw:gradient draw:name="Filled_20_Blue" draw:display-name="Filled Blue" draw:style="linear" draw:start-color="#729fcf" draw:end-color="#355269" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#729fcf"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#355269"/></draw:gradient>
<draw:gradient draw:name="Filled_20_Green" draw:display-name="Filled Green" draw:style="linear" draw:start-color="#77bc65" draw:end-color="#127622" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#77bc65"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#127622"/></draw:gradient>
<draw:gradient draw:name="Filled_20_Red" draw:display-name="Filled Red" draw:style="linear" draw:start-color="#ff6d6d" draw:end-color="#c9211e" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#ff6d6d"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#c9211e"/></draw:gradient>
<draw:gradient draw:name="Filled_20_Yellow" draw:display-name="Filled Yellow" draw:style="linear" draw:start-color="#ffde59" draw:end-color="#b47804" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#ffde59"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#b47804"/></draw:gradient>
<draw:gradient draw:name="Shapes" draw:style="rectangular" draw:cx="50%" draw:cy="50%" draw:start-color="#cccccc" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="0deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#cccccc"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#ffffff"/></draw:gradient>
<draw:hatch draw:name="deg" draw:style="single" draw:color="#0000ff" draw:distance="0.5cm" draw:rotation="58.5deg"/>
<draw:hatch draw:name="grad" draw:style="single" draw:color="#ff0000" draw:distance="0.5cm" draw:rotation="65grad"/>
<draw:hatch draw:name="rad" draw:style="single" draw:color="#009900" draw:distance="0.5cm" draw:rotation="1.02101761241558rad"/>
<draw:hatch draw:name="unitless" draw:style="single" draw:color="#000000" draw:distance="0.5cm" draw:rotation="585"/>
<draw:marker draw:name="Arrow" svg:viewBox="0 0 20 30" svg:d="M10 0l-10 30h20z"/>
<style:default-style style:family="graphic">
<style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" style:writing-mode="lr-tb"/>
<style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
<style:tab-stops/>
</style:paragraph-properties>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="24pt" fo:language="en" fo:country="US" style:font-name-asian="Segoe UI" style:font-size-asian="24pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Tahoma" style:font-size-complex="24pt" style:language-complex="hi" style:country-complex="IN"/>
</style:default-style>
<style:style style:name="standard" style:family="graphic">
<style:graphic-properties draw:stroke="solid" svg:stroke-width="0cm" svg:stroke-color="#3465a4" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:marker-end-width="0.2cm" draw:marker-end-center="false" draw:fill="solid" draw:fill-color="#729fcf" draw:textarea-horizontal-align="justify" fo:padding-top="0.125cm" fo:padding-bottom="0.125cm" fo:padding-left="0.25cm" fo:padding-right="0.25cm" fo:wrap-option="wrap" draw:shadow="hidden" draw:shadow-offset-x="0.2cm" draw:shadow-offset-y="0.2cm" draw:shadow-color="#808080">
<text:list-style style:name="standard">
<text:list-level-style-bullet text:level="1" text:bullet-char="●">
<style:list-level-properties text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="2" text:bullet-char="●">
<style:list-level-properties text:space-before="0.6cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="3" text:bullet-char="●">
<style:list-level-properties text:space-before="1.2cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="4" text:bullet-char="●">
<style:list-level-properties text:space-before="1.8cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="5" text:bullet-char="●">
<style:list-level-properties text:space-before="2.4cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="6" text:bullet-char="●">
<style:list-level-properties text:space-before="3cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="7" text:bullet-char="●">
<style:list-level-properties text:space-before="3.6cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="8" text:bullet-char="●">
<style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="9" text:bullet-char="●">
<style:list-level-properties text:space-before="4.8cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="10" text:bullet-char="●">
<style:list-level-properties text:space-before="5.4cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
</text:list-style>
</style:graphic-properties>
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:line-height="100%" fo:text-indent="0cm"/>
<style:text-properties fo:font-variant="normal" fo:text-transform="none" style:use-window-font-color="true" loext:opacity="0%" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="18pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:letter-kerning="true" style:font-name-asian="Microsoft YaHei" style:font-family-asian="'Microsoft YaHei'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="18pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Lucida Sans" style:font-family-complex="'Lucida Sans'" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="18pt" style:font-style-complex="normal" style:font-weight-complex="normal" style:text-emphasize="none" style:font-relief="none" style:text-overline-style="none" style:text-overline-color="font-color"/>
</style:style>
<style:style style:name="objectwithoutfill" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:fill="none"/>
</style:style>
<style:style style:name="Object_20_with_20_no_20_fill_20_and_20_no_20_line" style:display-name="Object with no fill and no line" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:stroke="none" draw:fill="none"/>
</style:style>
<style:style style:name="Text" style:family="graphic">
<style:graphic-properties draw:stroke="solid" svg:stroke-color="#cccccc" draw:fill="solid" draw:fill-color="#eeeeee"/>
<style:text-properties style:font-name="Noto Sans" fo:font-family="'Noto Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
</style:style>
<style:style style:name="A4" style:family="graphic" style:parent-style-name="Text">
<style:graphic-properties draw:fill="none"/>
<style:text-properties fo:font-size="18pt"/>
</style:style>
<style:style style:name="Title_20_A4" style:display-name="Title A4" style:family="graphic" style:parent-style-name="A4">
<style:graphic-properties draw:stroke="none"/>
<style:text-properties fo:font-size="44pt"/>
</style:style>
<style:style style:name="Heading_20_A4" style:display-name="Heading A4" style:family="graphic" style:parent-style-name="A4">
<style:graphic-properties draw:stroke="none"/>
<style:text-properties fo:font-size="24pt"/>
</style:style>
<style:style style:name="Text_20_A4" style:display-name="Text A4" style:family="graphic" style:parent-style-name="A4">
<style:graphic-properties draw:stroke="none"/>
</style:style>
<style:style style:name="A0" style:family="graphic" style:parent-style-name="Text">
<style:graphic-properties draw:fill="none"/>
<style:text-properties fo:font-size="48pt"/>
</style:style>
<style:style style:name="Title_20_A0" style:display-name="Title A0" style:family="graphic" style:parent-style-name="A0">
<style:graphic-properties draw:stroke="none"/>
<style:text-properties fo:font-size="96pt"/>
</style:style>
<style:style style:name="Heading_20_A0" style:display-name="Heading A0" style:family="graphic" style:parent-style-name="A0">
<style:graphic-properties draw:stroke="none"/>
<style:text-properties fo:font-size="71.9000015258789pt"/>
</style:style>
<style:style style:name="Text_20_A0" style:display-name="Text A0" style:family="graphic" style:parent-style-name="A0">
<style:graphic-properties draw:stroke="none"/>
</style:style>
<style:style style:name="Graphic" style:family="graphic">
<style:graphic-properties draw:fill="solid" draw:fill-color="#ffffff"/>
<style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="18pt"/>
</style:style>
<style:style style:name="Shapes" style:family="graphic" style:parent-style-name="Graphic">
<style:graphic-properties draw:stroke="none" draw:fill="gradient" draw:fill-gradient-name="Shapes"/>
<style:text-properties fo:font-size="14pt" fo:font-weight="bold"/>
</style:style>
<style:style style:name="Filled" style:family="graphic" style:parent-style-name="Shapes">
<style:graphic-properties draw:fill="gradient" draw:fill-gradient-name="Filled"/>
</style:style>
<style:style style:name="Filled_20_Blue" style:display-name="Filled Blue" style:family="graphic" style:parent-style-name="Filled">
<style:graphic-properties draw:fill-gradient-name="Filled_20_Blue"/>
<style:text-properties fo:color="#ffffff" loext:opacity="100%"/>
</style:style>
<style:style style:name="Filled_20_Green" style:display-name="Filled Green" style:family="graphic" style:parent-style-name="Filled">
<style:graphic-properties draw:fill-gradient-name="Filled_20_Green"/>
<style:text-properties fo:color="#ffffff" loext:opacity="100%" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
</style:style>
<style:style style:name="Filled_20_Red" style:display-name="Filled Red" style:family="graphic" style:parent-style-name="Filled">
<style:graphic-properties draw:fill-gradient-name="Filled_20_Red"/>
<style:text-properties fo:color="#ffffff" loext:opacity="100%"/>
</style:style>
<style:style style:name="Filled_20_Yellow" style:display-name="Filled Yellow" style:family="graphic" style:parent-style-name="Filled">
<style:graphic-properties draw:fill-gradient-name="Filled_20_Yellow"/>
<style:text-properties fo:color="#ffffff" loext:opacity="100%"/>
</style:style>
<style:style style:name="Outlined" style:family="graphic" style:parent-style-name="Shapes">
<style:graphic-properties draw:stroke="solid" svg:stroke-width="0.081cm" svg:stroke-color="#000000" draw:fill="none"/>
</style:style>
<style:style style:name="Outlined_20_Blue" style:display-name="Outlined Blue" style:family="graphic" style:parent-style-name="Outlined">
<style:graphic-properties svg:stroke-color="#355269"/>
<style:text-properties fo:color="#355269" loext:opacity="100%"/>
</style:style>
<style:style style:name="Outlined_20_Green" style:display-name="Outlined Green" style:family="graphic" style:parent-style-name="Outlined">
<style:graphic-properties svg:stroke-color="#127622"/>
<style:text-properties fo:color="#127622" loext:opacity="100%"/>
</style:style>
<style:style style:name="Outlined_20_Red" style:display-name="Outlined Red" style:family="graphic" style:parent-style-name="Outlined">
<style:graphic-properties svg:stroke-color="#c9211e"/>
<style:text-properties fo:color="#c9211e" loext:opacity="100%"/>
</style:style>
<style:style style:name="Outlined_20_Yellow" style:display-name="Outlined Yellow" style:family="graphic" style:parent-style-name="Outlined">
<style:graphic-properties draw:stroke="solid" svg:stroke-color="#b47804"/>
<style:text-properties fo:color="#b47804" loext:opacity="100%"/>
</style:style>
<style:style style:name="Lines" style:family="graphic" style:parent-style-name="Graphic">
<style:graphic-properties draw:stroke="solid" svg:stroke-color="#000000" draw:fill="none"/>
</style:style>
<style:style style:name="Arrow_20_Line" style:display-name="Arrow Line" style:family="graphic" style:parent-style-name="Lines">
<style:graphic-properties draw:marker-start="Arrow" draw:marker-start-width="0.2cm" draw:marker-end="Arrow" draw:marker-end-width="0.2cm" draw:show-unit="true"/>
</style:style>
<style:style style:name="Arrow_20_Dashed" style:display-name="Arrow Dashed" style:family="graphic" style:parent-style-name="Lines">
<style:graphic-properties draw:stroke="dash"/>
</style:style>
</office:styles>
<office:automatic-styles>
<style:page-layout style:name="PM0">
<style:page-layout-properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:page-width="24cm" fo:page-height="16cm" style:print-orientation="landscape"/>
</style:page-layout>
<style:style style:name="dp1" style:family="drawing-page">
<style:drawing-page-properties draw:background-size="border" draw:fill="none"/>
</style:style>
<style:style style:name="dp2" style:family="drawing-page"/>
<style:style style:name="gr1" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:fill="hatch" draw:fill-hatch-name="unitless" draw:fill-hatch-solid="false" draw:textarea-vertical-align="middle" loext:decorative="false"/>
</style:style>
<style:style style:name="gr2" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:fill="hatch" draw:fill-hatch-name="deg" draw:fill-hatch-solid="false" draw:textarea-vertical-align="middle" loext:decorative="false"/>
</style:style>
<style:style style:name="gr3" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:fill="hatch" draw:fill-hatch-name="grad" draw:fill-hatch-solid="false" draw:textarea-vertical-align="middle" loext:decorative="false"/>
</style:style>
<style:style style:name="gr4" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:fill="hatch" draw:fill-hatch-name="rad" draw:fill-hatch-solid="false" draw:textarea-vertical-align="middle" loext:decorative="false"/>
</style:style>
<style:style style:name="P1" style:family="paragraph">
<style:paragraph-properties fo:text-align="center"/>
</style:style>
<text:list-style style:name="L1">
<text:list-level-style-bullet text:level="1" text:bullet-char="●">
<style:list-level-properties text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="2" text:bullet-char="●">
<style:list-level-properties text:space-before="0.6cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="3" text:bullet-char="●">
<style:list-level-properties text:space-before="1.2cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="4" text:bullet-char="●">
<style:list-level-properties text:space-before="1.8cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="5" text:bullet-char="●">
<style:list-level-properties text:space-before="2.4cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="6" text:bullet-char="●">
<style:list-level-properties text:space-before="3cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="7" text:bullet-char="●">
<style:list-level-properties text:space-before="3.6cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="8" text:bullet-char="●">
<style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="9" text:bullet-char="●">
<style:list-level-properties text:space-before="4.8cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="10" text:bullet-char="●">
<style:list-level-properties text:space-before="5.4cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
</text:list-style>
</office:automatic-styles>
<office:master-styles>
<draw:layer-set>
<draw:layer draw:name="layout"/>
<draw:layer draw:name="background"/>
<draw:layer draw:name="backgroundobjects"/>
<draw:layer draw:name="controls"/>
<draw:layer draw:name="measurelines"/>
</draw:layer-set>
<style:master-page style:name="Default" style:page-layout-name="PM0" draw:style-name="dp1">
<loext:theme loext:name="Office">
<loext:theme-colors loext:name="LibreOffice">
<loext:color loext:name="dark1" loext:color="#000000"/>
<loext:color loext:name="light1" loext:color="#ffffff"/>
<loext:color loext:name="dark2" loext:color="#000000"/>
<loext:color loext:name="light2" loext:color="#ffffff"/>
<loext:color loext:name="accent1" loext:color="#18a303"/>
<loext:color loext:name="accent2" loext:color="#0369a3"/>
<loext:color loext:name="accent3" loext:color="#a33e03"/>
<loext:color loext:name="accent4" loext:color="#8e03a3"/>
<loext:color loext:name="accent5" loext:color="#c99c00"/>
<loext:color loext:name="accent6" loext:color="#c9211e"/>
<loext:color loext:name="hyperlink" loext:color="#0000ee"/>
<loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
</loext:theme-colors>
</loext:theme>
</style:master-page>
</office:master-styles>
<office:body>
<office:drawing>
<draw:page draw:name="page1" draw:style-name="dp2" draw:master-page-name="Default">
<draw:rect draw:name="Zero" draw:style-name="gr1" draw:text-style-name="P1" draw:layer="layout" svg:width="4cm" svg:height="4cm" svg:x="1cm" svg:y="1cm">
<text:p/>
</draw:rect>
<draw:rect draw:name="One" draw:style-name="gr2" draw:text-style-name="P1" draw:layer="layout" svg:width="4cm" svg:height="4cm" svg:x="6cm" svg:y="1cm">
<text:p/>
</draw:rect>
<draw:rect draw:name="Two" draw:style-name="gr3" draw:text-style-name="P1" draw:layer="layout" svg:width="4cm" svg:height="4cm" svg:x="11cm" svg:y="1cm">
<text:p/>
</draw:rect>
<draw:rect draw:name="Three" draw:style-name="gr4" draw:text-style-name="P1" draw:layer="layout" svg:width="4cm" svg:height="4cm" svg:x="16cm" svg:y="1cm">
<text:p/>
</draw:rect>
</draw:page>
</office:drawing>
</office:body>
</office:document>
\ No newline at end of file
diff --git a/xmloff/qa/unit/data/tdf161327_LatheEndAngle.fodg b/xmloff/qa/unit/data/tdf161327_LatheEndAngle.fodg
new file mode 100644
index 0000000..f150bc1
--- /dev/null
+++ b/xmloff/qa/unit/data/tdf161327_LatheEndAngle.fodg
@@ -0,0 +1,359 @@
<?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:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:smil="urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xmlns:officeooo="http://openoffice.org/2009/office" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.graphics">
<office:meta><meta:creation-date>2024-06-01T13:16:26.906000000</meta:creation-date><dc:title>32x24</dc:title><meta:editing-duration>PT2M18S</meta:editing-duration><meta:editing-cycles>3</meta:editing-cycles><meta:generator>buildLO2/24.8.0.0.alpha1$Windows_X86_64 LibreOffice_project/010551e5c1277ed32e8b279660c27490bace0767</meta:generator><meta:initial-creator>Regina Henschel</meta:initial-creator><dc:date>2024-06-01T13:22:05.137000000</dc:date><dc:creator>Regina Henschel</dc:creator><meta:document-statistic meta:object-count="2"/><meta:template xlink:type="simple" xlink:actuate="onRequest" xlink:title="32x24" xlink:href="../../../../../AppsUser/LODevBuildLO2/user/template/32x24.otg" meta:date="2024-06-01T13:16:26.542000000"/></office:meta>
<office:settings>
<config:config-item-set config:name="ooo:view-settings">
<config:config-item config:name="VisibleAreaTop" config:type="int">-346</config:config-item>
<config:config-item config:name="VisibleAreaLeft" config:type="int">-2078</config:config-item>
<config:config-item config:name="VisibleAreaWidth" config:type="int">36561</config:config-item>
<config:config-item config:name="VisibleAreaHeight" config:type="int">24977</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">view1</config:config-item>
<config:config-item config:name="GridIsVisible" config:type="boolean">true</config:config-item>
<config:config-item config:name="GridIsFront" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsSnapToGrid" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsSnapToPageMargins" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsSnapToSnapLines" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsSnapToObjectFrame" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsSnapToObjectPoints" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPlusHandlesAlwaysVisible" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsFrameDragSingles" config:type="boolean">true</config:config-item>
<config:config-item config:name="EliminatePolyPointLimitAngle" config:type="int">1500</config:config-item>
<config:config-item config:name="IsEliminatePolyPoints" config:type="boolean">false</config:config-item>
<config:config-item config:name="VisibleLayers" config:type="base64Binary">Hw==</config:config-item>
<config:config-item config:name="PrintableLayers" config:type="base64Binary">Hw==</config:config-item>
<config:config-item config:name="LockedLayers" config:type="base64Binary"/>
<config:config-item config:name="NoAttribs" config:type="boolean">false</config:config-item>
<config:config-item config:name="NoColors" config:type="boolean">true</config:config-item>
<config:config-item config:name="RulerIsVisible" config:type="boolean">true</config:config-item>
<config:config-item config:name="PageKind" config:type="short">0</config:config-item>
<config:config-item config:name="SelectedPage" config:type="short">0</config:config-item>
<config:config-item config:name="IsLayerMode" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsDoubleClickTextEdit" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsClickChangeRotation" config:type="boolean">true</config:config-item>
<config:config-item config:name="SlidesPerRow" config:type="short">4</config:config-item>
<config:config-item config:name="EditMode" config:type="int">0</config:config-item>
<config:config-item config:name="VisibleAreaTop" config:type="int">-346</config:config-item>
<config:config-item config:name="VisibleAreaLeft" config:type="int">-2078</config:config-item>
<config:config-item config:name="VisibleAreaWidth" config:type="int">36562</config:config-item>
<config:config-item config:name="VisibleAreaHeight" config:type="int">24978</config:config-item>
<config:config-item config:name="GridCoarseWidth" config:type="int">500</config:config-item>
<config:config-item config:name="GridCoarseHeight" config:type="int">500</config:config-item>
<config:config-item config:name="GridFineWidth" config:type="int">100</config:config-item>
<config:config-item config:name="GridFineHeight" config:type="int">100</config:config-item>
<config:config-item config:name="GridSnapWidthXNumerator" config:type="int">500</config:config-item>
<config:config-item config:name="GridSnapWidthXDenominator" config:type="int">5</config:config-item>
<config:config-item config:name="GridSnapWidthYNumerator" config:type="int">500</config:config-item>
<config:config-item config:name="GridSnapWidthYDenominator" config:type="int">5</config:config-item>
<config:config-item config:name="IsAngleSnapEnabled" config:type="boolean">false</config:config-item>
<config:config-item config:name="SnapAngle" config:type="int">1500</config:config-item>
<config:config-item config:name="ZoomOnPage" config:type="boolean">true</config:config-item>
<config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
<config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
<config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
<config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
</config:config-item-map-entry>
</config:config-item-map-indexed>
</config:config-item-set>
<config:config-item-set config:name="ooo:configuration-settings">
<config:config-item config:name="DefaultTabStop" config:type="int">1250</config:config-item>
<config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
<config:config-item config:name="PrinterName" config:type="string">EPSON6FC99C (WP-4025 Series)</config:config-item>
<config:config-item config:name="PrinterSetup" config:type="base64Binary">iAv+/0VQU09ONkZDOTlDIChXUC00MDI1IFNlcmllcykAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARVBTT04gV1AtNDAyNSBTZXJpZXMAAAAAAAAAAAAAAAAWAAEAWgoAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAEUAUABTAE8ATgA2AEYAQwA5ADkAQwAgACgAVwBQAC0ANAAwADIANQAgAFMAZQByAGkAZQBzACkAAAAAAAAAAAABBAAB3AB0CQ+bgAcBAAkAmgs0CGQAAQAHAFgCAgABAFgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0CQAAAQEBAQABAAABAAAAAAAAAAAAAAA4AAAAfAgAALQIAABAAAAA9AgAAIAAAAAAAAAAAAAAAAMACQRFAFAAUwBPAE4AIABXAFAALQA0ADAAMgA1ACAAUwBlAHIAaQBlAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABYAgAAAAAAAAAAAAABAAAAAgAAAAAAAQBYAlgCBwAAAAAACQA0CJoLHgAeAB4AHgA0CJoLOwORBAEAAAAOABYAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAAAAAAAAACAAAAAAIAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABkAGQANAiaCx4AHgAeAB4ACQAAAAAAAAAAAAAA//8AAAAAAAAAAB4AHgABAAAAAwDgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAgAAAAAAAAAAAAEAMgAyANT+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYACoAAAAgAAEAAAAgAAAAQAAAAAYAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs/wAAAAAAAAAAAABCAAAAAQAAALAAAAAAAAAAAAAAAAAAAAAeAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBARIAQ09NUEFUX0RVUExFWF9NT0RFDwBEdXBsZXhNb2RlOjpPZmYMAFBSSU5URVJfTkFNRRwARVBTT042RkM5OUMgKFdQLTQwMjUgU2VyaWVzKQsARFJJVkVSX05BTUUUAEVQU09OIFdQLTQwMjUgU2VyaWVz</config:config-item>
<config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintPageName" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintDate" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintTilePage" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintTime" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsPrintHiddenPages" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsPrintFitPage" 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="IsPrintBooklet" config:type="boolean">false</config:config-item>
<config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsPrintBookletFront" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsPrintBookletBack" config:type="boolean">true</config:config-item>
<config:config-item config:name="PrintQuality" config:type="int">0</config:config-item>
<config:config-item config:name="DashTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/standard.sod</config:config-item>
<config:config-item config:name="ColorTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/html.soc</config:config-item>
<config:config-item config:name="ParagraphSummation" config:type="boolean">false</config:config-item>
<config:config-item config:name="LineEndTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/standard.soe</config:config-item>
<config:config-item config:name="HatchTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/standard.soh</config:config-item>
<config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
<config:config-item config:name="GradientTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/standard.sog</config:config-item>
<config:config-item config:name="BitmapTableURL" config:type="string">$(inst)/share/palette%3B$(user)/config/standard.sob</config:config-item>
<config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
<config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
<config:config-item config:name="PageNumberFormat" config:type="int">4</config:config-item>
<config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
<config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
<config:config-item config:name="PrinterIndependentLayout" config:type="string">low-resolution</config:config-item>
<config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
<config:config-item config:name="SaveVersionOnClose" 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="EmbedOnlyUsedFonts" 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="MeasureUnit" config:type="short">2</config:config-item>
<config:config-item config:name="ScaleNumerator" config:type="int">1</config:config-item>
<config:config-item config:name="ScaleDenominator" config:type="int">1</config:config-item>
</config:config-item-set>
</office:settings>
<office:scripts>
<office:script script:language="ooo:Basic">
<ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</office:script>
</office:scripts>
<office:font-face-decls>
<style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
<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="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="Microsoft YaHei" svg:font-family="'Microsoft YaHei'" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="Noto Sans" svg:font-family="'Noto Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
<style:font-face style:name="Segoe UI" svg:font-family="'Segoe UI'" 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>
<draw:gradient draw:name="Filled" draw:style="linear" draw:start-color="#ffffff" draw:end-color="#cccccc" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#ffffff"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#cccccc"/></draw:gradient>
<draw:gradient draw:name="Filled_20_Blue" draw:display-name="Filled Blue" draw:style="linear" draw:start-color="#729fcf" draw:end-color="#355269" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#729fcf"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#355269"/></draw:gradient>
<draw:gradient draw:name="Filled_20_Green" draw:display-name="Filled Green" draw:style="linear" draw:start-color="#77bc65" draw:end-color="#127622" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#77bc65"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#127622"/></draw:gradient>
<draw:gradient draw:name="Filled_20_Red" draw:display-name="Filled Red" draw:style="linear" draw:start-color="#ff6d6d" draw:end-color="#c9211e" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#ff6d6d"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#c9211e"/></draw:gradient>
<draw:gradient draw:name="Filled_20_Yellow" draw:display-name="Filled Yellow" draw:style="linear" draw:start-color="#ffde59" draw:end-color="#b47804" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="30deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#ffde59"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#b47804"/></draw:gradient>
<draw:gradient draw:name="Shapes" draw:style="rectangular" draw:cx="50%" draw:cy="50%" draw:start-color="#cccccc" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="0deg" draw:border="0%">
<loext:gradient-stop svg:offset="0" loext:color-type="rgb" loext:color-value="#cccccc"/>
<loext:gradient-stop svg:offset="1" loext:color-type="rgb" loext:color-value="#ffffff"/></draw:gradient>
<draw:marker draw:name="Arrow" svg:viewBox="0 0 20 30" svg:d="M10 0l-10 30h20z"/>
<draw:stroke-dash draw:name="Dash_20_Dot_20_4" draw:display-name="Dash Dot 4" draw:style="rect" draw:dots1="1" draw:dots1-length="0.02cm" draw:dots2="1" draw:dots2-length="0.02cm" draw:distance="0.02cm"/>
<style:default-style style:family="graphic">
<style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" style:writing-mode="lr-tb"/>
<style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" loext:tab-stop-distance="0cm" style:font-independent-line-spacing="false">
<style:tab-stops/>
</style:paragraph-properties>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="24pt" fo:language="de" fo:country="DE" style:font-name-asian="Segoe UI" style:font-size-asian="24pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Tahoma" style:font-size-complex="24pt" style:language-complex="hi" style:country-complex="IN"/>
</style:default-style>
<style:style style:name="standard" style:family="graphic">
<style:graphic-properties draw:stroke="solid" draw:stroke-dash="Dash_20_Dot_20_4" svg:stroke-width="0cm" svg:stroke-color="#3465a4" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:marker-end-width="0.2cm" draw:marker-end-center="false" draw:fill="solid" draw:fill-color="#729fcf" draw:textarea-horizontal-align="justify" fo:padding-top="0.125cm" fo:padding-bottom="0.125cm" fo:padding-left="0.25cm" fo:padding-right="0.25cm" fo:wrap-option="wrap" draw:shadow="hidden" draw:shadow-offset-x="0.2cm" draw:shadow-offset-y="0.2cm" draw:shadow-color="#808080">
<text:list-style style:name="standard">
<text:list-level-style-bullet text:level="1" text:bullet-char="●">
<style:list-level-properties text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="2" text:bullet-char="●">
<style:list-level-properties text:space-before="0.6cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="3" text:bullet-char="●">
<style:list-level-properties text:space-before="1.2cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="4" text:bullet-char="●">
<style:list-level-properties text:space-before="1.8cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="5" text:bullet-char="●">
<style:list-level-properties text:space-before="2.4cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="6" text:bullet-char="●">
<style:list-level-properties text:space-before="3cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="7" text:bullet-char="●">
<style:list-level-properties text:space-before="3.6cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="8" text:bullet-char="●">
<style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="9" text:bullet-char="●">
<style:list-level-properties text:space-before="4.8cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
<text:list-level-style-bullet text:level="10" text:bullet-char="●">
<style:list-level-properties text:space-before="5.4cm" text:min-label-width="0.6cm"/>
<style:text-properties fo:font-family="OpenSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
</text:list-level-style-bullet>
</text:list-style>
</style:graphic-properties>
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:line-height="100%" fo:text-indent="0cm"/>
<style:text-properties fo:font-variant="normal" fo:text-transform="none" style:use-window-font-color="true" loext:opacity="0%" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="18pt" fo:language="en" fo:country="US" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:letter-kerning="true" style:font-name-asian="Microsoft YaHei" style:font-family-asian="'Microsoft YaHei'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="18pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Lucida Sans" style:font-family-complex="'Lucida Sans'" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="18pt" style:font-style-complex="normal" style:font-weight-complex="normal" style:text-emphasize="none" style:font-relief="none" style:text-overline-style="none" style:text-overline-color="font-color"/>
</style:style>
<style:style style:name="objectwithoutfill" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:fill="none"/>
</style:style>
<style:style style:name="Object_20_with_20_no_20_fill_20_and_20_no_20_line" style:display-name="Object with no fill and no line" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:stroke="none" draw:fill="none"/>
</style:style>
<style:style style:name="Text" style:family="graphic">
<style:graphic-properties draw:stroke="solid" svg:stroke-color="#cccccc" draw:fill="solid" draw:fill-color="#eeeeee"/>
<style:text-properties style:font-name="Noto Sans" fo:font-family="'Noto Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
</style:style>
<style:style style:name="A4" style:family="graphic" style:parent-style-name="Text">
<style:graphic-properties draw:fill="none"/>
<style:text-properties fo:font-size="18pt"/>
</style:style>
<style:style style:name="Title_20_A4" style:display-name="Title A4" style:family="graphic" style:parent-style-name="A4">
<style:graphic-properties draw:stroke="none"/>
<style:text-properties fo:font-size="44pt"/>
</style:style>
<style:style style:name="Heading_20_A4" style:display-name="Heading A4" style:family="graphic" style:parent-style-name="A4">
<style:graphic-properties draw:stroke="none"/>
<style:text-properties fo:font-size="24pt"/>
</style:style>
<style:style style:name="Text_20_A4" style:display-name="Text A4" style:family="graphic" style:parent-style-name="A4">
<style:graphic-properties draw:stroke="none"/>
</style:style>
<style:style style:name="A0" style:family="graphic" style:parent-style-name="Text">
<style:graphic-properties draw:fill="none"/>
<style:text-properties fo:font-size="48pt"/>
</style:style>
<style:style style:name="Title_20_A0" style:display-name="Title A0" style:family="graphic" style:parent-style-name="A0">
<style:graphic-properties draw:stroke="none"/>
<style:text-properties fo:font-size="96pt"/>
</style:style>
<style:style style:name="Heading_20_A0" style:display-name="Heading A0" style:family="graphic" style:parent-style-name="A0">
<style:graphic-properties draw:stroke="none"/>
<style:text-properties fo:font-size="71.9000015258789pt"/>
</style:style>
<style:style style:name="Text_20_A0" style:display-name="Text A0" style:family="graphic" style:parent-style-name="A0">
<style:graphic-properties draw:stroke="none"/>
</style:style>
<style:style style:name="Graphic" style:family="graphic">
<style:graphic-properties draw:fill="solid" draw:fill-color="#ffffff"/>
<style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="18pt"/>
</style:style>
<style:style style:name="Shapes" style:family="graphic" style:parent-style-name="Graphic">
<style:graphic-properties draw:stroke="none" draw:fill="gradient" draw:fill-gradient-name="Shapes"/>
<style:text-properties fo:font-size="14pt" fo:font-weight="bold"/>
</style:style>
<style:style style:name="Filled" style:family="graphic" style:parent-style-name="Shapes">
<style:graphic-properties draw:fill="gradient" draw:fill-gradient-name="Filled"/>
</style:style>
<style:style style:name="Filled_20_Blue" style:display-name="Filled Blue" style:family="graphic" style:parent-style-name="Filled">
<style:graphic-properties draw:fill-gradient-name="Filled_20_Blue"/>
<style:text-properties fo:color="#ffffff" loext:opacity="100%"/>
</style:style>
<style:style style:name="Filled_20_Green" style:display-name="Filled Green" style:family="graphic" style:parent-style-name="Filled">
<style:graphic-properties draw:fill-gradient-name="Filled_20_Green"/>
<style:text-properties fo:color="#ffffff" loext:opacity="100%" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
</style:style>
<style:style style:name="Filled_20_Red" style:display-name="Filled Red" style:family="graphic" style:parent-style-name="Filled">
<style:graphic-properties draw:fill-gradient-name="Filled_20_Red"/>
<style:text-properties fo:color="#ffffff" loext:opacity="100%"/>
</style:style>
<style:style style:name="Filled_20_Yellow" style:display-name="Filled Yellow" style:family="graphic" style:parent-style-name="Filled">
<style:graphic-properties draw:fill-gradient-name="Filled_20_Yellow"/>
<style:text-properties fo:color="#ffffff" loext:opacity="100%"/>
</style:style>
<style:style style:name="Outlined" style:family="graphic" style:parent-style-name="Shapes">
<style:graphic-properties draw:stroke="solid" svg:stroke-width="0.081cm" svg:stroke-color="#000000" draw:fill="none"/>
</style:style>
<style:style style:name="Outlined_20_Blue" style:display-name="Outlined Blue" style:family="graphic" style:parent-style-name="Outlined">
<style:graphic-properties svg:stroke-color="#355269"/>
<style:text-properties fo:color="#355269" loext:opacity="100%"/>
</style:style>
<style:style style:name="Outlined_20_Green" style:display-name="Outlined Green" style:family="graphic" style:parent-style-name="Outlined">
<style:graphic-properties svg:stroke-color="#127622"/>
<style:text-properties fo:color="#127622" loext:opacity="100%"/>
</style:style>
<style:style style:name="Outlined_20_Red" style:display-name="Outlined Red" style:family="graphic" style:parent-style-name="Outlined">
<style:graphic-properties svg:stroke-color="#c9211e"/>
<style:text-properties fo:color="#c9211e" loext:opacity="100%"/>
</style:style>
<style:style style:name="Outlined_20_Yellow" style:display-name="Outlined Yellow" style:family="graphic" style:parent-style-name="Outlined">
<style:graphic-properties draw:stroke="solid" svg:stroke-color="#b47804"/>
<style:text-properties fo:color="#b47804" loext:opacity="100%"/>
</style:style>
<style:style style:name="Lines" style:family="graphic" style:parent-style-name="Graphic">
<style:graphic-properties draw:stroke="solid" svg:stroke-color="#000000" draw:fill="none"/>
</style:style>
<style:style style:name="Arrow_20_Line" style:display-name="Arrow Line" style:family="graphic" style:parent-style-name="Lines">
<style:graphic-properties draw:marker-start="Arrow" draw:marker-start-width="0.2cm" draw:marker-end="Arrow" draw:marker-end-width="0.2cm" draw:show-unit="true"/>
</style:style>
<style:style style:name="Arrow_20_Dashed" style:display-name="Arrow Dashed" style:family="graphic" style:parent-style-name="Lines">
<style:graphic-properties draw:stroke="dash"/>
</style:style>
</office:styles>
<office:automatic-styles>
<style:page-layout style:name="PM0">
<style:page-layout-properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:page-width="32cm" fo:page-height="24cm" style:print-orientation="landscape"/>
</style:page-layout>
<style:style style:name="dp1" style:family="drawing-page">
<style:drawing-page-properties draw:background-size="border" draw:fill="none"/>
</style:style>
<style:style style:name="dp2" style:family="drawing-page"/>
<style:style style:name="gr1" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:stroke="none" draw:stroke-dash="Dash_20_Dot_20_4" svg:stroke-width="0cm" svg:stroke-color="#3465a4" draw:marker-start="" draw:marker-start-width="0cm" draw:marker-start-center="false" draw:marker-end="" draw:marker-end-width="0cm" draw:marker-end-center="false" svg:stroke-opacity="100%" draw:stroke-linejoin="round" svg:stroke-linecap="butt" draw:fill="solid" draw:fill-color="#3465a4" draw:secondary-fill-color="#729fcf" draw:gradient-step-count="0" draw:fill-hatch-solid="false" loext:fill-use-slide-background="false" draw:opacity="100%" draw:opacity-name="" draw:fill-image-width="0cm" draw:fill-image-height="0cm" style:repeat="repeat" draw:fill-image-ref-point-x="0%" draw:fill-image-ref-point-y="0%" draw:fill-image-ref-point="center" draw:tile-repeat-offset="0% vertical" draw:shadow="hidden" draw:shadow-offset-x="0.2cm" draw:shadow-offset-y="0.2cm" draw:shadow-color="#808080" draw:shadow-opacity="100%" loext:shadow-blur="0cm" loext:decorative="false"/>
</style:style>
<style:style style:name="gr2" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:stroke="none" draw:stroke-dash="Dash_20_Dot_20_4" svg:stroke-width="0cm" svg:stroke-color="#3465a4" draw:marker-start="" draw:marker-start-width="0cm" draw:marker-start-center="false" draw:marker-end="" draw:marker-end-width="0cm" draw:marker-end-center="false" svg:stroke-opacity="100%" draw:stroke-linejoin="round" svg:stroke-linecap="butt" draw:fill="solid" draw:fill-color="#3465a4" draw:secondary-fill-color="#729fcf" draw:gradient-step-count="0" draw:fill-hatch-solid="false" loext:fill-use-slide-background="false" draw:opacity="100%" draw:opacity-name="" draw:fill-image-width="0cm" draw:fill-image-height="0cm" style:repeat="repeat" draw:fill-image-ref-point-x="0%" draw:fill-image-ref-point-y="0%" draw:fill-image-ref-point="center" draw:tile-repeat-offset="0% vertical" draw:shadow="hidden" draw:shadow-offset-x="0.2cm" draw:shadow-offset-y="0.2cm" draw:shadow-color="#808080" draw:shadow-opacity="100%" loext:shadow-blur="0cm" dr3d:horizontal-segments="24" dr3d:vertical-segments="1" dr3d:edge-rounding="10%" dr3d:back-scale="100%" dr3d:end-angle="1512" dr3d:backface-culling="disabled" dr3d:close-front="true" dr3d:close-back="true" dr3d:normals-kind="object" dr3d:normals-direction="inverse" dr3d:texture-filter="enabled" dr3d:diffuse-color="#00b8ff" dr3d:emissive-color="#000000" dr3d:specular-color="#ffffff" dr3d:shininess="15%" dr3d:shadow="hidden" loext:decorative="false"/>
</style:style>
<style:style style:name="gr3" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:stroke="none" draw:stroke-dash="Dash_20_Dot_20_4" svg:stroke-width="0cm" svg:stroke-color="#3465a4" draw:marker-start="" draw:marker-start-width="0cm" draw:marker-start-center="false" draw:marker-end="" draw:marker-end-width="0cm" draw:marker-end-center="false" svg:stroke-opacity="100%" draw:stroke-linejoin="round" svg:stroke-linecap="butt" draw:fill="solid" draw:fill-color="#3465a4" draw:secondary-fill-color="#729fcf" draw:gradient-step-count="0" draw:fill-hatch-solid="false" loext:fill-use-slide-background="false" draw:opacity="100%" draw:opacity-name="" draw:fill-image-width="0cm" draw:fill-image-height="0cm" style:repeat="repeat" draw:fill-image-ref-point-x="0%" draw:fill-image-ref-point-y="0%" draw:fill-image-ref-point="center" draw:tile-repeat-offset="0% vertical" draw:shadow="hidden" draw:shadow-offset-x="0.2cm" draw:shadow-offset-y="0.2cm" draw:shadow-color="#808080" draw:shadow-opacity="100%" loext:shadow-blur="0cm" dr3d:horizontal-segments="24" dr3d:vertical-segments="1" dr3d:edge-rounding="10%" dr3d:back-scale="100%" dr3d:end-angle="151.2deg" dr3d:backface-culling="disabled" dr3d:close-front="true" dr3d:close-back="true" dr3d:normals-kind="object" dr3d:normals-direction="inverse" dr3d:texture-filter="enabled" dr3d:diffuse-color="#00b8ff" dr3d:emissive-color="#000000" dr3d:specular-color="#ffffff" dr3d:shininess="15%" dr3d:shadow="hidden" loext:decorative="false"/>
</style:style>
<style:style style:name="gr4" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:stroke="none" draw:stroke-dash="Dash_20_Dot_20_4" svg:stroke-width="0cm" svg:stroke-color="#3465a4" draw:marker-start="" draw:marker-start-width="0cm" draw:marker-start-center="false" draw:marker-end="" draw:marker-end-width="0cm" draw:marker-end-center="false" svg:stroke-opacity="100%" draw:stroke-linejoin="round" svg:stroke-linecap="butt" draw:fill="solid" draw:fill-color="#3465a4" draw:secondary-fill-color="#729fcf" draw:gradient-step-count="0" draw:fill-hatch-solid="false" loext:fill-use-slide-background="false" draw:opacity="100%" draw:opacity-name="" draw:fill-image-width="0cm" draw:fill-image-height="0cm" style:repeat="repeat" draw:fill-image-ref-point-x="0%" draw:fill-image-ref-point-y="0%" draw:fill-image-ref-point="center" draw:tile-repeat-offset="0% vertical" draw:shadow="hidden" draw:shadow-offset-x="0.2cm" draw:shadow-offset-y="0.2cm" draw:shadow-color="#808080" draw:shadow-opacity="100%" loext:shadow-blur="0cm" dr3d:horizontal-segments="24" dr3d:vertical-segments="1" dr3d:edge-rounding="10%" dr3d:back-scale="100%" dr3d:end-angle="168.0grad" dr3d:backface-culling="disabled" dr3d:close-front="true" dr3d:close-back="true" dr3d:normals-kind="object" dr3d:normals-direction="inverse" dr3d:texture-filter="enabled" dr3d:diffuse-color="#00b8ff" dr3d:emissive-color="#000000" dr3d:specular-color="#ffffff" dr3d:shininess="15%" dr3d:shadow="hidden" loext:decorative="false"/>
</style:style>
<style:style style:name="gr5" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties draw:stroke="none" draw:stroke-dash="Dash_20_Dot_20_4" svg:stroke-width="0cm" svg:stroke-color="#3465a4" draw:marker-start="" draw:marker-start-width="0cm" draw:marker-start-center="false" draw:marker-end="" draw:marker-end-width="0cm" draw:marker-end-center="false" svg:stroke-opacity="100%" draw:stroke-linejoin="round" svg:stroke-linecap="butt" draw:fill="solid" draw:fill-color="#3465a4" draw:secondary-fill-color="#729fcf" draw:gradient-step-count="0" draw:fill-hatch-solid="false" loext:fill-use-slide-background="false" draw:opacity="100%" draw:opacity-name="" draw:fill-image-width="0cm" draw:fill-image-height="0cm" style:repeat="repeat" draw:fill-image-ref-point-x="0%" draw:fill-image-ref-point-y="0%" draw:fill-image-ref-point="center" draw:tile-repeat-offset="0% vertical" draw:shadow="hidden" draw:shadow-offset-x="0.2cm" draw:shadow-offset-y="0.2cm" draw:shadow-color="#808080" draw:shadow-opacity="100%" loext:shadow-blur="0cm" dr3d:horizontal-segments="24" dr3d:vertical-segments="1" dr3d:edge-rounding="10%" dr3d:back-scale="100%" dr3d:end-angle="2.638937829015430rad" dr3d:backface-culling="disabled" dr3d:close-front="true" dr3d:close-back="true" dr3d:normals-kind="object" dr3d:normals-direction="inverse" dr3d:texture-filter="enabled" dr3d:diffuse-color="#00b8ff" dr3d:emissive-color="#000000" dr3d:specular-color="#ffffff" dr3d:shininess="15%" dr3d:shadow="hidden" loext:decorative="false"/>
</style:style>
</office:automatic-styles>
<office:master-styles>
<draw:layer-set>
<draw:layer draw:name="layout"/>
<draw:layer draw:name="background"/>
<draw:layer draw:name="backgroundobjects"/>
<draw:layer draw:name="controls"/>
<draw:layer draw:name="measurelines"/>
</draw:layer-set>
<style:master-page style:name="Default" style:page-layout-name="PM0" draw:style-name="dp1">
<loext:theme loext:name="Office">
<loext:theme-colors loext:name="LibreOffice">
<loext:color loext:name="dark1" loext:color="#000000"/>
<loext:color loext:name="light1" loext:color="#ffffff"/>
<loext:color loext:name="dark2" loext:color="#000000"/>
<loext:color loext:name="light2" loext:color="#ffffff"/>
<loext:color loext:name="accent1" loext:color="#18a303"/>
<loext:color loext:name="accent2" loext:color="#0369a3"/>
<loext:color loext:name="accent3" loext:color="#a33e03"/>
<loext:color loext:name="accent4" loext:color="#8e03a3"/>
<loext:color loext:name="accent5" loext:color="#c99c00"/>
<loext:color loext:name="accent6" loext:color="#c9211e"/>
<loext:color loext:name="hyperlink" loext:color="#0000ee"/>
<loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
</loext:theme-colors>
</loext:theme>
</style:master-page>
</office:master-styles>
<office:body>
<office:drawing>
<draw:page draw:name="page1" draw:style-name="dp2" draw:master-page-name="Default">
<dr3d:scene draw:style-name="gr1" svg:width="16cm" svg:height="3cm" svg:x="2cm" svg:y="7cm" dr3d:vrp="(0 0 23162.0091428571)" dr3d:vpn="(0 0 17168.0091428571)" dr3d:projection="parallel" dr3d:distance="5.994cm" dr3d:focal-length="10.008cm" dr3d:shadow-slant="0" dr3d:shade-mode="gouraud" dr3d:ambient-color="#666666" dr3d:lighting-mode="true">
<dr3d:light dr3d:diffuse-color="#cccccc" dr3d:direction="(0.57735026918963 0.57735026918963 0.57735026918963)" dr3d:enabled="true" dr3d:specular="true"/>
<dr3d:light dr3d:diffuse-color="#000000" dr3d:direction="(0 0 1)" dr3d:enabled="false" dr3d:specular="false"/>
<dr3d:light dr3d:diffuse-color="#000000" dr3d:direction="(0 0 1)" dr3d:enabled="false" dr3d:specular="false"/>
<dr3d:light dr3d:diffuse-color="#000000" dr3d:direction="(0 0 1)" dr3d:enabled="false" dr3d:specular="false"/>
<dr3d:light dr3d:diffuse-color="#000000" dr3d:direction="(0 0 1)" dr3d:enabled="false" dr3d:specular="false"/>
<dr3d:light dr3d:diffuse-color="#000000" dr3d:direction="(0 0 1)" dr3d:enabled="false" dr3d:specular="false"/>
<dr3d:light dr3d:diffuse-color="#000000" dr3d:direction="(0 0 1)" dr3d:enabled="false" dr3d:specular="false"/>
<dr3d:light dr3d:diffuse-color="#000000" dr3d:direction="(0 0 1)" dr3d:enabled="false" dr3d:specular="false"/>
<dr3d:rotate draw:style-name="gr2" draw:layer="layout" svg:viewBox="0 0 2000 3000" svg:d="M0 0l2000 3000"/>
<dr3d:rotate draw:style-name="gr3" draw:layer="layout" svg:viewBox="0 0 2000 3000" svg:d="M0 0l2000 3000" dr3d:transform="matrix (1 0 0 0 1 0 0 0 1 -4cm 0cm 0cm)"/>
<dr3d:rotate draw:style-name="gr4" draw:layer="layout" svg:viewBox="0 0 2000 3000" svg:d="M0 0l2000 3000" dr3d:transform="matrix (1 0 0 0 1 0 0 0 1 4cm 0cm 0cm)"/>
<dr3d:rotate draw:style-name="gr5" draw:layer="layout" svg:viewBox="0 0 2000 3000" svg:d="M0 0l2000 3000" dr3d:transform="matrix (1 0 0 0 1 0 0 0 1 8cm 0cm 0cm)"/>
</dr3d:scene>
</draw:page>
</office:drawing>
</office:body>
</office:document>
\ No newline at end of file
diff --git a/xmloff/qa/unit/draw.cxx b/xmloff/qa/unit/draw.cxx
index 05d5a75..bfa279ca 100644
--- a/xmloff/qa/unit/draw.cxx
+++ b/xmloff/qa/unit/draw.cxx
@@ -14,6 +14,8 @@
#include <com/sun/star/drawing/EnhancedCustomShapeMetalType.hpp>
#include <com/sun/star/drawing/EnhancedCustomShapeSegment.hpp>
#include <com/sun/star/drawing/EnhancedCustomShapeSegmentCommand.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
#include <com/sun/star/drawing/Hatch.hpp>
#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
#include <com/sun/star/drawing/XMasterPageTarget.hpp>
#include <com/sun/star/text/XTextRange.hpp>
@@ -822,6 +824,61 @@ CPPUNIT_TEST_FIXTURE(XmloffDrawTest, test_scene3d_ooxml_light)
save(u"impress8"_ustr);
}
CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testTdf161327_LatheEndAngle)
{
// Load document with 3D-Scene with 4 rotation objects
loadFromFile(u"tdf161327_LatheEndAngle.fodg");
// get scene object
uno::Reference<drawing::XShape> xSceneShape(getShape(0));
constexpr OUString sExpected(u"com.sun.star.drawing.Shape3DSceneObject"_ustr);
CPPUNIT_ASSERT_EQUAL(sExpected, xSceneShape->getShapeType());
// Examine child objects
// [0] dr3d:end-angle="1512"
// [1] dr3d:end-angle="151.2deg"
// [2] dr3d:end-angle="168.0grad"
// [3] dr3d:end-angle="2.638937829015430rad"
// All cases should result in D3DEndAngle = 1512. Without fix, cases [1], [2] and [3]
// could not be read and default 3600 was used, although the values are valid in ODF.
for (size_t i = 0; i < 4; ++i)
{
uno::Reference<container::XIndexAccess> xGroup(xSceneShape, uno::UNO_QUERY);
uno::Reference<drawing::XShape> xShape(xGroup->getByIndex(i), uno::UNO_QUERY);
uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
sal_Int16 nEndAngle;
xShapeProps->getPropertyValue(u"D3DEndAngle"_ustr) >>= nEndAngle;
CPPUNIT_ASSERT_EQUAL(sal_Int16(1512), nEndAngle);
}
}
CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testTdf161327_HatchAngle)
{
// Load document with four rectangles with linear hatch background fill
loadFromFile(u"tdf161327_HatchAngle.fodg");
// The hatch angle is given in file as
// [0] 585 unit less
// [1] 58.5deg,
// [2] 65grad,
// [3] 1.01201761241668rad
// The resulting angle should be 585 (meaning 1/10 of a degree) in all cases.
// Cases [1], [2] and [3] had angle 0 without fix.
for (size_t i = 0; i < 4; ++i)
{
uno::Reference<drawing::XShape> xShape(getShape(i));
uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
constexpr css::drawing::FillStyle eExpectedStyle = css::drawing::FillStyle_HATCH;
css::drawing::FillStyle aActualStyle;
xShapeProps->getPropertyValue(u"FillStyle"_ustr) >>= aActualStyle;
CPPUNIT_ASSERT_EQUAL(eExpectedStyle, aActualStyle);
sal_Int32 nExpectedAngle = 585; // FillHatch.Angle has data type 'long'
css::drawing::Hatch aActualHatch;
xShapeProps->getPropertyValue(u"FillHatch"_ustr) >>= aActualHatch;
CPPUNIT_ASSERT_EQUAL(nExpectedAngle, aActualHatch.Angle);
}
}
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/draw/sdpropls.cxx b/xmloff/source/draw/sdpropls.cxx
index 62235bf..ce07c078 100644
--- a/xmloff/source/draw/sdpropls.cxx
+++ b/xmloff/source/draw/sdpropls.cxx
@@ -65,6 +65,9 @@
#include <sax/tools/converter.hxx>
#include <xmlsdtypes.hxx>
#include <xmlprop.hxx>
#include <xmlbahdl.hxx>
#include <climits>
#include <algorithm>
using ::com::sun::star::uno::Any;
@@ -219,7 +222,7 @@ const XMLPropertyMapEntry aXMLSDProperties[] =
GMAP( PROP_D3DVerticalSegments, XML_NAMESPACE_DR3D, XML_VERTICAL_SEGMENTS, XML_TYPE_NUMBER, 0 ),
GMAP( PROP_D3DPercentDiagonal, XML_NAMESPACE_DR3D, XML_EDGE_ROUNDING, XML_TYPE_PERCENT, 0 ),
GMAP( PROP_D3DBackscale, XML_NAMESPACE_DR3D, XML_BACK_SCALE, XML_TYPE_PERCENT, 0 ),
GMAP( PROP_D3DEndAngle, XML_NAMESPACE_DR3D, XML_END_ANGLE, XML_TYPE_NUMBER, 0 ),
GMAP( PROP_D3DEndAngle, XML_NAMESPACE_DR3D, XML_END_ANGLE, XML_SD_TYPE_LATHE_ENDANGLE, 0 ),
GMAP( PROP_D3DDepth, XML_NAMESPACE_DR3D, XML_DEPTH, XML_TYPE_MEASURE, 0 ),
GMAP( PROP_D3DDoubleSided, XML_NAMESPACE_DR3D, XML_BACKFACE_CULLING, XML_SD_TYPE_BACKFACE_CULLING, 0 ),
@@ -990,7 +993,61 @@ public:
return true;
}
};
}
namespace
{
class XMLLatheEndAngleHdl : public XMLDoublePropHdl
{
public:
virtual bool importXML(const OUString& rStrImpValue, css::uno::Any& rValue,
const SvXMLUnitConverter& rUnitConverter) const override;
virtual bool exportXML(OUString& rStrExpValue, const css::uno::Any& rValue,
const SvXMLUnitConverter& rUnitConverter) const override;
};
}
bool XMLLatheEndAngleHdl::importXML(const OUString& rStrImpValue, uno::Any& rValue,
const SvXMLUnitConverter& rUC) const
{
// tdf#161327. We keep reading unit-less values as being in 1/10th of a degree for backward
// compatibility for now. Values with unit are interpreted correctly.
SAL_WARN_IF(
SvtSaveOptions::ODFSaneDefaultVersion::ODFSVER_013_EXTENDED < rUC.getSaneDefaultVersion(),
"xmloff.draw",
"Check whether parameter isWrongOOo10thDegAngle can be false for newer LO version.");
sal_Int16 nAngle; // Angles are limited to 'short' in UNO property D3DEndAngle.
bool const bRet = ::sax::Converter::convert10thDegAngle(nAngle, rStrImpValue, true);
if (bRet)
{
rValue <<= nAngle;
return true;
}
else
return false;
}
bool XMLLatheEndAngleHdl::exportXML(OUString& rStrExpValue, const uno::Any& rValue,
const SvXMLUnitConverter& rUC) const
{
sal_Int16 nAngle; // type of D3DEndAngle is 'short'.
bool bRet = rValue >>= nAngle;
if (bRet)
{
// tdf#161327. Adapt version to write unit deg, when most users have a LO version, that can
// read angle units. Write 1/10 of a degree for all versions for backward compatibility till
// then. Adapt test when LO writes a new default ODF version.
if (SvtSaveOptions::ODFSaneDefaultVersion::ODFSVER_013_EXTENDED
>= rUC.getSaneDefaultVersion())
rStrExpValue = OUString::number(nAngle); // wrong, but backward compatible
else
{
SAL_WARN("xmloff.draw", "Check whether writing unit is indeed possible now.");
double fAngle = static_cast<double>(nAngle) / 10.0;
rStrExpValue = OUString::number(fAngle) + "deg";
}
}
return bRet;
}
XMLSdPropHdlFactory::XMLSdPropHdlFactory( uno::Reference< frame::XModel > xModel, SvXMLImport& rImport )
@@ -1136,6 +1193,11 @@ const XMLPropertyHandler* XMLSdPropHdlFactory::GetPropertyHandler( sal_Int32 nTy
pHdl = new XMLEnumPropertyHdl( aXML_TexMode_EnumMap );
break;
}
case XML_SD_TYPE_LATHE_ENDANGLE:
{
pHdl = new XMLLatheEndAngleHdl;
break;
}
case XML_SD_TYPE_NUMBULLET:
{
uno::Reference<ucb::XAnyCompareFactory> xCompareFac( mxModel, uno::UNO_QUERY );
diff --git a/xmloff/source/style/GradientStyle.cxx b/xmloff/source/style/GradientStyle.cxx
index 2356075..3c6e8be 100644
--- a/xmloff/source/style/GradientStyle.cxx
+++ b/xmloff/source/style/GradientStyle.cxx
@@ -115,13 +115,24 @@ void XMLGradientStyleImport::importXML(
case XML_ELEMENT(DRAW, XML_GRADIENT_ANGLE):
{
auto const cmp12(m_rImport.GetODFVersion().compareTo(ODFVER_012_TEXT));
bool const bSuccess =
::sax::Converter::convertAngle(aGradient.Angle, aIter.toView(),
// tdf#89475 try to detect borked OOo angles
(cmp12 < 0) || (cmp12 == 0
&& (m_rImport.isGeneratorVersionOlderThan(SvXMLImport::AOO_4x, SvXMLImport::LO_7x)
// also for AOO 4.x, assume there won't ever be a 4.2
|| m_rImport.getGeneratorVersion() == SvXMLImport::AOO_4x)));
// tdf#89475 try to detect borked OOo angles
bool const bIsWrongOOo10thDegAngle(
(cmp12 < 0)
|| (cmp12 == 0
&& (m_rImport.isGeneratorVersionOlderThan(SvXMLImport::AOO_4x,
SvXMLImport::LO_7x)
// also for AOO 4.x, assume there won't ever be a 4.2
|| m_rImport.getGeneratorVersion() == SvXMLImport::AOO_4x)));
sal_Int16 nAngle;
bool const bSuccess = ::sax::Converter::convert10thDegAngle(
nAngle, aIter.toView(), bIsWrongOOo10thDegAngle);
if (bSuccess)
{ // limit to valid range [0..3600[
nAngle = nAngle % 3600;
if (nAngle < 0)
nAngle += 3600;
aGradient.Angle = nAngle;
}
SAL_INFO_IF(!bSuccess, "xmloff.style", "failed to import draw:angle");
}
break;
@@ -307,7 +318,12 @@ void XMLGradientStyleExport::exportXML(
// Angle
if( aGradient.GetGradientStyle() != awt::GradientStyle_RADIAL )
{
::sax::Converter::convertAngle(aOut, static_cast<sal_Int16>(aGradient.GetAngle()), m_rExport.getSaneDefaultVersion());
// true: wrong, but backward compatible with OOo/LO < 4.4
// false: OFFICE-3774 tdf#89475 write valid ODF 1.2 angle; needs LO 4.4 to import
bool bIsWrongOOo10thDegAngle(m_rExport.getSaneDefaultVersion() < SvtSaveOptions::ODFSVER_012
|| m_rExport.getSaneDefaultVersion() == SvtSaveOptions::ODFSVER_012_EXT_COMPAT);
::sax::Converter::convert10thDegAngle(aOut, static_cast<sal_Int16>(aGradient.GetAngle()),
bIsWrongOOo10thDegAngle);
aStrValue = aOut.makeStringAndClear();
m_rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_GRADIENT_ANGLE, aStrValue );
}
diff --git a/xmloff/source/style/HatchStyle.cxx b/xmloff/source/style/HatchStyle.cxx
index bc544c9..bf24da7 100644
--- a/xmloff/source/style/HatchStyle.cxx
+++ b/xmloff/source/style/HatchStyle.cxx
@@ -94,9 +94,19 @@ void XMLHatchStyleImport::importXML(
case XML_ELEMENT(DRAW, XML_ROTATION):
case XML_ELEMENT(DRAW_OOO, XML_ROTATION):
{
sal_Int32 nValue;
if (::sax::Converter::convertNumber(nValue, aIter.toView(), 0, 3600))
aHatch.Angle = sal_Int16(nValue);
// tdf#161327. We keep reading unit-less values as being in 1/10th of a degree for
// backward compatibility for now. Values with unit are imported correctly.
// For how to make it version dependend see import of XML_GRADIENT_ANGLE, for example.
sal_Int16 nAngle;
bool const bRet
= ::sax::Converter::convert10thDegAngle(nAngle, aIter.toView(), true);
if (bRet)
{ // limit to valid range [0..3600[
nAngle = nAngle % 3600;
if (nAngle < 0)
nAngle += 3600;
aHatch.Angle = nAngle;
}
break;
}
default:
@@ -166,7 +176,17 @@ void XMLHatchStyleExport::exportXML(
m_rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_DISTANCE, aStrValue );
// Angle
m_rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_ROTATION, OUString::number(aHatch.Angle) );
// tdf#161327. Start writing unit deg, when most users have a LO version, that can read angle
// units. Write 1/10 of a degree for all versions for backward compatibility till then.
// Adapt test when LO writes a new default ODF version.
SAL_WARN_IF(
SvtSaveOptions::ODFSaneDefaultVersion::ODFSVER_013_EXTENDED
< m_rExport.getSaneDefaultVersion(),
"xmloff.style",
"Check whether parameter isWrongOOo10thDegAngle can be false for newer LO version.");
::sax::Converter::convert10thDegAngle(aOut, aHatch.Angle, true);
aStrValue = aOut.makeStringAndClear();
m_rExport.AddAttribute(XML_NAMESPACE_DRAW, XML_ROTATION, aStrValue);
// Do Write
SvXMLElementExport rElem( m_rExport, XML_NAMESPACE_DRAW, XML_HATCH,
diff --git a/xmloff/source/style/PageMasterPropHdlFactory.cxx b/xmloff/source/style/PageMasterPropHdlFactory.cxx
index 1617584..378160e 100644
--- a/xmloff/source/style/PageMasterPropHdlFactory.cxx
+++ b/xmloff/source/style/PageMasterPropHdlFactory.cxx
@@ -22,7 +22,7 @@
#include <xmloff/xmlement.hxx>
#include <xmloff/xmltypes.hxx>
#include <xmloff/xmltoken.hxx>
#include "xmlbahdl.hxx"
#include <xmlbahdl.hxx>
#include <xmloff/NamedBoolPropertyHdl.hxx>
#include <XMLTextColumnsPropertyHandler.hxx>
#include <xmloff/XMLConstantsPropertyHandler.hxx>
diff --git a/xmloff/source/style/TransGradientStyle.cxx b/xmloff/source/style/TransGradientStyle.cxx
index 385c921..0cb88cb2 100644
--- a/xmloff/source/style/TransGradientStyle.cxx
+++ b/xmloff/source/style/TransGradientStyle.cxx
@@ -128,13 +128,24 @@ void XMLTransGradientStyleImport::importXML(
case XML_ELEMENT(DRAW, XML_GRADIENT_ANGLE):
{
auto const cmp12(rImport.GetODFVersion().compareTo(ODFVER_012_TEXT));
bool const bSuccess =
::sax::Converter::convertAngle(aGradient.Angle, aIter.toView(),
// tdf#89475 try to detect borked OOo angles
(cmp12 < 0) || (cmp12 == 0
&& (rImport.isGeneratorVersionOlderThan(SvXMLImport::AOO_4x, SvXMLImport::LO_7x)
// also for AOO 4.x, assume there won't ever be a 4.2
|| rImport.getGeneratorVersion() == SvXMLImport::AOO_4x)));
// tdf#89475 try to detect borked OOo angles
bool const bIsWrongOOo10thDegAngle(
(cmp12 < 0)
|| (cmp12 == 0
&& (rImport.isGeneratorVersionOlderThan(SvXMLImport::AOO_4x,
SvXMLImport::LO_7x)
// also for AOO 4.x, assume there won't ever be a 4.2
|| rImport.getGeneratorVersion() == SvXMLImport::AOO_4x)));
sal_Int16 nAngle;
bool const bSuccess = ::sax::Converter::convert10thDegAngle(
nAngle, aIter.toView(), bIsWrongOOo10thDegAngle);
if (bSuccess)
{ // limit to valid range [0..3600[
nAngle = nAngle % 3600;
if (nAngle < 0)
nAngle += 3600;
aGradient.Angle = nAngle;
}
SAL_INFO_IF(!bSuccess, "xmloff.style", "failed to import draw:angle");
}
break;
@@ -240,10 +251,15 @@ void XMLTransGradientStyleExport::exportXML(
// Angle
if (awt::GradientStyle_RADIAL != aGradient.GetGradientStyle())
{
::sax::Converter::convertAngle(aOut, aGradient.GetAngle().get(),
rExport.getSaneDefaultVersion());
// true: wrong, but backward compatible with OOo/LO < 4.4
// false: OFFICE-3774 tdf#89475 write valid ODF 1.2 angle; needs LO 4.4 to import
bool bIsWrongOOo10thDegAngle(rExport.getSaneDefaultVersion() < SvtSaveOptions::ODFSVER_012
|| rExport.getSaneDefaultVersion()
== SvtSaveOptions::ODFSVER_012_EXT_COMPAT);
::sax::Converter::convert10thDegAngle(aOut, aGradient.GetAngle().get(),
bIsWrongOOo10thDegAngle);
aStrValue = aOut.makeStringAndClear();
rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_GRADIENT_ANGLE, aStrValue );
rExport.AddAttribute(XML_NAMESPACE_DRAW, XML_GRADIENT_ANGLE, aStrValue);
}
// Border
diff --git a/xmloff/source/style/prhdlfac.cxx b/xmloff/source/style/prhdlfac.cxx
index a3ab329..a14d61e 100644
--- a/xmloff/source/style/prhdlfac.cxx
+++ b/xmloff/source/style/prhdlfac.cxx
@@ -30,7 +30,7 @@
#include <xmloff/xmltypes.hxx>
#include <xmloff/xmltoken.hxx>
#include <xmloff/xmlprhdl.hxx>
#include "xmlbahdl.hxx"
#include <xmlbahdl.hxx>
#include <xmloff/NamedBoolPropertyHdl.hxx>
#include <xmloff/XMLConstantsPropertyHandler.hxx>
#include "cdouthdl.hxx"
diff --git a/xmloff/source/style/xmlbahdl.cxx b/xmloff/source/style/xmlbahdl.cxx
index 36bc103..a0aea8c 100644
--- a/xmloff/source/style/xmlbahdl.cxx
+++ b/xmloff/source/style/xmlbahdl.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "xmlbahdl.hxx"
#include <xmlbahdl.hxx>
#include <XMLNumberWithAutoForVoidPropHdl.hxx>
#include <sal/log.hxx>