package cangjie_tpc::prism4cj.languages

public class PrismGit {
    public static func create(): Grammar {
        return GrammarImpl(
            "git",
            ArrayList<Token>([
                Prism.token("comment", Prism.pattern(Regex("^#${wildcard}*", RegexFlag.MultiLine))),
                Prism.token("deleted", Prism.pattern(Regex("^[-–]${wildcard}*", RegexFlag.MultiLine))),
                Prism.token("inserted", Prism.pattern(Regex("^\\+${wildcard}*", RegexFlag.MultiLine))),
                Prism.token(
                    "string",
                    Prism.pattern(Regex("(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1", RegexFlag.MultiLine))
                ),
                Prism.token(
                    "command",
                    Prism.pattern(
                        Regex("^${wildcard}*\\$ git ${wildcard}*", RegexFlag.MultiLine),
                        false,
                        false,
                        None,
                        GrammarImpl(
                            "inside",
                            ArrayList<Token>([
                                Prism.token("parameter", Prism.pattern(Regex("\\s--?\\w+", RegexFlag.MultiLine)))
                            ])
                        )
                    )
                ),
                Prism.token("coord", Prism.pattern(Regex("^@@${wildcard}*?@@+", RegexFlag.MultiLine))),
                Prism.token("commit_sha1", Prism.pattern(Regex("^commit \\w{40}(?=\\s*$)", RegexFlag.MultiLine)))
            ])
        )
    }
}