@Override public Reader create(Reader reader) { return new ICUNormalizer2CharFilter(reader, normalizer); } }
private void recordOffsetDiff(int inputLength, int outputLength) { if (inputLength == outputLength) { charCount += outputLength; return; } final int diff = inputLength - outputLength; final int cumuDiff = getLastCumulativeDiff(); if (diff < 0) { for (int i = 1; i <= -diff; ++i) { addOffCorrectMap(charCount + i, cumuDiff - i); } } else { addOffCorrectMap(charCount + outputLength, cumuDiff + diff); } charCount += outputLength; }
@Override public int read(char[] cbuf, int off, int len) throws IOException { if (off < 0) throw new IllegalArgumentException("off < 0"); if (off >= cbuf.length) throw new IllegalArgumentException("off >= cbuf.length"); if (len <= 0) throw new IllegalArgumentException("len <= 0"); while (!inputFinished || inputBuffer.length() > 0 || resultBuffer.length() > 0) { int retLen; if (resultBuffer.length() > 0) { retLen = outputFromResultBuffer(cbuf, off, len); if (retLen > 0) { return retLen; } } int resLen = readAndNormalizeFromInput(); if (resLen > 0) { retLen = outputFromResultBuffer(cbuf, off, len); if (retLen > 0) { return retLen; } } readInputToBuffer(); } return -1; }
private int readAndNormalizeFromInput() { if (inputBuffer.length() <= 0) { afterQuickCheckYes = false; return 0; } if (!afterQuickCheckYes) { int resLen = readFromInputWhileSpanQuickCheckYes(); afterQuickCheckYes = true; if (resLen > 0) return resLen; } int resLen = readFromIoNormalizeUptoBoundary(); if(resLen > 0){ afterQuickCheckYes = false; } return resLen; }
private int readFromIoNormalizeUptoBoundary() { // if there's no buffer to normalize, return 0 if (inputBuffer.length() <= 0) { return 0; } boolean foundBoundary = false; final int bufLen = inputBuffer.length(); while (checkedInputBoundary <= bufLen - 1) { int charLen = Character.charCount(inputBuffer.codePointAt(checkedInputBoundary)); checkedInputBoundary += charLen; if (checkedInputBoundary < bufLen && normalizer.hasBoundaryBefore(inputBuffer .codePointAt(checkedInputBoundary))) { foundBoundary = true; break; } } if (!foundBoundary && checkedInputBoundary >= bufLen && inputFinished) { foundBoundary = true; checkedInputBoundary = bufLen; } if (!foundBoundary) { return 0; } return normalizeInputUpto(checkedInputBoundary); }
@Override public Reader create(Reader reader) { return new ICUNormalizer2CharFilter(reader); } }));
@Override public Reader create(Reader reader) { return new ICUNormalizer2CharFilter(reader, normalizer); } }
@Override public Reader create(Reader input) { return new ICUNormalizer2CharFilter(input, normalizer); }