-
Notifications
You must be signed in to change notification settings - Fork 125
/
opa.lang
62 lines (50 loc) · 1.79 KB
/
opa.lang
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
# written by Valentin Gatien-Baron, MLstate
# (licensed as public domain with permission from MLstate)
vardef IDENT = '([a-zA-Z_][a-zA-Z_0-9]*|`[^`]*`)'
vardef FUNCTION = $IDENT+'(?=\()'
vardef MODULE = '[A-Z][a-zA-Z_0-9]*(?=\.)'
# same as number.lang but with 0o and 0b also
# and without suffixes like unsigned or long long
vardef NUMBER =
'\<[+-]?((0[xXbBoO][[:xdigit:]]+)|(([[:digit:]]*\.)?
[[:digit:]]+([eE][+-]?[[:digit:]]+)?))\>'
#directives
preproc = '@[A-Za-z_]+'
number = $NUMBER
# weak coloration for strings
# we color some parts of the expressions inserted in strings
# at the first level only and it won't work if you put curly braces
# in your inserts
environment string delim "\"" "\"" escape "\\" begin
state string delim "{" "}" begin
function = $FUNCTION
number = $NUMBER
symbol = $MODULE
include "symbols.lang"
string delim "\"" "\"" escape "\\"
end
end
keyword = "and|as|database|db|do|else|if|match|then|type|with|begin|css|end|external|forall|import|package|parser|rec|server|val|xml_parser"
comment delim "/*" "*/" multiline nested
comment start "//"
# comment delim "<>" "</>" multiline nested
# #id
atom = '\#' + $IDENT
# bypasses
atom = '%%[^%]*%%'
# modules
symbol = $MODULE
# need to come before symbols so that ~ doesn't get colored
usertype = '~'+$IDENT
# FIXME: need to color also made up symbols, not the set predefined
# and defined a regexp SYMBOL, use it here and in string insertions above
include "symbols.lang"
# no idea what this is
cbracket = "{|}"
# function recognised as 'ident('
function = $FUNCTION
# bindings, recognised by 'ident ='
usertype = $IDENT+'(?=[[:blank:]]*=)'
# matches some stdlib types
# really ought to parse type expr in type def and in type annotations
type = '\<(?:int|bool|option|float|void|string|list|text|xhtml|xml)\>'