diff -r 000000000000 -r bde4ae8d615e os/textandloc/textrendering/texthandling/incp/T_PMLPAR.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/textandloc/textrendering/texthandling/incp/T_PMLPAR.H Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,199 @@ +/* +* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __T_PMLPAR_H__ +#define __T_PMLPAR_H__ + +#include +#include +#include +#include +#include + +#pragma warning ( disable : 4705 ) // turns off "statement has no effect" warning + +const TInt KCharLength = 2; + +// Clases defined in this file +class CFileApp; +class CParser; + +const TChar KTabChar=TChar(9); +const TChar KLineFeed(10); +const TChar KComma=TChar(44); +const TInt KFileBufSize=128; + +const TBuf<1> NEWLINE(_L("\n")); + +class CFileApp : public CBase + { // Reads a text file into a segmented buffer +public: + static CFileApp* NewL(); + ~CFileApp(); + + CBufSeg* LoadFileL(CConsoleBase* aConsole); + CBufSeg* LoadFileL(const TFileName &aFileName); + TInt SaveFile(CBufSeg* aTextBuf, TFileName aFileName); // returns error level + inline TFileName ReturnFileName() {return iFileName;} +protected: + CFileApp(); + void ConstructApplicationL(); +private: + void OutputToScreen(const TDesC& aMessageBuffer); + void FileHandlingL(); + void GetFileName(); + void ReadChunkOfFileContents(RFile &aTextFile); + void WriteNewLine(); +private: + CConsoleBase* iConsole; // Pointer to the console window + TBool iConsoleExists; + TFileName iFileName; // Hmmm... + TUint iFilePos; // Current position within file + CBufSeg * iTextBuf; // Buffer for text file to be read into + TBuf iFileBuf; // Buffer for reading file in + }; + + +class CParser : public CBase + { // Loads a segmented buffer full of text and parses it as PML, converting it into RichText +public: + static CParser* NewL(); + ~CParser(); + + CRichText* ParseL(const TFileName &aFileName); // no GDI - Filename supplied + CRichText* ParseL(CConsoleBase* aConsole); // with E32 console interface +protected: + CParser(); + void ConstructApplicationL(); +private: + void ParseTextBufL(); + TBool Validate(); + TChar ReadChar(); + void ProcessTextL(TChar aChar); + void AddCharToParaL(TChar aChar); + + TChar ReadTagChar(); // Tag methods + void ProcessTagL(); // + void ClassifyTagL(TChar aTagChar); // + void AppendToArgBuf(TChar aTagChar); // + void ProcessArgBufL(); // + void ClassifyArgumentsL(); // + void TranslateTagArgL(); // + void TransGlobalArgL(); // + void TransParagraphArgL(); // + void TransCharArg(); // + void TransControlArgL(); // + TInt GetArgValue(); // + TInt GetArgValue(const TDes &aBuf); // + TBool BufIsNumeric(const TDes &aBuffer);// + + void TransParaDefault(); // Argument translators for paragraph + void TransParaArgAlignment(); // + void TransParaArgLeftMargin(); // + void TransParaArgRightMargin(); // + void TransParaArgIndent(); // + void TransParaLineSpacing(); // + void TransParaArgLineSpacingControl(); // + void TransParaSpaceBefore(); // + void TransParaSpaceAfter(); // + void TransParaKeepTogether(); // + void TransParaKeepWithNext(); // + void TransParaStartNewPage(); // + void TransParaWidowOrphan(); // + void TransParaBorderMargin(); // + void TransParaBorderL(); // + void TransParaTabWidth(); // + void TransParaTabStopL(); // + void TransParaBullet(); // + void TransCharDefault(); // ... and character + void TransCharPosture(); // + void TransCharStrokeWeight(); // + void TransCharUnderline(); // + void TransCharStrikethrough(); // + void TransCharFontHeight(); // + void TransCharPrintPos(); // + void TransCharTypefaceName(); // + void TransCharTypefaceFlags(); // + void TransCharColor(); // + void TransCharLanguage(); // + + void SetFormatLayerL(); // RT doc methods + + void EmptyBuffer(TDes &aBuf); + void OutputToScreen(const TDesC& aMessageBuffer); + void WriteNewLine() {OutputToScreen(NEWLINE);} + void EmitErrorMessage(); +public: + TFileName iFileName; +private: + TBuf8<512> SquashBuf(TDes aBuffer); + // + enum { // Error types + ENoError, + EUnparagraphedText, + EUnknownTagType, + EUnknownAttrib, + ENoAttribValue, + EIllegalAttribValue + }; + enum { // Possible types of tag + EGlobal, + EParagraph, + ECharacter, + EControl, + EComment, + EError}; + TUint iErrorLevel; + CConsoleBase* iConsole; // Pointer to the console window + TBool iConsoleExists; + CBufSeg * iTextBuf; // Buffer for the text file to be parsed + TUint iReadPos; // Current read position in iTextBuf + TUint iLineNo; // Current line no. in iTextBuf (for error messages) + TBool iParagraphIsOpen; // Self explanatory? + TBool iPhraseOpen; // Character formatting is being applied + TBool iArgValueExpected; // Set if a tag argument requires a value eg =120 + TBool iArgStored; // Set if there is an argument in temp storage + TBool iCancelArg; // Set if the arg has been canceled - ie turns formatting off + TBool iBorderUsed; + TBool iBulletUsed; + TInt iTagType; // The type of tag: see enum above + TBuf<32> iArgType; // Buffer for tag arguments. Whole arg if they have no value + TBuf<32> iArgValue; // Buffer for arg values... (32 bytes) eg.

+ + // Rich Text document variables + CRichText* iRichTextDoc; // The RT doc + TInt iDocInsertPos; // Cursor position in RT doc + TUint iDocParaLength; // Length of current paragraph + TUint iDocPhraseLength; // ... + CParaFormatLayer* iGlobalParaFormatLayer; + TParaFormatMask iGlobalParaFormatMask; + CParaFormat* iGlobalParaFormat; + CCharFormatLayer* iGlobalCharFormatLayer; + TCharFormatMask iGlobalCharFormatMask; + TCharFormat iGlobalCharFormat; + CParaFormatLayer* iParaFormatLayer; + TParaFormatMask iParaFormatMask; + CParaFormat* iParaFormat; + CCharFormatLayer* iCharFormatLayer; + TCharFormatMask iCharFormatMask; + TCharFormat iCharFormat; + TParaBorder* iBorder; + TBullet* iBullet; + }; + +#endif