Do Hankaku to Zenkaku conversion in the ISO-2022-JP encoder. Bug 563283, r=Masatoshi Kimura <VYV03354@nifty.ne.jp>
authorSimon Montagu <smontagu@smontagu.org>
Mon, 21 Jun 2010 15:34:11 +0300
changeset 43883 596c193a9b67243eb84e02010581cc69462f5454
parent 43882 fb26f787c7279ba208abc8f4addd1c48e2917341
child 43884 e730711e5624000c1f80f3405d5f4fd73a7a939c
push idunknown
push userunknown
push dateunknown
reviewersMasatoshi
bugs563283
milestone1.9.3a6pre
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Do Hankaku to Zenkaku conversion in the ISO-2022-JP encoder. Bug 563283, r=Masatoshi Kimura <VYV03354@nifty.ne.jp>
intl/build/nsI18nModule.cpp
intl/uconv/tests/unit/test_bug563283.js
intl/uconv/ucvja/nsUnicodeToISO2022JP.cpp
intl/uconv/ucvja/nsUnicodeToISO2022JP.h
intl/unicharutil/public/Makefile.in
intl/unicharutil/public/nsHankakuToZenkakuCID.h
intl/unicharutil/src/Makefile.in
intl/unicharutil/src/nsHankakuToZenkaku.cpp
intl/unicharutil/src/nsTextTransformFactory.h
intl/unicharutil/src/nsUcharUtilConstructors.h
--- a/intl/build/nsI18nModule.cpp
+++ b/intl/build/nsI18nModule.cpp
@@ -70,18 +70,16 @@ static const nsModuleComponentInfo compo
   { "Unichar Utility", NS_UNICHARUTIL_CID, 
       NS_UNICHARUTIL_CONTRACTID, nsCaseConversionImp2Constructor},
   { "Unichar Category Table", NS_UNICHARCATEGORY_CID, 
       NS_UNICHARCATEGORY_CONTRACTID, nsCategoryImpConstructor},
   { "Unicode To Entity Converter", NS_ENTITYCONVERTER_CID, 
       NS_ENTITYCONVERTER_CONTRACTID, nsEntityConverterConstructor },
   { "Unicode To Charset Converter", NS_SAVEASCHARSET_CID, 
       NS_SAVEASCHARSET_CONTRACTID, nsSaveAsCharsetConstructor},
