public static boolean isWord(final int code) { // letter, digit, or '_' return (1 << Character.getType(code) & CharacterType.WORD_MASK) != 0; }
/** * @see <a href="http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt">http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt</a> */ public static boolean isCodeCType(final int code, final int ctype) { int type; switch (ctype) { case CharacterType.NEWLINE: return isNewLine(code); case CharacterType.ALPHA: return (1 << Character.getType(code) & CharacterType.ALPHA_MASK) != 0; case CharacterType.BLANK: return code == 0x09 || Character.getType(code) == Character.SPACE_SEPARATOR; case CharacterType.CNTRL: type = Character.getType(code); return (1 << type & CharacterType.CNTRL_MASK) != 0 || type == Character.UNASSIGNED; case CharacterType.DIGIT: return EncodingHelper.isDigit(code); case CharacterType.GRAPH: switch (code) { case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: return false; default: type = Character.getType(code); return (1 << type & CharacterType.GRAPH_MASK) == 0 && type != Character.UNASSIGNED; } case CharacterType.LOWER: return Character.isLowerCase(code); case CharacterType.PRINT: type = Character.getType(code); return (1 << type & CharacterType.PRINT_MASK) == 0 && type != Character.UNASSIGNED; case CharacterType.PUNCT: return (1 << Character.getType(code) & CharacterType.PUNCT_MASK) != 0; case CharacterType.SPACE: // ECMA 7.2 and 7.3 switch (code) { case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: return true; default: // true if Unicode separator or BOM return (1 << Character.getType(code) & CharacterType.SPACE_MASK) != 0 || code == 0xfeff; } case CharacterType.UPPER: return Character.isUpperCase(code); case CharacterType.XDIGIT: return EncodingHelper.isXDigit(code); case CharacterType.WORD: return (1 << Character.getType(code) & CharacterType.WORD_MASK) != 0; case CharacterType.ALNUM: return (1 << Character.getType(code) & CharacterType.ALNUM_MASK) != 0; case CharacterType.ASCII: return code < 0x80; default: throw new RuntimeException("illegal character type: " + ctype); } }
/** * @see <a href="http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt">http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt</a> * * @param code code * @param ctype ctype * * @return isCodeCType */ public static boolean isCodeCType(final int code, final int ctype) { int type; switch (ctype) { case CharacterType.NEWLINE: return isNewLine(code); case CharacterType.ALPHA: return (1 << Character.getType(code) & CharacterType.ALPHA_MASK) != 0; case CharacterType.BLANK: return code == 0x09 || Character.getType(code) == Character.SPACE_SEPARATOR; case CharacterType.CNTRL: type = Character.getType(code); return (1 << type & CharacterType.CNTRL_MASK) != 0 || type == Character.UNASSIGNED; case CharacterType.DIGIT: return EncodingHelper.isDigit(code); case CharacterType.GRAPH: switch (code) { case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: return false; default: type = Character.getType(code); return (1 << type & CharacterType.GRAPH_MASK) == 0 && type != Character.UNASSIGNED; } case CharacterType.LOWER: return Character.isLowerCase(code); case CharacterType.PRINT: type = Character.getType(code); return (1 << type & CharacterType.PRINT_MASK) == 0 && type != Character.UNASSIGNED; case CharacterType.PUNCT: return (1 << Character.getType(code) & CharacterType.PUNCT_MASK) != 0; case CharacterType.SPACE: // ECMA 7.2 and 7.3 switch (code) { case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: return true; default: // true if Unicode separator or BOM or U+180E (see JDK-8138758) return (1 << Character.getType(code) & CharacterType.SPACE_MASK) != 0 || code == 0xfeff || code == 0x180e; } case CharacterType.UPPER: return Character.isUpperCase(code); case CharacterType.XDIGIT: return EncodingHelper.isXDigit(code); case CharacterType.WORD: return (1 << Character.getType(code) & CharacterType.WORD_MASK) != 0; case CharacterType.ALNUM: return (1 << Character.getType(code) & CharacterType.ALNUM_MASK) != 0; case CharacterType.ASCII: return code < 0x80; default: throw new RuntimeException("illegal character type: " + ctype); } }
/** * @see <a href="http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt">http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt</a> * * @param code code * @param ctype ctype * * @return isCodeCType */ public static boolean isCodeCType(final int code, final int ctype) { int type; switch (ctype) { case CharacterType.NEWLINE: return isNewLine(code); case CharacterType.ALPHA: return (1 << Character.getType(code) & CharacterType.ALPHA_MASK) != 0; case CharacterType.BLANK: return code == 0x09 || Character.getType(code) == Character.SPACE_SEPARATOR; case CharacterType.CNTRL: type = Character.getType(code); return (1 << type & CharacterType.CNTRL_MASK) != 0 || type == Character.UNASSIGNED; case CharacterType.DIGIT: return EncodingHelper.isDigit(code); case CharacterType.GRAPH: switch (code) { case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: return false; default: type = Character.getType(code); return (1 << type & CharacterType.GRAPH_MASK) == 0 && type != Character.UNASSIGNED; } case CharacterType.LOWER: return Character.isLowerCase(code); case CharacterType.PRINT: type = Character.getType(code); return (1 << type & CharacterType.PRINT_MASK) == 0 && type != Character.UNASSIGNED; case CharacterType.PUNCT: return (1 << Character.getType(code) & CharacterType.PUNCT_MASK) != 0; case CharacterType.SPACE: // ECMA 7.2 and 7.3 switch (code) { case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: return true; default: // true if Unicode separator or BOM return (1 << Character.getType(code) & CharacterType.SPACE_MASK) != 0 || code == 0xfeff; } case CharacterType.UPPER: return Character.isUpperCase(code); case CharacterType.XDIGIT: return EncodingHelper.isXDigit(code); case CharacterType.WORD: return (1 << Character.getType(code) & CharacterType.WORD_MASK) != 0; case CharacterType.ALNUM: return (1 << Character.getType(code) & CharacterType.ALNUM_MASK) != 0; case CharacterType.ASCII: return code < 0x80; default: throw new RuntimeException("illegal character type: " + ctype); } }
public static boolean isWord(int code) { // letter, digit, or '_' return (1 << Character.getType(code) & CharacterType.WORD_MASK) != 0; }
/** * @see <a href="http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt">http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt</a> */ public static boolean isCodeCType(int code, int ctype) { int type; switch (ctype) { case CharacterType.NEWLINE: return isNewLine(code); case CharacterType.ALPHA: return (1 << Character.getType(code) & CharacterType.ALPHA_MASK) != 0; case CharacterType.BLANK: return code == 0x09 || Character.getType(code) == Character.SPACE_SEPARATOR; case CharacterType.CNTRL: type = Character.getType(code); return (1 << type & CharacterType.CNTRL_MASK) != 0 || type == Character.UNASSIGNED; case CharacterType.DIGIT: return EncodingHelper.isDigit(code); case CharacterType.GRAPH: switch (code) { case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: return false; default: type = Character.getType(code); return (1 << type & CharacterType.GRAPH_MASK) == 0 && type != Character.UNASSIGNED; } case CharacterType.LOWER: return Character.isLowerCase(code); case CharacterType.PRINT: type = Character.getType(code); return (1 << type & CharacterType.PRINT_MASK) == 0 && type != Character.UNASSIGNED; case CharacterType.PUNCT: return (1 << Character.getType(code) & CharacterType.PUNCT_MASK) != 0; case CharacterType.SPACE: // ECMA 7.2 and 7.3 switch (code) { case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: return true; default: // true if Unicode separator or BOM return (1 << Character.getType(code) & CharacterType.SPACE_MASK) != 0 || code == 0xfeff; } case CharacterType.UPPER: return Character.isUpperCase(code); case CharacterType.XDIGIT: return EncodingHelper.isXDigit(code); case CharacterType.WORD: return (1 << Character.getType(code) & CharacterType.WORD_MASK) != 0; case CharacterType.ALNUM: return (1 << Character.getType(code) & CharacterType.ALNUM_MASK) != 0; case CharacterType.ASCII: return code < 0x80; default: throw new RuntimeException("illegal character type: " + ctype); } }
protected final TokenType fetchTokenInCC() { if (!left()) { token.type = TokenType.EOT; return token.type; } fetch(); token.type = TokenType.CHAR; token.setC(c); token.escaped = false; if (c == ']') { token.type = TokenType.CC_CLOSE; } else if (c == '-') { token.type = TokenType.CC_RANGE; } else if (c == syntax.metaCharTable.esc) { if (!syntax.backSlashEscapeInCC()) return token.type; if (!left()) { throw new SyntaxException(ERR_END_PATTERN_AT_ESCAPE); } fetch(); token.escaped = true; token.setC(c); switch (c) { case 'w': fetchTokenInCCFor_charType(false, Config.NON_UNICODE_SDW ? CharacterType.W : CharacterType.WORD); break; case 'W': fetchTokenInCCFor_charType(true, Config.NON_UNICODE_SDW ? CharacterType.W : CharacterType.WORD); break; case 'd': fetchTokenInCCFor_charType(false, Config.NON_UNICODE_SDW ? CharacterType.D : CharacterType.DIGIT); break; case 'D': fetchTokenInCCFor_charType(true, Config.NON_UNICODE_SDW ? CharacterType.D : CharacterType.DIGIT); break; case 's': fetchTokenInCCFor_charType(false, Config.NON_UNICODE_SDW ? CharacterType.S : CharacterType.SPACE); break; case 'S': fetchTokenInCCFor_charType(true, Config.NON_UNICODE_SDW ? CharacterType.S : CharacterType.SPACE); break; case 'h': if (syntax.op2EscHXDigit()) fetchTokenInCCFor_charType(false, CharacterType.XDIGIT); break; case 'H': if (syntax.op2EscHXDigit()) fetchTokenInCCFor_charType(true, CharacterType.XDIGIT); break; case 'x': fetchTokenInCCFor_x(); break; case 'u': fetchTokenInCCFor_u(); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': fetchTokenInCCFor_digit(); break; default: unfetch(); int num = fetchEscapedValue(); if (token.getC() != num) { token.setCode(num); token.type = TokenType.CODE_POINT; } break; } // switch } else if (c == '&') { fetchTokenInCCFor_and(); } return token.type; }