textrendering/texthandling/incp/T_PMLPAR.H
changeset 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/texthandling/incp/T_PMLPAR.H	Tue Feb 02 02:02:46 2010 +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 <e32cons.h>
+#include <f32file.h>
+#include <txtrich.h>
+#include <txtfrmat.h>
+#include <txtfmlyr.h>
+
+#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<KFileBufSize> 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. <P ArgType=ArgValue>
+
+	// 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