]> luflow.net public git repositories - flow-web.git/blob - static/highlight/languages/lisp.js
Initial commit.
[flow-web.git] / static / highlight / languages / lisp.js
1 /*! `lisp` grammar compiled for Highlight.js 11.11.1 */
2 (function(){
3 var hljsGrammar = (function () {
4 'use strict';
5
6 /*
7 Language: Lisp
8 Description: Generic lisp syntax
9 Author: Vasily Polovnyov <vast@whiteants.net>
10 Category: lisp
11 */
12
13 function lisp(hljs) {
14 const LISP_IDENT_RE = '[a-zA-Z_\\-+\\*\\/<=>&#][a-zA-Z0-9_\\-+*\\/<=>&#!]*';
15 const MEC_RE = '\\|[^]*?\\|';
16 const LISP_SIMPLE_NUMBER_RE = '(-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|-)?\\d+)?';
17 const LITERAL = {
18 className: 'literal',
19 begin: '\\b(t{1}|nil)\\b'
20 };
21 const NUMBER = {
22 className: 'number',
23 variants: [
24 {
25 begin: LISP_SIMPLE_NUMBER_RE,
26 relevance: 0
27 },
28 { begin: '#(b|B)[0-1]+(/[0-1]+)?' },
29 { begin: '#(o|O)[0-7]+(/[0-7]+)?' },
30 { begin: '#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?' },
31 {
32 begin: '#(c|C)\\(' + LISP_SIMPLE_NUMBER_RE + ' +' + LISP_SIMPLE_NUMBER_RE,
33 end: '\\)'
34 }
35 ]
36 };
37 const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });
38 const COMMENT = hljs.COMMENT(
39 ';', '$',
40 { relevance: 0 }
41 );
42 const VARIABLE = {
43 begin: '\\*',
44 end: '\\*'
45 };
46 const KEYWORD = {
47 className: 'symbol',
48 begin: '[:&]' + LISP_IDENT_RE
49 };
50 const IDENT = {
51 begin: LISP_IDENT_RE,
52 relevance: 0
53 };
54 const MEC = { begin: MEC_RE };
55 const QUOTED_LIST = {
56 begin: '\\(',
57 end: '\\)',
58 contains: [
59 'self',
60 LITERAL,
61 STRING,
62 NUMBER,
63 IDENT
64 ]
65 };
66 const QUOTED = {
67 contains: [
68 NUMBER,
69 STRING,
70 VARIABLE,
71 KEYWORD,
72 QUOTED_LIST,
73 IDENT
74 ],
75 variants: [
76 {
77 begin: '[\'`]\\(',
78 end: '\\)'
79 },
80 {
81 begin: '\\(quote ',
82 end: '\\)',
83 keywords: { name: 'quote' }
84 },
85 { begin: '\'' + MEC_RE }
86 ]
87 };
88 const QUOTED_ATOM = { variants: [
89 { begin: '\'' + LISP_IDENT_RE },
90 { begin: '#\'' + LISP_IDENT_RE + '(::' + LISP_IDENT_RE + ')*' }
91 ] };
92 const LIST = {
93 begin: '\\(\\s*',
94 end: '\\)'
95 };
96 const BODY = {
97 endsWithParent: true,
98 relevance: 0
99 };
100 LIST.contains = [
101 {
102 className: 'name',
103 variants: [
104 {
105 begin: LISP_IDENT_RE,
106 relevance: 0,
107 },
108 { begin: MEC_RE }
109 ]
110 },
111 BODY
112 ];
113 BODY.contains = [
114 QUOTED,
115 QUOTED_ATOM,
116 LIST,
117 LITERAL,
118 NUMBER,
119 STRING,
120 COMMENT,
121 VARIABLE,
122 KEYWORD,
123 MEC,
124 IDENT
125 ];
126
127 return {
128 name: 'Lisp',
129 illegal: /\S/,
130 contains: [
131 NUMBER,
132 hljs.SHEBANG(),
133 LITERAL,
134 STRING,
135 COMMENT,
136 QUOTED,
137 QUOTED_ATOM,
138 LIST,
139 IDENT
140 ]
141 };
142 }
143
144 return lisp;
145
146 })();
147
148 hljs.registerLanguage('lisp', hljsGrammar);
149 })();