ICU-4578 Fix warnings on Intel compiler.

X-SVN-Rev: 17942
This commit is contained in:
Eric Mader 2005-06-17 19:20:43 +00:00
parent aee4b9cb87
commit 2717c31b16
3 changed files with 135 additions and 145 deletions

View file

@ -17,39 +17,39 @@ U_NAMESPACE_BEGIN
enum
{
// Split matra table indices
_x1 = 1 << IndicClassTable::CF_INDEX_SHIFT,
_x2 = 2 << IndicClassTable::CF_INDEX_SHIFT,
_x3 = 3 << IndicClassTable::CF_INDEX_SHIFT,
_x4 = 4 << IndicClassTable::CF_INDEX_SHIFT,
_x5 = 5 << IndicClassTable::CF_INDEX_SHIFT,
_x6 = 6 << IndicClassTable::CF_INDEX_SHIFT,
_x7 = 7 << IndicClassTable::CF_INDEX_SHIFT,
_x8 = 8 << IndicClassTable::CF_INDEX_SHIFT,
_x9 = 9 << IndicClassTable::CF_INDEX_SHIFT,
_x1 = 1 << CF_INDEX_SHIFT,
_x2 = 2 << CF_INDEX_SHIFT,
_x3 = 3 << CF_INDEX_SHIFT,
_x4 = 4 << CF_INDEX_SHIFT,
_x5 = 5 << CF_INDEX_SHIFT,
_x6 = 6 << CF_INDEX_SHIFT,
_x7 = 7 << CF_INDEX_SHIFT,
_x8 = 8 << CF_INDEX_SHIFT,
_x9 = 9 << CF_INDEX_SHIFT,
// simple classes
_xx = IndicClassTable::CC_RESERVED,
_ma = IndicClassTable::CC_VOWEL_MODIFIER | IndicClassTable::CF_POS_ABOVE,
_mp = IndicClassTable::CC_VOWEL_MODIFIER | IndicClassTable::CF_POS_AFTER,
_sa = IndicClassTable::CC_STRESS_MARK | IndicClassTable::CF_POS_ABOVE,
_sb = IndicClassTable::CC_STRESS_MARK | IndicClassTable::CF_POS_BELOW,
_iv = IndicClassTable::CC_INDEPENDENT_VOWEL,
_i2 = IndicClassTable::CC_INDEPENDENT_VOWEL_2,
_ct = IndicClassTable::CC_CONSONANT | IndicClassTable::CF_CONSONANT,
_cn = IndicClassTable::CC_CONSONANT_WITH_NUKTA | IndicClassTable::CF_CONSONANT,
_nu = IndicClassTable::CC_NUKTA,
_dv = IndicClassTable::CC_DEPENDENT_VOWEL,
_dl = _dv | IndicClassTable::CF_POS_BEFORE,
_db = _dv | IndicClassTable::CF_POS_BELOW,
_da = _dv | IndicClassTable::CF_POS_ABOVE,
_dr = _dv | IndicClassTable::CF_POS_AFTER,
_lm = _dv | IndicClassTable::CF_LENGTH_MARK,
_l1 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_1 | IndicClassTable::CF_POS_BEFORE,
_a1 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_1 | IndicClassTable::CF_POS_ABOVE,
_r2 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_2 | IndicClassTable::CF_POS_AFTER,
_m2 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_2 | IndicClassTable::CF_LENGTH_MARK,
_m3 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_3 | IndicClassTable::CF_LENGTH_MARK,
_vr = IndicClassTable::CC_VIRAMA,
_xx = CC_RESERVED,
_ma = CC_VOWEL_MODIFIER | CF_POS_ABOVE,
_mp = CC_VOWEL_MODIFIER | CF_POS_AFTER,
_sa = CC_STRESS_MARK | CF_POS_ABOVE,
_sb = CC_STRESS_MARK | CF_POS_BELOW,
_iv = CC_INDEPENDENT_VOWEL,
_i2 = CC_INDEPENDENT_VOWEL_2,
_ct = CC_CONSONANT | CF_CONSONANT,
_cn = CC_CONSONANT_WITH_NUKTA | CF_CONSONANT,
_nu = CC_NUKTA,
_dv = CC_DEPENDENT_VOWEL,
_dl = _dv | CF_POS_BEFORE,
_db = _dv | CF_POS_BELOW,
_da = _dv | CF_POS_ABOVE,
_dr = _dv | CF_POS_AFTER,
_lm = _dv | CF_LENGTH_MARK,
_l1 = CC_SPLIT_VOWEL_PIECE_1 | CF_POS_BEFORE,
_a1 = CC_SPLIT_VOWEL_PIECE_1 | CF_POS_ABOVE,
_r2 = CC_SPLIT_VOWEL_PIECE_2 | CF_POS_AFTER,
_m2 = CC_SPLIT_VOWEL_PIECE_2 | CF_LENGTH_MARK,
_m3 = CC_SPLIT_VOWEL_PIECE_3 | CF_LENGTH_MARK,
_vr = CC_VIRAMA,
// split matras
_s1 = _dv | _x1,
@ -65,12 +65,12 @@ enum
// consonants with special forms
// NOTE: this assumes that no consonants with nukta have
// special forms... (Bengali RA?)
_bb = _ct | IndicClassTable::CF_BELOW_BASE,
_pb = _ct | IndicClassTable::CF_POST_BASE,
_vt = _bb | IndicClassTable::CF_VATTU,
_rv = _vt | IndicClassTable::CF_REPH,
_rp = _pb | IndicClassTable::CF_REPH,
_rb = _bb | IndicClassTable::CF_REPH
_bb = _ct | CF_BELOW_BASE,
_pb = _ct | CF_POST_BASE,
_vt = _bb | CF_VATTU,
_rv = _vt | CF_REPH,
_rp = _pb | CF_REPH,
_rb = _bb | CF_REPH
};
//
@ -212,15 +212,15 @@ static const SplitMatra mlymSplitTable[] = {{0x0D46, 0x0D3E}, {0x0D47, 0x0D3E},
// FIXME: post 'GSUB' reordering of MATRA_PRE's for Malayalam and Tamil
// FIXME: reformed Malayalam needs to reorder VATTU to before base glyph...
// FIXME: eyelash RA only for Devanagari??
#define DEVA_SCRIPT_FLAGS (IndicClassTable::SF_EYELASH_RA | IndicClassTable::SF_NO_POST_BASE_LIMIT)
#define BENG_SCRIPT_FLAGS (IndicClassTable::SF_REPH_AFTER_BELOW | IndicClassTable::SF_NO_POST_BASE_LIMIT)
#define PUNJ_SCRIPT_FLAGS (IndicClassTable::SF_NO_POST_BASE_LIMIT)
#define GUJR_SCRIPT_FLAGS (IndicClassTable::SF_NO_POST_BASE_LIMIT)
#define ORYA_SCRIPT_FLAGS (IndicClassTable::SF_REPH_AFTER_BELOW | IndicClassTable::SF_NO_POST_BASE_LIMIT)
#define TAML_SCRIPT_FLAGS (IndicClassTable::SF_MPRE_FIXUP | IndicClassTable::SF_NO_POST_BASE_LIMIT)
#define TELU_SCRIPT_FLAGS (IndicClassTable::SF_MATRAS_AFTER_BASE | 3)
#define KNDA_SCRIPT_FLAGS (IndicClassTable::SF_MATRAS_AFTER_BASE | 3)
#define MLYM_SCRIPT_FLAGS (IndicClassTable::SF_MPRE_FIXUP | IndicClassTable::SF_NO_POST_BASE_LIMIT)
#define DEVA_SCRIPT_FLAGS (SF_EYELASH_RA | SF_NO_POST_BASE_LIMIT)
#define BENG_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT)
#define PUNJ_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
#define GUJR_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
#define ORYA_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT)
#define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
//
// Indic Class Tables

View file

@ -57,23 +57,23 @@ private:
fLengthMark = matra;
fLengthMarkIndex = matraIndex;
} else {
switch (matraClass & IndicClassTable::CF_POS_MASK) {
case IndicClassTable::CF_POS_BEFORE:
switch (matraClass & CF_POS_MASK) {
case CF_POS_BEFORE:
fMpre = matra;
fMpreIndex = matraIndex;
break;
case IndicClassTable::CF_POS_BELOW:
case CF_POS_BELOW:
fMbelow = matra;
fMbelowIndex = matraIndex;
break;
case IndicClassTable::CF_POS_ABOVE:
case CF_POS_ABOVE:
fMabove = matra;
fMaboveIndex = matraIndex;
break;
case IndicClassTable::CF_POS_AFTER:
case CF_POS_AFTER:
fMpost = matra;
fMpostIndex = matraIndex;
break;
@ -158,12 +158,12 @@ public:
fVMTags = vowelModifierTags;
if (IndicClassTable::isVowelModifier(vmClass)) {
switch (vmClass & IndicClassTable::CF_POS_MASK) {
case IndicClassTable::CF_POS_ABOVE:
switch (vmClass & CF_POS_MASK) {
case CF_POS_ABOVE:
fVMabove = vowelModifier;
break;
case IndicClassTable::CF_POS_AFTER:
case CF_POS_AFTER:
fVMpost = vowelModifier;
break;
@ -182,12 +182,12 @@ public:
fSMTags = stressMarkTags;
if (IndicClassTable::isStressMark(smClass)) {
switch (smClass & IndicClassTable::CF_POS_MASK) {
case IndicClassTable::CF_POS_ABOVE:
switch (smClass & CF_POS_MASK) {
case CF_POS_ABOVE:
fSMabove = stressMark;
break;
case IndicClassTable::CF_POS_BELOW:
case CF_POS_BELOW:
fSMbelow = stressMark;
break;
@ -320,7 +320,7 @@ static const LETag tagArray[] =
blwmFeatureTag, abvmFeatureTag, distFeatureTag, emptyTag
};
static const le_int8 stateTable[][IndicClassTable::CC_COUNT] =
static const le_int8 stateTable[][CC_COUNT] =
{
// xx vm sm iv i2 ct cn nu dv s1 s2 s3 vr zw
{ 1, 1, 1, 5, 8, 3, 2, 1, 5, 9, 5, 1, 1, 1}, // 0 - ground state
@ -350,7 +350,7 @@ le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable, const
while (cursor < charCount) {
IndicClassTable::CharClass charClass = classTable->getCharClass(chars[cursor]);
state = stateTable[state][charClass & IndicClassTable::CF_CLASS_MASK];
state = stateTable[state][charClass & CF_CLASS_MASK];
if (state < 0) {
break;
@ -369,7 +369,7 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le
MPreFixups *mpreFixups = NULL;
const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
if (classTable->scriptFlags & IndicClassTable::SF_MPRE_FIXUP) {
if (classTable->scriptFlags & SF_MPRE_FIXUP) {
mpreFixups = new MPreFixups(charCount);
}
@ -398,28 +398,28 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le
matra -= 1;
}
switch (classTable->getCharClass(chars[prev]) & IndicClassTable::CF_CLASS_MASK) {
case IndicClassTable::CC_RESERVED:
case IndicClassTable::CC_INDEPENDENT_VOWEL:
case IndicClassTable::CC_ZERO_WIDTH_MARK:
switch (classTable->getCharClass(chars[prev]) & CF_CLASS_MASK) {
case CC_RESERVED:
case CC_INDEPENDENT_VOWEL:
case CC_ZERO_WIDTH_MARK:
for (i = prev; i < syllable; i += 1) {
output.writeChar(chars[i], i, &tagArray[1]);
}
break;
case IndicClassTable::CC_NUKTA:
case IndicClassTable::CC_VIRAMA:
case CC_NUKTA:
case CC_VIRAMA:
output.writeChar(C_DOTTED_CIRCLE, prev, &tagArray[1]);
output.writeChar(chars[prev], prev, &tagArray[1]);
break;
case IndicClassTable::CC_DEPENDENT_VOWEL:
case IndicClassTable::CC_SPLIT_VOWEL_PIECE_1:
case IndicClassTable::CC_SPLIT_VOWEL_PIECE_2:
case IndicClassTable::CC_SPLIT_VOWEL_PIECE_3:
case IndicClassTable::CC_VOWEL_MODIFIER:
case IndicClassTable::CC_STRESS_MARK:
case CC_DEPENDENT_VOWEL:
case CC_SPLIT_VOWEL_PIECE_1:
case CC_SPLIT_VOWEL_PIECE_2:
case CC_SPLIT_VOWEL_PIECE_3:
case CC_VOWEL_MODIFIER:
case CC_STRESS_MARK:
output.writeMpre();
output.writeChar(C_DOTTED_CIRCLE, prev, &tagArray[1]);
@ -428,22 +428,22 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le
output.writeSMbelow();
output.writeMabove();
if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) != 0) {
if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
output.writeMpost();
}
if ((classTable->scriptFlags & IndicClassTable::SF_REPH_AFTER_BELOW) != 0) {
if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) {
output.writeVMabove();
output.writeSMabove(); // FIXME: there are no SM's in these scripts...
}
if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) == 0) {
if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
output.writeMpost();
}
output.writeLengthMark();
if ((classTable->scriptFlags & IndicClassTable::SF_REPH_AFTER_BELOW) == 0) {
if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
output.writeVMabove();
output.writeSMabove();
}
@ -451,9 +451,9 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le
output.writeVMpost();
break;
case IndicClassTable::CC_INDEPENDENT_VOWEL_2:
case IndicClassTable::CC_CONSONANT:
case IndicClassTable::CC_CONSONANT_WITH_NUKTA:
case CC_INDEPENDENT_VOWEL_2:
case CC_CONSONANT:
case CC_CONSONANT_WITH_NUKTA:
{
le_uint32 length = markStart - prev;
le_int32 lastConsonant = markStart - 1;
@ -464,7 +464,7 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le
baseLimit += 2;
// Check for eyelash RA, if the script supports it
if ((classTable->scriptFlags & IndicClassTable::SF_EYELASH_RA) != 0 &&
if ((classTable->scriptFlags & SF_EYELASH_RA) != 0 &&
chars[baseLimit] == C_SIGN_ZWJ) {
if (length > 3) {
baseLimit += 1;
@ -480,7 +480,7 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le
le_int32 baseConsonant = lastConsonant;
le_int32 postBase = lastConsonant + 1;
le_int32 postBaseLimit = classTable->scriptFlags & IndicClassTable::SF_POST_BASE_LIMIT_MASK;
le_int32 postBaseLimit = classTable->scriptFlags & SF_POST_BASE_LIMIT_MASK;
le_bool seenVattu = FALSE;
le_bool seenBelowBaseForm = FALSE;
@ -572,7 +572,7 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le
output.writeChar(chars[i], i, &tagArray[4]);
}
if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) != 0) {
if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
output.writeMbelow();
output.writeSMbelow(); // FIXME: there are no SMs in these scripts...
output.writeMabove();
@ -592,13 +592,13 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le
}
// write Mbelow, SMbelow, Mabove
if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) == 0) {
if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
output.writeMbelow();
output.writeSMbelow();
output.writeMabove();
}
if ((classTable->scriptFlags & IndicClassTable::SF_REPH_AFTER_BELOW) != 0) {
if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) {
if (baseLimit == prev + 2) {
output.writeChar(chars[prev], prev, &tagArray[0]);
output.writeChar(chars[prev + 1], prev + 1, &tagArray[0]);
@ -627,14 +627,14 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le
}
// write Mpost
if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) == 0) {
if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
output.writeMpost();
}
output.writeLengthMark();
// write reph
if ((classTable->scriptFlags & IndicClassTable::SF_REPH_AFTER_BELOW) == 0) {
if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
if (baseLimit == prev + 2) {
output.writeChar(chars[prev], prev, &tagArray[0]);
output.writeChar(chars[prev + 1], prev + 1, &tagArray[0]);

View file

@ -18,11 +18,54 @@
U_NAMESPACE_BEGIN
// Characters that get refered to by name...
enum
{
C_SIGN_ZWNJ = 0x200C,
C_SIGN_ZWJ = 0x200D
};
#define C_SIGN_ZWNJ 0x200C
#define C_SIGN_ZWJ 0x200D
// Character class values
#define CC_RESERVED 0U
#define CC_VOWEL_MODIFIER 1U
#define CC_STRESS_MARK 2U
#define CC_INDEPENDENT_VOWEL 3U
#define CC_INDEPENDENT_VOWEL_2 4U
#define CC_CONSONANT 5U
#define CC_CONSONANT_WITH_NUKTA 6U
#define CC_NUKTA 7U
#define CC_DEPENDENT_VOWEL 8U
#define CC_SPLIT_VOWEL_PIECE_1 9U
#define CC_SPLIT_VOWEL_PIECE_2 10U
#define CC_SPLIT_VOWEL_PIECE_3 11U
#define CC_VIRAMA 12U
#define CC_ZERO_WIDTH_MARK 13U
#define CC_COUNT 14U
// Character class flags
#define CF_CLASS_MASK 0x0000FFFFU
#define CF_CONSONANT 0x80000000U
#define CF_REPH 0x40000000U
#define CF_VATTU 0x20000000U
#define CF_BELOW_BASE 0x10000000U
#define CF_POST_BASE 0x08000000U
#define CF_LENGTH_MARK 0x04000000U
#define CF_POS_BEFORE 0x00300000U
#define CF_POS_BELOW 0x00200000U
#define CF_POS_ABOVE 0x00100000U
#define CF_POS_AFTER 0x00000000U
#define CF_POS_MASK 0x00300000U
#define CF_INDEX_MASK 0x000F0000U
#define CF_INDEX_SHIFT 16
// Script flag bits
#define SF_MATRAS_AFTER_BASE 0x80000000U
#define SF_REPH_AFTER_BELOW 0x40000000U
#define SF_EYELASH_RA 0x20000000U
#define SF_MPRE_FIXUP 0x10000000U
#define SF_POST_BASE_LIMIT_MASK 0x0000FFFFU
#define SF_NO_POST_BASE_LIMIT 0x00007FFFU
typedef LEUnicode SplitMatra[3];
@ -31,61 +74,8 @@ class LEGlyphStorage;
struct IndicClassTable
{
enum CharClassValues
{
CC_RESERVED = 0,
CC_VOWEL_MODIFIER = 1,
CC_STRESS_MARK = 2,
CC_INDEPENDENT_VOWEL = 3,
CC_INDEPENDENT_VOWEL_2 = 4,
CC_CONSONANT = 5,
CC_CONSONANT_WITH_NUKTA = 6,
CC_NUKTA = 7,
CC_DEPENDENT_VOWEL = 8,
CC_SPLIT_VOWEL_PIECE_1 = 9,
CC_SPLIT_VOWEL_PIECE_2 = 10,
CC_SPLIT_VOWEL_PIECE_3 = 11,
CC_VIRAMA = 12,
CC_ZERO_WIDTH_MARK = 13,
CC_COUNT = 14
};
enum CharClassFlags
{
CF_CLASS_MASK = 0x0000FFFF,
CF_CONSONANT = 0x80000000,
CF_REPH = 0x40000000,
CF_VATTU = 0x20000000,
CF_BELOW_BASE = 0x10000000,
CF_POST_BASE = 0x08000000,
CF_LENGTH_MARK = 0x04000000,
CF_POS_BEFORE = 0x00300000,
CF_POS_BELOW = 0x00200000,
CF_POS_ABOVE = 0x00100000,
CF_POS_AFTER = 0x00000000,
CF_POS_MASK = 0x00300000,
CF_INDEX_MASK = 0x000F0000,
CF_INDEX_SHIFT = 16
};
typedef le_uint32 CharClass;
enum ScriptFlagBits
{
SF_MATRAS_AFTER_BASE = 0x80000000,
SF_REPH_AFTER_BELOW = 0x40000000,
SF_EYELASH_RA = 0x20000000,
SF_MPRE_FIXUP = 0x10000000,
SF_POST_BASE_LIMIT_MASK = 0x0000FFFF,
SF_NO_POST_BASE_LIMIT = 0x00007FFF
};
typedef le_int32 ScriptFlags;
typedef le_uint32 ScriptFlags;
LEUnicode firstChar;
LEUnicode lastChar;