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 cbb370e108c5b0722c936e23b60e98c3ecbf1fa0 Author: Marcin Mielżyński <[email protected]> Date: Wed May 7 19:46:49 2008 +0000 Expose more API for 1.9 functionality. git-svn-id: http://svn.codehaus.org/jruby/joni/trunk@6634 961051c9-f516-0410-bf72-c9f7e237a7b7 --- src/org/joni/NameEntry.java | 21 +++++++++++++++++---- src/org/joni/Regex.java | 28 ++++++++++++++++------------ 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/org/joni/NameEntry.java b/src/org/joni/NameEntry.java index b5aacac..4dcb4ab 100644 --- a/src/org/joni/NameEntry.java +++ b/src/org/joni/NameEntry.java @@ -22,9 +22,9 @@ package org.joni; public final class NameEntry { static final int INIT_NAME_BACKREFS_ALLOC_NUM = 8; - final byte[]name; - final int nameP; - final int nameEnd; + public final byte[]name; + public final int nameP; + public final int nameEnd; int backNum; int backRef1; @@ -35,7 +35,20 @@ public final class NameEntry { nameP = p; nameEnd = end; } - + + public int[] getBackRefs() { + switch (backNum) { + case 0: + return new int[]{}; + case 1: + return new int[]{backRef1}; + default: + int[]result = new int[backNum]; + System.arraycopy(backRefs, 0, result, 0, backNum); + return result; + } + } + private void alloc() { backRefs = new int[INIT_NAME_BACKREFS_ALLOC_NUM]; } diff --git a/src/org/joni/Regex.java b/src/org/joni/Regex.java index d7ce4b0..c5fc8da 100644 --- a/src/org/joni/Regex.java +++ b/src/org/joni/Regex.java @@ -24,6 +24,7 @@ import static org.joni.Option.isCaptureGroup; import static org.joni.Option.isDontCaptureGroup; import java.util.IllegalFormatConversionException; +import java.util.Iterator; import org.joni.constants.AnchorType; import org.joni.constants.RegexState; @@ -183,10 +184,10 @@ public final class Regex implements RegexState { } } - int numberOfNames() { + public int numberOfNames() { return nameTable == null ? 0 : nameTable.size(); } - + void nameAdd(byte[]name, int nameP, int nameEnd, int backRef, Syntax syntax) { if (nameEnd - nameP <= 0) throw new ValueException(ErrorMessages.ERR_EMPTY_GROUP_NAME); @@ -207,12 +208,11 @@ public final class Regex implements RegexState { e.addBackref(backRef); } - + NameEntry nameToGroupNumbers(byte[]name, int nameP, int nameEnd) { - NameEntry e = nameFind(name, nameP, nameEnd); - return e; + return nameFind(name, nameP, nameEnd); } - + public int nameToBackrefNumber(byte[]name, int nameP, int nameEnd, Region region) { NameEntry e = nameToGroupNumbers(name, nameP, nameEnd); if (e == null) throw new ValueException(ErrorMessages.ERR_UNDEFINED_NAME_REFERENCE, @@ -233,8 +233,12 @@ public final class Regex implements RegexState { return e.backRefs[e.backNum - 1]; } } - - boolean noNameGroupIsActive(Syntax syntax) { + + public Iterator<NameEntry> namedBackrefIterator() { + return nameTable.iterator(); + } + + public boolean noNameGroupIsActive(Syntax syntax) { if (isDontCaptureGroup(options)) return false; if (Config.USE_NAMED_GROUP) { @@ -249,11 +253,11 @@ public final class Regex implements RegexState { int p = exactP; int end = exactEnd; int len = end - p; - if (map == null) map = new byte[Config.CHAR_TABLE_SIZE]; // ?? but seems to be safe - - // map/skip - + if (len < Config.CHAR_TABLE_SIZE) { + // map/skip + if (map == null) map = new byte[Config.CHAR_TABLE_SIZE]; + for (int i=0; i<Config.CHAR_TABLE_SIZE; i++) map[i] = (byte)len; for (int i=0; i<len-1; i++) map[bytes[p + i] & 0xff] = (byte)(len - 1 -i); // oxff ?? } else { -- 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

