diff options
Diffstat (limited to 'codemirror_ui/lib/CodeMirror-2.3/mode/pascal/pascal.js')
| -rw-r--r-- | codemirror_ui/lib/CodeMirror-2.3/mode/pascal/pascal.js | 94 | 
1 files changed, 94 insertions, 0 deletions
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");  | 
