mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-20 20:19:32 +00:00
ICU-267 move static data into makeconv for data based converters, fix initialization during makeconv
X-SVN-Rev: 1198
This commit is contained in:
parent
631d0d7614
commit
fd4d62ffe1
3 changed files with 122 additions and 7 deletions
|
@ -58,7 +58,7 @@ LDFLAGS = @LDFLAGS@ \
|
|||
$(LD_RPATH)$(LD_RPATH_PRE)$(libdir)@ld_rpath_suf@$(LD_RPATH_PRE)$(top_builddir)/common@ld_rpath_suf@$(LD_RPATH_PRE)$(top_builddir)/tools/toolutil
|
||||
LIBS = $(LIBICU-UC) @LIBS@ @LIB_M@ $(LIBICU-TOOLUTIL)
|
||||
|
||||
OBJECTS = makeconv.o
|
||||
OBJECTS = makeconv.o ucnvstat.o
|
||||
|
||||
DEPS = $(OBJECTS:.o=.d)
|
||||
|
||||
|
|
|
@ -31,6 +31,11 @@
|
|||
#include "ucmpwrit.h"
|
||||
|
||||
|
||||
/*
|
||||
* from ucnvstat.c - static prototypes of data-based converters
|
||||
*/
|
||||
extern const UConverterStaticData * ucnv_converterStaticData[UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES];
|
||||
|
||||
/*
|
||||
* Global - verbosity
|
||||
*/
|
||||
|
@ -91,6 +96,8 @@ static const char PLAIN_SEPARATORS[9] = { '\r', '\n', '\t', ' ', '<', '>' ,'"' ,
|
|||
static const char CODEPOINT_SEPARATORS[8] = { '\r', '>', '\\', 'x', '\n', ' ', '\t', '\0' };
|
||||
static const char UNICODE_CODEPOINT_SEPARATORS[6] = { '<', '>', 'U', ' ', '\t', '\0' };
|
||||
|
||||
|
||||
|
||||
/* Remove all characters followed by '#'
|
||||
*/
|
||||
char *
|
||||
|
@ -159,7 +166,7 @@ char *
|
|||
return line + i;
|
||||
}
|
||||
|
||||
extern bool_t haveCopyright=TRUE;
|
||||
bool_t haveCopyright=TRUE;
|
||||
|
||||
static const UDataInfo dataInfo={
|
||||
sizeof(UDataInfo),
|
||||
|
@ -472,6 +479,46 @@ void readHeaderFromFile(UConverterStaticData* myConverter,
|
|||
return;
|
||||
}
|
||||
|
||||
/* Now that we know the type, copy any 'default' values
|
||||
from the table. */
|
||||
{
|
||||
const UConverterStaticData *prototype = ucnv_converterStaticData[myConverter->conversionType];
|
||||
if ( prototype != NULL )
|
||||
{
|
||||
if ( myConverter->name[0] == 0 )
|
||||
{
|
||||
uprv_strcpy((char*)myConverter->name, prototype->name);
|
||||
}
|
||||
|
||||
if ( myConverter->codepage == 0 )
|
||||
{
|
||||
myConverter->codepage = prototype->codepage;
|
||||
}
|
||||
|
||||
if ( myConverter->platform == 0 )
|
||||
{
|
||||
myConverter->platform = prototype->platform;
|
||||
}
|
||||
|
||||
if ( myConverter->minBytesPerChar == 0 )
|
||||
{
|
||||
myConverter->minBytesPerChar = prototype->minBytesPerChar;
|
||||
}
|
||||
|
||||
if ( myConverter->maxBytesPerChar == 0 )
|
||||
{
|
||||
myConverter->maxBytesPerChar = prototype->maxBytesPerChar;
|
||||
}
|
||||
|
||||
if ( myConverter->subCharLen == 0 )
|
||||
{
|
||||
myConverter->subCharLen = prototype->subCharLen;
|
||||
uprv_memcpy(myConverter->subChar, prototype->subChar,
|
||||
prototype->subCharLen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*get mb_cur_max amount*/
|
||||
|
@ -527,12 +574,16 @@ UConverterTable *loadSBCSTableFromFile(FileStream* convFile, UConverterStaticDat
|
|||
if (U_FAILURE(*err)) return;
|
||||
replacementChar = myConverter->subChar[0];
|
||||
myUConverterTable = (UConverterTable*)uprv_malloc(sizeof(UConverterSBCSTable));
|
||||
|
||||
if (myUConverterTable == NULL)
|
||||
{
|
||||
*err = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
uprv_memset(myUConverterTable, 0, sizeof(UConverterSBCSTable));
|
||||
|
||||
/*create a compact array with replacement chars as default chars*/
|
||||
ucmp8_init(&myUConverterTable->sbcs.fromUnicode, 0);
|
||||
myFromUnicode = &myUConverterTable->sbcs.fromUnicode;
|
||||
|
@ -540,7 +591,7 @@ UConverterTable *loadSBCSTableFromFile(FileStream* convFile, UConverterStaticDat
|
|||
{
|
||||
uprv_free(myUConverterTable);
|
||||
*err = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
myUConverterTable->sbcs.toUnicode = (UChar*)malloc(sizeof(UChar)*256);
|
||||
|
@ -596,14 +647,16 @@ UConverterTable *loadMBCSTableFromFile(FileStream* convFile, UConverterStaticDat
|
|||
if (myUConverterTable == NULL)
|
||||
{
|
||||
*err = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uprv_memset(myUConverterTable, 0, sizeof(UConverterMBCSTable));
|
||||
|
||||
myUConverterTable->mbcs.starters = (bool_t*)(uprv_malloc(sizeof(bool_t)*256));
|
||||
if (myUConverterTable->mbcs.starters == NULL)
|
||||
{
|
||||
*err = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -676,9 +729,10 @@ UConverterTable *loadEBCDIC_STATEFULTableFromFile(FileStream* convFile, UConvert
|
|||
if (myUConverterTable == NULL)
|
||||
{
|
||||
*err = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uprv_memset(myUConverterTable, 0, sizeof(UConverterMBCSTable));
|
||||
|
||||
myFromUnicode = &myUConverterTable->dbcs.fromUnicode;
|
||||
ucmp16_init(myFromUnicode, (uint16_t)replacementChar);
|
||||
|
@ -739,6 +793,8 @@ UConverterTable * loadDBCSTableFromFile(FileStream* convFile, UConverterStaticDa
|
|||
return NULL;
|
||||
}
|
||||
|
||||
uprv_memset(myUConverterTable, 0, sizeof(UConverterDBCSTable));
|
||||
|
||||
myFromUnicode = &(myUConverterTable->dbcs.fromUnicode);
|
||||
ucmp16_init(myFromUnicode, (int16_t)replacementChar);
|
||||
|
||||
|
@ -834,6 +890,8 @@ UConverterSharedData* createConverterFromTableFile(const char* converterName, UE
|
|||
T_FileStream_close(convFile);
|
||||
return;
|
||||
}
|
||||
|
||||
uprv_memset(mySharedData, 0, sizeof(UConverterSharedData));
|
||||
|
||||
mySharedData->structSize = sizeof(UConverterSharedData);
|
||||
|
||||
|
|
57
icu4c/source/tools/makeconv/ucnvstat.c
Normal file
57
icu4c/source/tools/makeconv/ucnvstat.c
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (C) 1998-2000, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*
|
||||
******************************************************************************
|
||||
*
|
||||
*
|
||||
* ucnvstat.c:
|
||||
* UConverterStaticData prototypes for data based converters
|
||||
*/
|
||||
|
||||
#include "unicode/utypes.h"
|
||||
#include "unicode/ucnv.h"
|
||||
#include "unicode/ucnv_bld.h"
|
||||
|
||||
static const UConverterStaticData _SBCSStaticData={
|
||||
sizeof(UConverterStaticData),
|
||||
"SBCS",
|
||||
0, UCNV_IBM, UCNV_SBCS, 1, 1,
|
||||
1, { 0, 0, 0, 0 },
|
||||
{ 0,0,0 } /* reserved bytes */
|
||||
};
|
||||
|
||||
static const UConverterStaticData _DBCSStaticData={
|
||||
sizeof(UConverterStaticData),
|
||||
"DBCS",
|
||||
0, UCNV_IBM, UCNV_DBCS, 2, 2,
|
||||
1, { 0, 0, 0, 0 }, /* subchar */
|
||||
{ 0,0,0 } /* reserved bytes */
|
||||
};
|
||||
|
||||
static const UConverterStaticData _MBCSStaticData={
|
||||
sizeof(UConverterStaticData),
|
||||
"MBCS",
|
||||
0, UCNV_IBM, UCNV_MBCS, 1, 1,
|
||||
1, { 0, 0, 0, 0 },
|
||||
{ 0,0,0 } /* reserved bytes */
|
||||
};
|
||||
|
||||
static const UConverterStaticData _EBCDICStatefulStaticData={
|
||||
sizeof(UConverterStaticData),
|
||||
"EBCDICStateful",
|
||||
0, UCNV_IBM, UCNV_EBCDIC_STATEFUL, 1, 1,
|
||||
1, { 0, 0, 0, 0 },
|
||||
{ 0,0,0 } /* reserved bytes */
|
||||
};
|
||||
|
||||
/* NULLs for algorithmic types, their tables live in ucnv_bld.c */
|
||||
const UConverterStaticData *ucnv_converterStaticData[UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES]={
|
||||
&_SBCSStaticData, &_DBCSStaticData, &_MBCSStaticData, NULL/*Lat1*/,
|
||||
NULL/*UTF8*/, NULL/*UTF16be*/, NULL/*UTF16LE*/, &_EBCDICStatefulStaticData,
|
||||
NULL/*ISO2022*/,
|
||||
/* LMBCS */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
||||
};
|
||||
|
Loading…
Add table
Reference in a new issue