KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > lib > TKUppercaseConverter


1 /*
2  * $Header: /cvsroot/webman-cms/source/webman/com/teamkonzept/lib/TKUppercaseConverter.java,v 1.5 2000/05/22 15:01:22 careck Exp $
3  *
4  */

5 package com.teamkonzept.lib;
6
7 import java.util.*;
8
9 /**
10     Konvertierungsklasse fuer HTML-Text-Codierung
11 */

12 public class TKUppercaseConverter extends TKConverter {
13     public final static String JavaDoc CONV_ID = "UPPERCASE";
14     public final static String JavaDoc CONV_NAME = "UPPERCASE-ISO-8859_1";
15
16     public String JavaDoc getName()
17     {
18         return CONV_NAME;
19     }
20     
21     public final static String JavaDoc[] HTML_CODES = {
22 /* 0*/ null, null, null, null, null, null, null, null, null, null,
23 /* 10*/ null, null, null, null, null, null, null, null, null, null,
24 /* 20*/ null, null, null, null, null, null, null, null, null, null,
25 /* 30*/ null, null, null, null, "quot", null, null, null, "amp", null,
26 /* 40*/ null, null, null, null, null, null, null, null, null, null,
27 /* 50*/ null, null, null, null, null, null, null, null, null, null,
28 /* 60*/ "lt", null, "gt", null, null, null, null, null, null, null,
29 /* 70*/ null, null, null, null, null, null, null, null, null, null,
30 /* 80*/ null, null, null, null, null, null, null, null, null, null,
31 /* 90*/ null, null, null, null, null, null, null, "*A", "*B", "*C",
32 /*100*/ "*D", "*E", "*F", "*G", "*H", "*I", "*J", "*K", "*L", "*M",
33 /*110*/ "*N", "*O", "*P", "*Q", "*R", "*S", "*T", "*U", "*V", "*W",
34 /*120*/ "*X", "*Y", "*Z", null, null, null, null, null, null, null,
35 /*130*/ null, null, /*"quot"*/null, null, null, null, null, null, null, null,
36 /*140*/ null, null, null, null, null, /*"#39"*/null, /*"#39*/null, null, null, null,
37 /*150*/ null, null, null, null, null, null, null, null, null, null,
38 /*160*/ "nbsp", null, null, null, null, null, null, null, null, null,
39 /*170*/ null, null, null, "shy", null, null, null, null, null, null,
40 /*180*/ null, null, null, null, null, null, null, null, null, null,
41 /*190*/ null, null, "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil",
42 /*200*/ "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml", "ETH", "Ntilde",
43 /*210*/ "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", null, "Oslash", "Ugrave", "Uacute", "Ucirc",
44 /*220*/ "Uuml", "Yacute", "THORN", "*SS", "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring",
45 /*230*/ "Aelig", "Ccedil", "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml",
46 /*240*/ "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", null, "Oslash", "Ugrave",
47 /*250*/ "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 JavaDoc 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 JavaDoc(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 JavaDoc subst = HTML_CODES[ code ];
86             if( subst == null ) {
87                 //if( c >= ' ' && c <='\u0080' ) {
88
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 JavaDoc decStr = new String JavaDoc( src, 0, startPos+1, i-startPos-1 );
132                     dst[dstBegin++] = (char) Integer.parseInt( decStr );
133                 }
134                 else {
135                     String JavaDoc code = new String JavaDoc( src, 0, startPos, i-startPos );
136                     dst[dstBegin++] =
137                         (char) ((Integer JavaDoc)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