1" Vim syntax file
2" Language:	S-Lang
3" Maintainer:	Jan Hlavacek <lahvak@math.ohio-state.edu>
4" Last Change:	980216
5
6" For version 5.x: Clear all syntax items
7" For version 6.x: Quit when a syntax file was already loaded
8if version < 600
9  syntax clear
10elseif exists("b:current_syntax")
11  finish
12endif
13
14syn keyword slangStatement	break return continue EXECUTE_ERROR_BLOCK
15syn match slangStatement	"\<X_USER_BLOCK[0-4]\>"
16syn keyword slangLabel		case
17syn keyword slangConditional	!if if else switch
18syn keyword slangRepeat		while for _for loop do forever
19syn keyword slangDefinition	define typedef variable struct
20syn keyword slangOperator	or and andelse orelse shr shl xor not
21syn keyword slangBlock		EXIT_BLOCK ERROR_BLOCK
22syn match slangBlock		"\<USER_BLOCK[0-4]\>"
23syn keyword slangConstant	NULL
24syn keyword slangType		Integer_Type Double_Type Complex_Type String_Type Struct_Type Ref_Type Null_Type Array_Type DataType_Type
25
26syn match slangOctal		"\<0\d\+\>" contains=slangOctalError
27syn match slangOctalError	"[89]\+" contained
28syn match slangHex		"\<0[xX][0-9A-Fa-f]*\>"
29syn match slangDecimal		"\<[1-9]\d*\>"
30syn match slangFloat		"\<\d\+\."
31syn match slangFloat		"\<\d\+\.\d\+\([Ee][-+]\=\d\+\)\=\>"
32syn match slangFloat		"\<\d\+\.[Ee][-+]\=\d\+\>"
33syn match slangFloat		"\<\d\+[Ee][-+]\=\d\+\>"
34syn match slangFloat		"\.\d\+\([Ee][-+]\=\d\+\)\=\>"
35syn match slangImaginary	"\.\d\+\([Ee][-+]\=\d*\)\=[ij]\>"
36syn match slangImaginary	"\<\d\+\(\.\d*\)\=\([Ee][-+]\=\d\+\)\=[ij]\>"
37
38syn region slangString oneline start='"' end='"' skip='\\"'
39syn match slangCharacter	"'[^\\]'"
40syn match slangCharacter	"'\\.'"
41syn match slangCharacter	"'\\[0-7]\{1,3}'"
42syn match slangCharacter	"'\\d\d\{1,3}'"
43syn match slangCharacter	"'\\x[0-7a-fA-F]\{1,2}'"
44
45syn match slangDelim		"[][{};:,]"
46syn match slangOperator		"[-%+/&*=<>|!~^@]"
47
48"catch errors caused by wrong parenthesis
49syn region slangParen	matchgroup=slangDelim transparent start='(' end=')' contains=ALLBUT,slangParenError
50syn match slangParenError	")"
51
52syn match slangComment		"%.*$"
53syn keyword slangOperator	sizeof
54
55syn region slangPreCondit start="^\s*#\s*\(ifdef\>\|ifndef\>\|iftrue\>\|ifnfalse\>\|iffalse\>\|ifntrue\>\|if\$\|ifn\$\|\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=cComment,slangString,slangCharacter,slangNumber
56
57" Define the default highlighting.
58" For version 5.7 and earlier: only when not done already
59" For version 5.8 and later: only when an item doesn't have highlighting yet
60if version >= 508 || !exists("did_slang_syntax_inits")
61  if version < 508
62    let did_slang_syntax_inits = 1
63    command -nargs=+ HiLink hi link <args>
64  else
65    command -nargs=+ HiLink hi def link <args>
66  endif
67
68  HiLink slangDefinition	Type
69  HiLink slangBlock		slangDefinition
70  HiLink slangLabel		Label
71  HiLink slangConditional	Conditional
72  HiLink slangRepeat		Repeat
73  HiLink slangCharacter	Character
74  HiLink slangFloat		Float
75  HiLink slangImaginary	Float
76  HiLink slangDecimal		slangNumber
77  HiLink slangOctal		slangNumber
78  HiLink slangHex		slangNumber
79  HiLink slangNumber		Number
80  HiLink slangParenError	Error
81  HiLink slangOctalError	Error
82  HiLink slangOperator		Operator
83  HiLink slangStructure	Structure
84  HiLink slangInclude		Include
85  HiLink slangPreCondit	PreCondit
86  HiLink slangError		Error
87  HiLink slangStatement	Statement
88  HiLink slangType		Type
89  HiLink slangString		String
90  HiLink slangConstant		Constant
91  HiLink slangRangeArray	slangConstant
92  HiLink slangComment		Comment
93  HiLink slangSpecial		SpecialChar
94  HiLink slangTodo		Todo
95  HiLink slangDelim		Delimiter
96
97  delcommand HiLink
98endif
99
100let b:current_syntax = "slang"
101
102" vim: ts=8
103