diff -r 000000000000 -r 1fb32624e06b textrendering/texthandling/stext/TXTPLAIN.H --- /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 +#include +#include +#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__