From 07719e927f9d398765e661c84fd8778cefb39083 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 27 Jun 2021 14:22:40 +0200 Subject: Simplify project layout --- language-web/src/main/webapp/index.html | 49 ++++++++++ language-web/src/main/webapp/script.js | 20 ++++ language-web/src/main/webapp/style.css | 105 +++++++++++++++++++++ .../xtext-resources/generated/mode-problem.js | 22 +++++ 4 files changed, 196 insertions(+) create mode 100644 language-web/src/main/webapp/index.html create mode 100644 language-web/src/main/webapp/script.js create mode 100644 language-web/src/main/webapp/style.css create mode 100644 language-web/src/main/webapp/xtext-resources/generated/mode-problem.js (limited to 'language-web/src/main/webapp') diff --git a/language-web/src/main/webapp/index.html b/language-web/src/main/webapp/index.html new file mode 100644 index 00000000..3fb66d62 --- /dev/null +++ b/language-web/src/main/webapp/index.html @@ -0,0 +1,49 @@ + + + +Example Web Editor + + + + + +
+
+

Example Problem Web Editor

+
+
+
class Family {
+    contains Person[] members
+}
+
+class Person {
+    Person[] children opposite parent
+    Person parent opposite children
+    TaxStatus[1] taxStatus
+}
+
+enum TaxStatus {
+	child, student, adult, retired
+}
+
+error invalidTaxStatus(Person p) :-
+	taxStatus(p, child), children(p, _q).
+
+Family('family').
+members('family', anne).
+members('family', bob).
+members('family', ciri).
+children(anne, ciri).
+?children(bob, ciri).
+taxStatus(anne, adult).
+
+scope Family = 1, Person += 5..10.
+
+
+ + + diff --git a/language-web/src/main/webapp/script.js b/language-web/src/main/webapp/script.js new file mode 100644 index 00000000..dced7eca --- /dev/null +++ b/language-web/src/main/webapp/script.js @@ -0,0 +1,20 @@ +var baseUrl = window.location.pathname; +var fileIndex = baseUrl.indexOf("index.html"); +if (fileIndex > 0) + baseUrl = baseUrl.slice(0, fileIndex) +require.config({ + baseUrl: baseUrl, + paths: { + "text": "webjars/requirejs-text/2.26.0.M1/text", + "jquery": "webjars/jquery/3.6.0/jquery.min", + "xtext/xtext-codemirror": "xtext/2.26.0.M1/xtext-codemirror", + }, + packages: [{ + name: "codemirror", + location: "webjars/codemirror/5.52.2", + main: "lib/codemirror" + }] +}); +require(["xtext-resources/generated/mode-problem", "xtext/xtext-codemirror"], function(mode, xtext) { + window.xtextEditor = xtext.createEditor({baseUrl: baseUrl,}); +}); diff --git a/language-web/src/main/webapp/style.css b/language-web/src/main/webapp/style.css new file mode 100644 index 00000000..9a89dd81 --- /dev/null +++ b/language-web/src/main/webapp/style.css @@ -0,0 +1,105 @@ +body { + width: 100%; + height: 100%; + overflow: hidden; + font: 16px Helvetica,sans-serif; +} + +a { + color: #22a; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +.container { + display: block; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + margin: 24px 24px 36px 24px; +} + +.header { + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + padding: 16px; + background: #dbdbdb; + border-radius: 16px; + color: #383838; +} + +.header h1 { + font-size: 36px; + margin: 0; +} + +.content { + display: block; + position: absolute; + top: 108px; + bottom: 0; + left: 0; + width: 50%; + box-shadow: 0 0 8px rgba(80, 10, 98, .25), 0 10px 24px rgba(80, 10, 98, .35); + border-radius: 16px; +} + +.xtext-editor { + display: block; + position: absolute; + top: 16px; + bottom: 16px; + left: 16px; + right: 16px; + border: 1px solid #aaa; +} + +.problem-class { + color: #005032; +} + +.problem-abstract { + color: #8b8816; +} + +.problem-enum { + color: #644632; +} + +.problem-reference { + color: #0000c0; +} + +.problem-containment { + font-weight: bold; +} + + +.CodeMirror .problem-node { + color: inherit; +} + +.problem-enum-node { + color: #1a1a1a !important; + font-weight: bold; +} + +.problem-new-node { + font-style: italic; +} + +.problem-variable { + color: #6a3e3e; +} + +.problem-singleton-variable { + opacity: 0.7; +} 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 new file mode 100644 index 00000000..89373b1c --- /dev/null +++ b/language-web/src/main/webapp/xtext-resources/generated/mode-problem.js @@ -0,0 +1,22 @@ +define(["codemirror", "codemirror/addon/mode/simple"], function(CodeMirror, SimpleMode) { + 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: "keyword", regex: "\\b(?:" + keywords + ")\\b"} + ], + comment: [ + {token: "comment", regex: ".*?\\*\\/", next : "start"}, + {token: "comment", regex: ".+"} + ], + meta: { + dontIndentStates: ["comment"], + lineComment: "//" + } + }); +}); -- cgit v1.2.3-70-g09d2