1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | function lisp(hljs) {
|
9 | var LISP_IDENT_RE = '[a-zA-Z_\\-+\\*\\/<=>&#][a-zA-Z0-9_\\-+*\\/<=>&#!]*';
|
10 | var MEC_RE = '\\|[^]*?\\|';
|
11 | var LISP_SIMPLE_NUMBER_RE = '(-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|-)?\\d+)?';
|
12 | var LITERAL = {
|
13 | className: 'literal',
|
14 | begin: '\\b(t{1}|nil)\\b'
|
15 | };
|
16 | var NUMBER = {
|
17 | className: 'number',
|
18 | variants: [
|
19 | {begin: LISP_SIMPLE_NUMBER_RE, relevance: 0},
|
20 | {begin: '#(b|B)[0-1]+(/[0-1]+)?'},
|
21 | {begin: '#(o|O)[0-7]+(/[0-7]+)?'},
|
22 | {begin: '#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?'},
|
23 | {begin: '#(c|C)\\(' + LISP_SIMPLE_NUMBER_RE + ' +' + LISP_SIMPLE_NUMBER_RE, end: '\\)'}
|
24 | ]
|
25 | };
|
26 | var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null});
|
27 | var COMMENT = hljs.COMMENT(
|
28 | ';', '$',
|
29 | {
|
30 | relevance: 0
|
31 | }
|
32 | );
|
33 | var VARIABLE = {
|
34 | begin: '\\*', end: '\\*'
|
35 | };
|
36 | var KEYWORD = {
|
37 | className: 'symbol',
|
38 | begin: '[:&]' + LISP_IDENT_RE
|
39 | };
|
40 | var IDENT = {
|
41 | begin: LISP_IDENT_RE,
|
42 | relevance: 0
|
43 | };
|
44 | var MEC = {
|
45 | begin: MEC_RE
|
46 | };
|
47 | var QUOTED_LIST = {
|
48 | begin: '\\(', end: '\\)',
|
49 | contains: ['self', LITERAL, STRING, NUMBER, IDENT]
|
50 | };
|
51 | var QUOTED = {
|
52 | contains: [NUMBER, STRING, VARIABLE, KEYWORD, QUOTED_LIST, IDENT],
|
53 | variants: [
|
54 | {
|
55 | begin: '[\'`]\\(', end: '\\)'
|
56 | },
|
57 | {
|
58 | begin: '\\(quote ', end: '\\)',
|
59 | keywords: {name: 'quote'}
|
60 | },
|
61 | {
|
62 | begin: '\'' + MEC_RE
|
63 | }
|
64 | ]
|
65 | };
|
66 | var QUOTED_ATOM = {
|
67 | variants: [
|
68 | {begin: '\'' + LISP_IDENT_RE},
|
69 | {begin: '#\'' + LISP_IDENT_RE + '(::' + LISP_IDENT_RE + ')*'}
|
70 | ]
|
71 | };
|
72 | var LIST = {
|
73 | begin: '\\(\\s*', end: '\\)'
|
74 | };
|
75 | var BODY = {
|
76 | endsWithParent: true,
|
77 | relevance: 0
|
78 | };
|
79 | LIST.contains = [
|
80 | {
|
81 | className: 'name',
|
82 | variants: [
|
83 | {
|
84 | begin: LISP_IDENT_RE,
|
85 | relevance: 0,
|
86 | },
|
87 | {begin: MEC_RE}
|
88 | ]
|
89 | },
|
90 | BODY
|
91 | ];
|
92 | BODY.contains = [QUOTED, QUOTED_ATOM, LIST, LITERAL, NUMBER, STRING, COMMENT, VARIABLE, KEYWORD, MEC, IDENT];
|
93 |
|
94 | return {
|
95 | name: 'Lisp',
|
96 | illegal: /\S/,
|
97 | contains: [
|
98 | NUMBER,
|
99 | hljs.SHEBANG(),
|
100 | LITERAL,
|
101 | STRING,
|
102 | COMMENT,
|
103 | QUOTED,
|
104 | QUOTED_ATOM,
|
105 | LIST,
|
106 | IDENT
|
107 | ]
|
108 | };
|
109 | }
|
110 |
|
111 | export { lisp as default };
|