-  { "Japanese Hankaku To Zenkaku", NS_HANKAKUTOZENKAKU_CID, 
-      NS_HANKAKUTOZENKAKU_CONTRACTID, CreateNewHankakuToZenkaku},
   { "Unicode Normlization", NS_UNICODE_NORMALIZER_CID, 
       NS_UNICODE_NORMALIZER_CONTRACTID,  nsUnicodeNormalizerConstructor},
 
 
  // strres
   { "String Bundle", NS_STRINGBUNDLESERVICE_CID, NS_STRINGBUNDLE_CONTRACTID,
     nsStringBundleServiceConstructor},
   { "String Textfile Overrides", NS_STRINGBUNDLETEXTOVERRIDE_CID,
new file mode 100644
--- /dev/null
+++ b/intl/uconv/tests/unit/test_bug563283.js
@@ -0,0 +1,52 @@
+// Tests conversion from Unicode to ISO-2022-JP with Hankaku characters
+
+load('CharsetConversionTests.js');
+
+const inStrings = [
+// 。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚
+  "\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F\uFF70\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFF9E\uFF9F",
+// equivalent to
+// 。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜
+// \u3002\u300c\u300d\u3001\u30fb\u30f2\u30a1\u30a3\u30a5\u30a7\u30a9\u30e3\u30e5\u30e7\u30c3\u30fc\u30a2\u30a4\u30a6\u30a8\u30aa\u30ab\u30ad\u30af\u30b1\u30b3\u30b5\u30b7\u30b9\u30bb\u30bd\u30bf\u30c1\u30c4\u30c6\u30c8\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d2\u30d5\u30d8\u30db\u30de\u30df\u30e0\u30e1\u30e2\u30e4\u30e6\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ef\u30f3\u309b\u309c"
+
+// ガギグゲゴザジズゼゾダヂヅデドバビブベボ
+  "\uFF76\uFF9E\uFF77\uFF9E\uFF78\uFF9E\uFF79\uFF9E\uFF7A\uFF9E\uFF7B\uFF9E\uFF7C\uFF9E\uFF7D\uFF9E\uFF7E\uFF9E\uFF7F\uFF9E\uFF80\uFF9E\uFF81\uFF9E\uFF82\uFF9E\uFF83\uFF9E\uFF84\uFF9E\uFF8A\uFF9E\uFF8B\uFF9E\uFF8C\uFF9E\uFF8D\uFF9E\uFF8E\uFF9E",
+// equivalent to 
+// ガギゲゴザジズゼゾダヂヅデドバビブベボ
+// \u30AC\u30AE\u30B2\u30B4\u30B6\u30B8\u30BA\u30BC\u30BE\u30C0\u30C2\u30C5\u30C7\u30C9\u30D0\u30D3\u30D6\u30D9\u30DC
+
+// パピプペポ
+  "\uFF8A\uFF9F\uFF8B\uFF9F\uFF8C\uFF9F\uFF8D\uFF9F\uFF8E\uFF9F",
+// equivalent to 
+// パピプペポ
+// \u30D1\u30D4\u30D7\u30DA\u30DD"
+
+// Hankaku preceded and followed by regular Katakana (no change of charset)
+// フランツ・ヨーゼフ・ハイドン
+  "\u30D5\u30E9\u30F3\u30C4\u30FB\uFF96\uFF70\uFF7E\uFF9E\uFF8C\u30FB\u30CF\u30A4\u30C9\u30F3",
+
+// Hankaku preceded and followed by Roman (charset change)
+// Mozilla (モジラ) Foundation
+  "Mozilla (\uFF93\uFF7C\uFF9E\uFF97) Foundation",
+
+// Hankaku preceded and followed by unencodable characters
+// दिल्ली・デリー・ਦਿੱਲੀ
+"\u0926\u093F\u0932\u094D\u0932\u0940\uFF65\uFF83\uFF9E\uFF98\uFF70\uFF65\u0A26\u0A3F\u0A71\u0A32\u0A40"
+                   ];
+
+const expectedStrings = [
+                         "\x1B$B!#!V!W!\x22!&%r%!%#%%%'%)%c%e%g%C!<%\x22%$%&%(%*%+%-%/%1%3%5%7%9%;%=%?%A%D%F%H%J%K%L%M%N%O%R%U%X%[%^%_%`%a%b%d%f%h%i%j%k%l%m%o%s!+!,\x1B(B",
+                         "\x1B$B%,%.%0%2%4%6%8%:%<%>%@%B%E%G%I%P%S%V%Y%\x5C\x1B(B",
+                         "\x1B$B%Q%T%W%Z%]\x1B(B",
+			 "\x1B$B%U%i%s%D!&%h!<%<%U!&%O%$%I%s\x1B(B",
+			 "Mozilla (\x1B$B%b%8%i\x1B(B) Foundation",
+			 "??????\x1B$B!&%G%j!<!&\x1B(B?????"
+			 ];
+
+function run_test()
+{
+    for (var i = 0; i < inStrings.length; ++i) {
+        checkEncode(CreateScriptableConverter(), "ISO-2022-JP",
+                    inStrings[i], expectedStrings[i]);
+    }
+}
--- a/intl/uconv/ucvja/nsUnicodeToISO2022JP.cpp
+++ b/intl/uconv/ucvja/nsUnicodeToISO2022JP.cpp
@@ -38,16 +38,51 @@
 #include "nsUnicodeToISO2022JP.h"
 #include "nsIComponentManager.h"
 #include "nsUCVJADll.h"
 #include "nsUnicodeEncodeHelper.h"
 
 //----------------------------------------------------------------------
 // Global functions and data [declaration]
 
+// Basic mapping from Hankaku to Zenkaku
+// Nigori and Maru are taken care of outside this basic mapping
+static const PRUnichar gBasicMapping[0x40] =
+{
+// 0xff60
+0xff60,0x3002,0x300c,0x300d,0x3001,0x30fb,0x30f2,0x30a1,
+// 0xff68
+0x30a3,0x30a5,0x30a7,0x30a9,0x30e3,0x30e5,0x30e7,0x30c3,
+// 0xff70
+0x30fc,0x30a2,0x30a4,0x30a6,0x30a8,0x30aa,0x30ab,0x30ad,
+// 0xff78
+0x30af,0x30b1,0x30b3,0x30b5,0x30b7,0x30b9,0x30bb,0x30bd,
+// 0xff80
+0x30bf,0x30c1,0x30c4,0x30c6,0x30c8,0x30ca,0x30cb,0x30cc,
+// 0xff88
+0x30cd,0x30ce,0x30cf,0x30d2,0x30d5,0x30d8,0x30db,0x30de,
+// 0xff90
+0x30df,0x30e0,0x30e1,0x30e2,0x30e4,0x30e6,0x30e8,0x30e9,
+// 0xff98
+0x30ea,0x30eb,0x30ec,0x30ed,0x30ef,0x30f3,0x309b,0x309c
+};
+
+// Do we need to check for Nigori for the next unicode ?
+#define NEED_TO_CHECK_NIGORI(u) (((0xff76<=(u))&&((u)<=0xff84))||((0xff8a<=(u))&&((u)<=0xff8e)))
+
+// Do we need to check for Maru for the next unicode ?
+#define NEED_TO_CHECK_MARU(u) ((0xff8a<=(u))&&((u)<=0xff8e))
+
+// The  unicode is in Katakana Hankaku block
+#define IS_HANKAKU(u) ((0xff61 <= (u)) && ((u) <= 0xff9f))
+#define IS_NIGORI(u) (0xff9e == (u))
+#define IS_MARU(u)   (0xff9f == (u))
+#define NIGORI_MODIFIER 1
+#define MARU_MODIFIER   2
+
 static const PRUint16 g_ufAsciiMapping [] = {
   0x0001, 0x0004, 0x0005, 0x0008, 0x0000, 0x0000, 0x007F, 0x0000
 };
 
 #define SIZE_OF_TABLES 5
 static const PRUint16 * g_ufMappingTables[SIZE_OF_TABLES] = {
   g_ufAsciiMapping,             // ASCII           ISOREG 6
   g_uf0201GLMapping,            // JIS X 0201-1976 ISOREG 14
@@ -58,16 +93,17 @@ static const PRUint16 * g_ufMappingTable
 
 static const uScanClassID g_ufScanClassIDs[SIZE_OF_TABLES] = {
   u1ByteCharset,                // ASCII           ISOREG 6
   u1ByteCharset,                // JIS X 0201-1976 ISOREG 14
   u2BytesCharset,               // JIS X 0208-1983 ISOREG 87
   u2BytesCharset,               // JIS X 0208- cp932 ext
   u2BytesCharset,               // JIS X 0208-1978 ISOREG 42
 };
+#define JIS_X_208_INDEX 2
 
 //----------------------------------------------------------------------
 // Class nsUnicodeToISO2022JP [implementation]
 
 // worst case max length: 
 //  1  2 3  4  5  6  7 8
 // ESC $ B XX XX ESC ( B
 nsUnicodeToISO2022JP::nsUnicodeToISO2022JP() 
@@ -130,16 +166,70 @@ nsresult nsUnicodeToISO2022JP::ChangeCha
       break;
   }
 
   mCharset = aCharset;
   *aDestLength = 3;
   return NS_OK;
 }
 
