blob: cf943f10856ea18149fe0bd4ae6da957dc8a3be2 [file] [log] [blame]
Bram Moolenaar864207d2008-06-24 22:14:38 +00001" Vim syntax file
2" Language: HASTE
3" Maintainer: M. Tranchero - maurizio.tranchero?gmail.com
4" Credits: some parts have been taken from vhdl, verilog, and C syntax
5" files
6" version: 0.5
7
8" HASTE
9if exists("b:current_syntax")
10 finish
11endif
12" For version 5.x: Clear all syntax items
13" For version 6.x: Quit when a syntax file was already loaded
14if version < 600
15 syntax clear
16elseif exists("b:current_syntax")
17 finish
18endif
19
20" case is significant
21syn case match
22
23" HASTE keywords
24syn keyword hasteStatement act alias arb array begin bitvec
25syn keyword hasteStatement bitwidth boolvec broad case
26syn keyword hasteStatement cast chan const dataprobe do edge
27syn keyword hasteStatement else end export false ff fi file
28syn keyword hasteStatement fit for forever func if import
29syn keyword hasteStatement inprobe is les main narb narrow
30syn keyword hasteStatement negedge od of or outprobe pas
31syn keyword hasteStatement posedge probe proc ram ramreg
32syn keyword hasteStatement repeat rom romreg sample sel si
33syn keyword hasteStatement sign sizeof skip stop then true
34syn keyword hasteStatement type until var wait wire
35syn keyword hasteFutureExt Z ffe partial
36syn keyword hasteVerilog buf reg while
37
38" Special match for "if", "or", and "else" since "else if"
39" and other "else+if" combination shouldn't be highlighted.
40" The right keyword is "or"
41syn match hasteStatement "\<\(if\|then\|else\|fi\)\>"
42syn match hasteNone "\<else\s\+if\>$"
43syn match hasteNone "\<else\s\+if\>\s"
44syn match hasteNone "\<elseif\>\s"
45syn match hasteNone "\<elsif\>\s"
46syn match hasteStatement "\<\(case\|is\|si\)\>"
47syn match hasteStatement "\<\(repeat\|until\)\>"
48syn match hasteStatement "\<\(forever\|do\|od\)\>"
49syn match hasteStatement "\<\(for\|do\|od\)\>"
50syn match hasteStatement "\<\(do\|or\|od\)\>"
51syn match hasteStatement "\<\(sel\|les\)\>"
52syn match hasteError "\<\d\+[_a-zA-Z]\+\>"
53
54" Predifined Haste types
55syn keyword hasteType bool
56
57" Values for standard Haste types
58" syn match hasteVector "\'[0L1HXWZU\-\?]\'"
59
60syn match hasteVector "0b\"[01_]\+\""
61syn match hasteVector "0x\"[0-9a-f_]\+\""
62syn match hasteCharacter "'.'"
63syn region hasteString start=+"+ end=+"+
64" C pre-processor directives
65"syn region hasteIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
66syn match hasteIncluded display contained "<[^>]*>"
67syn match hasteIncluded display contained "<[^"]*>"
68syn match hasteInclude display "^\s*#include\>\s*["<]" contains=hasteIncluded
69syn region hasteDefine start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@hastePreProcGroup,@Spell
70syn region hasteDefine start="^\s*\(%:\|#\)\s*\(ifndef\|ifdef\|endif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=@Spell
71syn region hastePreCondit start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=hasteComment,hasteCppString,hasteCharacter,hasteCppParen,hasteParenError,hasteNumbers,hasteCommentError,hasteSpaceError
72syn region hastePreProc start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@hastePreProcGroup,@Spell
73syn cluster hastePreProcGroup contains=hasteIncluded,hasteInclude,hasteDefine
74syn region hasteCppSkip contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=hasteSpaceError,hasteCppSkip
75
76" floating numbers
77syn match hasteNumber "-\=\<\d\+\.\d\+\(E[+\-]\=\d\+\)\>"
78syn match hasteNumber "-\=\<\d\+\.\d\+\>"
79syn match hasteNumber "0*2#[01_]\+\.[01_]\+#\(E[+\-]\=\d\+\)\="
80syn match hasteNumber "0*16#[0-9a-f_]\+\.[0-9a-f_]\+#\(E[+\-]\=\d\+\)\="
81" integer numbers
82syn match hasteNumber "-\=\<\d\+\(E[+\-]\=\d\+\)\>"
83syn match hasteNumber "-\=\<\d\+\>"
84syn match hasteNumber "0*2#[01_]\+#\(E[+\-]\=\d\+\)\="
85syn match hasteNumber "0*16#[0-9a-f_]\+#\(E[+\-]\=\d\+\)\="
86" operators
87syn keyword hasteSeparators & , . \| :
88syn keyword hasteExecution \|\| ; @
89syn keyword hasteOperator := ? !
90syn keyword hasteTypeConstr "[" << >> .. "]" ~
91syn keyword hasteExprOp < <= >= > = # <> + - * == ##
92syn keyword hasteMisc ( ) 0x 0b
93"
94syn match hasteSeparators "[&:\|,.]"
95syn match hasteOperator ":="
96syn match hasteOperator "?"
97syn match hasteOperator "!"
98syn match hasteExecution "||"
99syn match hasteExecution ";"
100syn match hasteExecution "@"
101syn match hasteType "\[\["
102syn match hasteType "\]\]"
103syn match hasteType "<<"
104syn match hasteType ">>"
105syn match hasteExprOp "<"
106syn match hasteExprOp "<="
107syn match hasteExprOp ">="
108syn match hasteExprOp ">"
109syn match hasteExprOp "<>"
110syn match hasteExprOp "="
111syn match hasteExprOp "=="
112syn match hasteExprOp "##"
113syn match hasteExprOp "#"
114syn match hasteExprOp "*"
115syn match hasteExprOp "+"
116
117syn region hasteComment start="/\*" end="\*/" contains=@Spell
118syn region hasteComment start="{" end="}" contains=@Spell
119syn match hasteComment "//.*" contains=@Spell
120
121" Define the default highlighting.
122" Only when an item doesn't have highlighting yet
123hi def link hasteSpecial Special
124hi def link hasteStatement Statement
125hi def link hasteCharacter String
126hi def link hasteString String
127hi def link hasteVector String
128hi def link hasteBoolean String
129hi def link hasteComment Comment
130hi def link hasteNumber String
131hi def link hasteTime String
132hi def link hasteType Type
133hi def link hasteGlobal Error
134hi def link hasteError Error
135hi def link hasteAttribute Type
136hi def link hasteSeparators Special
137hi def link hasteExecution Special
138hi def link hasteTypeConstr Special
139hi def link hasteOperator Type
140hi def link hasteExprOp Type
141hi def link hasteMisc String
142hi def link hasteFutureExt Error
143hi def link hasteVerilog Error
144hi def link hasteDefine Macro
145hi def link hasteInclude Include
146hi def link hastePreProc PreProc
147
148let b:current_syntax = "haste"
149
150" vim: ts=8