package totalcross.lang; import totalcross.sys.*; public class Character4D { public static final Class<Character> TYPE = Character.class; char v; public Character4D(char v) { this.v = v; } public char charValue() { return v; } public boolean equals(Object o) { return o != null && o instanceof Character4D && ((Character4D)o).v == this.v; } public int hashCode() { return v; } public static Character4D valueOf(char c) { return new Character4D(c); } public String toString() { return String.valueOf(v); } // functions used in regex /* 0: 6359 1: 707 2: 886 3: 31 4: 114 5: 44113 6: 530 7: 10 8: 131 9: 208 10: 52 11: 242 12: 19 13: 1 14: 1 15: 65 16: 32 17: 0 18: 6400 19: 2048 20: 17 21: 65 22: 64 23: 12 24: 199 25: 889 26: 36 27: 74 28: 2221 29: 6 30: 4 31: 0 try { byte[] v = new byte[65536]; for(int i=0; i <= 65535;i++) v[i] = (byte)Character.getType((char)i); File f = new File("G:\\TotalCross\\TotalCross3\\src\\totalcross\\chartypes.bin", File.CREATE_EMPTY); f.writeBytes(v,0,v.length); f.close(); } catch (IOException e) { e.printStackTrace(); } */ public static final byte UNASSIGNED = 0; public static final byte UPPERCASE_LETTER = 1; public static final byte LOWERCASE_LETTER = 2; public static final byte TITLECASE_LETTER = 3; public static final byte MODIFIER_LETTER = 4; public static final byte OTHER_LETTER = 5; public static final byte NON_SPACING_MARK = 6; public static final byte ENCLOSING_MARK = 7; public static final byte COMBINING_SPACING_MARK = 8; public static final byte DECIMAL_DIGIT_NUMBER = 9; public static final byte LETTER_NUMBER = 10; public static final byte OTHER_NUMBER = 11; public static final byte SPACE_SEPARATOR = 12; public static final byte LINE_SEPARATOR = 13; public static final byte PARAGRAPH_SEPARATOR = 14; public static final byte CONTROL = 15; public static final byte FORMAT = 16; public static final byte PRIVATE_USE = 18; public static final byte SURROGATE = 19; public static final byte DASH_PUNCTUATION = 20; public static final byte START_PUNCTUATION = 21; public static final byte END_PUNCTUATION = 22; public static final byte CONNECTOR_PUNCTUATION = 23; public static final byte OTHER_PUNCTUATION = 24; public static final byte MATH_SYMBOL = 25; public static final byte CURRENCY_SYMBOL = 26; public static final byte MODIFIER_SYMBOL = 27; public static final byte OTHER_SYMBOL = 28; public static final byte INITIAL_QUOTE_PUNCTUATION = 29; public static final byte FINAL_QUOTE_PUNCTUATION = 30; public static final int MAX_VALUE = 65535; private static final int TYPE_MASK = 0x1F; private static final int NO_BREAK_MASK = 0x20; static byte[] types = totalcross.sys.Vm.getFile("totalcross/chartypes.bin"); public static int getType(int i) { return types[i]; } public static int getType(char i) { return types[i]; } public static boolean isDigit(char i) { return types[i] == DECIMAL_DIGIT_NUMBER; } public static char toLowerCase(char c) { return Convert.toLowerCase(c); } public static char toUpperCase(char c) { return Convert.toUpperCase(c); } public static char toTitleCase(char ch) { return Convert.toTitleCase(ch); } public static boolean isWhitespace(char ch) { int codePoint = ch; int attr = types[codePoint]; return ((((1 << (attr & TYPE_MASK)) & ((1 << SPACE_SEPARATOR) | (1 << LINE_SEPARATOR) | (1 << PARAGRAPH_SEPARATOR))) != 0) && (attr & NO_BREAK_MASK) == 0) || (codePoint <= '\u001F' && ((1 << codePoint) & ((1 << '\t') | (1 << '\n') | (1 << '\u000B') | (1 << '\u000C') | (1 << '\r') | (1 << '\u001C') | (1 << '\u001D') | (1 << '\u001E') | (1 << '\u001F'))) != 0); } public static boolean isJavaIdentifierStart(char ch) { int codePoint = ch; return ((1 << types[codePoint]) & ((1 << UPPERCASE_LETTER) | (1 << LOWERCASE_LETTER) | (1 << TITLECASE_LETTER) | (1 << MODIFIER_LETTER) | (1 << OTHER_LETTER) | (1 << LETTER_NUMBER) | (1 << CURRENCY_SYMBOL) | (1 << CONNECTOR_PUNCTUATION))) != 0; } public static boolean isJavaIdentifierPart(char ch) { int codePoint = ch; int category = types[codePoint]; return ((1 << category) & ((1 << UPPERCASE_LETTER) | (1 << LOWERCASE_LETTER) | (1 << TITLECASE_LETTER) | (1 << MODIFIER_LETTER) | (1 << OTHER_LETTER) | (1 << NON_SPACING_MARK) | (1 << COMBINING_SPACING_MARK) | (1 << DECIMAL_DIGIT_NUMBER) | (1 << LETTER_NUMBER) | (1 << CURRENCY_SYMBOL) | (1 << CONNECTOR_PUNCTUATION) | (1 << FORMAT))) != 0 || (category == CONTROL && isIdentifierIgnorable(ch)); } public static boolean isIdentifierIgnorable(char ch) { int codePoint = ch; if ((codePoint >= 0 && codePoint <= 0x0008) || (codePoint >= 0x000E && codePoint <= 0x001B) || (codePoint >= 0x007F && codePoint <= 0x009F) || types[codePoint] == FORMAT) return true; return false; } public static boolean isLowerCase(int codePoint) { return getType(codePoint) == LOWERCASE_LETTER; } public static boolean isUpperCase(int codePoint) { return getType(codePoint) == UPPERCASE_LETTER; } public static boolean isLowerCase(char codePoint) { return getType(codePoint) == LOWERCASE_LETTER; } public static boolean isUpperCase(char codePoint) { return getType(codePoint) == UPPERCASE_LETTER; } public static boolean isLetterOrDigit(char codePoint) { return ((1 << getType(codePoint)) & ((1 << UPPERCASE_LETTER) | (1 << LOWERCASE_LETTER) | (1 << TITLECASE_LETTER) | (1 << MODIFIER_LETTER) | (1 << OTHER_LETTER) | (1 << DECIMAL_DIGIT_NUMBER))) != 0; } }