[jruby-joni] 206/223: Support for \R

Hideki Yamane henrich at moszumanska.debian.org
Mon Nov 16 11:22:13 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