| " Vim syntax file |
| " Language: Java Properties resource file (*.properties[_*]) |
| " Maintainer: Simon Baldwin <simonb@sco.com> |
| " Last change: 26th Mar 2000 |
| |
| " ============================================================================= |
| |
| " Optional and tuning variables: |
| |
| " jproperties_lines |
| " ----------------- |
| " Set a value for the sync block that we use to find long continuation lines |
| " in properties; the value is already large - if you have larger continuation |
| " sets you may need to increase it further - if not, and you find editing is |
| " slow, reduce the value of jproperties_lines. |
| if !exists("jproperties_lines") |
| let jproperties_lines = 256 |
| endif |
| |
| " jproperties_strict_syntax |
| " ------------------------- |
| " Most properties files assign values with "id=value" or "id:value". But, |
| " strictly, the Java properties parser also allows "id value", "id", and |
| " even more bizarrely "=value", ":value", " value", and so on. These latter |
| " ones, however, are rarely used, if ever, and handling them in the high- |
| " lighting can obscure errors in the more normal forms. So, in practice |
| " we take special efforts to pick out only "id=value" and "id:value" forms |
| " by default. If you want strict compliance, set jproperties_strict_syntax |
| " to non-zero (and good luck). |
| if !exists("jproperties_strict_syntax") |
| let jproperties_strict_syntax = 0 |
| endif |
| |
| " jproperties_show_messages |
| " ------------------------- |
| " If this properties file contains messages for use with MessageFormat, |
| " setting a non-zero value will highlight them. Messages are of the form |
| " "{...}". Highlighting doesn't go to the pains of picking apart what is |
| " in the format itself - just the basics for now. |
| if !exists("jproperties_show_messages") |
| let jproperties_show_messages = 0 |
| endif |
| |
| " ============================================================================= |
| |
| " For version 5.x: Clear all syntax items |
| " For version 6.x: Quit when a syntax file was already loaded |
| if version < 600 |
| syntax clear |
| elseif exists("b:current_syntax") |
| finish |
| endif |
| |
| " switch case sensitivity off |
| syn case ignore |
| |
| " set the block |
| exec "syn sync lines=" . jproperties_lines |
| |
| " switch between 'normal' and 'strict' syntax |
| if jproperties_strict_syntax != 0 |
| |
| " an assignment is pretty much any non-empty line at this point, |
| " trying to not think about continuation lines |
| syn match jpropertiesAssignment "^\s*[^[:space:]]\+.*$" contains=jpropertiesIdentifier |
| |
| " an identifier is anything not a space character, pretty much; it's |
| " followed by = or :, or space or tab. Or end-of-line. |
| syn match jpropertiesIdentifier "[^=:[:space:]]*" contained nextgroup=jpropertiesDelimiter |
| |
| " treat the delimiter specially to get colours right |
| syn match jpropertiesDelimiter "\s*[=:[:space:]]\s*" contained nextgroup=jpropertiesString |
| |
| " catch the bizarre case of no identifier; a special case of delimiter |
| syn match jpropertiesEmptyIdentifier "^\s*[=:]\s*" nextgroup=jpropertiesString |
| else |
| |
| " here an assignment is id=value or id:value, and we conveniently |
| " ignore continuation lines for the present |
| syn match jpropertiesAssignment "^\s*[^=:[:space:]]\+\s*[=:].*$" contains=jpropertiesIdentifier |
| |
| " an identifier is anything not a space character, pretty much; it's |
| " always followed by = or :, and we find it in an assignment |
| syn match jpropertiesIdentifier "[^=:[:space:]]\+" contained nextgroup=jpropertiesDelimiter |
| |
| " treat the delimiter specially to get colours right; this time the |
| " delimiter must contain = or : |
| syn match jpropertiesDelimiter "\s*[=:]\s*" contained nextgroup=jpropertiesString |
| endif |
| |
| " a definition is all up to the last non-\-terminated line; strictly, Java |
| " properties tend to ignore leading whitespace on all lines of a multi-line |
| " definition, but we don't look for that here (because it's a major hassle) |
| syn region jpropertiesString start="" skip="\\$" end="$" contained contains=jpropertiesSpecialChar,jpropertiesError,jpropertiesSpecial |
| |
| " {...} is a Java Message formatter - add a minimal recognition of these |
| " if required |
| if jproperties_show_messages != 0 |
| syn match jpropertiesSpecial "{[^}]*}\{-1,\}" contained |
| syn match jpropertiesSpecial "'{" contained |
| syn match jpropertiesSpecial "''" contained |
| endif |
| |
| " \uABCD are unicode special characters |
| syn match jpropertiesSpecialChar "\\u\x\{1,4}" contained |
| |
| " ...and \u not followed by a hex digit is an error, though the properties |
| " file parser won't issue an error on it, just set something wacky like zero |
| syn match jpropertiesError "\\u\X\{1,4}" contained |
| syn match jpropertiesError "\\u$"me=e-1 contained |
| |
| " other things of note are the \t,r,n,\, and the \ preceding line end |
| syn match jpropertiesSpecial "\\[trn\\]" contained |
| syn match jpropertiesSpecial "\\\s" contained |
| syn match jpropertiesSpecial "\\$" contained |
| |
| " comments begin with # or !, and persist to end of line; put here since |
| " they may have been caught by patterns above us |
| syn match jpropertiesComment "^\s*[#!].*$" contains=jpropertiesTODO |
| syn keyword jpropertiesTodo TODO FIXME XXX contained |
| |
| " Define the default highlighting. |
| " For version 5.7 and earlier: only when not done already |
| " For version 5.8 and later: only when an item doesn't have highlighting yet |
| if version >= 508 || !exists("did_jproperties_syntax_inits") |
| if version < 508 |
| let did_jproperties_syntax_inits = 1 |
| command -nargs=+ HiLink hi link <args> |
| else |
| command -nargs=+ HiLink hi def link <args> |
| endif |
| |
| HiLink jpropertiesComment Comment |
| HiLink jpropertiesTodo Todo |
| HiLink jpropertiesIdentifier Identifier |
| HiLink jpropertiesString String |
| HiLink jpropertiesExtendString String |
| HiLink jpropertiesCharacter Character |
| HiLink jpropertiesSpecial Special |
| HiLink jpropertiesSpecialChar SpecialChar |
| HiLink jpropertiesError Error |
| |
| delcommand HiLink |
| endif |
| |
| let b:current_syntax = "jproperties" |
| |
| " vim:ts=8 |