[jruby-joni] 253/279: Support for \R
Hideki Yamane
henrich at moszumanska.debian.org
Mon Nov 16 11:27:46 UTC 2015
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 <lopx at gazeta.pl>
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
More information about the pkg-java-commits
mailing list