-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsdml.ctags
374 lines (296 loc) · 16.5 KB
/
sdml.ctags
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
# Copyright (c) 2024 Simon Johnston
# Home: https://github.com/sdm-lang/sdml-ctags
# License: Apache 2.0
# Version: 0.1.0
--langdef=SDML{_autoFQTag}
--map-SDML=+.sdm
--map-SDML=+.sdml
#--extras=+r
#--fields=+r
#==============================================================================
# Symbol types
#==============================================================================
--kinddef-SDML=M,module,modules
--kinddef-SDML=d,datatype,datatypes
--kinddef-SDML=E,entity,entities
--kinddef-SDML=e,enum,enums
--kinddef-SDML=x,event,events
--kinddef-SDML=p,property,properties
--kinddef-SDML=r,rdf,rdf
--kinddef-SDML=s,structure,structures
--kinddef-SDML=c,class,classes
--kinddef-SDML=u,union,unions
--kinddef-SDML=t,type,types
--kinddef-SDML=V,variant,variants
--kinddef-SDML=v,variable,variables
--kinddef-SDML=m,member,members
--kinddef-SDML=C,constraint,constraints
--_scopesep-SDML=M/d::
--_scopesep-SDML=M/E::
--_scopesep-SDML=M/e::
--_scopesep-SDML=M/x::
--_scopesep-SDML=M/p::
--_scopesep-SDML=M/r::
--_scopesep-SDML=M/s::
--_scopesep-SDML=M/c::
--_scopesep-SDML=M/u::
--_scopesep-SDML=E/m:.
--_scopesep-SDML=x/m:.
--_scopesep-SDML=s/m:.
--_scopesep-SDML=e/V:.
--_scopesep-SDML=u/V:.
#==============================================================================
# Roles
#==============================================================================
--_roledef-SDML.M=imported,imported module
--_roledef-SDML.t=imported,imported type
--_roledef-SDML.t=assertion,annotation assertion
--_roledef-SDML.d=base,datatype reference
--_roledef-SDML.E=source,entity reference
--_roledef-SDML.p=ref,property reference
--_roledef-SDML.t=type,has-type reference
#==============================================================================
# Parse tables
#==============================================================================
--_tabledef-SDML=outer
--_tabledef-SDML=skipComment
--_tabledef-SDML=comment
--_tabledef-SDML=skipString
--_tabledef-SDML=string
--_tabledef-SDML=skipUri
--_tabledef-SDML=uri
--_tabledef-SDML=module
--_tabledef-SDML=moduleBody
--_tabledef-SDML=import
--_tabledef-SDML=datatype
--_tabledef-SDML=datatypeBody
--_tabledef-SDML=entity
--_tabledef-SDML=entityBody
--_tabledef-SDML=enum
--_tabledef-SDML=enumBody
--_tabledef-SDML=event
--_tabledef-SDML=eventBody
--_tabledef-SDML=property
--_tabledef-SDML=rdf
--_tabledef-SDML=rdfType
--_tabledef-SDML=rdfTypeList
--_tabledef-SDML=structure
--_tabledef-SDML=structureBody
--_tabledef-SDML=class
--_tabledef-SDML=classBody
--_tabledef-SDML=union
--_tabledef-SDML=unionBody
--_tabledef-SDML=member
--_tabledef-SDML=memberedBody
--_tabledef-SDML=annOnlyBody
--_tabledef-SDML=annotation
--_tabledef-SDML=annProperty
--_tabledef-SDML=annConstraint
--_tabledef-SDML=annConstraintBody
--_tabledef-SDML=value
--_tabledef-SDML=valueList
#==============================================================================
# Skip comments (';' to EOL)
#==============================================================================
--_mtable-regex-SDML=skipComment/[[:space:]]*;//{tenter=comment}
--_mtable-regex-SDML=comment/[^\n]+//
--_mtable-regex-SDML=comment/\n//{tleave}
--_mtable-regex-SDML=comment/.//
#==============================================================================
# Skip strings
#==============================================================================
--_mtable-regex-SDML=skipString/[[:space:]]*"//{tenter=string}
--_mtable-regex-SDML=string/\\"//
--_mtable-regex-SDML=string/"(@[a-zA-Z\-_]+)?//{tleave}
--_mtable-regex-SDML=string/.//
#==============================================================================
# Skip URIs
#==============================================================================
--_mtable-regex-SDML=skipUri/[[:space:]]*<//{tenter=uri}
--_mtable-regex-SDML=uri/[^>]+//
--_mtable-regex-SDML=uri/>//{tleave}
--_mtable-regex-SDML=uri/.//
#==============================================================================
# Annotations
#==============================================================================
--_mtable-regex-SDML=annotation/[[:space:]]*@([[:alnum:]\-_]+(:[[:alnum:]\-_]+)?)\b/\1/t/{_role=assertion}{tenter=annProperty}
--_mtable-regex-SDML=annotation/[[:space:]]*assert[[:space:]]+([[:alnum:]\-_]+)?\b/\1/C/{tenter=annConstraint}
--_mtable-extend-SDML=annProperty+skipComment
--_mtable-regex-SDML=annProperty/[[:space:]]*=[[:space:]]+///{tjump=value}
--_mtable-extend-SDML=annConstraint+skipComment
--_mtable-regex-SDML=annConstraint/[[:space:]]*=[[:space:]]+"///{tjump=string}
--_mtable-regex-SDML=annConstraint/[[:space:]]*is\b///{tenter=annConstraintBody}
#--_mtable-regex-SDML=annConstraintBody/[[:space:]]*(=|/=|<|>|<=|>=|not|and|or|xor|implies|iff|forall|exists|in|empty)[[:space:]]+//
--_mtable-regex-SDML=annConstraintBody/[[:space:]]*end\b///{tleave}
--_mtable-regex-SDML=value/^[[:space:]]*"///{tjump=string}
--_mtable-regex-SDML=value/^[[:space:]]*<///{tjump=uri}
--_mtable-regex-SDML=value/^[[:space:]]*(true|false)\b///{tleave}
--_mtable-regex-SDML=value/^[[:space:]]*(\+|\-)?[0-9]+(\.[0-9]+)?([eE](\+|\-)[0-9]+)?///{tleave}
--_mtable-regex-SDML=value/^[[:space:]]*(([[:alnum:]]+)(:[[:alnum:]]+)?)(\([^)]*\))?/\1/t/{_role=type}{tleave}
--_mtable-regex-SDML=value/^[[:space:]]*\[///{tjump=valueList}
--_mtable-regex-SDML=valueList/^[ \t\r\n]+///
--_mtable-regex-SDML=valueList/^[[:space:]]*\]///{tleave}
--_mtable-regex-SDML=valueList/^[[:space:]]*"///{tenter=string}
--_mtable-regex-SDML=valueList/^[[:space:]]*<///{tenter=uri}
--_mtable-regex-SDML=valueList/^[[:space:]]*(true|false)\b///
--_mtable-regex-SDML=valueList/^[[:space:]]*(\+|\-)?[0-9]+(\.[0-9]+)?([eE](\+|\-)[0-9]+)?///
--_mtable-regex-SDML=valueList/^[[:space:]]*(([[:alnum:]\-_]+)(:[[:alnum:]\-_]+)?)(\([^\)]*\))?/\1/t/{_role=type}
#==============================================================================
# Annotation-only body
#==============================================================================
--_mtable-regex-SDML=annOnlyBody/^[ \t\r]*\n///
--_mtable-extend-SDML=annOnlyBody+skipComment
--_mtable-extend-SDML=annOnlyBody+annotation
--_mtable-regex-SDML=annOnlyBody/^[[:space:]]*end\b///{tleave}
#==============================================================================
# Body with member definitions
#==============================================================================
--_mtable-regex-SDML=memberedBody/^[ \t\r]*\n///
--_mtable-extend-SDML=memberedBody+skipComment
--_mtable-regex-SDML=memberedBody/^[[:space:]]*is\b///{tenter=annOnlyBody}
--_mtable-regex-SDML=memberedBody/^[[:space:]]*end\b///{scope=pop}{tleave}
#--_mtable-regex-SDML=memberedBody/^[[:space:]]*([[:alnum:]\-_]+)[[:space:]]+\->[[:space:]]+(\{[^\}]+\})?[[:space:]]*[[:alnum:]\-_]+(:[[:alnum:]\-_]+)?/\1/m/{scope=ref}
--_mtable-regex-SDML=memberedBody/^[[:space:]]*([[:alnum:]\-_]+)[[:space:]]+(?=\->)/\1/m/{scope=ref}{pcre2}
--_mtable-regex-SDML=memberedBody/^[[:space:]]*\->[[:space:]]+(\{[^\}]+\})?[[:space:]]*([[:alnum:]\-_]+(:[[:alnum:]\-_]+)?)/\2/t/{_role=type}{scope=ref}
--_mtable-regex-SDML=memberedBody/^[[:space:]]*ref[[:space:]]+(([[:alnum:]\-_]+:)?([[:alnum:]\-_]+))\b/\1/p/{_role=ref}{scope=ref}
#==============================================================================
# Top-level file, before and after module
#==============================================================================
--_mtable-regex-SDML=outer/^[ \t\r\n]+///
--_mtable-extend-SDML=outer+skipComment
--_mtable-regex-SDML=outer/^[[:space:]]*module[[:space:]]+([[:alnum:]\-_]+)\b/\1/M/{scope=push}{tenter=module}
#==============================================================================
# Module definitions
#==============================================================================
--_mtable-regex-SDML=module/^[ \t\r]*\n///
--_mtable-extend-SDML=module+skipComment
--_mtable-extend-SDML=module+skipString
--_mtable-extend-SDML=module+skipUri
--_mtable-regex-SDML=module/^[[:space:]]*base\b///
--_mtable-regex-SDML=module/^[[:space:]]*version\b///
--_mtable-regex-SDML=module/^[[:space:]]*is\b///{tenter=moduleBody}
--_mtable-regex-SDML=moduleBody/^[ \t\r]*\n///
--_mtable-extend-SDML=moduleBody+skipComment
--_mtable-regex-SDML=moduleBody/^[[:space:]]*import[[:space:]]+([[:alnum:]\-_]+:[[:alnum:]\-_]+)\b/\1/t/{_role=imported}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*import[[:space:]]+([[:alnum:]\-_]+)\b/\1/M/{_role=imported}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*import[[:space:]]+\[[[:space:]]*///{tenter=import}
--_mtable-extend-SDML=moduleBody+annotation
--_mtable-regex-SDML=moduleBody/^[[:space:]]*datatype[[:space:]]+([[:alnum:]\-_]+)/\1/d/{scope=push}{tenter=datatype}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*entity[[:space:]]+([[:alnum:]\-_]+)/\1/E/{scope=push}{tenter=entity}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*enum[[:space:]]+([[:alnum:]\-_]+)/\1/e/{scope=push}{tenter=enum}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*event[[:space:]]+([[:alnum:]\-_]+)/\1/x/{scope=push}{tenter=event}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*property[[:space:]]+([[:alnum:]\-_]+)/\1/p/{tenter=property}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*rdf[[:space:]]+([[:alnum:]\-_]+)/\1/r/{tenter=rdf}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*structure[[:space:]]+([[:alnum:]\-_]+)/\1/s/{scope=push}{tenter=structure}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*class[[:space:]]+([[:alnum:]\-_]+)/\1/c/{scope=push}{tenter=class}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*union[[:space:]]+([[:alnum:]\-_]+)/\1/u/{scope=push}{tenter=union}
--_mtable-regex-SDML=moduleBody/^[[:space:]]*end\b///{scope=pop}{tleave}
--_mtable-regex-SDML=import/^[[:space:]]*\][[:space:]]+///{tleave}
--_mtable-regex-SDML=import/^[[:space:]]*([[:alnum:]\-_]+:[[:alnum:]\-_]+)\b/\1/t/{_role=imported}
--_mtable-regex-SDML=import/^[[:space:]]*([[:alnum:]\-_]+)\b/\1/M/{_role=imported}
#==============================================================================
# Datatype definitions
#==============================================================================
--_mtable-regex-SDML=datatype/^[ \t\r]*\n///
--_mtable-extend-SDML=datatype+skipComment
--_mtable-regex-SDML=datatype/^[[:space:]]*opaque\b///
--_mtable-regex-SDML=datatype/^[[:space:]]*<-[[:space:]]+([[:alnum:]\-_]+(:[[:alnum:]\-_]+)?)\b/\1/d/{_role=base}
--_mtable-regex-SDML=datatype/^[[:space:]]+is\b///{tjump=datatypeBody}
--_mtable-regex-SDML=datatype/^(?=[[:space:]]+(datatype|entity|enum|event|property|structure|union)\b)///{scope=pop}{tleave}{pcre2}
--_mtable-regex-SDML=datatypeBody/^[ \t\r]*\n///
--_mtable-extend-SDML=datatypeBody+skipComment
--_mtable-extend-SDML=datatypeBody+annotation
--_mtable-regex-SDML=datatypeBody/^[[:space:]]*end\b///{scope=pop}{tleave}
#==============================================================================
# Entity definitions
#==============================================================================
--_mtable-regex-SDML=entity/^[ \t\r]*\n///
--_mtable-extend-SDML=entity+skipComment
--_mtable-regex-SDML=entity/^[[:space:]]+is\b///{tjump=entityBody}
--_mtable-regex-SDML=entity/^(?=[[:space:]]+(datatype|entity|enum|event|property|structure|union)\b)///{scope=pop}{tleave}{pcre2}
--_mtable-regex-SDML=entityBody/^[ \t\r]*\n///
--_mtable-extend-SDML=entityBody+skipComment
--_mtable-extend-SDML=entityBody+annotation
--_mtable-regex-SDML=entityBody/^[[:space:]]*identity[[:space:]]+([[:alnum:]\-_]+)[[:space:]]+\->[[:space:]]+(\{[^\}]+\})?[[:space:]]*([[:alnum:]\-_]+(:[[:alnum:]\-_]+)?)\b/\1/m/{scope=ref}
--_mtable-regex-SDML=entityBody/^[[:space:]]*identity[[:space:]]+ref[[:space:]]+([[:alnum:]\-_]+:)?([[:alnum:]\-_]+)\b/\2/p/{_role=ref}{scope=ref}
--_mtable-extend-SDML=entityBody+memberedBody
#==============================================================================
# Enum definitions
#==============================================================================
--_mtable-regex-SDML=enum/^[ \t\r]*\n///
--_mtable-extend-SDML=enum+skipComment
--_mtable-regex-SDML=enum/^[[:space:]]+of\b///{tjump=enumBody}
--_mtable-regex-SDML=enum/^(?=[[:space:]]+(datatype|entity|enum|event|property|structure|union)\b)///{scope=pop}{tleave}{pcre2}
--_mtable-regex-SDML=enumBody/^[ \t\r]*\n///
--_mtable-extend-SDML=enumBody+skipComment
--_mtable-extend-SDML=enumBody+annotation
--_mtable-regex-SDML=enumBody/^[[:space:]]*is\b///{tenter=annOnlyBody}
--_mtable-regex-SDML=enumBody/^[[:space:]]*end\b///{scope=pop}{tleave}
--_mtable-regex-SDML=enumBody/^[[:space:]]*([[:alnum:]]+)\b/\1/V/{scope=ref}
#==============================================================================
# Event definitions
#==============================================================================
--_mtable-regex-SDML=event/^[ \t\r]*\n///
--_mtable-extend-SDML=event+skipComment
--_mtable-regex-SDML=event/^[[:space:]]*source[[:space:]]+([[:alnum:]\-_]+(:[[:alnum:]\-_]+)?)\b/\1/E/{_role=source}
--_mtable-regex-SDML=event/^[[:space:]]+is\b///{tjump=eventBody}
--_mtable-regex-SDML=event/^(?=[[:space:]]+(datatype|entity|enum|event|property|structure|union)\b)///{scope=pop}{tleave}{pcre2}
--_mtable-regex-SDML=eventBody/^[ \t\r]*\n///
--_mtable-extend-SDML=eventBody+skipComment
--_mtable-extend-SDML=eventBody+annotation
--_mtable-extend-SDML=eventBody+memberedBody
#==============================================================================
# Property definitions
#==============================================================================
--_mtable-regex-SDML=property/^[ \t\r]*\n///
--_mtable-extend-SDML=property+skipComment
--_mtable-regex-SDML=property/^[[:space:]]*is\b///{tenter=annOnlyBody}
--_mtable-regex-SDML=property/^[[:space:]]*\->[[:space:]]+(\{[^\}]+\})?[[:space:]]*([[:alnum:]]+(:[[:alnum:]]+)?)\b/\2/t/{_role=type}
--_mtable-regex-SDML=property/^(?=[[:space:]]+(datatype|entity|enum|event|property|structure|union)\b)///{tleave}{pcre2}
#==============================================================================
# RDF definitions
#==============================================================================
--_mtable-regex-SDML=rdf/^[ \t\r]*\n///
--_mtable-extend-SDML=rdf+skipComment
--_mtable-regex-SDML=rdf/^[[:space:]]*type\b///{tenter=rdfType}
--_mtable-regex-SDML=rdf/^[[:space:]]*is\b///{tenter=annOnlyBody}
--_mtable-regex-SDML=rdf/^(?=[[:space:]]+(datatype|entity|enum|event|property|structure|union)\b)///{tleave}{pcre2}
--_mtable-regex-SDML=rdfType/^[ \t\r]*\n///
--_mtable-extend-SDML=rdfType+skipComment
--_mtable-regex-SDML=rdfType/^[[:space:]]*([[:alnum:]\-_]+(:[[:alnum:]\-_]+)?)\b/\1/t/{_role=type}{tleave}
--_mtable-regex-SDML=rdfType/^[[:space:]]*\[[[:space:]]*///{tenter=rdfTypeList}
--_mtable-regex-SDML=rdfTypeList/^[[:space:]]*([[:alnum:]\-_]+(:[[:alnum:]\-_]+)?)\b/\1/t/{_role=type}
--_mtable-regex-SDML=rdfTypeList/^[[:space:]]*\][[:space:]]*///{tleave}
#==============================================================================
# Structure definitions
#==============================================================================
--_mtable-regex-SDML=structure/^[ \t\r]*\n///
--_mtable-extend-SDML=structure+skipComment
--_mtable-regex-SDML=structure/^[[:space:]]+is\b///{tjump=structureBody}
--_mtable-regex-SDML=structure/^(?=[[:space:]]+(datatype|entity|enum|event|property|structure|union)\b)///{tleave}{pcre2}
--_mtable-regex-SDML=structureBody/^[ \t\r]*\n///
--_mtable-extend-SDML=structureBody+skipComment
--_mtable-extend-SDML=structureBody+annotation
--_mtable-extend-SDML=structureBody+memberedBody
#==============================================================================
# Type-class definitions
#==============================================================================
--_mtable-regex-SDML=class/^[ \t\r]*\n///
--_mtable-extend-SDML=class+skipComment
--_mtable-regex-SDML=class/^[[:space:]]+is\b///{tjump=classBody}
--_mtable-regex-SDML=class/^(?=[[:space:]]+(datatype|entity|enum|event|property|structure|union)\b)///{tleave}{pcre2}
--_mtable-regex-SDML=classBody/^[ \t\r]*\n///
--_mtable-extend-SDML=classBody+skipComment
#==============================================================================
# Union definitions
#==============================================================================
--_mtable-regex-SDML=union/^[ \t\r]*\n///
--_mtable-extend-SDML=union+skipComment
--_mtable-regex-SDML=union/^[[:space:]]+of\b///{tjump=unionBody}
--_mtable-regex-SDML=unionBody/^[ \t\r]*\n///
--_mtable-extend-SDML=unionBody+skipComment
--_mtable-extend-SDML=unionBody+annotation
--_mtable-regex-SDML=unionBody/^[[:space:]]*is\b///{tenter=annOnlyBody}
--_mtable-regex-SDML=unionBody/^[[:space:]]*end\b///{scope=pop}{tleave}
--_mtable-regex-SDML=unionBody/^[[:space:]]*[[:alnum:]\-_]+(:[[:alnum:]\-_]+)?[[:space:]]+as[[:space:]]+([[:alnum:]\-_]+)\b/\2/V/{scope=ref}
--_mtable-regex-SDML=unionBody/^[[:space:]]*([[:alnum:]\-_]+:)?([[:alnum:]\-_]+)\b/\2/V/{scope=ref}