1 5 package com.teamkonzept.lib; 6 7 import java.util.*; 8 9 12 public class TKUppercaseConverter extends TKConverter { 13 public final static String CONV_ID = "UPPERCASE"; 14 public final static String CONV_NAME = "UPPERCASE-ISO-8859_1"; 15 16 public String getName() 17 { 18 return CONV_NAME; 19 } 20 21 public final static String [] HTML_CODES = { 22 null, null, null, null, null, null, null, null, null, null, 23 null, null, null, null, null, null, null, null, null, null, 24 null, null, null, null, null, null, null, null, null, null, 25 null, null, null, null, "quot", null, null, null, "amp", null, 26 null, null, null, null, null, null, null, null, null, null, 27 null, null, null, null, null, null, null, null, null, null, 28 "lt", null, "gt", null, null, null, null, null, null, null, 29 null, null, null, null, null, null, null, null, null, null, 30 null, null, null, null, null, null, null, null, null, null, 31 null, null, null, null, null, null, null, "*A", "*B", "*C", 32 "*D", "*E", "*F", "*G", "*H", "*I", "*J", "*K", "*L", "*M", 33 "*N", "*O", "*P", "*Q", "*R", "*S", "*T", "*U", "*V", "*W", 34 "*X", "*Y", "*Z", null, null, null, null, null, null, null, 35 null, null, null, null, null, null, null, null, null, null, 36 null, null, null, null, null, null, null, null, null, null, 37 null, null, null, null, null, null, null, null, null, null, 38 "nbsp", null, null, null, null, null, null, null, null, null, 39 null, null, null, "shy", null, null, null, null, null, null, 40 null, null, null, null, null, null, null, null, null, null, 41 null, null, "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", 42 "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml", "ETH", "Ntilde", 43 "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", null, "Oslash", "Ugrave", "Uacute", "Ucirc", 44 "Uuml", "Yacute", "THORN", "*SS", "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", 45 "Aelig", "Ccedil", "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml", 46 "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", null, "Oslash", "Ugrave", 47 "Uacute", "Ucirc", "Uuml", "Yacute", "THORN", "*Y" 48 }; 49 50 public final static byte AMPERCENT = (byte) '&'; 51 public final static byte HASH = (byte) '#'; 52 public final static byte SEMICOLON = (byte) ';'; 53 public static Hashtable NAME_HASH = null; 54 55 public int getMaxBytesPerChar() 56 { 57 return 8; 58 } 59 60 public int minCharSize(int byteCount) 61 { 62 return byteCount; 63 } 64 65 public synchronized Hashtable getNameHash() 66 { 67 if( NAME_HASH != null ) return NAME_HASH; 68 NAME_HASH = new Hashtable(38); 69 String html; 70 for( int i=0; i<=255; i++ ) { 71 if( (html = HTML_CODES[i]) != null && html.charAt(0) != '*') 72 NAME_HASH.put( html, new Integer (i) ); 73 } 74 return NAME_HASH; 75 } 76 77 public int charsToBytes(char src[], byte dst[], int srcBegin, int length, int dstBegin) 78 { 79 int lastPos = srcBegin+length; 80 int firstPos = dstBegin; 81 for( int i=srcBegin; i<lastPos; i++ ) { 82 char c = src[i]; 83 byte b = (byte) c; 84 int code = (int) c; 85 String subst = HTML_CODES[ code ]; 86 if( subst == null ) { 87 if( c <='\u0080' ) { 89 dst[ dstBegin++ ] = b; 90 } 91 else if( c < '\u0100' ) { 92 dst[ dstBegin++ ] = AMPERCENT; 93 dst[ dstBegin++ ] = HASH; 94 dst[ dstBegin++ ] = (byte) Character.forDigit( ( code / 100 ), 10 ); 95 dst[ dstBegin++ ] = (byte) Character.forDigit( ( code % 100 / 10 ), 10 ); 96 dst[ dstBegin++ ] = (byte) Character.forDigit( ( code % 10 ), 10 ); 97 dst[ dstBegin++ ] = SEMICOLON; 98 } 99 } 100 else if (subst.length() > 0 && subst.charAt(0) == '*') { 101 102 int len = subst.length(); 103 subst.getBytes( 1, len, dst, dstBegin ); 104 dstBegin += len-1; 105 } 106 else { 107 dst[ dstBegin++ ] = AMPERCENT; 108 int len = subst.length(); 109 subst.getBytes( 0, len, dst, dstBegin ); 110 dstBegin += len; 111 dst[ dstBegin++ ] = SEMICOLON; 112 } 113 } 114 115 return dstBegin - firstPos; 116 } 117 118 public int bytesToChars(byte src[], char dst[], int srcBegin, int length, int dstBegin) 119 { 120 int lastPos = srcBegin+length; 121 int firstPos = dstBegin; 122 int i=srcBegin; 123 Hashtable nameHash = getNameHash(); 124 125 while( i<lastPos ) { 126 byte b = src[i++]; 127 if( b == AMPERCENT ) { 128 int startPos = i; 129 while( src[i] != SEMICOLON ) i++; 130 if( src[i] == HASH ) { 131 String decStr = new String ( src, 0, startPos+1, i-startPos-1 ); 132 dst[dstBegin++] = (char) Integer.parseInt( decStr ); 133 } 134 else { 135 String code = new String ( src, 0, startPos, i-startPos ); 136 dst[dstBegin++] = 137 (char) ((Integer )nameHash.get(code)).intValue(); 138 } 139 i++; 140 } 141 else { 142 dst[dstBegin++] = (char) b; 143 } 144 } 145 return dstBegin - firstPos; 146 } 147 148 } 149 150 | Popular Tags |