xref: /vim-8.2.3635/runtime/syntax/objc.vim (revision 071d4279)
1" Vim syntax file
2" Language:	    Objective C
3" Maintainer:	    Kazunobu Kuriyama <[email protected]>
4" Ex-maintainer:    Anthony Hodsdon <[email protected]>
5" First Author:	    Valentino Kyriakides <[email protected]>
6" Last Change:	    2004 May 20
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
16if &filetype != 'objcpp'
17  " Read the C syntax to start with
18  if version < 600
19    source <sfile>:p:h/c.vim
20  else
21    runtime! syntax/c.vim
22  endif
23endif
24
25" Objective C extentions follow below
26"
27" NOTE: Objective C is abbreviated to ObjC/objc
28" and uses *.h, *.m as file extensions!
29
30
31" ObjC keywords, types, type qualifiers etc.
32syn keyword objcStatement	self super _cmd
33syn keyword objcType		id Class SEL IMP BOOL nil Nil
34syn keyword objcTypeModifier	bycopy in out inout oneway
35
36" Match the ObjC #import directive (like C's #include)
37syn region objcImported display contained start=+"+  skip=+\\\\\|\\"+  end=+"+
38syn match  objcImported display contained "<[_0-9a-zA-Z.\/]*>"
39syn match  objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
40
41" Match the important ObjC directives
42syn match  objcScopeDecl    "@public\|@private\|@protected"
43syn match  objcDirective    "@interface\|@implementation"
44syn match  objcDirective    "@class\|@end\|@defs"
45syn match  objcDirective    "@encode\|@protocol\|@selector"
46
47" Match the ObjC method types
48"
49" NOTE: here I match only the indicators, this looks
50" much nicer and reduces cluttering color highlightings.
51" However, if you prefer full method declaration matching
52" append .* at the end of the next two patterns!
53"
54syn match objcInstMethod    "^\s*-\s*"
55syn match objcFactMethod    "^\s*+\s*"
56
57" To distinguish from a header inclusion from a protocol list.
58syn match objcProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objcType,cType,Type
59
60
61" To distinguish labels from the keyword for a method's parameter.
62syn region objcKeyForMethodParam display
63    \ start="^\s*[_a-zA-Z][_a-zA-Z0-9]*\s*:\s*("
64    \ end=")\s*[_a-zA-Z][_a-zA-Z0-9]*"
65    \ contains=objcType,objcTypeModifier,cType,cStructure,cStorageClass,Type
66
67" Objective-C Constant Strings
68syn match objcSpecial display "%@" contained
69syn region objcString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objcSpecial
70
71" Objective-C Message Expressions
72syn region objcMessage display start="\[" end="\]" contains=objcMessage,objcStatement,objcType,objcTypeModifier,objcString,objcConstant,objcDirective,cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,Type
73
74syn cluster cParenGroup add=objcMessage
75syn cluster cPreProcGroup add=objcMessage
76
77" Define the default highlighting.
78" For version 5.7 and earlier: only when not done already
79" For version 5.8 and later: only when an item doesn't have highlighting yet
80if version >= 508 || !exists("did_objc_syntax_inits")
81  if version < 508
82    let did_objc_syntax_inits = 1
83    command -nargs=+ HiLink hi link <args>
84  else
85    command -nargs=+ HiLink hi def link <args>
86  endif
87
88  HiLink objcImport		Include
89  HiLink objcImported		cString
90  HiLink objcTypeModifier	objcType
91  HiLink objcType		Type
92  HiLink objcScopeDecl		Statement
93  HiLink objcInstMethod		Function
94  HiLink objcFactMethod		Function
95  HiLink objcStatement		Statement
96  HiLink objcDirective		Statement
97  HiLink objcKeyForMethodParam	None
98  HiLink objcString		cString
99  HiLink objcSpecial		Special
100  HiLink objcProtocol		None
101
102  delcommand HiLink
103endif
104
105let b:current_syntax = "objc"
106
107" vim: ts=8
108