[jruby-joni] 257/279: Some preliminaries for \K
Hideki Yamane
henrich at moszumanska.debian.org
Mon Nov 16 11:27:47 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 6eb41c76678513851c39e49ccbc747e0f52e2c44
Author: Marcin Mielzynski <lopx at gazeta.pl>
Date: Fri Apr 10 01:48:39 2015 +0200
Some preliminaries for \K
---
src/org/joni/Analyser.java | 8 ++++----
src/org/joni/ArrayCompiler.java | 4 ++++
src/org/joni/Lexer.java | 2 ++
src/org/joni/Parser.java | 11 ++++++++---
src/org/joni/Syntax.java | 3 ++-
src/org/joni/ast/AnchorNode.java | 34 +++++++++++++++++-----------------
src/org/joni/constants/TokenType.java | 1 +
7 files changed, 38 insertions(+), 25 deletions(-)
diff --git a/src/org/joni/Analyser.java b/src/org/joni/Analyser.java
index 46fd470..d871f77 100644
--- a/src/org/joni/Analyser.java
+++ b/src/org/joni/Analyser.java
@@ -220,10 +220,10 @@ final class Analyser extends Parser {
private void noNameDisableMapFor_anchor(Node node, int[]map, Ptr counter) {
AnchorNode an = (AnchorNode)node;
switch (an.type) {
- case AnchorNode.PREC_READ:
- case AnchorNode.PREC_READ_NOT:
- case AnchorNode.LOOK_BEHIND:
- case AnchorNode.LOOK_BEHIND_NOT:
+ case AnchorType.PREC_READ:
+ case AnchorType.PREC_READ_NOT:
+ case AnchorType.LOOK_BEHIND:
+ case AnchorType.LOOK_BEHIND_NOT:
an.setTarget(noNameDisableMap(an.target, map, counter));
}
}
diff --git a/src/org/joni/ArrayCompiler.java b/src/org/joni/ArrayCompiler.java
index 9b61ecd..62e44fc 100644
--- a/src/org/joni/ArrayCompiler.java
+++ b/src/org/joni/ArrayCompiler.java
@@ -1046,6 +1046,10 @@ final class ArrayCompiler extends Compiler {
addOpcode(enc.isSingleByte() ? OPCode.WORD_END_SB : OPCode.WORD_END);
break;
+ case AnchorType.KEEP:
+ addOpcode(OPCode.KEEP);
+ break;
+
case AnchorType.PREC_READ:
regex.requireStack = true;
addOpcode(OPCode.PUSH_POS);
diff --git a/src/org/joni/Lexer.java b/src/org/joni/Lexer.java
index f447059..fe01da6 100644
--- a/src/org/joni/Lexer.java
+++ b/src/org/joni/Lexer.java
@@ -1128,6 +1128,8 @@ class Lexer extends ScannerSupport {
case 'X':
if (syntax.op2EscCapitalXExtendedGraphemeCluster()) token.type = TokenType.EXTENDED_GRAPHEME_CLUSTER;
break;
+ case 'K':
+ if (syntax.op2EscCapitalKKeep()) token.type = TokenType.KEEP;
default:
unfetch();
int num = fetchEscapedValue();
diff --git a/src/org/joni/Parser.java b/src/org/joni/Parser.java
index 992c2f7..77352b7 100644
--- a/src/org/joni/Parser.java
+++ b/src/org/joni/Parser.java
@@ -771,10 +771,10 @@ class Parser extends Lexer {
cc1.addCType(ctype, false, env, this);
QuantifierNode qn = new QuantifierNode(0, QuantifierNode.REPEAT_INFINITE, false);
qn.setTarget(cc2);
- /* \P{M}\p{M}* */
- ConsAltNode list = ConsAltNode.newListNode(cc1, ConsAltNode.newListNode(qn, null));
+ /* (?>...) */
EncloseNode en2 = new EncloseNode(EncloseType.STOP_BACKTRACK);
- en2.setTarget(list);
+ /* \P{M}\p{M}* */
+ en2.setTarget(ConsAltNode.newListNode(cc1, ConsAltNode.newListNode(qn, null)));
node = en2;
}
}
@@ -786,6 +786,11 @@ class Parser extends Lexer {
node = np1;
}
break;
+
+ case KEEP:
+ node = new AnchorNode(AnchorType.KEEP);
+ break;
+
case STRING:
return parseExpTkByte(group); // tk_byte:
diff --git a/src/org/joni/Syntax.java b/src/org/joni/Syntax.java
index 47f069d..5ec30f7 100644
--- a/src/org/joni/Syntax.java
+++ b/src/org/joni/Syntax.java
@@ -422,7 +422,8 @@ public final class Syntax implements SyntaxProperties{
OP2_ESC_H_XDIGIT |
OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER |
OP2_QMARK_LPAREN_CONDITION |
- OP2_ESC_CAPITAL_R_LINEBREAK),
+ OP2_ESC_CAPITAL_R_LINEBREAK // | OP2_ESC_CAPITAL_K_KEEP
+ ),
( GNU_REGEX_BV |
ALLOW_INTERVAL_LOW_ABBREV |
diff --git a/src/org/joni/ast/AnchorNode.java b/src/org/joni/ast/AnchorNode.java
index 1000083..498f1a6 100644
--- a/src/org/joni/ast/AnchorNode.java
+++ b/src/org/joni/ast/AnchorNode.java
@@ -21,7 +21,7 @@ package org.joni.ast;
import org.joni.constants.AnchorType;
-public final class AnchorNode extends Node implements AnchorType {
+public final class AnchorNode extends Node {
public final int type;
public boolean asciiRange;
public Node target;
@@ -68,22 +68,22 @@ public final class AnchorNode extends Node implements AnchorType {
public String typeToString() {
StringBuilder type = new StringBuilder();
- if (isType(BEGIN_BUF)) type.append("BEGIN_BUF ");
- if (isType(BEGIN_LINE)) type.append("BEGIN_LINE ");
- if (isType(BEGIN_POSITION)) type.append("BEGIN_POSITION ");
- if (isType(END_BUF)) type.append("END_BUF ");
- if (isType(SEMI_END_BUF)) type.append("SEMI_END_BUF ");
- if (isType(END_LINE)) type.append("END_LINE ");
- if (isType(WORD_BOUND)) type.append("WORD_BOUND ");
- if (isType(NOT_WORD_BOUND)) type.append("NOT_WORD_BOUND ");
- if (isType(WORD_BEGIN)) type.append("WORD_BEGIN ");
- if (isType(WORD_END)) type.append("WORD_END ");
- if (isType(PREC_READ)) type.append("PREC_READ ");
- if (isType(PREC_READ_NOT)) type.append("PREC_READ_NOT ");
- if (isType(LOOK_BEHIND)) type.append("LOOK_BEHIND ");
- if (isType(LOOK_BEHIND_NOT)) type.append("LOOK_BEHIND_NOT ");
- if (isType(ANYCHAR_STAR)) type.append("ANYCHAR_STAR ");
- if (isType(ANYCHAR_STAR_ML)) type.append("ANYCHAR_STAR_ML ");
+ if (isType(AnchorType.BEGIN_BUF)) type.append("BEGIN_BUF ");
+ if (isType(AnchorType.BEGIN_LINE)) type.append("BEGIN_LINE ");
+ if (isType(AnchorType.BEGIN_POSITION)) type.append("BEGIN_POSITION ");
+ if (isType(AnchorType.END_BUF)) type.append("END_BUF ");
+ if (isType(AnchorType.SEMI_END_BUF)) type.append("SEMI_END_BUF ");
+ if (isType(AnchorType.END_LINE)) type.append("END_LINE ");
+ if (isType(AnchorType.WORD_BOUND)) type.append("WORD_BOUND ");
+ if (isType(AnchorType.NOT_WORD_BOUND)) type.append("NOT_WORD_BOUND ");
+ if (isType(AnchorType.WORD_BEGIN)) type.append("WORD_BEGIN ");
+ if (isType(AnchorType.WORD_END)) type.append("WORD_END ");
+ if (isType(AnchorType.PREC_READ)) type.append("PREC_READ ");
+ if (isType(AnchorType.PREC_READ_NOT)) type.append("PREC_READ_NOT ");
+ if (isType(AnchorType.LOOK_BEHIND)) type.append("LOOK_BEHIND ");
+ if (isType(AnchorType.LOOK_BEHIND_NOT)) type.append("LOOK_BEHIND_NOT ");
+ if (isType(AnchorType.ANYCHAR_STAR)) type.append("ANYCHAR_STAR ");
+ if (isType(AnchorType.ANYCHAR_STAR_ML)) type.append("ANYCHAR_STAR_ML ");
return type.toString();
}
diff --git a/src/org/joni/constants/TokenType.java b/src/org/joni/constants/TokenType.java
index 3dc8386..80f3079 100644
--- a/src/org/joni/constants/TokenType.java
+++ b/src/org/joni/constants/TokenType.java
@@ -41,6 +41,7 @@ public enum TokenType {
CHAR_PROPERTY, /* \p{...}, \P{...} */
LINEBREAK,
EXTENDED_GRAPHEME_CLUSTER,
+ KEEP,
/* in cc */
CC_CLOSE,
CC_RANGE,
--
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