forked from highlightjs/highlight.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcapnproto.js
97 lines (96 loc) · 1.56 KB
/
capnproto.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
Language: Cap’n Proto
Author: Oleg Efimov <[email protected]>
Description: Cap’n Proto message definition format
Website: https://capnproto.org/capnp-tool.html
Category: protocols
*/
/** @type LanguageFn */
export default function(hljs) {
const KEYWORDS = [
"struct",
"enum",
"interface",
"union",
"group",
"import",
"using",
"const",
"annotation",
"extends",
"in",
"of",
"on",
"as",
"with",
"from",
"fixed"
];
const TYPES = [
"Void",
"Bool",
"Int8",
"Int16",
"Int32",
"Int64",
"UInt8",
"UInt16",
"UInt32",
"UInt64",
"Float32",
"Float64",
"Text",
"Data",
"AnyPointer",
"AnyStruct",
"Capability",
"List"
];
const LITERALS = [
"true",
"false"
];
const CLASS_DEFINITION = {
variants: [
{ match: [
/(struct|enum|interface)/,
/\s+/,
hljs.IDENT_RE
] },
{ match: [
/extends/,
/\s*\(/,
hljs.IDENT_RE,
/\s*\)/
] }
],
scope: {
1: "keyword",
3: "title.class"
}
};
return {
name: 'Cap’n Proto',
aliases: [ 'capnp' ],
keywords: {
keyword: KEYWORDS,
type: TYPES,
literal: LITERALS
},
contains: [
hljs.QUOTE_STRING_MODE,
hljs.NUMBER_MODE,
hljs.HASH_COMMENT_MODE,
{
className: 'meta',
begin: /@0x[\w\d]{16};/,
illegal: /\n/
},
{
className: 'symbol',
begin: /@\d+\b/
},
CLASS_DEFINITION
]
};
}