This is an automated email from the git hooks/post-receive script. henrich pushed a commit to branch debian/sid in repository jruby-joni.
commit 8c78f49790267400f03818c882ef579f3af6ad9b Author: Marcin Mielzynski <[email protected]> Date: Sun Feb 12 15:54:11 2012 +0100 Sync joni with oniguruma 5.9.2 --- src/org/joni/Analyser.java | 2 +- src/org/joni/SearchAlgorithm.java | 255 +++++++++++++++++++------------------- 2 files changed, 130 insertions(+), 127 deletions(-) diff --git a/src/org/joni/Analyser.java b/src/org/joni/Analyser.java index a3b1bec..6b23832 100644 --- a/src/org/joni/Analyser.java +++ b/src/org/joni/Analyser.java @@ -2090,7 +2090,7 @@ final class Analyser extends Parser { if (nopt.exb.length > 0) { if (nopt.exb.reachEnd) { int i; - for (i=1; i<qn.lower && !opt.exb.isFull(); i++) { + for (i = 2; i <= qn.lower && !opt.exb.isFull(); i++) { opt.exb.concat(nopt.exb, enc); } if (i < qn.lower) { diff --git a/src/org/joni/SearchAlgorithm.java b/src/org/joni/SearchAlgorithm.java index 36bf877..cdc5ff7 100644 --- a/src/org/joni/SearchAlgorithm.java +++ b/src/org/joni/SearchAlgorithm.java @@ -8,44 +8,44 @@ public abstract class SearchAlgorithm { public abstract String getName(); public abstract int search(Regex regex, byte[]text, int textP, int textEnd, int textRange); public abstract int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_); - + public static final SearchAlgorithm NONE = new SearchAlgorithm() { public final String getName() { return "NONE"; } - + public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { return textP; } - + public final int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_) { return textP; } - + }; - + public static final SearchAlgorithm SLOW = new SearchAlgorithm() { - + public final String getName() { return "EXACT"; } - + public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { Encoding enc = regex.enc; byte[]target = regex.exact; int targetP = regex.exactP; int targetEnd = regex.exactEnd; - - + + int end = textEnd; end -= targetEnd - targetP - 1; - + if (end > textRange) end = textRange; - + int s = textP; - + while (s < end) { if (text[s] == target[targetP]) { int p = s + 1; @@ -54,30 +54,30 @@ public abstract class SearchAlgorithm { if (target[t] != text[p++]) break; t++; } - + if (t == targetEnd) return s; } s += enc.length(text, s, textEnd); } - - return -1; + + return -1; } - + public final int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_) { Encoding enc = regex.enc; byte[]target = regex.exact; int targetP = regex.exactP; - int targetEnd = regex.exactEnd; - + int targetEnd = regex.exactEnd; + int s = textEnd; s -= targetEnd - targetP; - + if (s > textStart) { s = textStart; } else { s = enc.leftAdjustCharHead(text, adjustText, s, textEnd); } - + while (s >= textP) { if (text[s] == target[targetP]) { int p = s + 1; @@ -90,28 +90,28 @@ public abstract class SearchAlgorithm { } s = enc.prevCharHead(text, adjustText, s, textEnd); } - return -1; + return -1; } }; public static final SearchAlgorithm SLOW_SB = new SearchAlgorithm() { - + public final String getName() { return "EXACT_SB"; } - + public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { byte[]target = regex.exact; int targetP = regex.exactP; int targetEnd = regex.exactEnd; - + int end = textEnd; end -= targetEnd - targetP - 1; - + if (end > textRange) end = textRange; - + int s = textP; - + while (s < end) { if (text[s] == target[targetP]) { int p = s + 1; @@ -120,25 +120,25 @@ public abstract class SearchAlgorithm { if (target[t] != text[p++]) break; t++; } - + if (t == targetEnd) return s; } s++; } - - return -1; + + return -1; } - + public final int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_) { byte[]target = regex.exact; int targetP = regex.exactP; - int targetEnd = regex.exactEnd; - + int targetEnd = regex.exactEnd; + int s = textEnd; s -= targetEnd - targetP; - + if (s > textStart) s = textStart; - + while (s >= textP) { if (text[s] == target[targetP]) { int p = s + 1; @@ -152,11 +152,11 @@ public abstract class SearchAlgorithm { //s = s <= adjustText ? -1 : s - 1; s--; } - return -1; + return -1; } }; - - + + public static final class SLOW_IC extends SearchAlgorithm { private final byte[]buf = new byte[Config.ENC_MBC_CASE_FOLD_MAXLEN]; private final IntHolder holder = new IntHolder(); @@ -167,50 +167,50 @@ public abstract class SearchAlgorithm { this.caseFoldFlag = regex.caseFoldFlag; this.enc = regex.enc; } - + public final String getName() { return "EXACT_IC"; - } - + } + public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { byte[]target = regex.exact; int targetP = regex.exactP; int targetEnd = regex.exactEnd; - + int end = textEnd; end -= targetEnd - targetP - 1; - + if (end > textRange) end = textRange; int s = textP; - + while (s < end) { if (lowerCaseMatch(target, targetP, targetEnd, text, s, textEnd)) return s; s += enc.length(text, s, textEnd); } return -1; } - + public final int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_) { byte[]target = regex.exact; int targetP = regex.exactP; int targetEnd = regex.exactEnd; - + int s = textEnd; s -= targetEnd - targetP; - + if (s > textStart) { s = textStart; } else { s = enc.leftAdjustCharHead(text, adjustText, s, textEnd); } - + while (s >= textP) { if (lowerCaseMatch(target, targetP, targetEnd, text, s, textEnd)) return s; s = enc.prevCharHead(text, adjustText, s, textEnd); } - return -1; + return -1; } - + private boolean lowerCaseMatch(byte[]t, int tP, int tEnd, byte[]bytes, int p, int end) { @@ -222,7 +222,7 @@ public abstract class SearchAlgorithm { } else { int q = 0; while (lowlen > 0) { - if (t[tP++] != buf[q++]) return false; + if (t[tP++] != buf[q++]) return false; lowlen--; } } @@ -235,20 +235,20 @@ public abstract class SearchAlgorithm { public final String getName() { return "EXACT_IC_SB"; - } - - public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { + } + + public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { final byte[]toLowerTable = regex.enc.toLowerCaseTable(); byte[]target = regex.exact; int targetP = regex.exactP; int targetEnd = regex.exactEnd; - + int end = textEnd; end -= targetEnd - targetP - 1; - + if (end > textRange) end = textRange; int s = textP; - + while (s < end) { if (target[targetP] == toLowerTable[text[s] & 0xff]) { int p = s + 1; @@ -257,25 +257,25 @@ public abstract class SearchAlgorithm { if (target[t] != toLowerTable[text[p++] & 0xff]) break; t++; } - + if (t == targetEnd) return s; } - s++; + s++; } return -1; } - + public final int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_) { final byte[]toLowerTable = regex.enc.toLowerCaseTable(); byte[]target = regex.exact; int targetP = regex.exactP; int targetEnd = regex.exactEnd; - + int s = textEnd; s -= targetEnd - targetP; - + if (s > textStart) s = textStart; - + while (s >= textP) { if (target[targetP] == toLowerTable[text[s] & 0xff]) { int p = s + 1; @@ -289,76 +289,80 @@ public abstract class SearchAlgorithm { //s = s <= adjustText ? -1 : s - 1; s--; } - return -1; + return -1; } - }; - + }; + public static final SearchAlgorithm BM = new SearchAlgorithm() { - + public final String getName() { return "EXACT_BM"; - } - + } + public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { byte[]target = regex.exact; int targetP = regex.exactP; - int targetEnd = regex.exactEnd; - + int targetEnd = regex.exactEnd; + int end = textRange + (targetEnd - targetP) - 1; if (end > textEnd) end = textEnd; - + int tail = targetEnd - 1; int s = textP + (targetEnd - targetP) - 1; - + if (regex.intMap == null) { while (s < end) { int p = s; int t = tail; - while (t >= targetP && text[p] == target[t]) { + + while (text[p] == target[t]) { + if (t == targetP) return p; p--; t--; } - if (t < targetP) return p + 1; + s += regex.map[text[s] & 0xff]; } } else { /* see int_map[] */ while (s < end) { int p = s; int t = tail; - while (t >= targetP && text[p] == target[t]) { + + while (text[p] == target[t]) { + if (t == targetP) return p; p--; t--; } - if (t < targetP) return p + 1; + s += regex.intMap[text[s] & 0xff]; } } - return -1; + return -1; } - + private static final int BM_BACKWARD_SEARCH_LENGTH_THRESHOLD = 100; - + public final int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_) { Encoding enc = regex.enc; byte[]target = regex.exact; int targetP = regex.exactP; int targetEnd = regex.exactEnd; - + if (regex.intMapBackward == null) { if (s_ - range_ < BM_BACKWARD_SEARCH_LENGTH_THRESHOLD) { // goto exact_method; return SLOW.searchBackward(regex, text, textP, adjustText, textEnd, textStart, s_, range_); } - setBmBackwardSkip(regex, target, targetP, targetEnd); + setBmBackwardSkip(regex, target, targetP, targetEnd); } - + int s = textEnd - (targetEnd - targetP); - + if (textStart < s) { s = textStart; } else { s = enc.leftAdjustCharHead(text, adjustText, s, textEnd); } - + while (s >= textP) { int p = s; int t = targetP; @@ -366,14 +370,14 @@ public abstract class SearchAlgorithm { p++; t++; } if (t == targetEnd) return s; - + s -= regex.intMapBackward[text[s] & 0xff]; s = enc.leftAdjustCharHead(text, adjustText, s, textEnd); } - return -1; + return -1; } - - + + private void setBmBackwardSkip(Regex regex, byte[]bytes, int p, int end) { int[] skip; if (regex.intMapBackward == null) { @@ -382,52 +386,51 @@ public abstract class SearchAlgorithm { } else { skip = regex.intMapBackward; } - + int len = end - p; - + for (int i=0; i<Config.CHAR_TABLE_SIZE; i++) skip[i] = len; for (int i=len-1; i>0; i--) skip[bytes[i] & 0xff] = i; - } + } }; - + public static final SearchAlgorithm BM_NOT_REV = new SearchAlgorithm() { - + public final String getName() { return "EXACT_BM_NOT_REV"; - } - + } + public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { Encoding enc = regex.enc; byte[]target = regex.exact; int targetP = regex.exactP; - int targetEnd = regex.exactEnd; - + int targetEnd = regex.exactEnd; + int tail = targetEnd - 1; int tlen1 = tail - targetP; int end = textRange; - + if (Config.DEBUG_SEARCH) { Config.log.println("bm_search_notrev: "+ "text: " + textP + ", text_end: " + textEnd + ", text_range: " + textRange); } - + if (end + tlen1 > textEnd) end = textEnd - tlen1; - + int s = textP; - + if (regex.intMap == null) { while (s < end) { int p, se; p = se = s + tlen1; int t = tail; - while (t >= targetP && text[p] == target[t]) { + while (text[p] == target[t]) { + if (t == targetP) return s; p--; t--; } - - if (t < targetP) return s; - + int skip = regex.map[text[se] & 0xff]; t = s; do { @@ -439,35 +442,35 @@ public abstract class SearchAlgorithm { int p, se; p = se = s + tlen1; int t = tail; - while (t >= targetP && text[p] == target[t]) { + + while (text[p] == target[t]) { + if (t == targetP) return s; p--; t--; } - - if (t < targetP) return s; - + int skip = regex.intMap[text[se] & 0xff]; t = s; do { s += enc.length(text, s, textEnd); } while ((s - t) < skip && s < end); - + } } - return -1; + return -1; } - + public final int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_) { return BM.searchBackward(regex, text, textP, adjustText, textEnd, textStart, s_, range_); } }; - - + + public static final SearchAlgorithm MAP = new SearchAlgorithm() { public final String getName() { return "MAP"; - } - + } + // TODO: check 1.9 inconsistent calls to map_search public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { Encoding enc = regex.enc; @@ -480,13 +483,13 @@ public abstract class SearchAlgorithm { } return -1; } - + public final int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_) { Encoding enc = regex.enc; byte[]map = regex.map; int s = textStart; - if (s >= textEnd) s = textEnd - 1; // multibyte safe ? + if (s >= textEnd) s = textEnd - 1; // multibyte safe ? while (s >= textP) { if (map[text[s] & 0xff] != 0) return s; s = enc.prevCharHead(text, adjustText, s, textEnd); @@ -499,30 +502,30 @@ public abstract class SearchAlgorithm { public final String getName() { return "MAP_SB"; - } - + } + public final int search(Regex regex, byte[]text, int textP, int textEnd, int textRange) { byte[]map = regex.map; int s = textP; - + while (s < textRange) { if (map[text[s] & 0xff] != 0) return s; s++; } return -1; } - + public final int searchBackward(Regex regex, byte[]text, int textP, int adjustText, int textEnd, int textStart, int s_, int range_) { byte[]map = regex.map; int s = textStart; - if (s >= textEnd) s = textEnd - 1; + if (s >= textEnd) s = textEnd - 1; while (s >= textP) { if (map[text[s] & 0xff] != 0) return s; s--; } return -1; } - }; - + }; + } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jruby-joni.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