+nsresult nsUnicodeToISO2022JP::ConvertHankaku(const PRUnichar * aSrc,
+                                              PRInt32 * aSrcLength,
+                                              char * aDest,
+                                              PRInt32 * aDestLength)
+{
+  nsresult res = NS_OK;
+
+  const PRUnichar * src = aSrc;
+  const PRUnichar * srcEnd = aSrc + *aSrcLength;
+  char * dest = aDest;
+  char * destEnd = aDest + *aDestLength;
+  PRUnichar srcChar, tempChar;
+  PRInt32 bcr, bcw;
+
+  bcw = destEnd - dest;
+  res = ChangeCharset(JIS_X_208_INDEX, dest, &bcw);
+  dest += bcw;
+  if (res != NS_OK) {
+    return res;
+  }
+
+  while (src < srcEnd) {
+    srcChar = *src;
+    if (!IS_HANKAKU(srcChar)) {
+      break;
+    }
+    ++src;
+    tempChar = gBasicMapping[(srcChar) - 0xff60];
+
+    if (src < srcEnd) {
+      // if the character could take a modifier, and the next char
+      // is a modifier, modify it and eat one PRUnichar
+      if (NEED_TO_CHECK_NIGORI(srcChar) && IS_NIGORI(*src)) {
+        tempChar += NIGORI_MODIFIER;
+        ++src;
+      } else if (NEED_TO_CHECK_MARU(srcChar) && IS_MARU(*src)) {
+        tempChar += MARU_MODIFIER;
+        ++src;
+      }
+    }
+    bcr = 1;
+    bcw = destEnd - dest;
+    res = nsUnicodeEncodeHelper::ConvertByTable(
+             &tempChar, &bcr, dest, &bcw, g_ufScanClassIDs[JIS_X_208_INDEX],
+             nsnull, (uMappingTable *) g_ufMappingTables[JIS_X_208_INDEX]);
+    dest += bcw;
+    if (res != NS_OK)
+      break;
+  }
+  *aDestLength = dest - aDest;
+  *aSrcLength = src - aSrc;
+  return res;
+}
+
 //----------------------------------------------------------------------
 // Subclassing of nsTableEncoderSupport class [implementation]
 
 NS_IMETHODIMP nsUnicodeToISO2022JP::FillInfo(PRUint32* aInfo)
 {
   return nsUnicodeEncodeHelper::FillInfo(aInfo, SIZE_OF_TABLES, 
                                          (uMappingTable **) g_ufMappingTables);
 
@@ -165,18 +255,27 @@ NS_IMETHODIMP nsUnicodeToISO2022JP::Conv
       bcw = destEnd - dest;
       res = nsUnicodeEncodeHelper::ConvertByTable(src, &bcr, dest, &bcw, 
                                       g_ufScanClassIDs[i], nsnull,
                                       (uMappingTable *) g_ufMappingTables[i]);
       if (res != NS_ERROR_UENC_NOMAPPING) break;
     }
 
     if ( i>=  SIZE_OF_TABLES) {
-      res = NS_ERROR_UENC_NOMAPPING;
-      src++;
+      if (IS_HANKAKU(*src)) {
+        bcr = srcEnd - src;
+        bcw = destEnd - dest;
+        res = ConvertHankaku(src, &bcr, dest, &bcw);
+        dest += bcw;
+        src += bcr;
+        if (res == NS_OK) continue;
+      } else {
+        res = NS_ERROR_UENC_NOMAPPING;
+        src++;
+      }
     }
     if (res != NS_OK) break;
 
     bcw = destEnd - dest;
     res = ChangeCharset(i, dest, &bcw);
     dest += bcw;
     if (res != NS_OK) break;
 
