map[index++] = lc; map[index++] = LOWER_CASE_MATCH; int[] lcMap = getMapping(lc); if (lcMap != null) { map = updateMap(i, map, lc, lcMap, LOWER_CASE_MATCH); map = expandMap(map, 2); int[] ucMap = getMapping(uc); if (ucMap != null) { map = updateMap(i, map, uc, ucMap, UPPER_CASE_MATCH); set(i, map);
private static int[] updateMap(int codePoint, int[] codePointMap, int ciCodePoint, int[] ciCodePointMap, int matchType) { for (int i=0; i<ciCodePointMap.length; i+=2) { int c = ciCodePointMap[i]; int[] cMap = getMapping(c); if (cMap != null) { if (contains(cMap, ciCodePoint, matchType)) { if (!contains(cMap, codePoint)) { cMap = expandAndAdd(cMap, codePoint, matchType); set(c, cMap); } if (!contains(codePointMap, c)) { codePointMap = expandAndAdd(codePointMap, c,matchType); } } } } if (!contains(ciCodePointMap, codePoint)) { ciCodePointMap = expandAndAdd(ciCodePointMap, codePoint, matchType); set(ciCodePoint, ciCodePointMap); } return codePointMap; }
static protected final void addCaseInsensitiveCharRange(RangeToken tok, int start, int end) { int[] caseMap; int r1, r2; if (start <= end) { r1 = start; r2 = end; } else { r1 = end; r2 = start; } tok.addRange(r1, r2); for (int ch = r1; ch <= r2; ch++) { caseMap = CaseInsensitiveMap.get(ch); if (caseMap != null) { for (int i=0; i<caseMap.length; i+=2) { tok.addRange(caseMap[i], caseMap[i]); } } } } }
/** * Return a list of code point characters (not including the input value) * that can be substituted in a case insensitive match */ static public int[] get(int codePoint) { return (codePoint < 0x10000) ? getMapping(codePoint) : null; }
static protected final void addCaseInsensitiveChar(RangeToken tok, int c) { final int[] caseMap = CaseInsensitiveMap.get(c); tok.addRange(c, c); if (caseMap != null) { for (int i=0; i<caseMap.length; i+=2) { tok.addRange(caseMap[i], caseMap[i]); } } }