Merge branch 'hack/autopaste'
[vim-kana.git] / runtime / syntax / b.vim
blob7f6c4e880a23a18a2d698206f36fc13b24278f89
1 " Vim syntax file
2 " Language:     B (A Formal Method with refinement and mathematical proof)
3 " Maintainer:   Mathieu Clabaut <mathieu.clabaut@free.fr>
4 " LastChange:   25 Apr 2001
7 " For version 5.x: Clear all syntax items
8 " For version 6.x: Quit when a syntax file was already loaded
9 if version < 600
10    syntax clear
11 elseif exists("b:current_syntax")
12    finish
13 endif
16 " A bunch of useful B keywords
17 syn keyword bStatement  MACHINE 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
18 syn keyword bLabel              CASE IN EITHER OR CHOICE DO OF
19 syn keyword bConditional        IF ELSE SELECT ELSIF THEN WHEN
20 syn keyword bRepeat             WHILE FOR
21 syn 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
22 syn keyword bKeywords           LET VAR BE IN BEGIN END  POW POW1 FIN FIN1  PRE  SIGMA STRING UNION IS ANY WHERE
23 syn match bKeywords     "||"
25 syn keyword bBoolean    TRUE FALSE bfalse btrue
26 syn keyword bConstant   PI MAXINT MININT User_Pass PatchProver PatchProverH0 PatchProverB0 FLAT ARI DED SUB RES
27 syn 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
29 syn keyword bLogic      or not
30 syn match bLogic        "\&\|=>\|<=>"
32 syn keyword cTodo contained     TODO FIXME XXX
34 " String and Character constants
35 " Highlight special characters (those which have a backslash) differently
36 syn match bSpecial contained    "\\[0-7][0-7][0-7]\=\|\\."
37 syn region bString              start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=bSpecial
38 syn match bCharacter            "'[^\\]'"
39 syn match bSpecialCharacter     "'\\.'"
40 syn match bSpecialCharacter     "'\\[0-7][0-7]'"
41 syn match bSpecialCharacter     "'\\[0-7][0-7][0-7]'"
43 "catch errors caused by wrong parenthesis
44 syn region bParen               transparent start='(' end=')' contains=ALLBUT,bParenError,bIncluded,bSpecial,bTodo,bUserLabel,bBitField
45 syn match bParenError           ")"
46 syn match bInParen contained    "[{}]"
48 "integer number, or floating point number without a dot and with "f".
49 syn case ignore
50 syn match bNumber               "\<[0-9]\+\>"
51 "syn match bIdentifier  "\<[a-z_][a-z0-9_]*\>"
52 syn case match
54 if exists("b_comment_strings")
55   " A comment can contain bString, bCharacter and bNumber.
56   " But a "*/" inside a bString in a bComment DOES end the comment!  So we
57   " need to use a special type of bString: bCommentString, which also ends on
58   " "*/", and sees a "*" at the start of the line as comment again.
59   " Unfortunately this doesn't very well work for // type of comments :-(
60   syntax match bCommentSkip     contained "^\s*\*\($\|\s\+\)"
61   syntax region bCommentString  contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=bSpecial,bCommentSkip
62   syntax region bComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=bSpecial
63   syntax region bComment        start="/\*" end="\*/" contains=bTodo,bCommentString,bCharacter,bNumber,bFloat
64   syntax region bComment        start="/\?\*" end="\*\?/" contains=bTodo,bCommentString,bCharacter,bNumber,bFloat
65   syntax match  bComment        "//.*" contains=bTodo,bComment2String,bCharacter,bNumber
66 else
67   syn region bComment           start="/\*" end="\*/" contains=bTodo
68   syn region bComment           start="/\?\*" end="\*\?/" contains=bTodo
69   syn match bComment            "//.*" contains=bTodo
70 endif
71 syntax match bCommentError      "\*/"
73 syn keyword bType               INT INTEGER BOOL NAT NATURAL NAT1 NATURAL1
75 syn region bPreCondit   start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=bComment,bString,bCharacter,bNumber,bCommentError
76 syn region bIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
77 syn match bIncluded contained "<[^>]*>"
78 syn match bInclude              "^\s*#\s*include\>\s*["<]" contains=bIncluded
80 syn region bDefine              start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen
81 syn region bPreProc             start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen
84 syn sync ccomment bComment minlines=10
86 " Define the default highlighting.
87 " For version 5.7 and earlier: only when not done already
88 " For version 5.8 and later: only when an item doesn't have highlighting yet
90 if version >= 508 || !exists("did_b_syntax_inits")
91    if version < 508
92       let did_b_syntax_inits = 1
93       command -nargs=+ HiLink hi link <args>
94    else
95       command -nargs=+ HiLink hi def link <args>
96    endif
98   " The default methods for highlighting.  Can be overridden later
99   HiLink bLabel Label
100   HiLink bUserLabel     Label
101   HiLink bConditional   Conditional
102   HiLink bRepeat        Repeat
103   HiLink bLogic Special
104   HiLink bCharacter     Character
105   HiLink bSpecialCharacter bSpecial
106   HiLink bNumber        Number
107   HiLink bFloat Float
108   HiLink bOctalError    bError
109   HiLink bParenError    bError
110 " HiLink bInParen       bError
111   HiLink bCommentError  bError
112   HiLink bBoolean       Identifier
113   HiLink bConstant      Identifier
114   HiLink bGuard Identifier
115   HiLink bOperator      Operator
116   HiLink bKeywords      Operator
117   HiLink bOps           Identifier
118   HiLink bStructure     Structure
119   HiLink bStorageClass  StorageClass
120   HiLink bInclude       Include
121   HiLink bPreProc       PreProc
122   HiLink bDefine        Macro
123   HiLink bIncluded      bString
124   HiLink bError Error
125   HiLink bStatement     Statement
126   HiLink bPreCondit     PreCondit
127   HiLink bType          Type
128   HiLink bCommentError  bError
129   HiLink bCommentString bString
130   HiLink bComment2String bString
131   HiLink bCommentSkip   bComment
132   HiLink bString        String
133   HiLink bComment       Comment
134   HiLink bSpecial       SpecialChar
135   HiLink bTodo          Todo
136   "hi link bIdentifier  Identifier
137   delcommand HiLink
138 endif
140 let b:current_syntax = "b"
142 " vim: ts=8