281 const TDesC8& aReplacementForUnconvertibleUnicodeCharacters, |
281 const TDesC8& aReplacementForUnconvertibleUnicodeCharacters, |
282 TDes8& aForeign, |
282 TDes8& aForeign, |
283 const TDesC16& aUnicode, |
283 const TDesC16& aUnicode, |
284 CCnvCharacterSetConverter::TArrayOfAscendingIndices& aIndicesOfUnconvertibleCharacters) |
284 CCnvCharacterSetConverter::TArrayOfAscendingIndices& aIndicesOfUnconvertibleCharacters) |
285 { |
285 { |
|
286 TInt ret = KErrNone; |
286 RArray<CnvUtilities::SCharacterSet> characterSets; |
287 RArray<CnvUtilities::SCharacterSet> characterSets; |
287 if ( FeatureManager::FeatureSupported(KFeatureIdJapanesePicto) ) |
288 if ( FeatureManager::FeatureSupported(KFeatureIdJapanesePicto) ) |
288 { |
289 { |
289 CnvUtilities::SCharacterSet characterSet; |
290 CnvUtilities::SCharacterSet characterSet; |
290 |
291 |
291 characterSet.iConversionData=&CnvJisRoman::ConversionData(); |
292 characterSet.iConversionData=&CnvJisRoman::ConversionData(); |
292 characterSet.iConvertFromIntermediateBufferInPlace=DummyConvertFromIntermediateBufferInPlace; |
293 characterSet.iConvertFromIntermediateBufferInPlace=DummyConvertFromIntermediateBufferInPlace; |
293 characterSet.iEscapeSequence=&KNullDesC8; |
294 characterSet.iEscapeSequence=&KNullDesC8; |
294 characterSets.Append(characterSet); |
295 ret |= characterSets.Append(characterSet); |
295 characterSet.iConversionData=&CnvJisX0208::ConversionData(); |
296 characterSet.iConversionData=&CnvJisX0208::ConversionData(); |
296 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0208ToEucJpPackedInPlace; |
297 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0208ToEucJpPackedInPlace; |
297 characterSet.iEscapeSequence=&KNullDesC8; |
298 characterSet.iEscapeSequence=&KNullDesC8; |
298 characterSets.Append(characterSet); |
299 ret |= characterSets.Append(characterSet); |
299 characterSet.iConversionData=&CnvHalfWidthKatakana8::ConversionData(); |
300 characterSet.iConversionData=&CnvHalfWidthKatakana8::ConversionData(); |
300 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromHalfWidthKatakana8ToEucJpPackedInPlace; |
301 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromHalfWidthKatakana8ToEucJpPackedInPlace; |
301 characterSet.iEscapeSequence=&KNullDesC8; |
302 characterSet.iEscapeSequence=&KNullDesC8; |
302 characterSets.Append(characterSet); |
303 ret |= characterSets.Append(characterSet); |
303 characterSet.iConversionData=&CnvJisX0212::ConversionData(); |
304 characterSet.iConversionData=&CnvJisX0212::ConversionData(); |
304 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0212ToEucJpPackedInPlace; |
305 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0212ToEucJpPackedInPlace; |
305 characterSet.iEscapeSequence=&KNullDesC8; |
306 characterSet.iEscapeSequence=&KNullDesC8; |
306 characterSets.Append(characterSet); |
307 ret |= characterSets.Append(characterSet); |
307 |
308 |
308 SetCharacterSetsForPictograph(characterSets, ECharsetEucJp); |
309 SetCharacterSetsForPictograph(characterSets, ECharsetEucJp); |
309 } |
310 } |
310 else |
311 else |
311 { |
312 { |
312 CnvUtilities::SCharacterSet characterSet; |
313 CnvUtilities::SCharacterSet characterSet; |
313 characterSet.iConversionData=&CnvJisRoman::ConversionData(); |
314 characterSet.iConversionData=&CnvJisRoman::ConversionData(); |
314 characterSet.iConvertFromIntermediateBufferInPlace=DummyConvertFromIntermediateBufferInPlace; |
315 characterSet.iConvertFromIntermediateBufferInPlace=DummyConvertFromIntermediateBufferInPlace; |
315 characterSet.iEscapeSequence=&KNullDesC8; |
316 characterSet.iEscapeSequence=&KNullDesC8; |
316 characterSets.Append(characterSet); |
317 ret |= characterSets.Append(characterSet); |
317 characterSet.iConversionData=&CnvJisX0208::ConversionData(); |
318 characterSet.iConversionData=&CnvJisX0208::ConversionData(); |
318 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0208ToEucJpPackedInPlace; |
319 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0208ToEucJpPackedInPlace; |
319 characterSet.iEscapeSequence=&KNullDesC8; |
320 characterSet.iEscapeSequence=&KNullDesC8; |
320 characterSets.Append(characterSet); |
321 ret |= characterSets.Append(characterSet); |
321 characterSet.iConversionData=&CnvHalfWidthKatakana8::ConversionData(); |
322 characterSet.iConversionData=&CnvHalfWidthKatakana8::ConversionData(); |
322 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromHalfWidthKatakana8ToEucJpPackedInPlace; |
323 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromHalfWidthKatakana8ToEucJpPackedInPlace; |
323 characterSet.iEscapeSequence=&KNullDesC8; |
324 characterSet.iEscapeSequence=&KNullDesC8; |
324 characterSets.Append(characterSet); |
325 ret |= characterSets.Append(characterSet); |
325 characterSet.iConversionData=&CnvJisX0212::ConversionData(); |
326 characterSet.iConversionData=&CnvJisX0212::ConversionData(); |
326 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0212ToEucJpPackedInPlace; |
327 characterSet.iConvertFromIntermediateBufferInPlace=ConvertFromJisX0212ToEucJpPackedInPlace; |
327 characterSet.iEscapeSequence=&KNullDesC8; |
328 characterSet.iEscapeSequence=&KNullDesC8; |
328 characterSets.Append(characterSet); |
329 ret |= characterSets.Append(characterSet); |
329 } |
330 } |
|
331 __ASSERT_DEBUG(!ret, User::Panic(_L("RArray append failure"), ret)); |
330 TInt unconvert = CnvUtilities::ConvertFromUnicode(aDefaultEndiannessOfForeignCharacters, aReplacementForUnconvertibleUnicodeCharacters, aForeign, aUnicode, aIndicesOfUnconvertibleCharacters, characterSets.Array()); |
332 TInt unconvert = CnvUtilities::ConvertFromUnicode(aDefaultEndiannessOfForeignCharacters, aReplacementForUnconvertibleUnicodeCharacters, aForeign, aUnicode, aIndicesOfUnconvertibleCharacters, characterSets.Array()); |
331 |
333 |
332 characterSets.Close(); |
334 characterSets.Close(); |
333 return unconvert; |
335 return unconvert; |
334 } |
336 } |
573 const TDesC8& aForeign, |
575 const TDesC8& aForeign, |
574 TInt& /*aState*/, |
576 TInt& /*aState*/, |
575 TInt& aNumberOfUnconvertibleCharacters, |
577 TInt& aNumberOfUnconvertibleCharacters, |
576 TInt& aIndexOfFirstByteOfFirstUnconvertibleCharacter) |
578 TInt& aIndexOfFirstByteOfFirstUnconvertibleCharacter) |
577 { |
579 { |
|
580 TInt ret =KErrNone; |
578 RArray<CnvUtilities::SMethod> methods; |
581 RArray<CnvUtilities::SMethod> methods; |
579 if ( FeatureManager::FeatureSupported(KFeatureIdJapanesePicto) ) |
582 if ( FeatureManager::FeatureSupported(KFeatureIdJapanesePicto) ) |
580 { |
583 { |
581 CnvUtilities::SMethod method; |
584 CnvUtilities::SMethod method; |
582 SetMethodsForPictograph(methods, ECharsetEucJp); |
585 SetMethodsForPictograph(methods, ECharsetEucJp); |
583 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisRoman; |
586 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisRoman; |
584 method.iConvertToIntermediateBufferInPlace=DummyConvertToIntermediateBufferInPlace; |
587 method.iConvertToIntermediateBufferInPlace=DummyConvertToIntermediateBufferInPlace; |
585 method.iConversionData=&CnvJisRoman::ConversionData(); |
588 method.iConversionData=&CnvJisRoman::ConversionData(); |
586 method.iNumberOfBytesPerCharacter=1; |
589 method.iNumberOfBytesPerCharacter=1; |
587 method.iNumberOfCoreBytesPerCharacter=1; |
590 method.iNumberOfCoreBytesPerCharacter=1; |
588 methods.Append(method); |
591 ret |= methods.Append(method); |
589 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisX0208; |
592 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisX0208; |
590 method.iConvertToIntermediateBufferInPlace=ConvertToJisX0208FromEucJpPackedInPlace; |
593 method.iConvertToIntermediateBufferInPlace=ConvertToJisX0208FromEucJpPackedInPlace; |
591 method.iConversionData=&CnvJisX0208::ConversionData(); |
594 method.iConversionData=&CnvJisX0208::ConversionData(); |
592 method.iNumberOfBytesPerCharacter=2; |
595 method.iNumberOfBytesPerCharacter=2; |
593 method.iNumberOfCoreBytesPerCharacter=2; |
596 method.iNumberOfCoreBytesPerCharacter=2; |
594 methods.Append(method); |
597 ret |= methods.Append(method); |
595 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToHalfWidthKatakana8; |
598 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToHalfWidthKatakana8; |
596 method.iConvertToIntermediateBufferInPlace=ConvertToHalfWidthKatakana8FromEucJpPackedInPlace; |
599 method.iConvertToIntermediateBufferInPlace=ConvertToHalfWidthKatakana8FromEucJpPackedInPlace; |
597 method.iConversionData=&CnvHalfWidthKatakana8::ConversionData(); |
600 method.iConversionData=&CnvHalfWidthKatakana8::ConversionData(); |
598 method.iNumberOfBytesPerCharacter=2; |
601 method.iNumberOfBytesPerCharacter=2; |
599 method.iNumberOfCoreBytesPerCharacter=1; |
602 method.iNumberOfCoreBytesPerCharacter=1; |
600 methods.Append(method); |
603 ret |= methods.Append(method); |
601 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisX0212; |
604 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisX0212; |
602 method.iConvertToIntermediateBufferInPlace=ConvertToJisX0212FromEucJpPackedInPlace; |
605 method.iConvertToIntermediateBufferInPlace=ConvertToJisX0212FromEucJpPackedInPlace; |
603 method.iConversionData=&CnvJisX0212::ConversionData(); |
606 method.iConversionData=&CnvJisX0212::ConversionData(); |
604 method.iNumberOfBytesPerCharacter=3; |
607 method.iNumberOfBytesPerCharacter=3; |
605 method.iNumberOfCoreBytesPerCharacter=2; |
608 method.iNumberOfCoreBytesPerCharacter=2; |
606 methods.Append(method); |
609 ret |= methods.Append(method); |
607 } |
610 } |
608 else |
611 else |
609 { |
612 { |
610 CnvUtilities::SMethod method; |
613 CnvUtilities::SMethod method; |
611 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisRoman; |
614 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisRoman; |
612 method.iConvertToIntermediateBufferInPlace=DummyConvertToIntermediateBufferInPlace; |
615 method.iConvertToIntermediateBufferInPlace=DummyConvertToIntermediateBufferInPlace; |
613 method.iConversionData=&CnvJisRoman::ConversionData(); |
616 method.iConversionData=&CnvJisRoman::ConversionData(); |
614 method.iNumberOfBytesPerCharacter=1; |
617 method.iNumberOfBytesPerCharacter=1; |
615 method.iNumberOfCoreBytesPerCharacter=1; |
618 method.iNumberOfCoreBytesPerCharacter=1; |
616 methods.Append(method); |
619 ret |= methods.Append(method); |
617 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisX0208; |
620 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisX0208; |
618 method.iConvertToIntermediateBufferInPlace=ConvertToJisX0208FromEucJpPackedInPlace; |
621 method.iConvertToIntermediateBufferInPlace=ConvertToJisX0208FromEucJpPackedInPlace; |
619 method.iConversionData=&CnvJisX0208::ConversionData(); |
622 method.iConversionData=&CnvJisX0208::ConversionData(); |
620 method.iNumberOfBytesPerCharacter=2; |
623 method.iNumberOfBytesPerCharacter=2; |
621 method.iNumberOfCoreBytesPerCharacter=2; |
624 method.iNumberOfCoreBytesPerCharacter=2; |
622 methods.Append(method); |
625 ret |= methods.Append(method); |
623 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToHalfWidthKatakana8; |
626 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToHalfWidthKatakana8; |
624 method.iConvertToIntermediateBufferInPlace=ConvertToHalfWidthKatakana8FromEucJpPackedInPlace; |
627 method.iConvertToIntermediateBufferInPlace=ConvertToHalfWidthKatakana8FromEucJpPackedInPlace; |
625 method.iConversionData=&CnvHalfWidthKatakana8::ConversionData(); |
628 method.iConversionData=&CnvHalfWidthKatakana8::ConversionData(); |
626 method.iNumberOfBytesPerCharacter=2; |
629 method.iNumberOfBytesPerCharacter=2; |
627 method.iNumberOfCoreBytesPerCharacter=1; |
630 method.iNumberOfCoreBytesPerCharacter=1; |
628 methods.Append(method); |
631 ret |= methods.Append(method); |
629 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisX0212; |
632 method.iNumberOfBytesAbleToConvert=NumberOfBytesAbleToConvertToJisX0212; |
630 method.iConvertToIntermediateBufferInPlace=ConvertToJisX0212FromEucJpPackedInPlace; |
633 method.iConvertToIntermediateBufferInPlace=ConvertToJisX0212FromEucJpPackedInPlace; |
631 method.iConversionData=&CnvJisX0212::ConversionData(); |
634 method.iConversionData=&CnvJisX0212::ConversionData(); |
632 method.iNumberOfBytesPerCharacter=3; |
635 method.iNumberOfBytesPerCharacter=3; |
633 method.iNumberOfCoreBytesPerCharacter=2; |
636 method.iNumberOfCoreBytesPerCharacter=2; |
634 methods.Append(method); |
637 ret |= methods.Append(method); |
635 } |
638 } |
|
639 __ASSERT_DEBUG(!ret, User::Panic(_L("RArray append failure"), ret)); |
636 TInt unconvert = CnvUtilities::ConvertToUnicodeFromHeterogeneousForeign(aDefaultEndiannessOfForeignCharacters, aUnicode, aForeign, aNumberOfUnconvertibleCharacters, aIndexOfFirstByteOfFirstUnconvertibleCharacter, methods.Array()); |
640 TInt unconvert = CnvUtilities::ConvertToUnicodeFromHeterogeneousForeign(aDefaultEndiannessOfForeignCharacters, aUnicode, aForeign, aNumberOfUnconvertibleCharacters, aIndexOfFirstByteOfFirstUnconvertibleCharacter, methods.Array()); |
637 |
641 |
638 // The following is specific impelementation for brower. |
642 // The following is specific impelementation for brower. |
639 // If brower app calls this API, the yen sign code(0xA5) |
643 // If brower app calls this API, the yen sign code(0xA5) |
640 // must be converted to backslash code(0x5C). |
644 // must be converted to backslash code(0x5C). |