charconvfw/charconvplugins/src/plugins/ISO2022JP1_2.CPP
changeset 0 1fb32624e06b
child 37 6be019398652
child 40 91ef7621b7fc
equal deleted inserted replaced
-1:000000000000 0:1fb32624e06b
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:       
       
    15 *
       
    16 */
       
    17 
       
    18 #include "PictographObserver.h"
       
    19 #include "featmgr/featmgr.h"
       
    20 
       
    21 #include <e32std.h>
       
    22 #include <charconv.h>
       
    23 #include <convutils.h>
       
    24 #include "jisbase.h"
       
    25 #include "jisx0201.h"
       
    26 #include "jisx0208.h"
       
    27 #include "jisx0212.h"
       
    28 #include <ecom/implementationproxy.h>
       
    29 #include "charactersetconverter.h"
       
    30 
       
    31 _LIT8(KLit8EscapeSequenceForJisRoman, "\x1b\x28\x4a");
       
    32 _LIT8(KLit8EscapeSequenceForAscii, "\x1b\x28\x42");
       
    33 //_LIT8(KLit8EscapeSequenceForJisC6226_1978, "\x1b\x24\x40");
       
    34 _LIT8(KLit8EscapeSequenceForJisX0208_1983, "\x1b\x24\x42");
       
    35 _LIT8(KLit8EscapeSequenceForJisX0212_1990, "\x1b\x24\x28\x44");
       
    36 //_LIT8(KLit8EscapeSequenceForHalfWidthKatakana, "\x1b\x28\x49");
       
    37 _LIT8(KLit8Iso2022Jp1ReplacementForUnconvertibleUnicodeCharacters, "\x1b\x24\x42\x21\x29"); // fullwidth question mark
       
    38 
       
    39 
       
    40 class CISO2022JP1ConverterImpl : public CCharacterSetConverterPluginInterface
       
    41 	{
       
    42 
       
    43 public:
       
    44 	virtual const TDesC8& ReplacementForUnconvertibleUnicodeCharacters();
       
    45 
       
    46 	virtual TInt ConvertFromUnicode(
       
    47 		CCnvCharacterSetConverter::TEndianness aDefaultEndiannessOfForeignCharacters, 
       
    48 		const TDesC8& aReplacementForUnconvertibleUnicodeCharacters, 
       
    49 		TDes8& aForeign, 
       
    50 		const TDesC16& aUnicode, 
       
    51 		CCnvCharacterSetConverter::TArrayOfAscendingIndices& aIndicesOfUnconvertibleCharacters);
       
    52 
       
    53 	virtual TInt ConvertToUnicode(
       
    54 		CCnvCharacterSetConverter::TEndianness aDefaultEndiannessOfForeignCharacters, 
       
    55 		TDes16& aUnicode, 
       
    56 		const TDesC8& aForeign, 
       
    57 		TInt& aState, 
       
    58 		TInt& aNumberOfUnconvertibleCharacters, 
       
    59 		TInt& aIndexOfFirstByteOfFirstUnconvertibleCharacter);
       
    60 
       
    61 	virtual TBool IsInThisCharacterSetL(
       
    62 		TBool& aSetToTrue, 
       
    63 		TInt& aConfidenceLevel, 
       
    64 		const TDesC8& aSample);
       
    65 
       
    66 	static CISO2022JP1ConverterImpl* NewL();
       
    67 	virtual ~CISO2022JP1ConverterImpl();
       
    68 
       
    69 private:
       
    70 	CISO2022JP1ConverterImpl();
       
    71 	void ConstructL();
       
    72 
       
    73 	};
       
    74 
       
    75 
       
    76 const TDesC8& CISO2022JP1ConverterImpl::ReplacementForUnconvertibleUnicodeCharacters()
       
    77 	{
       
    78 	return KLit8Iso2022Jp1ReplacementForUnconvertibleUnicodeCharacters;
       
    79 	}
       
    80 
       
    81 LOCAL_C void ConvertFromJisRomanToJisInPlace(TInt aStartPositionInDescriptor, TDes8& aDescriptor, TInt& aNumberOfCharactersThatDroppedOut)
       
    82 	{
       
    83 	CnvUtilities::ConvertFromIntermediateBufferInPlace(aStartPositionInDescriptor, aDescriptor, aNumberOfCharactersThatDroppedOut, KLit8EscapeSequenceForJisRoman, 1);
       
    84 	}
       
    85 
       
    86 LOCAL_C void ConvertFromAsciiToJisInPlace(TInt aStartPositionInDescriptor, TDes8& aDescriptor, TInt& aNumberOfCharactersThatDroppedOut)
       
    87 	{
       
    88 	CnvUtilities::ConvertFromIntermediateBufferInPlace(aStartPositionInDescriptor, aDescriptor, aNumberOfCharactersThatDroppedOut, KLit8EscapeSequenceForAscii, 1);
       
    89 	}
       
    90 
       
    91 LOCAL_C void ConvertFromJisX0208ToJisInPlace(TInt aStartPositionInDescriptor, TDes8& aDescriptor, TInt& aNumberOfCharactersThatDroppedOut)
       
    92 	{
       
    93 	CnvUtilities::ConvertFromIntermediateBufferInPlace(aStartPositionInDescriptor, aDescriptor, aNumberOfCharactersThatDroppedOut, KLit8EscapeSequenceForJisX0208_1983, 2);
       
    94 	}
       
    95 
       
    96 LOCAL_C void ConvertFromJisX0212ToJisInPlace(TInt aStartPositionInDescriptor, TDes8& aDescriptor, TInt& aNumberOfCharactersThatDroppedOut)
       
    97 	{
       
    98 	CnvUtilities::ConvertFromIntermediateBufferInPlace(aStartPositionInDescriptor, aDescriptor, aNumberOfCharactersThatDroppedOut, KLit8EscapeSequenceForJisX0212_1990, 2);
       
    99 	}
       
   100 
       
   101 TInt CISO2022JP1ConverterImpl::ConvertFromUnicode(
       
   102 		CCnvCharacterSetConverter::TEndianness aDefaultEndiannessOfForeignCharacters, 
       
   103 		const TDesC8& aReplacementForUnconvertibleUnicodeCharacters, 
       
   104 		TDes8& aForeign, 
       
   105 		const TDesC16& aUnicode, 
       
   106 		CCnvCharacterSetConverter::TArrayOfAscendingIndices& aIndicesOfUnconvertibleCharacters)
       
   107 	{
       
   108     RArray<CnvUtilities::SCharacterSet> characterSets;
       
   109     if ( FeatureManager::FeatureSupported(KFeatureIdJapanesePicto) )
       
   110         {        
       
   111         CnvUtilities::SCharacterSet characterSet;
       
   112         characterSet.iConversionData=&CnvJisRoman::ConversionData();
       
   113         characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisRomanToJisInPlace;
       
   114         characterSet.iEscapeSequence=&KLit8EscapeSequenceForJisRoman;
       
   115         characterSets.Append(characterSet);
       
   116         characterSet.iConversionData=&CCnvCharacterSetConverter::AsciiConversionData();
       
   117         characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromAsciiToJisInPlace;
       
   118         characterSet.iEscapeSequence=&KLit8EscapeSequenceForAscii;
       
   119         characterSets.Append(characterSet);
       
   120         characterSet.iConversionData=&CnvJisX0208::ConversionData();
       
   121         characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0208ToJisInPlace;
       
   122         characterSet.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_1983;
       
   123         characterSets.Append(characterSet);
       
   124         characterSet.iConversionData=&CnvJisX0212::ConversionData();
       
   125         characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0212ToJisInPlace;
       
   126         characterSet.iEscapeSequence=&KLit8EscapeSequenceForJisX0212_1990;
       
   127         characterSets.Append(characterSet);
       
   128 
       
   129         SetCharacterSetsForPictograph(characterSets);
       
   130         }
       
   131     else
       
   132         {        
       
   133         CnvUtilities::SCharacterSet characterSet;
       
   134 	    characterSet.iConversionData=&CnvJisRoman::ConversionData();
       
   135 	    characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisRomanToJisInPlace;
       
   136 	    characterSet.iEscapeSequence=&KLit8EscapeSequenceForJisRoman;
       
   137         characterSets.Append(characterSet);
       
   138     	characterSet.iConversionData=&CCnvCharacterSetConverter::AsciiConversionData();
       
   139     	characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromAsciiToJisInPlace;
       
   140     	characterSet.iEscapeSequence=&KLit8EscapeSequenceForAscii;
       
   141         characterSets.Append(characterSet);
       
   142     	characterSet.iConversionData=&CnvJisX0208::ConversionData();
       
   143     	characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0208ToJisInPlace;
       
   144     	characterSet.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_1983;
       
   145         characterSets.Append(characterSet);
       
   146     	characterSet.iConversionData=&CnvJisX0212::ConversionData();
       
   147     	characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0212ToJisInPlace;
       
   148     	characterSet.iEscapeSequence=&KLit8EscapeSequenceForJisX0212_1990;
       
   149         characterSets.Append(characterSet);
       
   150         }
       
   151 	TUint notUsed;
       
   152 	TUint inputConversionFlags=CCnvCharacterSetConverter::EInputConversionFlagMustEndInDefaultCharacterSet;
       
   153     TInt unconvert = CnvUtilities::ConvertFromUnicode(aDefaultEndiannessOfForeignCharacters, aReplacementForUnconvertibleUnicodeCharacters, aForeign, aUnicode, aIndicesOfUnconvertibleCharacters, 
       
   154         characterSets.Array(),notUsed,inputConversionFlags);
       
   155 
       
   156     characterSets.Close();
       
   157     return unconvert;
       
   158 	}
       
   159 
       
   160 TInt CISO2022JP1ConverterImpl::ConvertToUnicode(
       
   161 		CCnvCharacterSetConverter::TEndianness aDefaultEndiannessOfForeignCharacters, 
       
   162 		TDes16& aUnicode, 
       
   163 		const TDesC8& aForeign, 
       
   164 		TInt& aState, 
       
   165 		TInt& aNumberOfUnconvertibleCharacters, 
       
   166 		TInt& aIndexOfFirstByteOfFirstUnconvertibleCharacter)
       
   167 	{
       
   168 	return CnvJisBase::ConvertToUnicode(aDefaultEndiannessOfForeignCharacters, aUnicode, aForeign, aState, aNumberOfUnconvertibleCharacters, aIndexOfFirstByteOfFirstUnconvertibleCharacter);
       
   169 	}
       
   170 
       
   171 TBool CISO2022JP1ConverterImpl::IsInThisCharacterSetL(
       
   172 		TBool& aSetToTrue, 
       
   173 		TInt& aConfidenceLevel, 
       
   174 		const TDesC8& aSample)
       
   175 	{
       
   176 	aSetToTrue=ETrue;
       
   177 	CnvJisBase::IsCharacterJISBased(aConfidenceLevel, aSample);
       
   178 	return ETrue;
       
   179 	}
       
   180 
       
   181 CISO2022JP1ConverterImpl* CISO2022JP1ConverterImpl::NewL()
       
   182 	{
       
   183 	CISO2022JP1ConverterImpl* self = new(ELeave) CISO2022JP1ConverterImpl();
       
   184 	CleanupStack::PushL(self);
       
   185 	self->ConstructL();
       
   186 	CleanupStack::Pop(self);
       
   187 	return self;
       
   188 	}
       
   189 
       
   190 CISO2022JP1ConverterImpl::~CISO2022JP1ConverterImpl()
       
   191 	{
       
   192 	FeatureManager::UnInitializeLib();
       
   193 	}
       
   194 
       
   195 CISO2022JP1ConverterImpl::CISO2022JP1ConverterImpl()
       
   196 	{
       
   197 	}
       
   198 
       
   199 void CISO2022JP1ConverterImpl::ConstructL()
       
   200 	{
       
   201 	FeatureManager::InitializeLibL();
       
   202 	}
       
   203 
       
   204 const TImplementationProxy ImplementationTable[] = 
       
   205 	{
       
   206 		IMPLEMENTATION_PROXY_ENTRY(0x100066A3,	CISO2022JP1ConverterImpl::NewL)
       
   207 	};
       
   208 
       
   209 EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
       
   210 	{
       
   211 	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
       
   212 
       
   213 	return ImplementationTable;
       
   214 	}
       
   215