diff options
Diffstat (limited to 'node_modules/highlight.js/lib/languages/scheme.js')
-rw-r--r-- | node_modules/highlight.js/lib/languages/scheme.js | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/node_modules/highlight.js/lib/languages/scheme.js b/node_modules/highlight.js/lib/languages/scheme.js new file mode 100644 index 000000000..f4cd10cf8 --- /dev/null +++ b/node_modules/highlight.js/lib/languages/scheme.js @@ -0,0 +1,143 @@ +module.exports = 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) + }; +};
\ No newline at end of file |