mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
fix bug 5893
This commit is contained in:
parent
f41a10dd54
commit
82009b471b
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user