package cangjie_tpc::prism4cj.languages
public class PrismJava {
public static func create(prism: Prism): Grammar {
let keyword: Token = Prism.token("keyword",
Prism.pattern(
Regex(
"\\b(?:abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|String)\\b"
)))
let java: Grammar = GrammarUtils.extendGrammar(
GrammarUtils.require(prism, "clike"),
"java",
ArrayList<Token>([
keyword,
Prism.token("number",
Prism.pattern(
Regex(
"\\b0b[01]+\\b|\\b0x[\\da-f]*\\.?[\\da-fp-]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?[df]?",
RegexFlag.IgnoreCase))),
Prism.token("operator",
Prism.pattern(
Regex(
"(^|[^.])(?:\\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\\|[|=]?|\\*=?|\\/=?|%=?|\\^=?|[?:~])",
RegexFlag.MultiLine), true))
])
)
GrammarUtils.insertBeforeToken(
java,
"function",
ArrayList<Token>([Prism.token("annotation", Prism.pattern(Regex("(^|[^.])@\\w+"), true, false, "punctuation")
)])
)
GrammarUtils.insertBeforeToken(
java,
"class-name",
ArrayList<Token>([
Prism.token("generics",
Prism.pattern(Regex("<\\s*\\w+(?:\\.\\w+)?(?:\\s*,\\s*\\w+(?:\\.\\w+)?)*>", RegexFlag.IgnoreCase),/*cjlint-ignore !G.CHK.04 */
false, false, "function",
GrammarImpl("inside",
ArrayList<Token>([keyword, Prism.token("punctuation", Prism.pattern(Regex("[<>(),.:]")))]))))])
)
return java
}
}