Re: [Waba-spec] A Font counter-counter proposal
Status: Abandoned
Brought to you by:
bornet
From: Guilherme C. H. <gu...@us...> - 2001-11-27 10:58:19
|
Maybe you could adopt what i made in SuperWaba. My String class has this: /** The bytes are converted to char and vice-versa using the CharacterConverter associated in this charConverter member. */ public static waba.sys.CharacterConverter charConverter = new waba.sys.CharacterConverter(); /** Creates a string from the given byte array. The bytes are converted to char using the CharacterConverter associated in the charConverter member. */ public String(byte []value, int offset, int count) { chars = charConverter.bytes2chars(value,offset,count); } /** return this String as bytes.The chars are converted to byte using the CharacterConverter associated in the charConverter member. @since SuperWaba2.0beta4 */ public byte []getBytes() { return charConverter.chars2bytes(chars,0,chars.length); } And this is the CharacterConverter class: /** This class is used to correctly handle international character convertions. * The default character scheme converter is the 8859-1. If you want to use a different one, * you must extend this class, implementing the bytes2chars and chars2bytes methods, and then * assign the public member of java.lang.String charConverter to use your class instead of this default one. * Note that the java.lang.String mentioned above is located at org/superwaba/palm/classes/java.lang.String. */ public class CharacterConverter { public static char[] bytes2chars(byte bytes[], int offset, int length) { char []value = new char[length]; int i = 0; while (length-- > 0) { byte b = bytes[offset++]; value[i++] = (char)(b >= 0 ? b : (256 + b)); } return value; } public static byte[] chars2bytes(char chars[], int offset, int length) { byte []bytes = new byte[length]; int end = offset+length-1; int i = 0; byte b; for (; offset <= end; offset++) { char c = chars[offset]; if (c <= '\377') b = (byte)c; else { if ('\uD800' <= c && c <= '\uDBFF') { if (offset == end) // we must skip one byte, but no more bytes avail? break; offset++; } b = (byte)'?'; } bytes[i++] = b; } if (i != length) { byte []temp = new byte[i]; Vm.copyArray(bytes,0,temp,0,i); bytes = temp; } return bytes; } } So, if someone need a special conversion, just implement it and set the public static member of String class. regards guich |