Fix bug reading MAK datum
[survex.git] / lib / survex.lang
blob93987a56f265a6db86847f9a23c574d2677f1a77
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 Authors: Philip Withnall
4 Copyright © 2018 Philip Withnall <philip@tecnocode.co.uk>
6 GtkSourceView is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 GtkSourceView is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with this library; if not, see <http://www.gnu.org/licenses/>.
19 Reference: https://survex.com/docs/manual/datafile.htm
20 -->
21 <language id="survex" name="Survex" version="2.0" _section="Source">
22 <metadata>
23 <property name="mimetypes">text/x-survex</property>
24 <property name="globs">*.svx</property>
25 <property name="line-comment-start">;</property>
26 </metadata>
28 <styles>
29 <style id="comment" name="Comment" map-to="def:comment"/>
30 <style id="error" name="Error" map-to="def:error"/>
31 <style id="literal" name="Literal" map-to="def:string"/>
32 <style id="command" name="Command" map-to="def:statement"/>
33 <style id="parameter" name="Parameter" map-to="def:type"/>
34 <style id="identifier" name="Identifier" map-to="def:identifier"/>
35 <style id="number" name="Number" map-to="def:decimal"/>
36 </styles>
38 <default-regex-options case-sensitive="false"/>
40 <definitions>
42 <define-regex id="survey-name">[a-zA-Z0-9_\-\.]+</define-regex>
43 <define-regex id="station-name">[a-zA-Z0-9_\-\.]+</define-regex>
44 <define-regex id="date">[0-9]+(?:\.[0-9]+(?:\.[0-9+])?)?(?:\-[0-9]+(?:\.[0-9]+(?:\.[0-9+])?)?)?</define-regex>
45 <define-regex id="number" extended="true">
46 [-+]?[0-9]+\.[0-9]*|
47 [-+]?[0-9]+|
48 [-+]?[0-9]*\.[0-9]+
49 </define-regex>
50 <define-regex id="string" extended="true">
51 (?:[^\s"]+)|
52 (?:"[^"]*")
53 </define-regex>
55 <define-regex id="data-style" extended="true">
56 default|
57 normal|
58 diving|
59 cartesian|
60 topofil|
61 cylpolar|
62 nosurvey|
63 passage
64 </define-regex>
66 <define-regex id="data-instruments" extended="true">
67 from|
68 to|
69 tape|
70 compass|
71 clino|
72 backcompass|
73 backclino|
74 station|
75 direction|
76 fromdepth|
77 todepth|
78 depthchange|
79 northing|
80 easting|
81 altitude|
82 newline|
83 left|
84 right|
85 up|
86 down|
87 ignoreall|
88 ignore|
89 length|
90 bearing|
91 gradient|
92 count
93 </define-regex>
95 <define-regex id="coordinate-system" extended="true">
96 custom|
97 epsg|
98 esri|
99 eur79z30|
100 ijtsk|
101 ijtsk03|
102 jtsk|
103 jtsk03|
104 long-lat|
105 osgb|
106 s-merc|
108 </define-regex>
110 <!-- FIXME: Should this be the same list as data-instruments? -->
111 <define-regex id="quantity" extended="true">
112 tape|
113 length|
114 backtape|
115 backlength|
116 compass|
117 bearing|
118 backcompass|
119 backbearing|
120 clino|
121 gradient|
122 backclino|
123 backgradient|
124 counter|
125 count|
126 depth|
127 declination|
129 easting|
131 northing|
133 altitude|
134 left|
135 right|
137 ceiling|
138 down|
139 floor|
140 level|
141 plumb|
142 position
143 </define-regex>
145 <!-- FIXME: Should this be the same list as data-instruments? -->
146 <define-regex id="calibrate-quantity" extended="true">
147 tape|
148 compass|
149 clino|
150 counter|
151 depth|
152 declination|
156 </define-regex>
158 <define-regex id="unit" extended="true">
159 default|
160 yards|
161 feet|
162 metric|
163 meters|
164 metres|
165 degs|
166 degrees|
167 grads|
168 mils|
169 minutes|
170 percentage|
171 percent
172 </define-regex>
174 <define-regex id="set-item" extended="true">
175 blank|
176 comment|
177 decimal|
178 eol|
179 keyword|
180 minus|
181 names|
182 omit|
183 plus|
184 root|
185 separator
186 </define-regex>
188 <context id="string" style-ref="literal" end-at-line-end="true">
189 <start>"</start>
190 <end>"</end>
191 </context>
193 <context id="numeric" style-ref="number">
194 <match>(\%{number})</match>
195 </context>
197 <context id="station-name" style-ref="number">
198 <match>(\%{station-name})</match>
199 </context>
201 <context id="line-comment" style-ref="comment" end-at-line-end="true">
202 <start>;</start>
203 <include>
204 <context ref="def:in-line-comment"/>
205 </include>
206 </context>
208 <context id="alias-command">
209 <match>^\s*(\*alias)\s+(station)\s+(\%{station-name})(?:\s+(\%{station-name}))?</match>
210 <include>
211 <context sub-pattern="1" style-ref="command"/>
212 <context sub-pattern="2" style-ref="parameter"/>
213 <context sub-pattern="3" style-ref="identifier"/>
214 </include>
215 </context>
217 <context id="begin-command">
218 <match>^\s*(\*begin)(?:\s+(\%{survey-name}))?</match>
219 <include>
220 <context sub-pattern="1" style-ref="command"/>
221 <context sub-pattern="2" style-ref="identifier"/>
222 </include>
223 </context>
225 <context id="calibrate-command">
226 <match>^\s*(\*calibrate)(?:(?:((?:\s+(?:\%{calibrate-quantity}))+)\s+(\%{number})(?:\s+(\%{unit}))?(?:\s+(\%{number}))?)|\s+(default))</match>
227 <include>
228 <context sub-pattern="1" style-ref="command"/>
229 <context sub-pattern="2" style-ref="parameter"/>
230 <context sub-pattern="3" style-ref="number"/>
231 <context sub-pattern="4" style-ref="parameter"/>
232 <context sub-pattern="5" style-ref="number"/>
233 <context sub-pattern="6" style-ref="parameter"/>
234 </include>
235 </context>
237 <context id="case-command">
238 <match>^\s*(\*case)\s+(preserve|toupper|tolower)</match>
239 <include>
240 <context sub-pattern="1" style-ref="command"/>
241 <context sub-pattern="2" style-ref="parameter"/>
242 </include>
243 </context>
245 <context id="copyright-command">
246 <match>^\s*(\*copyright)\s+(\%{date})\s+(.+)</match>
247 <include>
248 <context sub-pattern="1" style-ref="command"/>
249 <context sub-pattern="2" style-ref="number"/>
250 </include>
251 </context>
253 <context id="cs-command">
254 <match>^\s*(\*cs)(?:\s+(out))?\s+(\%{coordinate-system})</match>
255 <include>
256 <context sub-pattern="1" style-ref="command"/>
257 <context sub-pattern="2" style-ref="parameter"/>
258 <context sub-pattern="3" style-ref="parameter"/>
259 </include>
260 </context>
262 <context id="data-command">
263 <match>^\s*(\*data)\s+(\%{data-style})((?:\s+(?:\%{data-instruments}))*)</match>
264 <include>
265 <context sub-pattern="1" style-ref="command"/>
266 <context sub-pattern="2" style-ref="parameter"/>
267 <context sub-pattern="3" style-ref="parameter"/>
268 </include>
269 </context>
271 <context id="date-command">
272 <match>^\s*(\*date)\s+(\%{date})</match>
273 <include>
274 <context sub-pattern="1" style-ref="command"/>
275 <context sub-pattern="2" style-ref="number"/>
276 </include>
277 </context>
279 <context id="declination-command">
280 <match>^\s*(\*declination)\s+(?:(auto)|(?:(\%{number})\s+(\%{unit})))</match>
281 <include>
282 <context sub-pattern="1" style-ref="command"/>
283 <context sub-pattern="2" style-ref="parameter"/>
284 <context sub-pattern="3" style-ref="number"/>
285 <context sub-pattern="4" style-ref="parameter"/>
286 </include>
287 </context>
289 <context id="default-command">
290 <match>^\s*(\*default)\s+(all|calibrate|data|units)</match>
291 <include>
292 <context sub-pattern="1" style-ref="command"/>
293 <context sub-pattern="2" style-ref="parameter"/>
294 </include>
295 </context>
297 <context id="end-command">
298 <match>^\s*(\*end)(?:\s+(\%{survey-name}))?</match>
299 <include>
300 <context sub-pattern="1" style-ref="command"/>
301 <context sub-pattern="2" style-ref="identifier"/>
302 </include>
303 </context>
305 <context id="entrance-command">
306 <match>^\s*(\*entrance)\s+(\%{station-name})</match>
307 <include>
308 <context sub-pattern="1" style-ref="command"/>
309 <context sub-pattern="2" style-ref="identifier"/>
310 </include>
311 </context>
313 <context id="equate-command">
314 <match>^\s*(\*equate)\s+(\%{station-name})((?:\s+(?:\%{station-name}))+)</match>
315 <include>
316 <context sub-pattern="1" style-ref="command"/>
317 <context sub-pattern="2" style-ref="identifier"/>
318 <context sub-pattern="3" style-ref="identifier"/>
319 </include>
320 </context>
322 <context id="export-command">
323 <match>^\s*(\*export)((?:\s+(?:\%{station-name}))+)</match>
324 <include>
325 <context sub-pattern="1" style-ref="command"/>
326 <context sub-pattern="2" style-ref="identifier"/>
327 </include>
328 </context>
330 <context id="fix-command">
331 <match>^\s*(\*fix)\s+(\%{station-name})(\s+reference)?</match>
332 <include>
333 <context sub-pattern="1" style-ref="command"/>
334 <context sub-pattern="2" style-ref="identifier"/>
335 <context sub-pattern="3" style-ref="parameter"/>
336 </include>
337 </context>
339 <context id="flags-command">
340 <match>^\s*(\*flags)((?:(?:\s+not)?\s+(?:duplicate|splay|surface))+)</match>
341 <include>
342 <context sub-pattern="1" style-ref="command"/>
343 <context sub-pattern="2" style-ref="parameter"/>
344 </include>
345 </context>
347 <context id="include-command">
348 <match>^\s*(\*include)\s+(\%{string})</match>
349 <include>
350 <context sub-pattern="1" style-ref="command"/>
351 <context sub-pattern="2" style-ref="literal"/>
352 </include>
353 </context>
355 <context id="infer-command">
356 <match>^\s*(\*infer)\s+(plumbs|equates|exports)\s+(on|off)</match>
357 <include>
358 <context sub-pattern="1" style-ref="command"/>
359 <context sub-pattern="2" style-ref="parameter"/>
360 <context sub-pattern="3" style-ref="parameter"/>
361 </include>
362 </context>
364 <context id="instrument-command">
365 <match>^\s*(\*instrument)\s+([a-z]+)\s+(\%{string})</match>
366 <include>
367 <context sub-pattern="1" style-ref="command"/>
368 <context sub-pattern="2" style-ref="identifier"/>
369 <context sub-pattern="3" style-ref="literal"/>
370 </include>
371 </context>
373 <context id="prefix-command">
374 <match>^\s*(\*prefix)\s+(\%{survey-name})</match>
375 <include>
376 <context sub-pattern="1" style-ref="command"/>
377 <context sub-pattern="2" style-ref="identifier"/>
378 </include>
379 </context>
381 <context id="ref-command">
382 <match>^\s*(\*ref)\s+(\%{string})</match>
383 <include>
384 <context sub-pattern="1" style-ref="command"/>
385 <context sub-pattern="2" style-ref="literal"/>
386 </include>
387 </context>
389 <context id="require-command">
390 <match>^\s*(\*require)\s+(\%{string})</match>
391 <include>
392 <context sub-pattern="1" style-ref="command"/>
393 <context sub-pattern="2" style-ref="literal"/>
394 </include>
395 </context>
397 <context id="sd-command">
398 <match>^\s*(\*sd)((?:\s+(?:\%{quantity}))+)\s+(\%{number})\s+(\%{unit})</match>
399 <include>
400 <context sub-pattern="1" style-ref="command"/>
401 <context sub-pattern="2" style-ref="parameter"/>
402 <context sub-pattern="3" style-ref="number"/>
403 <context sub-pattern="4" style-ref="parameter"/>
404 </include>
405 </context>
407 <context id="set-command">
408 <match>^\s*(\*set)\s+(\%{set-item})\s+(.+)</match>
409 <include>
410 <context sub-pattern="1" style-ref="command"/>
411 <context sub-pattern="2" style-ref="parameter"/>
412 <context sub-pattern="3" style-ref="literal"/>
413 </include>
414 </context>
416 <context id="solve-command">
417 <match>^\s*(\*solve)</match>
418 <include>
419 <context sub-pattern="1" style-ref="command"/>
420 </include>
421 </context>
423 <context id="team-command">
424 <match>^\s*(\*team)\s+(\%{string})((?:\s+(?:[a-z]+))+)</match>
425 <include>
426 <context sub-pattern="1" style-ref="command"/>
427 <context sub-pattern="2" style-ref="literal"/>
428 <context sub-pattern="3" style-ref="identifier"/>
429 </include>
430 </context>
432 <context id="title-command">
433 <match>^\s*(\*title)\s+(\%{string})</match>
434 <include>
435 <context sub-pattern="1" style-ref="command"/>
436 <context sub-pattern="2" style-ref="literal"/>
437 </include>
438 </context>
440 <context id="truncate-command">
441 <match>^\s*(\*truncate)\s+(?:(\%{number})|(off))</match>
442 <include>
443 <context sub-pattern="1" style-ref="command"/>
444 <context sub-pattern="2" style-ref="number"/>
445 <context sub-pattern="3" style-ref="parameter"/>
446 </include>
447 </context>
449 <context id="units-command">
450 <match>^\s*(\*units)((?:\s+(?:\%{quantity}))+)(?:\s+(\%{number}))?\s+(\%{unit})</match>
451 <include>
452 <context sub-pattern="1" style-ref="command"/>
453 <context sub-pattern="2" style-ref="parameter"/>
454 <context sub-pattern="3" style-ref="number"/>
455 <context sub-pattern="4" style-ref="parameter"/>
456 </include>
457 </context>
459 <context id="survex">
460 <include>
461 <context ref="string"/>
462 <context ref="numeric"/>
463 <context ref="station-name"/>
464 <context ref="line-comment"/>
465 <context ref="alias-command"/>
466 <context ref="begin-command"/>
467 <context ref="calibrate-command"/>
468 <context ref="case-command"/>
469 <context ref="copyright-command"/>
470 <context ref="cs-command"/>
471 <context ref="data-command"/>
472 <context ref="date-command"/>
473 <context ref="declination-command"/>
474 <context ref="default-command"/>
475 <context ref="end-command"/>
476 <context ref="entrance-command"/>
477 <context ref="equate-command"/>
478 <context ref="export-command"/>
479 <context ref="fix-command"/>
480 <context ref="flags-command"/>
481 <context ref="include-command"/>
482 <context ref="infer-command"/>
483 <context ref="instrument-command"/>
484 <context ref="prefix-command"/>
485 <context ref="ref-command"/>
486 <context ref="require-command"/>
487 <context ref="sd-command"/>
488 <context ref="set-command"/>
489 <context ref="solve-command"/>
490 <context ref="team-command"/>
491 <context ref="title-command"/>
492 <context ref="truncate-command"/>
493 <context ref="units-command"/>
494 </include>
495 </context>
497 </definitions>
498 </language>