use eventb_lsp::server::operator_rows;
const NOTICE: &str =
"Generated by `rossi gen-grammars` from the canonical operator table. Do not edit by hand.";
pub fn render() -> String {
let mut out = String::new();
out.push_str(
";;; eventb-input.el --- Event-B Unicode input method -*- lexical-binding: t; -*-\n",
);
out.push_str(&format!(";; {NOTICE}\n"));
out.push_str(";;; Commentary:\n");
out.push_str(
";; A Quail input method (agda-input style) for typing Event-B Unicode\n\
;; operators with a backslash leader, e.g. `\\to' -> RIGHTWARDS ARROW.\n",
);
out.push_str(";;; Code:\n\n");
out.push_str("(require 'quail)\n\n");
out.push_str("(quail-define-package\n");
out.push_str(" \"eventb\" ; name\n");
out.push_str(" \"UTF-8\" ; language\n");
out.push_str(" \"EvB\" ; title (mode-line indicator)\n");
out.push_str(" t ; guidance\n");
out.push_str(
" \"Event-B Unicode input method (backslash leader, e.g. \\\\to -> RIGHTWARDS ARROW).\"\n",
);
out.push_str(" nil ; translation-keys\n");
out.push_str(" nil t nil nil nil nil nil nil nil t)\n\n");
out.push_str("(quail-define-rules\n");
for row in operator_rows() {
let unicode = super::elisp_string(&row.unicode);
for alias in &row.aliases {
out.push_str(&format!(" ({} {})\n", backslash_key(alias), unicode));
}
if !row.symbolic && !row.aliases.contains(&row.ascii) {
out.push_str(&format!(" ({} {})\n", backslash_key(&row.ascii), unicode));
}
}
out.push_str(" )\n\n");
out.push_str("(provide 'eventb-input)\n");
out.push_str(";;; eventb-input.el ends here\n");
out
}
fn backslash_key(key: &str) -> String {
let mut s = String::from("\\");
s.push_str(key);
super::elisp_string(&s)
}