|
|
|
@ -92,13 +92,13 @@ class RuleAnalyzer(data: String, code: Boolean = false) { |
|
|
|
|
|
|
|
|
|
//其中js只要符合语法,就不用避开任何阅读关键字,自由发挥 |
|
|
|
|
fun chompJsBalanced( |
|
|
|
|
f: ((Char) -> Boolean?) = { |
|
|
|
|
when (it) { |
|
|
|
|
'{' -> true //开始嵌套一层 |
|
|
|
|
'}' -> false //闭合一层嵌套 |
|
|
|
|
else -> null |
|
|
|
|
} |
|
|
|
|
f: ((Char) -> Boolean?) = { |
|
|
|
|
when (it) { |
|
|
|
|
'{' -> true //开始嵌套一层 |
|
|
|
|
'}' -> false //闭合一层嵌套 |
|
|
|
|
else -> null |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
): Boolean { |
|
|
|
|
var pos = pos //声明变量记录临时处理位置 |
|
|
|
|
var depth = 0 //嵌套深度 |
|
|
|
@ -116,11 +116,11 @@ class RuleAnalyzer(data: String, code: Boolean = false) { |
|
|
|
|
var c = queue[pos++] |
|
|
|
|
if (c != '\\') { //非转义字符 |
|
|
|
|
if (c == '\'' && !commits && !commit && !regex && !inDoubleQuote && !inOtherQuote) inSingleQuote = |
|
|
|
|
!inSingleQuote //匹配具有语法功能的单引号 |
|
|
|
|
!inSingleQuote //匹配具有语法功能的单引号 |
|
|
|
|
else if (c == '"' && !commits && !commit && !regex && !inSingleQuote && !inOtherQuote) inDoubleQuote = |
|
|
|
|
!inDoubleQuote //匹配具有语法功能的双引号 |
|
|
|
|
!inDoubleQuote //匹配具有语法功能的双引号 |
|
|
|
|
else if (c == '`' && !commits && !commit && !regex && !inSingleQuote && !inDoubleQuote) inOtherQuote = |
|
|
|
|
!inOtherQuote //匹配具有语法功能的'`' |
|
|
|
|
!inOtherQuote //匹配具有语法功能的'`' |
|
|
|
|
else if (c == '/' && !commits && !commit && !regex && !inSingleQuote && !inDoubleQuote && !inOtherQuote) { //匹配注释或正则起点 |
|
|
|
|
c = queue[pos++] |
|
|
|
|
when (c) { |
|
|
|
@ -300,10 +300,7 @@ class RuleAnalyzer(data: String, code: Boolean = false) { |
|
|
|
|
val next = if (queue[pos] == '[') ']' else ')' //平衡组末尾字符 |
|
|
|
|
|
|
|
|
|
if (!chompBalanced(queue[pos], next)) throw Error( |
|
|
|
|
queue.substring( |
|
|
|
|
0, |
|
|
|
|
start |
|
|
|
|
) + "后未平衡" |
|
|
|
|
queue.substring(0, start) + "后未平衡" |
|
|
|
|
) //拉出一个筛选器,不平衡则报错 |
|
|
|
|
|
|
|
|
|
} while (end > pos) |
|
|
|
@ -360,10 +357,7 @@ class RuleAnalyzer(data: String, code: Boolean = false) { |
|
|
|
|
val next = if (queue[pos] == '[') ']' else ')' //平衡组末尾字符 |
|
|
|
|
|
|
|
|
|
if (!chompBalanced(queue[pos], next)) throw Error( |
|
|
|
|
queue.substring( |
|
|
|
|
0, |
|
|
|
|
start |
|
|
|
|
) + "后未平衡" |
|
|
|
|
queue.substring(0, start) + "后未平衡" |
|
|
|
|
) //拉出一个筛选器,不平衡则报错 |
|
|
|
|
|
|
|
|
|
} while (end > pos) |
|
|
|
@ -386,10 +380,10 @@ class RuleAnalyzer(data: String, code: Boolean = false) { |
|
|
|
|
* |
|
|
|
|
* */ |
|
|
|
|
fun innerRule( |
|
|
|
|
inner: String, |
|
|
|
|
startStep: Int = 1, |
|
|
|
|
endStep: Int = 1, |
|
|
|
|
fr: (String) -> String? |
|
|
|
|
inner: String, |
|
|
|
|
startStep: Int = 1, |
|
|
|
|
endStep: Int = 1, |
|
|
|
|
fr: (String) -> String? |
|
|
|
|
): String { |
|
|
|
|
|
|
|
|
|
val st = StringBuilder() |
|
|
|
|