From 5785f36b17d2b290d88c05fee54e39060a07b6d4 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 27 Jun 2021 17:59:54 +0200 Subject: Customize client-side CodeMirror mode --- language-web/src/main/webapp/index.html | 4 ++- language-web/src/main/webapp/script.js | 2 +- language-web/src/main/webapp/style.css | 11 +++----- .../xtext-resources/generated/mode-problem.js | 30 +++++++++++++++++----- 4 files changed, 31 insertions(+), 16 deletions(-) (limited to 'language-web') diff --git a/language-web/src/main/webapp/index.html b/language-web/src/main/webapp/index.html index 3fb66d62..753ed63a 100644 --- a/language-web/src/main/webapp/index.html +++ b/language-web/src/main/webapp/index.html @@ -30,6 +30,7 @@ enum TaxStatus { child, student, adult, retired } +% A child cannot have any dependents. error invalidTaxStatus(Person p) :- taxStatus(p, child), children(p, _q). @@ -41,7 +42,8 @@ children(anne, ciri). ?children(bob, ciri). taxStatus(anne, adult). -scope Family = 1, Person += 5..10. +scope Family = 1, Person += 5..10. + diff --git a/language-web/src/main/webapp/script.js b/language-web/src/main/webapp/script.js index dced7eca..818a056c 100644 --- a/language-web/src/main/webapp/script.js +++ b/language-web/src/main/webapp/script.js @@ -16,5 +16,5 @@ require.config({ }] }); require(["xtext-resources/generated/mode-problem", "xtext/xtext-codemirror"], function(mode, xtext) { - window.xtextEditor = xtext.createEditor({baseUrl: baseUrl,}); + xtext.createEditor({baseUrl: baseUrl, indentUnit: 4,}); }); diff --git a/language-web/src/main/webapp/style.css b/language-web/src/main/webapp/style.css index 9a89dd81..03018f93 100644 --- a/language-web/src/main/webapp/style.css +++ b/language-web/src/main/webapp/style.css @@ -59,7 +59,7 @@ a:hover { bottom: 16px; left: 16px; right: 16px; - border: 1px solid #aaa; + border: 1px solid #999; } .problem-class { @@ -82,12 +82,7 @@ a:hover { font-weight: bold; } - -.CodeMirror .problem-node { - color: inherit; -} - -.problem-enum-node { +.CodeMirror .cm-quoted-name, .problem-enum-node { color: #1a1a1a !important; font-weight: bold; } @@ -101,5 +96,5 @@ a:hover { } .problem-singleton-variable { - opacity: 0.7; + color: #a1706f; } diff --git a/language-web/src/main/webapp/xtext-resources/generated/mode-problem.js b/language-web/src/main/webapp/xtext-resources/generated/mode-problem.js index 89373b1c..1640d13d 100644 --- a/language-web/src/main/webapp/xtext-resources/generated/mode-problem.js +++ b/language-web/src/main/webapp/xtext-resources/generated/mode-problem.js @@ -2,12 +2,16 @@ define(["codemirror", "codemirror/addon/mode/simple"], function(CodeMirror, Simp var keywords = "abstract|class|contains|enum|error|extends|false|opposite|pred|problem|refers|scope|true|unknown"; CodeMirror.defineSimpleMode("xtext/problem", { start: [ - {token: "comment", regex: "\\/\\/.*$"}, {token: "comment", regex: "\\/\\*", next : "comment"}, {token: "string", regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'}, - {token: "constant.numeric", regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"}, - {token: "lparen", regex: "[\\[({]"}, - {token: "rparen", regex: "[\\])}]"}, + {token: "quoted-name", regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"}, + {token: "number", regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"}, + {token: "number", regex: "[*]"}, + {token: "comment", regex: "%.*$"}, + {token: "comment", regex: "\\/\\/.*$"}, + {token: "lparen", indent: true, regex: "[[({]"}, + {token: "rparen", dedent: true, dedentIfLineStart: true, regex: "[\\])}]"}, + {indent: true, push: "predicateBody", regex: ":-"}, {token: "keyword", regex: "\\b(?:" + keywords + ")\\b"} ], comment: [ @@ -16,7 +20,21 @@ define(["codemirror", "codemirror/addon/mode/simple"], function(CodeMirror, Simp ], meta: { dontIndentStates: ["comment"], - lineComment: "//" - } + lineComment: "%", + electricChars: "])]" + }, + predicateBody: [ + {token: "comment", regex: "\\/\\*", next : "comment"}, + {token: "string", regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'}, + {token: "quoted-name", regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"}, + {token: "number", regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"}, + {token: "number", regex: "[*]"}, + {token: "comment", regex: "%.*$"}, + {token: "comment", regex: "\\/\\/.*$"}, + {token: "lparen", indent: true, regex: "[[({]"}, + {token: "rparen", dedent: true, dedentIfLineStart: true, regex: "[\\])}]"}, + {dedent: true, dedentIfLineStart: false, pop: true, regex: "\\.\\s*$"}, + {token: "keyword", regex: "\\b(?:" + keywords + ")\\b"} + ] }); }); -- cgit v1.2.3-70-g09d2