xref: /vim-8.2.3635/runtime/syntax/objc.vim (revision 26402cb2)
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:	    2013 Feb 20
7"
8" 2013 Feb 19       Revised based on a patch sent to the maintainer by
9"                   Christos Kontas <[email protected]> on 2012 Dec 12.
10
11" For version 5.x: Clear all syntax items
12" For version 6.x: Quit when a syntax file was already loaded
13if version < 600
14  syntax clear
15elseif exists("b:current_syntax")
16  finish
17endif
18let s:keepcpo= &cpo
19set cpo&vim
20
21if &filetype != 'objcpp'
22  " Read the C syntax to start with
23  if version < 600
24    source <sfile>:p:h/c.vim
25  else
26    runtime! syntax/c.vim
27  endif
28endif
29
30" Objective C extentions follow below
31"
32" NOTE: Objective C is abbreviated to ObjC/objc
33" and uses *.h, *.m as file extensions!
34
35
36" ObjC keywords, types, type qualifiers etc.
37syn keyword objcStatement	self super _cmd
38syn keyword objcType		id Class SEL IMP BOOL
39syn keyword objcTypeModifier	bycopy in out inout oneway
40syn keyword objcConstant	nil Nil
41
42" Match the ObjC #import directive (like C's #include)
43syn region objcImported display contained start=+"+  skip=+\\\\\|\\"+  end=+"+
44syn match  objcImported display contained "<[-_0-9a-zA-Z.\/]*>"
45syn match  objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
46
47" Match the important ObjC directives
48syn match  objcScopeDecl    "@public\|@private\|@protected"
49syn match  objcDirective    "@interface\|@implementation"
50syn match  objcDirective    "@class\|@end\|@defs"
51syn match  objcDirective    "@encode\|@protocol\|@selector"
52syn match  objcDirective    "@try\|@catch\|@finally\|@throw\|@synchronized"
53
54 " New directives introduced with Objc-2.0
55syn match  objcDirective    "@property\|@synthesize\|@dynamic"
56syn match  objcDirective    "@optional\|@required"
57syn match  objcDirective    "@autoreleasepool"
58
59" Match the ObjC method types
60"
61" NOTE: here I match only the indicators, this looks
62" much nicer and reduces cluttering color highlightings.
63" However, if you prefer full method declaration matching
64" append .* at the end of the next two patterns!
65"
66syn match objcInstMethod    "^\s*-\s*"
67syn match objcFactMethod    "^\s*+\s*"
68
69" To distinguish from a header inclusion from a protocol list.
70syn match objcProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objcType,cType,Type
71
72
73" To distinguish labels from the keyword for a method's parameter.
74syn region objcKeyForMethodParam display
75    \ start="^\s*[_a-zA-Z][_a-zA-Z0-9]*\s*:\s*("
76    \ end=")\s*[_a-zA-Z][_a-zA-Z0-9]*"
77    \ contains=objcType,objcTypeModifier,cType,cStructure,cStorageClass,Type
78
79" Objective-C Constant Strings
80syn match objcSpecial display "%@" contained
81syn region objcString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objcSpecial
82
83" Objective-C Message Expressions
84syn 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
85
86syn cluster cParenGroup add=objcMessage
87syn cluster cPreProcGroup add=objcMessage
88
89" Define the default highlighting.
90" For version 5.7 and earlier: only when not done already
91" For version 5.8 and later: only when an item doesn't have highlighting yet
92if version >= 508 || !exists("did_objc_syntax_inits")
93  if version < 508
94    let did_objc_syntax_inits = 1
95    command -nargs=+ HiLink hi link <args>
96  else
97    command -nargs=+ HiLink hi def link <args>
98  endif
99
100  HiLink objcImport		Include
101  HiLink objcImported		cString
102  HiLink objcTypeModifier	objcType
103  HiLink objcType		Type
104  HiLink objcScopeDecl		Statement
105  HiLink objcInstMethod		Function
106  HiLink objcFactMethod		Function
107  HiLink objcStatement		Statement
108  HiLink objcDirective		Statement
109  HiLink objcKeyForMethodParam	None
110  HiLink objcString		cString
111  HiLink objcSpecial		Special
112  HiLink objcProtocol		None
113  HiLink objcConstant		cConstant
114
115  delcommand HiLink
116endif
117
118let b:current_syntax = "objc"
119
120let &cpo = s:keepcpo
121unlet s:keepcpo
122
123" vim: ts=8
124