diff options
Diffstat (limited to 'gnu/java/util/regex/RETokenStart.java')
-rw-r--r-- | gnu/java/util/regex/RETokenStart.java | 23 |
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) { |