blob: bde160b24d54946960e8bc689a679f4989e8dbe0 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Java Properties resource file (*.properties[_*])
3" Maintainer: Simon Baldwin <simonb@sco.com>
4" Last change: 26th Mar 2000
5
6" =============================================================================
7
8" Optional and tuning variables:
9
10" jproperties_lines
11" -----------------
12" Set a value for the sync block that we use to find long continuation lines
13" in properties; the value is already large - if you have larger continuation
14" sets you may need to increase it further - if not, and you find editing is
15" slow, reduce the value of jproperties_lines.
16if !exists("jproperties_lines")
17 let jproperties_lines = 256
18endif
19
20" jproperties_strict_syntax
21" -------------------------
22" Most properties files assign values with "id=value" or "id:value". But,
23" strictly, the Java properties parser also allows "id value", "id", and
24" even more bizarrely "=value", ":value", " value", and so on. These latter
25" ones, however, are rarely used, if ever, and handling them in the high-
26" lighting can obscure errors in the more normal forms. So, in practice
27" we take special efforts to pick out only "id=value" and "id:value" forms
28" by default. If you want strict compliance, set jproperties_strict_syntax
29" to non-zero (and good luck).
30if !exists("jproperties_strict_syntax")
31 let jproperties_strict_syntax = 0
32endif
33
34" jproperties_show_messages
35" -------------------------
36" If this properties file contains messages for use with MessageFormat,
37" setting a non-zero value will highlight them. Messages are of the form
38" "{...}". Highlighting doesn't go to the pains of picking apart what is
39" in the format itself - just the basics for now.
40if !exists("jproperties_show_messages")
41 let jproperties_show_messages = 0
42endif
43
44" =============================================================================
45
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020046" quit when a syntax file was already loaded
47if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000048 finish
49endif
50
51" switch case sensitivity off
52syn case ignore
53
54" set the block
55exec "syn sync lines=" . jproperties_lines
56
57" switch between 'normal' and 'strict' syntax
58if jproperties_strict_syntax != 0
59
60 " an assignment is pretty much any non-empty line at this point,
61 " trying to not think about continuation lines
62 syn match jpropertiesAssignment "^\s*[^[:space:]]\+.*$" contains=jpropertiesIdentifier
63
64 " an identifier is anything not a space character, pretty much; it's
65 " followed by = or :, or space or tab. Or end-of-line.
66 syn match jpropertiesIdentifier "[^=:[:space:]]*" contained nextgroup=jpropertiesDelimiter
67
68 " treat the delimiter specially to get colours right
69 syn match jpropertiesDelimiter "\s*[=:[:space:]]\s*" contained nextgroup=jpropertiesString
70
71 " catch the bizarre case of no identifier; a special case of delimiter
72 syn match jpropertiesEmptyIdentifier "^\s*[=:]\s*" nextgroup=jpropertiesString
73else
74
75 " here an assignment is id=value or id:value, and we conveniently
76 " ignore continuation lines for the present
77 syn match jpropertiesAssignment "^\s*[^=:[:space:]]\+\s*[=:].*$" contains=jpropertiesIdentifier
78
79 " an identifier is anything not a space character, pretty much; it's
80 " always followed by = or :, and we find it in an assignment
81 syn match jpropertiesIdentifier "[^=:[:space:]]\+" contained nextgroup=jpropertiesDelimiter
82
83 " treat the delimiter specially to get colours right; this time the
84 " delimiter must contain = or :
85 syn match jpropertiesDelimiter "\s*[=:]\s*" contained nextgroup=jpropertiesString
86endif
87
88" a definition is all up to the last non-\-terminated line; strictly, Java
89" properties tend to ignore leading whitespace on all lines of a multi-line
90" definition, but we don't look for that here (because it's a major hassle)
91syn region jpropertiesString start="" skip="\\$" end="$" contained contains=jpropertiesSpecialChar,jpropertiesError,jpropertiesSpecial
92
93" {...} is a Java Message formatter - add a minimal recognition of these
94" if required
95if jproperties_show_messages != 0
96 syn match jpropertiesSpecial "{[^}]*}\{-1,\}" contained
97 syn match jpropertiesSpecial "'{" contained
98 syn match jpropertiesSpecial "''" contained
99endif
100
101" \uABCD are unicode special characters
102syn match jpropertiesSpecialChar "\\u\x\{1,4}" contained
103
104" ...and \u not followed by a hex digit is an error, though the properties
105" file parser won't issue an error on it, just set something wacky like zero
106syn match jpropertiesError "\\u\X\{1,4}" contained
107syn match jpropertiesError "\\u$"me=e-1 contained
108
109" other things of note are the \t,r,n,\, and the \ preceding line end
110syn match jpropertiesSpecial "\\[trn\\]" contained
111syn match jpropertiesSpecial "\\\s" contained
112syn match jpropertiesSpecial "\\$" contained
113
114" comments begin with # or !, and persist to end of line; put here since
115" they may have been caught by patterns above us
116syn match jpropertiesComment "^\s*[#!].*$" contains=jpropertiesTODO
117syn keyword jpropertiesTodo TODO FIXME XXX contained
118
119" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200120" Only when an item doesn't have highlighting yet
121command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000122
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200123HiLink jpropertiesComment Comment
124HiLink jpropertiesTodo Todo
125HiLink jpropertiesIdentifier Identifier
126HiLink jpropertiesString String
127HiLink jpropertiesExtendString String
128HiLink jpropertiesCharacter Character
129HiLink jpropertiesSpecial Special
130HiLink jpropertiesSpecialChar SpecialChar
131HiLink jpropertiesError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200133delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134
135let b:current_syntax = "jproperties"
136
137" vim:ts=8