diff --git a/mozilla/intl/uconv/ucvja2/nsUCvJa2Support.cpp b/mozilla/intl/uconv/ucvja2/nsUCvJa2Support.cpp index fd8423d96a9..557c0c90931 100644 --- a/mozilla/intl/uconv/ucvja2/nsUCvJa2Support.cpp +++ b/mozilla/intl/uconv/ucvja2/nsUCvJa2Support.cpp @@ -306,3 +306,45 @@ NS_IMETHODIMP nsTableEncoderSupport::ConvertNoBuffNoErr( mShiftTable, mMappingTable); return res; } + +//---------------------------------------------------------------------- +// Class nsTablesEncoderSupport [implementation] + +nsTablesEncoderSupport::nsTablesEncoderSupport(PRInt32 aTableCount, + uShiftTable ** aShiftTable, + uMappingTable ** aMappingTable) +: nsEncoderSupport() +{ + mHelper = NULL; + mTableCount = aTableCount; + mShiftTable = aShiftTable; + mMappingTable = aMappingTable; +} + +nsTablesEncoderSupport::~nsTablesEncoderSupport() +{ + NS_IF_RELEASE(mHelper); +} + +//---------------------------------------------------------------------- +// Subclassing of nsEncoderSupport class [implementation] + +NS_IMETHODIMP nsTablesEncoderSupport::ConvertNoBuffNoErr( + const PRUnichar * aSrc, + PRInt32 * aSrcLength, + char * aDest, + PRInt32 * aDestLength) +{ + nsresult res; + + if (mHelper == nsnull) { + res = nsComponentManager::CreateInstance(kUnicodeEncodeHelperCID, NULL, + kIUnicodeEncodeHelperIID, (void**) & mHelper); + + if (NS_FAILED(res)) return NS_ERROR_UENC_NOHELPER; + } + + res = mHelper->ConvertByTables(aSrc, aSrcLength, aDest, aDestLength, + mTableCount, mShiftTable, mMappingTable); + return res; +} diff --git a/mozilla/intl/uconv/ucvja2/nsUCvJa2Support.h b/mozilla/intl/uconv/ucvja2/nsUCvJa2Support.h index 11702ea4ca1..b7b7681ce4c 100644 --- a/mozilla/intl/uconv/ucvja2/nsUCvJa2Support.h +++ b/mozilla/intl/uconv/ucvja2/nsUCvJa2Support.h @@ -147,4 +147,42 @@ protected: char * aDest, PRInt32 * aDestLength); }; +//---------------------------------------------------------------------- +// Class nsTablesEncoderSupport [declaration] + +/** + * Support class for a multi-table-driven Unicode encoder. + * + * @created 11/Mar/1999 + * @author Catalin Rotaru [CATA] + */ +class nsTablesEncoderSupport : public nsEncoderSupport +{ +public: + + /** + * Class constructor. + */ + nsTablesEncoderSupport(PRInt32 aTableCount, uShiftTable ** aShiftTable, + uMappingTable ** aMappingTable); + + /** + * Class destructor. + */ + virtual ~nsTablesEncoderSupport(); + +protected: + + nsIUnicodeEncodeHelper * mHelper; // encoder helper object + PRInt32 mTableCount; + uShiftTable ** mShiftTable; + uMappingTable ** mMappingTable; + + //-------------------------------------------------------------------- + // Subclassing of nsEncoderSupport class [declaration] + + NS_IMETHOD ConvertNoBuffNoErr(const PRUnichar * aSrc, PRInt32 * aSrcLength, + char * aDest, PRInt32 * aDestLength); +}; + #endif /* nsUCvJa2Support_h___ */ diff --git a/mozilla/intl/uconv/ucvja2/nsUnicodeToEUCJP.cpp b/mozilla/intl/uconv/ucvja2/nsUnicodeToEUCJP.cpp index 1bba346d4e9..29b21a40605 100644 --- a/mozilla/intl/uconv/ucvja2/nsUnicodeToEUCJP.cpp +++ b/mozilla/intl/uconv/ucvja2/nsUnicodeToEUCJP.cpp @@ -18,16 +18,47 @@ */ #include "nsUnicodeToEUCJP.h" +#include "nsUCVJA2Dll.h" //---------------------------------------------------------------------- // Global functions and data [declaration] +// Shift Table +static PRInt16 g0201ShiftTable[] = { + 2, uMultibytesCharset, + ShiftCell(u1ByteChar, 1, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F), + ShiftCell(u1BytePrefix8EChar, 2, 0x8E, 0x8E, 0x00, 0xA1, 0x00, 0xDF) +}; +static PRInt16 g0208ShiftTable[] = { + 0, u2BytesGRCharset, + ShiftCell(0,0,0,0,0,0,0,0) +}; + +static PRInt16 g0212ShiftTable[] = { + 0, u2BytesGRPrefix8EA2Charset, + ShiftCell(0,0,0,0,0,0,0,0) +}; +static PRInt16 *gShiftTables[4] = { + g0208ShiftTable, + g0201ShiftTable, + g0201ShiftTable, + g0212ShiftTable +}; + +static PRUint16 *gMappingTables[4] = { + g_0208Mapping, + g_0201Mapping, + g_0201Mapping, + g_0212Mapping +}; + //---------------------------------------------------------------------- // Class nsUnicodeToEUCJP [implementation] nsUnicodeToEUCJP::nsUnicodeToEUCJP() -: nsTableEncoderSupport((uShiftTable*) NULL, - (uMappingTable*) NULL) +: nsTablesEncoderSupport(4, + (uShiftTable**) gShiftTables, + (uMappingTable**) gMappingTables) { } @@ -44,7 +75,6 @@ NS_IMETHODIMP nsUnicodeToEUCJP::GetMaxLength(const PRUnichar * aSrc, PRInt32 aSrcLength, PRInt32 * aDestLength) { - // XXX write me - *aDestLength = aSrcLength; - return NS_OK_UENC_EXACTLENGTH; + *aDestLength = 3*aSrcLength; + return NS_OK; } diff --git a/mozilla/intl/uconv/ucvja2/nsUnicodeToEUCJP.h b/mozilla/intl/uconv/ucvja2/nsUnicodeToEUCJP.h index 13a7fbfc221..2eb5cf7edbd 100644 --- a/mozilla/intl/uconv/ucvja2/nsUnicodeToEUCJP.h +++ b/mozilla/intl/uconv/ucvja2/nsUnicodeToEUCJP.h @@ -31,7 +31,7 @@ * @created 17/Feb/1999 * @author Catalin Rotaru [CATA] */ -class nsUnicodeToEUCJP : public nsTableEncoderSupport +class nsUnicodeToEUCJP : public nsTablesEncoderSupport { public: