summaryrefslogtreecommitdiff
path: root/gnu/java/util/regex/RETokenStart.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/java/util/regex/RETokenStart.java')
-rw-r--r--gnu/java/util/regex/RETokenStart.java23
1 files changed, 23 insertions, 0 deletions
diff --git a/gnu/java/util/regex/RETokenStart.java b/gnu/java/util/regex/RETokenStart.java
index 56bc36129..aa5f0c914 100644
--- a/gnu/java/util/regex/RETokenStart.java
+++ b/gnu/java/util/regex/RETokenStart.java
@@ -39,10 +39,18 @@ package gnu.java.util.regex;
class RETokenStart extends REToken {
private String newline; // matches after a newline
+ private boolean check_java_line_terminators;
RETokenStart(int subIndex, String newline) {
super(subIndex);
this.newline = newline;
+ this.check_java_line_terminators = false;
+ }
+
+ RETokenStart(int subIndex, String newline, boolean b) {
+ super(subIndex);
+ this.newline = newline;
+ this.check_java_line_terminators = b;
}
int getMaximumLength() {
@@ -53,6 +61,21 @@ class RETokenStart extends REToken {
// charAt(index-n) may be unknown on a Reader/InputStream. FIXME
// Match after a newline if in multiline mode
+ if (check_java_line_terminators) {
+ char ch = input.charAt(mymatch.index - 1);
+ if (ch != CharIndexed.OUT_OF_BOUNDS) {
+ if (ch == '\n') return mymatch;
+ if (ch == '\r') {
+ char ch1 = input.charAt(mymatch.index);
+ if (ch1 != '\n') return mymatch;
+ return null;
+ }
+ if (ch == '\u0085') return mymatch; // A next-line character
+ if (ch == '\u2028') return mymatch; // A line-separator character
+ if (ch == '\u2029') return mymatch; // A paragraph-separator character
+ }
+ }
+
if (newline != null) {
int len = newline.length();
if (mymatch.offset >= len) {