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 9b077b8bd0dbcca3072af4756c873a7d9a36ed2a Author: Marcin Mielzynski <[email protected]> Date: Thu Apr 9 23:48:00 2015 +0200 Support for \R --- src/org/joni/Lexer.java | 4 +++- src/org/joni/Parser.java | 26 ++++++++++++++++++++++++++ src/org/joni/Syntax.java | 1 + src/org/joni/constants/TokenType.java | 1 + test/org/joni/test/TestA.java | 4 ++++ test/org/joni/test/TestU8.java | 4 ++++ 6 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/org/joni/Lexer.java b/src/org/joni/Lexer.java index 33b5d88..2287e77 100644 --- a/src/org/joni/Lexer.java +++ b/src/org/joni/Lexer.java @@ -1122,7 +1122,9 @@ class Lexer extends ScannerSupport { case 'P': fetchTokenFor_charProperty(); break; - + case 'R': + if (syntax.op2EscCapitalRLinebreak()) token.type = TokenType.LINEBREAK; + break; default: unfetch(); int num = fetchEscapedValue(); diff --git a/src/org/joni/Parser.java b/src/org/joni/Parser.java index f52c623..2f01a1c 100644 --- a/src/org/joni/Parser.java +++ b/src/org/joni/Parser.java @@ -733,6 +733,32 @@ class Parser extends Lexer { } else { return parseExpTkByte(group); // goto tk_byte } + case LINEBREAK: + byte[]buflb = new byte[Config.ENC_CODE_TO_MBC_MAXLEN * 2]; + int len1 = enc.codeToMbc(0x0D, buflb, 0); + int len2 = enc.codeToMbc(0x0A, buflb, len1); + StringNode left = new StringNode(buflb, 0, len1 + len2); + left.setRaw(); + /* [\x0A-\x0D] or [\x0A-\x0D\x{85}\x{2028}\x{2029}] */ + CClassNode right = new CClassNode(); + if (enc.minLength() > 1) { + right.addCodeRange(env, 0x0A, 0x0D); + } else { + right.bs.setRange(0x0A, 0x0D); + } + + if (enc.toString().startsWith("UTF")) { + /* UTF-8, UTF-16BE/LE, UTF-32BE/LE */ + right.addCodeRange(env, 0x85, 0x85); + right.addCodeRange(env, 0x2028, 0x2029); + } + /* (?>...) */ + EncloseNode en = new EncloseNode(EncloseType.STOP_BACKTRACK); + en.setTarget(ConsAltNode.newAltNode(left, ConsAltNode.newAltNode(right, null))); + + node = en; + break; + case STRING: return parseExpTkByte(group); // tk_byte: diff --git a/src/org/joni/Syntax.java b/src/org/joni/Syntax.java index f8cf6bf..baea7c6 100644 --- a/src/org/joni/Syntax.java +++ b/src/org/joni/Syntax.java @@ -420,6 +420,7 @@ public final class Syntax implements SyntaxProperties{ OP2_CCLASS_SET_OP | OP2_ESC_CAPITAL_C_BAR_CONTROL | OP2_ESC_CAPITAL_M_BAR_META | OP2_ESC_V_VTAB | OP2_ESC_H_XDIGIT | + OP2_ESC_CAPITAL_R_LINEBREAK | OP2_QMARK_LPAREN_CONDITION), ( GNU_REGEX_BV | diff --git a/src/org/joni/constants/TokenType.java b/src/org/joni/constants/TokenType.java index 59aa094..f9a18bd 100644 --- a/src/org/joni/constants/TokenType.java +++ b/src/org/joni/constants/TokenType.java @@ -39,6 +39,7 @@ public enum TokenType { CC_OPEN, QUOTE_OPEN, CHAR_PROPERTY, /* \p{...}, \P{...} */ + LINEBREAK, /* in cc */ CC_CLOSE, CC_RANGE, diff --git a/test/org/joni/test/TestA.java b/test/org/joni/test/TestA.java index 79554ec..7b5f689 100644 --- a/test/org/joni/test/TestA.java +++ b/test/org/joni/test/TestA.java @@ -522,6 +522,10 @@ public class TestA extends Test { x2s("((?<x>x)|(?<y>y))(?(<x>)y|x)", "yx", 0, 2); ns("((?<x>x)|(?<y>y))(?(<x>)y|x)", "xx"); ns("((?<x>x)|(?<y>y))(?(<x>)y|x)", "yy"); + + x2s("\\R", "\n", 0, 1); + x2s("\\R", "\r", 0, 1); + x2s("\\R{3}", "\r\r\n\n", 0, 4); } public static void main(String[] args) throws Throwable{ diff --git a/test/org/joni/test/TestU8.java b/test/org/joni/test/TestU8.java index 2479e74..52d6f10 100644 --- a/test/org/joni/test/TestU8.java +++ b/test/org/joni/test/TestU8.java @@ -80,6 +80,10 @@ public class TestU8 extends Test { x2s("(?i:!\\[CDAT)", "![CDAT", 0, 6); x2s("(?i:\\!\\[CDAa)", "\\![CDAa", 1, 7); x2s("(?i:\\!\\[CDAb)", "\\![CDAb", 1, 7); + + // x2s("\\R", "\u0085", 0, 1); + // x2s("\\R", "\u2028", 0, 1); + // x2s("\\R", "\u2029", 0, 1); } 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

