jdk/src/java.desktop/unix/classes/sun/font/XMap.java

Print this page




  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();}