1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copyright (C) 2003-2010, International Business Machines 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * file name: ucm.h 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: 2003jun20 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * created by: Markus W. Scherer 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Definitions for the .ucm file parser and handler module ucm.c. 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef __UCM_H__ 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define __UCM_H__ 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucnvmbcs.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucnv_ext.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "filestrm.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_CONVERSION 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_BEGIN 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* constants for UCMapping.moveFlag */ 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum { 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCM_MOVE_TO_EXT=1, 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCM_REMOVE_MAPPING=2 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Per-mapping data structure 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * u if uLen==1: Unicode code point 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * else index to uLen code points 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * b if bLen<=4: up to 4 bytes 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * else index to bLen bytes 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * uLen number of code points 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * bLen number of words containing left-justified bytes 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * bIsMultipleChars indicates that the bytes contain more than one sequence 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * according to the state table 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * f flag for roundtrip (0), fallback (1), sub mapping (2), reverse fallback (3) 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * same values as in the source file after | 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct UCMapping { 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 u; 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru union { 53b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uint32_t idx; 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t bytes[4]; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } b; 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int8_t uLen, bLen, f, moveFlag; 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UCMapping; 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* constants for UCMTable.flagsType */ 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum { 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCM_FLAGS_INITIAL, /* no mappings parsed yet */ 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCM_FLAGS_EXPLICIT, /* .ucm file has mappings with | fallback indicators */ 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCM_FLAGS_IMPLICIT, /* .ucm file has mappings without | fallback indicators, later wins */ 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCM_FLAGS_MIXED /* both implicit and explicit */ 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct UCMTable { 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCMapping *mappings; 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t mappingsCapacity, mappingsLength; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 *codePoints; 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t codePointsCapacity, codePointsLength; 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t *bytes; 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bytesCapacity, bytesLength; 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* index map for mapping by bytes first */ 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t *reverseMap; 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t unicodeMask; 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int8_t flagsType; /* UCM_FLAGS_INITIAL etc. */ 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isSorted; 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UCMTable; 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum { 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MBCS_STATE_FLAG_DIRECT=1, 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MBCS_STATE_FLAG_SURROGATES, 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MBCS_STATE_FLAG_READY=16 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct UCMStates { 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t stateTable[MBCS_MAX_STATE_COUNT][256]; 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t stateFlags[MBCS_MAX_STATE_COUNT], 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stateOffsetSum[MBCS_MAX_STATE_COUNT]; 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t countStates, minCharLength, maxCharLength, countToUCodeUnits; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int8_t conversionType, outputType; 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UCMStates; 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct UCMFile { 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCMTable *base, *ext; 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCMStates states; 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char baseName[UCNV_MAX_CONVERTER_NAME_LENGTH]; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UCMFile; 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* simple accesses ---------------------------------------------------------- */ 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define UCM_GET_CODE_POINTS(t, m) \ 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (((m)->uLen==1) ? &(m)->u : (t)->codePoints+(m)->u) 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define UCM_GET_BYTES(t, m) \ 114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (((m)->bLen<=4) ? (m)->b.bytes : (t)->bytes+(m)->b.idx) 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* APIs --------------------------------------------------------------------- */ 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UCMFile * U_EXPORT2 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_open(void); 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_close(UCMFile *ucm); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_parseHeaderLine(UCMFile *ucm, 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *line, char **pKey, char **pValue); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* @return -1 illegal bytes 0 suitable for base table 1 needs to go into extension table */ 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_mappingType(UCMStates *baseStates, 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCMapping *m, 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 codePoints[UCNV_EXT_MAX_UCHARS], 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t bytes[UCNV_EXT_MAX_BYTES]); 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* add a mapping to the base or extension table as appropriate */ 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_addMappingAuto(UCMFile *ucm, UBool forBase, UCMStates *baseStates, 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCMapping *m, 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 codePoints[UCNV_EXT_MAX_UCHARS], 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t bytes[UCNV_EXT_MAX_BYTES]); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_addMappingFromLine(UCMFile *ucm, const char *line, UBool forBase, UCMStates *baseStates); 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UCMTable * U_EXPORT2 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_openTable(void); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_closeTable(UCMTable *table); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_resetTable(UCMTable *table); 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_sortTable(UCMTable *t); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Remove mappings with their move flag set from the base table 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and move some of them (with UCM_MOVE_TO_EXT) to the extension table. 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_moveMappings(UCMTable *base, UCMTable *ext); 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Read a table from a .ucm file, from after the CHARMAP line to 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * including the END CHARMAP line. 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_readTable(UCMFile *ucm, FileStream* convFile, 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool forBase, UCMStates *baseStates, 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *pErrorCode); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check the validity of mappings against a base table's states; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * necessary for extension-only tables that were read before their base tables. 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_checkValidity(UCMTable *ext, UCMStates *baseStates); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check a base table against an extension table. 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set the moveTarget!=NULL if it is possible to move mappings from the base. 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This is the case where base and extension tables are parsed from a single file 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (moveTarget==ext) 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * or when delta file mappings are subtracted from a base table. 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When a base table cannot be modified because a delta file is parsed in makeconv, 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * then set moveTarget=NULL. 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * if(intersectBase) then mappings that exist in the base table but not in 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the extension table are moved to moveTarget instead of showing an error. 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Special mode: 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If intersectBase==2 for a DBCS extension table, then SBCS mappings are 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * not moved out of the base unless their Unicode input requires it. 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This helps ucmkbase generate base tables for DBCS-only extension .cnv files. 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * For both tables in the same file, the extension table is automatically 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * built. 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * For separate files, the extension file can use a complete mapping table (.ucm file), 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * so that common mappings need not be stripped out manually. 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Sort both tables, and then for each mapping direction: 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If intersectBase is TRUE and the base table contains a mapping 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * that does not exist in the extension table, then this mapping is moved 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to moveTarget. 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - otherwise - 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If the base table contains a mapping for which the input sequence is 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the same as the extension input, then 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - if the output is the same: remove the extension mapping 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - else: error 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If the base table contains a mapping for which the input sequence is 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a prefix of the extension input, then 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - if moveTarget!=NULL: move the base mapping to the moveTarget table 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - else: error 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return FALSE in case of an irreparable error 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_checkBaseExt(UCMStates *baseStates, UCMTable *base, UCMTable *ext, 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCMTable *moveTarget, UBool intersectBase); 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_printTable(UCMTable *table, FILE *f, UBool byUnicode); 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_printMapping(UCMTable *table, UCMapping *m, FILE *f); 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_addState(UCMStates *states, const char *s); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 24050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoucm_processStates(UCMStates *states, UBool ignoreSISOCheck); 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_countChars(UCMStates *states, 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint8_t *bytes, int32_t length); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int8_t U_EXPORT2 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_parseBytes(uint8_t bytes[UCNV_EXT_MAX_BYTES], const char *line, const char **ps); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_parseMappingLine(UCMapping *m, 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 codePoints[UCNV_EXT_MAX_UCHARS], 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t bytes[UCNV_EXT_MAX_BYTES], 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *line); 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_addMapping(UCMTable *table, 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCMapping *m, 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 codePoints[UCNV_EXT_MAX_UCHARS], 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t bytes[UCNV_EXT_MAX_BYTES]); 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* very makeconv-specific functions ----------------------------------------- */ 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* finalize and optimize states after the toUnicode mappings are processed */ 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_optimizeStates(UCMStates *states, 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint16_t **pUnicodeCodeUnits, 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _MBCSToUFallback *toUFallbacks, int32_t countToUFallbacks, 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool verbose); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* moved here because it is used inside ucmstate.c */ 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_findFallback(_MBCSToUFallback *toUFallbacks, int32_t countToUFallbacks, 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t offset); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* very rptp2ucm-specific functions ----------------------------------------- */ 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Input: Separate tables with mappings from/to Unicode, 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * subchar and subchar1 (0 if none). 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * All mappings must have flag 0. 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Output: fromUTable will contain the union of mappings with the correct 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * precision flags, and be sorted. 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_mergeTables(UCMTable *fromUTable, UCMTable *toUTable, 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint8_t *subchar, int32_t subcharLength, 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t subchar1); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruucm_separateMappings(UCMFile *ucm, UBool isSISO); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_END 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 300