/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <drawingml/fontworkhelpers.hxx>
#include <basegfx/utils/bgradient.hxx>
#include <basegfx/utils/gradienttools.hxx>
#include <comphelper/propertysequence.hxx>
#include <comphelper/propertyvalue.hxx>
#include <comphelper/sequence.hxx>
#include <comphelper/sequenceashashmap.hxx>
#include <docmodel/uno/UnoComplexColor.hxx>
#include <docmodel/uno/UnoGradientTools.hxx>
#include <drawingml/customshapeproperties.hxx>
#include <drawingml/presetgeometrynames.hxx>
#include <oox/drawingml/drawingmltypes.hxx>
#include <oox/helper/grabbagstack.hxx>
#include <sal/log.hxx>
#include <svx/msdffdef.hxx>
#include <tools/color.hxx>
#include <tools/helpers.hxx>
#include <com/sun/star/awt/Gradient2.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/container/XEnumeration.hpp>
#include <com/sun/star/container/XEnumerationAccess.hpp>
#include <com/sun/star/drawing/DashStyle.hpp>
#include <com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.hpp>
#include <com/sun/star/drawing/EnhancedCustomShapeTextPathMode.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
#include <com/sun/star/drawing/LineCap.hpp>
#include <com/sun/star/drawing/LineDash.hpp>
#include <com/sun/star/drawing/LineJoint.hpp>
#include <com/sun/star/drawing/LineStyle.hpp>
#include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp>
#include <com/sun/star/drawing/XShape.hpp>
#include <com/sun/star/text/XText.hpp>
#include <com/sun/star/text/XTextRange.hpp>
#include <com/sun/star/util/XComplexColor.hpp>
#include <array>
#include <map>
using namespace com::sun::star;
void FontworkHelpers::resetPropertyValueInVec(std::vector<beans::PropertyValue>& 
;rPropVec,
const OUString& rName)
{
auto aIterator = std::find_if(
rPropVec.begin(), rPropVec.end(),
[rName](const beans::PropertyValue& rValue) { return rValue.Name == rName; });
if (aIterator != rPropVec.end())
rPropVec.erase(aIterator);
}
void FontworkHelpers::putCustomShapeIntoTextPathMode(
const css::uno::Reference<drawing::XShape>& xShape,
const oox::drawingml::CustomShapePropertiesPtr& pCustomShapePropertiesPtr,
const OUString& sMSPresetType, const bool bFromWordArt)
{
if (!xShape.is() || !pCustomShapePropertiesPtr || sMSPresetType == u"textNoShape" )
return ;
uno::Reference<drawing::XEnhancedCustomShapeDefaulter> xDefaulter(xShape, uno::UNO_QUERY);
if (!xDefaulter.is())
return ;
uno::Reference<beans::XPropertySet> xSet(xShape, uno::UNO_QUERY);
if (!xSet.is())
return ;
// The DrawingML shapes from the presetTextWarpDefinitions are mapped to the definitions
// in svx/../EnhancedCustomShapeGeometry.cxx, which are used for WordArt shapes from
// binary MS Office. Therefore all adjustment values need to be adapted.
const OUString sFontworkType = PresetGeometryTypeNames::GetFontworkType(sMSPresetType);
auto aAdjGdList = pCustomShapePropertiesPtr->getAdjustmentGuideList();
uno::Sequence<drawing::EnhancedCustomShapeAdjustmentValue> aAdjustment(
!aAdjGdList.empty() ? aAdjGdList.size() : 1);
auto pAdjustment = aAdjustment.getArray();
int nIndex = 0;
for (const auto & aEntry : aAdjGdList)
{
double fValue = aEntry.maFormula.toDouble();
// then: polar-handle, else: XY-handle
// There exist only 8 polar-handles at all in presetTextWarp.
if ((sFontworkType == "fontwork-arch-down-curve" )
|| (sFontworkType == "fontwork-arch-down-pour" && aEntry.maName == "adj1" )
|| (sFontworkType == "fontwork-arch-up-curve" )
|| (sFontworkType == "fontwork-arch-up-pour" && aEntry.maName == "adj1" )
|| (sFontworkType == "fontwork-open-circle-curve" )
|| (sFontworkType == "fontwork-open-circle-pour" && aEntry.maName == "adj1" )
|| (sFontworkType == "fontwork-circle-curve" )
|| (sFontworkType == "fontwork-circle-pour" && aEntry.maName == "adj1" ))
{
// DrawingML has 1/60000 degree unit, but WordArt simple degree. Range [0..360[
// or range ]-180..180] doesn't matter, because only cos(angle) and
// sin(angle) are used.
fValue = NormAngle360(fValue / 60000.0);
}
else
{
// DrawingML writes adjustment guides as relative value with 100% = 100000,
// but WordArt definitions use values absolute in viewBox 0 0 21600 21600,
// so scale with 21600/100000 = 0.216, with two exceptions:
// X-handles of waves describe increase/decrease relative to horizontal center.
// The gdRefR of pour-shapes is not relative to viewBox but to radius.
if ((sFontworkType == "mso-spt158" && aEntry.maName == "adj2" ) // textDoubleWave1
|| (sFontworkType == "fontwork-wave" && aEntry.maName == "adj2" ) // textWave1
|| (sFontworkType == "mso-spt157" && aEntry.maName == "adj2" ) // textWave2
|| (sFontworkType == "mso-spt159" && aEntry.maName == "adj2" )) // textWave4
{
fValue = (fValue + 50000.0) * 0.216;
}
else if ((sFontworkType == "fontwork-arch-down-pour" && aEntry.maName == "adj2" )
|| (sFontworkType == "fontwork-arch-up-pour" && aEntry.maName == "adj2" )
|| (sFontworkType == "fontwork-open-circle-pour" && aEntry.maName == "adj2" )
|| (sFontworkType == "fontwork-circle-pour" && aEntry.maName == "adj2" ))
{
fValue *= 0.108;
}
else
{
fValue *= 0.216;
}
}
pAdjustment[nIndex].Value <<= fValue;
pAdjustment[nIndex++].State = css::beans::PropertyState_DIRECT_VALUE;
}
// Set attributes in CustomShapeGeometry
xDefaulter->createCustomShapeDefaults(sFontworkType);
auto aGeomPropSeq = xSet->getPropertyValue(u"CustomShapeGeometry" _ustr)
.get<uno::Sequence<beans::PropertyValue>>();
auto aGeomPropVec
= comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>(aGeomPropSeq);
// Reset old properties
static constexpr OUString sTextPath(u"TextPath" _ustr);
static constexpr OUString sAdjustmentValues(u"AdjustmentValues" _ustr);
static constexpr OUString sPresetTextWarp(u"PresetTextWarp" _ustr);
resetPropertyValueInVec(aGeomPropVec, u"CoordinateSize" _ustr);
resetPropertyValueInVec(aGeomPropVec, u"Equations" _ustr);
resetPropertyValueInVec(aGeomPropVec, u"Path" _ustr);
resetPropertyValueInVec(aGeomPropVec, sAdjustmentValues);
resetPropertyValueInVec(aGeomPropVec, u"ViewBox" _ustr);
resetPropertyValueInVec(aGeomPropVec, u"Handles" _ustr);
resetPropertyValueInVec(aGeomPropVec, sTextPath);
resetPropertyValueInVec(aGeomPropVec, sPresetTextWarp);
bool bScaleX(false );
if (!bFromWordArt
&& (sMSPresetType == u"textArchDown" || sMSPresetType == u"textArchUp"
|| sMSPresetType == u"textCircle" || sMSPresetType == u"textButton" ))
{
bScaleX = true ;
}
// Apply new properties
uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence(
{ { sTextPath, uno::Any(true ) },
{ u"TextPathMode" _ustr, uno::Any(drawing::EnhancedCustomShapeTextPathMode_PATH) },
{ u"ScaleX" _ustr, uno::Any(bScaleX) } }));
aGeomPropVec.push_back(comphelper::makePropertyValue(sTextPath, aPropertyValues));
aGeomPropVec.push_back(comphelper::makePropertyValue(sPresetTextWarp, sMSPresetType));
if (!aAdjGdList.empty())
{
aGeomPropVec.push_back(comphelper::makePropertyValue(sAdjustmentValues, aAdjustment));
}
xSet->setPropertyValue(u"CustomShapeGeometry" _ustr,
uno::Any(comphelper::containerToSequence(aGeomPropVec)));
}
OString FontworkHelpers::GetVMLFontworkShapetypeMarkup(const MSO_SPT eShapeType)
{
// The markup is taken from VML in DOCX documents. Using the generated 'vml-shape-types' file
// does not work.
static const std::map<MSO_SPT, OString> aTypeToMarkupMap{
{ mso_sptTextSimple,
"_x0000_t24\" coordsize=\" 21600,21600\" o:spt=\" 24\" adj=\" 10800\" "
"path=\" m@7,l@8,m@5,21600l@6,21600e\">sum #0 0 10800\"/>
"eqn=\" prod #0 2 1\"/>sum 21600 0 @1\"/>sum 0 0 @2\"/>
"eqn=\" sum 21600 0 @3\"/>if @0 @3 0\"/>if @0 21600 @1\"/>
"eqn=\" if @0 0 @2\"/>if @0 @4 21600\"/>mid @5 @6\"/>mid "
"@8 @5\" /><v:f eqn=\"mid @7 @8\" /><v:f eqn=\"mid @6 @7\" /><v:f eqn=\"sum @6 0 "
"@5\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" @9,0;@10,10800;@11,21600;@12,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" #0 ,bottomRight\" xrange=\" 6629,14971\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextOctagon,
"_x0000_t25\" coordsize=\" 21600,21600\" o:spt=\" 25\" adj=\" 4800\" "
"path=\" m0@0l7200,r7200,l21600@0m0@1l7200,21600r7200,l21600@1e\">
"eqn=\" val #0 \"/>sum 21600 0 @0\"/> t\" "
"o:connecttype=\" rect\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 3086,10800\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextHexagon,
"_x0000_t26\" coordsize=\" 21600,21600\" o:spt=\" 26\" adj=\" 10800\" "
"path=\" m0@0l10800,,21600@0m,21600r10800,l21600,21600e\">val "
"#0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum @1 10800 0\" /><v:f eqn=\"sum 21600 0 "
"@1\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,0;5400,@1;10800,21600;16200,@1\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 0,21600\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextCurve,
"_x0000_t27\" coordsize=\" 21600,21600\" o:spt=\" 27\" adj=\" 3086\" "
"path=\" m,qy10800@0,21600,m0@1qy10800,21600,21600@1e\">val "
"#0\" /><v:f eqn=\"sum 21600 0 #0\" /><v:f eqn=\"prod @1 1 2\" /><v:f eqn=\"sum @2 10800 "
"0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@0;0,@2;10800,21600;21600,@2\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" center,#0 \" yrange=\" 0,7200\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextWave,
"_x0000_t28\" coordsize=\" 21600,21600\" o:spt=\" 28\" "
"adj=\" 2809,10800\" "
"path=\" m@25@0c@26@3@27@1@28@0m@21@4c@22@5@23@6@24@4e\">val "
"#0\" /><v:f eqn=\"prod @0 41 9\" /><v:f eqn=\"prod @0 23 9\" /><v:f eqn=\"sum 0 0 "
"@2\" /><v:f eqn=\"sum 21600 0 #0\" /><v:f eqn=\"sum 21600 0 @1\" /><v:f eqn=\"sum 21600 0 "
"@3\" /><v:f eqn=\"sum #1 0 10800\" /><v:f eqn=\"sum 21600 0 #1\" /><v:f eqn=\"prod @8 2 "
"3\" /><v:f eqn=\"prod @8 4 3\" /><v:f eqn=\"prod @8 2 1\" /><v:f eqn=\"sum 21600 0 "
"@9\" /><v:f eqn=\"sum 21600 0 @10\" /><v:f eqn=\"sum 21600 0 @11\" /><v:f eqn=\"prod #1 2 "
"3\" /><v:f eqn=\"prod #1 4 3\" /><v:f eqn=\"prod #1 2 1\" /><v:f eqn=\"sum 21600 0 "
"@15\" /><v:f eqn=\"sum 21600 0 @16\" /><v:f eqn=\"sum 21600 0 @17\" /><v:f eqn=\"if @7 @14 "
"0\" /><v:f eqn=\"if @7 @13 @15\" /><v:f eqn=\"if @7 @12 @16\" /><v:f eqn=\"if @7 21600 "
"@17\" /><v:f eqn=\"if @7 0 @20\" /><v:f eqn=\"if @7 @9 @19\" /><v:f eqn=\"if @7 @10 "
"@18\" /><v:f eqn=\"if @7 @11 21600\" /><v:f eqn=\"sum @24 0 @21\" /><v:f eqn=\"sum @4 0 "
"@0\" /><v:f eqn=\"max @21 @25\" /><v:f eqn=\"min @24 @28\" /><v:f eqn=\"prod @0 2 "
"1\" /><v:f eqn=\"sum 21600 0 @33\" /><v:f eqn=\"mid @26 @27\" /><v:f eqn=\"mid @24 "
"@28\" /><v:f eqn=\"mid @22 @23\" /><v:f eqn=\"mid @21 @25\" /></v:formulas><v:path "
"textpathok=\" t\" o:connecttype=\" custom\" "
"o:connectlocs=\" @35,@0;@38,10800;@37,@4;@36,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>topLeft,#0 \" yrange=\" 0,4459\"/>
"position=\" #1 ,bottomRight\" xrange=\" 8640,12960\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextRing,
"_x0000_t29\" coordsize=\" 21600,21600\" o:spt=\" 29\" "
"adj=\" 11796480,5400\" "
"path=\" al10800,10800,10800,10800@2@14al10800,10800@0@0@2@14e\">
"eqn=\" val #1 \"/>val #0 \"/>sum 0 0 #0 \"/>sumangle #0 0 "
"180\" /><v:f eqn=\"sumangle #0 0 90\" /><v:f eqn=\"prod @4 2 1\" /><v:f eqn=\"sumangle #0 "
"90 0\" /><v:f eqn=\"prod @6 2 1\" /><v:f eqn=\"abs #0\" /><v:f eqn=\"sumangle @8 0 "
"90\" /><v:f eqn=\"if @9 @7 @5\" /><v:f eqn=\"sumangle @10 0 360\" /><v:f eqn=\"if @10 @11 "
"@10\" /><v:f eqn=\"sumangle @12 0 360\" /><v:f eqn=\"if @12 @13 @12\" /><v:f eqn=\"sum 0 0 "
"@14\" /><v:f eqn=\"val 10800\" /><v:f eqn=\"sum 10800 0 #1\" /><v:f eqn=\"prod #1 1 "
"2\" /><v:f eqn=\"sum @18 5400 0\" /><v:f eqn=\"cos @19 #0\" /><v:f eqn=\"sin @19 "
"#0\" /><v:f eqn=\"sum @20 10800 0\" /><v:f eqn=\"sum @21 10800 0\" /><v:f eqn=\"sum 10800 "
"0 @20\" /><v:f eqn=\"sum #1 10800 0\" /><v:f eqn=\"if @9 @17 @25\" /><v:f eqn=\"if @9 0 "
"21600\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@27;@22,@23;10800,@26;@24,@23\"/>t\" "
"fitshape=\" t\"/>#1 ,#0 \" polar=\" 10800,10800\" "
"radiusrange=\" 0,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextOnCurve,
"_x0000_t30\" coordsize=\" 21600,21600\" o:spt=\" 30\" adj=\" 3086\" "
"path=\" m,qy10800@0,21600,m0@1qy10800,21600,21600@1e\">val "
"#0\" /><v:f eqn=\"sum 21600 0 #0\" /><v:f eqn=\"prod @1 1 2\" /><v:f eqn=\"sum @2 10800 "
"0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@0;0,@2;10800,21600;21600,@2\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" center,#0 \" yrange=\" 0,7200\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextOnRing,
"_x0000_t31\" coordsize=\" 21600,21600\" o:spt=\" 31\" adj=\" 11796480\" "
"path=\" al10800,10800,10800,10800@2@14e\">val #1 \"/>
"eqn=\" val #0 \"/>sum 0 0 #0 \"/>sumangle #0 0 180\"/>
"eqn=\" sumangle #0 0 90\"/>prod @4 2 1\"/>sumangle #0 90 0\"/>
"eqn=\" prod @6 2 1\"/>abs #0 \"/>sumangle @8 0 90\"/>if "
"@9 @7 @5\" /><v:f eqn=\"sumangle @10 0 360\" /><v:f eqn=\"if @10 @11 @10\" /><v:f "
"eqn=\" sumangle @12 0 360\"/>if @12 @13 @12\"/>sum 0 0 @14\"/>
"eqn=\" val 10800\"/>cos 10800 #0 \"/>sin 10800 #0 \"/>sum "
"@17 10800 0\" /><v:f eqn=\"sum @18 10800 0\" /><v:f eqn=\"sum 10800 0 @17\" /><v:f "
"eqn=\" if @9 0 21600\"/>sum 10800 0 @18\"/>
"textpathok=\" t\" o:connecttype=\" custom\" "
"o:connectlocs=\" 10800,@22;@19,@20;@21,@20\"/>t\" "
"style=\" v-text-kern:t\" fitpath=\" t\"/>@16,#0 \" "
"polar=\" 10800,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextPlainText,
"_x0000_t136\" coordsize=\" 21600,21600\" o:spt=\" 136\" adj=\" 10800\" "
"path=\" m@7,l@8,m@5,21600l@6,21600e\">sum #0 0 10800\"/>
"eqn=\" prod #0 2 1\"/>sum 21600 0 @1\"/>sum 0 0 @2\"/>
"eqn=\" sum 21600 0 @3\"/>if @0 @3 0\"/>if @0 21600 @1\"/>
"eqn=\" if @0 0 @2\"/>if @0 @4 21600\"/>mid @5 @6\"/>mid "
"@8 @5\" /><v:f eqn=\"mid @7 @8\" /><v:f eqn=\"mid @6 @7\" /><v:f eqn=\"sum @6 0 "
"@5\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" @9,0;@10,10800;@11,21600;@12,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" #0 ,bottomRight\" xrange=\" 6629,14971\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextStop,
"_x0000_t137\" coordsize=\" 21600,21600\" o:spt=\" 137\" adj=\" 4800\" "
"path=\" m0@0l7200,r7200,l21600@0m0@1l7200,21600r7200,l21600@1e\">
"eqn=\" val #0 \"/>sum 21600 0 @0\"/> t\" "
"o:connecttype=\" rect\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 3086,10800\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextTriangle,
"_x0000_t138\" coordsize=\" 21600,21600\" o:spt=\" 138\" adj=\" 10800\" "
"path=\" m0@0l10800,,21600@0m,21600r10800,l21600,21600e\">val "
"#0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum @1 10800 0\" /><v:f eqn=\"sum 21600 0 "
"@1\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,0;5400,@1;10800,21600;16200,@1\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 0,21600\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextTriangleInverted,
"_x0000_t139\" coordsize=\" 21600,21600\" o:spt=\" 139\" adj=\" 10800\" "
"path=\" m,l10800,,21600,m0@0l10800,21600,21600@0e\">val "
"#0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum @1 10800 0\" /><v:f eqn=\"sum 21600 0 "
"@1\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,0;5400,@2;10800,21600;16200,@2\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 0,21600\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextChevron,
"_x0000_t140\" coordsize=\" 21600,21600\" o:spt=\" 140\" adj=\" 5400\" "
"path=\" m0@0l10800,,21600@0m,21600l10800@1,21600,21600e\">val "
"#0\" /><v:f eqn=\"sum 21600 0 @0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum @2 10800 "
"0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,0;0,@3;10800,@1;21600,@3\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 0,10800\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextChevronInverted,
"_x0000_t141\" coordsize=\" 21600,21600\" o:spt=\" 141\" adj=\" 16200\" "
"path=\" m,l10800@1,21600,m0@0l10800,21600,21600@0e\">val "
"#0\" /><v:f eqn=\"sum 21600 0 @0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum @2 10800 "
"0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@1;0,@2;10800,21600;21600,@2\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 10800,21600\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextRingInside,
"_x0000_t142\" coordsize=\" 21600,21600\" o:spt=\" 142\" adj=\" 13500\" "
"path=\" m0@1qy10800,,21600@1,10800@0,0@1m0@2qy10800@3,21600@2,10800,21600,0@2e\">
"formulas>val #0 \"/>prod #0 1 2\"/>sum height 0 "
"@1\" /><v:f eqn=\"sum height 0 #0\" /><v:f eqn=\"sum @2 0 @1\" /></v:formulas><v:path "
"textpathok=\" t\" o:connecttype=\" custom\" "
"o:connectlocs=\" 10800,0;10800,@0;0,10800;10800,21600;10800,@3;21600,10800\" "
"o:connectangles=\" 270,270,180,90,90,0\"/>t\" "
"fitshape=\" t\"/>center,#0 \" "
"yrange=\" 10800,21600\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextRingOutside,
"_x0000_t143\" coordsize=\" 21600,21600\" o:spt=\" 143\" adj=\" 13500\" "
"path=\" m0@1qy10800@0,21600@1,10800,,0@1m0@2qy10800,21600,21600@2,10800@3,0@2e\">
"formulas>val #0 \"/>prod #0 1 2\"/>sum height 0 "
"@1\" /><v:f eqn=\"sum height 0 #0\" /><v:f eqn=\"sum @2 0 @1\" /></v:formulas><v:path "
"textpathok=\" t\" o:connecttype=\" custom\" "
"o:connectlocs=\" 10800,0;10800,@0;0,10800;10800,21600;10800,@3;21600,10800\" "
"o:connectangles=\" 270,270,180,90,90,0\"/>t\" "
"fitshape=\" t\"/>center,#0 \" "
"yrange=\" 10800,21600\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextArchUpCurve,
"_x0000_t144\" coordsize=\" 21600,21600\" o:spt=\" 144\" "
"adj=\" 11796480\" path=\" al10800,10800,10800,10800@2@14e\">val "
"#1\" /><v:f eqn=\"val #0\" /><v:f eqn=\"sum 0 0 #0\" /><v:f eqn=\"sumangle #0 0 "
"180\" /><v:f eqn=\"sumangle #0 0 90\" /><v:f eqn=\"prod @4 2 1\" /><v:f eqn=\"sumangle #0 "
"90 0\" /><v:f eqn=\"prod @6 2 1\" /><v:f eqn=\"abs #0\" /><v:f eqn=\"sumangle @8 0 "
"90\" /><v:f eqn=\"if @9 @7 @5\" /><v:f eqn=\"sumangle @10 0 360\" /><v:f eqn=\"if @10 @11 "
"@10\" /><v:f eqn=\"sumangle @12 0 360\" /><v:f eqn=\"if @12 @13 @12\" /><v:f eqn=\"sum 0 0 "
"@14\" /><v:f eqn=\"val 10800\" /><v:f eqn=\"cos 10800 #0\" /><v:f eqn=\"sin 10800 "
"#0\" /><v:f eqn=\"sum @17 10800 0\" /><v:f eqn=\"sum @18 10800 0\" /><v:f eqn=\"sum 10800 "
"0 @17\" /><v:f eqn=\"if @9 0 21600\" /><v:f eqn=\"sum 10800 0 @18\" /></v:formulas><v:path "
"textpathok=\" t\" o:connecttype=\" custom\" "
"o:connectlocs=\" 10800,@22;@19,@20;@21,@20\"/>t\" "
"style=\" v-text-kern:t\" fitpath=\" t\"/>@16,#0 \" "
"polar=\" 10800,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextArchDownCurve,
"_x0000_t145\" coordsize=\" 21600,21600\" o:spt=\" 145\" "
"path=\" al10800,10800,10800,10800@3@15e\">val #1 \"/>
"eqn=\" val #0 \"/>sum 0 0 #0 \"/>sumangle #0 0 180\"/>
"eqn=\" sumangle #0 0 90\"/>prod @4 2 1\"/>sumangle #0 90 0\"/>
"eqn=\" prod @6 2 1\"/>abs #0 \"/>sumangle @8 0 90\"/>if "
"@9 @7 @5\" /><v:f eqn=\"sumangle @10 0 360\" /><v:f eqn=\"if @10 @11 @10\" /><v:f "
"eqn=\" sumangle @12 0 360\"/>if @12 @13 @12\"/>sum 0 0 @14\"/>
"eqn=\" val 10800\"/>cos 10800 #0 \"/>sin 10800 #0 \"/>sum "
"@17 10800 0\" /><v:f eqn=\"sum @18 10800 0\" /><v:f eqn=\"sum 10800 0 @17\" /><v:f "
"eqn=\" if @9 0 21600\"/>sum 10800 0 @18\"/>
"textpathok=\" t\" o:connecttype=\" custom\" "
"o:connectlocs=\" 10800,@22;@19,@20;@21,@20\"/>t\" "
"style=\" v-text-kern:t\" fitpath=\" t\"/>@16,#0 \" "
"polar=\" 10800,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextCircleCurve,
"_x0000_t146\" coordsize=\" 21600,21600\" o:spt=\" 146\" "
"adj=\" -11730944\" path=\" al10800,10800,10800,10800@2@5e\">val "
"#1\" /><v:f eqn=\"val #0\" /><v:f eqn=\"sum 0 0 #0\" /><v:f eqn=\"prod #0 2 1\" /><v:f "
"eqn=\" sumangle @3 0 360\"/>if @3 @4 @3\"/>val 10800\"/>
"eqn=\" cos 10800 #0 \"/>sin 10800 #0 \"/>sum @7 10800 0\"/>
"eqn=\" sum @8 10800 0\"/>sum 10800 0 @8\"/>if #0 0 "
"21600\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" @12,10800;@9,@10;@9,@11\"/>t\" style=\" v-text-kern:t\" "
"fitpath=\" t\"/>@6,#0 \" "
"polar=\" 10800,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextButtonCurve,
"_x0000_t147\" coordsize=\" 21600,21600\" o:spt=\" 147\" "
"adj=\" 11796480\" "
"path=\" al10800,10800,10800,10800@2@14m,10800r21600,al10800,10800,10800,10800@1@15e\">
"formulas>val #1 \"/>val #0 \"/>sum 0 0 #0 \"/>
"eqn=\" sumangle #0 0 180\"/>sumangle #0 0 90\"/>prod @4 2 "
"1\" /><v:f eqn=\"sumangle #0 90 0\" /><v:f eqn=\"prod @6 2 1\" /><v:f eqn=\"abs #0\" /><v:f "
"eqn=\" sumangle @8 0 90\"/>if @9 @7 @5\"/>sumangle @10 0 "
"360\" /><v:f eqn=\"if @10 @11 @10\" /><v:f eqn=\"sumangle @12 0 360\" /><v:f eqn=\"if @12 "
"@13 @12\" /><v:f eqn=\"sum 0 0 @14\" /><v:f eqn=\"val 10800\" /><v:f eqn=\"cos 10800 "
"#0\" /><v:f eqn=\"sin 10800 #0\" /><v:f eqn=\"sum @17 10800 0\" /><v:f eqn=\"sum @18 10800 "
"0\" /><v:f eqn=\"sum 10800 0 @17\" /><v:f eqn=\"if @9 0 21600\" /><v:f eqn=\"sum 10800 0 "
"@18\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,0;@19,@20;@21,@20;10800,10800;0,10800;21600,10800;10800,21600;@19,"
"@23;@21,@23\" /><v:textpath on=\"t\" style=\"v-text-kern:t\" "
"fitpath=\" t\"/>@16,#0 \" "
"polar=\" 10800,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextArchUpPour,
"_x0000_t148\" coordsize=\" 21600,21600\" o:spt=\" 148\" "
"adj=\" 11796480,5400\" "
"path=\" al10800,10800,10800,10800@2@14al10800,10800@0@0@2@14e\">
"eqn=\" val #1 \"/>val #0 \"/>sum 0 0 #0 \"/>sumangle #0 0 "
"180\" /><v:f eqn=\"sumangle #0 0 90\" /><v:f eqn=\"prod @4 2 1\" /><v:f eqn=\"sumangle #0 "
"90 0\" /><v:f eqn=\"prod @6 2 1\" /><v:f eqn=\"abs #0\" /><v:f eqn=\"sumangle @8 0 "
"90\" /><v:f eqn=\"if @9 @7 @5\" /><v:f eqn=\"sumangle @10 0 360\" /><v:f eqn=\"if @10 @11 "
"@10\" /><v:f eqn=\"sumangle @12 0 360\" /><v:f eqn=\"if @12 @13 @12\" /><v:f eqn=\"sum 0 0 "
"@14\" /><v:f eqn=\"val 10800\" /><v:f eqn=\"sum 10800 0 #1\" /><v:f eqn=\"prod #1 1 "
"2\" /><v:f eqn=\"sum @18 5400 0\" /><v:f eqn=\"cos @19 #0\" /><v:f eqn=\"sin @19 "
"#0\" /><v:f eqn=\"sum @20 10800 0\" /><v:f eqn=\"sum @21 10800 0\" /><v:f eqn=\"sum 10800 "
"0 @20\" /><v:f eqn=\"sum #1 10800 0\" /><v:f eqn=\"if @9 @17 @25\" /><v:f eqn=\"if @9 0 "
"21600\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@27;@22,@23;10800,@26;@24,@23\"/>t\" "
"fitshape=\" t\"/>#1 ,#0 \" polar=\" 10800,10800\" "
"radiusrange=\" 0,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextArchDownPour,
"_x0000_t149\" coordsize=\" 21600,21600\" o:spt=\" 149\" adj=\" ,5400\" "
"path=\" al10800,10800@0@0@3@15al10800,10800,10800,10800@3@15e\">
"eqn=\" val #1 \"/>val #0 \"/>sum 0 0 #0 \"/>sumangle #0 0 "
"180\" /><v:f eqn=\"sumangle #0 0 90\" /><v:f eqn=\"prod @4 2 1\" /><v:f eqn=\"sumangle #0 "
"90 0\" /><v:f eqn=\"prod @6 2 1\" /><v:f eqn=\"abs #0\" /><v:f eqn=\"sumangle @8 0 "
"90\" /><v:f eqn=\"if @9 @7 @5\" /><v:f eqn=\"sumangle @10 0 360\" /><v:f eqn=\"if @10 @11 "
"@10\" /><v:f eqn=\"sumangle @12 0 360\" /><v:f eqn=\"if @12 @13 @12\" /><v:f eqn=\"sum 0 0 "
"@14\" /><v:f eqn=\"val 10800\" /><v:f eqn=\"sum 10800 0 #1\" /><v:f eqn=\"prod #1 1 "
"2\" /><v:f eqn=\"sum @18 5400 0\" /><v:f eqn=\"cos @19 #0\" /><v:f eqn=\"sin @19 "
"#0\" /><v:f eqn=\"sum @20 10800 0\" /><v:f eqn=\"sum @21 10800 0\" /><v:f eqn=\"sum 10800 "
"0 @20\" /><v:f eqn=\"sum #1 10800 0\" /><v:f eqn=\"if @9 @17 @25\" /><v:f eqn=\"if @9 0 "
"21600\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@27;@22,@23;10800,@26;@24,@23\"/>t\" "
"fitshape=\" t\"/>#1 ,#0 \" polar=\" 10800,10800\" "
"radiusrange=\" 0,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextCirclePour,
"_x0000_t150\" coordsize=\" 21600,21600\" o:spt=\" 150\" "
"adj=\" -11730944,5400\" "
"path=\" al10800,10800,10800,10800@2@5al10800,10800@0@0@2@5e\">val "
"#1\" /><v:f eqn=\"val #0\" /><v:f eqn=\"sum 0 0 #0\" /><v:f eqn=\"prod #0 2 1\" /><v:f "
"eqn=\" sumangle @3 0 360\"/>if @3 @4 @3\"/>val 10800\"/>
"eqn=\" sum 10800 0 #1 \"/>prod #1 1 2\"/>sum @8 5400 0\"/>
"eqn=\" cos @9 #0 \"/>sin @9 #0 \"/>sum @10 10800 0\"/>sum "
"@11 10800 0\" /><v:f eqn=\"sum 10800 0 @11\" /><v:f eqn=\"sum #1 10800 0\" /><v:f eqn=\"if "
"#0 @7 @15\" /><v:f eqn=\"if #0 0 21600\" /></v:formulas><v:path textpathok=\"t\" "
"o:connecttype=\" custom\" "
"o:connectlocs=\" @17,10800;@12,@13;@16,10800;@12,@14\"/>t\" "
"fitshape=\" t\"/>#1 ,#0 \" polar=\" 10800,10800\" "
"radiusrange=\" 0,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextButtonPour,
"_x0000_t151\" coordsize=\" 21600,21600\" o:spt=\" 151\" "
"adj=\" 11796480,5400\" "
"path=\" al10800,10800,10800,10800@2@14al10800,10800@0@0@2@14m@25@17l@26@17m@25@18l@26@"
"18al10800,10800@0@0@1@15al10800,10800,10800,10800@1@15e\" ><v:formulas><v:f eqn=\"val "
"#1\" /><v:f eqn=\"val #0\" /><v:f eqn=\"sum 0 0 #0\" /><v:f eqn=\"sumangle #0 0 "
"180\" /><v:f eqn=\"sumangle #0 0 90\" /><v:f eqn=\"prod @4 2 1\" /><v:f eqn=\"sumangle #0 "
"90 0\" /><v:f eqn=\"prod @6 2 1\" /><v:f eqn=\"abs #0\" /><v:f eqn=\"sumangle @8 0 "
"90\" /><v:f eqn=\"if @9 @7 @5\" /><v:f eqn=\"sumangle @10 0 360\" /><v:f eqn=\"if @10 @11 "
"@10\" /><v:f eqn=\"sumangle @12 0 360\" /><v:f eqn=\"if @12 @13 @12\" /><v:f eqn=\"sum 0 0 "
"@14\" /><v:f eqn=\"sum #1 10800 0\" /><v:f eqn=\"prod @16 1 2\" /><v:f eqn=\"sum 21600 0 "
"@17\" /><v:f eqn=\"sum 10800 0 #1\" /><v:f eqn=\"prod @19 1 2\" /><v:f eqn=\"prod @20 @20 "
"1\" /><v:f eqn=\"prod #1 #1 1\" /><v:f eqn=\"sum @22 0 @21\" /><v:f eqn=\"sqrt @23\" /><v:f "
"eqn=\" sum 10800 0 @24\"/>sum @24 10800 0\"/>val 10800\"/>
"eqn=\" cos @17 #0 \"/>sin @17 #0 \"/>sum @28 10800 0\"/>
"eqn=\" sum @29 10800 0\"/>sum 10800 0 @28\"/>sum 10800 0 "
"@29\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,0;@30,@31;10800,@19;@32,@31;10800,@17;@25,10800;10800,@18;@26,"
"10800;10800,@16;@30,@33;10800,21600;@32,@33\" /><v:textpath on=\"t\" "
"fitshape=\" t\"/>#1 ,#0 \" polar=\" 10800,10800\" "
"radiusrange=\" 4320,10800\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextCurveUp,
"_x0000_t152\" coordsize=\" 21600,21600\" o:spt=\" 152\" adj=\" 9931\" "
"path=\" m0@0c7200@2,14400@1,21600,m0@5c7200@6,14400@6,21600@5e\">
"eqn=\" val #0 \"/>prod #0 3 4\"/>prod #0 5 4\"/>prod #0 "
"3 8\" /><v:f eqn=\"prod #0 1 8\" /><v:f eqn=\"sum 21600 0 @3\" /><v:f eqn=\"sum @4 21600 "
"0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"prod @5 1 2\" /><v:f eqn=\"sum @7 @8 0\" /><v:f "
"eqn=\" prod #0 7 8\"/>prod @5 1 3\"/>sum @1 @2 0\"/>sum "
"@12 @0 0\" /><v:f eqn=\"prod @13 1 4\" /><v:f eqn=\"sum @11 14400 "
"@14\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@10;0,@9;10800,21600;21600,@8\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>topLeft,#0 \" "
"yrange=\" 0,12169\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextCurveDown,
"_x0000_t153\" coordsize=\" 21600,21600\" o:spt=\" 153\" adj=\" 9391\" "
"path=\" m,c7200@1,14400@2,21600@0m0@5c7200@6,14400@6,21600@5e\">
"eqn=\" val #0 \"/>prod #0 3 4\"/>prod #0 5 4\"/>prod #0 "
"3 8\" /><v:f eqn=\"prod #0 1 8\" /><v:f eqn=\"sum 21600 0 @3\" /><v:f eqn=\"sum @4 21600 "
"0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"prod @5 1 2\" /><v:f eqn=\"sum @7 @8 0\" /><v:f "
"eqn=\" prod #0 7 8\"/>prod @5 1 3\"/>sum @1 @2 0\"/>sum "
"@12 @0 0\" /><v:f eqn=\"prod @13 1 4\" /><v:f eqn=\"sum @11 14400 "
"@14\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@10;0,@8;10800,21600;21600,@9\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>bottomRight,#0 \" "
"yrange=\" 0,11368\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextCascadeUp,
"_x0000_t154\" coordsize=\" 21600,21600\" o:spt=\" 154\" adj=\" 9600\" "
"path=\" m0@2l21600,m,21600l21600@0e\">val #0 \"/>sum "
"21600 0 #0\" /><v:f eqn=\"prod @1 1 4\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"prod @2 1 "
"2\" /><v:f eqn=\"sum @3 10800 0\" /><v:f eqn=\"sum @4 10800 0\" /><v:f eqn=\"sum @0 21600 "
"@2\" /><v:f eqn=\"prod @7 1 2\" /></v:formulas><v:path textpathok=\"t\" "
"o:connecttype=\" custom\" o:connectlocs=\" 10800,@4;0,@6;10800,@5;21600,@3\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" bottomRight,#0 \" yrange=\" 6171,21600\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextCascadeDown,
"_x0000_t155\" coordsize=\" 21600,21600\" o:spt=\" 155\" adj=\" 9600\" "
"path=\" m,l21600@2m0@0l21600,21600e\">val #0 \"/>sum "
"21600 0 #0\" /><v:f eqn=\"prod @1 1 4\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"prod @2 1 "
"2\" /><v:f eqn=\"sum @3 10800 0\" /><v:f eqn=\"sum @4 10800 0\" /><v:f eqn=\"sum @0 21600 "
"@2\" /><v:f eqn=\"prod @7 1 2\" /></v:formulas><v:path textpathok=\"t\" "
"o:connecttype=\" custom\" o:connectlocs=\" 10800,@4;0,@3;10800,@5;21600,@6\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 6171,21600\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextWave1,
"_x0000_t156\" coordsize=\" 21600,21600\" o:spt=\" 156\" "
"adj=\" 2809,10800\" "
"path=\" m@25@0c@26@3@27@1@28@0m@21@4c@22@5@23@6@24@4e\">val "
"#0\" /><v:f eqn=\"prod @0 41 9\" /><v:f eqn=\"prod @0 23 9\" /><v:f eqn=\"sum 0 0 "
"@2\" /><v:f eqn=\"sum 21600 0 #0\" /><v:f eqn=\"sum 21600 0 @1\" /><v:f eqn=\"sum 21600 0 "
"@3\" /><v:f eqn=\"sum #1 0 10800\" /><v:f eqn=\"sum 21600 0 #1\" /><v:f eqn=\"prod @8 2 "
"3\" /><v:f eqn=\"prod @8 4 3\" /><v:f eqn=\"prod @8 2 1\" /><v:f eqn=\"sum 21600 0 "
"@9\" /><v:f eqn=\"sum 21600 0 @10\" /><v:f eqn=\"sum 21600 0 @11\" /><v:f eqn=\"prod #1 2 "
"3\" /><v:f eqn=\"prod #1 4 3\" /><v:f eqn=\"prod #1 2 1\" /><v:f eqn=\"sum 21600 0 "
"@15\" /><v:f eqn=\"sum 21600 0 @16\" /><v:f eqn=\"sum 21600 0 @17\" /><v:f eqn=\"if @7 @14 "
"0\" /><v:f eqn=\"if @7 @13 @15\" /><v:f eqn=\"if @7 @12 @16\" /><v:f eqn=\"if @7 21600 "
"@17\" /><v:f eqn=\"if @7 0 @20\" /><v:f eqn=\"if @7 @9 @19\" /><v:f eqn=\"if @7 @10 "
"@18\" /><v:f eqn=\"if @7 @11 21600\" /><v:f eqn=\"sum @24 0 @21\" /><v:f eqn=\"sum @4 0 "
"@0\" /><v:f eqn=\"max @21 @25\" /><v:f eqn=\"min @24 @28\" /><v:f eqn=\"prod @0 2 "
"1\" /><v:f eqn=\"sum 21600 0 @33\" /><v:f eqn=\"mid @26 @27\" /><v:f eqn=\"mid @24 "
"@28\" /><v:f eqn=\"mid @22 @23\" /><v:f eqn=\"mid @21 @25\" /></v:formulas><v:path "
"textpathok=\" t\" o:connecttype=\" custom\" "
"o:connectlocs=\" @35,@0;@38,10800;@37,@4;@36,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>topLeft,#0 \" yrange=\" 0,4459\"/>
"position=\" #1 ,bottomRight\" xrange=\" 8640,12960\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextWave2,
"_x0000_t157\" coordsize=\" 21600,21600\" o:spt=\" 157\" "
"adj=\" 2809,10800\" "
"path=\" m@25@0c@26@1@27@3@28@0m@21@4c@22@6@23@5@24@4e\">val "
"#0\" /><v:f eqn=\"prod @0 41 9\" /><v:f eqn=\"prod @0 23 9\" /><v:f eqn=\"sum 0 0 "
"@2\" /><v:f eqn=\"sum 21600 0 #0\" /><v:f eqn=\"sum 21600 0 @1\" /><v:f eqn=\"sum 21600 0 "
"@3\" /><v:f eqn=\"sum #1 0 10800\" /><v:f eqn=\"sum 21600 0 #1\" /><v:f eqn=\"prod @8 2 "
"3\" /><v:f eqn=\"prod @8 4 3\" /><v:f eqn=\"prod @8 2 1\" /><v:f eqn=\"sum 21600 0 "
"@9\" /><v:f eqn=\"sum 21600 0 @10\" /><v:f eqn=\"sum 21600 0 @11\" /><v:f eqn=\"prod #1 2 "
"3\" /><v:f eqn=\"prod #1 4 3\" /><v:f eqn=\"prod #1 2 1\" /><v:f eqn=\"sum 21600 0 "
"@15\" /><v:f eqn=\"sum 21600 0 @16\" /><v:f eqn=\"sum 21600 0 @17\" /><v:f eqn=\"if @7 @14 "
"0\" /><v:f eqn=\"if @7 @13 @15\" /><v:f eqn=\"if @7 @12 @16\" /><v:f eqn=\"if @7 21600 "
"@17\" /><v:f eqn=\"if @7 0 @20\" /><v:f eqn=\"if @7 @9 @19\" /><v:f eqn=\"if @7 @10 "
"@18\" /><v:f eqn=\"if @7 @11 21600\" /><v:f eqn=\"sum @24 0 @21\" /><v:f eqn=\"sum @4 0 "
"@0\" /><v:f eqn=\"max @21 @25\" /><v:f eqn=\"min @24 @28\" /><v:f eqn=\"prod @0 2 "
"1\" /><v:f eqn=\"sum 21600 0 @33\" /><v:f eqn=\"mid @26 @27\" /><v:f eqn=\"mid @24 "
"@28\" /><v:f eqn=\"mid @22 @23\" /><v:f eqn=\"mid @21 @25\" /></v:formulas><v:path "
"textpathok=\" t\" o:connecttype=\" custom\" "
"o:connectlocs=\" @35,@0;@38,10800;@37,@4;@36,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>topLeft,#0 \" yrange=\" 0,4459\"/>
"position=\" #1 ,bottomRight\" xrange=\" 8640,12960\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextWave3,
"_x0000_t158\" coordsize=\" 21600,21600\" o:spt=\" 158\" "
"adj=\" 1404,10800\" "
"path=\" m@37@0c@38@3@39@1@40@0@41@3@42@1@43@0m@30@4c@31@5@32@6@33@4@34@5@35@6@36@4e\">
"formulas>val #0 \"/>prod @0 41 9\"/>prod @0 23 "
"9\" /><v:f eqn=\"sum 0 0 @2\" /><v:f eqn=\"sum 21600 0 #0\" /><v:f eqn=\"sum 21600 0 "
"@1\" /><v:f eqn=\"sum 21600 0 @3\" /><v:f eqn=\"sum #1 0 10800\" /><v:f eqn=\"sum 21600 0 "
"#1\" /><v:f eqn=\"prod @8 1 3\" /><v:f eqn=\"prod @8 2 3\" /><v:f eqn=\"prod @8 4 "
"3\" /><v:f eqn=\"prod @8 5 3\" /><v:f eqn=\"prod @8 2 1\" /><v:f eqn=\"sum 21600 0 "
"@9\" /><v:f eqn=\"sum 21600 0 @10\" /><v:f eqn=\"sum 21600 0 @8\" /><v:f eqn=\"sum 21600 0 "
"@11\" /><v:f eqn=\"sum 21600 0 @12\" /><v:f eqn=\"sum 21600 0 @13\" /><v:f eqn=\"prod #1 1 "
"3\" /><v:f eqn=\"prod #1 2 3\" /><v:f eqn=\"prod #1 4 3\" /><v:f eqn=\"prod #1 5 3\" /><v:f "
"eqn=\" prod #1 2 1\"/>sum 21600 0 @20\"/>sum 21600 0 @21\"/>
"eqn=\" sum 21600 0 @22\"/>sum 21600 0 @23\"/>sum 21600 0 "
"@24\" /><v:f eqn=\"if @7 @19 0\" /><v:f eqn=\"if @7 @18 @20\" /><v:f eqn=\"if @7 @17 "
"@21\" /><v:f eqn=\"if @7 @16 #1\" /><v:f eqn=\"if @7 @15 @22\" /><v:f eqn=\"if @7 @14 "
"@23\" /><v:f eqn=\"if @7 21600 @24\" /><v:f eqn=\"if @7 0 @29\" /><v:f eqn=\"if @7 @9 "
"@28\" /><v:f eqn=\"if @7 @10 @27\" /><v:f eqn=\"if @7 @8 @8\" /><v:f eqn=\"if @7 @11 "
"@26\" /><v:f eqn=\"if @7 @12 @25\" /><v:f eqn=\"if @7 @13 21600\" /><v:f eqn=\"sum @36 0 "
"@30\" /><v:f eqn=\"sum @4 0 @0\" /><v:f eqn=\"max @30 @37\" /><v:f eqn=\"min @36 "
"@43\" /><v:f eqn=\"prod @0 2 1\" /><v:f eqn=\"sum 21600 0 @48\" /><v:f eqn=\"mid @36 "
"@43\" /><v:f eqn=\"mid @30 @37\" /></v:formulas><v:path textpathok=\"t\" "
"o:connecttype=\" custom\" o:connectlocs=\" @40,@0;@51,10800;@33,@4;@50,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>topLeft,#0 \" yrange=\" 0,2229\"/>
"position=\" #1 ,bottomRight\" xrange=\" 8640,12960\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextWave4,
"_x0000_t159\" coordsize=\" 21600,21600\" o:spt=\" 159\" "
"adj=\" 1404,10800\" "
"path=\" m@37@0c@38@1@39@3@40@0@41@1@42@3@43@0m@30@4c@31@6@32@5@33@4@34@6@35@5@36@4e\">
"formulas>val #0 \"/>prod @0 41 9\"/>prod @0 23 "
"9\" /><v:f eqn=\"sum 0 0 @2\" /><v:f eqn=\"sum 21600 0 #0\" /><v:f eqn=\"sum 21600 0 "
"@1\" /><v:f eqn=\"sum 21600 0 @3\" /><v:f eqn=\"sum #1 0 10800\" /><v:f eqn=\"sum 21600 0 "
"#1\" /><v:f eqn=\"prod @8 1 3\" /><v:f eqn=\"prod @8 2 3\" /><v:f eqn=\"prod @8 4 "
"3\" /><v:f eqn=\"prod @8 5 3\" /><v:f eqn=\"prod @8 2 1\" /><v:f eqn=\"sum 21600 0 "
"@9\" /><v:f eqn=\"sum 21600 0 @10\" /><v:f eqn=\"sum 21600 0 @8\" /><v:f eqn=\"sum 21600 0 "
"@11\" /><v:f eqn=\"sum 21600 0 @12\" /><v:f eqn=\"sum 21600 0 @13\" /><v:f eqn=\"prod #1 1 "
"3\" /><v:f eqn=\"prod #1 2 3\" /><v:f eqn=\"prod #1 4 3\" /><v:f eqn=\"prod #1 5 3\" /><v:f "
"eqn=\" prod #1 2 1\"/>sum 21600 0 @20\"/>sum 21600 0 @21\"/>
"eqn=\" sum 21600 0 @22\"/>sum 21600 0 @23\"/>sum 21600 0 "
"@24\" /><v:f eqn=\"if @7 @19 0\" /><v:f eqn=\"if @7 @18 @20\" /><v:f eqn=\"if @7 @17 "
"@21\" /><v:f eqn=\"if @7 @16 #1\" /><v:f eqn=\"if @7 @15 @22\" /><v:f eqn=\"if @7 @14 "
"@23\" /><v:f eqn=\"if @7 21600 @24\" /><v:f eqn=\"if @7 0 @29\" /><v:f eqn=\"if @7 @9 "
"@28\" /><v:f eqn=\"if @7 @10 @27\" /><v:f eqn=\"if @7 @8 @8\" /><v:f eqn=\"if @7 @11 "
"@26\" /><v:f eqn=\"if @7 @12 @25\" /><v:f eqn=\"if @7 @13 21600\" /><v:f eqn=\"sum @36 0 "
"@30\" /><v:f eqn=\"sum @4 0 @0\" /><v:f eqn=\"max @30 @37\" /><v:f eqn=\"min @36 "
"@43\" /><v:f eqn=\"prod @0 2 1\" /><v:f eqn=\"sum 21600 0 @48\" /><v:f eqn=\"mid @36 "
"@43\" /><v:f eqn=\"mid @30 @37\" /></v:formulas><v:path textpathok=\"t\" "
"o:connecttype=\" custom\" o:connectlocs=\" @40,@0;@51,10800;@33,@4;@50,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>topLeft,#0 \" yrange=\" 0,2229\"/>
"position=\" #1 ,bottomRight\" xrange=\" 8640,12960\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextInflate,
"_x0000_t160\" coordsize=\" 21600,21600\" o:spt=\" 160\" adj=\" 2945\" "
"path=\" m0@0c7200@2,14400@2,21600@0m0@3c7200@4,14400@4,21600@3e\">
"eqn=\" val #0 \"/>prod #0 1 3\"/>sum 0 0 @1\"/>sum 21600 "
"0 #0\" /><v:f eqn=\"sum 21600 0 @2\" /><v:f eqn=\"prod #0 2 3\" /><v:f eqn=\"sum 21600 0 "
"@5\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"rect\" /><v:textpath "
"on=\" t\" fitshape=\" t\" xscale=\" t\"/>topLeft,#0 \" "
"yrange=\" 0,4629\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextDeflate,
"_x0000_t161\" coordsize=\" 21600,21600\" o:spt=\" 161\" adj=\" 4050\" "
"path=\" m,c7200@0,14400@0,21600,m,21600c7200@1,14400@1,21600,21600e\">
"eqn=\" prod #0 4 3\"/>sum 21600 0 @0\"/>val #0 \"/>sum "
"21600 0 #0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@2;0,10800;10800,@3;21600,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>center,#0 \" "
"yrange=\" 0,8100\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextInflateBottom,
"_x0000_t162\" coordsize=\" 21600,21600\" o:spt=\" 162\" adj=\" 14706\" "
"path=\" m,l21600,m0@0c7200@2,14400@2,21600@0e\">val #0 \"/>
"eqn=\" prod #0 1 3\"/>sum 28800 0 @1\"/>prod #0 1 2\"/>
"eqn=\" sum @1 7200 0\"/> t\" o:connecttype=\" custom\" "
"o:connectlocs=\" 10800,0;0,@3;10800,21600;21600,@3\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>topLeft,#0 \" "
"yrange=\" 11148,21600\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextDeflateBottom,
"_x0000_t163\" coordsize=\" 21600,21600\" o:spt=\" 163\" adj=\" 11475\" "
"path=\" m,l21600,m,21600c7200@1,14400@1,21600,21600e\">prod #0 4 "
"3\" /><v:f eqn=\"sum @0 0 7200\" /><v:f eqn=\"val #0\" /><v:f eqn=\"prod #0 2 3\" /><v:f "
"eqn=\" sum @3 7200 0\"/> t\" o:connecttype=\" custom\" "
"o:connectlocs=\" 10800,0;0,10800;10800,@2;21600,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>center,#0 \" "
"yrange=\" 1350,21600\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextInflateTop,
"_x0000_t164\" coordsize=\" 21600,21600\" o:spt=\" 164\" adj=\" 6894\" "
"path=\" m0@0c7200@2,14400@2,21600@0m,21600r21600,e\">val "
"#0\" /><v:f eqn=\"prod #0 1 3\" /><v:f eqn=\"sum 0 0 @1\" /><v:f eqn=\"prod #0 1 2\" /><v:f "
"eqn=\" sum @3 10800 0\"/>sum 21600 0 @1\"/>
"textpathok=\" t\" o:connecttype=\" custom\" "
"o:connectlocs=\" 10800,0;0,@4;10800,21600;21600,@4\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>topLeft,#0 \" "
"yrange=\" 0,10452\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextDeflateTop,
"_x0000_t165\" coordsize=\" 21600,21600\" o:spt=\" 165\" adj=\" 10125\" "
"path=\" m,c7200@0,14400@0,21600,m,21600r21600,e\">prod #0 4 "
"3\" /><v:f eqn=\"val #0\" /><v:f eqn=\"prod #0 2 3\" /><v:f eqn=\"sum 21600 0 "
"@2\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@1;0,10800;10800,21600;21600,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>center,#0 \" "
"yrange=\" 0,20250\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextDeflateInflate,
"_x0000_t166\" coordsize=\" 21600,21600\" o:spt=\" 166\" adj=\" 6054\" "
"path=\" m,l21600,m,10125c7200@1,14400@1,21600,10125m,11475c7200@2,14400@2,21600,11475m,"
"21600r21600,e\" ><v:formulas><v:f eqn=\"prod #0 4 3\" /><v:f eqn=\"sum @0 0 4275\" /><v:f "
"eqn=\" sum @0 0 2925\"/>t\" "
"o:connecttype=\" rect\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>center,#0 \" "
"yrange=\" 1308,20292\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextDeflateInflateDeflate,
"_x0000_t167\" coordsize=\" 21600,21600\" o:spt=\" 167\" adj=\" 6054\" "
"path=\" m,l21600,m,6609c7200@1,14400@1,21600,6609m,7491c7200@2,14400@2,21600,7491m,"
"14109c7200@4,14400@4,21600,14109m,14991c7200@3,14400@3,21600,14991m,21600r21600,e\" ><v:"
"formulas>prod #0 4 3\"/>sum @0 0 2791\"/>sum @0 0 "
"1909\" /><v:f eqn=\"sum 21600 0 @1\" /><v:f eqn=\"sum 21600 0 @2\" /></v:formulas><v:path "
"textpathok=\" t\" o:connecttype=\" rect\"/>t\" fitshape=\" t\" "
"xscale=\" t\"/>center,#0 \" "
"yrange=\" 854,9525\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " },
{ mso_sptTextFadeRight,
"_x0000_t168\" coordsize=\" 21600,21600\" o:spt=\" 168\" adj=\" 7200\" "
"path=\" m,l21600@0m,21600l21600@1e\">val #0 \"/>sum "
"21600 0 @0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum 21600 0 @2\" /><v:f eqn=\"sum @1 "
"21600 @0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@2;0,10800;10800,@3;21600,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" bottomRight,#0 \" yrange=\" 0,10800\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextFadeLeft,
"_x0000_t169\" coordsize=\" 21600,21600\" o:spt=\" 169\" adj=\" 7200\" "
"path=\" m0@0l21600,m0@1l21600,21600e\">val #0 \"/>sum "
"21600 0 @0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum 21600 0 @2\" /><v:f eqn=\"sum @1 "
"21600 @0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@2;0,10800;10800,@3;21600,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 0,10800\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextFadeUp,
"_x0000_t170\" coordsize=\" 21600,21600\" o:spt=\" 170\" adj=\" 7200\" "
"path=\" m@0,l@1,m,21600r21600,e\">val #0 \"/>sum 21600 "
"0 @0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum 21600 0 @2\" /><v:f eqn=\"sum @1 21600 "
"@0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,0;@2,10800;10800,21600;@3,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" #0 ,topLeft\" xrange=\" 0,10792\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextFadeDown,
"_x0000_t171\" coordsize=\" 21600,21600\" o:spt=\" 171\" adj=\" 7200\" "
"path=\" m,l21600,m@0,21600l@1,21600e\">val #0 \"/>sum "
"21600 0 @0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum 21600 0 @2\" /><v:f eqn=\"sum @1 "
"21600 @0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,0;@2,10800;10800,21600;@3,10800\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" #0 ,bottomRight\" xrange=\" 0,10792\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextSlantUp,
"_x0000_t172\" coordsize=\" 21600,21600\" o:spt=\" 172\" adj=\" 12000\" "
"path=\" m0@0l21600,m,21600l21600@1e\">val #0 \"/>sum "
"21600 0 @0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum @2 10800 0\" /><v:f eqn=\"prod @1 "
"1 2\" /><v:f eqn=\"sum @4 10800 0\" /></v:formulas><v:path textpathok=\"t\" "
"o:connecttype=\" custom\" o:connectlocs=\" 10800,@2;0,@3;10800,@5;21600,@4\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 0,15429\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextSlantDown,
"_x0000_t173\" coordsize=\" 21600,21600\" o:spt=\" 173\" adj=\" 9600\" "
"path=\" m,l21600@1m0@0l21600,21600e\">val #0 \"/>sum "
"21600 0 @0\" /><v:f eqn=\"prod #0 1 2\" /><v:f eqn=\"sum @2 10800 0\" /><v:f eqn=\"prod @1 "
"1 2\" /><v:f eqn=\"sum @4 10800 0\" /></v:formulas><v:path textpathok=\"t\" "
"o:connecttype=\" custom\" o:connectlocs=\" 10800,@4;0,@2;10800,@3;21600,@5\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" topLeft,#0 \" yrange=\" 6171,21600\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextCanUp,
"_x0000_t174\" coordsize=\" 21600,21600\" o:spt=\" 174\" adj=\" 18514\" "
"path=\" m0@1qy10800,,21600@1m,21600qy10800@0,21600,21600e\">val "
"#0\" /><v:f eqn=\"sum 21600 0 #0\" /><v:f eqn=\"prod @1 1 2\" /><v:f eqn=\"sum @2 10800 "
"0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,0;0,@3;10800,@0;21600,@3\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" center,#0 \" yrange=\" 14400,21600\"/> edit\" "
"text=\" t\" shapetype=\" t\"/> " },
{ mso_sptTextCanDown,
"_x0000_t175\" coordsize=\" 21600,21600\" o:spt=\" 175\" adj=\" 3086\" "
"path=\" m,qy10800@0,21600,m0@1qy10800,21600,21600@1e\">val "
"#0\" /><v:f eqn=\"sum 21600 0 #0\" /><v:f eqn=\"prod @1 1 2\" /><v:f eqn=\"sum @2 10800 "
"0\" /></v:formulas><v:path textpathok=\"t\" o:connecttype=\"custom\" "
"o:connectlocs=\" 10800,@0;0,@2;10800,21600;21600,@2\" "
"o:connectangles=\" 270,180,90,0\"/>t\" fitshape=\" t\"/>
"position=\" center,#0 \" yrange=\" 0,7200\"/> edit\" text=\" t\" "
"shapetype=\" t\"/> " }
};
auto i(aTypeToMarkupMap.find(eShapeType));
return i == aTypeToMarkupMap.end() ? OString() : i->second;
}
void FontworkHelpers::collectCharColorProps(const uno::Reference<text::XText>& rXText,
std::vector<beans::PropertyValue>& rCharPropVec)
{
if (!rXText.is())
return ;
uno::Reference<text::XTextCursor> rXTextCursor = rXText->createTextCursor();
rXTextCursor->gotoStart(false );
rXTextCursor->gotoEnd(true );
uno::Reference<container::XEnumerationAccess> paraEnumAccess(rXText, uno::UNO_QUERY);
if (!paraEnumAccess.is())
return ;
uno::Reference<container::XEnumeration> paraEnum(paraEnumAccess->createEnumeration());
while (paraEnum->hasMoreElements())
{
uno::Reference<text::XTextRange> xParagraph(paraEnum->nextElement(), uno::UNO_QUERY);
uno::Reference<container::XEnumerationAccess> runEnumAccess(xParagraph, uno::UNO_QUERY);
if (!runEnumAccess.is())
continue ;
uno::Reference<container::XEnumeration> runEnum = runEnumAccess->createEnumeration();
while (runEnum->hasMoreElements())
{
uno::Reference<text::XTextRange> xRun(runEnum->nextElement(), uno::UNO_QUERY);
if (xRun->getString().isEmpty())
continue ;
uno::Reference<beans::XPropertySet> xRunPropSet(xRun, uno::UNO_QUERY);
if (!xRunPropSet.is())
continue ;
auto xRunPropSetInfo = xRunPropSet->getPropertySetInfo();
if (!xRunPropSetInfo.is())
continue ;
// We have found a non-empty run. Collect its simple color properties.
const std::array<OUString, 6> aNamesArray
= { u"CharColor" _ustr, u"CharLumMod" _ustr, u"CharLumOff" _ustr,
u"CharColorTheme" _ustr, u"CharComplexColor" _ustr, u"CharTransparence" _ustr };
for (const auto & propName : aNamesArray)
{
if (xRunPropSetInfo->hasPropertyByName(propName))
rCharPropVec.push_back(comphelper::makePropertyValue(
propName, xRunPropSet->getPropertyValue(propName)));
}
return ;
}
}
}
void FontworkHelpers::applyPropsToRuns(const std::vector<beans::PropertyValue>& rTextPropVec,
const uno::Reference<text::XText>& rXText)
{
if (!rXText.is())
return ;
uno::Reference<text::XTextCursor> xTextCursor = rXText->createTextCursor();
xTextCursor->gotoStart(false );
xTextCursor->gotoEnd(true );
uno::Reference<container::XEnumerationAccess> paraEnumAccess(rXText, uno::UNO_QUERY);
if (!paraEnumAccess.is())
return ;
uno::Reference<container::XEnumeration> paraEnum(paraEnumAccess->createEnumeration());
while (paraEnum->hasMoreElements())
{
uno::Reference<text::XTextRange> xParagraph(paraEnum->nextElement(), uno::UNO_QUERY);
uno::Reference<container::XEnumerationAccess> runEnumAccess(xParagraph, uno::UNO_QUERY);
if (!runEnumAccess.is())
continue ;
uno::Reference<container::XEnumeration> runEnum = runEnumAccess->createEnumeration();
while (runEnum->hasMoreElements())
{
uno::Reference<text::XTextRange> xRun(runEnum->nextElement(), uno::UNO_QUERY);
uno::Reference<beans::XPropertySet> xRunPropSet(xRun, uno::UNO_QUERY);
if (!xRunPropSet.is())
continue ;
auto xRunPropSetInfo = xRunPropSet->getPropertySetInfo();
if (!xRunPropSetInfo.is())
continue ;
for (const beans::PropertyValue& rProp : rTextPropVec)
{
if (xRunPropSetInfo->hasPropertyByName(rProp.Name)
&& !(xRunPropSetInfo->getPropertyByName(rProp.Name).Attributes
& beans::PropertyAttribute::READONLY)
&& rProp.Name != u"CharInteropGrabBag" )
{
xRunPropSet->setPropertyValue(rProp.Name, rProp.Value);
}
}
}
}
}
namespace
{
constexpr const std::array<std::u16string_view, 5> aCharPropNames{
u"CharColorLumMod" , u"CharColorLumOff" , u"CharColorTheme" , u"CharComplexColor" ,
u"CharTransparence"
};
constexpr const std::array<std::u16string_view, 5> aShapePropNames{
u"FillColorLumMod" , u"FillColorLumOff" , u"FillColorTheme" , u"FillComplexColor" ,
u"FillTransparence"
};
}
void FontworkHelpers::createCharFillPropsFromShape(
const uno::Reference<beans::XPropertySet>& rXPropSet,
std::vector<beans::PropertyValue>& rCharPropVec)
{
auto xPropSetInfo = rXPropSet->getPropertySetInfo();
if (!xPropSetInfo.is())
return ;
// CharColor contains the color including all color transformations
// FillColor contains darken and lighten but not transparency
sal_Int32 nColorRGB = 0;
if (xPropSetInfo->hasPropertyByName(u"FillColor" _ustr)
&& (rXPropSet->getPropertyValue(u"FillColor" _ustr) >>= nColorRGB))
{
::Color aColor(ColorTransparency, nColorRGB);
sal_Int16 nTransPercent = 0;
if (xPropSetInfo->hasPropertyByName(u"FillTransparence" _ustr)
&& (rXPropSet->getPropertyValue(u"FillTransparence" _ustr) >>= nTransPercent))
{
sal_uInt8 nAlpha = 255 - sal_uInt8(std::lround(double (nTransPercent) * 2.55));
aColor.SetAlpha(nAlpha);
}
rCharPropVec.push_back(comphelper::makePropertyValue(u"CharColor" _ustr, sal_Int32(aColor)));
}
for (size_t i = 0; i < 5; i++)
{
OUString aPropertyName(aShapePropNames[i]);
if (xPropSetInfo->hasPropertyByName(aPropertyName))
rCharPropVec.push_back(comphelper::makePropertyValue(
OUString(aCharPropNames[i]), rXPropSet->getPropertyValue(aPropertyName)));
}
}
--> --------------------
--> maximum size reached
--> --------------------
Messung V0.5 C=93 H=81 G=86
¤ Dauer der Verarbeitung: 0.21 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland