fix bug 5893

This commit is contained in:
ftang%netscape.com 1999-06-12 01:37:46 +00:00
parent f41a10dd54
commit 82009b471b
3 changed files with 47 additions and 12 deletions

View File

@ -24,14 +24,17 @@
//----------------------------------------------------------------------
// Global functions and data [declaration]
// XXX renames
static PRInt16 cs0201ShiftTable[] = {
2, u1ByteCharset ,
ShiftCell(u1ByteChar, 1, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F),
ShiftCell(u1ByteChar, 1, 0xA1, 0xDF, 0x00, 0xA1, 0x00, 0xDF),
static PRInt16 cs1ByteShiftTable[] = {
0, u1ByteCharset ,
ShiftCell(0,0,0,0,0,0,0,0)
};
static PRInt16 cs0208ShiftTable[] = {
static PRInt16 cs1ByteGLShiftTable[] = {
0, u1ByteGLCharset ,
ShiftCell(0,0,0,0,0,0,0,0)
};
static PRInt16 cs2ByteShiftTable[] = {
0, u2BytesCharset,
ShiftCell(0,0,0,0,0,0,0,0)
};
@ -89,7 +92,7 @@ nsresult nsISO2022JPToUnicode::ConvertBuffer(const char ** aSrc,
val = ((PRUint8)*src++);
*dest++ = (val < 0x80)?val:0xfffd;
}
} else if (mCharset == kJISX0201_1976) {
} else if ((mCharset == kJISX0201_1976) || (mCharset == kJISX0201_1976Kana)){
// single byte
if (srcLen > destLen) {
aSrcEnd = src + destLen;
@ -97,7 +100,12 @@ nsresult nsISO2022JPToUnicode::ConvertBuffer(const char ** aSrc,
} else res = NS_OK;
res = mHelper->ConvertByTable(src, &srcLen, dest, &destLen,
(uShiftTable*) &cs0201ShiftTable, (uMappingTable*)&g_ut0201Mapping);
( (mCharset == kJISX0201_1976) ?
(uShiftTable*) &cs1ByteShiftTable :
(uShiftTable*) &cs1ByteGLShiftTable),
(uMappingTable*)&g_ut0201Mapping);
*aSrc = src + srcLen;
*aDest = dest + destLen;
return res;
@ -113,7 +121,10 @@ nsresult nsISO2022JPToUnicode::ConvertBuffer(const char ** aSrc,
} else res = NS_OK;
res = mHelper->ConvertByTable(src, &srcLen, dest, &destLen,
(uShiftTable*) &cs0208ShiftTable, (uMappingTable*)&g_ut0208Mapping);
(uShiftTable*) &cs2ByteShiftTable,
( (mCharset == kJISX0212_1990) ?
(uMappingTable*)&g_ut0212Mapping :
(uMappingTable*)&g_ut0208Mapping));
*aSrc = src + srcLen;
*aDest = dest + destLen;
return res;
@ -180,6 +191,10 @@ NS_IMETHODIMP nsISO2022JPToUnicode::ConvertNoBuff(const char * aSrc,
mState = 0;
mCharset = kJISX0201_1976;
break;
case 'I':
mState = 0;
mCharset = kJISX0201_1976Kana;
break;
default:
res = NS_ERROR_ILLEGAL_INPUT;
}
@ -195,6 +210,20 @@ NS_IMETHODIMP nsISO2022JPToUnicode::ConvertNoBuff(const char * aSrc,
mState = 0;
mCharset = kJISX0208_1983;
break;
case '(':
mState = 4;
break;
default:
res = NS_ERROR_ILLEGAL_INPUT;
}
break;
case 4:
switch (*src) {
case 'D':
mState = 0;
mCharset = kJISX0212_1990;
break;
default:
res = NS_ERROR_ILLEGAL_INPUT;
}

View File

@ -36,10 +36,14 @@
* S1 + * -> ERR
* S2 + 'B' -> S0; mCharset = kASCII
* S2 + 'J' -> S0; mCharset = kJISX0201_1976
* S2 + 'I' -> S0; mCharset = kJISX0201_1976Kana [Not Std ISO-2022-JP]
* S2 + * -> ERR
* S3 + '@' -> S0; mCharset = kJISX0208_1978
* S3 + 'B' -> S0; mCharset = kJISX0208_1983
* S3 + '(' -> S4; [Not Std ISO-2022-JP]
* S3 + * -> ERR
* S4 + 'D' -> S0; mCharset = kJISX0212_1990 [Not Std ISO-2022-JP]
* S4 + * -> ERR [Not Std ISO-2022-JP]
* ERR + * -> ERR
*
* @created 09/Feb/1998
@ -70,7 +74,9 @@ protected:
kASCII,
kJISX0201_1976,
kJISX0208_1978,
kJISX0208_1983
kJISX0208_1983,
kJISX0201_1976Kana, // [Not Std ISO-2022-JP]
kJISX0212_1990 // [Not Std ISO-2022-JP]
};
PRInt32 mState; // current state of the state machine

View File

@ -111,12 +111,12 @@ nsresult nsUnicodeToISO2022JP::ChangeCharset(PRInt32 aCharset,
case 2:
aDest[0] = 0x1b;
aDest[1] = '$';
aDest[2] = '@';
aDest[2] = 'B';
break;
case 3:
aDest[0] = 0x1b;
aDest[1] = '$';
aDest[2] = 'B';
aDest[2] = '@';
break;
}