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 515453ea5384f62c97d9173c202c5f57c1b00206 Author: Hideki Yamane <[email protected]> Date: Sat Sep 13 00:14:47 2014 +0900 Imported Upstream version 2.1.2 --- pom.xml | 2 +- src/org/joni/Analyser.java | 4 ++-- src/org/joni/StackMachine.java | 20 ++++++++++---------- src/org/joni/constants/AnchorType.java | 27 +++++++++++++++++---------- test/org/joni/test/TestA.java | 3 +++ test/org/joni/test/TestU.java | 31 +++++++++++++++++++++++++++++++ 6 files changed, 64 insertions(+), 23 deletions(-) diff --git a/pom.xml b/pom.xml index 3d4352d..2b91583 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ <groupId>org.jruby.joni</groupId> <artifactId>joni</artifactId> <packaging>jar</packaging> - <version>2.1.0</version> + <version>2.1.2</version> <name>Joni</name> <description> Java port of Oniguruma: http://www.geocities.jp/kosako3/oniguruma diff --git a/src/org/joni/Analyser.java b/src/org/joni/Analyser.java index 9665ba6..9aa9acc 100644 --- a/src/org/joni/Analyser.java +++ b/src/org/joni/Analyser.java @@ -1461,8 +1461,8 @@ final class Analyser extends Parser { sn.set(sbuf, 0, sp); return; } - sp++; } + sp += len; } } @@ -1912,7 +1912,7 @@ final class Analyser extends Parser { break; case AnchorType.LOOK_BEHIND_NOT: - if (checkTypeTree(an.target, NodeType.ALLOWED_IN_LB, EncloseType.ALLOWED_IN_LB, AnchorType.ALLOWED_IN_LB)) newSyntaxException(ERR_INVALID_LOOK_BEHIND_PATTERN); + if (checkTypeTree(an.target, NodeType.ALLOWED_IN_LB, EncloseType.ALLOWED_IN_LB_NOT, AnchorType.ALLOWED_IN_LB_NOT)) newSyntaxException(ERR_INVALID_LOOK_BEHIND_PATTERN); node = setupLookBehind(node); if (node.getType() != NodeType.ANCHOR) continue restart; setupTree(((AnchorNode)node).target, (state | IN_NOT)); diff --git a/src/org/joni/StackMachine.java b/src/org/joni/StackMachine.java index a5e51a4..7b16780 100644 --- a/src/org/joni/StackMachine.java +++ b/src/org/joni/StackMachine.java @@ -66,19 +66,19 @@ abstract class StackMachine extends Matcher implements StackType { } static final ThreadLocal<WeakReference<StackEntry[]>> stacks - = new ThreadLocal<WeakReference<StackEntry[]>>() { - @Override - protected WeakReference<StackEntry[]> initialValue() { - return new WeakReference<StackEntry[]>(allocateStack()); - } - }; + = new ThreadLocal<WeakReference<StackEntry[]>>(); private static StackEntry[] fetchStack() { WeakReference<StackEntry[]> ref = stacks.get(); - StackEntry[] stack = ref.get(); - if (stack == null) { - ref = new WeakReference<StackEntry[]>(stack = allocateStack()); - stacks.set(ref); + StackEntry[] stack; + if (ref == null) { + stacks.set( new WeakReference<StackEntry[]>(stack = allocateStack()) ); + } + else { + stack = ref.get(); + if (stack == null) { + stacks.set( new WeakReference<StackEntry[]>(stack = allocateStack()) ); + } } return stack; } diff --git a/src/org/joni/constants/AnchorType.java b/src/org/joni/constants/AnchorType.java index 5d7336d..f297577 100644 --- a/src/org/joni/constants/AnchorType.java +++ b/src/org/joni/constants/AnchorType.java @@ -42,17 +42,24 @@ public interface AnchorType { final int ANYCHAR_STAR_MASK = (ANYCHAR_STAR | ANYCHAR_STAR_ML); final int END_BUF_MASK = (END_BUF | SEMI_END_BUF); - final int ALLOWED_IN_LB = ( LOOK_BEHIND | - BEGIN_LINE | - END_LINE | - BEGIN_BUF | - BEGIN_POSITION ); + final int KEEP = (1<<16); - final int ALLOWED_IN_LB_NOT = ( LOOK_BEHIND | - LOOK_BEHIND_NOT | - BEGIN_LINE | - END_LINE | + final int ALLOWED_IN_LB = ( END_LINE | BEGIN_BUF | - BEGIN_POSITION ); + BEGIN_POSITION | + KEEP | + WORD_BOUND | + NOT_WORD_BOUND | + WORD_BEGIN | + WORD_END ); + + final int ALLOWED_IN_LB_NOT = ( END_LINE | + BEGIN_BUF | + BEGIN_POSITION | + KEEP | + WORD_BOUND | + NOT_WORD_BOUND | + WORD_BEGIN | + WORD_END ); } diff --git a/test/org/joni/test/TestA.java b/test/org/joni/test/TestA.java index aee59ae..d9403da 100644 --- a/test/org/joni/test/TestA.java +++ b/test/org/joni/test/TestA.java @@ -497,6 +497,9 @@ public class TestA extends Test { x2s("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaAAAAAAAAAAAAAAAAA", 0, 35, Option.IGNORECASE); x2s("(?mix)", "", 0, 0); + + x2s("(?<=\\babc)d", " abcd", 4, 5); + x2s("(?<=\\Babc)d", "aabcd", 4, 5); } public static void main(String[] args) throws Throwable{ diff --git a/test/org/joni/test/TestU.java b/test/org/joni/test/TestU.java index ee1ed76..332de05 100644 --- a/test/org/joni/test/TestU.java +++ b/test/org/joni/test/TestU.java @@ -762,6 +762,37 @@ public class TestU extends Test { ns("\000[\000^\000[\000^\000a\000-\000z0B0D0F\000]\000&\000&\000[\000^\000b\000c\000d\000e\000f\000g0F0H0J\000]\000g\000-\000w\000]\000\000", "\0002\000\000"); x2s("\000a\000<\000b\000>0\3200\3740\2700\3470\3630n0\3000\2460\3630\3550\3740\311\000<\000\134\000/\000b\000>\000\000", "\000a\000<\000b\000>0\3200\3740\2700\3470\3630n0\3000\2460\3630\3550\3740\311\000<\000/\000b\000>\000\000", 0, 40); x2s("\000.\000<\000b\000>0\3200\3740\2700\3470\3630n0\3000\2460\3630\3550\3740\311\000<\000\134\000/\000b\000>\000\000", "\000a\000<\000b\000>0\3200\3740\2700\3470\3630n0\3000\2460\3630\3550\3740\311\000<\000/\000b\000>\000\000", 0, 40); + + // Unicode case folding tests + // common case folding: u+0041 and u+0061 + x2s("\u0000\u0041\000\000", "\u0000\u0061\000\000", 0, 2, Option.IGNORECASE); + x2s("\u0000\u0061\000\000", "\u0000\u0041\000\000", 0, 2, Option.IGNORECASE); + // common case folding: u+00C0 and u+00E0 + x2s("\u0000\u00C0\000\000", "\u0000\u00E0\000\000", 0, 2, Option.IGNORECASE); + x2s("\u0000\u00E0\000\000", "\u0000\u00C0\000\000", 0, 2, Option.IGNORECASE); + // common case folding: u+00B5 and u+03BC + x2s("\u0000\u00B5\000\000", "\u0003\u00BC\000\000", 0, 2, Option.IGNORECASE); + x2s("\u0003\u00BC\000\000", "\u0000\u00B5\000\000", 0, 2, Option.IGNORECASE); + // common case folding: u+0073 and u+017F + x2s("\u0000\u0073\000\000", "\u0001\u007F\000\000", 0, 2, Option.IGNORECASE); + x2s("\u0001\u007F\000\000", "\u0000\u0073\000\000", 0, 2, Option.IGNORECASE); + // full case folding: u+1FA0 and u+1F60 u+03B9 + x2s("\u001F\u00A0\000\000", "\u001F\u0060\u0003\u00B9\000\000", 0, 4, Option.IGNORECASE); + x2s("\u001F\u0060\u0003\u00B9\000\000", "\u001F\u00A0\000\000", 0, 2, Option.IGNORECASE); + // full case folding: u+1FA8 and u+1F60 u+03B9 + x2s("\u001F\u00A8\000\000", "\u001F\u0060\u0003\u00B9\000\000", 0, 4, Option.IGNORECASE); + x2s("\u001F\u0060\u0003\u00B9\000\000", "\u001F\u00A8\000\000", 0, 2, Option.IGNORECASE); + // simple case folding: u+1FA8 and u+1FA0 + x2s("\u001F\u00A8\000\000", "\u001F\u00A0\000\000", 0, 2, Option.IGNORECASE); + x2s("\u001F\u00A0\000\000", "\u001F\u00A8\000\000", 0, 2, Option.IGNORECASE); + // FIXME: Case folding for 'LATIN CAPITAL LETTER SHARP S' not supported + // full case folding: u+1E9E and u+0073 u+0073 + // x2s("\u001E\u009E\000\000", "\u0000\u0073\u0000\u0073\000\000", 0, 4, Option.IGNORECASE); + // simple case folding: u+1E9E and u+00DF + // x2s("\u001E\u009E\000\000", "\u0000\u00DF\000\000", 0, 2, Option.IGNORECASE); + + // Case fold exceeding Analyser#THRESHOLD_CASE_FOLD_ALT_FOR_EXPANSION (= 8) + x2s("\u0000\u0041\u0000\u0041\u0000\u0041\u0000\u0041\000\000", "\u0000\u0061\u0000\u0061\u0000\u0061\u0000\u0061\000\000", 0, 8, Option.IGNORECASE); } public static void main(String[] args) throws Throwable { -- 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