--- a/intl/uconv/ucvja/nsUnicodeToISO2022JP.h
+++ b/intl/uconv/ucvja/nsUnicodeToISO2022JP.h
@@ -64,16 +64,18 @@ public:
   virtual ~nsUnicodeToISO2022JP();
 
 protected:
 
   PRInt32                   mCharset;       // current character set
 
   nsresult ChangeCharset(PRInt32 aCharset, char * aDest, 
       PRInt32 * aDestLength);
+  nsresult ConvertHankaku(const PRUnichar *aSrc, PRInt32 * aSrcLength,
+                          char *aDest, PRInt32 * aDestLength);
 
   //--------------------------------------------------------------------
   // Subclassing of nsEncoderSupport class [declaration]
 
   NS_IMETHOD ConvertNoBuffNoErr(const PRUnichar * aSrc, PRInt32 * aSrcLength, 
       char * aDest, PRInt32 * aDestLength);
   NS_IMETHOD FinishNoBuff(char * aDest, PRInt32 * aDestLength);
   NS_IMETHOD Reset();
--- a/intl/unicharutil/public/Makefile.in
+++ b/intl/unicharutil/public/Makefile.in
@@ -44,13 +44,12 @@ include $(DEPTH)/config/autoconf.mk
 
 MODULE		= unicharutil
 
 EXPORTS		= \
 		nsICaseConversion.h \
 		nsITextTransform.h \
 		nsIUGenCategory.h \
 		nsUnicharUtilCIID.h \
-		nsHankakuToZenkakuCID.h \
 		$(NULL)
 
 include $(topsrcdir)/config/rules.mk
 
deleted file mode 100644
--- a/intl/unicharutil/public/nsHankakuToZenkakuCID.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-#ifndef nsHankakuToZenkakuCID_h__
-#define nsHankakuToZenkakuCID_h__
-
-
-#include "nsITextTransform.h"
-#include "nsISupports.h"
-#include "nscore.h"
-
-// {8F666A11-04A0-11d3-B3B9-00805F8A6670}
-#define NS_HANKAKUTOZENKAKU_CID \
-{ 0x8f666a11, 0x4a0, 0x11d3, \
-  { 0xb3, 0xb9, 0x0, 0x80, 0x5f, 0x8a, 0x66, 0x70 } }
-
-#define NS_HANKAKUTOZENKAKU_CONTRACTID NS_TEXTTRANSFORM_CONTRACTID_BASE "hankakutozenkaku"
-
-
-#endif
--- a/intl/unicharutil/src/Makefile.in
+++ b/intl/unicharutil/src/Makefile.in
@@ -46,15 +46,14 @@ MODULE		= unicharutil
 LIBRARY_NAME	= ucharucomp_s
 FORCE_STATIC_LIB = 1
 LIBXUL_LIBRARY = 1
 
 
 CPPSRCS		= \
 		nsCaseConversionImp2.cpp \
 		nsCategoryImp.cpp \
