Simplify regexp engine init. (#1302)

This commit is contained in:
Nikolay Igotti
2018-02-09 11:27:01 +03:00
committed by GitHub
parent f31dfa94a9
commit 7ccc73aadd
@@ -33,6 +33,30 @@
package kotlin.text.regex
private object unixLT : AbstractLineTerminator() {
override fun isLineTerminator(codepoint: Int): Boolean = (codepoint == '\n'.toInt())
override fun isLineTerminatorPair(char1: Char, char2: Char): Boolean = false
override fun isAfterLineTerminator(previous: Char, checked: Char): Boolean = (previous == '\n')
}
private object unicodeLT : AbstractLineTerminator() {
override fun isLineTerminatorPair(char1: Char, char2: Char): Boolean {
return char1 == '\r' && char2 == '\n'
}
override fun isLineTerminator(codepoint: Int): Boolean {
return codepoint == '\n'.toInt()
|| codepoint == '\r'.toInt()
|| codepoint == '\u0085'.toInt()
|| codepoint or 1 == '\u2029'.toInt()
}
override fun isAfterLineTerminator(previous: Char, checked: Char): Boolean {
return previous == '\n' || previous == '\u0085' || previous.toInt() or 1 == '\u2029'.toInt()
|| previous == '\r' && checked != '\n'
}
}
/**
* Line terminator factory
*/
@@ -40,42 +64,17 @@ internal abstract class AbstractLineTerminator {
/** Checks if the single character is a line terminator or not. */
open fun isLineTerminator(char: Char): Boolean = isLineTerminator(char.toInt())
/** Checks if the codepoint is a line terminator or not */
abstract fun isLineTerminator(codepoint: Int): Boolean
/** Checks if the pair of symbols is a line terminator (e.g. for \r\n case) */
abstract fun isLineTerminatorPair(char1: Char, char2: Char): Boolean
/** Checks if a [checked] character is after a line terminator using the [previous] character.*/
abstract fun isAfterLineTerminator(previous: Char, checked: Char): Boolean
companion object {
val unixLT: AbstractLineTerminator by lazy {
object : AbstractLineTerminator() {
override fun isLineTerminator(codepoint: Int): Boolean = (codepoint == '\n'.toInt())
override fun isLineTerminatorPair(char1: Char, char2: Char): Boolean = false
override fun isAfterLineTerminator(previous: Char, checked: Char): Boolean = (previous == '\n')
}
}
val unicodeLT: AbstractLineTerminator by lazy {
object : AbstractLineTerminator() {
override fun isLineTerminatorPair(char1: Char, char2: Char): Boolean {
return char1 == '\r' && char2 == '\n'
}
override fun isLineTerminator(codepoint: Int): Boolean {
return codepoint == '\n'.toInt()
|| codepoint == '\r'.toInt()
|| codepoint == '\u0085'.toInt()
|| codepoint or 1 == '\u2029'.toInt()
}
override fun isAfterLineTerminator(previous: Char, checked: Char): Boolean {
return previous == '\n' || previous == '\u0085' || previous.toInt() or 1 == '\u2029'.toInt()
|| previous == '\r' && checked != '\n'
}
}
}
fun getInstance(flag: Int): AbstractLineTerminator {
if (flag and Pattern.UNIX_LINES != 0) {
return unixLT