sl@0: /* sl@0: * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include sl@0: #include sl@0: sl@0: #define ARRAY_LENGTH(aArray) (sizeof(aArray)/sizeof((aArray)[0])) sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_1[]= sl@0: { sl@0: 0x0040, sl@0: 0x00a3, sl@0: 0x0024, sl@0: 0x00a5, sl@0: 0x00e8, sl@0: 0x00e9, sl@0: 0x00f9, sl@0: 0x00ec, sl@0: 0x00f2, sl@0: 0x00e7, sl@0: 0x000a, sl@0: 0x00d8, sl@0: 0x00f8, sl@0: 0x000d, sl@0: 0x00c5, sl@0: 0x00e5, sl@0: 0x0394, sl@0: 0x005f, sl@0: 0x03a6, sl@0: 0x0393, sl@0: 0x039b, sl@0: 0x03a9, sl@0: 0x03a0, sl@0: 0x03a8, sl@0: 0x03a3, sl@0: 0x0398, sl@0: 0x039e sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_2[]= sl@0: { sl@0: 0x00c6, sl@0: 0x00e6, sl@0: 0x00df, sl@0: 0x00c9, sl@0: 0x0020, sl@0: 0x0021, sl@0: 0x0022, sl@0: 0x0023, sl@0: 0x00a4 sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_3[]= sl@0: { sl@0: 0x00c4, sl@0: 0x00d6, sl@0: 0x00d1, sl@0: 0x00dc, sl@0: 0x00a7, sl@0: 0x00bf sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_4[]= sl@0: { sl@0: 0x00e4, sl@0: 0x00f6, sl@0: 0x00f1, sl@0: 0x00fc, sl@0: 0x00e0 sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_5[]= sl@0: { sl@0: 0x0040, sl@0: 0x00a3, sl@0: 0x0024, sl@0: 0x00a5, sl@0: 0x00e8, sl@0: 0x00e9, sl@0: 0x00f9, sl@0: 0x00ec, sl@0: 0x00f2, sl@0: 0x00c7, sl@0: 0x000c, // meant to be a "Page Break" - a FORM FEED character is the nearest thing in Unicode to this sl@0: 0x00d8, sl@0: 0x00f8, sl@0: 0x000d, sl@0: 0x00c5, sl@0: 0x00e5, sl@0: 0x0394, sl@0: 0x005f, sl@0: 0x03a6, sl@0: 0x0393, sl@0: 0x005e, // '^' sl@0: 0x03a9, sl@0: 0x03a0, sl@0: 0x03a8, sl@0: 0x03a3, sl@0: 0x0398, sl@0: 0x039e sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_6[]= sl@0: { sl@0: 0x00c6, sl@0: 0x00e6, sl@0: 0x00df, sl@0: 0x00c9, sl@0: 0x0020, sl@0: 0x0021, sl@0: 0x0022, sl@0: 0x0023, sl@0: 0x00a4, sl@0: 0x0025, sl@0: 0x0026, sl@0: 0x0027, sl@0: 0x007b, // '{' sl@0: 0x007d, // '}' sl@0: 0x002a, sl@0: 0x002b, sl@0: 0x002c, sl@0: 0x002d, sl@0: 0x002e, sl@0: 0x005c, // '\' sl@0: 0x0030, sl@0: 0x0031, sl@0: 0x0032, sl@0: 0x0033, sl@0: 0x0034, sl@0: 0x0035, sl@0: 0x0036, sl@0: 0x0037, sl@0: 0x0038, sl@0: 0x0039, sl@0: 0x003a, sl@0: 0x003b, sl@0: 0x005b, // '[' sl@0: 0x007e, // '~' sl@0: 0x005d, // ']' sl@0: 0x003f, sl@0: 0x007c // '|' sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_7[]= sl@0: { sl@0: 0x00c4, sl@0: 0x00d6, sl@0: 0x00d1, sl@0: 0x00dc, sl@0: 0x00a7, sl@0: 0x00bf, sl@0: 0x0061, sl@0: 0x0062, sl@0: 0x0063, sl@0: 0x0064, sl@0: 0x20ac // Euro symbol sl@0: }; sl@0: sl@0: LOCAL_D const SCnvConversionData::SOneDirectionData::SRange::UData::SKeyedTable16OfIndexedTables16::SKeyedEntry keyedTables16OfIndexedTables16_keyedEntries_sms7BitToUnicode_1[]= sl@0: { sl@0: { sl@0: 0x00, sl@0: 0x1a, sl@0: keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_1 sl@0: }, sl@0: { sl@0: 0x1c, sl@0: 0x24, sl@0: keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_2 sl@0: }, sl@0: { sl@0: 0x5b, sl@0: 0x60, sl@0: keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_3 sl@0: }, sl@0: { sl@0: 0x7b, sl@0: 0x7f, sl@0: keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_4 sl@0: } sl@0: }; sl@0: sl@0: LOCAL_D const SCnvConversionData::SOneDirectionData::SRange::UData::SKeyedTable16OfIndexedTables16::SKeyedEntry keyedTables16OfIndexedTables16_keyedEntries_sms7BitToUnicode_2[]= sl@0: { sl@0: { sl@0: 0x1b00, sl@0: 0x1b1a, sl@0: keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_5 sl@0: }, sl@0: { sl@0: 0x1b1c, sl@0: 0x1b40, sl@0: keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_6 sl@0: }, sl@0: { sl@0: 0x1b5b, sl@0: 0x1b65, sl@0: keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_7 sl@0: }, sl@0: { sl@0: 0x1b7b, sl@0: 0x1b7f, sl@0: keyedTables16OfIndexedTables16_indexedEntries_sms7BitToUnicode_4 sl@0: } sl@0: }; sl@0: sl@0: #if 0 sl@0: LOCAL_D const SCnvConversionData::SOneDirectionData::SRange::UData::SKeyedTable1616::SEntry keyedTable1616_sms7BitToUnicode_1[]= sl@0: { sl@0: { sl@0: 0x1b0a, sl@0: 0x000c sl@0: }, sl@0: { sl@0: 0x1b14, sl@0: 0x005e sl@0: }, sl@0: { sl@0: 0x1b28, sl@0: 0x007b sl@0: }, sl@0: { sl@0: 0x1b29, sl@0: 0x007d sl@0: }, sl@0: { sl@0: 0x1b2f, sl@0: 0x005c sl@0: }, sl@0: { sl@0: 0x1b3c, sl@0: 0x005b sl@0: }, sl@0: { sl@0: 0x1b3d, sl@0: 0x007e sl@0: }, sl@0: { sl@0: 0x1b3e, sl@0: 0x005d sl@0: }, sl@0: { sl@0: 0x1b40, sl@0: 0x007c sl@0: }, sl@0: { sl@0: 0x1b65, sl@0: 0x20ac sl@0: } sl@0: }; sl@0: #endif //0 sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_1[]= sl@0: { sl@0: 0x60, sl@0: 0x41, sl@0: 0x41, sl@0: 0x41, sl@0: 0x41, sl@0: 0x5b, sl@0: 0x0e, sl@0: 0x1c, sl@0: 0x09, sl@0: 0x45, sl@0: 0x1f, sl@0: 0x45, sl@0: 0x45, sl@0: 0x49, sl@0: 0x49, sl@0: 0x49, sl@0: 0x49 sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_2[]= sl@0: { sl@0: 0x5d, sl@0: 0x4f, sl@0: 0x4f, sl@0: 0x4f, sl@0: 0x4f, sl@0: 0x5c sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_3[]= sl@0: { sl@0: 0x0b, sl@0: 0x55, sl@0: 0x55, sl@0: 0x55, sl@0: 0x5e, sl@0: 0x59 sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_4[]= sl@0: { sl@0: 0x1e, sl@0: 0x7f, sl@0: 0x61, sl@0: 0x61, sl@0: 0x61, sl@0: 0x7b, sl@0: 0x0f, sl@0: 0x1d, sl@0: 0x09, sl@0: 0x04, sl@0: 0x05, sl@0: 0x65, sl@0: 0x65, sl@0: 0x07, sl@0: 0x69, sl@0: 0x69, sl@0: 0x69 sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_5[]= sl@0: { sl@0: 0x7d, sl@0: 0x08, sl@0: 0x6f, sl@0: 0x6f, sl@0: 0x6f, sl@0: 0x7c sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_6[]= sl@0: { sl@0: 0x0c, sl@0: 0x06, sl@0: 0x75, sl@0: 0x75, sl@0: 0x7e, sl@0: 0x79 sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_7[]= sl@0: { sl@0: 0x49, sl@0: 0x41, sl@0: 0x42, sl@0: 0x13, sl@0: 0x10, sl@0: 0x45, sl@0: 0x5a, sl@0: 0x48, sl@0: 0x19, sl@0: 0x49, sl@0: 0x4b, sl@0: 0x14, sl@0: 0x4d, sl@0: 0x4e, sl@0: 0x1a, sl@0: 0x4f sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_8[]= sl@0: { sl@0: 0x18, sl@0: 0x54, sl@0: 0x59, sl@0: 0x12, sl@0: 0x58, sl@0: 0x17, sl@0: 0x15, sl@0: 0x49, sl@0: 0x59, sl@0: 0x41, sl@0: 0x45, sl@0: 0x48, sl@0: 0x49 sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_9[]= sl@0: { sl@0: 0x59, sl@0: 0x41, sl@0: 0x42, sl@0: 0x13, sl@0: 0x10, sl@0: 0x45, sl@0: 0x5a, sl@0: 0x48, sl@0: 0x19, sl@0: 0x49, sl@0: 0x4b, sl@0: 0x14, sl@0: 0x4d, sl@0: 0x4e, sl@0: 0x1a, sl@0: 0x4f sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_10[]= sl@0: { sl@0: 0x16, sl@0: 0x50, sl@0: 0x18, sl@0: 0x18, sl@0: 0x54, sl@0: 0x59, sl@0: 0x12, sl@0: 0x58, sl@0: 0x17, sl@0: 0x15, sl@0: 0x49, sl@0: 0x59, sl@0: 0x4f, sl@0: 0x59, sl@0: 0x15 sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_11[]= sl@0: { sl@0: 0x42, sl@0: 0x19, sl@0: 0x59, sl@0: 0x59, sl@0: 0x59, sl@0: 0x12 sl@0: }; sl@0: sl@0: LOCAL_D const SCnvConversionData::SOneDirectionData::SRange::UData::SKeyedTable16OfIndexedTables16::SKeyedEntry keyedTables16OfIndexedTables16_keyedEntries_unicodeToSms7Bit_1[]= sl@0: { sl@0: { sl@0: 0x00bf, sl@0: 0x00cf, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_1 sl@0: }, sl@0: { sl@0: 0x00d1, sl@0: 0x00d6, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_2 sl@0: }, sl@0: { sl@0: 0x00d8, sl@0: 0x00dd, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_3 sl@0: }, sl@0: { sl@0: 0x00df, sl@0: 0x00ef, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_4 sl@0: }, sl@0: { sl@0: 0x00f1, sl@0: 0x00f6, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_5 sl@0: }, sl@0: { sl@0: 0x00f8, sl@0: 0x00fd, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_6 sl@0: }, sl@0: { sl@0: 0x0390, sl@0: 0x039f, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_7 sl@0: }, sl@0: { sl@0: 0x03a3, sl@0: 0x03af, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_8 sl@0: }, sl@0: { sl@0: 0x03b0, sl@0: 0x03bf, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_9 sl@0: }, sl@0: { sl@0: 0x03c0, sl@0: 0x03ce, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_10 sl@0: }, sl@0: { sl@0: 0x03d0, sl@0: 0x03d5, sl@0: keyedTables16OfIndexedTables16_indexedEntries_unicodeToSms7Bit_11 sl@0: } sl@0: }; sl@0: sl@0: LOCAL_D const SCnvConversionData::SOneDirectionData::SRange::UData::SKeyedTable1616::SEntry keyedTable1616_unicodeToSms7Bit_1[]= sl@0: { sl@0: { sl@0: 0x000a, sl@0: 0x0a sl@0: }, sl@0: { sl@0: 0x000d, sl@0: 0x0d sl@0: }, sl@0: { sl@0: 0x001b, sl@0: 0x1b sl@0: }, sl@0: { sl@0: 0x0020, sl@0: 0x20 sl@0: }, sl@0: { sl@0: 0x0021, sl@0: 0x21 sl@0: }, sl@0: { sl@0: 0x0022, sl@0: 0x22 sl@0: }, sl@0: { sl@0: 0x0023, sl@0: 0x23 sl@0: }, sl@0: { sl@0: 0x0024, sl@0: 0x02 sl@0: }, sl@0: { sl@0: 0x0040, sl@0: 0x00 sl@0: }, sl@0: { sl@0: 0x005f, sl@0: 0x11 sl@0: }, sl@0: { sl@0: 0x00a1, sl@0: 0x40 sl@0: }, sl@0: { sl@0: 0x00a3, sl@0: 0x01 sl@0: }, sl@0: { sl@0: 0x00a4, sl@0: 0x24 sl@0: }, sl@0: { sl@0: 0x00a5, sl@0: 0x03 sl@0: }, sl@0: { sl@0: 0x00a7, sl@0: 0x5f sl@0: }, sl@0: { sl@0: 0x00ff, sl@0: 0x79 sl@0: }, sl@0: { sl@0: 0x0386, sl@0: 0x41 sl@0: }, sl@0: { sl@0: 0x0388, sl@0: 0x45 sl@0: }, sl@0: { sl@0: 0x0389, sl@0: 0x48 sl@0: }, sl@0: { sl@0: 0x038a, sl@0: 0x49 sl@0: }, sl@0: { sl@0: 0x038c, sl@0: 0x4f sl@0: }, sl@0: { sl@0: 0x038e, sl@0: 0x59 sl@0: }, sl@0: { sl@0: 0x038f, sl@0: 0x15 sl@0: }, sl@0: { sl@0: 0x03a0, sl@0: 0x16 sl@0: }, sl@0: { sl@0: 0x03a1, sl@0: 0x50 sl@0: }, sl@0: { sl@0: 0x2126, sl@0: 0x15 sl@0: }, sl@0: { sl@0: 0x220f, sl@0: 0x16 sl@0: }, sl@0: { sl@0: 0x2211, sl@0: 0x18 sl@0: } sl@0: }; sl@0: sl@0: LOCAL_D const SCnvConversionData::SOneDirectionData::SRange::UData::SKeyedTable1616::SEntry keyedTable1616_unicodeToSms7Bit_2[]= sl@0: { sl@0: { sl@0: 0x000c, sl@0: 0x1b0a sl@0: }, sl@0: { sl@0: 0x005b, sl@0: 0x1b3c sl@0: }, sl@0: { sl@0: 0x005c, sl@0: 0x1b2f sl@0: }, sl@0: { sl@0: 0x005d, sl@0: 0x1b3e sl@0: }, sl@0: { sl@0: 0x005e, sl@0: 0x1b14 sl@0: }, sl@0: { sl@0: 0x007b, sl@0: 0x1b28 sl@0: }, sl@0: { sl@0: 0x007c, sl@0: 0x1b40 sl@0: }, sl@0: { sl@0: 0x007d, sl@0: 0x1b29 sl@0: }, sl@0: { sl@0: 0x007e, sl@0: 0x1b3d sl@0: }, sl@0: { sl@0: 0x20ac, sl@0: 0x1b65 sl@0: } sl@0: }; sl@0: sl@0: LOCAL_D const SCnvConversionData::SVariableByteData::SRange sms7BitVariableByteDataRanges[]= sl@0: { sl@0: { sl@0: 0x00, sl@0: 0x1a, sl@0: 0, sl@0: 0 sl@0: }, sl@0: { sl@0: 0x1b, sl@0: 0x1b, sl@0: 1, sl@0: 0 sl@0: }, sl@0: { sl@0: 0x1c, sl@0: 0xff, sl@0: 0, sl@0: 0 sl@0: } sl@0: }; sl@0: sl@0: LOCAL_D const SCnvConversionData::SOneDirectionData::SRange sms7BitToUnicodeDataRanges[]= sl@0: { sl@0: { sl@0: 0x25, sl@0: 0x3f, sl@0: SCnvConversionData::SOneDirectionData::SRange::EDirect, sl@0: 0, sl@0: 0, sl@0: { sl@0: 0, sl@0: 0 sl@0: } sl@0: }, sl@0: { sl@0: 0x41, sl@0: 0x5a, sl@0: SCnvConversionData::SOneDirectionData::SRange::EDirect, sl@0: 0, sl@0: 0, sl@0: { sl@0: 0, sl@0: 0 sl@0: } sl@0: }, sl@0: { sl@0: 0x61, sl@0: 0x7a, sl@0: SCnvConversionData::SOneDirectionData::SRange::EDirect, sl@0: 0, sl@0: 0, sl@0: { sl@0: 0, sl@0: 0 sl@0: } sl@0: }, sl@0: { sl@0: 0x40, sl@0: 0x40, sl@0: SCnvConversionData::SOneDirectionData::SRange::EOffset, sl@0: 0, sl@0: 0, sl@0: { sl@0: STATIC_CAST(TUint, 97), sl@0: 0 sl@0: } sl@0: }, sl@0: { sl@0: 0x00, sl@0: 0x7f, sl@0: SCnvConversionData::SOneDirectionData::SRange::EKeyedTable16OfIndexedTables16, sl@0: 0, sl@0: 0, sl@0: { sl@0: UData_SKeyedTable16OfIndexedTables16(keyedTables16OfIndexedTables16_keyedEntries_sms7BitToUnicode_1) sl@0: } sl@0: }, sl@0: #if 0 sl@0: { sl@0: 0x1b0a, sl@0: 0x1b65, sl@0: SCnvConversionData::SOneDirectionData::SRange::EKeyedTable1616, sl@0: 0, sl@0: 0, sl@0: { sl@0: UData_KeyedTable(keyedTable1616_sms7BitToUnicode_1) sl@0: } sl@0: } sl@0: #else sl@0: { sl@0: 0x1b41, sl@0: 0x1b5a, sl@0: SCnvConversionData::SOneDirectionData::SRange::EOffset, sl@0: 0, sl@0: 0, sl@0: { sl@0: (TUint)-0x1b00, sl@0: 0 sl@0: } sl@0: }, sl@0: { sl@0: 0x1b66, sl@0: 0x1b7a, sl@0: SCnvConversionData::SOneDirectionData::SRange::EOffset, sl@0: 0, sl@0: 0, sl@0: { sl@0: (TUint)-0x1b00, sl@0: 0 sl@0: } sl@0: }, sl@0: { sl@0: 0x1b00, sl@0: 0x1b7f, sl@0: SCnvConversionData::SOneDirectionData::SRange::EKeyedTable16OfIndexedTables16, sl@0: 0, sl@0: 0, sl@0: { sl@0: UData_SKeyedTable16OfIndexedTables16(keyedTables16OfIndexedTables16_keyedEntries_sms7BitToUnicode_2) sl@0: } sl@0: } sl@0: #endif sl@0: }; sl@0: sl@0: LOCAL_D const SCnvConversionData::SOneDirectionData::SRange unicodeToSms7BitDataRanges[]= sl@0: { sl@0: { sl@0: 0x0025, sl@0: 0x003f, sl@0: SCnvConversionData::SOneDirectionData::SRange::EDirect, sl@0: 1, sl@0: 0, sl@0: { sl@0: 0, sl@0: 0 sl@0: } sl@0: }, sl@0: { sl@0: 0x0041, sl@0: 0x005a, sl@0: SCnvConversionData::SOneDirectionData::SRange::EDirect, sl@0: 1, sl@0: 0, sl@0: { sl@0: 0, sl@0: 0 sl@0: } sl@0: }, sl@0: { sl@0: 0x0061, sl@0: 0x007a, sl@0: SCnvConversionData::SOneDirectionData::SRange::EDirect, sl@0: 1, sl@0: 0, sl@0: { sl@0: 0, sl@0: 0 sl@0: } sl@0: }, sl@0: { sl@0: 0x00bf, sl@0: 0x03d5, sl@0: SCnvConversionData::SOneDirectionData::SRange::EKeyedTable16OfIndexedTables16, sl@0: 1, sl@0: 0, sl@0: { sl@0: UData_SKeyedTable16OfIndexedTables16(keyedTables16OfIndexedTables16_keyedEntries_unicodeToSms7Bit_1) sl@0: } sl@0: }, sl@0: { sl@0: 0x000a, sl@0: 0x2211, sl@0: SCnvConversionData::SOneDirectionData::SRange::EKeyedTable1616, sl@0: 1, sl@0: 0, sl@0: { sl@0: UData_SKeyedTable1616(keyedTable1616_unicodeToSms7Bit_1) sl@0: } sl@0: }, sl@0: { sl@0: 0x000c, sl@0: 0x20ac, sl@0: SCnvConversionData::SOneDirectionData::SRange::EKeyedTable1616, sl@0: 2, sl@0: 0, sl@0: { sl@0: UData_SKeyedTable1616(keyedTable1616_unicodeToSms7Bit_2) sl@0: } sl@0: } sl@0: }; sl@0: sl@0: GLREF_D const SCnvConversionData sms7BitConversionData= sl@0: { sl@0: SCnvConversionData::EFixedBigEndian, sl@0: { sl@0: ARRAY_LENGTH(sms7BitVariableByteDataRanges), sl@0: sms7BitVariableByteDataRanges sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(sms7BitToUnicodeDataRanges), sl@0: sms7BitToUnicodeDataRanges sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(unicodeToSms7BitDataRanges), sl@0: unicodeToSms7BitDataRanges sl@0: }, sl@0: NULL, sl@0: NULL sl@0: }; sl@0: sl@0: GLREF_C void IsCharacterSetSMS7Bit(TInt& aConfidenceLevel, const TDesC8& aSample) sl@0: { sl@0: _LIT8(KHz1Esc,"\x7e\x7e"); sl@0: _LIT8(KHz2Esc,"\x7e\x7b"); sl@0: _LIT8(KHz3Esc,"\x7e\x7d"); sl@0: _LIT8(KLit8EscapeSequenceForJisRoman, "\x1b\x28\x4a"); sl@0: _LIT8(KLit8EscapeSequenceForAscii, "\x1b\x28\x42"); sl@0: // _LIT8(KLit8EscapeSequenceForHalfWidthKatakana, "\x1b\x28\x49"); sl@0: _LIT8(KLit8EscapeSequenceForJisC6226_1978, "\x1b\x24\x40"); sl@0: _LIT8(KLit8EscapeSequenceForJisX0208_1983, "\x1b\x24\x42"); sl@0: _LIT8(KLit8EscapeSequenceForJisX0208_199x, "\x1b\x26\x40\x1b\x24\x42"); sl@0: _LIT8(KLit8EscapeSequenceForJisX0212_1990, "\x1b\x24\x28\x44"); sl@0: sl@0: TInt hz1Result=0; sl@0: TInt hz2Result=0; sl@0: TInt hz3Result=0; sl@0: TInt JisRomanResult = 0; sl@0: TInt AsciiResult = 0; sl@0: TInt JisCResult = 0; sl@0: TInt JisX0208Result = 0; sl@0: TInt JisX0212Result = 0; sl@0: TInt JisX0208XResult = 0; sl@0: TInt currency = 0; sl@0: TInt email = 0; sl@0: sl@0: TInt sampleLength = aSample.Length(); sl@0: aConfidenceLevel =70; sl@0: if (sampleLength == 0) sl@0: return; sl@0: sl@0: TInt HzEscSequences = 0; sl@0: TInt JISEscSequences = 0; sl@0: sl@0: for (TInt i = 0; i < sampleLength; ++i) sl@0: { sl@0: sl@0: if (i > hz1Result) sl@0: { sl@0: hz1Result=(aSample.Right(sampleLength-i)).Find(KHz1Esc); sl@0: if (hz1Result!=KErrNotFound) //aConfidenceLevel-=2; sl@0: HzEscSequences += 5; sl@0: } sl@0: sl@0: if (i > hz2Result) sl@0: { sl@0: hz2Result=(aSample.Right(sampleLength-i)).Find(KHz2Esc); sl@0: if (hz2Result!=KErrNotFound) //aConfidenceLevel-=2; sl@0: HzEscSequences += 5; sl@0: } sl@0: sl@0: if (i > hz3Result) sl@0: { sl@0: hz3Result=(aSample.Right(sampleLength-i)).Find(KHz3Esc); sl@0: if (hz3Result!=KErrNotFound) //aConfidenceLevel-=2; sl@0: HzEscSequences += 5; sl@0: } sl@0: sl@0: if (i > JisRomanResult) sl@0: { sl@0: JisRomanResult = (aSample.Right(sampleLength-i)).Find(KLit8EscapeSequenceForJisRoman); sl@0: if (JisRomanResult!=KErrNotFound) sl@0: JISEscSequences +=10; sl@0: } sl@0: sl@0: if (i > AsciiResult) sl@0: { sl@0: AsciiResult = (aSample.Right(sampleLength-i)).Find(KLit8EscapeSequenceForAscii); sl@0: if (AsciiResult!=KErrNotFound) sl@0: JISEscSequences +=10; sl@0: } sl@0: sl@0: if (i > JisCResult) sl@0: { sl@0: JisCResult = (aSample.Right(sampleLength-i)).Find(KLit8EscapeSequenceForJisC6226_1978); sl@0: if (JisCResult!=KErrNotFound) sl@0: JISEscSequences +=5; sl@0: } sl@0: sl@0: if (i > JisX0208Result) sl@0: { sl@0: JisX0208Result = (aSample.Right(sampleLength-i)).Find(KLit8EscapeSequenceForJisX0208_1983); sl@0: if (JisX0208Result!=KErrNotFound) sl@0: JISEscSequences +=5; sl@0: } sl@0: sl@0: if (i > JisX0212Result) sl@0: { sl@0: JisX0212Result = (aSample.Right(sampleLength-i)).Find(KLit8EscapeSequenceForJisX0212_1990); sl@0: if (JisX0212Result!=KErrNotFound) sl@0: JISEscSequences +=5; sl@0: } sl@0: sl@0: if (i > JisX0208XResult) sl@0: { sl@0: JisX0208XResult = (aSample.Right(sampleLength-i)).Find(KLit8EscapeSequenceForJisX0208_199x); sl@0: if (JisX0208XResult!=KErrNotFound) sl@0: JISEscSequences +=5; sl@0: } sl@0: sl@0: if ((aSample[i]&0x80)!=0x00) sl@0: { sl@0: aConfidenceLevel = 0; sl@0: break; sl@0: } sl@0: else sl@0: { sl@0: TInt increment1 = i+1; sl@0: if (aSample[i] == 0x1b) sl@0: { sl@0: static const TInt defaultExtensionTable[10] = sl@0: {0x0a, 0x14, 0x1b, 0x29, 0x2f, 0x3c, 0x3d, 0x3e, 0x40, 0x65}; sl@0: if (increment1 >= sampleLength) sl@0: break; sl@0: for (TInt j =0; j < 10; j++) sl@0: { sl@0: if (aSample[increment1] == defaultExtensionTable[j]) sl@0: { sl@0: aConfidenceLevel+=5; sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: else if (currency<100 && (aSample[i]==0x01 || aSample[i]==0x02 || aSample[i]==0x03)) sl@0: { sl@0: if (increment1 >= sampleLength) sl@0: break; sl@0: if ((aSample[increment1] >= 0x30) && (aSample[increment1] <= 0x39)) sl@0: { sl@0: currency ? currency *= 3 : currency = 3; sl@0: } sl@0: } sl@0: else if (email<100 && aSample[i]==0x00) // @ sl@0: { sl@0: TBool valid = ETrue; sl@0: TInt pos = i-1; sl@0: while(valid && pos>=0) // check before @ sl@0: { sl@0: TInt8 act = aSample[pos]; sl@0: if(act==' ' || act=='\n' || act=='\t') sl@0: break; sl@0: if( !( ( act >= 'a' && act <= 'z' ) || sl@0: ( act >= 'A' && act <= 'Z' ) || sl@0: ( act >= '0' && act <= '9' ) || sl@0: act == '.' || sl@0: act == '-' || sl@0: act == /*'_'*/0x11 ) ) sl@0: { sl@0: valid = EFalse; sl@0: } sl@0: pos--; sl@0: } sl@0: sl@0: TInt space = aSample.Mid(i+1).Find((const unsigned char*)" ",1); sl@0: TInt lf = aSample.Mid(i+1).Find((const unsigned char*)"\n",1); sl@0: TInt end = aSample.Length() - (i+1); sl@0: if(space != KErrNotFound) sl@0: { sl@0: end = space; sl@0: } sl@0: else if(lf != KErrNotFound) sl@0: { sl@0: end = lf; sl@0: } sl@0: TPtrC8 string = aSample.Mid(i+1,end); sl@0: TInt commat = string.Find((const unsigned char*)"\x0",1); sl@0: TInt period = string.Find((const unsigned char*)".",1); sl@0: if(commat!=KErrNotFound || period==KErrNotFound) sl@0: { sl@0: valid = EFalse; sl@0: } sl@0: if(valid) sl@0: { sl@0: email ? email *= 5 : email = 5; sl@0: } sl@0: else sl@0: { sl@0: aConfidenceLevel += 5; // not valid address but still valid '@' sl@0: } sl@0: } sl@0: //next test the occurance of values 00-2f (except 0a & 0d) next to another character sl@0: // These are the ASCII control codes and therefore low chances of these values occuring sl@0: // next to the ASCII value sl@0: else if (aSample[i] < 0x20 && aSample[i] != '\r' && aSample[i] != '\n') sl@0: { sl@0: if (increment1 >= sampleLength) sl@0: break; sl@0: if (((aSample[increment1] >= 0x20) && (aSample[increment1] <= 0x5a)) || sl@0: ((aSample[increment1] >= 0x61) && (aSample[increment1] <= 0x7a))) sl@0: { sl@0: aConfidenceLevel+=2; sl@0: } sl@0: } sl@0: // other possible tests to include... Greek matching... sl@0: } sl@0: } // for loop sl@0: aConfidenceLevel += currency + email; sl@0: aConfidenceLevel = aConfidenceLevel - ((HzEscSequences*100)/sampleLength); sl@0: aConfidenceLevel = aConfidenceLevel - ((JISEscSequences*100)/sampleLength); sl@0: aConfidenceLevel =(aConfidenceLevel >0)? ((aConfidenceLevel > 100)? 100: aConfidenceLevel): 0; sl@0: } sl@0: