UNPKG

1.6 kBJavaScriptView Raw
1/*
2Language: Prolog
3Description: Prolog is a general purpose logic programming language associated with artificial intelligence and computational linguistics.
4Author: Raivo Laanemets <raivo@infdot.com>
5Website: https://en.wikipedia.org/wiki/Prolog
6*/
7
8function prolog(hljs) {
9 const ATOM = {
10
11 begin: /[a-z][A-Za-z0-9_]*/,
12 relevance: 0
13 };
14
15 const VAR = {
16
17 className: 'symbol',
18 variants: [
19 { begin: /[A-Z][a-zA-Z0-9_]*/ },
20 { begin: /_[A-Za-z0-9_]*/ }
21 ],
22 relevance: 0
23 };
24
25 const PARENTED = {
26
27 begin: /\(/,
28 end: /\)/,
29 relevance: 0
30 };
31
32 const LIST = {
33
34 begin: /\[/,
35 end: /\]/
36 };
37
38 const LINE_COMMENT = {
39
40 className: 'comment',
41 begin: /%/,
42 end: /$/,
43 contains: [ hljs.PHRASAL_WORDS_MODE ]
44 };
45
46 const BACKTICK_STRING = {
47
48 className: 'string',
49 begin: /`/,
50 end: /`/,
51 contains: [ hljs.BACKSLASH_ESCAPE ]
52 };
53
54 const CHAR_CODE = {
55 className: 'string', // 0'a etc.
56 begin: /0'(\\'|.)/
57 };
58
59 const SPACE_CODE = {
60 className: 'string',
61 begin: /0'\\s/ // 0'\s
62 };
63
64 const PRED_OP = { // relevance booster
65 begin: /:-/ };
66
67 const inner = [
68
69 ATOM,
70 VAR,
71 PARENTED,
72 PRED_OP,
73 LIST,
74 LINE_COMMENT,
75 hljs.C_BLOCK_COMMENT_MODE,
76 hljs.QUOTE_STRING_MODE,
77 hljs.APOS_STRING_MODE,
78 BACKTICK_STRING,
79 CHAR_CODE,
80 SPACE_CODE,
81 hljs.C_NUMBER_MODE
82 ];
83
84 PARENTED.contains = inner;
85 LIST.contains = inner;
86
87 return {
88 name: 'Prolog',
89 contains: inner.concat([
90 { // relevance booster
91 begin: /\.$/ }
92 ])
93 };
94}
95
96module.exports = prolog;