xref: /trunk/main/starmath/source/mathtype.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28  #ifndef MATHTYPE_HXX
29 #define MATHTYPE_HXX
30 
31 #include "node.hxx"
32 #include "eqnolefilehdr.hxx"
33 
34 #include <sot/storage.hxx>
35 
36 #include <set>
37 
38 class SfxMedium;
39 
40 class MathTypeFont
41 {
42 public:
43     sal_uInt8 nTface;
44     sal_uInt8 nStyle;
45     MathTypeFont() : nTface(0),nStyle(0) {}
46     MathTypeFont(sal_uInt8 nFace) : nTface(nFace),nStyle(0) {}
47     void AppendStyleToText(String &rS);
48 };
49 
50 struct LessMathTypeFont
51 {
52     sal_Bool operator() (const MathTypeFont &rValue1,
53         const MathTypeFont &rValue2) const
54     {
55         return rValue1.nTface < rValue2.nTface;
56     }
57 };
58 
59 typedef ::std::set< MathTypeFont, LessMathTypeFont > MathTypeFontSet;
60 
61 class MathType
62 {
63 public:
64     MathType(String &rIn) :
65         rRet(rIn), nHAlign(0), nVAlign(0), nDefaultSize(12),
66         nLSize(0), nDSize(0), nCurSize(0), nLastSize(0), bIsSilent(sal_False)
67     {
68         Init();
69     }
70 
71     MathType(String &rIn,SmNode *pIn) :
72         rRet(rIn), pTree(pIn), nHAlign(2), nVAlign(0), nInsertion(0), nDefaultSize(12),
73         nLSize(0), nDSize(0), nCurSize(0), nLastSize(0), nSpec(0), bIsSilent(sal_False)
74     {
75         Init();
76     }
77 
78     int Parse( SotStorage* pStor );
79     int ConvertFromStarMath( SfxMedium& rMedium );
80 
81 private:
82 /*Ver 2 Header*/
83     sal_uInt8 nVersion;
84     sal_uInt8 nPlatform;
85     sal_uInt8 nProduct;
86     sal_uInt8 nProdVersion;
87     sal_uInt8 nProdSubVersion;
88 
89     SvStorageStream *pS;
90 
91     void Init();
92 
93     int HandleRecords(int nLevel=0,sal_uInt8 nSelector=0xFF,
94         sal_uInt8 nVariation=0xFF,int nRows=0,int nCols=0);
95     sal_Bool HandleSize(sal_Int16 nLSize,sal_Int16 nDSize, int &rSetSize);
96     void HandleAlign(sal_uInt8 nHAlign,sal_uInt8 nVAlign, int &rSetAlign);
97     int HandlePile(int &rSetAlign,int nLevel,sal_uInt8 nSelector,
98         sal_uInt8 nVariation);
99     int HandleMatrix(int nLevel,sal_uInt8 nSelector,sal_uInt8 nVariarion);
100     void HandleMatrixSeperator(int nMatrixRows,int nMatrixCols,int &rCurCol,
101         int &rCurRow);
102     int HandleTemplate(int nLevel,sal_uInt8 &rSelector,sal_uInt8 &rVariation,
103         xub_StrLen &rLastTemplateBracket);
104     void HandleEmblishments();
105     void HandleSetSize();
106     int HandleChar(xub_StrLen &rTextStart,int &rSetSize,int nLevel,
107         sal_uInt8 nTag,sal_uInt8 nSelector,sal_uInt8 nVariation,
108         sal_Bool bSilent);
109     void HandleNudge();
110     int xfLMOVE(sal_uInt8 nTest) {return nTest&0x80;}
111     int xfAUTO(sal_uInt8 nTest) {return nTest&0x10;}
112     int xfEMBELL(sal_uInt8 nTest) {return nTest&0x20;}
113     int xfNULL(sal_uInt8 nTest) {return nTest&0x10;}
114     int xfLSPACE(sal_uInt8 nTest) {return nTest&0x40;}
115     int xfRULER(sal_uInt8 nTest) {return nTest&0x20;}
116 
117     sal_uInt8 HandleNodes(SmNode *pNode,int nLevel=0);
118     int StartTemplate(sal_uInt16 nSelector,sal_uInt16 nVariation=0);
119     void EndTemplate(int nOldPendingAttributes);
120     void HandleSmMatrix(SmMatrixNode *pMatrix,int nLevel);
121     void HandleTable(SmNode *pNode,int nLevel);
122     void HandleRoot(SmNode *pNode,int nLevel);
123     void HandleSubSupScript(SmNode *pNode,int nLevel);
124     sal_uInt8 HandleCScript(SmNode *pNode,SmNode *pContent,int nLevel,
125         sal_uLong *pPos=NULL,sal_Bool bTest=sal_True);
126     void HandleFractions(SmNode *pNode,int nLevel);
127     void HandleBrace(SmNode *pNode,int nLevel);
128     void HandleVerticalBrace(SmNode *pNode,int nLevel);
129     void HandleOperator(SmNode *pNode,int nLevel);
130     sal_Bool HandleLim(SmNode *pNode,int nLevel);
131     void HandleMAlign(SmNode *pNode,int nLevel);
132     void HandleMath(SmNode *pNode,int nLevel);
133     void HandleText(SmNode *pNode,int nLevel);
134     void HandleAttributes(SmNode *pNode,int nLevel);
135     void TypeFaceToString(String &rRet,sal_uInt8 nFace);
136 
137     String &rRet;
138     SmNode *pTree;
139 
140     sal_uInt8 nHAlign;
141     sal_uInt8 nVAlign;
142 
143     int nPendingAttributes;
144     sal_uLong nInsertion;
145 
146     sal_Int16 aSizeTable[7];
147     sal_Int16 nDefaultSize;
148     sal_Int16 nLSize;
149     sal_Int16 nDSize;
150     sal_Int16 nCurSize;
151     sal_Int16 nLastSize;
152     sal_uInt8 nSpec;
153     sal_Bool bIsSilent, bIsReInterpBrace;
154     String sPost;
155     xub_StrLen nPostSup;
156     xub_StrLen nPostlSup;
157     sal_uInt8 nTypeFace;
158     MathTypeFontSet aUserStyles;
159 
160     enum MTOKENS {END,LINE,CHAR,TMPL,PILE,MATRIX,EMBEL,RULER,FONT,SIZE};
161     enum MTEMPLATES
162     {
163         tmANGLE,tmPAREN,tmBRACE,tmBRACK,tmBAR,tmDBAR,tmFLOOR,tmCEILING,
164         tmLBLB,tmRBRB,tmRBLB,tmLBRP,tmLPRB,tmROOT,tmFRACT,tmSCRIPT,tmUBAR,
165         tmOBAR,tmLARROW,tmRARROW,tmBARROW,tmSINT,tmDINT,tmTINT,tmSSINT,
166         tmDSINT,tmTSINT,tmUHBRACE,tmLHBRACE,tmSUM
167     };
168 public:
169     static sal_Bool LookupChar(sal_Unicode nChar,String &rRet,
170         sal_uInt8 nVersion=3,sal_uInt8 nTypeFace=0);
171 };
172 
173 
174 #endif
175