1" Vim syntax file
2" Language:		M4
3" Maintainer:	Claudio Fleiner (claudio@fleiner.com)
4" URL:			http://www.fleiner.com/vim/syntax/m4.vim
5" Last Change:	2005 Jan 15
6
7" This file will highlight user function calls if they use only
8" capital letters and have at least one argument (i.e. the '('
9" must be there). Let me know if this is a problem.
10
11" For version 5.x: Clear all syntax items
12" For version 6.x: Quit when a syntax file was already loaded
13if !exists("main_syntax")
14  if version < 600
15    syntax clear
16  elseif exists("b:current_syntax")
17  finish
18endif
19" we define it here so that included files can test for it
20  let main_syntax='m4'
21endif
22
23" define the m4 syntax
24syn match  m4Variable contained "\$\d\+"
25syn match  m4Special  contained "$[@*#]"
26syn match  m4Comment  "\<\(m4_\)\=dnl\>.*" contains=SpellErrors
27syn match  m4Constants "\<\(m4_\)\=__file__"
28syn match  m4Constants "\<\(m4_\)\=__line__"
29syn keyword m4Constants divnum sysval m4_divnum m4_sysval
30syn region m4Paren    matchgroup=m4Delimiter start="(" end=")" contained contains=@m4Top
31syn region m4Command  matchgroup=m4Function  start="\<\(m4_\)\=\(define\|defn\|pushdef\)(" end=")" contains=@m4Top
32syn region m4Command  matchgroup=m4Preproc   start="\<\(m4_\)\=\(include\|sinclude\)("he=e-1 end=")" contains=@m4Top
33syn region m4Command  matchgroup=m4Statement start="\<\(m4_\)\=\(syscmd\|esyscmd\|ifdef\|ifelse\|indir\|builtin\|shift\|errprint\|m4exit\|changecom\|changequote\|changeword\|m4wrap\|debugfile\|divert\|undivert\)("he=e-1 end=")" contains=@m4Top
34syn region m4Command  matchgroup=m4builtin start="\<\(m4_\)\=\(len\|index\|regexp\|substr\|translit\|patsubst\|format\|incr\|decr\|eval\|maketemp\)("he=e-1 end=")" contains=@m4Top
35syn keyword m4Statement divert undivert
36syn region m4Command  matchgroup=m4Type      start="\<\(m4_\)\=\(undefine\|popdef\)("he=e-1 end=")" contains=@m4Top
37syn region m4Function matchgroup=m4Type      start="\<[_A-Z][_A-Z0-9]*("he=e-1 end=")" contains=@m4Top
38syn region m4String   start="`" end="'" contained contains=@m4Top,@m4StringContents,SpellErrors
39syn cluster m4Top     contains=m4Comment,m4Constants,m4Special,m4Variable,m4String,m4Paren,m4Command,m4Statement,m4Function
40
41" Define the default highlighting.
42" For version 5.7 and earlier: only when not done already
43" For version 5.8 and later: only when an item doesn't have highlighting yet
44if version >= 508 || !exists("did_m4_syn_inits")
45  if version < 508
46    let did_m4_syn_inits = 1
47    command -nargs=+ HiLink hi link <args>
48  else
49    command -nargs=+ HiLink hi def link <args>
50  endif
51  HiLink m4Delimiter Delimiter
52  HiLink m4Comment   Comment
53  HiLink m4Function  Function
54  HiLink m4Keyword   Keyword
55  HiLink m4Special   Special
56  HiLink m4String    String
57  HiLink m4Statement Statement
58  HiLink m4Preproc   PreProc
59  HiLink m4Type      Type
60  HiLink m4Special   Special
61  HiLink m4Variable  Special
62  HiLink m4Constants Constant
63  HiLink m4Builtin   Statement
64  delcommand HiLink
65endif
66
67let b:current_syntax = "m4"
68
69if main_syntax == 'm4'
70  unlet main_syntax
71endif
72
73" vim: ts=4
74