feat add ocamldoc grammar for .mld file highlighting

Bundle the ocamldoc TextMate grammar from vscode-ocaml-platform. Register it as scope source.ocaml.ocamldoc and map .mld files to it in syntax detection.

Commit
84080e4301e1d1d52035f62f3deb6b94db9300bc
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
lib/grammars/ocamldoc.json
index 00000000..87398de3 000000..100644
@@ -0,0 +1,323 @@
1 Added: {
2 Added: "scopeName": "source.ocaml.ocamldoc",
3 Added: "name": "OCamldoc",
4 Added: "fileTypes": ["mld"],
5 Added: "patterns": [{ "include": "#markup" }],
6 Added: "repository": {
7 Added: "markup": {
8 Added: "patterns": [
9 Added: {
10 Added: "comment": "ocamldoc documentation tag @raise",
11 Added: "match": "(@raises?)[[:space:]]+([^[:space:]]+)",
12 Added: "captures": {
13 Added: "1": { "name": "keyword.doc-tag.ocamldoc" },
14 Added: "2": {
15 Added: "name": "markup.inline.raw.ocamldoc source.embedded.ocamldoc constant.language.capital-identifier.ocaml"
16 Added: }
17 Added: }
18 Added: },
19 Added: {
20 Added: "comment": "ocamldoc documentation tag @param",
21 Added: "match": "(@param)[[:space:]]+([^[:space:]]+)",
22 Added: "captures": {
23 Added: "1": { "name": "keyword.doc-tag.ocamldoc" },
24 Added: "2": {
25 Added: "name": "markup.inline.raw.ocamldoc source.embedded.ocamldoc"
26 Added: }
27 Added: }
28 Added: },
29 Added: {
30 Added: "comment": "ocamldoc documentation tag @see",
31 Added: "match": "(@see)[[:space:]]+(<.*?>|\".*?\"|'.*?')",
32 Added: "captures": {
33 Added: "1": { "name": "keyword.doc-tag.ocamldoc" },
34 Added: "2": {
35 Added: "name": "markup.underline.link.ocamldoc meta.link.ocamldoc"
36 Added: }
37 Added: }
38 Added: },
39 Added: {
40 Added: "comment": "ocamldoc documentation tag",
41 Added: "name": "keyword.doc-tag.ocamldoc",
42 Added: "match": "@[[:lower:]]+"
43 Added: },
44 Added: {
45 Added: "comment": "embedded ocaml source",
46 Added: "begin": "(?<!\\\\)\\[",
47 Added: "end": "(?<!\\\\)\\]",
48 Added: "name": "markup.inline.raw.ocamldoc",
49 Added: "contentName": "source.embedded.ocamldoc",
50 Added: "patterns": [{ "include": "source.ocaml" }]
51 Added: },
52 Added: {
53 Added: "comment": "embedded preformatted ocaml source",
54 Added: "begin": "(?<!\\\\)\\{(@ocaml([[:space:]].*?)?)?\\[",
55 Added: "end": "(?<!\\\\)\\]\\}",
56 Added: "name": "markup.inline.raw.ocamldoc",
57 Added: "contentName": "source.embedded.ocamldoc",
58 Added: "patterns": [{ "include": "source.ocaml" }]
59 Added: },
60 Added: {
61 Added: "comment": "embedded other language source",
62 Added: "begin": "(?<!\\\\)\\{@.+?\\[",
63 Added: "end": "(?<!\\\\)\\]\\}",
64 Added: "name": "markup.inline.raw.odoc",
65 Added: "contentName": "source.embedded.odoc"
66 Added: },
67 Added: {
68 Added: "comment": "cross-reference",
69 Added: "begin": "(?<!\\\\)\\{!((modules?|modtype|module-type|class|classtype|class-type|val|value|type|exception|exn|attribute|method|section|const|recfield|field|extension|extension-decl|instance-variable|label|page):)?",
70 Added: "end": "(?<!\\\\)\\}",
71 Added: "name": "markup.inline.raw.ocamldoc",
72 Added: "contentName": "source.embedded.ocamldoc",
73 Added: "patterns": [{ "include": "source.ocaml" }]
74 Added: },
75 Added: {
76 Added: "comment": "cross-reference with alt text",
77 Added: "begin": "(?<!\\\\)\\{(\\{!((module|modtype|module-type|class|classtype|class-type|val|value|type|exception|exn|attribute|method|section|const|recfield|field|extension|extension-decl|instance-variable|label|page):)?)",
78 Added: "end": "(\\}).*?(?<!\\\\)\\}",
79 Added: "name": "markup.underline.link.ocamldoc meta.link.ocamldoc",
80 Added: "contentName": "markup.inline.raw.ocamldoc source.embedded.ocamldoc",
81 Added: "patterns": [{ "include": "source.ocaml" }],
82 Added: "beginCaptures": {
83 Added: "1": { "name": "markup.inline.raw.ocamldoc" }
84 Added: },
85 Added: "endCaptures": {
86 Added: "1": { "name": "markup.inline.raw.ocamldoc" }
87 Added: }
88 Added: },
89 Added: {
90 Added: "comment": "ocamldoc heading tag",
91 Added: "begin": "(?<!\\\\){[[:digit:]]+(:[^[:space:]]*)?[[:space:]]",
92 Added: "end": "(?<!\\\\)}",
93 Added: "name": "markup.heading.ocamldoc",
94 Added: "patterns": [{ "include": "#markup" }],
95 Added: "beginCaptures": {
96 Added: "1": { "name": "meta.link.label.ocamldoc" }
97 Added: }
98 Added: },
99 Added: {
100 Added: "comment": "ocamldoc bold",
101 Added: "begin": "(?<!\\\\){b[[:space:]]",
102 Added: "end": "(?<!\\\\)}",
103 Added: "name": "markup.bold.ocamldoc",
104 Added: "patterns": [{ "include": "#markup" }]
105 Added: },
106 Added: {
107 Added: "comment": "ocamldoc italic/emph",
108 Added: "begin": "(?<!\\\\){(i|e)[[:space:]]",
109 Added: "end": "(?<!\\\\)}",
110 Added: "name": "markup.italic.ocamldoc",
111 Added: "patterns": [{ "include": "#markup" }]
112 Added: },
113 Added: {
114 Added: "comment": "ocamldoc verbatim",
115 Added: "begin": "(?<!\\\\){v[[:space:]]",
116 Added: "end": "\\bv}",
117 Added: "name": "markup.inline.raw.ocamldoc"
118 Added: },
119 Added: {
120 Added: "comment": "ocamldoc exponent/index",
121 Added: "begin": "(?<!\\\\){(\\^|\\_)[[:space:]]",
122 Added: "end": "(?<!\\\\)}",
123 Added: "name": "markup.exponent.ocamldoc",
124 Added: "patterns": [{ "include": "#markup" }]
125 Added: },
126 Added: {
127 Added: "comment": "odoc inline math",
128 Added: "begin": "(?<!\\\\){m[[:space:]]",
129 Added: "end": "(?<!\\\\)\\}",
130 Added: "name": "support.class.math.odoc markup.math.inline.odoc meta.math.inline.odoc",
131 Added: "patterns": [{ "include": "#braces" }]
132 Added: },
133 Added: {
134 Added: "comment": "odoc math block",
135 Added: "begin": "(?<!\\\\){math[[:space:]]",
136 Added: "end": "(?<!\\\\)\\}",
137 Added: "name": "support.class.math.odoc markup.math.block.odoc meta.math.block.odoc",
138 Added: "patterns": [{ "include": "#braces" }]
139 Added: },
140 Added: {
141 Added: "comment": "ocamldoc simple lists",
142 Added: "match": "^[[:space:]]*(\\-|\\+)",
143 Added: "name": "punctuation.definition.list.begin.markdown.ocamldoc"
144 Added: },
145 Added: {
146 Added: "comment": "ocamldoc lists",
147 Added: "begin": "((?<!\\\\){(ul|ol)[[:space:]])",
148 Added: "end": "((?<!\\\\)})",
149 Added: "beginCaptures": {
150 Added: "1": {
151 Added: "name": "punctuation.definition.list.begin.markdown.ocamldoc"
152 Added: }
153 Added: },
154 Added: "endCaptures": {
155 Added: "1": {
156 Added: "name": "punctuation.definition.list.begin.markdown.ocamldoc"
157 Added: }
158 Added: },
159 Added: "patterns": [{ "include": "#lists" }]
160 Added: },
161 Added: {
162 Added: "comment": "ocamldoc tables",
163 Added: "begin": "((?<!\\\\){table[[:space:]])",
164 Added: "end": "((?<!\\\\)})",
165 Added: "beginCaptures": {
166 Added: "1": {
167 Added: "name": "punctuation.definition.list.begin.markdown.table.ocamldoc"
168 Added: }
169 Added: },
170 Added: "endCaptures": {
171 Added: "1": {
172 Added: "name": "punctuation.definition.list.begin.markdown.table.ocamldoc"
173 Added: }
174 Added: },
175 Added: "patterns": [{ "include": "#table" }]
176 Added: },
177 Added: {
178 Added: "comment": "ocamldoc light tables",
179 Added: "begin": "((?<!\\\\){t[[:space:]])",
180 Added: "end": "((?<!\\\\)})",
181 Added: "beginCaptures": {
182 Added: "1": {
183 Added: "name": "punctuation.definition.list.begin.markdown.table.light.ocamldoc"
184 Added: }
185 Added: },
186 Added: "endCaptures": {
187 Added: "1": {
188 Added: "name": "punctuation.definition.list.begin.markdown.table.light.ocamldoc"
189 Added: }
190 Added: },
191 Added: "patterns": [{ "include": "#lighttable" }]
192 Added: },
193 Added: {
194 Added: "comment": "ocamldoc links with alt-text",
195 Added: "begin": "(?<!\\\\){({:.*?})",
196 Added: "beginCaptures": {
197 Added: "1": { "name": "string.other.link.title.markdown.ocamldoc" }
198 Added: },
199 Added: "end": "(?<!\\\\)\\}",
200 Added: "patterns": [{ "include": "#markup" }],
201 Added: "name": "markup.underline.link.ocamldoc meta.link.ocamldoc"
202 Added: },
203 Added: {
204 Added: "comment": "ocamldoc links",
205 Added: "match": "(?<!\\\\)({:.*?})",
206 Added: "captures": {
207 Added: "1": { "name": "string.other.link.title.markdown.ocamldoc" }
208 Added: }
209 Added: },
210 Added: {
211 Added: "comment": "ocamldoc latex",
212 Added: "begin": "(?<!\\\\){\\%([[:space:]]|latex:)",
213 Added: "end": "\\%}",
214 Added: "name": "markup.inline.raw.ocamldoc",
215 Added: "patterns": [{ "include": "text.tex.latex" }]
216 Added: },
217 Added: {
218 Added: "comment": "ocamldoc html",
219 Added: "begin": "(?<!\\\\){\\%html:",
220 Added: "end": "\\%}",
221 Added: "name": "markup.inline.raw.ocamldoc",
222 Added: "patterns": [{ "include": "text.html.derivative" }]
223 Added: }
224 Added: ]
225 Added: },
226 Added: "lists": {
227 Added: "patterns": [
228 Added: {
229 Added: "comment": "ocamldoc list element",
230 Added: "begin": "((?<!\\\\){(\\-|li)[[:space:]])",
231 Added: "end": "((?<!\\\\)})",
232 Added: "beginCaptures": {
233 Added: "1": {
234 Added: "name": "punctuation.definition.list.begin.markdown.ocamldoc"
235 Added: }
236 Added: },
237 Added: "endCaptures": {
238 Added: "1": {
239 Added: "name": "punctuation.definition.list.begin.markdown.ocamldoc"
240 Added: }
241 Added: },
242 Added: "patterns": [{ "include": "#markup" }]
243 Added: }
244 Added: ]
245 Added: },
246 Added: "table": {
247 Added: "patterns": [
248 Added: {
249 Added: "comment": "ocamldoc table row",
250 Added: "begin": "((?<!\\\\){tr[[:space:]])",
251 Added: "end": "((?<!\\\\)})",
252 Added: "beginCaptures": {
253 Added: "1": {
254 Added: "name": "punctuation.definition.list.begin.markdown.table.row.ocamldoc"
255 Added: }
256 Added: },
257 Added: "endCaptures": {
258 Added: "1": {
259 Added: "name": "punctuation.definition.list.begin.markdown.table.row.ocamldoc"
260 Added: }
261 Added: },
262 Added: "patterns": [{ "include": "#tablerow" }]
263 Added: }
264 Added: ]
265 Added: },
266 Added: "tablerow": {
267 Added: "patterns": [
268 Added: {
269 Added: "comment": "ocamldoc table cell",
270 Added: "begin": "((?<!\\\\){td[[:space:]])",
271 Added: "end": "((?<!\\\\)})",
272 Added: "beginCaptures": {
273 Added: "1": {
274 Added: "name": "punctuation.definition.list.begin.markdown.table.cell.ocamldoc"
275 Added: }
276 Added: },
277 Added: "endCaptures": {
278 Added: "1": {
279 Added: "name": "punctuation.definition.list.begin.markdown.table.cell.ocamldoc"
280 Added: }
281 Added: },
282 Added: "patterns": [{ "include": "#markup" }]
283 Added: },
284 Added: {
285 Added: "comment": "ocamldoc table header cell",
286 Added: "begin": "((?<!\\\\){th[[:space:]])",
287 Added: "end": "((?<!\\\\)})",
288 Added: "contentName": "markup.bold.tableheader.ocamldoc",
289 Added: "beginCaptures": {
290 Added: "1": {
291 Added: "name": "punctuation.definition.list.begin.markdown.tableheader.ocamldoc"
292 Added: }
293 Added: },
294 Added: "endCaptures": {
295 Added: "1": {
296 Added: "name": "punctuation.definition.list.begin.markdown.tableheader.ocamldoc"
297 Added: }
298 Added: },
299 Added: "patterns": [{ "include": "#markup" }]
300 Added: }
301 Added: ]
302 Added: },
303 Added: "lighttable": {
304 Added: "patterns": [
305 Added: { "include": "#markup" },
306 Added: {
307 Added: "comment": "table characters",
308 Added: "match": "\\||(\\-\\-\\-+)|(:\\-\\-\\-+:)|(:\\-\\-+)|(\\-\\-+:)",
309 Added: "name": "punctuation.definition.list.begin.markdown.tableheader.tablechars.ocamldoc"
310 Added: }
311 Added: ]
312 Added: },
313 Added: "braces": {
314 Added: "patterns": [
315 Added: {
316 Added: "begin": "(?<!\\\\){",
317 Added: "end": "(?<!\\\\)\\}",
318 Added: "patterns": [{ "include": "#braces" }]
319 Added: }
320 Added: ]
321 Added: }
322 Added: }
323 Added: }
lib/highlight_grammars.ml
index 90431fc1..5a47abd6 100644..100644
@@ -53,6 +53,7 @@
53 53 "nix";
54 54 "objective-c";
55 55 "ocaml";
56 Added: "ocamldoc";
56 57 "opam";
57 58 "org";
58 59 "perl";
@@ -112,6 +113,7 @@
112 113 | "nix" -> Some "source.nix"
113 114 | "objective-c" | "objc" -> Some "source.objc"
114 115 | "ocaml" -> Some "source.ocaml"
116 Added: | "ocamldoc" | "mld" -> Some "source.ocaml.ocamldoc"
115 117 | "opam" -> Some "source.ocaml.opam"
116 118 | "org" -> Some "source.org"
117 119 | "perl" -> Some "source.perl"
lib/syntax.ml
index aa4420c8..30bb8bfb 100644..100644
@@ -19,6 +19,7 @@
19 19 | _ -> (
20 20 match Filename.extension name |> String.lowercase_ascii with
21 21 | ".ml" | ".mli" -> Some "ocaml"
22 Added: | ".mld" -> Some "ocamldoc"
22 23 | ".c" | ".h" -> Some "c"
23 24 | ".clj" | ".cljs" | ".cljc" | ".edn" -> Some "clojure"
24 25 | ".cpp" | ".cc" | ".cxx" | ".hpp" -> Some "cpp"