diff options
Diffstat (limited to 'codemirror_ui/lib/CodeMirror-2.3/mode/pascal')
-rw-r--r-- | codemirror_ui/lib/CodeMirror-2.3/mode/pascal/index.html | 48 | ||||
-rw-r--r-- | codemirror_ui/lib/CodeMirror-2.3/mode/pascal/pascal.js | 94 |
2 files changed, 142 insertions, 0 deletions
diff --git a/codemirror_ui/lib/CodeMirror-2.3/mode/pascal/index.html b/codemirror_ui/lib/CodeMirror-2.3/mode/pascal/index.html new file mode 100644 index 0000000..6af6b46 --- /dev/null +++ b/codemirror_ui/lib/CodeMirror-2.3/mode/pascal/index.html @@ -0,0 +1,48 @@ +<!doctype html> +<html> + <head> + <title>CodeMirror: Pascal mode</title> + <link rel="stylesheet" href="../../lib/codemirror.css"> + <script src="../../lib/codemirror.js"></script> + <script src="pascal.js"></script> + <link rel="stylesheet" href="../../doc/docs.css"> + <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style> + </head> + <body> + <h1>CodeMirror: Pascal mode</h1> + +<div><textarea id="code" name="code"> +(* Example Pascal code *) + +while a <> b do writeln('Waiting'); + +if a > b then + writeln('Condition met') +else + writeln('Condition not met'); + +for i := 1 to 10 do + writeln('Iteration: ', i:1); + +repeat + a := a + 1 +until a = 10; + +case i of + 0: write('zero'); + 1: write('one'); + 2: write('two') +end; +</textarea></div> + + <script> + var editor = CodeMirror.fromTextArea(document.getElementById("code"), { + lineNumbers: true, + matchBrackets: true, + mode: "text/x-pascal" + }); + </script> + + <p><strong>MIME types defined:</strong> <code>text/x-pascal</code>.</p> + </body> +</html> diff --git a/codemirror_ui/lib/CodeMirror-2.3/mode/pascal/pascal.js b/codemirror_ui/lib/CodeMirror-2.3/mode/pascal/pascal.js new file mode 100644 index 0000000..9ac522f --- /dev/null +++ b/codemirror_ui/lib/CodeMirror-2.3/mode/pascal/pascal.js @@ -0,0 +1,94 @@ +CodeMirror.defineMode("pascal", function(config) { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = words("and array begin case const div do downto else end file for forward integer " + + "boolean char function goto if in label mod nil not of or packed procedure " + + "program record repeat set string then to type until var while with"); + var atoms = {"null": true}; + + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == "#" && state.startOfLine) { + stream.skipToEnd(); + return "meta"; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (ch == "(" && stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return null + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "word"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !escaped) state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == ")" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + // Interface + + return { + startState: function(basecolumn) { + return {tokenize: null}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + return style; + }, + + electricChars: "{}" + }; +}); + +CodeMirror.defineMIME("text/x-pascal", "pascal"); |