123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- CodeMirror.defineMode("oberon07", function() {
- /**
- * Possible styles:
- *
- * keyword * atom * number * def
- * variable * variable-2 * variable-3 * property
- * operator * comment * string * string-2
- * meta * error * qualifier * builtin
- * bracket * tag * attribute * header
- * quote * hr * link
- *
- * OR & ~ < logic operator
- * + - * / DIV MOD < arithmetic operator
- * = # < > IS IN < relation operator
- */
- var DEF = 'def',
- ATOM = 'atom',
- CHAR = 'string-2',
- META = 'meta',
- IDENT = 'variable',
- ERROR = 'error',
- STRING = 'string',
- COMMENT = 'comment',
- BRACKET = 'bracket',
- KEYWORD = 'keyword',
- OPERATOR = 'operator',
- QUALIFIER = 'qualifier',
- _words = {
- 'ABS' : DEF, 'ASR' : DEF, 'ASSERT': DEF,
- 'CHR' : DEF, 'COPY' : DEF, 'DEC' : DEF,
- 'EXCL': DEF, 'FLOOR': DEF, 'FLT' : DEF,
- 'INC' : DEF, 'INCL' : DEF, 'LEN' : DEF,
- 'LSL' : DEF, 'LONG' : DEF, 'NEW' : DEF,
- 'ODD' : DEF, 'ORD' : DEF, 'PACK' : DEF,
- 'ROR' : DEF, 'SHORT': DEF, 'UNPK' : DEF,
- 'BOOLEAN' : ATOM, 'CHAR': ATOM, 'INTEGER': ATOM,
- 'LONGREAL': ATOM, 'REAL': ATOM, 'SET' : ATOM,
- 'ADR': META, 'SIZE': META, 'BIT': META,
- 'GET': META, 'PUT' : META,
- 'ARRAY' : KEYWORD, 'BEGIN' : KEYWORD,
- 'BY' : KEYWORD, 'CASE' : KEYWORD,
- 'CONST' : KEYWORD, 'DO' : KEYWORD,
- 'ELSE' : KEYWORD, 'ELSIF' : KEYWORD,
- 'END' : KEYWORD, 'FALSE' : KEYWORD,
- 'FOR' : KEYWORD, 'IF' : KEYWORD,
- 'IMPORT' : KEYWORD, 'MODULE' : KEYWORD,
- 'NIL' : KEYWORD, 'OF' : KEYWORD,
- 'POINTER' : KEYWORD, 'PROCEDURE': KEYWORD,
- 'RECORD' : KEYWORD, 'REPEAT' : KEYWORD,
- 'RETURN' : KEYWORD, 'THEN' : KEYWORD,
- 'TO' : KEYWORD, 'TRUE' : KEYWORD,
- 'TYPE' : KEYWORD, 'UNTIL' : KEYWORD,
- 'VAR' : KEYWORD, 'WHILE' : KEYWORD,
- 'DIV': OPERATOR, 'IN' : OPERATOR, 'IS' : OPERATOR,
- 'MOD': OPERATOR, 'OR' : OPERATOR
- };
- _alphaREX = /[a-zA-Z_]/,
- _alphaDigitREX = /[0-9a-zA-Z_]/,
- _isAlpha = function (ch) {
- return _alphaREX.test(ch);
- },
- _isAlphaOrDigit = function (ch) {
- return _alphaDigitREX.test(ch);
- },
- _startState = function () {
- return {
- stack: [],
- state: null,
- ch: null,
- scope: 0,
- level: 0,
- error: null,
- name: null,
- };
- },
- _token = function (stream, state) {
- var _state = state.state;
- _ident = function (sym) {
- var _token = IDENT,
- _str = sym,
- _ch = stream.next();
- while (_ch && _isAlphaOrDigit(_ch) && !stream.eol()) {
- _str += _ch;
- _ch = stream.next();
- }
- state.name = _str;
- if (_ch === '.' || _ch === '[') {
- _token = QUALIFIER;
- }
- if (_words[_str]) {
- _token = _words[_str];
- }
- if (!stream.eol()) {
- stream.backUp(1);
- }
- return _token;
- },
- _number = function () {},
- _string = function (sym) {
- var _str,
- _ch = stream.next();
- while (_ch && _ch != sym && !stream.eol()) {
- _str += _ch;
- _ch = stream.next();
- }
- if (stream.eol()) {
- state.error = 'string.not.close';
- return ERROR;
- }
- state.name = _str;
- return STRING;
- },
- _comment = function () {
- var mode = '?',
- _ch;
- while (state.level > 0 && !stream.eol()) {
- _ch = stream.next();
- switch (_ch) {
- case '(':
- mode = '(';
- break;
- case '*':
- if (mode === '(') {
- state.level += 1;
- }
- mode = '*';
- break;
- case ')':
- if (mode === '*') {
- state.level -= 1;
- }
- mode = ')';
- break;
- default:
- mode = '?';
- }
- }
- return COMMENT;
- },
- _ch = stream.next();
- if (state.level > 0) {
- return _comment();
- }
- if (_isAlpha(_ch)) {
- return _ident(_ch);
- }
- switch (_ch) {
- case '"':
- case "'":
- return _string(_ch);
- case '[':
- case ']':
- case '{':
- case '}':
- case ')':
- return BRACKET;
- case '(':
- if (stream.peek() === '*') {
- state.level += 1;
- return _comment();
- }
- return BRACKET;
- case ':':
- if (stream.peek() === '=') {
- _ch = stream.next();
- return KEYWORD;
- }
- return OPERATOR;
- case '<':
- case '>':
- case '#':
- case '&':
- case '+':
- case '-':
- case '*':
- case '/':
- case '~':
- case '|':
- case '^':
- case ',':
- case ';':
- return OPERATOR;
- }
- return null;
- };
- // Interface
- return {
- startState: _startState,
- token: _token,
- electricChars: null
- };
- });
- CodeMirror.defineMIME("text/x-oberon07", "oberon07");
|