1" Vim syntax file
2" Language:	Smalltalk
3" Maintainer:	Arndt Hesse <hesse@self.de>
4" Last Change:	2001 May 09
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
14" some Smalltalk keywords and standard methods
15syn keyword	stKeyword	super self class true false new not
16syn keyword	stKeyword	notNil isNil inspect out nil
17syn match	stMethod	"\<do\>:"
18syn match	stMethod	"\<whileTrue\>:"
19syn match	stMethod	"\<whileFalse\>:"
20syn match	stMethod	"\<ifTrue\>:"
21syn match	stMethod	"\<ifFalse\>:"
22syn match	stMethod	"\<put\>:"
23syn match	stMethod	"\<to\>:"
24syn match	stMethod	"\<at\>:"
25syn match	stMethod	"\<add\>:"
26syn match	stMethod	"\<new\>:"
27syn match	stMethod	"\<for\>:"
28syn match	stMethod	"\<methods\>:"
29syn match	stMethod	"\<methodsFor\>:"
30syn match	stMethod	"\<instanceVariableNames\>:"
31syn match	stMethod	"\<classVariableNames\>:"
32syn match	stMethod	"\<poolDictionaries\>:"
33syn match	stMethod	"\<subclass\>:"
34
35" the block of local variables of a method
36syn region stLocalVariables	start="^[ \t]*|" end="|"
37
38" the Smalltalk comment
39syn region stComment	start="\"" end="\""
40
41" the Smalltalk strings and single characters
42syn region stString	start='\'' skip="''" end='\''
43syn match  stCharacter	"$."
44
45syn case ignore
46
47" the symols prefixed by a '#'
48syn match  stSymbol	"\(#\<[a-z_][a-z0-9_]*\>\)"
49syn match  stSymbol	"\(#'[^']*'\)"
50
51" the variables in a statement block for loops
52syn match  stBlockVariable "\(:[ \t]*\<[a-z_][a-z0-9_]*\>[ \t]*\)\+|" contained
53
54" some representations of numbers
55syn match  stNumber	"\<\d\+\(u\=l\=\|lu\|f\)\>"
56syn match  stFloat	"\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
57syn match  stFloat	"\<\d\+e[-+]\=\d\+[fl]\=\>"
58
59syn case match
60
61" a try to higlight paren mismatches
62syn region stParen	transparent start='(' end=')' contains=ALLBUT,stParenError
63syn match  stParenError	")"
64syn region stBlock	transparent start='\[' end='\]' contains=ALLBUT,stBlockError
65syn match  stBlockError	"\]"
66syn region stSet	transparent start='{' end='}' contains=ALLBUT,stSetError
67syn match  stSetError	"}"
68
69hi link stParenError stError
70hi link stSetError stError
71hi link stBlockError stError
72
73" synchronization for syntax analysis
74syn sync minlines=50
75
76" Define the default highlighting.
77" For version 5.7 and earlier: only when not done already
78" For version 5.8 and later: only when an item doesn't have highlighting yet
79if version >= 508 || !exists("did_st_syntax_inits")
80  if version < 508
81    let did_st_syntax_inits = 1
82    command -nargs=+ HiLink hi link <args>
83  else
84    command -nargs=+ HiLink hi def link <args>
85  endif
86
87  HiLink stKeyword		Statement
88  HiLink stMethod		Statement
89  HiLink stComment		Comment
90  HiLink stCharacter		Constant
91  HiLink stString		Constant
92  HiLink stSymbol		Special
93  HiLink stNumber		Type
94  HiLink stFloat		Type
95  HiLink stError		Error
96  HiLink stLocalVariables	Identifier
97  HiLink stBlockVariable	Identifier
98
99  delcommand HiLink
100endif
101
102let b:current_syntax = "st"
103