52 XMap mapper = xMappers.get(encoding); 53 if (mapper == null) { 54 mapper = getXMapperInternal(encoding); 55 xMappers.put(encoding, mapper); 56 } 57 return mapper; 58 } 59 60 static final int SINGLE_BYTE = 1; 61 static final int DOUBLE_BYTE = 2; 62 63 private static XMap getXMapperInternal(String encoding) { 64 65 String jclass = null; 66 int nBytes = SINGLE_BYTE; 67 int maxU = 0xffff; 68 int minU = 0; 69 boolean addAscii = false; 70 boolean lowPartOnly = false; 71 if (encoding.equals("dingbats")) { 72 jclass = "sun.awt.motif.X11Dingbats"; 73 minU = 0x2701; 74 maxU = 0x27be; 75 } else if (encoding.equals("symbol")){ 76 jclass = "sun.awt.Symbol"; 77 minU = 0x0391; 78 maxU = 0x22ef; 79 } else if (encoding.equals("iso8859-1")) { 80 maxU = 0xff; 81 } else if (encoding.equals("iso8859-2")) { 82 jclass = "ISO8859_2"; 83 } else if (encoding.equals("jisx0208.1983-0")) { 84 jclass = "sun.awt.motif.X11JIS0208"; 85 nBytes = DOUBLE_BYTE; 86 } else if (encoding.equals("jisx0201.1976-0")) { 87 jclass = "sun.awt.motif.X11JIS0201"; 88 // this is mapping the latin supplement range 128->255 which 89 // doesn't exist in JIS0201. This needs examination. 90 // it was also overwriting a couple of the mappings of 91 // 7E and A5 which in JIS201 are different chars than in 92 // Latin 1. I have revised AddAscii to not overwrite chars 93 // which are already converted. 94 addAscii = true; 95 lowPartOnly = true; 96 } else if (encoding.equals("jisx0212.1990-0")) { 97 jclass = "sun.awt.motif.X11JIS0212"; 98 nBytes = DOUBLE_BYTE; 99 } else if (encoding.equals("iso8859-4")) { 100 jclass = "ISO8859_4"; 101 } else if (encoding.equals("iso8859-5")) { 102 jclass = "ISO8859_5"; 103 } else if (encoding.equals("koi8-r")) { 104 jclass = "KOI8_R"; 105 } else if (encoding.equals("ansi-1251")) { 106 jclass = "windows-1251"; 107 } else if (encoding.equals("iso8859-6")) { 108 jclass = "ISO8859_6"; 109 } else if (encoding.equals("iso8859-7")) { 110 jclass = "ISO8859_7"; 111 } else if (encoding.equals("iso8859-8")) { 112 jclass = "ISO8859_8"; 113 } else if (encoding.equals("iso8859-9")) { 114 jclass = "ISO8859_9"; 115 } else if (encoding.equals("iso8859-13")) { 116 jclass = "ISO8859_13"; 117 } else if (encoding.equals("iso8859-15")) { 118 jclass = "ISO8859_15"; 119 } else if (encoding.equals("ksc5601.1987-0")) { 120 jclass ="sun.awt.motif.X11KSC5601"; 121 nBytes = DOUBLE_BYTE; 122 } else if (encoding.equals( "ksc5601.1992-3")) { 123 jclass ="sun.awt.motif.X11Johab"; 124 nBytes = DOUBLE_BYTE; 125 } else if (encoding.equals( "ksc5601.1987-1")) { 126 jclass ="EUC_KR"; 127 nBytes = DOUBLE_BYTE; 128 } else if (encoding.equals( "cns11643-1")) { 129 jclass = "sun.awt.motif.X11CNS11643P1"; 130 nBytes = DOUBLE_BYTE; 131 } else if (encoding.equals("cns11643-2")) { 132 jclass = "sun.awt.motif.X11CNS11643P2"; 133 nBytes = DOUBLE_BYTE; 134 } else if (encoding.equals("cns11643-3")) { 135 jclass = "sun.awt.motif.X11CNS11643P3"; 136 nBytes = DOUBLE_BYTE; 137 } else if (encoding.equals("gb2312.1980-0")) { 138 jclass = "sun.awt.motif.X11GB2312"; 139 nBytes = DOUBLE_BYTE; 140 } else if (encoding.indexOf("big5") >= 0) { 141 jclass = "Big5"; 142 nBytes = DOUBLE_BYTE; 143 addAscii = true; 144 } else if (encoding.equals("tis620.2533-0")) { 145 jclass = "TIS620"; 146 } else if (encoding.equals("gbk-0")) { 147 jclass = "sun.awt.motif.X11GBK"; 148 nBytes = DOUBLE_BYTE; 149 } else if (encoding.indexOf("sun.unicode-0") >= 0) { 150 jclass = "sun.awt.motif.X11SunUnicode_0"; 151 nBytes = DOUBLE_BYTE; 152 } else if (encoding.indexOf("gb18030.2000-1") >= 0) { 153 jclass = "sun.awt.motif.X11GB18030_1"; 154 nBytes = DOUBLE_BYTE; 155 } else if (encoding.indexOf( "gb18030.2000-0") >= 0) { 156 jclass = "sun.awt.motif.X11GB18030_0"; 157 nBytes = DOUBLE_BYTE; 158 } else if (encoding.indexOf("hkscs") >= 0) { 159 jclass = "sun.awt.HKSCS"; 160 nBytes = DOUBLE_BYTE; 161 } 162 return new XMap(jclass, minU, maxU, nBytes, addAscii, lowPartOnly); 163 } 164 165 private static final char SURR_MIN = '\uD800'; 166 private static final char SURR_MAX = '\uDFFF'; 167 168 private XMap(String className, int minU, int maxU, int nBytes, 169 boolean addAscii, boolean lowPartOnly) { 170 171 CharsetEncoder enc = null; 172 if (className != null) { 173 try { 174 if (className.startsWith("sun.awt")) { 175 enc = ((Charset)Class.forName(className).newInstance()).newEncoder(); 176 } else { 177 enc = Charset.forName(className).newEncoder(); 178 } 179 } catch (Exception x) {x.printStackTrace();} | 52 XMap mapper = xMappers.get(encoding); 53 if (mapper == null) { 54 mapper = getXMapperInternal(encoding); 55 xMappers.put(encoding, mapper); 56 } 57 return mapper; 58 } 59 60 static final int SINGLE_BYTE = 1; 61 static final int DOUBLE_BYTE = 2; 62 63 private static XMap getXMapperInternal(String encoding) { 64 65 String jclass = null; 66 int nBytes = SINGLE_BYTE; 67 int maxU = 0xffff; 68 int minU = 0; 69 boolean addAscii = false; 70 boolean lowPartOnly = false; 71 if (encoding.equals("dingbats")) { 72 jclass = "sun.font.X11Dingbats"; 73 minU = 0x2701; 74 maxU = 0x27be; 75 } else if (encoding.equals("symbol")){ 76 jclass = "sun.awt.Symbol"; 77 minU = 0x0391; 78 maxU = 0x22ef; 79 } else if (encoding.equals("iso8859-1")) { 80 maxU = 0xff; 81 } else if (encoding.equals("iso8859-2")) { 82 jclass = "ISO8859_2"; 83 } else if (encoding.equals("jisx0208.1983-0")) { 84 jclass = "JIS0208"; 85 nBytes = DOUBLE_BYTE; 86 } else if (encoding.equals("jisx0201.1976-0")) { 87 jclass = "JIS0201"; // CHECK 88 // this is mapping the latin supplement range 128->255 which 89 // doesn't exist in JIS0201. This needs examination. 90 // it was also overwriting a couple of the mappings of 91 // 7E and A5 which in JIS201 are different chars than in 92 // Latin 1. I have revised AddAscii to not overwrite chars 93 // which are already converted. 94 addAscii = true; 95 lowPartOnly = true; 96 } else if (encoding.equals("jisx0212.1990-0")) { 97 jclass = "JIS0212"; 98 nBytes = DOUBLE_BYTE; 99 } else if (encoding.equals("iso8859-4")) { 100 jclass = "ISO8859_4"; 101 } else if (encoding.equals("iso8859-5")) { 102 jclass = "ISO8859_5"; 103 } else if (encoding.equals("koi8-r")) { 104 jclass = "KOI8_R"; 105 } else if (encoding.equals("ansi-1251")) { 106 jclass = "windows-1251"; 107 } else if (encoding.equals("iso8859-6")) { 108 jclass = "ISO8859_6"; 109 } else if (encoding.equals("iso8859-7")) { 110 jclass = "ISO8859_7"; 111 } else if (encoding.equals("iso8859-8")) { 112 jclass = "ISO8859_8"; 113 } else if (encoding.equals("iso8859-9")) { 114 jclass = "ISO8859_9"; 115 } else if (encoding.equals("iso8859-13")) { 116 jclass = "ISO8859_13"; 117 } else if (encoding.equals("iso8859-15")) { 118 jclass = "ISO8859_15"; 119 } else if (encoding.equals("ksc5601.1987-0")) { 120 jclass ="sun.font.X11KSC5601"; 121 nBytes = DOUBLE_BYTE; 122 } else if (encoding.equals( "ksc5601.1992-3")) { 123 jclass ="sun.font.X11Johab"; 124 nBytes = DOUBLE_BYTE; 125 } else if (encoding.equals( "ksc5601.1987-1")) { 126 jclass ="EUC_KR"; 127 nBytes = DOUBLE_BYTE; 128 } else if (encoding.equals( "cns11643-1")) { 129 jclass = "sun.font.X11CNS11643P1"; 130 nBytes = DOUBLE_BYTE; 131 } else if (encoding.equals("cns11643-2")) { 132 jclass = "sun.font.X11CNS11643P2"; 133 nBytes = DOUBLE_BYTE; 134 } else if (encoding.equals("cns11643-3")) { 135 jclass = "sun.font.X11CNS11643P3"; 136 nBytes = DOUBLE_BYTE; 137 } else if (encoding.equals("gb2312.1980-0")) { 138 jclass = "sun.font.X11GB2312"; 139 nBytes = DOUBLE_BYTE; 140 } else if (encoding.indexOf("big5") >= 0) { 141 jclass = "Big5"; 142 nBytes = DOUBLE_BYTE; 143 addAscii = true; 144 } else if (encoding.equals("tis620.2533-0")) { 145 jclass = "TIS620"; 146 } else if (encoding.equals("gbk-0")) { 147 jclass = "sun.font.X11GBK"; 148 nBytes = DOUBLE_BYTE; 149 } else if (encoding.indexOf("sun.unicode-0") >= 0) { 150 jclass = "sun.font.X11SunUnicode_0"; 151 nBytes = DOUBLE_BYTE; 152 } else if (encoding.indexOf("gb18030.2000-1") >= 0) { 153 jclass = "sun.font.X11GB18030_1"; 154 nBytes = DOUBLE_BYTE; 155 } else if (encoding.indexOf( "gb18030.2000-0") >= 0) { 156 jclass = "sun.font.X11GB18030_0"; 157 nBytes = DOUBLE_BYTE; 158 } else if (encoding.indexOf("hkscs") >= 0) { 159 jclass = "MS950_HKSCS_XP"; // CHECK 160 nBytes = DOUBLE_BYTE; 161 } 162 return new XMap(jclass, minU, maxU, nBytes, addAscii, lowPartOnly); 163 } 164 165 private static final char SURR_MIN = '\uD800'; 166 private static final char SURR_MAX = '\uDFFF'; 167 168 private XMap(String className, int minU, int maxU, int nBytes, 169 boolean addAscii, boolean lowPartOnly) { 170 171 CharsetEncoder enc = null; 172 if (className != null) { 173 try { 174 if (className.startsWith("sun.awt")) { 175 enc = ((Charset)Class.forName(className).newInstance()).newEncoder(); 176 } else { 177 enc = Charset.forName(className).newEncoder(); 178 } 179 } catch (Exception x) {x.printStackTrace();} |