blob: 628c03097f2b775434d6f76cc3fd2d60801fb358 [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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200122hi def link jpropertiesComment Comment
123hi def link jpropertiesTodo Todo
124hi def link jpropertiesIdentifier Identifier
125hi def link jpropertiesString String
126hi def link jpropertiesExtendString String
127hi def link jpropertiesCharacter Character
128hi def link jpropertiesSpecial Special
129hi def link jpropertiesSpecialChar SpecialChar
130hi def link jpropertiesError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000131
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132
133let b:current_syntax = "jproperties"
134
135" vim:ts=8