Files
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

512 lines
10 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
*
*/
#pragma once
#include "HeaderFooterWriter.h"
#include "../../../Base/Unit.h"
#include "../../../DocxFormat/Logic/RunProperty.h"
#include "../../../DocxFormat/Logic/ParagraphProperty.h"
#include "../BinWriter/BinReaderWriterDefines.h"
#include <boost/algorithm/string.hpp>
#include <boost/unordered_map.hpp>
namespace BinDocxRW {
class docRGB
{
public:
BYTE R;
BYTE G;
BYTE B;
docRGB();
std::wstring ToString();
};
class CThemeColor{
public:
bool Auto;
BYTE Color;
BYTE Tint;
BYTE Shade;
bool bShade;
bool bTint;
bool bColor;
CThemeColor();
void Reset();
bool IsNoEmpty();
std::wstring ToStringColor();
std::wstring ToStringTint();
std::wstring ToStringShade();
void ToCThemeColor( nullable<SimpleTypes::CHexColor>& oColor,
nullable<SimpleTypes::CThemeColor>& oThemeColor,
nullable<SimpleTypes::CUcharHexNumber>& oThemeTint,
nullable<SimpleTypes::CUcharHexNumber>& oThemeShade);
};
class Background
{
public:
docRGB Color;
CThemeColor ThemeColor;
std::wstring sObject;
bool bColor;
bool bThemeColor;
Background();
std::wstring Write();
};
class docStyle
{
public:
std::wstring Name;
std::wstring Id;
BYTE byteType;
bool Default;
bool Custom;
std::wstring Aliases;
std::wstring BasedOn;
std::wstring NextId;
std::wstring Link;
bool qFormat;
long uiPriority;
bool hidden;
bool semiHidden;
bool unhideWhenUsed;
bool autoRedefine;
bool locked;
bool personal;
bool personalCompose;
bool personalReply;
std::wstring TextPr;
std::wstring ParaPr;
std::wstring TablePr;
std::wstring RowPr;
std::wstring CellPr;
std::vector<std::wstring> TblStylePr;
bool bDefault;
bool bCustom;
bool bqFormat;
bool buiPriority;
bool bhidden;
bool bsemiHidden;
bool bunhideWhenUsed;
bool bautoRedefine;
bool blocked;
bool bpersonal;
bool bpersonalCompose;
bool bpersonalReply;
public:
docStyle();
void Write(NSStringUtils::CStringBuilder* pCStringWriter);
};
class tblStylePr
{
public:
NSStringUtils::CStringBuilder Writer;
BYTE Type;
bool bType;
public:
tblStylePr();
};
class PaddingsToWrite
{
public:
long Left;
long Top;
long Right;
long Bottom;
bool bLeft;
bool bTop;
bool bRight;
bool bBottom;
public:
PaddingsToWrite();
};
class PaddingsToWriteMM
{
public:
double Left;
double Top;
double Right;
double Bottom;
bool bLeft;
bool bTop;
bool bRight;
bool bBottom;
public:
PaddingsToWriteMM();
};
class docImg
{
public:
long MediaId;
BYTE Type;
double X;
double Y;
double Width;
double Height;
PaddingsToWriteMM Paddings;
_INT32 m_nDocPr;
bool bMediaId;
bool bType;
bool bX;
bool bY;
bool bWidth;
bool bHeight;
bool bPaddings;
std::wstring srId;
docImg(_INT32 nDocPr);
void Write(NSStringUtils::CStringBuilder* pCStringWriter);
};
class docW
{
public:
BYTE Type;
double W;
long WDocx;
bool bType;
bool bW;
bool bWDocx;
docW();
void Write(NSStringUtils::CStringBuilder& pCStringWriter, const std::wstring& sName);
std::wstring Write(const std::wstring& sName);
};
class rowPrAfterBefore
{
public:
std::wstring sName;
long nGridAfter;
docW oAfterWidth;
bool bGridAfter;
rowPrAfterBefore(std::wstring name);
void Write(NSStringUtils::CStringBuilder& writer);
};
class WriteHyperlink
{
public:
std::wstring rId;
std::wstring href;
std::wstring anchor;
std::wstring tooltip;
NSStringUtils::CStringBuilder writer;
static WriteHyperlink* Parse(std::wstring fld);
void Write(NSStringUtils::CStringBuilder& wr);
};
class IdCounter
{
private:
_INT32 m_nId;
public:
IdCounter(_INT32 nStart = 0);
_INT32 getNextId(_INT32 nCount = 1);
_INT32 getCurrentId();
};
class CComment
{
private:
IdCounter& m_oParaIdCounter;
IdCounter& m_oFormatIdCounter;
public:
void *pBinary_DocumentTableReader;
_INT32 IdOpen;
_INT32 IdFormat;
std::wstring UserName;
std::wstring Initials;
std::wstring UserId;
std::wstring ProviderId;
std::wstring Date;
std::wstring OOData;
std::wstring DateUtc;
std::wstring UserData;
bool Solved;
_UINT32 DurableId;
std::wstring Text;
std::wstring sContent;
std::wstring sParaId;
std::wstring sParaIdParent;
std::vector<CComment*> replies;
bool bIdOpen;
bool bIdFormat;
bool bSolved;
bool bDurableId;
public:
CComment(IdCounter& oParaIdCounter, IdCounter& oFormatIdCounter);
~CComment();
_INT32 getCount();
void setFormatStart(_INT32 IdFormatStart);
std::wstring writeRef(const std::wstring& sBefore, const std::wstring& sRef, const std::wstring& sAfter);
static std::wstring writeRef(CComment* pComment, const std::wstring& sBefore, const std::wstring& sRef, const std::wstring& sAfter);
static void writeContentWritePart(CComment* pComment, std::wstring& sText, _INT32 nPrevIndex, _INT32 nCurIndex, std::wstring& sRes);
static std::wstring writeContent(CComment* pComment);
static std::wstring writeContentExt(CComment* pComment);
static std::wstring writeContentExtensible(CComment* pComment);
static std::wstring writeContentUserData(CComment* pComment);
static std::wstring writeContentsIds(CComment* pComment);
static std::wstring writePeople(CComment* pComment);
};
class CComments
{
boost::unordered_map<_INT32, CComment*> m_mapComments;
boost::unordered_map<std::wstring, CComment*> m_mapAuthors;
public:
IdCounter m_oFormatIdCounter;
IdCounter m_oParaIdCounter;
CComments();
~CComments();
void add(CComment* pComment);
void addAuthor(CComment* pComment);
CComment* get(_INT32 nInd);
_INT32 getNextId(_INT32 nCount = 1);
std::wstring writeContent();
std::wstring writeContentExt();
std::wstring writeContentExtensible();
std::wstring writeContentUserData();
std::wstring writeContentsIds();
std::wstring writePeople();
};
class CDrawingPropertyWrapPoint
{
public:
_INT64 X;
_INT64 Y;
bool bX;
bool bY;
CDrawingPropertyWrapPoint();
};
class CDrawingPropertyWrap
{
public:
BYTE WrappingType;
bool Edited;
CDrawingPropertyWrapPoint Start;
std::vector<CDrawingPropertyWrapPoint*> Points;
bool bWrappingType;
bool bEdited;
bool bStart;
CDrawingPropertyWrap();
~CDrawingPropertyWrap();
};
class CDrawingProperty
{
public:
bool bObject;
std::wstring sObjectProgram;
_UINT32 nObjectId;
BYTE nObjectType;
_INT32 DataPos;
_INT32 DataLength;
BYTE Type;
bool BehindDoc;
_INT64 DistL;
_INT64 DistT;
_INT64 DistR;
_INT64 DistB;
bool LayoutInCell;
_UINT32 RelativeHeight;
bool BSimplePos;
_INT64 EffectExtentL;
_INT64 EffectExtentT;
_INT64 EffectExtentR;
_INT64 EffectExtentB;
_INT64 Width;
_INT64 Height;
BYTE PositionHRelativeFrom;
BYTE PositionHAlign;
_INT64 PositionHPosOffset;
double PositionHPctOffset;
BYTE PositionVRelativeFrom;
BYTE PositionVAlign;
_INT64 PositionVPosOffset;
double PositionVPctOffset;
_INT64 SimplePosX;
_INT64 SimplePosY;
std::wstring sSizeRelH;
std::wstring sSizeRelV;
_INT32 m_nDocPr;
std::wstring sGraphicFramePr;
std::wstring sDocPr;
std::wstring sGraphicFrameContent;
CDrawingPropertyWrap DrawingPropertyWrap;
bool bDataPos;
bool bDataLength;
bool bType;
bool bBehindDoc;
bool bDistL;
bool bDistT;
bool bDistR;
bool bDistB;
bool bLayoutInCell;
bool bRelativeHeight;
bool bBSimplePos;
bool bEffectExtentL;
bool bEffectExtentT;
bool bEffectExtentR;
bool bEffectExtentB;
bool bWidth;
bool bHeight;
bool bPositionHRelativeFrom;
bool bPositionHAlign;
bool bPositionHPosOffset;
bool bPositionHPctOffset;
bool bPositionVRelativeFrom;
bool bPositionVAlign;
bool bPositionVPosOffset;
bool bPositionVPctOffset;
bool bSimplePosX;
bool bSimplePosY;
bool bDrawingPropertyWrap;
CDrawingProperty(_INT32 nDocPr);
bool IsGraphicFrameContent();
std::wstring Write();
};
class CWiterTblPr
{
public:
std::wstring tblPrChange;
std::wstring Caption;
std::wstring Description;
std::wstring Style;
std::wstring Props;
bool IsEmpty();
std::wstring Write();
};
class CHyperlink{
public:
std::wstring rId;
std::wstring sLink;
std::wstring sAnchor;
std::wstring sTooltip;
bool History;
std::wstring sDocLocation;
std::wstring sTgtFrame;
NSStringUtils::CStringBuilder writer;
bool bHistory;
public:
CHyperlink();
void Write(NSStringUtils::CStringBuilder& wr);
};
class CFldSimple{
public:
std::wstring sInstr;
NSStringUtils::CStringBuilder writer;
public:
CFldSimple();
void Write(NSStringUtils::CStringBuilder& wr);
};
class TrackRevision
{
public:
std::wstring Author;
std::wstring Date;
_INT32* Id;
std::wstring UserId;
_INT32* vMerge;
_INT32* vMergeOrigin;
OOX::Logic::CRunProperty* RPr;
CWiterTblPr* tblPr;
NSStringUtils::CStringBuilder* tblGridChange;
NSStringUtils::CStringBuilder* trPr;
NSStringUtils::CStringBuilder* tcPr;
NSStringUtils::CStringBuilder* content;
NSStringUtils::CStringBuilder* contentRun;
TrackRevision();
~TrackRevision();
bool IsNoEmpty();
std::wstring ToString(std::wstring sName);
void Write(NSStringUtils::CStringBuilder* pCStringWriter, std::wstring sName);
};
}