Files
DocumentServer-v-9.2.0/core/MsBinaryFile/DocFile/PropertiesMapping.cpp
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

797 lines
32 KiB
C++

/*
* (c) Copyright Ascensio System SIA 2010-2023
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#include "PropertiesMapping.h"
#include "RGBColor.h"
namespace DocFileFormat
{
std::map<unsigned char, std::wstring> PropertiesMapping::brcTypeMap;
NSCriticalSection::CRITICAL_SECTION_SMART PropertiesMapping::brcTypeMapLock;
void PropertiesMapping::init()
{
brcTypeMapLock.Enter();
if(brcTypeMap.size() == 0)
{
brcTypeMap.insert( std::make_pair( 0x00, std::wstring( L"none" ) ));
brcTypeMap.insert( std::make_pair( 0x01, std::wstring( L"single" ) ));
brcTypeMap.insert( std::make_pair( 0x02, std::wstring( L"thick" ) ));
brcTypeMap.insert( std::make_pair( 0x03, std::wstring( L"double" ) ));
brcTypeMap.insert( std::make_pair( 0x05, std::wstring( L"hairline" ) ));
brcTypeMap.insert( std::make_pair( 0x06, std::wstring( L"dotted" ) ));
brcTypeMap.insert( std::make_pair( 0x07, std::wstring( L"dashed" ) ));
brcTypeMap.insert( std::make_pair( 0x08, std::wstring( L"dotDash" ) ));
brcTypeMap.insert( std::make_pair( 0x09, std::wstring( L"dotDotDash" ) ));
brcTypeMap.insert( std::make_pair( 0x0A, std::wstring( L"triple" ) ));
brcTypeMap.insert( std::make_pair( 0x0B, std::wstring( L"thinThickSmallGap" ) ));
brcTypeMap.insert( std::make_pair( 0x0C, std::wstring( L"thickThinSmallGap" ) ));
brcTypeMap.insert( std::make_pair( 0x0D, std::wstring( L"thinThickThinSmallGap" ) ));
brcTypeMap.insert( std::make_pair( 0x0E, std::wstring( L"thinThickMediumGap" ) ));
brcTypeMap.insert( std::make_pair( 0x0F, std::wstring( L"thickThinMediumGap" ) ));
brcTypeMap.insert( std::make_pair( 0x10, std::wstring( L"thinThickThinMediumGap" ) ));
brcTypeMap.insert( std::make_pair( 0x11, std::wstring( L"thinThickLargeGap" ) ));
brcTypeMap.insert( std::make_pair( 0x12, std::wstring( L"thickThinLargeGap" ) ));
brcTypeMap.insert( std::make_pair( 0x13, std::wstring( L"thinThickThinLargeGap" ) ));
brcTypeMap.insert( std::make_pair( 0x14, std::wstring( L"wave" ) ));
brcTypeMap.insert( std::make_pair( 0x15, std::wstring( L"doubleWave" ) ));
brcTypeMap.insert( std::make_pair( 0x16, std::wstring( L"dashSmallGap" ) ));
brcTypeMap.insert( std::make_pair( 0x17, std::wstring( L"dashDotStroked" ) ));
brcTypeMap.insert( std::make_pair( 0x18, std::wstring( L"threeDEmboss" ) ));
brcTypeMap.insert( std::make_pair( 0x19, std::wstring( L"threeDEngrave" ) ));
brcTypeMap.insert( std::make_pair( 0x1A, std::wstring( L"outset" ) ));
brcTypeMap.insert( std::make_pair( 0x1B, std::wstring( L"inset" ) ));
brcTypeMap.insert( std::make_pair( 0x40, std::wstring( L"apples" ) ));
brcTypeMap.insert( std::make_pair( 0x41, std::wstring( L"archedScallops" ) ));
brcTypeMap.insert( std::make_pair( 0x42, std::wstring( L"babyPacifier" ) ));
brcTypeMap.insert( std::make_pair( 0x43, std::wstring( L"babyRattle" ) ));
brcTypeMap.insert( std::make_pair( 0x44, std::wstring( L"balloons3Colors" ) ));
brcTypeMap.insert( std::make_pair( 0x45, std::wstring( L"balloonsHotAir" ) ));
brcTypeMap.insert( std::make_pair( 0x46, std::wstring( L"basicBlackDashes" ) ));
brcTypeMap.insert( std::make_pair( 0x47, std::wstring( L"basicBlackDots" ) ));
brcTypeMap.insert( std::make_pair( 0x48, std::wstring( L"basicBlackSquares" ) ));
brcTypeMap.insert( std::make_pair( 0x49, std::wstring( L"basicThinLines" ) ));
brcTypeMap.insert( std::make_pair( 0x4A, std::wstring( L"basicWhiteDashes" ) ));
brcTypeMap.insert( std::make_pair( 0x4B, std::wstring( L"basicWhiteDots" ) ));
brcTypeMap.insert( std::make_pair( 0x4C, std::wstring( L"basicWhiteSquares" ) ));
brcTypeMap.insert( std::make_pair( 0x4D, std::wstring( L"basicWideInline" ) ));
brcTypeMap.insert( std::make_pair( 0x4E, std::wstring( L"basicWideMidline" ) ));
brcTypeMap.insert( std::make_pair( 0x4F, std::wstring( L"basicWideOutline" ) ));
brcTypeMap.insert( std::make_pair( 0x50, std::wstring( L"bats" ) ));
brcTypeMap.insert( std::make_pair( 0x51, std::wstring( L"birds" ) ));
brcTypeMap.insert( std::make_pair( 0x52, std::wstring( L"birdsFlight" ) ));
brcTypeMap.insert( std::make_pair( 0x53, std::wstring( L"cabins" ) ));
brcTypeMap.insert( std::make_pair( 0x54, std::wstring( L"cakeSlice" ) ));
brcTypeMap.insert( std::make_pair( 0x55, std::wstring( L"candyCorn" ) ));
brcTypeMap.insert( std::make_pair( 0x56, std::wstring( L"celticKnotwork" ) ));
brcTypeMap.insert( std::make_pair( 0x57, std::wstring( L"certificateBanner" ) ));
brcTypeMap.insert( std::make_pair( 0x58, std::wstring( L"chainLink" ) ));
brcTypeMap.insert( std::make_pair( 0x59, std::wstring( L"champagneBottle" ) ));
brcTypeMap.insert( std::make_pair( 0x5A, std::wstring( L"checkedBarBlack" ) ));
brcTypeMap.insert( std::make_pair( 0x5B, std::wstring( L"checkedBarColor" ) ));
brcTypeMap.insert( std::make_pair( 0x5C, std::wstring( L"checkered" ) ));
brcTypeMap.insert( std::make_pair( 0x5D, std::wstring( L"christmasTree" ) ));
brcTypeMap.insert( std::make_pair( 0x5E, std::wstring( L"circlesLines" ) ));
brcTypeMap.insert( std::make_pair( 0x5F, std::wstring( L"circlesRectangles" ) ));
brcTypeMap.insert( std::make_pair( 0x60, std::wstring( L"classicalWave" ) ));
brcTypeMap.insert( std::make_pair( 0x61, std::wstring( L"clocks" ) ));
brcTypeMap.insert( std::make_pair( 0x62, std::wstring( L"compass" ) ));
brcTypeMap.insert( std::make_pair( 0x63, std::wstring( L"confetti" ) ));
brcTypeMap.insert( std::make_pair( 0x64, std::wstring( L"confettiGrays" ) ));
brcTypeMap.insert( std::make_pair( 0x65, std::wstring( L"confettiOutline" ) ));
brcTypeMap.insert( std::make_pair( 0x66, std::wstring( L"confettiStreamers" ) ));
brcTypeMap.insert( std::make_pair( 0x67, std::wstring( L"confettiWhite" ) ));
brcTypeMap.insert( std::make_pair( 0x68, std::wstring( L"cornerTriangles" ) ));
brcTypeMap.insert( std::make_pair( 0x69, std::wstring( L"couponCutoutDashes" ) ));
brcTypeMap.insert( std::make_pair( 0x6A, std::wstring( L"couponCutoutDots" ) ));
brcTypeMap.insert( std::make_pair( 0x6B, std::wstring( L"crazyMaze" ) ));
brcTypeMap.insert( std::make_pair( 0x6C, std::wstring( L"creaturesButterfly" ) ));
brcTypeMap.insert( std::make_pair( 0x6D, std::wstring( L"creaturesFish" ) ));
brcTypeMap.insert( std::make_pair( 0x6E, std::wstring( L"creaturesInsects" ) ));
brcTypeMap.insert( std::make_pair( 0x6F, std::wstring( L"creaturesLadyBug" ) ));
brcTypeMap.insert( std::make_pair( 0x70, std::wstring( L"crossStitch" ) ));
brcTypeMap.insert( std::make_pair( 0x71, std::wstring( L"cup" ) ));
brcTypeMap.insert( std::make_pair( 0x72, std::wstring( L"decoArch" ) ));
brcTypeMap.insert( std::make_pair( 0x73, std::wstring( L"decoArchColor" ) ));
brcTypeMap.insert( std::make_pair( 0x74, std::wstring( L"decoBlocks" ) ));
brcTypeMap.insert( std::make_pair( 0x75, std::wstring( L"diamondsGray" ) ));
brcTypeMap.insert( std::make_pair( 0x76, std::wstring( L"doubleD" ) ));
brcTypeMap.insert( std::make_pair( 0x77, std::wstring( L"doubleDiamonds" ) ));
brcTypeMap.insert( std::make_pair( 0x78, std::wstring( L"earth1" ) ));
brcTypeMap.insert( std::make_pair( 0x79, std::wstring( L"earth2" ) ));
brcTypeMap.insert( std::make_pair( 0x7A, std::wstring( L"eclipsingSquares1" ) ));
brcTypeMap.insert( std::make_pair( 0x7B, std::wstring( L"eclipsingSquares2" ) ));
brcTypeMap.insert( std::make_pair( 0x7C, std::wstring( L"eggsBlack" ) ));
brcTypeMap.insert( std::make_pair( 0x7D, std::wstring( L"fans" ) ));
brcTypeMap.insert( std::make_pair( 0x7E, std::wstring( L"film" ) ));
brcTypeMap.insert( std::make_pair( 0x7F, std::wstring( L"firecrackers" ) ));
brcTypeMap.insert( std::make_pair( 0x80, std::wstring( L"flowersBlockPrint" ) ));
brcTypeMap.insert( std::make_pair( 0x81, std::wstring( L"flowersDaisies" ) ));
brcTypeMap.insert( std::make_pair( 0x82, std::wstring( L"flowersModern1" ) ));
brcTypeMap.insert( std::make_pair( 0x83, std::wstring( L"flowersModern2" ) ));
brcTypeMap.insert( std::make_pair( 0x84, std::wstring( L"flowersPansy" ) ));
brcTypeMap.insert( std::make_pair( 0x85, std::wstring( L"flowersRedRose" ) ));
brcTypeMap.insert( std::make_pair( 0x86, std::wstring( L"flowersRoses" ) ));
brcTypeMap.insert( std::make_pair( 0x87, std::wstring( L"flowersTeacup" ) ));
brcTypeMap.insert( std::make_pair( 0x88, std::wstring( L"flowersTiny" ) ));
brcTypeMap.insert( std::make_pair( 0x89, std::wstring( L"gems" ) ));
brcTypeMap.insert( std::make_pair( 0x8A, std::wstring( L"gingerbreadMan" ) ));
brcTypeMap.insert( std::make_pair( 0x8B, std::wstring( L"gradient" ) ));
brcTypeMap.insert( std::make_pair( 0x8C, std::wstring( L"handmade1" ) ));
brcTypeMap.insert( std::make_pair( 0x8D, std::wstring( L"handmade2" ) ));
brcTypeMap.insert( std::make_pair( 0x8E, std::wstring( L"heartBalloon" ) ));
brcTypeMap.insert( std::make_pair( 0x8F, std::wstring( L"heartGray" ) ));
brcTypeMap.insert( std::make_pair( 0x90, std::wstring( L"hearts" ) ));
brcTypeMap.insert( std::make_pair( 0x91, std::wstring( L"heebieJeebies" ) ));
brcTypeMap.insert( std::make_pair( 0x92, std::wstring( L"holly" ) ));
brcTypeMap.insert( std::make_pair( 0x93, std::wstring( L"houseFunky" ) ));
brcTypeMap.insert( std::make_pair( 0x94, std::wstring( L"hypnotic" ) ));
brcTypeMap.insert( std::make_pair( 0x95, std::wstring( L"iceCreamCones" ) ));
brcTypeMap.insert( std::make_pair( 0x96, std::wstring( L"lightBulb" ) ));
brcTypeMap.insert( std::make_pair( 0x97, std::wstring( L"lightning1" ) ));
brcTypeMap.insert( std::make_pair( 0x98, std::wstring( L"lightning2" ) ));
brcTypeMap.insert( std::make_pair( 0x99, std::wstring( L"mapPins" ) ));
brcTypeMap.insert( std::make_pair( 0x9A, std::wstring( L"mapleLeaf" ) ));
brcTypeMap.insert( std::make_pair( 0x9B, std::wstring( L"mapleMuffins" ) ));
brcTypeMap.insert( std::make_pair( 0x9C, std::wstring( L"marquee" ) ));
brcTypeMap.insert( std::make_pair( 0x9D, std::wstring( L"marqueeToothed" ) ));
brcTypeMap.insert( std::make_pair( 0x9E, std::wstring( L"moons" ) ));
brcTypeMap.insert( std::make_pair( 0x9F, std::wstring( L"mosaic" ) ));
brcTypeMap.insert( std::make_pair( 0xA0, std::wstring( L"musicNotes" ) ));
brcTypeMap.insert( std::make_pair( 0xA1, std::wstring( L"northwest" ) ));
brcTypeMap.insert( std::make_pair( 0xA2, std::wstring( L"ovals" ) ));
brcTypeMap.insert( std::make_pair( 0xA3, std::wstring( L"packages" ) ));
brcTypeMap.insert( std::make_pair( 0xA4, std::wstring( L"palmsBlack" ) ));
brcTypeMap.insert( std::make_pair( 0xA5, std::wstring( L"palmsColor" ) ));
brcTypeMap.insert( std::make_pair( 0xA6, std::wstring( L"paperClips" ) ));
brcTypeMap.insert( std::make_pair( 0xA7, std::wstring( L"papyrus" ) ));
brcTypeMap.insert( std::make_pair( 0xA8, std::wstring( L"partyFavor" ) ));
brcTypeMap.insert( std::make_pair( 0xA9, std::wstring( L"partyGlass" ) ));
brcTypeMap.insert( std::make_pair( 0xAA, std::wstring( L"pencils" ) ));
brcTypeMap.insert( std::make_pair( 0xAB, std::wstring( L"people" ) ));
brcTypeMap.insert( std::make_pair( 0xAC, std::wstring( L"peopleWaving" ) ));
brcTypeMap.insert( std::make_pair( 0xAD, std::wstring( L"peopleHats" ) ));
brcTypeMap.insert( std::make_pair( 0xAE, std::wstring( L"poinsettias" ) ));
brcTypeMap.insert( std::make_pair( 0xAF, std::wstring( L"postageStamp" ) ));
brcTypeMap.insert( std::make_pair( 0xB0, std::wstring( L"pumpkin1" ) ));
brcTypeMap.insert( std::make_pair( 0xB1, std::wstring( L"pushPinNote2" ) ));
brcTypeMap.insert( std::make_pair( 0xB2, std::wstring( L"pushPinNote1" ) ));
brcTypeMap.insert( std::make_pair( 0xB3, std::wstring( L"pyramids" ) ));
brcTypeMap.insert( std::make_pair( 0xB4, std::wstring( L"pyramidsAbove" ) ));
brcTypeMap.insert( std::make_pair( 0xB5, std::wstring( L"quadrants" ) ));
brcTypeMap.insert( std::make_pair( 0xB6, std::wstring( L"rings" ) ));
brcTypeMap.insert( std::make_pair( 0xB7, std::wstring( L"safari" ) ));
brcTypeMap.insert( std::make_pair( 0xB8, std::wstring( L"sawtooth" ) ));
brcTypeMap.insert( std::make_pair( 0xB9, std::wstring( L"sawtoothGray" ) ));
brcTypeMap.insert( std::make_pair( 0xBA, std::wstring( L"scaredCat" ) ));
brcTypeMap.insert( std::make_pair( 0xBB, std::wstring( L"seattle" ) ));
brcTypeMap.insert( std::make_pair( 0xBC, std::wstring( L"shadowedSquares" ) ));
brcTypeMap.insert( std::make_pair( 0xBD, std::wstring( L"sharksTeeth" ) ));
brcTypeMap.insert( std::make_pair( 0xBE, std::wstring( L"shorebirdTracks" ) ));
brcTypeMap.insert( std::make_pair( 0xBF, std::wstring( L"skyrocket" ) ));
brcTypeMap.insert( std::make_pair( 0xC0, std::wstring( L"snowflakeFancy" ) ));
brcTypeMap.insert( std::make_pair( 0xC1, std::wstring( L"snowflakes" ) ));
brcTypeMap.insert( std::make_pair( 0xC2, std::wstring( L"sombrero" ) ));
brcTypeMap.insert( std::make_pair( 0xC3, std::wstring( L"southwest" ) ));
brcTypeMap.insert( std::make_pair( 0xC4, std::wstring( L"stars" ) ));
brcTypeMap.insert( std::make_pair( 0xC5, std::wstring( L"starsTop" ) ));
brcTypeMap.insert( std::make_pair( 0xC6, std::wstring( L"stars3d" ) ));
brcTypeMap.insert( std::make_pair( 0xC7, std::wstring( L"starsBlack" ) ));
brcTypeMap.insert( std::make_pair( 0xC8, std::wstring( L"starsShadowed" ) ));
brcTypeMap.insert( std::make_pair( 0xC9, std::wstring( L"sun" ) ));
brcTypeMap.insert( std::make_pair( 0xCA, std::wstring( L"swirligig" ) ));
brcTypeMap.insert( std::make_pair( 0xCB, std::wstring( L"tornPaper" ) ));
brcTypeMap.insert( std::make_pair( 0xCC, std::wstring( L"tornPaperBlack" ) ));
brcTypeMap.insert( std::make_pair( 0xCD, std::wstring( L"trees" ) ));
brcTypeMap.insert( std::make_pair( 0xCE, std::wstring( L"triangleParty" ) ));
brcTypeMap.insert( std::make_pair( 0xCF, std::wstring( L"triangles" ) ));
brcTypeMap.insert( std::make_pair( 0xD0, std::wstring( L"tribal1" ) ));
brcTypeMap.insert( std::make_pair( 0xD1, std::wstring( L"tribal2" ) ));
brcTypeMap.insert( std::make_pair( 0xD2, std::wstring( L"tribal3" ) ));
brcTypeMap.insert( std::make_pair( 0xD3, std::wstring( L"tribal4" ) ));
brcTypeMap.insert( std::make_pair( 0xD4, std::wstring( L"tribal5" ) ));
brcTypeMap.insert( std::make_pair( 0xD5, std::wstring( L"tribal6" ) ));
brcTypeMap.insert( std::make_pair( 0xD6, std::wstring( L"twistedLines1" ) ));
brcTypeMap.insert( std::make_pair( 0xD7, std::wstring( L"twistedLines2" ) ));
brcTypeMap.insert( std::make_pair( 0xD8, std::wstring( L"vine" ) ));
brcTypeMap.insert( std::make_pair( 0xD9, std::wstring( L"waveline" ) ));
brcTypeMap.insert( std::make_pair( 0xDA, std::wstring( L"weavingAngles" ) ));
brcTypeMap.insert( std::make_pair( 0xDB, std::wstring( L"weavingBraid" ) ));
brcTypeMap.insert( std::make_pair( 0xDC, std::wstring( L"weavingRibbon" ) ));
brcTypeMap.insert( std::make_pair( 0xDD, std::wstring( L"weavingStrips" ) ));
brcTypeMap.insert( std::make_pair( 0xDE, std::wstring( L"whiteFlowers" ) ));
brcTypeMap.insert( std::make_pair( 0xDF, std::wstring( L"woodwork" ) ));
brcTypeMap.insert( std::make_pair( 0xE0, std::wstring( L"xIllusions" ) ));
brcTypeMap.insert( std::make_pair( 0xE1, std::wstring( L"zanyTriangles" ) ));
brcTypeMap.insert( std::make_pair( 0xE2, std::wstring( L"zigZag" ) ));
brcTypeMap.insert( std::make_pair( 0xE3, std::wstring( L"zigZagStitch" ) ));
brcTypeMap.insert( std::make_pair( 0xFF, std::wstring( L"none" ) ));
}
brcTypeMapLock.Leave();
}
PropertiesMapping::PropertiesMapping (XMLTools::CStringXmlWriter* pWriter) : m_pXmlWriter(pWriter)
{
init();
}
/*========================================================================================================*/
void PropertiesMapping::appendFlagAttribute( XMLTools::XMLElement* node, const SinglePropertyModifier& sprm, const std::wstring & attributeName )
{
XMLTools::XMLAttribute att( attributeName, FormatUtils::IntToWideString( sprm.Arguments[0] ));
node->AppendAttribute( att );
}
/*========================================================================================================*/
void PropertiesMapping::appendFlagElement( XMLTools::XMLElement* node, const SinglePropertyModifier& sprm, const std::wstring & elementName, bool unique )
{
XMLTools::XMLElement ele( L"w", elementName );
if ( sprm.Arguments[0] == 0 )
{
XMLTools::XMLAttribute val( L"w:val" , L"off" );
ele.AppendAttribute( val );
}
// !!!TODO!!!
if ( unique )
{
node->RemoveChild( ele );
}
node->AppendChild( ele );
}
/*========================================================================================================*/
void PropertiesMapping::appendValueAttribute( XMLTools::XMLElement* node, const std::wstring & attributeName, const std::wstring & attributeValue )
{
XMLTools::XMLAttribute att( attributeName, attributeValue );
node->AppendAttribute( att );
}
/*========================================================================================================*/
void PropertiesMapping::appendValueAttribute( XMLTools::XMLElement* node, const std::wstring & attributeName, int attributeValue )
{
XMLTools::XMLAttribute att( attributeName, FormatUtils::IntToWideString( attributeValue ));
node->AppendAttribute( att );
}
/*========================================================================================================*/
void PropertiesMapping::appendValueAttribute( XMLTools::XMLElement* node, const std::wstring & attributeName, short attributeValue )
{
XMLTools::XMLAttribute att( attributeName, FormatUtils::IntToWideString( attributeValue ));
node->AppendAttribute( att );
}
/*========================================================================================================*/
void PropertiesMapping::appendValueAttribute( XMLTools::XMLElement* node, const std::wstring & attributeName, unsigned short attributeValue )
{
XMLTools::XMLAttribute att( attributeName, FormatUtils::IntToWideString( attributeValue ));
node->AppendAttribute( att );
}
/*========================================================================================================*/
void PropertiesMapping::appendValueAttribute( XMLTools::XMLElement* node, const std::wstring & attributeName, unsigned char attributeValue )
{
XMLTools::XMLAttribute att( attributeName, FormatUtils::IntToWideString( attributeValue ));
node->AppendAttribute( att );
}
/*========================================================================================================*/
void PropertiesMapping::appendValueElement( XMLTools::XMLElement* node, const std::wstring & elementName, const std::wstring & elementValue, bool unique )
{
XMLTools::XMLElement* ele = new XMLTools::XMLElement( L"w" , elementName );
if(!elementValue.empty())
{
XMLTools::XMLAttribute* val = new XMLTools::XMLAttribute( L"w:val" );
val->SetValue( elementValue );
ele->AppendAttribute( *val );
RELEASEOBJECT( val );
}
// !!!TODO!!!
if ( unique )
{
node->RemoveChild( *ele );
}
node->AppendChild( *ele );
RELEASEOBJECT( ele );
}
/*========================================================================================================*/
void PropertiesMapping::appendValueElement( XMLTools::XMLElement* node, const std::wstring & elementName, short elementValue, bool unique )
{
XMLTools::XMLElement* ele = new XMLTools::XMLElement( L"w" , elementName );
std::wstring strValue = FormatUtils::IntToWideString( elementValue );
if ( strValue != std::wstring( L""))
{
XMLTools::XMLAttribute* val = new XMLTools::XMLAttribute( L"w:val", strValue);
ele->AppendAttribute( *val );
RELEASEOBJECT( val );
}
// !!!TODO!!!
if ( unique )
{
node->RemoveChild( *ele );
}
node->AppendChild( *ele );
RELEASEOBJECT( ele );
}
/*========================================================================================================*/
void PropertiesMapping::appendValueElement( XMLTools::XMLElement* node, const std::wstring & elementName, unsigned short elementValue, bool unique )
{
XMLTools::XMLElement* ele = new XMLTools::XMLElement( L"w" , elementName );
std::wstring strValue = FormatUtils::IntToWideString( elementValue );
if ( strValue != std::wstring( L"" ))
{
XMLTools::XMLAttribute* val = new XMLTools::XMLAttribute( L"w:val", strValue);
ele->AppendAttribute( *val );
RELEASEOBJECT( val );
}
// !!!TODO!!!
if ( unique )
{
node->RemoveChild( *ele );
}
node->AppendChild( *ele );
RELEASEOBJECT( ele );
}
/*========================================================================================================*/
void PropertiesMapping::appendValueElement( XMLTools::XMLElement* node, const std::wstring & elementName, unsigned char elementValue, bool unique )
{
XMLTools::XMLElement* ele = new XMLTools::XMLElement( L"w", elementName );
std::wstring strValue = FormatUtils::IntToWideString( elementValue );
if ( strValue != std::wstring( L"" ))
{
XMLTools::XMLAttribute* val = new XMLTools::XMLAttribute( L"w:val", strValue);
ele->AppendAttribute( *val );
RELEASEOBJECT( val );
}
// !!!TODO!!!
if ( unique )
{
node->RemoveChild( *ele );
}
node->AppendChild( *ele );
RELEASEOBJECT( ele );
}
/*========================================================================================================*/
void PropertiesMapping::appendBorderAttributes( BorderCode* brc, XMLTools::XMLElement* border )
{
XMLTools::XMLAttribute val( L"w:val" );
if ( brc->fNil )
{
val.SetValue( L"nil" );
border->AppendAttribute( val );
}
else
{
val.SetValue( getBorderType( brc->brcType ));
border->AppendAttribute( val );
XMLTools::XMLAttribute sz( L"w:sz", FormatUtils::IntToWideString( brc->dptLineWidth ));
border->AppendAttribute( sz );
XMLTools::XMLAttribute space( L"w:space" , FormatUtils::IntToWideString( brc->dptSpace ));
border->AppendAttribute( space );
XMLTools::XMLAttribute color( L"w:color" );
color.SetValue(brc->getColor());
border->AppendAttribute( color );
if ( brc->fShadow )
{
XMLTools::XMLAttribute shadow( L"w:shadow" );
shadow.SetValue( L"1" );
border->AppendAttribute( shadow );
}
}
}
/*========================================================================================================*/
void PropertiesMapping::appendShading( XMLTools::XMLElement* parent, const ShadingDescriptor& desc )
{
std::wstring pattern = getShadingPattern( desc );
if ( ( parent != NULL ) && ( desc.shadingSpecialValue == shadingSpecialValueNormal ))
{
XMLTools::XMLElement shd( L"w:shd" );
//pattern
XMLTools::XMLAttribute val( L"w:val" );
val.SetValue( pattern);
shd.AppendAttribute( val );
if (pattern != L"nil")
{
//fill color
XMLTools::XMLAttribute fill( L"w:fill" );
if ( desc.shadingType == shadingTypeShd )
{
if ( desc.cvBackAuto )
{
fill.SetValue( L"auto" );
}
else
{
fill.SetValue( RGBColor( (int)desc.cvBack, RedLast ).SixDigitHexCode);
}
}
else
{
fill.SetValue( FormatUtils::MapValueToWideString( desc.icoBack, &Global::ColorIdentifier[0][0], 17, 12 ));
}
shd.AppendAttribute( fill );
//foreground color
XMLTools::XMLAttribute color( L"w:color" );
if ( desc.shadingType == shadingTypeShd )
{
if ( desc.cvForeAuto )
{
color.SetValue( L"auto" );
}
else
{
color.SetValue( RGBColor( (int)desc.cvFore, RedLast ).SixDigitHexCode);
}
}
else
{
color.SetValue( FormatUtils::MapValueToWideString( desc.icoFore, &Global::ColorIdentifier[0][0], 17, 12 ));
}
shd.AppendAttribute( color );
}
parent->RemoveChildByName( L"w:shd" );
parent->AppendChild( shd );
}
}
/*========================================================================================================*/
std::wstring PropertiesMapping::getBorderType( unsigned char type )
{
return this->brcTypeMap[type];
}
/*========================================================================================================*/
std::wstring PropertiesMapping::getShadingPattern( const ShadingDescriptor& shd )
{
std::wstring pattern = L"";
switch ( shd.ipat )
{
case Automatic:
pattern = L"clear";
break;
case Solid:
pattern = L"solid";
break;
case Percent_5:
pattern = L"pct5";
break;
case Percent_10:
pattern = L"pct10";
break;
case Percent_20:
pattern = L"pct20";
break;
case Percent_25:
pattern = L"pct25";
break;
case Percent_30:
pattern = L"pct30";
break;
case Percent_40:
pattern = L"pct40";
break;
case Percent_50:
pattern = L"pct50";
break;
case Percent_60:
pattern = L"pct60";
break;
case Percent_70:
pattern = L"pct70";
break;
case Percent_75:
pattern = L"pct75";
break;
case Percent_80:
pattern = L"pct80";
break;
case Percent_90:
pattern = L"pct90";
break;
case DarkHorizontal:
pattern = L"horzStripe";
break;
case DarkVertical:
pattern = L"vertStripe";
break;
case DarkForwardDiagonal:
pattern = L"reverseDiagStripe";
break;
case DarkBackwardDiagonal:
pattern = L"diagStripe";
break;
case DarkCross:
pattern = L"horzCross";
break;
case DarkDiagonalCross:
pattern = L"diagCross";
break;
case Horizontal:
pattern = L"thinHorzStripe";
break;
case Vertical:
pattern = L"thinVertStripe";
break;
case ForwardDiagonal:
pattern = L"thinReverseDiagStripe";
break;
case BackwardDiagonal:
pattern = L"thinDiagStripe";
break;
case Cross:
pattern = L"thinHorzCross";
break;
case DiagonalCross:
pattern = L"thinDiagCross";
break;
case Percent_2_5:
pattern = L"pct5";
break;
case Percent_7_5:
pattern = L"pct10";
break;
case Percent_12_5:
pattern = L"pct12";
break;
case Percent_15:
pattern = L"pct15";
break;
case Percent_17_5:
pattern = L"pct15";
break;
case Percent_22_5:
pattern = L"pct20";
break;
case Percent_27_5:
pattern = L"pct30";
break;
case Percent_32_5:
pattern = L"pct35";
break;
case Percent_35:
pattern = L"pct35";
break;
case Percent_37_5:
pattern = L"pct37";
break;
case Percent_42_5:
pattern = L"pct40";
break;
case Percent_45:
pattern = L"pct45";
break;
case Percent_47_5:
pattern = L"pct45";
break;
case Percent_52_5:
pattern = L"pct50";
break;
case Percent_55:
pattern = L"pct55";
break;
case Percent_57_5:
pattern = L"pct55";
break;
case Percent_62_5:
pattern = L"pct62";
break;
case Percent_65:
pattern = L"pct65";
break;
case Percent_67_5:
pattern = L"pct65";
break;
case Percent_72_5:
pattern = L"pct70";
break;
case Percent_77_5:
pattern = L"pct75";
break;
case Percent_82_5:
pattern = L"pct80";
break;
case Percent_85:
pattern = L"pct85";
break;
case Percent_87_5:
pattern = L"pct87";
break;
case Percent_92_5:
pattern = L"pct90";
break;
case Percent_95:
pattern = L"pct95";
break;
case Percent_97_5:
pattern = L"pct95";
break;
case Nil:
pattern = L"nil";
break;
default:
pattern = L"nil";
break;
}
return pattern;
}
/*========================================================================================================*/
void PropertiesMapping::appendDxaElement( XMLTools::XMLElement* node, const std::wstring & elementName, const std::wstring & elementValue, bool unique )
{
XMLTools::XMLElement ele( L"w", elementName );
XMLTools::XMLAttribute val( L"w:w", elementValue );
ele.AppendAttribute( val );
XMLTools::XMLAttribute type( L"w:type", L"dxa" );
ele.AppendAttribute( type );
if ( unique )
{
node->RemoveChild( ele );
}
node->AppendChild( ele );
}
/*========================================================================================================*/
void PropertiesMapping::addOrSetBorder( XMLTools::XMLElement* pBdr, const XMLTools::XMLElement* border )
{
if ( ( pBdr != NULL ) && ( border != NULL ))
{
//remove old border if it exist
pBdr->RemoveChildByName( border->GetName());
//add new
pBdr->AppendChild( *border );
}
}
}