-		nsHankakuToZenkaku.cpp \
 		nsEntityConverter.cpp \
 		nsSaveAsCharset.cpp \
 		nsUnicodeNormalizer.cpp \
 		$(NULL)
 
 include $(topsrcdir)/config/rules.mk
deleted file mode 100644
--- a/intl/unicharutil/src/nsHankakuToZenkaku.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1999
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsITextTransform.h"
-#include "pratom.h"
-#include "nsUUDll.h"
-#include "nsTextTransformFactory.h"
-
-// Basic mapping from Hankaku to Zenkaku
-// Nigori and Maru is take care out side this basic mapping
-static const PRUnichar gBasicMapping[0x40] =
-{
-// 0xff60
-0xff60,0x3002,0x300c,0x300d,0x3001,0x30fb,0x30f2,0x30a1,        
-// 0xff68
-0x30a3,0x30a5,0x30a7,0x30a9,0x30e3,0x30e5,0x30e7,0x30c3,        
-// 0xff70
-0x30fc,0x30a2,0x30a4,0x30a6,0x30a8,0x30aa,0x30ab,0x30ad,        
-// 0xff78
-0x30af,0x30b1,0x30b3,0x30b5,0x30b7,0x30b9,0x30bb,0x30bd,        
-// 0xff80
-0x30bf,0x30c1,0x30c4,0x30c6,0x30c8,0x30ca,0x30cb,0x30cc,        
-// 0xff88
-0x30cd,0x30ce,0x30cf,0x30d2,0x30d5,0x30d8,0x30db,0x30de,        
-// 0xff90
-0x30df,0x30e0,0x30e1,0x30e2,0x30e4,0x30e6,0x30e8,0x30e9,        
-// 0xff98
-0x30ea,0x30eb,0x30ec,0x30ed,0x30ef,0x30f3,0x309b,0x309c
-};
-
-// Do we need to check for Nigori for the next unicode ?
-#define NEED_TO_CHECK_NIGORI(u) (((0xff76<=(u))&&((u)<=0xff84))||((0xff8a<=(u))&&((u)<=0xff8e)))
-
-// Do we need to check for Maru for the next unicode ?
-#define NEED_TO_CHECK_MARU(u) ((0xff8a<=(u))&&((u)<=0xff8e))
-
-// The  unicode is in Katakana Hankaku block
-#define IS_HANKAKU(u) (0xff60==((u) & 0xffe0)) || (0xff80==((u)&0xffe0))
-#define IS_NIGORI(u) (0xff9e == (u))
-#define IS_MARU(u)   (0xff9f == (u))
-#define NIGORI_MODIFIER 1
-#define MARU_MODIFIER   2
- 
-// function prototype 
-void HankakuToZenkaku (
-    const PRUnichar* aSrc, PRInt32 aLen, 
-    PRUnichar* aDest, PRInt32 aDestLen, PRInt32* oLen);
-
-void HankakuToZenkaku (
-    const PRUnichar* aSrc, PRInt32 aLen, 
-    PRUnichar* aDest, PRInt32 aDestLen, PRInt32* oLen)
-{
-    // XXX aDestLen is never checked, assumed to be as long as aLen
-    NS_ASSERTION(aDestLen >= aLen, "aDest must be as long as aSrc");
-
-    PRInt32 i,j;
-    if ( aLen == 0) {
-      *oLen = 0;
-      return;
-    }
-    // loop from the first to the last char except the last one.
-    for(i = j = 0; i < (aLen-1); i++,j++,aSrc++, aDest++)
-    {
-       if(IS_HANKAKU(*aSrc)) {
-         // if it is in hankaku - do basic mapping first
-         *aDest = gBasicMapping[(*aSrc) - 0xff60];
-         
-         // if is some char could be modifier, and the next char
-         // is a modifier, modify it and eat one byte
-
-         if(IS_NIGORI(*(aSrc+1)) && NEED_TO_CHECK_NIGORI(*aSrc))
-         {
-            *aDest += NIGORI_MODIFIER;
-            i++; aSrc++;
-         }
-         else if(IS_MARU(*(aSrc+1)) && NEED_TO_CHECK_MARU(*aSrc)) 
-         {
-            *aDest += MARU_MODIFIER;
-            i++; aSrc++;
-         }
-       }
-       else 
-       {
-         // not in hankaku block, just copy 
-         *aDest = *aSrc;
-       }
-    }
-
-    // handle the last character
-    if(IS_HANKAKU(*aSrc)) 
-         *aDest = gBasicMapping[(*aSrc) - 0xff60];
-    else
-         *aDest = *aSrc;
-
-    *oLen = j+1;
-}
-
-
-
-class nsHankakuToZenkaku : public nsITextTransform {
-  NS_DECL_ISUPPORTS
-
-public: 
-
-  nsHankakuToZenkaku() ;
-  virtual ~nsHankakuToZenkaku() ;
-  NS_IMETHOD Change( const PRUnichar* aText, PRInt32 aTextLength, nsString& aResult);
-  NS_IMETHOD Change( nsString& aText, nsString& aResult);
-
-};
-
-NS_IMPL_ISUPPORTS1(nsHankakuToZenkaku, nsITextTransform)
-
-nsHankakuToZenkaku::nsHankakuToZenkaku()
-{
-}
-nsHankakuToZenkaku::~nsHankakuToZenkaku()
-{
-}
-
-NS_IMETHODIMP nsHankakuToZenkaku::Change( const PRUnichar* aText, PRInt32 aTextLength, nsString& aResult)
-{
-  PRInt32 ol;
-  if (!EnsureStringLength(aResult, aTextLength))
-    return NS_ERROR_OUT_OF_MEMORY;
-
-  HankakuToZenkaku ( aText, aTextLength, aResult.BeginWriting(), aTextLength, &ol);
-  aResult.SetLength(ol);
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP nsHankakuToZenkaku::Change( nsString& aText, nsString& aResult)
-{
-   aResult = aText;
-   const PRUnichar* u = aResult.get();
-   PRUnichar* ou = (PRUnichar*) u;
-   PRInt32 l = aResult.Length();
-   PRInt32 ol;
-   
-   HankakuToZenkaku ( u, l, ou, l, &ol);
-   aResult.SetLength(ol);
-
-   return NS_OK;
-}
-
-nsresult NS_NewHankakuToZenkaku(nsISupports** oResult)
-{
-  if(!oResult)
-    return NS_ERROR_NULL_POINTER;
-  *oResult = new nsHankakuToZenkaku();
-  if(*oResult)
-     NS_ADDREF(*oResult);
-  return (*oResult) ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
-}
deleted file mode 100644
--- a/intl/unicharutil/src/nsTextTransformFactory.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Communicator client code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef nsTextTransformFactory_h__
-#define nsTextTransformFactory_h__
-
-
-#include "nsIFactory.h"
-
-nsresult NS_NewHankakuToZenkaku(nsISupports** oResult);
-
-#endif /* nsTextTransformFactory_h__ */
--- a/intl/unicharutil/src/nsUcharUtilConstructors.h
+++ b/intl/unicharutil/src/nsUcharUtilConstructors.h
@@ -36,18 +36,16 @@
  * ***** END LICENSE BLOCK ***** */
 
 #ifndef nsUcharUtilConstructors_h__
 #define nsUcharUtilConstructors_h__
 
 #include "nsUnicharUtilCIID.h"
 #include "nsCaseConversionImp2.h"
 #include "nsCategoryImp.h"
-#include "nsHankakuToZenkakuCID.h"
-#include "nsTextTransformFactory.h"
 #include "nsICaseConversion.h"
 #include "nsEntityConverter.h"
 #include "nsSaveAsCharset.h"
 #include "nsUUDll.h"
 #include "nsIFile.h"
 #include "nsUnicodeNormalizer.h"
 
 // Functions used to create new instances of a given object by the
@@ -74,18 +72,16 @@ CreateNew##_name(nsISupports* aOuter, RE
     if (NS_FAILED(rv)) {                                             \
         *aResult = nsnull;                                           \
     }                                                                \
     NS_RELEASE(inst);                /* get rid of extra refcnt */   \
     return rv;                                                       \
 }
 
 
-UNICHARUTIL_MAKE_CTOR(HankakuToZenkaku)
-
 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsCaseConversionImp2,
                                          nsCaseConversionImp2::GetInstance)
 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsCategoryImp,
                                          nsCategoryImp::GetInstance)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsEntityConverter)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsSaveAsCharset)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsUnicodeNormalizer)