package cangjie_tpc::prism4cj.languages
internal import std.collection.ArrayList
internal import std.regex.Regex
internal import std.regex.RegexOption
internal import std.regex.RegexFlag
internal import cangjie_tpc::prism4cj.prism.Grammar
internal import cangjie_tpc::prism4cj.prism.GrammarImpl
internal import cangjie_tpc::prism4cj.prism.Prism
internal import cangjie_tpc::prism4cj.prism.Token
internal import cangjie_tpc::prism4cj.prism.Pattern
internal import cangjie_tpc::prism4cj.prism.GrammarUtils
internal import cangjie_tpc::prism4cj.prism.TokenFilter
public abstract class PrismClike {
public static func create(): Grammar {
return GrammarImpl(
"clike",
ArrayList<Token>([
Prism.token(
"comment",
Prism.pattern(Regex("(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)"), true),
Prism.pattern(Regex("(^|[^\\\\:])\\/\\/${wildcard}*"), true, true)
),
Prism.token(
"string",
Prism.pattern(Regex("([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1"), false, true)/*cjlint-ignore !G.CHK.04 */
),
Prism.token(
"class-name",
Prism.pattern(
Regex(
"((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[\\w.\\\\]+"
), true, false, None,
GrammarImpl("inside",
ArrayList<Token>([Prism.token("punctuation", Prism.pattern(Regex("[.\\\\]")))])))
),
Prism.token(
"keyword",
Prism.pattern(
Regex(
"\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b"
))
),
Prism.token("boolean", Prism.pattern(Regex("\\b(?:true|false)\\b"))),
Prism.token("function", Prism.pattern(Regex("[a-z0-9_]+(?=\\()", RegexFlag.IgnoreCase))),
Prism.token("number", Prism.pattern(Regex("\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?", RegexFlag.IgnoreCase))),
Prism.token(
"operator",
Prism.pattern(Regex("--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%"))
),
Prism.token("punctuation", Prism.pattern(Regex("[{}\\[\\];(),.:]")))
])
)
}
private init() {
}
}