1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Java Properties resource file (*.properties[_*]) 3071d4279SBram Moolenaar" Maintainer: Simon Baldwin <[email protected]> 4071d4279SBram Moolenaar" Last change: 26th Mar 2000 5071d4279SBram Moolenaar 6071d4279SBram Moolenaar" ============================================================================= 7071d4279SBram Moolenaar 8071d4279SBram Moolenaar" Optional and tuning variables: 9071d4279SBram Moolenaar 10071d4279SBram Moolenaar" jproperties_lines 11071d4279SBram Moolenaar" ----------------- 12071d4279SBram Moolenaar" Set a value for the sync block that we use to find long continuation lines 13071d4279SBram Moolenaar" in properties; the value is already large - if you have larger continuation 14071d4279SBram Moolenaar" sets you may need to increase it further - if not, and you find editing is 15071d4279SBram Moolenaar" slow, reduce the value of jproperties_lines. 16071d4279SBram Moolenaarif !exists("jproperties_lines") 17071d4279SBram Moolenaar let jproperties_lines = 256 18071d4279SBram Moolenaarendif 19071d4279SBram Moolenaar 20071d4279SBram Moolenaar" jproperties_strict_syntax 21071d4279SBram Moolenaar" ------------------------- 22071d4279SBram Moolenaar" Most properties files assign values with "id=value" or "id:value". But, 23071d4279SBram Moolenaar" strictly, the Java properties parser also allows "id value", "id", and 24071d4279SBram Moolenaar" even more bizarrely "=value", ":value", " value", and so on. These latter 25071d4279SBram Moolenaar" ones, however, are rarely used, if ever, and handling them in the high- 26071d4279SBram Moolenaar" lighting can obscure errors in the more normal forms. So, in practice 27071d4279SBram Moolenaar" we take special efforts to pick out only "id=value" and "id:value" forms 28071d4279SBram Moolenaar" by default. If you want strict compliance, set jproperties_strict_syntax 29071d4279SBram Moolenaar" to non-zero (and good luck). 30071d4279SBram Moolenaarif !exists("jproperties_strict_syntax") 31071d4279SBram Moolenaar let jproperties_strict_syntax = 0 32071d4279SBram Moolenaarendif 33071d4279SBram Moolenaar 34071d4279SBram Moolenaar" jproperties_show_messages 35071d4279SBram Moolenaar" ------------------------- 36071d4279SBram Moolenaar" If this properties file contains messages for use with MessageFormat, 37071d4279SBram Moolenaar" setting a non-zero value will highlight them. Messages are of the form 38071d4279SBram Moolenaar" "{...}". Highlighting doesn't go to the pains of picking apart what is 39071d4279SBram Moolenaar" in the format itself - just the basics for now. 40071d4279SBram Moolenaarif !exists("jproperties_show_messages") 41071d4279SBram Moolenaar let jproperties_show_messages = 0 42071d4279SBram Moolenaarendif 43071d4279SBram Moolenaar 44071d4279SBram Moolenaar" ============================================================================= 45071d4279SBram Moolenaar 4689bcfda6SBram Moolenaar" quit when a syntax file was already loaded 4789bcfda6SBram Moolenaarif exists("b:current_syntax") 48071d4279SBram Moolenaar finish 49071d4279SBram Moolenaarendif 50071d4279SBram Moolenaar 51071d4279SBram Moolenaar" switch case sensitivity off 52071d4279SBram Moolenaarsyn case ignore 53071d4279SBram Moolenaar 54071d4279SBram Moolenaar" set the block 55071d4279SBram Moolenaarexec "syn sync lines=" . jproperties_lines 56071d4279SBram Moolenaar 57071d4279SBram Moolenaar" switch between 'normal' and 'strict' syntax 58071d4279SBram Moolenaarif jproperties_strict_syntax != 0 59071d4279SBram Moolenaar 60071d4279SBram Moolenaar " an assignment is pretty much any non-empty line at this point, 61071d4279SBram Moolenaar " trying to not think about continuation lines 62071d4279SBram Moolenaar syn match jpropertiesAssignment "^\s*[^[:space:]]\+.*$" contains=jpropertiesIdentifier 63071d4279SBram Moolenaar 64071d4279SBram Moolenaar " an identifier is anything not a space character, pretty much; it's 65071d4279SBram Moolenaar " followed by = or :, or space or tab. Or end-of-line. 66071d4279SBram Moolenaar syn match jpropertiesIdentifier "[^=:[:space:]]*" contained nextgroup=jpropertiesDelimiter 67071d4279SBram Moolenaar 68071d4279SBram Moolenaar " treat the delimiter specially to get colours right 69071d4279SBram Moolenaar syn match jpropertiesDelimiter "\s*[=:[:space:]]\s*" contained nextgroup=jpropertiesString 70071d4279SBram Moolenaar 71071d4279SBram Moolenaar " catch the bizarre case of no identifier; a special case of delimiter 72071d4279SBram Moolenaar syn match jpropertiesEmptyIdentifier "^\s*[=:]\s*" nextgroup=jpropertiesString 73071d4279SBram Moolenaarelse 74071d4279SBram Moolenaar 75071d4279SBram Moolenaar " here an assignment is id=value or id:value, and we conveniently 76071d4279SBram Moolenaar " ignore continuation lines for the present 77071d4279SBram Moolenaar syn match jpropertiesAssignment "^\s*[^=:[:space:]]\+\s*[=:].*$" contains=jpropertiesIdentifier 78071d4279SBram Moolenaar 79071d4279SBram Moolenaar " an identifier is anything not a space character, pretty much; it's 80071d4279SBram Moolenaar " always followed by = or :, and we find it in an assignment 81071d4279SBram Moolenaar syn match jpropertiesIdentifier "[^=:[:space:]]\+" contained nextgroup=jpropertiesDelimiter 82071d4279SBram Moolenaar 83071d4279SBram Moolenaar " treat the delimiter specially to get colours right; this time the 84071d4279SBram Moolenaar " delimiter must contain = or : 85071d4279SBram Moolenaar syn match jpropertiesDelimiter "\s*[=:]\s*" contained nextgroup=jpropertiesString 86071d4279SBram Moolenaarendif 87071d4279SBram Moolenaar 88071d4279SBram Moolenaar" a definition is all up to the last non-\-terminated line; strictly, Java 89071d4279SBram Moolenaar" properties tend to ignore leading whitespace on all lines of a multi-line 90071d4279SBram Moolenaar" definition, but we don't look for that here (because it's a major hassle) 91071d4279SBram Moolenaarsyn region jpropertiesString start="" skip="\\$" end="$" contained contains=jpropertiesSpecialChar,jpropertiesError,jpropertiesSpecial 92071d4279SBram Moolenaar 93071d4279SBram Moolenaar" {...} is a Java Message formatter - add a minimal recognition of these 94071d4279SBram Moolenaar" if required 95071d4279SBram Moolenaarif jproperties_show_messages != 0 96071d4279SBram Moolenaar syn match jpropertiesSpecial "{[^}]*}\{-1,\}" contained 97071d4279SBram Moolenaar syn match jpropertiesSpecial "'{" contained 98071d4279SBram Moolenaar syn match jpropertiesSpecial "''" contained 99071d4279SBram Moolenaarendif 100071d4279SBram Moolenaar 101071d4279SBram Moolenaar" \uABCD are unicode special characters 102071d4279SBram Moolenaarsyn match jpropertiesSpecialChar "\\u\x\{1,4}" contained 103071d4279SBram Moolenaar 104071d4279SBram Moolenaar" ...and \u not followed by a hex digit is an error, though the properties 105071d4279SBram Moolenaar" file parser won't issue an error on it, just set something wacky like zero 106071d4279SBram Moolenaarsyn match jpropertiesError "\\u\X\{1,4}" contained 107071d4279SBram Moolenaarsyn match jpropertiesError "\\u$"me=e-1 contained 108071d4279SBram Moolenaar 109071d4279SBram Moolenaar" other things of note are the \t,r,n,\, and the \ preceding line end 110071d4279SBram Moolenaarsyn match jpropertiesSpecial "\\[trn\\]" contained 111071d4279SBram Moolenaarsyn match jpropertiesSpecial "\\\s" contained 112071d4279SBram Moolenaarsyn match jpropertiesSpecial "\\$" contained 113071d4279SBram Moolenaar 114071d4279SBram Moolenaar" comments begin with # or !, and persist to end of line; put here since 115071d4279SBram Moolenaar" they may have been caught by patterns above us 116071d4279SBram Moolenaarsyn match jpropertiesComment "^\s*[#!].*$" contains=jpropertiesTODO 117071d4279SBram Moolenaarsyn keyword jpropertiesTodo TODO FIXME XXX contained 118071d4279SBram Moolenaar 119071d4279SBram Moolenaar" Define the default highlighting. 12089bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 121071d4279SBram Moolenaar 122*f37506f6SBram Moolenaarhi def link jpropertiesComment Comment 123*f37506f6SBram Moolenaarhi def link jpropertiesTodo Todo 124*f37506f6SBram Moolenaarhi def link jpropertiesIdentifier Identifier 125*f37506f6SBram Moolenaarhi def link jpropertiesString String 126*f37506f6SBram Moolenaarhi def link jpropertiesExtendString String 127*f37506f6SBram Moolenaarhi def link jpropertiesCharacter Character 128*f37506f6SBram Moolenaarhi def link jpropertiesSpecial Special 129*f37506f6SBram Moolenaarhi def link jpropertiesSpecialChar SpecialChar 130*f37506f6SBram Moolenaarhi def link jpropertiesError Error 131071d4279SBram Moolenaar 132071d4279SBram Moolenaar 133071d4279SBram Moolenaarlet b:current_syntax = "jproperties" 134071d4279SBram Moolenaar 135071d4279SBram Moolenaar" vim:ts=8 136