Files
DocumentServer-v-9.2.0/core/RtfFile/Format/DestinationCommand.h
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

881 lines
28 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 <boost/algorithm/string.hpp>
#include "RtfReader.h"
#include "RtfDocument.h"
#include "RtfChar.h"
#include "RtfField.h"
#include "RtfShape.h"
#include "RtfMath.h"
#include "RtfTable.h"
#include "RtfBookmark.h"
#include "RtfOle.h"
#include "../OOXml/Writer/OOXWriter.h"
#include "../OOXml/Writer/OOXRelsWriter.h"
#include "../../MsBinaryFile/Common/Vml/PPTShape/Enums.h"
#define COMMAND_RTF_BOOL( pattern, target, command, hasParameter, parameter )\
else if( pattern == command )\
{\
if( true == hasParameter && 0 == parameter)\
target = 0;\
else\
target = 1;\
}
#define COMMAND_RTF_INT( pattern, target, command, hasParameter, parameter )\
else if( pattern == command )\
{\
if( true == hasParameter )\
target = parameter;\
}
#define COMMAND_RTF_SPECIAL_CHAR( pattern, target, command, hasParameter, parameter )\
else if( pattern == command )\
{\
RtfCharSpecialPtr pNewChar ( new RtfCharSpecial() );\
pNewChar->m_eType = parameter;\
pNewChar->m_oProperty = oReader.m_oState->m_oCharProp;\
target->AddItem( pNewChar );\
}
//Command не имеет состояний
#include "math.h"
class RtfBorderCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter,RtfBorder& oOutput);
};
class RtfShadingCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter, RtfShading& oOutput );
};
class RtfShadingCellCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter, RtfShading& oOutput);
};
class RtfShadingCharCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter, RtfShading& oOutput );
};
class RtfShadingRowCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter, RtfShading& oOutput);
};
class RtfFrameCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter, RtfFrame& oOutput )
{
return true;
}
};
//class RtfOldList;
class TextReader : public RtfAbstractReader
{
private:
std::wstring& m_sName;
bool m_bErease;
public:
TextReader( std::wstring& sName, bool bErease = true );
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
};
class RtfCharPropsCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter, RtfCharProperty * props, bool bLookOnBorder = true);
//bool bLookOnBorder; Надо ли читать свойства border( актуально для ParagraphReader )
};
class RtfParagraphPropsCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter, RtfParagraphProperty * props);
};
class RtfTableCellPropsCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter, RtfCellProperty * props);
};
class RtfTableRowPropsCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter, RtfRowProperty * props);
};
class RtfOldListReader : public RtfAbstractReader
{
private:
RtfOldList& m_oTarget;
public:
RtfOldListReader( RtfOldList& oTarget);
bool ExecuteCommand( RtfDocument& oDocument, RtfReader& oReader, std::string sKey, bool bHasPar, int nPar );
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfHEXStringReader : public RtfAbstractReader
{
private:
std::string sHexString;
public:
std::pair<boost::shared_array<unsigned char>, int> pDataArray;
virtual void ExecuteTextInternal2(RtfDocument& oDocument, RtfReader& oReader, std::string & sKey, int& nSkipChars);
void ExitReader(RtfDocument& oDocument, RtfReader& oReader);
};
class RtfThemeDataReader : public RtfHEXStringReader
{
public:
void ExitReader(RtfDocument& oDocument, RtfReader& oReader);
};
class RtfDataStoreReader : public RtfHEXStringReader
{
public:
void ExitReader(RtfDocument& oDocument, RtfReader& oReader);
};
class RtfColorSchemeReader : public RtfHEXStringReader
{
public:
void ExitReader(RtfDocument& oDocument, RtfReader& oReader);
};
class RtfFontTableReader: public RtfAbstractReader
{
private:
enum _InternalState{ is_normal, is_panose, is_altname };
RtfFont m_oFont;
_InternalState m_eInternalState;
public:
RtfFontTableReader();
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteTextInternal2( RtfDocument& oDocument, RtfReader& oReader, std::string & sKey, int& nSkipChars);
std::wstring RemoveLastUnchar(std::wstring str);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
void PopState(RtfDocument& oDocument, RtfReader& oReader);
};
class RtfColorTableReader : public RtfAbstractReader
{
private:
RtfColor oCurColor;
bool m_bIsSet;
public:
RtfColorTableReader();
bool ExecuteCommand( RtfDocument& oDocument, RtfReader& oReader, std::string sKey, bool bHasPar, int nPar );
void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, std::wstring oText );
};
class RtfDefCharPropReader: public RtfAbstractReader
{
public:
RtfDefCharPropReader();
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfRevisionTableReader : public RtfAbstractReader
{
public:
RtfRevisionTableReader();
bool ExecuteCommand( RtfDocument& oDocument, RtfReader& oReader, std::string sKey, bool bHasPar, int nPar );
void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, std::wstring sText );
private:
std::wstring m_sCurrent;
};
class RtfInfoReader: public RtfAbstractReader
{
private:
enum _InternalState{ is_normal, is_title, is_subject, is_author, is_manager, is_company, is_operator, is_category, is_keywords,
is_comment, is_doccomm, is_hlinkbase, is_creatim, is_revtim, is_printim, is_buptim } ;
_InternalState m_eInternalState;
public:
RtfInfoReader();
bool ExecuteCommand( RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, std::wstring sText );
};
class RtfPictureReader : public RtfAbstractReader
{
class PLACEABLEMETAHEADER //заголовок для wmf из rtf ( в rtf wmf не содержит размеров картинки )
{
public:
DWORD Key; /* Magic number (always 9AC6CDD7h) */
WORD Handle; /* Metafile HANDLE number (always 0) */
SHORT Left; /* Left coordinate in metafile units */
SHORT Top; /* Top coordinate in metafile units */
SHORT Right; /* Right coordinate in metafile units */
SHORT Bottom; /* Bottom coordinate in metafile units */
WORD Inch; /* Number of metafile units per inch */
DWORD Reserved; /* Reserved (always 0) */
WORD Checksum; /* Checksum value for previous 10 WORDs */
PLACEABLEMETAHEADER();
void CalculateChecksum();
std::wstring ToString();
std::wstring ByteToString( BYTE* pbData, int nSize, bool bLittleEnd = true );
};
public:
enum _InternalState {
is_normal, is_charBorder, is_borderTop, is_borderLeft, is_borderBottom, is_borderRight, is_borderBox, is_borderBar,
is_borderCellLeft, is_borderCellTop, is_borderCellRight, is_borderCellBottom, is_borderCellLR, is_borderCellRL,
is_borderRowLeft, is_borderRowTop, is_borderRowRight, is_borderRowBottom, is_borderRowVer, is_borderRowHor
};
//только для определения бордера
private:
_InternalState m_eInternalState; private:
RtfShape& m_oShape;
std::wstring m_sFile;
std::wstring m_sData;
bool m_bBin;
BYTE* m_pbBin;
size_t m_nBinLength;
public:
RtfPictureReader( RtfReader& oReader, RtfShape& oShape );
~RtfPictureReader();
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfOleReader: public RtfAbstractReader
{
private:
RtfOle& m_oOle;
public:
RtfOleReader(RtfOle& oOle);
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfOleBinReader : public RtfAbstractReader
{
private:
std::vector<std::string>/*&*/ m_arData;
public:
RtfOleBinReader();
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
void GetData( BYTE** ppData, long& nSize);
};
class RtfTrackerChangesReader: public RtfAbstractReader
{
private:
enum _InternalState{ is_normal,is_charBorder, is_borderTop, is_borderLeft, is_borderBottom, is_borderRight, is_borderBox, is_borderBar,
is_borderCellLeft,is_borderCellTop,is_borderCellRight,is_borderCellBottom,is_borderCellLR,is_borderCellRL,
is_borderRowLeft,is_borderRowTop,is_borderRowRight,is_borderRowBottom,is_borderRowVer,is_borderRowHor} ;
//только для определения бордеров
_InternalState m_eInternalState;
RtfCharPropertyPtr m_pCharProps;
RtfParagraphPropertyPtr m_pParagraphProps;
RtfRowPropertyPtr m_pTableRowProps;
//RtfCellPropertyPtr m_pTableCellProps;
RtfSectionPropertyPtr m_pSectionProps;
public:
RtfTrackerChangesReader(RtfCharPropertyPtr & prop) : m_pCharProps (prop), m_eInternalState(is_normal) {}
RtfTrackerChangesReader(RtfParagraphPropertyPtr & prop) : m_pParagraphProps (prop), m_eInternalState(is_normal) {}
RtfTrackerChangesReader(RtfRowPropertyPtr & prop) : m_pTableRowProps (prop), m_eInternalState(is_normal) {}
//RtfTrackerChangesReader(RtfCellPropertyPtr & prop) : m_pTableCellProps (prop), m_eInternalState(is_normal) {}
RtfTrackerChangesReader(RtfSectionPropertyPtr & prop) : m_pSectionProps (prop), m_eInternalState(is_normal) {}
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfShapeReader : public RtfAbstractReader
{
public:
class ShapePropertyReader : public RtfAbstractReader
{
public:
class ShapePropertyValueReader : public RtfAbstractReader
{
std::wstring& m_sPropName;
RtfShape& m_oShape;
public:
std::wstring m_sPropValue;
ShapePropertyValueReader(std::wstring& sPropName, RtfShape& oShape);
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void PopState( RtfDocument& oDocument, RtfReader& oReader );
void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, std::wstring oText);
};
private:
std::wstring sPropName;
RtfShape& m_oShape;
public:
ShapePropertyReader(RtfShape& oShape);
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
private:
RtfShape& m_oShape;
public:
RtfShapeReader( RtfShape& oShape );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfShapeGroupReader : public RtfShapeReader
{
public:
RtfShape& m_oShapeGroup;
bool m_bHeader; //чтобы отличать заголовок от вложенных групп
RtfShapeGroupReader( RtfShape& oShape );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfBackgroundReader : public RtfShapeReader
{
public:
RtfShape& m_oShape;
RtfBackgroundReader( RtfShape& oShape );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfOldShapeReader : public RtfAbstractReader
{
private:
RtfShape& m_oShape;
public:
RtfOldShapeReader( RtfShape& oShape );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfShppictReader : public RtfAbstractReader
{
private:
RtfShape& m_oShape;
public:
RtfShppictReader( RtfShape& oShape );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfAllPictReader : public RtfAbstractReader
{
private:
RtfShape& m_oShape;
public:
RtfAllPictReader( RtfShape& oShape );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfMathReader: public RtfAbstractReader
{
private:
RtfCharProperty m_oCharProp;
public:
RtfMathPtr m_pMath;
RtfParagraphProperty::ParagraphAlign m_eParAlign;
RtfMathReader(RtfMathPtr& pMath);
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
std::wstring ExecuteMathProp(RtfDocument& oDocument, std::string sCommand, int parameter);
void ExitReader2( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfFieldReader: public RtfAbstractReader
{
private:
enum _InternalState{ is_normal, is_insert, is_datafield, is_formfield, is_result } InternalState;
_InternalState m_eInternalState;
RtfField& m_oField;
public:
RtfFieldReader( RtfField& oField );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
bool IsEmptyText( RtfDocument& oDocument );
private:
void TryToPepairResult( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfAnnotElemReader: public RtfAbstractReader
{
public:
RtfAnnotElem& m_oAnnot;
RtfAnnotElemReader( RtfAnnotElem& oAnnot );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
};
class RtfBookmarkStartReader: public RtfAbstractReader
{
public:
RtfBookmarkStart& m_oBookmarkStart;
RtfBookmarkStartReader( RtfBookmarkStart& oBookmark );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
};
class RtfBookmarkEndReader: public RtfAbstractReader
{
public:
RtfBookmarkEnd& m_oBookmarkEnd;
RtfBookmarkEndReader( RtfBookmarkEnd& oBookmark );
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
};
class FootnoteReader;
//Destination имеет состояния
class RtfParagraphPropDestination // todo - последний параграф не обрабатывается
{
public:
enum _InternalState{ is_normal,is_charBorder, is_borderTop, is_borderLeft, is_borderBottom, is_borderRight, is_borderBox, is_borderBar,
is_borderCellLeft,is_borderCellTop,is_borderCellRight,is_borderCellBottom,is_borderCellLR,is_borderCellRL,
is_borderRowLeft,is_borderRowTop,is_borderRowRight,is_borderRowBottom,is_borderRowVer,is_borderRowHor} ;
//только для определения бордера
private:
_InternalState m_eInternalState;
RtfParagraphPtr m_oCurParagraph;
//реальные параграфы и таблицы
std::vector< ITextItemPtr > aCellRenderables;
std::vector< int > aItaps; //вложенность параграфов
std::vector< RtfTableCellPtr > aCells;
std::vector< int > aCellItaps; //вложенность cell
std::vector< RtfTableRowPtr > aRows;
std::vector< int > aRowItaps; //вложенность row
RtfRowProperty oCurRowProperty;
RtfReader* m_oReader;
public:
bool m_bPar; // если последняя команда была par, то не надо добавлять параграф
TextItemContainerPtr m_oTextItems; //для разбивки на TextItem
RtfTab m_oCurTab;
int nTargetItap; //уровень который считается не таблицей ( для того чтобы читать параграфы в таблицах )
int nCurItap;
RtfParagraphPropDestination( );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,RtfAbstractReader& oAbstrReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
void AddItem( RtfParagraphPtr oItem, RtfReader& oReader, bool bEndCell, bool bEndRow );
void Finalize( RtfReader& oReader);
void EndRows(RtfReader& oReader);
void ExecuteNumberChar( RtfDocument& oDocument, RtfReader& oReader, RtfAbstractReader& oAbstrReader, int nWinChar, int nMacChar );
};
class RtfFootnoteReader: public RtfAbstractReader
{
private:
RtfParagraphPropDestination m_oParPropDest;
public:
RtfFootnote& m_oRtfFootnote;
RtfFootnoteReader( RtfFootnote& oRtfFootnote );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, std::wstring sText );
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfAnnotationReader: public RtfAbstractReader
{
private:
RtfParagraphPropDestination m_oParPropDest;
public:
RtfAnnotation& m_oRtfAnnotation;
RtfAnnotationReader( RtfAnnotation& oRtfAnnotation );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, std::wstring sText );
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfDefParPropReader: public RtfAbstractReader
{
private:
RtfParagraphPropDestination m_oParPropDest;
public:
RtfDefParPropReader( );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExitReader(RtfDocument& oDocument, RtfReader& oReader);
};
//class LockedExeceptReader: public RtfAbstractReader
//{
//private:
// RtfStyleException m_oCurException;
//public:
// bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter)
// {
// if( "lsdlockedexcept" == sCommand )
// return true;
// else if( "lsdpriority" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nPriority = parameter;
// }
// else if( "lsdunhideused" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nHiddenWhenUse = parameter;
// }
// else if( "lsdqformat" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nQFormat = parameter;
// }
// else if( "lsdlocked" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nLocked = parameter;
// }
// else if( "lsdsemihidden" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nSemiHidden = parameter;
// }
// else
// {
// return false;
// }
// return true;
// }
// void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, std::wstring oText, std::string oTextOriginal )
// {
// if( sText.Find(';') != -1 )
// {
// sText.Remove(';');
// m_oCurException.m_sName += sText;
// oDocument.m_oLatentStyleTable.AddItem( m_oCurException );
// m_oCurException.SetDefaultRtf();
// }
// else
// {
// m_oCurException.m_sName += sText;
// }
// }
//};
//
//class LatentstyleTableReader: public RtfAbstractReader
//{
//public: bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter)
// {
// if( "latentstyles" == sCommand )
// return true;
// else if( "lsdstimax" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nCount = parameter;
// }
// else if( "lsdlockeddef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nLocked = parameter;
// }
// else if( "lsdsemihiddendef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nSemiHidden = parameter;
// }
// else if( "lsdunhideuseddef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nUnHiddenWhenUse = parameter;
// }
// else if( "lsdqformatdef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nQFormat = parameter;
// }
// else if( "lsdprioritydef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nPriority = parameter;
// }
// else if( "lsdlockedexcept" == sCommand )
// {
// LockedExeceptReader oExceptionReader;
// StartSubReader( oExceptionReader, oDocument, oReader );
// }
// else
// {
// return false;
// }
// return true;
//
// }
//};
//
class RtfStyleTableReader: public RtfAbstractReader
{
class RtfStyleReader: public RtfAbstractReader
{
//только для определения бордеров
private:
enum _InternalState{ is_normal, is_tsbrdrt, is_tsbrdrb, is_tsbrdrl, is_tsbrdrr, is_tsbrdrh, is_tsbrdrv } InternalState;
_InternalState m_eInternalState;
RtfParagraphPropDestination m_oParDest;
RtfStylePtr m_oCurStyle;
// RtfTableStyleProperty m_oTableStyleProperty;
public:
RtfStyleReader();
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
void ExitReader(RtfDocument& oDocument, RtfReader& oReader);
};
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfListTableReader: public RtfAbstractReader
{
public:
class ListReader: public RtfAbstractReader
{
public:
class ListLevelReader: public RtfAbstractReader
{
private:
RtfListLevelProperty & m_oListLevelProp;
public:
ListLevelReader(RtfListLevelProperty & oListLevelProp);
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
};
ListReader(RtfListProperty& oListProp);
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
private:
RtfListProperty& m_oListProp;
};
class ListPictureReader: public RtfAbstractReader
{
public:
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
RtfListTableReader();
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfListOverrideTableReader: public RtfAbstractReader
{
private:
class ListOverrideReader : public RtfAbstractReader
{
private:
class lfolevelReader : public RtfAbstractReader
{
private:
RtfListOverrideProperty::ListOverrideLevels::ListOverrideLevel& m_oOverrideLevel;
public:
lfolevelReader( RtfListOverrideProperty::ListOverrideLevels::ListOverrideLevel& oOverrideLevel );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
private:
RtfListOverrideProperty& m_oProperty;
public:
ListOverrideReader(RtfListOverrideProperty& oProperty);
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
public:
RtfListOverrideTableReader();
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfDocumentCommand
{
public:
static bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfSectionCommand
{
private:
enum _InternalState{ is_none, is_border_left, is_border_top, is_border_right, is_border_bottom }InternalState;
_InternalState m_eInternalState;
int nCurCollumnNumber;
public:
RtfSectionCommand();
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, RtfAbstractReader& oAbstrReader, std::string sCommand, bool hasParameter, int parameter);
};
class RtfNormalReader : public RtfAbstractReader
{
public:
RtfParagraphPropDestination oParagraphReaderDestination;
RtfSectionCommand oRtfSectionCommand;
RtfNormalReader( RtfDocument& oDocument, RtfReader& oReader );
bool ExecuteCommand( RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter );
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
void ExitReader(RtfDocument& oDocument, RtfReader& oReader);
private:
void SectDef( RtfDocument& oDocument, RtfReader& oReader );
};
class RtfParagraphReader : public RtfAbstractReader
{
private:
std::string m_sHeader;
public:
RtfParagraphPropDestination m_oParPropDest;
RtfParagraphReader(std::string sHeader, RtfReader& oReader);
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
void ExitReader(RtfDocument& oDocument, RtfReader& oReader);
};
class RtfFormFieldReader : public RtfAbstractReader
{
public:
RtfFormFieldReader(RtfFormField& oFormField);
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter);
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, std::wstring sText);
private:
enum _InternalState {
is_none, is_name, is_datafield, is_deftext, is_format, is_helptext, is_stattext, is_entrymcr, is_exitmcr, is_list
};
_InternalState m_eInternalState;
RtfFormField& m_oFormField;
};
class RtfFieldInstReader : public RtfAbstractReader, public RtfParagraphPropDestination
{
public:
RtfFieldInst& m_oFieldInst;
RtfFieldInstReader( RtfFieldInst& oFieldInst );
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader , std::string sCommand, bool hasParameter, int parameter);
void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, std::wstring sText );
void ExitReader( RtfDocument& oDocument, RtfReader& oReader );
};