1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef MATHTYPE_HXX 25*b1cdbd2cSJim Jagielski #define MATHTYPE_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "node.hxx" 28*b1cdbd2cSJim Jagielski #include "eqnolefilehdr.hxx" 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski #include <sot/storage.hxx> 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski #include <set> 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski class SfxMedium; 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski class MathTypeFont 37*b1cdbd2cSJim Jagielski { 38*b1cdbd2cSJim Jagielski public: 39*b1cdbd2cSJim Jagielski sal_uInt8 nTface; 40*b1cdbd2cSJim Jagielski sal_uInt8 nStyle; MathTypeFont()41*b1cdbd2cSJim Jagielski MathTypeFont() : nTface(0),nStyle(0) {} MathTypeFont(sal_uInt8 nFace)42*b1cdbd2cSJim Jagielski MathTypeFont(sal_uInt8 nFace) : nTface(nFace),nStyle(0) {} 43*b1cdbd2cSJim Jagielski void AppendStyleToText(String &rS); 44*b1cdbd2cSJim Jagielski }; 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski struct LessMathTypeFont 47*b1cdbd2cSJim Jagielski { operator ()LessMathTypeFont48*b1cdbd2cSJim Jagielski sal_Bool operator() (const MathTypeFont &rValue1, 49*b1cdbd2cSJim Jagielski const MathTypeFont &rValue2) const 50*b1cdbd2cSJim Jagielski { 51*b1cdbd2cSJim Jagielski return rValue1.nTface < rValue2.nTface; 52*b1cdbd2cSJim Jagielski } 53*b1cdbd2cSJim Jagielski }; 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski typedef ::std::set< MathTypeFont, LessMathTypeFont > MathTypeFontSet; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski class MathType 58*b1cdbd2cSJim Jagielski { 59*b1cdbd2cSJim Jagielski public: MathType(String & rIn)60*b1cdbd2cSJim Jagielski MathType(String &rIn) : 61*b1cdbd2cSJim Jagielski rRet(rIn), nHAlign(0), nVAlign(0), nDefaultSize(12), 62*b1cdbd2cSJim Jagielski nLSize(0), nDSize(0), nCurSize(0), nLastSize(0), bIsSilent(sal_False) 63*b1cdbd2cSJim Jagielski { 64*b1cdbd2cSJim Jagielski Init(); 65*b1cdbd2cSJim Jagielski } 66*b1cdbd2cSJim Jagielski MathType(String & rIn,SmNode * pIn)67*b1cdbd2cSJim Jagielski MathType(String &rIn,SmNode *pIn) : 68*b1cdbd2cSJim Jagielski rRet(rIn), pTree(pIn), nHAlign(2), nVAlign(0), nInsertion(0), nDefaultSize(12), 69*b1cdbd2cSJim Jagielski nLSize(0), nDSize(0), nCurSize(0), nLastSize(0), nSpec(0), bIsSilent(sal_False) 70*b1cdbd2cSJim Jagielski { 71*b1cdbd2cSJim Jagielski Init(); 72*b1cdbd2cSJim Jagielski } 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski int Parse( SotStorage* pStor ); 75*b1cdbd2cSJim Jagielski int ConvertFromStarMath( SfxMedium& rMedium ); 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski private: 78*b1cdbd2cSJim Jagielski /*Ver 2 Header*/ 79*b1cdbd2cSJim Jagielski sal_uInt8 nVersion; 80*b1cdbd2cSJim Jagielski sal_uInt8 nPlatform; 81*b1cdbd2cSJim Jagielski sal_uInt8 nProduct; 82*b1cdbd2cSJim Jagielski sal_uInt8 nProdVersion; 83*b1cdbd2cSJim Jagielski sal_uInt8 nProdSubVersion; 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski SvStorageStream *pS; 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski void Init(); 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski int HandleRecords(int nLevel=0,sal_uInt8 nSelector=0xFF, 90*b1cdbd2cSJim Jagielski sal_uInt8 nVariation=0xFF,int nRows=0,int nCols=0); 91*b1cdbd2cSJim Jagielski sal_Bool HandleSize(sal_Int16 nLSize,sal_Int16 nDSize, int &rSetSize); 92*b1cdbd2cSJim Jagielski void HandleAlign(sal_uInt8 nHAlign,sal_uInt8 nVAlign, int &rSetAlign); 93*b1cdbd2cSJim Jagielski int HandlePile(int &rSetAlign,int nLevel,sal_uInt8 nSelector, 94*b1cdbd2cSJim Jagielski sal_uInt8 nVariation); 95*b1cdbd2cSJim Jagielski int HandleMatrix(int nLevel,sal_uInt8 nSelector,sal_uInt8 nVariarion); 96*b1cdbd2cSJim Jagielski void HandleMatrixSeperator(int nMatrixRows,int nMatrixCols,int &rCurCol, 97*b1cdbd2cSJim Jagielski int &rCurRow); 98*b1cdbd2cSJim Jagielski int HandleTemplate(int nLevel,sal_uInt8 &rSelector,sal_uInt8 &rVariation, 99*b1cdbd2cSJim Jagielski xub_StrLen &rLastTemplateBracket); 100*b1cdbd2cSJim Jagielski void HandleEmblishments(); 101*b1cdbd2cSJim Jagielski void HandleSetSize(); 102*b1cdbd2cSJim Jagielski int HandleChar(xub_StrLen &rTextStart,int &rSetSize,int nLevel, 103*b1cdbd2cSJim Jagielski sal_uInt8 nTag,sal_uInt8 nSelector,sal_uInt8 nVariation, 104*b1cdbd2cSJim Jagielski sal_Bool bSilent); 105*b1cdbd2cSJim Jagielski void HandleNudge(); xfLMOVE(sal_uInt8 nTest)106*b1cdbd2cSJim Jagielski int xfLMOVE(sal_uInt8 nTest) {return nTest&0x80;} xfAUTO(sal_uInt8 nTest)107*b1cdbd2cSJim Jagielski int xfAUTO(sal_uInt8 nTest) {return nTest&0x10;} xfEMBELL(sal_uInt8 nTest)108*b1cdbd2cSJim Jagielski int xfEMBELL(sal_uInt8 nTest) {return nTest&0x20;} xfNULL(sal_uInt8 nTest)109*b1cdbd2cSJim Jagielski int xfNULL(sal_uInt8 nTest) {return nTest&0x10;} xfLSPACE(sal_uInt8 nTest)110*b1cdbd2cSJim Jagielski int xfLSPACE(sal_uInt8 nTest) {return nTest&0x40;} xfRULER(sal_uInt8 nTest)111*b1cdbd2cSJim Jagielski int xfRULER(sal_uInt8 nTest) {return nTest&0x20;} 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski sal_uInt8 HandleNodes(SmNode *pNode,int nLevel=0); 114*b1cdbd2cSJim Jagielski int StartTemplate(sal_uInt16 nSelector,sal_uInt16 nVariation=0); 115*b1cdbd2cSJim Jagielski void EndTemplate(int nOldPendingAttributes); 116*b1cdbd2cSJim Jagielski void HandleSmMatrix(SmMatrixNode *pMatrix,int nLevel); 117*b1cdbd2cSJim Jagielski void HandleTable(SmNode *pNode,int nLevel); 118*b1cdbd2cSJim Jagielski void HandleRoot(SmNode *pNode,int nLevel); 119*b1cdbd2cSJim Jagielski void HandleSubSupScript(SmNode *pNode,int nLevel); 120*b1cdbd2cSJim Jagielski sal_uInt8 HandleCScript(SmNode *pNode,SmNode *pContent,int nLevel, 121*b1cdbd2cSJim Jagielski sal_uLong *pPos=NULL,sal_Bool bTest=sal_True); 122*b1cdbd2cSJim Jagielski void HandleFractions(SmNode *pNode,int nLevel); 123*b1cdbd2cSJim Jagielski void HandleBrace(SmNode *pNode,int nLevel); 124*b1cdbd2cSJim Jagielski void HandleVerticalBrace(SmNode *pNode,int nLevel); 125*b1cdbd2cSJim Jagielski void HandleOperator(SmNode *pNode,int nLevel); 126*b1cdbd2cSJim Jagielski sal_Bool HandleLim(SmNode *pNode,int nLevel); 127*b1cdbd2cSJim Jagielski void HandleMAlign(SmNode *pNode,int nLevel); 128*b1cdbd2cSJim Jagielski void HandleMath(SmNode *pNode,int nLevel); 129*b1cdbd2cSJim Jagielski void HandleText(SmNode *pNode,int nLevel); 130*b1cdbd2cSJim Jagielski void HandleAttributes(SmNode *pNode,int nLevel); 131*b1cdbd2cSJim Jagielski void TypeFaceToString(String &rRet,sal_uInt8 nFace); 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski String &rRet; 134*b1cdbd2cSJim Jagielski SmNode *pTree; 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski sal_uInt8 nHAlign; 137*b1cdbd2cSJim Jagielski sal_uInt8 nVAlign; 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski int nPendingAttributes; 140*b1cdbd2cSJim Jagielski sal_uLong nInsertion; 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski sal_Int16 aSizeTable[7]; 143*b1cdbd2cSJim Jagielski sal_Int16 nDefaultSize; 144*b1cdbd2cSJim Jagielski sal_Int16 nLSize; 145*b1cdbd2cSJim Jagielski sal_Int16 nDSize; 146*b1cdbd2cSJim Jagielski sal_Int16 nCurSize; 147*b1cdbd2cSJim Jagielski sal_Int16 nLastSize; 148*b1cdbd2cSJim Jagielski sal_uInt8 nSpec; 149*b1cdbd2cSJim Jagielski sal_Bool bIsSilent, bIsReInterpBrace; 150*b1cdbd2cSJim Jagielski String sPost; 151*b1cdbd2cSJim Jagielski xub_StrLen nPostSup; 152*b1cdbd2cSJim Jagielski xub_StrLen nPostlSup; 153*b1cdbd2cSJim Jagielski sal_uInt8 nTypeFace; 154*b1cdbd2cSJim Jagielski MathTypeFontSet aUserStyles; 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski enum MTOKENS {END,LINE,CHAR,TMPL,PILE,MATRIX,EMBEL,RULER,FONT,SIZE}; 157*b1cdbd2cSJim Jagielski enum MTEMPLATES 158*b1cdbd2cSJim Jagielski { 159*b1cdbd2cSJim Jagielski tmANGLE,tmPAREN,tmBRACE,tmBRACK,tmBAR,tmDBAR,tmFLOOR,tmCEILING, 160*b1cdbd2cSJim Jagielski tmLBLB,tmRBRB,tmRBLB,tmLBRP,tmLPRB,tmROOT,tmFRACT,tmSCRIPT,tmUBAR, 161*b1cdbd2cSJim Jagielski tmOBAR,tmLARROW,tmRARROW,tmBARROW,tmSINT,tmDINT,tmTINT,tmSSINT, 162*b1cdbd2cSJim Jagielski tmDSINT,tmTSINT,tmUHBRACE,tmLHBRACE,tmSUM 163*b1cdbd2cSJim Jagielski }; 164*b1cdbd2cSJim Jagielski public: 165*b1cdbd2cSJim Jagielski static sal_Bool LookupChar(sal_Unicode nChar,String &rRet, 166*b1cdbd2cSJim Jagielski sal_uInt8 nVersion=3,sal_uInt8 nTypeFace=0); 167*b1cdbd2cSJim Jagielski }; 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski #endif 171