@Override protected int indexOf(final String string, final String contains, final Mode mode, final InputInfo info) throws QueryException { if(!(collator instanceof RuleBasedCollator)) throw CHARCOLL.get(info); final RuleBasedCollator rbc = (RuleBasedCollator) collator; final CollationElementIterator iterS = rbc.getCollationElementIterator(string); final CollationElementIterator iterC = rbc.getCollationElementIterator(contains); final int elemC = next(iterC); if(elemC == -1) return 0; final int offC = iterC.getOffset(); do { // find first equal character for(int elemS; (elemS = next(iterS)) != elemC;) { if(elemS == -1 || mode == Mode.STARTS_WITH) return -1; } final int offS = iterS.getOffset(); if(startsWith(iterS, iterC)) { if(mode == Mode.INDEX_AFTER) { return iterS.getOffset(); } else if(mode == Mode.ENDS_WITH) { if(next(iterS) == -1) return offS - 1; } else { return offS - 1; } } iterS.setOffset(offS); iterC.setOffset(offC); } while(true); }
@Override protected int indexOf(final String string, final String contains, final Mode mode, final InputInfo info) throws QueryException { if(!(collator instanceof RuleBasedCollator)) throw CHARCOLL.get(info); final RuleBasedCollator rbc = (RuleBasedCollator) collator; final CollationElementIterator iterS = rbc.getCollationElementIterator(string); final CollationElementIterator iterC = rbc.getCollationElementIterator(contains); final int elemC = next(iterC); if(elemC == -1) return 0; final int offC = iterC.getOffset(); do { // find first equal character for(int elemS; (elemS = next(iterS)) != elemC;) { if(elemS == -1 || mode == Mode.STARTS_WITH) return -1; } final int offS = iterS.getOffset(); if(startsWith(iterS, iterC)) { if(mode == Mode.INDEX_AFTER) { return iterS.getOffset(); } else if(mode == Mode.ENDS_WITH) { if(next(iterS) == -1) return offS - 1; } else { return offS - 1; } } iterS.setOffset(offS); iterC.setOffset(offC); } while(true); }
if (sOrder == tOrder) { try { toffset = targetCursor.getOffset(); } catch (NoSuchMethodError ex) { if (pSOrder == pTOrder) { try { toffset = targetCursor.getOffset(); } catch (NoSuchMethodError ex2) { toffset = targetCursor.getOffset(); debug("Strength is secondary pSOrder === 0"); continue startSearchForFirstMatch; toffset = targetCursor.getOffset(); debug("Strength is secondary - pTOrder == 0"); continue startSearchForFirstMatch; toffset = targetCursor.getOffset(); debug("Order are ignorable"); continue startSearchForFirstMatch; toffset = targetCursor.getOffset(); debug("Secondary Difference"); continue startSearchForFirstMatch; toffset = targetCursor.getOffset(); debug("Tertiary difference"); continue startSearchForFirstMatch;