Files
core/Common/DocxFormat/Source/MathEquation/OutputDev.h
Ilya.Kirillov a298179898 Исправлено имя начала матрицы
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@58108 954022d7-b5bf-4e40-9824-e11837661b57
2016-05-20 23:10:18 +03:00

108 lines
3.8 KiB
C++

#ifndef _MATH_EQUATION_OUTPUTDEV_H
#define _MATH_EQUATION_OUTPUTDEV_H
#include "Types.h"
namespace MathEquation
{
struct TMathFont;
class MathEquation;
class IOutputDev
{
public:
// Íà÷àëî è êîíåö ôîðìóëû
virtual void BeginEquation() = 0;
virtual void EndEquation() = 0;
// Íà÷àëî è êîíåö áëîêà.
virtual void BeginBlock() = 0;
virtual void EndBlock() = 0;
// Âûñòàâëÿåì ðàçìåð â òåêóùåì áëîêå
virtual void SetSize(uint16_t nSize) = 0;
// Äîáàâëÿåì ñèìâîë. Ê ñèìâîëó ìîãóò áûòü äîáàâëåíû ðàçíûå ýëåìåíòû. Çà÷åðêèâàíèå, äîáàâëåíèå àêöåíòà è ò.ä.
virtual void BeginChar(Unicode_t uChar, uint8_t nTypeFace, bool bSpecialSymbol) = 0;
virtual void AddCharEmbel(MEMBELTYPE eType) = 0;
virtual void EndChar() = 0;
// Ìàòðèöà. Êîëè÷åñòâî áëîêîâ çäåñü ðàâíî nRows * nCol, ïîñûëàþòñÿ ïîñëåäîâàòåëüíî â îáû÷íîì ïîðÿäêå (ïåðâàÿ ñòðîêà ñëåâà íàïðàâî, âòîðàÿ ñòðîêà ñëåâà íàïðàâî è ò.ä.)
virtual void BeginMatrix(uint8_t nVAlign, MMATRIXHORALIGN eHorAlign, MMATRIXVERALIGN eVerAlign, bool bEqualRows, bool bEqualCols, uint8_t nRows, uint8_t nCols, uint8_t* pVerBorders, uint8_t* pHorBorders) = 0;
virtual void EndMatrix () = 0;
virtual void StartPile(uint8_t nHAlign, uint8_t nVAlign) = 0;
virtual void EndPile() = 0;
// Ñêîáêè ñ ýëåìåíòîì âíóòðè
virtual void BeginBrackets(MBRACKETSTYPE eType, bool bOpen, bool bClose) = 0;
virtual void EndBrackets (MBRACKETSTYPE eType, bool bOpen, bool bClose) = 0;
// Êîðåíü. Ïåðâûé áëîê - îñíîâàíèå, âòîðîé, åñëè åñòü, ñòåïåíü.
virtual void BeginRoot(bool bDegree) = 0;
virtual void EndRoot () = 0;
// Äðîáè. Ïåðâûé áëîê - ÷èñëèòåëü, âòîðîé áëîê - çíàìåíàòåëü.
virtual void BeginFraction(MFRACTIONTYPES eType, bool bInline) = 0;
virtual void EndFraction () = 0;
// Åñëè bInline = true, òî ïîñëåäîâàòåëüíîñòü áëîêîâ Base, Sub, Sup
// Åñëè bInline = false, òî ïîñëåäîâàòåëüíîñòü áëîêîâ Sub, Sup, Base
virtual void BeginScript(MSCRIPTALIGN eAlign, bool bBase = false, bool bSup = false, bool bSub = false, bool bInline = true) = 0;
virtual void EndScript () = 0;
// Ëèíèÿ ñâåõó èëè ñíèçó îòíîñèòåëüíî òåêñòà
virtual void BeginBar(MBARTYPE eType, bool bTop) = 0;
virtual void EndBar () = 0;
// Ñòðåëêà ñ íàäïèñüþ ñâåðõó èëè ñíèçó (îòëè÷å îò BeginBar/EndBar â òîì, ÷òî çäåñü ñòðåëêà îñíîâíîé
// îáúåêò, à òåêñò - ýòî íåáîëüøàÿ íàäïèñü, à ó òåõ ôóíêöèé íàîáîðîò)
virtual void BeginArrow(MARROWTYPE eType, bool bTop) = 0;
virtual void EndArrow () = 0;
// Èíòåãðàëû. Ïîñëåäîâàòåëüíîñòü áëîêîâ âñåãäà ñëåäóþùàÿ(åñëè áëîê ïðèñóòñòâóåò) Base, Sub, Sup
virtual void BeginIntegral(MINTEGRALTYPE eType) = 0;
virtual void EndIntegral () = 0;
// Ôèãóðíàÿ ñêîáêà ñ òåêñòîì íàä/ïîä îáúåêòîì. Ñíà÷àëà èäåò îñíîâíîé îáúåêò, ïîòîì íàäïèñü ôèãóðíîé ñêîáêè.
virtual void BeginVerticalBrace(bool bTop) = 0;
virtual void EndVerticalBrace () = 0;
// Ñóììà, ïðîèçâåäåíèå, êîïðîèçâåäåíèå, îáúåäèíåíèå, ïåðåñå÷åíèå. Ïîñëåäîâàòåëüíîñòü áëîêîâ Base, Sub, Sup
virtual void BeingNArray(MNARRAYTYPE eType) = 0;
virtual void EndNArray () = 0;
// Äåëåíèå ñòîëáèêîì. Ñ ÷àñòíûì èëè áåç. Âíà÷àëå âñåãäà èäåò îñíîâàíèå, ïîòîì åñëè åñòü ÷àñòíîå.
virtual void BeginLongDivision(MLONGDIVISION eType) = 0;
virtual void EndLongDivision () = 0;
// < | > - òàêîé ýëåìåíò
virtual void BeginAngleBracketsWithSeparator(MANGLEBRACKETSWITHSEPARATORTYPE eType) = 0;
virtual void EndAngleBracketsWithSeparator () = 0;
void AddFont(uint8_t nTypeFace, std::string sName, bool bBold, bool bItalic)
{
TMathFont aFont;
aFont.sName = sName;
aFont.bBold = bBold;
aFont.bItalic = bItalic;
m_mFonts[nTypeFace] = aFont;
}
TMathFont* GetFont(uint8_t nTypeFace)
{
TFontMap::iterator itFind = m_mFonts.find(nTypeFace);
if (itFind != m_mFonts.end())
return &(itFind->second);
return NULL;
}
protected:
TFontMap m_mFonts;
};
}
#endif