MediaWiki:Highlight-js/languages/scheme.js

/** * Language: Scheme * Description: Keywords based on http://community.schemewiki.org/?scheme-keywords * Author: JP Verkamp  * Contributors: Ivan Sagalaev  * Origin: clojure.js * Category: lisp */ window.dev.highlight.registerLanguage('scheme', function(hljs) { var SCHEME_IDENT_RE = '[^\\(\\)\\[\\]\\{\\}",\'`;#|\\\\\\s]+';  var SCHEME_SIMPLE_NUMBER_RE = '(\\-|\\+)?\\d+([./]\\d+)?';  var SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + '[+\\-]' + SCHEME_SIMPLE_NUMBER_RE + 'i';  var BUILTINS = {    'builtin-name':      'case-lambda call/cc class define-class exit-handler field import ' +      'inherit init-field interface let*-values let-values let/ec mixin ' +      'opt-lambda override protect provide public rename require ' +      'require-for-syntax syntax syntax-case syntax-error unit/sig unless ' +      'when with-syntax and begin call-with-current-continuation ' +      'call-with-input-file call-with-output-file case cond define ' +      'define-syntax delay do dynamic-wind else for-each if lambda let let* ' +      'let-syntax letrec letrec-syntax map or syntax-rules \' * +, ,@ - ... / ' +     '; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan ' + 'boolean? caar cadr call-with-input-file call-with-output-file ' + 'call-with-values car cdddar cddddr cdr ceiling char->integer ' + 'char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? ' +     'char-downcase char-lower-case? char-numeric? char-ready? char-upcase ' + 'char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? ' +     'char? close-input-port close-output-port complex? cons cos ' + 'current-input-port current-output-port denominator display eof-object? ' +     'eq? equal? eqv? eval even? exact->inexact exact? exp expt floor ' + 'force gcd imag-part inexact->exact inexact? input-port? integer->char ' + 'integer? interaction-environment lcm length list list->string ' + 'list->vector list-ref list-tail list? load log magnitude make-polar ' + 'make-rectangular make-string make-vector max member memq memv min ' + 'modulo negative? newline not null-environment null? number->string ' + 'number? numerator odd? open-input-file open-output-file output-port? ' +     'pair? peek-char port? positive? procedure? quasiquote quote quotient ' + 'rational? rationalize read read-char real-part real? remainder reverse ' + 'round scheme-report-environment set! set-car! set-cdr! sin sqrt string ' + 'string->list string->number string->symbol string-append string-ci<=? ' +     'string-ci<? string-ci=? string-ci>=? string-ci>? string-copy ' + 'string-fill! string-length string-ref string-set! string<=? string<? ' +     'string=? string>=? string>? string? substring symbol->string symbol? ' +     'tan transcript-off transcript-on truncate values vector ' + 'vector->list vector-fill! vector-length vector-ref vector-set! ' +     'with-input-from-file with-output-to-file write write-char zero?' };

var SHEBANG = { className: 'meta', begin: '^#!', end: '$' };

var LITERAL = { className: 'literal', begin: '(#t|#f|#\\\\' + SCHEME_IDENT_RE + '|#\\\\.)' };

var NUMBER = { className: 'number', variants: [ { begin: SCHEME_SIMPLE_NUMBER_RE, relevance: 0 }, { begin: SCHEME_COMPLEX_NUMBER_RE, relevance: 0 }, { begin: '#b[0-1]+(/[0-1]+)?' }, { begin: '#o[0-7]+(/[0-7]+)?' }, { begin: '#x[0-9a-f]+(/[0-9a-f]+)?' } ] };

var STRING = hljs.QUOTE_STRING_MODE;

var REGULAR_EXPRESSION = { className: 'regexp', begin: '#[pr]x"',   end: '[^\\\\]"' };

var COMMENT_MODES = [ hljs.COMMENT(     ';',      '$',      {        relevance: 0      }    ), hljs.COMMENT('#\\|', '\\|#') ];

var IDENT = { begin: SCHEME_IDENT_RE, relevance: 0 };

var QUOTED_IDENT = { className: 'symbol', begin: '\'' + SCHEME_IDENT_RE };

var BODY = { endsWithParent: true, relevance: 0 };

var QUOTED_LIST = { variants: [ { begin: /'/ }, { begin: '`' } ],   contains: [ {       begin: '\\(', end: '\\)', contains: ['self', LITERAL, STRING, NUMBER, IDENT, QUOTED_IDENT] }   ]  };

var NAME = { className: 'name', begin: SCHEME_IDENT_RE, lexemes: SCHEME_IDENT_RE, keywords: BUILTINS };

var LAMBDA = { begin: /lambda/, endsWithParent: true, returnBegin: true, contains: [ NAME, {       begin: /\(/, end: /\)/, endsParent: true, contains: [IDENT], }   ]  };

var LIST = { variants: [ { begin: '\\(', end: '\\)' }, { begin: '\\[', end: '\\]' } ],   contains: [LAMBDA, NAME, BODY] };

BODY.contains = [LITERAL, NUMBER, STRING, IDENT, QUOTED_IDENT, QUOTED_LIST, LIST].concat(COMMENT_MODES);

return { illegal: /\S/, contains: [SHEBANG, NUMBER, STRING, QUOTED_IDENT, QUOTED_LIST, LIST].concat(COMMENT_MODES) }; }); /** **/