charconvfw/charconvplugins/src/plugins/iscii.cpp
branchRCL_3
changeset 16 748ec5531811
parent 0 1fb32624e06b
child 17 336bee5c2d35
equal deleted inserted replaced
10:f902e87c146f 16:748ec5531811
   418 // -----------------------------------------------------------------------------
   418 // -----------------------------------------------------------------------------
   419 //
   419 //
   420 
   420 
   421 LOCAL_C void FindAndModifyBuffer(TDes8& aModifyBuffer)
   421 LOCAL_C void FindAndModifyBuffer(TDes8& aModifyBuffer)
   422 {
   422 {
   423 	RArray<TPtrC8> searchBuffer;
   423 	TInt ret = KErrNone;
       
   424     RArray<TPtrC8> searchBuffer;
   424 	RArray<TPtrC8> replaceBuffer;
   425 	RArray<TPtrC8> replaceBuffer;
   425 	
   426 	
   426 	//If the passed buffer contains the replacement buffer,
   427 	//If the passed buffer contains the replacement buffer,
   427 	//Then it should not get converted to respective Unicode
   428 	//Then it should not get converted to respective Unicode
   428 	//buffer rather it should get converted to replacement for
   429 	//buffer rather it should get converted to replacement for
   429 	//unconvertible character.
   430 	//unconvertible character.
   430 	
   431 	
   431 	searchBuffer.Append(KReplacementForExplicitHalant().Right(1));
   432 	ret |= searchBuffer.Append(KReplacementForExplicitHalant().Right(1));
   432 	searchBuffer.Append(KReplacementForSoftHalant().Right(1));
   433 	ret |= searchBuffer.Append(KReplacementForSoftHalant().Right(1));
   433 	searchBuffer.Append(KReplacementForOm().Right(1));
   434 	ret |= searchBuffer.Append(KReplacementForOm().Right(1));
   434 	searchBuffer.Append(KReplacementForAvagraha().Right(1));
   435 	ret |= searchBuffer.Append(KReplacementForAvagraha().Right(1));
   435 	
   436 	
   436 	searchBuffer.Append(KReplacementForVocalicRr().Right(1));
   437 	ret |= searchBuffer.Append(KReplacementForVocalicRr().Right(1));
   437 	searchBuffer.Append(KReplacementForVocalicLl().Right(1));
   438 	ret |= searchBuffer.Append(KReplacementForVocalicLl().Right(1));
   438 	searchBuffer.Append(KReplacementForVocalicLSign().Right(1));
   439 	ret |= searchBuffer.Append(KReplacementForVocalicLSign().Right(1));
   439 	searchBuffer.Append(KReplacementForVocalicLlSign().Right(1));
   440 	ret |= searchBuffer.Append(KReplacementForVocalicLlSign().Right(1));
   440 	searchBuffer.Append(KReplacementForVocalicL().Right(1));
   441 	ret |= searchBuffer.Append(KReplacementForVocalicL().Right(1));
   441 	searchBuffer.Append(KReplacementForVocalicRrSign().Right(1));
   442 	ret |= searchBuffer.Append(KReplacementForVocalicRrSign().Right(1));
   442 	
   443 	
   443 	//All normal search buffers
   444 	//All normal search buffers
   444 	searchBuffer.Append(KExplicitHalant().Mid(0));
   445 	ret |= searchBuffer.Append(KExplicitHalant().Mid(0));
   445 	searchBuffer.Append(KSoftHalant().Mid(0));
   446 	ret |= searchBuffer.Append(KSoftHalant().Mid(0));
   446 	searchBuffer.Append(KOm().Mid(0));
   447 	ret |= searchBuffer.Append(KOm().Mid(0));
   447 	searchBuffer.Append(KAvagraha().Mid(0));
   448 	ret |= searchBuffer.Append(KAvagraha().Mid(0));
   448 	
   449 	
   449 	searchBuffer.Append(KVocalicRr().Mid(0));
   450 	ret |= searchBuffer.Append(KVocalicRr().Mid(0));
   450 	searchBuffer.Append(KVocalicLl().Mid(0));
   451 	ret |= searchBuffer.Append(KVocalicLl().Mid(0));
   451 	searchBuffer.Append(KVocalicLSign().Mid(0));
   452 	ret |= searchBuffer.Append(KVocalicLSign().Mid(0));
   452 	searchBuffer.Append(KVocalicLlSign().Mid(0));
   453 	ret |= searchBuffer.Append(KVocalicLlSign().Mid(0));
   453 	searchBuffer.Append(KVocalicL().Mid(0));
   454 	ret |= searchBuffer.Append(KVocalicL().Mid(0));
   454 	searchBuffer.Append(KVocalicRrSign().Mid(0));
   455 	ret |= searchBuffer.Append(KVocalicRrSign().Mid(0));
   455 	
   456 	
   456 	//The replacement buffer for the odd cases to restrict the 
   457 	//The replacement buffer for the odd cases to restrict the 
   457 	//replacement buffers not to get converted to the corresponding 
   458 	//replacement buffers not to get converted to the corresponding 
   458 	//unicode buffer
   459 	//unicode buffer
   459 	
   460 	
   460 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   461 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   461 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   462 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   462 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   463 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   463 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   464 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   464 	
   465 	
   465 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   466 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   466 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   467 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   467 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   468 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   468 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   469 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   469 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   470 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   470 	replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   471 	ret |= replaceBuffer.Append(KIsciiUnconvertibleCharacter().Mid(0));
   471 	
   472 	
   472 	//All normal replace buffers		
   473 	//All normal replace buffers		
   473 	replaceBuffer.Append(KReplacementForExplicitHalant().Mid(0));
   474 	ret |= replaceBuffer.Append(KReplacementForExplicitHalant().Mid(0));
   474 	replaceBuffer.Append(KReplacementForSoftHalant().Mid(0));
   475 	ret |= replaceBuffer.Append(KReplacementForSoftHalant().Mid(0));
   475 	replaceBuffer.Append(KReplacementForOm().Mid(0));
   476 	ret |= replaceBuffer.Append(KReplacementForOm().Mid(0));
   476 	replaceBuffer.Append(KReplacementForAvagraha().Mid(0));
   477 	ret |= replaceBuffer.Append(KReplacementForAvagraha().Mid(0));
   477 	
   478 	
   478 	
   479 	
   479 	replaceBuffer.Append(KReplacementForVocalicRr().Mid(0));
   480 	ret |= replaceBuffer.Append(KReplacementForVocalicRr().Mid(0));
   480 	replaceBuffer.Append(KReplacementForVocalicLl().Mid(0));
   481 	ret |= replaceBuffer.Append(KReplacementForVocalicLl().Mid(0));
   481 	replaceBuffer.Append(KReplacementForVocalicLSign().Mid(0));
   482 	ret |= replaceBuffer.Append(KReplacementForVocalicLSign().Mid(0));
   482 	replaceBuffer.Append(KReplacementForVocalicLlSign().Mid(0));
   483 	ret |= replaceBuffer.Append(KReplacementForVocalicLlSign().Mid(0));
   483 	replaceBuffer.Append(KReplacementForVocalicL().Mid(0));
   484 	ret |= replaceBuffer.Append(KReplacementForVocalicL().Mid(0));
   484 	replaceBuffer.Append(KReplacementForVocalicRrSign().Mid(0));
   485 	ret |= replaceBuffer.Append(KReplacementForVocalicRrSign().Mid(0));
   485 	
   486 	
       
   487 	__ASSERT_DEBUG(!ret, User::Panic(_L("RArray append failure"), ret));
   486 			
   488 			
   487 	for(TInt counter=0;counter<searchBuffer.Count();counter++)
   489 	for(TInt counter=0;counter<searchBuffer.Count();counter++)
   488 	{
   490 	{
   489 		DoFindAndModifyBuffer(aModifyBuffer,searchBuffer[counter],replaceBuffer[counter]);
   491 		DoFindAndModifyBuffer(aModifyBuffer,searchBuffer[counter],replaceBuffer[counter]);
   490 	}
   492 	}
   550 // -----------------------------------------------------------------------------
   552 // -----------------------------------------------------------------------------
   551 //
   553 //
   552 
   554 
   553 LOCAL_C void NormalizeReturnValue(TUint& aReturnValue,const TDesC8& aBuffer)
   555 LOCAL_C void NormalizeReturnValue(TUint& aReturnValue,const TDesC8& aBuffer)
   554 {
   556 {
   555 	RArray<TPtrC8> searchBuffer;
   557 	TInt ret = KErrNone;
       
   558     RArray<TPtrC8> searchBuffer;
   556 	RArray<TPtrC8> replaceBuffer;
   559 	RArray<TPtrC8> replaceBuffer;
   557 	
   560 	
   558 	searchBuffer.Append(KExplicitHalant().Mid(0));
   561 	ret |= searchBuffer.Append(KExplicitHalant().Mid(0));
   559 	searchBuffer.Append(KSoftHalant().Mid(0));
   562 	ret |= searchBuffer.Append(KSoftHalant().Mid(0));
   560 	searchBuffer.Append(KOm().Mid(0));
   563 	ret |= searchBuffer.Append(KOm().Mid(0));
   561 	searchBuffer.Append(KAvagraha().Mid(0));
   564 	ret |= searchBuffer.Append(KAvagraha().Mid(0));
   562 	
   565 	
   563 	searchBuffer.Append(KVocalicRr().Mid(0));
   566 	ret |= searchBuffer.Append(KVocalicRr().Mid(0));
   564 	searchBuffer.Append(KVocalicLl().Mid(0));
   567 	ret |= searchBuffer.Append(KVocalicLl().Mid(0));
   565 	searchBuffer.Append(KVocalicLSign().Mid(0));
   568 	ret |= searchBuffer.Append(KVocalicLSign().Mid(0));
   566 	searchBuffer.Append(KVocalicLlSign().Mid(0));
   569 	ret |= searchBuffer.Append(KVocalicLlSign().Mid(0));
   567 	searchBuffer.Append(KVocalicL().Mid(0));
   570 	ret |= searchBuffer.Append(KVocalicL().Mid(0));
   568 	searchBuffer.Append(KVocalicRrSign().Mid(0));
   571 	ret |= searchBuffer.Append(KVocalicRrSign().Mid(0));
   569 	
   572 	
   570 	replaceBuffer.Append(KReplacementForExplicitHalant().Mid(0));
   573 	ret |= replaceBuffer.Append(KReplacementForExplicitHalant().Mid(0));
   571 	replaceBuffer.Append(KReplacementForSoftHalant().Mid(0));
   574 	ret |= replaceBuffer.Append(KReplacementForSoftHalant().Mid(0));
   572 	replaceBuffer.Append(KReplacementForOm().Mid(0));
   575 	ret |= replaceBuffer.Append(KReplacementForOm().Mid(0));
   573 	replaceBuffer.Append(KReplacementForAvagraha().Mid(0));
   576 	ret |= replaceBuffer.Append(KReplacementForAvagraha().Mid(0));
   574 	
   577 	
   575 	replaceBuffer.Append(KReplacementForVocalicRr().Mid(0));
   578 	ret |= replaceBuffer.Append(KReplacementForVocalicRr().Mid(0));
   576 	replaceBuffer.Append(KReplacementForVocalicLl().Mid(0));
   579 	ret |= replaceBuffer.Append(KReplacementForVocalicLl().Mid(0));
   577 	replaceBuffer.Append(KReplacementForVocalicLSign().Mid(0));
   580 	ret |= replaceBuffer.Append(KReplacementForVocalicLSign().Mid(0));
   578 	replaceBuffer.Append(KReplacementForVocalicLlSign().Mid(0));
   581 	ret |= replaceBuffer.Append(KReplacementForVocalicLlSign().Mid(0));
   579 	replaceBuffer.Append(KReplacementForVocalicL().Mid(0));
   582 	ret |= replaceBuffer.Append(KReplacementForVocalicL().Mid(0));
   580 	replaceBuffer.Append(KReplacementForVocalicRrSign().Mid(0));
   583 	ret |= replaceBuffer.Append(KReplacementForVocalicRrSign().Mid(0));
       
   584 	
       
   585 	__ASSERT_DEBUG(!ret, User::Panic(_L("RArray append failure"), ret));
   581 	
   586 	
   582 	DoNormalizeReturnValue(aReturnValue,aBuffer,searchBuffer,replaceBuffer);
   587 	DoNormalizeReturnValue(aReturnValue,aBuffer,searchBuffer,replaceBuffer);
   583 	searchBuffer.Reset();
   588 	searchBuffer.Reset();
   584 	replaceBuffer.Reset();
   589 	replaceBuffer.Reset();
   585 }
   590 }
   681 	RArray<TPtrC8> searchBuffer;
   686 	RArray<TPtrC8> searchBuffer;
   682 	if(anIsciiBuffer.Length () == 0)
   687 	if(anIsciiBuffer.Length () == 0)
   683 		return EFalse;
   688 		return EFalse;
   684 	if(anIsciiBuffer[anIsciiBuffer.Length()-1] == 0xEF)
   689 	if(anIsciiBuffer[anIsciiBuffer.Length()-1] == 0xEF)
   685 	return ETrue;
   690 	return ETrue;
   686 	searchBuffer.Append(KSoftHalant().Mid(0));
   691 	
   687 	searchBuffer.Append(KOm().Mid(0));
   692 	TInt appendret = KErrNone;
   688 	searchBuffer.Append(KAvagraha().Mid(0));
   693 	appendret |= searchBuffer.Append(KSoftHalant().Mid(0));
   689 	searchBuffer.Append(KExplicitHalant().Mid(0));
   694 	appendret |= searchBuffer.Append(KOm().Mid(0));
       
   695 	appendret |= searchBuffer.Append(KAvagraha().Mid(0));
       
   696 	appendret |= searchBuffer.Append(KExplicitHalant().Mid(0));
       
   697 	__ASSERT_DEBUG(!appendret, User::Panic(_L("RArray append failure"), appendret));
       
   698 	
   690 	TBool ret = EFalse;
   699 	TBool ret = EFalse;
   691 	TBool isNotTruncated =EFalse;
   700 	TBool isNotTruncated =EFalse;
   692 	
   701 	
   693 	//First check if the intermediate iscii buffer is ending with a complete multi byte sequence.
   702 	//First check if the intermediate iscii buffer is ending with a complete multi byte sequence.
   694 	//If it ends with a complete multi byte sequence, no need to check if the last character of 
   703 	//If it ends with a complete multi byte sequence, no need to check if the last character of 
  1193 LOCAL_C void FindAndModifyBuffer(TDes8& aModifyBuffer)
  1202 LOCAL_C void FindAndModifyBuffer(TDes8& aModifyBuffer)
  1194 {
  1203 {
  1195 	RArray<TPtrC8> searchBuffer;
  1204 	RArray<TPtrC8> searchBuffer;
  1196 	RArray<TPtrC8> replaceBuffer;
  1205 	RArray<TPtrC8> replaceBuffer;
  1197 	
  1206 	
  1198 	searchBuffer.Append(KExplicitHalant().Mid(0));
  1207 	TInt ret = KErrNone;
  1199 	searchBuffer.Append(KSoftHalant().Mid(0));
  1208 	ret |= searchBuffer.Append(KExplicitHalant().Mid(0));
  1200 	searchBuffer.Append(KOm().Mid(0));
  1209 	ret |= searchBuffer.Append(KSoftHalant().Mid(0));
  1201 	searchBuffer.Append(KAvagraha().Mid(0));
  1210 	ret |= searchBuffer.Append(KOm().Mid(0));
  1202 	
  1211 	ret |= searchBuffer.Append(KAvagraha().Mid(0));
  1203 	replaceBuffer.Append(KReplacementForExplicitHalant().Mid(0));
  1212 	
  1204 	replaceBuffer.Append(KReplacementForSoftHalant().Mid(0));
  1213 	ret |= replaceBuffer.Append(KReplacementForExplicitHalant().Mid(0));
  1205 	replaceBuffer.Append(KReplacementForOm().Mid(0));
  1214 	ret |= replaceBuffer.Append(KReplacementForSoftHalant().Mid(0));
  1206 	replaceBuffer.Append(KReplacementForAvagraha().Mid(0));
  1215 	ret |= replaceBuffer.Append(KReplacementForOm().Mid(0));
       
  1216 	ret |= replaceBuffer.Append(KReplacementForAvagraha().Mid(0));
       
  1217 	
       
  1218 	__ASSERT_DEBUG(!ret, User::Panic(_L("RArray append failure"), ret));
  1207 	
  1219 	
  1208 	for(TInt counter=0;counter<searchBuffer.Count();counter++)
  1220 	for(TInt counter=0;counter<searchBuffer.Count();counter++)
  1209 	{
  1221 	{
  1210 		DoFindAndModifyBuffer(aModifyBuffer,searchBuffer[counter],replaceBuffer[counter]);
  1222 		DoFindAndModifyBuffer(aModifyBuffer,searchBuffer[counter],replaceBuffer[counter]);
  1211 	}
  1223 	}
  1273 
  1285 
  1274 LOCAL_C void NormalizeReturnValue(TUint& aReturnValue,const TDesC8& aBuffer)
  1286 LOCAL_C void NormalizeReturnValue(TUint& aReturnValue,const TDesC8& aBuffer)
  1275 {
  1287 {
  1276 	RArray<TPtrC8> searchBuffer;
  1288 	RArray<TPtrC8> searchBuffer;
  1277 	RArray<TPtrC8> replaceBuffer;
  1289 	RArray<TPtrC8> replaceBuffer;
  1278 	
  1290 	TInt ret =KErrNone;
  1279 	searchBuffer.Append(KExplicitHalant().Mid(0));
  1291 	ret |= searchBuffer.Append(KExplicitHalant().Mid(0));
  1280 	searchBuffer.Append(KSoftHalant().Mid(0));
  1292 	ret |= searchBuffer.Append(KSoftHalant().Mid(0));
  1281 	searchBuffer.Append(KOm().Mid(0));
  1293 	ret |= searchBuffer.Append(KOm().Mid(0));
  1282 	searchBuffer.Append(KAvagraha().Mid(0));
  1294 	ret |= searchBuffer.Append(KAvagraha().Mid(0));
  1283 	
  1295 	
  1284 	replaceBuffer.Append(KReplacementForExplicitHalant().Mid(0));
  1296 	ret |= replaceBuffer.Append(KReplacementForExplicitHalant().Mid(0));
  1285 	replaceBuffer.Append(KReplacementForSoftHalant().Mid(0));
  1297 	ret |= replaceBuffer.Append(KReplacementForSoftHalant().Mid(0));
  1286 	replaceBuffer.Append(KReplacementForOm().Mid(0));
  1298 	ret |= replaceBuffer.Append(KReplacementForOm().Mid(0));
  1287 	replaceBuffer.Append(KReplacementForAvagraha().Mid(0));
  1299 	ret |= replaceBuffer.Append(KReplacementForAvagraha().Mid(0));
       
  1300 	
       
  1301 	__ASSERT_DEBUG(!ret, User::Panic(_L("RArray append failure"), ret));
       
  1302 	
  1288 	DoNormalizeReturnValue(aReturnValue,aBuffer,searchBuffer,replaceBuffer);
  1303 	DoNormalizeReturnValue(aReturnValue,aBuffer,searchBuffer,replaceBuffer);
  1289 	searchBuffer.Reset();
  1304 	searchBuffer.Reset();
  1290 	replaceBuffer.Reset();
  1305 	replaceBuffer.Reset();
  1291 }
  1306 }
  1292 
  1307 
  1387 	RArray<TPtrC8> searchBuffer;
  1402 	RArray<TPtrC8> searchBuffer;
  1388 	if(anIsciiBuffer.Length () == 0)
  1403 	if(anIsciiBuffer.Length () == 0)
  1389 		return EFalse;
  1404 		return EFalse;
  1390 	if(anIsciiBuffer[anIsciiBuffer.Length()-1] == 0xEF)
  1405 	if(anIsciiBuffer[anIsciiBuffer.Length()-1] == 0xEF)
  1391 	return ETrue;
  1406 	return ETrue;
  1392 	searchBuffer.Append(KSoftHalant().Mid(0));
  1407 	
  1393 	searchBuffer.Append(KOm().Mid(0));
  1408 	TInt appendret = KErrNone;
  1394 	searchBuffer.Append(KAvagraha().Mid(0));
  1409 	appendret |= searchBuffer.Append(KSoftHalant().Mid(0));
  1395 	searchBuffer.Append(KExplicitHalant().Mid(0));
  1410 	appendret |= searchBuffer.Append(KOm().Mid(0));
       
  1411 	appendret |= searchBuffer.Append(KAvagraha().Mid(0));
       
  1412 	appendret |= searchBuffer.Append(KExplicitHalant().Mid(0));
       
  1413 	__ASSERT_DEBUG(!ret, User::Panic(_L("RArray append failure"), ret));
       
  1414 	
  1396 	TBool ret = EFalse;
  1415 	TBool ret = EFalse;
  1397 	TBool isNotTruncated =EFalse;
  1416 	TBool isNotTruncated =EFalse;
  1398 	
  1417 	
  1399 	//First check if the intermediate iscii buffer is ending with a complete multi byte sequence.
  1418 	//First check if the intermediate iscii buffer is ending with a complete multi byte sequence.
  1400 	//If it ends with a complete multi byte sequence, no need to check if the last character of 
  1419 	//If it ends with a complete multi byte sequence, no need to check if the last character of