159 return CCnvCharacterSetConverter::DoConvertToUnicode(CnvHalfWidthKatakana8::ConversionData(), aDefaultEndiannessOfForeignCharacters, aUnicode, aJis8, aNumberOfUnconvertibleCharacters, aIndexOfFirstByteOfFirstUnconvertibleCharacter, aOutputConversionFlags, aInputConversionFlags); |
159 return CCnvCharacterSetConverter::DoConvertToUnicode(CnvHalfWidthKatakana8::ConversionData(), aDefaultEndiannessOfForeignCharacters, aUnicode, aJis8, aNumberOfUnconvertibleCharacters, aIndexOfFirstByteOfFirstUnconvertibleCharacter, aOutputConversionFlags, aInputConversionFlags); |
160 } |
160 } |
161 |
161 |
162 EXPORT_C TInt CnvJisBase::ConvertToUnicode(CCnvCharacterSetConverter::TEndianness aDefaultEndiannessOfForeignCharacters, TDes16& aUnicode, const TDesC8& aForeign, TInt& aState, TInt& aNumberOfUnconvertibleCharacters, TInt& aIndexOfFirstByteOfFirstUnconvertibleCharacter) |
162 EXPORT_C TInt CnvJisBase::ConvertToUnicode(CCnvCharacterSetConverter::TEndianness aDefaultEndiannessOfForeignCharacters, TDes16& aUnicode, const TDesC8& aForeign, TInt& aState, TInt& aNumberOfUnconvertibleCharacters, TInt& aIndexOfFirstByteOfFirstUnconvertibleCharacter) |
163 { |
163 { |
164 TInt ret =KErrNone; |
|
165 TBool pictographsSupported = FeatureManager::FeatureSupported(KFeatureIdJapanesePicto); |
164 TBool pictographsSupported = FeatureManager::FeatureSupported(KFeatureIdJapanesePicto); |
166 RArray<CnvUtilities::SState> states; |
165 RArray<CnvUtilities::SState> states; |
167 if ( pictographsSupported ) |
166 if ( pictographsSupported ) |
168 { |
167 { |
169 |
168 |
170 CnvUtilities::SState state; |
169 CnvUtilities::SState state; |
171 state.iEscapeSequence=&KLit8EscapeSequenceForJisRoman; // Jis-Roman is the default state, so it must come first in the array |
170 state.iEscapeSequence=&KLit8EscapeSequenceForJisRoman; // Jis-Roman is the default state, so it must come first in the array |
172 state.iConversionData=&CnvJisRoman::ConversionData(); |
171 state.iConversionData=&CnvJisRoman::ConversionData(); |
173 ret |= states.Append(state); |
172 states.Append(state); |
174 state.iEscapeSequence=&KLit8EscapeSequenceForJisRomanIncorrect; |
173 state.iEscapeSequence=&KLit8EscapeSequenceForJisRomanIncorrect; |
175 state.iConversionData=&CnvJisRoman::ConversionData(); |
174 state.iConversionData=&CnvJisRoman::ConversionData(); |
176 ret |= states.Append(state); |
175 states.Append(state); |
177 state.iEscapeSequence=&KLit8EscapeSequenceForAscii; |
176 state.iEscapeSequence=&KLit8EscapeSequenceForAscii; |
178 state.iConversionData=&CCnvCharacterSetConverter::AsciiConversionData(); |
177 state.iConversionData=&CCnvCharacterSetConverter::AsciiConversionData(); |
179 ret |= states.Append(state); |
178 states.Append(state); |
180 |
179 |
181 SetStatesForPictograph(states); |
180 SetStatesForPictograph(states); |
182 |
181 |
183 state.iEscapeSequence=&KLit8EscapeSequenceForHalfWidthKatakana; |
182 state.iEscapeSequence=&KLit8EscapeSequenceForHalfWidthKatakana; |
184 state.iConversionData=&halfWidthKatakana7ConversionData; |
183 state.iConversionData=&halfWidthKatakana7ConversionData; |
185 ret |= states.Append(state); |
184 states.Append(state); |
186 state.iEscapeSequence=&KLit8EscapeSequenceForJisC6226_1978; |
185 state.iEscapeSequence=&KLit8EscapeSequenceForJisC6226_1978; |
187 state.iConversionData=&CnvJisX0208::ConversionData(); |
186 state.iConversionData=&CnvJisX0208::ConversionData(); |
188 ret |= states.Append(state); |
187 states.Append(state); |
189 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_1983; |
188 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_1983; |
190 state.iConversionData=&CnvJisX0208::ConversionData(); |
189 state.iConversionData=&CnvJisX0208::ConversionData(); |
191 ret |= states.Append(state); |
190 states.Append(state); |
192 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_199x; |
191 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_199x; |
193 state.iConversionData=&CnvJisX0208::ConversionData(); |
192 state.iConversionData=&CnvJisX0208::ConversionData(); |
194 ret |= states.Append(state); |
193 states.Append(state); |
195 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0212_1990; |
194 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0212_1990; |
196 state.iConversionData=&CnvJisX0212::ConversionData(); |
195 state.iConversionData=&CnvJisX0212::ConversionData(); |
197 ret |= states.Append(state); |
196 states.Append(state); |
198 } |
197 } |
199 else |
198 else |
200 { |
199 { |
201 CnvUtilities::SState state; |
200 CnvUtilities::SState state; |
202 state.iEscapeSequence=&KLit8EscapeSequenceForJisRoman; // Jis-Roman is the default state, so it must come first in the array |
201 state.iEscapeSequence=&KLit8EscapeSequenceForJisRoman; // Jis-Roman is the default state, so it must come first in the array |
203 state.iConversionData=&CnvJisRoman::ConversionData(); |
202 state.iConversionData=&CnvJisRoman::ConversionData(); |
204 ret |= states.Append(state); |
203 states.Append(state); |
205 state.iEscapeSequence=&KLit8EscapeSequenceForJisRomanIncorrect; |
204 state.iEscapeSequence=&KLit8EscapeSequenceForJisRomanIncorrect; |
206 state.iConversionData=&CnvJisRoman::ConversionData(); |
205 state.iConversionData=&CnvJisRoman::ConversionData(); |
207 ret |= states.Append(state); |
206 states.Append(state); |
208 state.iEscapeSequence=&KLit8EscapeSequenceForAscii; |
207 state.iEscapeSequence=&KLit8EscapeSequenceForAscii; |
209 state.iConversionData=&CCnvCharacterSetConverter::AsciiConversionData(); |
208 state.iConversionData=&CCnvCharacterSetConverter::AsciiConversionData(); |
210 ret |= states.Append(state); |
209 states.Append(state); |
211 state.iEscapeSequence=&KLit8EscapeSequenceForHalfWidthKatakana; |
210 state.iEscapeSequence=&KLit8EscapeSequenceForHalfWidthKatakana; |
212 state.iConversionData=&halfWidthKatakana7ConversionData; |
211 state.iConversionData=&halfWidthKatakana7ConversionData; |
213 ret |= states.Append(state); |
212 states.Append(state); |
214 state.iEscapeSequence=&KLit8EscapeSequenceForJisC6226_1978; |
213 state.iEscapeSequence=&KLit8EscapeSequenceForJisC6226_1978; |
215 state.iConversionData=&CnvJisX0208::ConversionData(); |
214 state.iConversionData=&CnvJisX0208::ConversionData(); |
216 ret |= states.Append(state); |
215 states.Append(state); |
217 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_1983; |
216 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_1983; |
218 state.iConversionData=&CnvJisX0208::ConversionData(); |
217 state.iConversionData=&CnvJisX0208::ConversionData(); |
219 ret |= states.Append(state); |
218 states.Append(state); |
220 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_199x; |
219 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_199x; |
221 state.iConversionData=&CnvJisX0208::ConversionData(); |
220 state.iConversionData=&CnvJisX0208::ConversionData(); |
222 ret |= states.Append(state); |
221 states.Append(state); |
223 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0212_1990; |
222 state.iEscapeSequence=&KLit8EscapeSequenceForJisX0212_1990; |
224 state.iConversionData=&CnvJisX0212::ConversionData(); |
223 state.iConversionData=&CnvJisX0212::ConversionData(); |
225 ret |= states.Append(state); |
224 states.Append(state); |
226 } |
225 } |
227 __ASSERT_DEBUG(!ret, User::Panic(_L("RArray append failure"), ret)); |
|
228 |
|
229 const TArray<CnvUtilities::SState> arrayOfStates(states.Array()); |
226 const TArray<CnvUtilities::SState> arrayOfStates(states.Array()); |
230 aUnicode.SetLength(0); |
227 aUnicode.SetLength(0); |
231 const TUint8* const pointerToFirstByte=aForeign.Ptr(); |
228 const TUint8* const pointerToFirstByte=aForeign.Ptr(); |
232 const TUint8* pointerToCurrentByte=pointerToFirstByte; |
229 const TUint8* pointerToCurrentByte=pointerToFirstByte; |
233 const TUint8* pointerToStartOfNextRunToConvert=pointerToFirstByte; |
230 const TUint8* pointerToStartOfNextRunToConvert=pointerToFirstByte; |