textrendering/texthandling/stext/TXTPLAIN.H
changeset 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/texthandling/stext/TXTPLAIN.H	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 1998-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: 
+* Header for the classes that import and export plain text into and out of ETEXT.
+*
+*/
+
+
+#ifndef __TXTPLAIN__
+#define __TXTPLAIN__ 1
+
+#include <e32std.h>
+#include <s32mem.h>
+#include <txtetext.h>
+#include "TxtWriter.h"
+
+class CCnvCharacterSetConverter;
+class TPlainTextIOState;
+
+NONSHARABLE_CLASS(CPlainTextConverter) : public CBase
+/**
+@internalComponent
+*/
+	{
+	public:
+	static CPlainTextConverter* NewLC();
+	~CPlainTextConverter();
+	void PrepareToConvertL(TPlainTextIOState& aState,const TDesC8* aSample);
+
+	enum
+		{
+		EConversionBufferSize = 1024
+		};
+
+	CCnvCharacterSetConverter* iConverter;	// use this converter to translate input or output
+	TUint8* iConversionBuffer;				// the buffer used by iConverter for non-Unicode text
+	TInt iConversionBufferLength;			// current number of characters in the conversion buffer
+	};
+
+class TPlainTextIOState
+/**
+@internalComponent
+*/
+	{
+	public:
+	TPlainTextIOState(const CPlainText::TImportExportParam& aParam,CPlainText::TImportExportResult& aResult,
+					  RWriteStream& aOutput,RReadStream& aInput);
+	TBool Finished() const
+		{ return iResult.iOutputChars >= iParam.iMaxOutputChars || iResult.iInputChars >= iParam.iMaxInputChars; }
+	TText ReadRawCharL();
+	void WriteRawCharL(TText aChar);
+
+	const CPlainText::TImportExportParam& iParam;
+	CPlainText::TImportExportResult& iResult;
+	RWriteStream& iOutput;
+	RReadStream& iInput;
+	CPlainTextConverter* iConverter;// if non-null, use CHARCONV, via this object, to convert a
+									// foreign encoding to or from Unicode
+	TBool iSwapInput;				// input needs to be byte-swapped
+	TBool iCheckByteOrder;			// flip iSwapInput if the next input character is 0xFFFE (byte-swapped byte order mark)
+	};
+
+class TPlainTextWriter: public TPlainTextIOState
+/**
+@internalComponent
+*/
+	{
+	public:
+	static void TranslateL(const CPlainText::TImportExportParam& aParam,CPlainText::TImportExportResult& aResult,
+						   RWriteStream& aOutput,RReadStream& aInput);
+
+	private:
+	TPlainTextWriter(const CPlainText::TImportExportParam& aParam,CPlainText::TImportExportResult& aResult,
+					 RWriteStream& aOutput,RReadStream& aInput);
+	void TranslateHelperL();
+
+	enum
+		{
+		EDefaultLineBufferSize = CPlainTextConverter::EConversionBufferSize * 2
+		};
+
+	void TranslateToEofL();
+	void FlushL();
+	void WriteCharL(TText aChar);
+	void WriteNewLineL();
+	void WriteAndConvertL(const TText* aText,TInt aLength);
+
+	RBufReadStream iBufReadStream;	// a stream over the input buffer
+	TInt iMaxLineLength;			// wrap lines automatically if they exceed this length
+	TInt iLineLength;				// length of the current line
+	TText* iLineBuffer;				// if non-null, this buffer contains the current line, or Unicode text
+									// to be converted to a foreign encoding
+	TInt iMaxLineBufferLength;		// maximum number of characters in iLineBuffer
+	};
+
+/**
+@internalComponent
+*/
+NONSHARABLE_CLASS(TPlainTextReader) : public TPlainTextIOState, public MOutputChar
+	{
+	public:
+	static void TranslateL(const CPlainText::TImportExportParam& aParam,CPlainText::TImportExportResult& aResult,
+						   RWriteStream& aOutput,RReadStream& aInput);
+
+	private:
+	TPlainTextReader(const CPlainText::TImportExportParam& aParam,CPlainText::TImportExportResult& aResult,
+					 RWriteStream& aOutput,RReadStream& aInput);
+	void TranslateHelperL(TSLBTransaltor& aSLBTranslator);
+
+	enum
+		{
+		EInputBufferSize = CPlainTextConverter::EConversionBufferSize * 2
+		};
+
+	void TranslateToEofL(TSLBTransaltor& aSLBTranslator);
+	TText ReadAndConvertL();
+	virtual void OutputCharL(TText aChar);
+
+	TText* iInputBuffer;				// if non-null, this buffer contains Unicode text
+										// converted from a foreign encoding
+	TInt iInputLength;					// number of characters currently stored in iInputBuffer
+	TInt iInputPos;						// current position in iInputBuffer;
+	TInt iConversionState;				// state used by iConverter when converting to Unicode
+	};
+
+#endif // __TXTPLAIN__