blob: 665a47a27d3c84401021a6cc37bcf24d7629dfcb [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Objective C
3" Maintainer: Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
4" Ex-maintainer: Anthony Hodsdon <ahodsdon@fastmail.fm>
5" First Author: Valentino Kyriakides <1kyriaki@informatik.uni-hamburg.de>
Bram Moolenaar26402cb2013-02-20 21:26:00 +01006" Last Change: 2013 Feb 20
7"
8" 2013 Feb 19 Revised based on a patch sent to the maintainer by
9" Christos Kontas <xakon@yahoo.com> on 2012 Dec 12.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010
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
Bram Moolenaar9a7224b2012-04-30 15:56:52 +020018let s:keepcpo= &cpo
19set cpo&vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000020
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
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000038syn keyword objcType id Class SEL IMP BOOL
Bram Moolenaar071d4272004-06-13 20:20:40 +000039syn keyword objcTypeModifier bycopy in out inout oneway
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000040syn keyword objcConstant nil Nil
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
42" Match the ObjC #import directive (like C's #include)
43syn region objcImported display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
Bram Moolenaar9964e462007-05-05 17:54:07 +000044syn match objcImported display contained "<[-_0-9a-zA-Z.\/]*>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000045syn 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"
Bram Moolenaar36fc5352006-03-04 21:49:37 +000052syn match objcDirective "@try\|@catch\|@finally\|@throw\|@synchronized"
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
Bram Moolenaar26402cb2013-02-20 21:26:00 +010054 " New directives introduced with Objc-2.0
55syn match objcDirective "@property\|@synthesize\|@dynamic"
56syn match objcDirective "@optional\|@required"
57syn match objcDirective "@autoreleasepool"
58
Bram Moolenaar071d4272004-06-13 20:20:40 +000059" 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
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000113 HiLink objcConstant cConstant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000114
115 delcommand HiLink
116endif
117
118let b:current_syntax = "objc"
119
Bram Moolenaar9a7224b2012-04-30 15:56:52 +0200120let &cpo = s:keepcpo
121unlet s:keepcpo
122
Bram Moolenaar071d4272004-06-13 20:20:40 +0000123" vim: ts=8