UNPKG

2.4 kBJavaScriptView Raw
1/*
2Language: Lisp
3Description: Generic lisp syntax
4Author: Vasily Polovnyov <vast@whiteants.net>
5Category: lisp
6*/
7
8function 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
111export { lisp as default };