package cangjie_tpc::prism4cj.languages
public class PrismGo {
public static func create(prism: Prism): Grammar {
let go: Grammar = GrammarUtils.extendGrammar(
GrammarUtils.require(prism, "clike"),
"go",
TokenFilterGoImpl(),
ArrayList<Token>([
Prism.token(
"keyword",
Prism.pattern(
Regex(
"\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b"
))
),
Prism.token("boolean", Prism.pattern(Regex("\\b(?:_|iota|nil|true|false)\\b"))),
Prism.token(
"operator",
Prism.pattern(
Regex(
"[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\."))
),
Prism.token("number",
Prism.pattern(
Regex("(?:\\b0x[a-f\\d]+|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[-+]?\\d+)?)i?",
RegexFlag.IgnoreCase))),
Prism.token("string",Prism.pattern(Regex("([\"'`])(\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1"),false,true))/*cjlint-ignore !G.CHK.04 */
])
)
// clike doesn't have builtin
GrammarUtils.insertBeforeToken(
go,
"boolean",
ArrayList<Token>([
Prism.token(
"builtin",
Prism.pattern(
Regex(
"\\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\\b"
))
)
])
)
return go
}
}
class TokenFilterGoImpl <: TokenFilter {
public override func test(token: Token): Bool {
return "class-name" != token.name()
}
}