1" Vim syntax file
2" Language:	B (A Formal Method with refinement and mathematical proof)
3" Maintainer:	Mathieu Clabaut <mathieu.clabaut@gmail.com>
4" Contributor:  Csaba Hoch
5" LastChange:	8 Dec 2007
6
7
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
17" A bunch of useful B keywords
18syn keyword bStatement	        MACHINE MODEL SEES OPERATIONS INCLUDES DEFINITIONS CONSTRAINTS CONSTANTS VARIABLES CONCRETE_CONSTANTS CONCRETE_VARIABLES ABSTRACT_CONSTANTS ABSTRACT_VARIABLES HIDDEN_CONSTANTS HIDDEN_VARIABLES ASSERT ASSERTIONS  EXTENDS IMPLEMENTATION REFINEMENT IMPORTS USES INITIALISATION INVARIANT PROMOTES PROPERTIES REFINES SETS VALUES VARIANT VISIBLE_CONSTANTS VISIBLE_VARIABLES THEORY XLS THEOREMS LOCAL_OPERATIONS
19syn keyword bLabel		CASE IN EITHER OR CHOICE DO OF
20syn keyword bConditional	IF ELSE SELECT ELSIF THEN WHEN
21syn keyword bRepeat		WHILE FOR
22syn keyword bOps		bool card conc closure closure1 dom first fnc front not or id inter iseq iseq1 iterate last max min mod perm pred prj1 prj2 ran rel rev seq seq1 size skip succ tail union
23syn keyword bKeywords		LET VAR BE IN BEGIN END  POW POW1 FIN FIN1  PRE  SIGMA STRING UNION IS ANY WHERE
24
25syn keyword bBoolean	TRUE FALSE bfalse btrue
26syn keyword bConstant	PI MAXINT MININT User_Pass PatchProver PatchProverH0 PatchProverB0 FLAT ARI DED SUB RES
27syn keyword bGuard binhyp band bnot bguard bsearch bflat bfresh bguardi bget bgethyp barith bgetresult bresult bgoal bmatch bmodr bnewv  bnum btest bpattern bprintf bwritef bsubfrm  bvrb blvar bcall bappend bclose
28
29syn keyword bLogic	or not
30syn match bLogic	"\(!\|#\|%\|&\|+->>\|+->\|-->>\|->>\|-->\|->\|/:\|/<:\|/<<:\|/=\|/\\\|/|\\\|::\|:\|;:\|<+\|<->\|<--\|<-\|<:\|<<:\|<<|\|<=>\|<|\|==\|=>\|>+>>\|>->\|>+>\|||\||->\)"
31syn match bNothing      /:=/
32
33syn keyword cTodo contained	TODO FIXME XXX
34
35" String and Character constants
36" Highlight special characters (those which have a backslash) differently
37syn match bSpecial contained	"\\[0-7][0-7][0-7]\=\|\\."
38syn region bString		start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=bSpecial
39syn match bCharacter		"'[^\\]'"
40syn match bSpecialCharacter	"'\\.'"
41syn match bSpecialCharacter	"'\\[0-7][0-7]'"
42syn match bSpecialCharacter	"'\\[0-7][0-7][0-7]'"
43
44"catch errors caused by wrong parenthesis
45syn region bParen		transparent start='(' end=')' contains=ALLBUT,bParenError,bIncluded,bSpecial,bTodo,bUserLabel,bBitField
46syn match bParenError		")"
47syn match bInParen contained	"[{}]"
48
49"integer number, or floating point number without a dot and with "f".
50syn case ignore
51syn match bNumber		"\<[0-9]\+\>"
52"syn match bIdentifier	"\<[a-z_][a-z0-9_]*\>"
53syn case match
54
55  syn region bComment		start="/\*" end="\*/" contains=bTodo
56  syn match bComment		"//.*" contains=bTodo
57syntax match bCommentError	"\*/"
58
59syn keyword bType		INT INTEGER BOOL NAT NATURAL NAT1 NATURAL1
60
61syn region bPreCondit	start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=bComment,bString,bCharacter,bNumber,bCommentError
62syn region bIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
63syn match bIncluded contained "<[^>]*>"
64syn match bInclude		"^\s*#\s*include\>\s*["<]" contains=bIncluded
65
66syn region bDefine		start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen
67syn region bPreProc		start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen
68
69syn sync ccomment bComment minlines=10
70
71" Define the default highlighting.
72" For version 5.7 and earlier: only when not done already
73" For version 5.8 and later: only when an item doesn't have highlighting yet
74
75if version >= 508 || !exists("did_b_syntax_inits")
76   if version < 508
77      let did_b_syntax_inits = 1
78      command -nargs=+ HiLink hi link <args>
79   else
80      command -nargs=+ HiLink hi def link <args>
81   endif
82
83  " The default methods for highlighting.  Can be overridden later
84  HiLink bLabel	Label
85  HiLink bUserLabel	Label
86  HiLink bConditional	Conditional
87  HiLink bRepeat	Repeat
88  HiLink bLogic	Special
89  HiLink bCharacter	Character
90  HiLink bSpecialCharacter bSpecial
91  HiLink bNumber	Number
92  HiLink bFloat	Float
93  HiLink bOctalError	bError
94  HiLink bParenError	bError
95" HiLink bInParen	bError
96  HiLink bCommentError	bError
97  HiLink bBoolean	Identifier
98  HiLink bConstant	Identifier
99  HiLink bGuard	Identifier
100  HiLink bOperator	Operator
101  HiLink bKeywords	Operator
102  HiLink bOps		Identifier
103  HiLink bStructure	Structure
104  HiLink bStorageClass	StorageClass
105  HiLink bInclude	Include
106  HiLink bPreProc	PreProc
107  HiLink bDefine	Macro
108  HiLink bIncluded	bString
109  HiLink bError	Error
110  HiLink bStatement	Statement
111  HiLink bPreCondit	PreCondit
112  HiLink bType		Type
113  HiLink bCommentError	bError
114  HiLink bCommentString bString
115  HiLink bComment2String bString
116  HiLink bCommentSkip	bComment
117  HiLink bString	String
118  HiLink bComment	Comment
119  HiLink bSpecial	SpecialChar
120  HiLink bTodo		Todo
121  "hi link bIdentifier	Identifier
122  delcommand HiLink
123endif
124
125let b:current_syntax = "b"
126
127" vim: ts=8
128