1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* ***** BEGIN LICENSE BLOCK *****
3
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
5
* The contents of this file are subject to the Netscape Public License
6
* Version 1.1 (the "License"); you may not use this file except in
7
* compliance with the License. You may obtain a copy of the License at
8
* http://www.mozilla.org/NPL/
10
* Software distributed under the License is distributed on an "AS IS" basis,
11
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12
* for the specific language governing rights and limitations under the
15
* The Original Code is Mozilla Communicator client code.
17
* The Initial Developer of the Original Code is
18
* Netscape Communications Corporation.
19
* Portions created by the Initial Developer are Copyright (C) 1998
20
* the Initial Developer. All Rights Reserved.
23
* Yueheng Xu, yueheng.xu@intel.com
26
* Alternatively, the contents of this file may be used under the terms of
27
* either the GNU General Public License Version 2 or later (the "GPL"), or
28
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29
* in which case the provisions of the GPL or the LGPL are applicable instead
30
* of those above. If you wish to allow use of your version of this file only
31
* under the terms of either the GPL or the LGPL, and not to allow others to
32
* use your version of this file under the terms of the NPL, indicate your
33
* decision by deleting the provisions above and replace them with the notice
34
* and other provisions required by the GPL or the LGPL. If you do not delete
35
* the provisions above, a recipient may use your version of this file under
36
* the terms of any one of the NPL, the GPL or the LGPL.
38
* ***** END LICENSE BLOCK ***** */
40
#include "nsUnicodeToGB2312V2.h"
41
#include "nsICharRepresentable.h"
42
#include "nsUCvCnDll.h"
45
//----------------------------------------------------------------------
46
// Class nsUnicodeToGB2312V2 [implementation]
47
nsUnicodeToGB2312V2::nsUnicodeToGB2312V2() :
50
mUtil.InitToGBKTable();
53
NS_IMETHODIMP nsUnicodeToGB2312V2::ConvertNoBuff(const PRUnichar * aSrc,
56
PRInt32 * aDestLength)
58
PRInt32 iSrcLength = 0;
59
PRInt32 iDestLength = 0;
62
while (iSrcLength < *aSrcLength)
64
//if unicode's hi byte has something, it is not ASCII, must be a GB
68
*aDest = CAST_UNICHAR_TO_CHAR(*aSrc);
69
aDest++; // increment 1 byte
73
if(mUtil.UnicodeToGBKChar(*aSrc, PR_FALSE, &byte1, &byte2))
75
if(iDestLength+2 > *aDestLength)
77
res = NS_OK_UENC_MOREOUTPUT;
82
aDest += 2; // increment 2 bytes
83
iDestLength +=2; // each GB char count as two in char* string
86
res= NS_ERROR_UENC_NOMAPPING;
87
iSrcLength++; // include length of the unmapped character
91
iSrcLength++ ; // each unicode char just count as one in PRUnichar* string
93
if ( iDestLength >= (*aDestLength) && (iSrcLength < *aSrcLength ))
95
res = NS_OK_UENC_MOREOUTPUT;
99
*aDestLength = iDestLength;
100
*aSrcLength = iSrcLength;
104
//----------------------------------------------------------------------
105
// Subclassing of nsTableEncoderSupport class [implementation]
107
NS_IMETHODIMP nsUnicodeToGB2312V2::FillInfo(PRUint32 *aInfo)
109
mUtil.FillGB2312Info(aInfo);
110
//GB2312 font lib also have single byte ASCII characters, set them here
111
for ( PRUint16 u = 0x0000; u <= 0x007F; u++)
112
SET_REPRESENTABLE(aInfo, u);