1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 3b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru* Copyright (C) 2000-2009, International Business Machines 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************** 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: ucnvisci.c 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created on: 2001JUN26 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: Ram Viswanadha 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 24/7/2001 Ram Added support for EXT character handling 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucnv_bld.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucnv.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucnv_cnv.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucnv_cb.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uset.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define UCNV_OPTIONS_VERSION_MASK 0xf 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define NUKTA 0x093c 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define HALANT 0x094d 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ZWNJ 0x200c /* Zero Width Non Joiner */ 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ZWJ 0x200d /* Zero width Joiner */ 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define INVALID_CHAR 0xffff 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ATR 0xEF /* Attribute code */ 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define EXT 0xF0 /* Extension code */ 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define DANDA 0x0964 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define DOUBLE_DANDA 0x0965 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ISCII_NUKTA 0xE9 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ISCII_HALANT 0xE8 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ISCII_DANDA 0xEA 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ISCII_INV 0xD9 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ISCII_VOWEL_SIGN_E 0xE0 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define INDIC_BLOCK_BEGIN 0x0900 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define INDIC_BLOCK_END 0x0D7F 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define INDIC_RANGE (INDIC_BLOCK_END - INDIC_BLOCK_BEGIN) 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define VOCALLIC_RR 0x0931 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define LF 0x0A 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ASCII_END 0xA0 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define NO_CHAR_MARKER 0xFFFE 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define TELUGU_DELTA DELTA * TELUGU 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define DEV_ABBR_SIGN 0x0970 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define DEV_ANUDATTA 0x0952 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define EXT_RANGE_BEGIN 0xA1 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define EXT_RANGE_END 0xEE 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define PNJ_DELTA 0x0100 59b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define PNJ_BINDI 0x0A02 60b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define PNJ_TIPPI 0x0A70 61b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define PNJ_SIGN_VIRAMA 0x0A4D 62b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define PNJ_ADHAK 0x0A71 63b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define PNJ_HA 0x0A39 64b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define PNJ_RRA 0x0A5C 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic USet* PNJ_BINDI_TIPPI_SET= NULL; 67b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic USet* PNJ_CONSONANT_SET= NULL; 68b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 69b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querutypedef enum { 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DEVANAGARI =0, 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BENGALI, 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GURMUKHI, 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GUJARATI, 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ORIYA, 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TAMIL, 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TELUGU, 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru KANNADA, 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MALAYALAM, 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DELTA=0x80 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}UniLang; 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Enumeration for switching code pages if <ATR>+<one of below values> 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is encountered 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum { 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DEF = 0x40, 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RMN = 0x41, 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DEV = 0x42, 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BNG = 0x43, 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TML = 0x44, 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TLG = 0x45, 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ASM = 0x46, 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ORI = 0x47, 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru KND = 0x48, 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MLM = 0x49, 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GJR = 0x4A, 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru PNJ = 0x4B, 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ARB = 0x71, 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru PES = 0x72, 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru URD = 0x73, 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SND = 0x74, 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru KSM = 0x75, 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru PST = 0x76 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}ISCIILang; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querutypedef enum { 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DEV_MASK =0x80, 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru PNJ_MASK =0x40, 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GJR_MASK =0x20, 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ORI_MASK =0x10, 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BNG_MASK =0x08, 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru KND_MASK =0x04, 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MLM_MASK =0x02, 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TML_MASK =0x01, 116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ZERO =0x00 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}MaskEnum; 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ISCII_CNV_PREFIX "ISCII,version=" 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querutypedef struct { 122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar contextCharToUnicode; /* previous Unicode codepoint for contextual analysis */ 123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar contextCharFromUnicode; /* previous Unicode codepoint for contextual analysis */ 124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uint16_t defDeltaToUnicode; /* delta for switching to default state when DEF is encountered */ 125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uint16_t currentDeltaFromUnicode; /* current delta in Indic block */ 126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uint16_t currentDeltaToUnicode; /* current delta in Indic block */ 127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MaskEnum currentMaskFromUnicode; /* mask for current state in toUnicode */ 128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MaskEnum currentMaskToUnicode; /* mask for current state in toUnicode */ 129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MaskEnum defMaskToUnicode; /* mask for default state in toUnicode */ 130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool isFirstBuffer; /* boolean for fromUnicode to see if we need to announce the first script */ 131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool resetToDefaultToUnicode; /* boolean for reseting to default delta and mask when a newline is encountered*/ 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char name[sizeof(ISCII_CNV_PREFIX) + 1]; 133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar32 prevToUnicodeStatus; /* Hold the previous toUnicodeStatus. This is necessary because we may need to know the last two code points. */ 134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} UConverterDataISCII; 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querutypedef struct LookupDataStruct { 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UniLang uniLang; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MaskEnum maskEnum; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ISCIILang isciiLang; 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} LookupDataStruct; 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const LookupDataStruct lookupInitialData[]={ 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { DEVANAGARI, DEV_MASK, DEV }, 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { BENGALI, BNG_MASK, BNG }, 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { GURMUKHI, PNJ_MASK, PNJ }, 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { GUJARATI, GJR_MASK, GJR }, 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { ORIYA, ORI_MASK, ORI }, 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { TAMIL, TML_MASK, TML }, 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { TELUGU, KND_MASK, TLG }, 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { KANNADA, KND_MASK, KND }, 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { MALAYALAM, MLM_MASK, MLM } 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void initializeSets() { 155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* TODO: Replace the following two lines with PNJ_CONSONANT_SET = uset_openEmpty(); */ 156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru PNJ_CONSONANT_SET = uset_open(0,0); 157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_clear(PNJ_CONSONANT_SET); 158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_addRange(PNJ_CONSONANT_SET, 0x0A15, 0x0A28); 160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_addRange(PNJ_CONSONANT_SET, 0x0A2A, 0x0A30); 161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_addRange(PNJ_CONSONANT_SET, 0x0A35, 0x0A36); 162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_addRange(PNJ_CONSONANT_SET, 0x0A38, 0x0A39); 163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru PNJ_BINDI_TIPPI_SET = uset_clone(PNJ_CONSONANT_SET); 165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_add(PNJ_BINDI_TIPPI_SET, 0x0A05); 166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_add(PNJ_BINDI_TIPPI_SET, 0x0A07); 167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_add(PNJ_BINDI_TIPPI_SET, 0x0A3F); 168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_addRange(PNJ_BINDI_TIPPI_SET, 0x0A41, 0x0A42); 169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_compact(PNJ_CONSONANT_SET); 171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_compact(PNJ_BINDI_TIPPI_SET); 172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void _ISCIIOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode) { 175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(pArgs->onlyTestIsLoadable) { 176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Ensure that the sets used in special handling of certain Gurmukhi characters are initialized. */ 180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru initializeSets(); 181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru cnv->extraInfo = uprv_malloc(sizeof(UConverterDataISCII)); 183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (cnv->extraInfo != NULL) { 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len=0; 186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UConverterDataISCII *converterData= 187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (UConverterDataISCII *) cnv->extraInfo; 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->contextCharToUnicode=NO_CHAR_MARKER; 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv->toUnicodeStatus = missingCharMarker; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->contextCharFromUnicode=0x0000; 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->resetToDefaultToUnicode=FALSE; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* check if the version requested is supported */ 193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((pArgs->options & UCNV_OPTIONS_VERSION_MASK) < 9) { 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* initialize state variables */ 195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru converterData->currentDeltaFromUnicode 196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru = converterData->currentDeltaToUnicode 197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru = converterData->defDeltaToUnicode = (uint16_t)(lookupInitialData[pArgs->options & UCNV_OPTIONS_VERSION_MASK].uniLang * DELTA); 198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru converterData->currentMaskFromUnicode 200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru = converterData->currentMaskToUnicode 201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru = converterData->defMaskToUnicode = lookupInitialData[pArgs->options & UCNV_OPTIONS_VERSION_MASK].maskEnum; 202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->isFirstBuffer=TRUE; 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (void)uprv_strcpy(converterData->name, ISCII_CNV_PREFIX); 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = (int32_t)uprv_strlen(converterData->name); 206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru converterData->name[len]= (char)((pArgs->options & UCNV_OPTIONS_VERSION_MASK) + '0'); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->name[len+1]=0; 208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru converterData->prevToUnicodeStatus = 0x0000; 210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_free(cnv->extraInfo); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv->extraInfo = NULL; 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *errorCode = U_ILLEGAL_ARGUMENT_ERROR; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *errorCode =U_MEMORY_ALLOCATION_ERROR; 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void _ISCIIClose(UConverter *cnv) { 222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (cnv->extraInfo!=NULL) { 223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!cnv->isExtraLocal) { 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_free(cnv->extraInfo); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv->extraInfo=NULL; 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (PNJ_CONSONANT_SET != NULL) { 229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_close(PNJ_CONSONANT_SET); 230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru PNJ_CONSONANT_SET = NULL; 231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (PNJ_BINDI_TIPPI_SET != NULL) { 233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uset_close(PNJ_BINDI_TIPPI_SET); 234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru PNJ_BINDI_TIPPI_SET = NULL; 235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const char* _ISCIIgetName(const UConverter* cnv) { 239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (cnv->extraInfo) { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverterDataISCII* myData= (UConverterDataISCII*)cnv->extraInfo; 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return myData->name; 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void _ISCIIReset(UConverter *cnv, UConverterResetChoice choice) { 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverterDataISCII* data =(UConverterDataISCII *) (cnv->extraInfo); 248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (choice<=UCNV_RESET_TO_UNICODE) { 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv->toUnicodeStatus = missingCharMarker; 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv->mode=0; 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->currentDeltaToUnicode=data->defDeltaToUnicode; 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->currentMaskToUnicode = data->defMaskToUnicode; 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->contextCharToUnicode=NO_CHAR_MARKER; 254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->prevToUnicodeStatus = 0x0000; 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (choice!=UCNV_RESET_TO_UNICODE) { 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv->fromUChar32=0x0000; 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->contextCharFromUnicode=0x00; 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->currentMaskFromUnicode=data->defMaskToUnicode; 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->currentDeltaFromUnicode=data->defDeltaToUnicode; 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->isFirstBuffer=TRUE; 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->resetToDefaultToUnicode=FALSE; 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The values in validity table are indexed by the lower bits of Unicode 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * range 0x0900 - 0x09ff. The values have a structure like: 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * --------------------------------------------------------------- 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * | DEV | PNJ | GJR | ORI | BNG | TLG | MLM | TML | 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * | | | | | ASM | KND | | | 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * --------------------------------------------------------------- 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If a code point is valid in a particular script 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * then that bit is turned on 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Unicode does not distinguish between Bengali and Assamese so we use 1 bit for 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to represent these languages 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Telugu and Kannada have same codepoints except for Vocallic_RR which we special case 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and combine and use 1 bit to represent these languages. 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TODO: It is probably easier to understand and maintain to change this 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to use uint16_t and give each of the 9 Unicode/script blocks its own bit. 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const uint8_t validityTable[128] = { 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* This state table is tool generated please do not edit unless you know exactly what you are doing */ 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Note: This table was edited to mirror the Windows XP implementation */ 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*ISCII:Valid:Unicode */ 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa0 : 0x00: 0x900 */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa1 : 0xb8: 0x901 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO , 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa2 : 0xfe: 0x902 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa3 : 0xbf: 0x903 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x904 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa4 : 0xff: 0x905 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa5 : 0xff: 0x906 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa6 : 0xff: 0x907 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa7 : 0xff: 0x908 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa8 : 0xff: 0x909 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xa9 : 0xff: 0x90a */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xaa : 0xfe: 0x90b */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x90c */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xae : 0x80: 0x90d */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xab : 0x87: 0x90e */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK , 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xac : 0xff: 0x90f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xad : 0xff: 0x910 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb2 : 0x80: 0x911 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xaf : 0x87: 0x912 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK , 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb0 : 0xff: 0x913 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb1 : 0xff: 0x914 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb3 : 0xff: 0x915 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb4 : 0xfe: 0x916 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb5 : 0xfe: 0x917 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb6 : 0xfe: 0x918 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb7 : 0xff: 0x919 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb8 : 0xff: 0x91a */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xb9 : 0xfe: 0x91b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xba : 0xff: 0x91c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xbb : 0xfe: 0x91d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xbc : 0xff: 0x91e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xbd : 0xff: 0x91f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xbe : 0xfe: 0x920 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xbf : 0xfe: 0x921 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc0 : 0xfe: 0x922 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc1 : 0xff: 0x923 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc2 : 0xff: 0x924 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc3 : 0xfe: 0x925 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc4 : 0xfe: 0x926 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc5 : 0xfe: 0x927 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc6 : 0xff: 0x928 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc7 : 0x81: 0x929 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + TML_MASK , 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc8 : 0xff: 0x92a */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xc9 : 0xfe: 0x92b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xca : 0xfe: 0x92c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xcb : 0xfe: 0x92d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xcc : 0xfe: 0x92e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xcd : 0xff: 0x92f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xcf : 0xff: 0x930 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 339c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru/*0xd0 : 0x87: 0x931 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + MLM_MASK + TML_MASK , 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xd1 : 0xff: 0x932 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xd2 : 0xb7: 0x933 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + ZERO + KND_MASK + MLM_MASK + TML_MASK , 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xd3 : 0x83: 0x934 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + MLM_MASK + TML_MASK , 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xd4 : 0xff: 0x935 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + ZERO + KND_MASK + MLM_MASK + TML_MASK , 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xd5 : 0xfe: 0x936 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xd6 : 0xbf: 0x937 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xd7 : 0xff: 0x938 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xd8 : 0xff: 0x939 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x93A */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x93B */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe9 : 0xda: 0x93c */ DEV_MASK + PNJ_MASK + ZERO + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO , 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x93d */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xda : 0xff: 0x93e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xdb : 0xff: 0x93f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xdc : 0xff: 0x940 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xdd : 0xff: 0x941 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xde : 0xff: 0x942 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xdf : 0xbe: 0x943 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x944 */ DEV_MASK + ZERO + GJR_MASK + ZERO + BNG_MASK + KND_MASK + ZERO + ZERO , 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe3 : 0x80: 0x945 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe0 : 0x87: 0x946 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK , 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe1 : 0xff: 0x947 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe2 : 0xff: 0x948 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe7 : 0x80: 0x949 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe4 : 0x87: 0x94a */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK , 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe5 : 0xff: 0x94b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe6 : 0xff: 0x94c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xe8 : 0xff: 0x94d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xec : 0x00: 0x94e */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xed : 0x00: 0x94f */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x950 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x951 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x952 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x953 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x954 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x955 */ ZERO + ZERO + ZERO + ZERO + ZERO + KND_MASK + ZERO + ZERO , 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x956 */ ZERO + ZERO + ZERO + ORI_MASK + ZERO + KND_MASK + ZERO + ZERO , 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x957 */ ZERO + ZERO + ZERO + ORI_MASK + BNG_MASK + ZERO + MLM_MASK + ZERO , 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x958 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x959 */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x95a */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x95b */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x95c */ DEV_MASK + PNJ_MASK + ZERO + ZERO + BNG_MASK + ZERO + ZERO + ZERO , 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x95d */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO , 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x95e */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xce : 0x98: 0x95f */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO , 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x960 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x961 */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x962 */ DEV_MASK + ZERO + ZERO + ZERO + BNG_MASK + ZERO + ZERO + ZERO , 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x963 */ DEV_MASK + ZERO + ZERO + ZERO + BNG_MASK + ZERO + ZERO + ZERO , 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xea : 0xf8: 0x964 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xeaea : 0x00: 0x965*/ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xf1 : 0xff: 0x966 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xf2 : 0xff: 0x967 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xf3 : 0xff: 0x968 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xf4 : 0xff: 0x969 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xf5 : 0xff: 0x96a */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xf6 : 0xff: 0x96b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xf7 : 0xff: 0x96c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xf8 : 0xff: 0x96d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xf9 : 0xff: 0x96e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0xfa : 0xff: 0x96f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x80: 0x970 */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The length of the array is 128 to provide values for 0x900..0x97f. 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The last 15 entries for 0x971..0x97f of the validity table are all zero 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * because no Indic script uses such Unicode code points. 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*0x00 : 0x00: 0x9yz */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const uint16_t fromUnicodeTable[128]={ 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a0 ,/* 0x0900 */ 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a1 ,/* 0x0901 */ 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a2 ,/* 0x0902 */ 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a3 ,/* 0x0903 */ 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xa4e0 ,/* 0x0904 */ 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a4 ,/* 0x0905 */ 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a5 ,/* 0x0906 */ 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a6 ,/* 0x0907 */ 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a7 ,/* 0x0908 */ 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a8 ,/* 0x0909 */ 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00a9 ,/* 0x090a */ 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00aa ,/* 0x090b */ 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xA6E9 ,/* 0x090c */ 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ae ,/* 0x090d */ 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ab ,/* 0x090e */ 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ac ,/* 0x090f */ 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ad ,/* 0x0910 */ 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b2 ,/* 0x0911 */ 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00af ,/* 0x0912 */ 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b0 ,/* 0x0913 */ 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b1 ,/* 0x0914 */ 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b3 ,/* 0x0915 */ 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b4 ,/* 0x0916 */ 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b5 ,/* 0x0917 */ 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b6 ,/* 0x0918 */ 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b7 ,/* 0x0919 */ 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b8 ,/* 0x091a */ 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00b9 ,/* 0x091b */ 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ba ,/* 0x091c */ 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00bb ,/* 0x091d */ 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00bc ,/* 0x091e */ 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00bd ,/* 0x091f */ 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00be ,/* 0x0920 */ 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00bf ,/* 0x0921 */ 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c0 ,/* 0x0922 */ 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c1 ,/* 0x0923 */ 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c2 ,/* 0x0924 */ 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c3 ,/* 0x0925 */ 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c4 ,/* 0x0926 */ 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c5 ,/* 0x0927 */ 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c6 ,/* 0x0928 */ 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c7 ,/* 0x0929 */ 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c8 ,/* 0x092a */ 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00c9 ,/* 0x092b */ 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ca ,/* 0x092c */ 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00cb ,/* 0x092d */ 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00cc ,/* 0x092e */ 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00cd ,/* 0x092f */ 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00cf ,/* 0x0930 */ 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00d0 ,/* 0x0931 */ 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00d1 ,/* 0x0932 */ 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00d2 ,/* 0x0933 */ 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00d3 ,/* 0x0934 */ 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00d4 ,/* 0x0935 */ 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00d5 ,/* 0x0936 */ 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00d6 ,/* 0x0937 */ 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00d7 ,/* 0x0938 */ 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00d8 ,/* 0x0939 */ 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x093A */ 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x093B */ 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e9 ,/* 0x093c */ 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xEAE9 ,/* 0x093d */ 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00da ,/* 0x093e */ 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00db ,/* 0x093f */ 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00dc ,/* 0x0940 */ 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00dd ,/* 0x0941 */ 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00de ,/* 0x0942 */ 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00df ,/* 0x0943 */ 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xDFE9 ,/* 0x0944 */ 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e3 ,/* 0x0945 */ 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e0 ,/* 0x0946 */ 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e1 ,/* 0x0947 */ 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e2 ,/* 0x0948 */ 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e7 ,/* 0x0949 */ 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e4 ,/* 0x094a */ 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e5 ,/* 0x094b */ 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e6 ,/* 0x094c */ 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00e8 ,/* 0x094d */ 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ec ,/* 0x094e */ 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ed ,/* 0x094f */ 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xA1E9 ,/* 0x0950 */ /* OM Symbol */ 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0951 */ 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xF0B8 ,/* 0x0952 */ 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0953 */ 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0954 */ 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0955 */ 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0956 */ 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0957 */ 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xb3e9 ,/* 0x0958 */ 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xb4e9 ,/* 0x0959 */ 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xb5e9 ,/* 0x095a */ 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xbae9 ,/* 0x095b */ 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xbfe9 ,/* 0x095c */ 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC0E9 ,/* 0x095d */ 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xc9e9 ,/* 0x095e */ 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ce ,/* 0x095f */ 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xAAe9 ,/* 0x0960 */ 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xA7E9 ,/* 0x0961 */ 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xDBE9 ,/* 0x0962 */ 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xDCE9 ,/* 0x0963 */ 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00ea ,/* 0x0964 */ 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xeaea ,/* 0x0965 */ 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00f1 ,/* 0x0966 */ 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00f2 ,/* 0x0967 */ 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00f3 ,/* 0x0968 */ 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00f4 ,/* 0x0969 */ 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00f5 ,/* 0x096a */ 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00f6 ,/* 0x096b */ 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00f7 ,/* 0x096c */ 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00f8 ,/* 0x096d */ 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00f9 ,/* 0x096e */ 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00fa ,/* 0x096f */ 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xF0BF ,/* 0x0970 */ 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0971 */ 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0972 */ 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0973 */ 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0974 */ 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0975 */ 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0976 */ 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0977 */ 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0978 */ 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x0979 */ 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x097a */ 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x097b */ 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x097c */ 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x097d */ 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x097e */ 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF ,/* 0x097f */ 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const uint16_t toUnicodeTable[256]={ 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000,/* 0x00 */ 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0001,/* 0x01 */ 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0002,/* 0x02 */ 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0003,/* 0x03 */ 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0004,/* 0x04 */ 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0005,/* 0x05 */ 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0006,/* 0x06 */ 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0007,/* 0x07 */ 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0008,/* 0x08 */ 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0009,/* 0x09 */ 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x000a,/* 0x0a */ 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x000b,/* 0x0b */ 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x000c,/* 0x0c */ 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x000d,/* 0x0d */ 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x000e,/* 0x0e */ 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x000f,/* 0x0f */ 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0010,/* 0x10 */ 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0011,/* 0x11 */ 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0012,/* 0x12 */ 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0013,/* 0x13 */ 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0014,/* 0x14 */ 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0015,/* 0x15 */ 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0016,/* 0x16 */ 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0017,/* 0x17 */ 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0018,/* 0x18 */ 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0019,/* 0x19 */ 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x001a,/* 0x1a */ 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x001b,/* 0x1b */ 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x001c,/* 0x1c */ 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x001d,/* 0x1d */ 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x001e,/* 0x1e */ 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x001f,/* 0x1f */ 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0020,/* 0x20 */ 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0021,/* 0x21 */ 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0022,/* 0x22 */ 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0023,/* 0x23 */ 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0024,/* 0x24 */ 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0025,/* 0x25 */ 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0026,/* 0x26 */ 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0027,/* 0x27 */ 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0028,/* 0x28 */ 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0029,/* 0x29 */ 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002a,/* 0x2a */ 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002b,/* 0x2b */ 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002c,/* 0x2c */ 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002d,/* 0x2d */ 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e,/* 0x2e */ 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002f,/* 0x2f */ 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0030,/* 0x30 */ 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0031,/* 0x31 */ 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0032,/* 0x32 */ 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0033,/* 0x33 */ 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0034,/* 0x34 */ 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0035,/* 0x35 */ 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0036,/* 0x36 */ 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0037,/* 0x37 */ 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0038,/* 0x38 */ 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0039,/* 0x39 */ 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x003A,/* 0x3A */ 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x003B,/* 0x3B */ 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x003c,/* 0x3c */ 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x003d,/* 0x3d */ 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x003e,/* 0x3e */ 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x003f,/* 0x3f */ 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0040,/* 0x40 */ 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0041,/* 0x41 */ 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0042,/* 0x42 */ 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0043,/* 0x43 */ 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0044,/* 0x44 */ 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0045,/* 0x45 */ 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0046,/* 0x46 */ 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0047,/* 0x47 */ 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0048,/* 0x48 */ 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0049,/* 0x49 */ 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004a,/* 0x4a */ 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004b,/* 0x4b */ 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004c,/* 0x4c */ 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004d,/* 0x4d */ 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004e,/* 0x4e */ 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004f,/* 0x4f */ 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0050,/* 0x50 */ 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0051,/* 0x51 */ 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0052,/* 0x52 */ 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0053,/* 0x53 */ 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0054,/* 0x54 */ 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0055,/* 0x55 */ 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0056,/* 0x56 */ 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0057,/* 0x57 */ 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0058,/* 0x58 */ 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0059,/* 0x59 */ 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x005a,/* 0x5a */ 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x005b,/* 0x5b */ 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x005c,/* 0x5c */ 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x005d,/* 0x5d */ 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x005e,/* 0x5e */ 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x005f,/* 0x5f */ 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0060,/* 0x60 */ 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0061,/* 0x61 */ 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0062,/* 0x62 */ 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0063,/* 0x63 */ 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0064,/* 0x64 */ 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0065,/* 0x65 */ 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0066,/* 0x66 */ 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0067,/* 0x67 */ 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0068,/* 0x68 */ 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0069,/* 0x69 */ 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x006a,/* 0x6a */ 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x006b,/* 0x6b */ 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x006c,/* 0x6c */ 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x006d,/* 0x6d */ 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x006e,/* 0x6e */ 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x006f,/* 0x6f */ 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0070,/* 0x70 */ 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0071,/* 0x71 */ 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0072,/* 0x72 */ 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0073,/* 0x73 */ 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0074,/* 0x74 */ 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0075,/* 0x75 */ 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0076,/* 0x76 */ 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077,/* 0x77 */ 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0078,/* 0x78 */ 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0079,/* 0x79 */ 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x007a,/* 0x7a */ 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x007b,/* 0x7b */ 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x007c,/* 0x7c */ 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x007d,/* 0x7d */ 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x007e,/* 0x7e */ 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x007f,/* 0x7f */ 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0080,/* 0x80 */ 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0081,/* 0x81 */ 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0082,/* 0x82 */ 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0083,/* 0x83 */ 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0084,/* 0x84 */ 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0085,/* 0x85 */ 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0086,/* 0x86 */ 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0087,/* 0x87 */ 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0088,/* 0x88 */ 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0089,/* 0x89 */ 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x008a,/* 0x8a */ 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x008b,/* 0x8b */ 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x008c,/* 0x8c */ 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x008d,/* 0x8d */ 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x008e,/* 0x8e */ 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x008f,/* 0x8f */ 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0090,/* 0x90 */ 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0091,/* 0x91 */ 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0092,/* 0x92 */ 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0093,/* 0x93 */ 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0094,/* 0x94 */ 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0095,/* 0x95 */ 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0096,/* 0x96 */ 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0097,/* 0x97 */ 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0098,/* 0x98 */ 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0099,/* 0x99 */ 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x009a,/* 0x9a */ 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x009b,/* 0x9b */ 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x009c,/* 0x9c */ 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x009d,/* 0x9d */ 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x009e,/* 0x9e */ 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x009f,/* 0x9f */ 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x00A0,/* 0xa0 */ 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0901,/* 0xa1 */ 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0902,/* 0xa2 */ 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0903,/* 0xa3 */ 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0905,/* 0xa4 */ 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0906,/* 0xa5 */ 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0907,/* 0xa6 */ 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0908,/* 0xa7 */ 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0909,/* 0xa8 */ 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x090a,/* 0xa9 */ 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x090b,/* 0xaa */ 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x090e,/* 0xab */ 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x090f,/* 0xac */ 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0910,/* 0xad */ 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x090d,/* 0xae */ 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0912,/* 0xaf */ 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0913,/* 0xb0 */ 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0914,/* 0xb1 */ 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0911,/* 0xb2 */ 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0915,/* 0xb3 */ 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0916,/* 0xb4 */ 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0917,/* 0xb5 */ 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0918,/* 0xb6 */ 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0919,/* 0xb7 */ 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x091a,/* 0xb8 */ 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x091b,/* 0xb9 */ 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x091c,/* 0xba */ 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x091d,/* 0xbb */ 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x091e,/* 0xbc */ 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x091f,/* 0xbd */ 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0920,/* 0xbe */ 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0921,/* 0xbf */ 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0922,/* 0xc0 */ 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0923,/* 0xc1 */ 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0924,/* 0xc2 */ 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0925,/* 0xc3 */ 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0926,/* 0xc4 */ 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0927,/* 0xc5 */ 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0928,/* 0xc6 */ 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0929,/* 0xc7 */ 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x092a,/* 0xc8 */ 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x092b,/* 0xc9 */ 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x092c,/* 0xca */ 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x092d,/* 0xcb */ 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x092e,/* 0xcc */ 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x092f,/* 0xcd */ 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x095f,/* 0xce */ 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0930,/* 0xcf */ 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0931,/* 0xd0 */ 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0932,/* 0xd1 */ 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0933,/* 0xd2 */ 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0934,/* 0xd3 */ 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0935,/* 0xd4 */ 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0936,/* 0xd5 */ 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0937,/* 0xd6 */ 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0938,/* 0xd7 */ 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0939,/* 0xd8 */ 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x200D,/* 0xd9 */ 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x093e,/* 0xda */ 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x093f,/* 0xdb */ 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0940,/* 0xdc */ 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0941,/* 0xdd */ 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0942,/* 0xde */ 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0943,/* 0xdf */ 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0946,/* 0xe0 */ 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0947,/* 0xe1 */ 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0948,/* 0xe2 */ 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0945,/* 0xe3 */ 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x094a,/* 0xe4 */ 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x094b,/* 0xe5 */ 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x094c,/* 0xe6 */ 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0949,/* 0xe7 */ 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x094d,/* 0xe8 */ 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x093c,/* 0xe9 */ 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0964,/* 0xea */ 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xeb */ 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xec */ 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xed */ 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xee */ 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xef */ 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xf0 */ 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0966,/* 0xf1 */ 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0967,/* 0xf2 */ 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0968,/* 0xf3 */ 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0969,/* 0xf4 */ 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x096a,/* 0xf5 */ 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x096b,/* 0xf6 */ 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x096c,/* 0xf7 */ 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x096d,/* 0xf8 */ 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x096e,/* 0xf9 */ 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x096f,/* 0xfa */ 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xfb */ 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xfc */ 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xfd */ 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF,/* 0xfe */ 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFFFF /* 0xff */ 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const uint16_t vowelSignESpecialCases[][2]={ 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 2 /*length of array*/ , 0 }, 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xA4 , 0x0904 }, 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const uint16_t nuktaSpecialCases[][2]={ 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 16 /*length of array*/ , 0 }, 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xA6 , 0x090c }, 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xEA , 0x093D }, 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xDF , 0x0944 }, 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xA1 , 0x0950 }, 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xb3 , 0x0958 }, 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xb4 , 0x0959 }, 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xb5 , 0x095a }, 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xba , 0x095b }, 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xbf , 0x095c }, 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xC0 , 0x095d }, 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xc9 , 0x095e }, 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xAA , 0x0960 }, 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xA7 , 0x0961 }, 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xDB , 0x0962 }, 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0xDC , 0x0963 }, 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,targetByteUnit,err){ \ 826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t offset = (int32_t)(source - args->source-1); \ 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* write the targetUniChar to target */ \ 828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(target < targetLimit){ \ 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(targetByteUnit <= 0xFF){ \ 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *(target)++ = (uint8_t)(targetByteUnit); \ 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(offsets){ \ 832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *(offsets++) = offset; \ 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ \ 835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (targetByteUnit > 0xFFFF) { \ 836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *(target)++ = (uint8_t)(targetByteUnit>>16); \ 837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (offsets) { \ 838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru --offset; \ 839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *(offsets++) = offset; \ 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } \ 842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!(target < targetLimit)) { \ 843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ 844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (uint8_t)(targetByteUnit >> 8); \ 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ 846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (uint8_t)targetByteUnit; \ 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err = U_BUFFER_OVERFLOW_ERROR; \ 848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { \ 849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *(target)++ = (uint8_t)(targetByteUnit>>8); \ 850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(offsets){ \ 851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *(offsets++) = offset; \ 852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } \ 853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(target < targetLimit){ \ 854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *(target)++ = (uint8_t) targetByteUnit; \ 855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(offsets){ \ 856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *(offsets++) = offset ; \ 857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } \ 858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }else{ \ 859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] =\ 860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (uint8_t) (targetByteUnit); \ 861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *err = U_BUFFER_OVERFLOW_ERROR; \ 862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } \ 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ \ 866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (targetByteUnit & 0xFF0000) { \ 867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ 868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (uint8_t) (targetByteUnit >>16); \ 869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } \ 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(targetByteUnit & 0xFF00){ \ 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (uint8_t) (targetByteUnit >>8); \ 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (uint8_t) (targetByteUnit); \ 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err = U_BUFFER_OVERFLOW_ERROR; \ 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Rules: 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Explicit Halant : 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <HALANT> + <ZWNJ> 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Soft Halant : 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <HALANT> + <ZWJ> 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void UConverter_fromUnicode_ISCII_OFFSETS_LOGIC( 888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UConverterFromUnicodeArgs * args, UErrorCode * err) { 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *source = args->source; 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *sourceLimit = args->sourceLimit; 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unsigned char *target = (unsigned char *) args->target; 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unsigned char *targetLimit = (unsigned char *) args->targetLimit; 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t* offsets = args->offsets; 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t targetByteUnit = 0x0000; 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 sourceChar = 0x0000; 896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar32 tempContextFromUnicode = 0x0000; /* For special handling of the Gurmukhi script. */ 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverterDataISCII *converterData; 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint16_t newDelta=0; 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint16_t range = 0; 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool deltaChanged = FALSE; 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((args->converter == NULL) || (args->targetLimit < args->target) || (args->sourceLimit < args->source)) { 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err = U_ILLEGAL_ARGUMENT_ERROR; 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* initialize data */ 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData=(UConverterDataISCII*)args->converter->extraInfo; 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru newDelta=converterData->currentDeltaFromUnicode; 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru range = (uint16_t)(newDelta/DELTA); 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((sourceChar = args->converter->fromUChar32)!=0) { 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto getTrail; 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*writing the char to the output stream */ 916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru while (source < sourceLimit) { 917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Write the language code following LF only if LF is not the last character. */ 918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (args->converter->fromUnicodeStatus == LF) { 919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru targetByteUnit = ATR<<8; 920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru targetByteUnit += (uint8_t) lookupInitialData[range].isciiLang; 921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru args->converter->fromUnicodeStatus = 0x0000; 922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* now append ATR and language code */ 923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,targetByteUnit,err); 924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(*err)) { 925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sourceChar = *source++; 930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru tempContextFromUnicode = converterData->contextCharFromUnicode; 931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru targetByteUnit = missingCharMarker; 933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*check if input is in ASCII and C0 control codes range*/ 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (sourceChar <= ASCII_END) { 936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru args->converter->fromUnicodeStatus = sourceChar; 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,sourceChar,err); 938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(*err)) { 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru switch (sourceChar) { 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case ZWNJ: 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* contextChar has HALANT */ 946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (converterData->contextCharFromUnicode) { 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->contextCharFromUnicode = 0x00; 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetByteUnit = ISCII_HALANT; 949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* consume ZWNJ and continue */ 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->contextCharFromUnicode = 0x00; 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case ZWJ: 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* contextChar has HALANT */ 957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (converterData->contextCharFromUnicode) { 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetByteUnit = ISCII_NUKTA; 959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetByteUnit =ISCII_INV; 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->contextCharFromUnicode = 0x00; 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru default: 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* is the sourceChar in the INDIC_RANGE? */ 966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((uint16_t)(INDIC_BLOCK_END-sourceChar) <= INDIC_RANGE) { 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Danda and Double Danda are valid in Northern scripts.. since Unicode 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * does not include these codepoints in all Northern scrips we need to 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * filter them out 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (sourceChar!= DANDA && sourceChar != DOUBLE_DANDA) { 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* find out to which block the souceChar belongs*/ 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru range =(uint16_t)((sourceChar-INDIC_BLOCK_BEGIN)/DELTA); 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru newDelta =(uint16_t)(range*DELTA); 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Now are we in the same block as the previous? */ 977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (newDelta!= converterData->currentDeltaFromUnicode || converterData->isFirstBuffer) { 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->currentDeltaFromUnicode = newDelta; 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->currentMaskFromUnicode = lookupInitialData[range].maskEnum; 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru deltaChanged =TRUE; 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->isFirstBuffer=FALSE; 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (converterData->currentDeltaFromUnicode == PNJ_DELTA) { 985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (sourceChar == PNJ_TIPPI) { 986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Make sure Tippi is converterd to Bindi. */ 987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sourceChar = PNJ_BINDI; 988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (sourceChar == PNJ_ADHAK) { 989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* This is for consonant cluster handling. */ 990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru converterData->contextCharFromUnicode = PNJ_ADHAK; 991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Normalize all Indic codepoints to Devanagari and map them to ISCII */ 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* now subtract the new delta from sourceChar*/ 996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sourceChar -= converterData->currentDeltaFromUnicode; 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* get the target byte unit */ 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetByteUnit=fromUnicodeTable[(uint8_t)sourceChar]; 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* is the code point valid in current script? */ 1003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((validityTable[(uint8_t)sourceChar] & converterData->currentMaskFromUnicode)==0) { 1004c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* Vocallic RR is assigned in ISCII Telugu and Unicode */ 1005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (converterData->currentDeltaFromUnicode!=(TELUGU_DELTA) || sourceChar!=VOCALLIC_RR) { 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetByteUnit=missingCharMarker; 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (deltaChanged) { 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* we are in a script block which is different than 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * previous sourceChar's script block write ATR and language codes 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uint32_t temp=0; 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp =(uint16_t)(ATR<<8); 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp += (uint16_t)((uint8_t) lookupInitialData[range].isciiLang); 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* reset */ 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru deltaChanged=FALSE; 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* now append ATR and language code */ 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,temp,err); 1021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(*err)) { 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (converterData->currentDeltaFromUnicode == PNJ_DELTA && (sourceChar + PNJ_DELTA) == PNJ_ADHAK) { 1027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 1028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* reset context char */ 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->contextCharFromUnicode = 0x00; 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (converterData->currentDeltaFromUnicode == PNJ_DELTA && tempContextFromUnicode == PNJ_ADHAK && uset_contains(PNJ_CONSONANT_SET, (sourceChar + PNJ_DELTA))) { 1035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* If the previous codepoint is Adhak and the current codepoint is a consonant, the targetByteUnit should be C + Halant + C. */ 1036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* reset context char */ 1037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru converterData->contextCharFromUnicode = 0x0000; 1038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru targetByteUnit = targetByteUnit << 16 | ISCII_HALANT << 8 | targetByteUnit; 1039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* write targetByteUnit to target */ 1040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_FROM_U(args, offsets, source, target, targetLimit, targetByteUnit,err); 1041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(*err)) { 1042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 1043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (targetByteUnit != missingCharMarker) { 1045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (targetByteUnit==ISCII_HALANT) { 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru converterData->contextCharFromUnicode = (UChar)targetByteUnit; 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* write targetByteUnit to target*/ 1049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,targetByteUnit,err); 1050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(*err)) { 1051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 1052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* oops.. the code point is unassigned */ 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*check if the char is a First surrogate*/ 1056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (UTF_IS_SURROGATE(sourceChar)) { 1057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (UTF_IS_SURROGATE_FIRST(sourceChar)) { 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerugetTrail: 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*look ahead to find the trail surrogate*/ 1060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (source < sourceLimit) { 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test the following code unit */ 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar trail= (*source); 1063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (UTF_IS_SECOND_SURROGATE(trail)) { 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source++; 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sourceChar=UTF16_GET_PAIR_VALUE(sourceChar, trail); 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err =U_INVALID_CHAR_FOUND; 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* convert this surrogate code point */ 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* exit this condition tree */ 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is an unmatched lead code unit (1st surrogate) */ 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* callback(illegal) */ 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err=U_ILLEGAL_CHAR_FOUND; 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* no more input */ 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err = U_ZERO_ERROR; 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is an unmatched trail code unit (2nd surrogate) */ 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* callback(illegal) */ 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err=U_ILLEGAL_CHAR_FOUND; 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* callback(unassigned) for a BMP code point */ 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err = U_INVALID_CHAR_FOUND; 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->converter->fromUChar32=sourceChar; 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }/* end while(mySourceIndex<mySourceLength) */ 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*save the state and return */ 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->source = source; 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->target = (char*)target; 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1098c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic const uint16_t lookupTable[][2]={ 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { ZERO, ZERO }, /*DEFALT*/ 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { ZERO, ZERO }, /*ROMAN*/ 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { DEVANAGARI, DEV_MASK }, 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { BENGALI, BNG_MASK }, 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { TAMIL, TML_MASK }, 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { TELUGU, KND_MASK }, 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { BENGALI, BNG_MASK }, 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { ORIYA, ORI_MASK }, 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { KANNADA, KND_MASK }, 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { MALAYALAM, MLM_MASK }, 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { GUJARATI, GJR_MASK }, 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { GURMUKHI, PNJ_MASK } 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define WRITE_TO_TARGET_TO_U(args,source,target,offsets,offset,targetUniChar,delta, err){\ 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add offset to current Indic Block */ \ 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(targetUniChar>ASCII_END && \ 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar != ZWJ && \ 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar != ZWNJ && \ 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar != DANDA && \ 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar != DOUBLE_DANDA){ \ 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru \ 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar+=(uint16_t)(delta); \ 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* now write the targetUniChar */ \ 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(target<args->targetLimit){ \ 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *(target)++ = (UChar)targetUniChar; \ 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(offsets){ \ 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *(offsets)++ = (int32_t)(offset); \ 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ \ 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->converter->UCharErrorBuffer[args->converter->UCharErrorBufferLength++] = \ 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UChar)targetUniChar; \ 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err = U_BUFFER_OVERFLOW_ERROR; \ 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define GET_MAPPING(sourceChar,targetUniChar,data){ \ 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar = toUnicodeTable[(sourceChar)] ; \ 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* is the code point valid in current script? */ \ 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(sourceChar> ASCII_END && \ 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode)==0){ \ 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Vocallic RR is assigne in ISCII Telugu and Unicode */ \ 1142c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(data->currentDeltaToUnicode!=(TELUGU_DELTA) || \ 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar!=VOCALLIC_RR){ \ 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar=missingCharMarker; \ 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*********** 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Rules for ISCII to Unicode converter 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ISCII is stateful encoding. To convert ISCII bytes to Unicode, 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * which has both precomposed and decomposed forms characters 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * pre-context and post-context need to be considered. 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Post context 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * i) ATR : Attribute code is used to declare the font and script switching. 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Currently we only switch scripts and font codes consumed without generating an error 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ii) EXT : Extention code is used to declare switching to Sanskrit and for obscure, 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * obsolete characters 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Pre context 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * i) Halant: if preceeded by a halant then it is a explicit halant 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ii) Nukta : 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a) if preceeded by a halant then it is a soft halant 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * b) if preceeded by specific consonants and the ligatures have pre-composed 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * characters in Unicode then convert to pre-composed characters 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * iii) Danda: If Danda is preceeded by a Danda then convert to Double Danda 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCode* err) { 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *source = ( char *) args->source; 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *target = args->target; 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *sourceLimit = args->sourceLimit; 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* targetLimit = args->targetLimit; 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t targetUniChar = 0x0000; 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t sourceChar = 0x0000; 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverterDataISCII* data; 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32* toUnicodeStatus=NULL; 1179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar32 tempTargetUniChar = 0x0000; 1180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar* contextCharToUnicode= NULL; 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool found; 1182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int i; 1183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int offset = 0; 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((args->converter == NULL) || (target < args->target) || (source < args->source)) { 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err = U_ILLEGAL_ARGUMENT_ERROR; 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data = (UConverterDataISCII*)(args->converter->extraInfo); 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru contextCharToUnicode = &data->contextCharToUnicode; /* contains previous ISCII codepoint visited */ 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toUnicodeStatus = (UChar32*)&args->converter->toUnicodeStatus;/* contains the mapping to Unicode of the above codepoint*/ 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru while (U_SUCCESS(*err) && source<sourceLimit) { 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar = missingCharMarker; 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (target < targetLimit) { 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sourceChar = (unsigned char)*(source)++; 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* look at the post-context preform special processing */ 1202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*contextCharToUnicode==ATR) { 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* If we have ATR in *contextCharToUnicode then we need to change our 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * state to the Indic Script specified by sourceChar 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* check if the sourceChar is supported script range*/ 1209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((uint8_t)(PNJ-sourceChar)<=PNJ-DEV) { 1210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->currentDeltaToUnicode = (uint16_t)(lookupTable[sourceChar & 0x0F][0] * DELTA); 1211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->currentMaskToUnicode = (MaskEnum)lookupTable[sourceChar & 0x0F][1]; 1212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (sourceChar==DEF) { 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* switch back to default */ 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->currentDeltaToUnicode = data->defDeltaToUnicode; 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->currentMaskToUnicode = data->defMaskToUnicode; 1216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((sourceChar >= 0x21 && sourceChar <= 0x3F)) { 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* these are display codes consume and continue */ 1219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err =U_ILLEGAL_CHAR_FOUND; 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* reset */ 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode=NO_CHAR_MARKER; 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto CALLBACK; 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* reset */ 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode=NO_CHAR_MARKER; 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (*contextCharToUnicode==EXT) { 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* check if sourceChar is in 0xA1-0xEE range */ 1234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((uint8_t) (EXT_RANGE_END - sourceChar) <= (EXT_RANGE_END - EXT_RANGE_BEGIN)) { 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We currently support only Anudatta and Devanagari abbreviation sign */ 1236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (sourceChar==0xBF || sourceChar == 0xB8) { 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar = (sourceChar==0xBF) ? DEV_ABBR_SIGN : DEV_ANUDATTA; 1238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* find out if the mapping is valid in this state */ 1240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode) { 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode= NO_CHAR_MARKER; 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ 1244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->prevToUnicodeStatus) { 1245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); 1246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->prevToUnicodeStatus = 0x0000; 1247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* write to target */ 1249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),targetUniChar,data->currentDeltaToUnicode,err); 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* byte unit is unassigned */ 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar = missingCharMarker; 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err= U_INVALID_CHAR_FOUND; 1257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* only 0xA1 - 0xEE are legal after EXT char */ 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode= NO_CHAR_MARKER; 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err = U_ILLEGAL_CHAR_FOUND; 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto CALLBACK; 1263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (*contextCharToUnicode==ISCII_INV) { 1264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (sourceChar==ISCII_HALANT) { 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar = 0x0020; /* replace with space accoding to Indic FAQ */ 1266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar = ZWJ; 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ 1271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->prevToUnicodeStatus) { 1272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); 1273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->prevToUnicodeStatus = 0x0000; 1274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* write to target */ 1276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),targetUniChar,data->currentDeltaToUnicode,err); 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* reset */ 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode=NO_CHAR_MARKER; 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* look at the pre-context and perform special processing */ 1282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru switch (sourceChar) { 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case ISCII_INV: 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case EXT: /*falls through*/ 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case ATR: 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = (UChar)sourceChar; 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*toUnicodeStatus != missingCharMarker) { 1289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ 1290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->prevToUnicodeStatus) { 1291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); 1292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->prevToUnicodeStatus = 0x0000; 1293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),*toUnicodeStatus,data->currentDeltaToUnicode,err); 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *toUnicodeStatus = missingCharMarker; 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case ISCII_DANDA: 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* handle double danda*/ 1300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*contextCharToUnicode== ISCII_DANDA) { 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar = DOUBLE_DANDA; 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* clear the context */ 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = NO_CHAR_MARKER; 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *toUnicodeStatus = missingCharMarker; 1305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_MAPPING(sourceChar,targetUniChar,data); 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = sourceChar; 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case ISCII_HALANT: 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* handle explicit halant */ 1312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*contextCharToUnicode == ISCII_HALANT) { 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar = ZWNJ; 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* clear the context */ 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = NO_CHAR_MARKER; 1316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_MAPPING(sourceChar,targetUniChar,data); 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = sourceChar; 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0x0A: 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fall through */ 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0x0D: 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->resetToDefaultToUnicode = TRUE; 1325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru GET_MAPPING(sourceChar,targetUniChar,data) 1326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ; 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = sourceChar; 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case ISCII_VOWEL_SIGN_E: 1331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru i=1; 1332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru found=FALSE; 1333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (; i<vowelSignESpecialCases[0][0]; i++) { 1334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (vowelSignESpecialCases[i][0]==(uint8_t)*contextCharToUnicode) { 1335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru targetUniChar=vowelSignESpecialCases[i][1]; 1336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru found=TRUE; 1337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 1338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (found) { 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* find out if the mapping is valid in this state */ 1342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode) { 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*targetUniChar += data->currentDeltaToUnicode ;*/ 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode= NO_CHAR_MARKER; 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *toUnicodeStatus = missingCharMarker; 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru GET_MAPPING(sourceChar,targetUniChar,data); 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = sourceChar; 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case ISCII_NUKTA: 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* handle soft halant */ 1355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*contextCharToUnicode == ISCII_HALANT) { 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar = ZWJ; 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* clear the context */ 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = NO_CHAR_MARKER; 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (data->currentDeltaToUnicode == PNJ_DELTA && data->contextCharToUnicode == 0xc0) { 1361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ 1362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->prevToUnicodeStatus) { 1363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); 1364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->prevToUnicodeStatus = 0x0000; 1365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* We got here because ISCII_NUKTA was preceded by 0xc0 and we are converting Gurmukhi. 1367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * In that case we must convert (0xc0 0xe9) to (\u0a5c\u0a4d\u0a39). 1368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 1369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru targetUniChar = PNJ_RRA; 1370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args, source, target, args->offsets, (source-args->source)-2, targetUniChar, 0, err); 1371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_SUCCESS(*err)) { 1372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru targetUniChar = PNJ_SIGN_VIRAMA; 1373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args, source, target, args->offsets, (source-args->source)-2, targetUniChar, 0, err); 1374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_SUCCESS(*err)) { 1375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru targetUniChar = PNJ_HA; 1376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args, source, target, args->offsets, (source-args->source)-2, targetUniChar, 0, err); 1377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru args->converter->UCharErrorBuffer[args->converter->UCharErrorBufferLength++]= PNJ_HA; 1379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru args->converter->UCharErrorBuffer[args->converter->UCharErrorBufferLength++]= PNJ_SIGN_VIRAMA; 1382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru args->converter->UCharErrorBuffer[args->converter->UCharErrorBufferLength++]= PNJ_HA; 1383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *toUnicodeStatus = missingCharMarker; 1385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->contextCharToUnicode = NO_CHAR_MARKER; 1386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 1387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* try to handle <CHAR> + ISCII_NUKTA special mappings */ 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i=1; 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru found =FALSE; 1391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (; i<nuktaSpecialCases[0][0]; i++) { 1392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (nuktaSpecialCases[i][0]==(uint8_t) 1393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *contextCharToUnicode) { 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru targetUniChar=nuktaSpecialCases[i][1]; 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru found =TRUE; 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (found) { 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* find out if the mapping is valid in this state */ 1401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode) { 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*targetUniChar += data->currentDeltaToUnicode ;*/ 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode= NO_CHAR_MARKER; 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *toUnicodeStatus = missingCharMarker; 1405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->currentDeltaToUnicode == PNJ_DELTA) { 1406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ 1407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->prevToUnicodeStatus) { 1408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); 1409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->prevToUnicodeStatus = 0x0000; 1410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),targetUniChar,data->currentDeltaToUnicode,err); 1412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 1413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* else fall through to default */ 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* else fall through to default */ 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru default:GET_MAPPING(sourceChar,targetUniChar,data) 1421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ; 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = sourceChar; 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*toUnicodeStatus != missingCharMarker) { 1427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Check to make sure that consonant clusters are handled correct for Gurmukhi script. */ 1428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->currentDeltaToUnicode == PNJ_DELTA && data->prevToUnicodeStatus != 0 && uset_contains(PNJ_CONSONANT_SET, data->prevToUnicodeStatus) && 1429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (*toUnicodeStatus + PNJ_DELTA) == PNJ_SIGN_VIRAMA && (targetUniChar + PNJ_DELTA) == data->prevToUnicodeStatus) { 1430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Consonant clusters C + HALANT + C should be encoded as ADHAK + C */ 143150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho offset = (int)(source-args->source - 3); 1432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru tempTargetUniChar = PNJ_ADHAK; /* This is necessary to avoid some compiler warnings. */ 1433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,offset,tempTargetUniChar,0,err); 1434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,offset,data->prevToUnicodeStatus,0,err); 1435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->prevToUnicodeStatus = 0x0000; /* reset the previous unicode code point */ 1436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *toUnicodeStatus = missingCharMarker; 1437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 1438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ 1440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->prevToUnicodeStatus) { 1441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); 1442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->prevToUnicodeStatus = 0x0000; 1443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Check to make sure that Bindi and Tippi are handled correctly for Gurmukhi script. 1445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * If 0xA2 is preceded by a codepoint in the PNJ_BINDI_TIPPI_SET then the target codepoint should be Tippi instead of Bindi. 1446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 1447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->currentDeltaToUnicode == PNJ_DELTA && (targetUniChar + PNJ_DELTA) == PNJ_BINDI && uset_contains(PNJ_BINDI_TIPPI_SET, (*toUnicodeStatus + PNJ_DELTA))) { 1448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru targetUniChar = PNJ_TIPPI - PNJ_DELTA; 1449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),*toUnicodeStatus,PNJ_DELTA,err); 1450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (data->currentDeltaToUnicode == PNJ_DELTA && (targetUniChar + PNJ_DELTA) == PNJ_SIGN_VIRAMA && uset_contains(PNJ_CONSONANT_SET, (*toUnicodeStatus + PNJ_DELTA))) { 1451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Store the current toUnicodeStatus code point for later handling of consonant cluster in Gurmukhi. */ 1452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data->prevToUnicodeStatus = *toUnicodeStatus + PNJ_DELTA; 1453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* write the previously mapped codepoint */ 1455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),*toUnicodeStatus,data->currentDeltaToUnicode,err); 1456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *toUnicodeStatus = missingCharMarker; 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (targetUniChar != missingCharMarker) { 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* now save the targetUniChar for delayed write */ 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *toUnicodeStatus = (UChar) targetUniChar; 1464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (data->resetToDefaultToUnicode==TRUE) { 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->currentDeltaToUnicode = data->defDeltaToUnicode; 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->currentMaskToUnicode = data->defMaskToUnicode; 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data->resetToDefaultToUnicode=FALSE; 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* we reach here only if targetUniChar == missingCharMarker 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * so assign codes to reason and err 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err = U_INVALID_CHAR_FOUND; 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCALLBACK: 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->converter->toUBytes[0] = (uint8_t) sourceChar; 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->converter->toULength = 1; 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *err =U_BUFFER_OVERFLOW_ERROR; 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_SUCCESS(*err) && args->flush && source == sourceLimit) { 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* end of the input stream */ 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverter *cnv = args->converter; 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*contextCharToUnicode==ATR || *contextCharToUnicode==EXT || *contextCharToUnicode==ISCII_INV) { 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* set toUBytes[] */ 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv->toUBytes[0] = (uint8_t)*contextCharToUnicode; 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv->toULength = 1; 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* avoid looping on truncated sequences */ 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *contextCharToUnicode = NO_CHAR_MARKER; 1498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv->toULength = 0; 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*toUnicodeStatus != missingCharMarker) { 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* output a remaining target character */ 1504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source - args->source -1),*toUnicodeStatus,data->currentDeltaToUnicode,err); 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *toUnicodeStatus = missingCharMarker; 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->target = target; 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru args->source = source; 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* structure for SafeClone calculations */ 1514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustruct cloneISCIIStruct { 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverter cnv; 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverterDataISCII mydata; 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UConverter * 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru_ISCII_SafeClone(const UConverter *cnv, 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void *stackBuffer, 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t *pBufferSize, 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *status) 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct cloneISCIIStruct * localClone; 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bufferSizeNeeded = sizeof(struct cloneISCIIStruct); 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(*status)) { 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*pBufferSize == 0) { /* 'preflighting' request - set needed size into *pBufferSize */ 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pBufferSize = bufferSizeNeeded; 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localClone = (struct cloneISCIIStruct *)stackBuffer; 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* ucnv.c/ucnv_safeClone() copied the main UConverter already */ 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(&localClone->mydata, cnv->extraInfo, sizeof(UConverterDataISCII)); 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localClone->cnv.extraInfo = &localClone->mydata; 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localClone->cnv.isExtraLocal = TRUE; 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return &localClone->cnv; 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru_ISCIIGetUnicodeSet(const UConverter *cnv, 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const USetAdder *sa, 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverterUnicodeSet which, 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *pErrorCode) 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t idx, script; 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t mask; 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Since all ISCII versions allow switching to other ISCII 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru scripts, we add all roundtrippable characters to this set. */ 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->addRange(sa->set, 0, ASCII_END); 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (script = DEVANAGARI; script <= MALAYALAM; script++) { 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mask = (uint8_t)(lookupInitialData[script].maskEnum); 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (idx = 0; idx < DELTA; idx++) { 1562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* added check for TELUGU character */ 1563c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ((validityTable[idx] & mask) || (script==TELUGU && idx==0x31)) { 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, idx + (script * DELTA) + INDIC_BLOCK_BEGIN); 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, DANDA); 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, DOUBLE_DANDA); 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, ZWNJ); 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, ZWJ); 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UConverterImpl _ISCIIImpl={ 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCNV_ISCII, 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _ISCIIOpen, 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _ISCIIClose, 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _ISCIIReset, 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverter_toUnicode_ISCII_OFFSETS_LOGIC, 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverter_toUnicode_ISCII_OFFSETS_LOGIC, 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverter_fromUnicode_ISCII_OFFSETS_LOGIC, 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverter_fromUnicode_ISCII_OFFSETS_LOGIC, 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _ISCIIgetName, 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _ISCII_SafeClone, 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _ISCIIGetUnicodeSet 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UConverterStaticData _ISCIIStaticData={ 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sizeof(UConverterStaticData), 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ISCII", 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCNV_IBM, 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCNV_ISCII, 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 4, 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0x1a, 0, 0, 0 }, 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x1, 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0, 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0, 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, /* reserved */ 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst UConverterSharedData _ISCIIData={ 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sizeof(UConverterSharedData), 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~((uint32_t) 0), 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &_ISCIIStaticData, 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &_ISCIIImpl, 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_LEGACY_CONVERSION */ 1628