1" Vim syntax file
2" Language:	Windows Registry export with regedit (*.reg)
3" Maintainer:	Dominique St�phan (dominique@mggen.com)
4" URL: http://www.mggen.com/vim/syntax/registry.zip
5" Last change:	2004 Apr 23
6
7" clear any unwanted syntax defs
8" For version 5.x: Clear all syntax items
9" For version 6.x: Quit when a syntax file was already loaded
10if version < 600
11  syntax clear
12elseif exists("b:current_syntax")
13  finish
14endif
15
16" shut case off
17syn case ignore
18
19" Head of regedit .reg files, it's REGEDIT4 on Win9#/NT
20syn match registryHead		"^REGEDIT[0-9]*$"
21
22" Comment
23syn match  registryComment	"^;.*$"
24
25" Registry Key constant
26syn keyword registryHKEY	HKEY_LOCAL_MACHINE HKEY_CLASSES_ROOT HKEY_CURRENT_USER
27syn keyword registryHKEY	HKEY_USERS HKEY_CURRENT_CONFIG HKEY_DYN_DATA
28" Registry Key shortcuts
29syn keyword registryHKEY	HKLM HKCR HKCU HKU HKCC HKDD
30
31" Some values often found in the registry
32" GUID (Global Unique IDentifier)
33syn match   registryGUID	"{[0-9A-Fa-f]\{8}\-[0-9A-Fa-f]\{4}\-[0-9A-Fa-f]\{4}\-[0-9A-Fa-f]\{4}\-[0-9A-Fa-f]\{12}}" contains=registrySpecial
34
35" Disk
36" syn match   registryDisk	"[a-zA-Z]:\\\\"
37
38" Special and Separator characters
39syn match   registrySpecial	"\\"
40syn match   registrySpecial	"\\\\"
41syn match   registrySpecial	"\\\""
42syn match   registrySpecial	"\."
43syn match   registrySpecial	","
44syn match   registrySpecial	"\/"
45syn match   registrySpecial	":"
46syn match   registrySpecial	"-"
47
48" String
49syn match   registryString	"\".*\"" contains=registryGUID,registrySpecial
50
51" Path
52syn region  registryPath		start="\[" end="\]" contains=registryHKEY,registryGUID,registrySpecial
53
54" Path to remove
55" like preceding path but with a "-" at begin
56syn region registryRemove	start="\[\-" end="\]" contains=registryHKEY,registryGUID,registrySpecial
57
58" Subkey
59syn match  registrySubKey		"^\".*\"="
60" Default value
61syn match  registrySubKey		"^\@="
62
63" Numbers
64
65" Hex or Binary
66" The format can be precised between () :
67" 0    REG_NONE
68" 1    REG_SZ
69" 2    REG_EXPAND_SZ
70" 3    REG_BINARY
71" 4    REG_DWORD, REG_DWORD_LITTLE_ENDIAN
72" 5    REG_DWORD_BIG_ENDIAN
73" 6    REG_LINK
74" 7    REG_MULTI_SZ
75" 8    REG_RESOURCE_LIST
76" 9    REG_FULL_RESOURCE_DESCRIPTOR
77" 10   REG_RESOURCE_REQUIREMENTS_LIST
78" The value can take several lines, if \ ends the line
79" The limit to 999 matches is arbitrary, it avoids Vim crashing on a very long
80" line of hex values that ends in a comma.
81"syn match registryHex		"hex\(([0-9]\{0,2})\)\=:\([0-9a-fA-F]\{2},\)\{0,999}\([0-9a-fA-F]\{2}\|\\\)$" contains=registrySpecial
82syn match registryHex		"hex\(([0-9]\{0,2})\)\=:\([0-9a-fA-F]\{2},\)*\([0-9a-fA-F]\{2}\|\\\)$" contains=registrySpecial
83syn match registryHex		"^\s*\([0-9a-fA-F]\{2},\)\{0,999}\([0-9a-fA-F]\{2}\|\\\)$" contains=registrySpecial
84" Dword (32 bits)
85syn match registryDword		"dword:[0-9a-fA-F]\{8}$" contains=registrySpecial
86
87if version >= 508 || !exists("did_registry_syntax_inits")
88  if version < 508
89    let did_registry_syntax_inits = 1
90    command -nargs=+ HiLink hi link <args>
91  else
92    command -nargs=+ HiLink hi def link <args>
93  endif
94
95" The default methods for highlighting.  Can be overridden later
96   HiLink registryComment	Comment
97   HiLink registryHead		Constant
98   HiLink registryHKEY		Constant
99   HiLink registryPath		Special
100   HiLink registryRemove	PreProc
101   HiLink registryGUID		Identifier
102   HiLink registrySpecial	Special
103   HiLink registrySubKey	Type
104   HiLink registryString	String
105   HiLink registryHex		Number
106   HiLink registryDword		Number
107
108   delcommand HiLink
109endif
110
111
112let b:current_syntax = "registry"
113
114" vim:ts=8
115