1/* 2 Copyright (c) 2011 Google Inc. All rights reserved. 3 Use of this source code is governed by a BSD-style license that can be 4 found in the LICENSE file. 5 6 gyp.xclangspec 7 GYP language specification for Xcode 3 8 9 There is not much documentation available regarding the format 10 of .xclangspec files. As a starting point, see for instance the 11 outdated documentation at: 12 http://maxao.free.fr/xcode-plugin-interface/specifications.html 13 and the files in: 14 /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Versions/A/Resources/ 15 16 Place this file in directory: 17 ~/Library/Application Support/Developer/Shared/Xcode/Specifications/ 18*/ 19 20( 21 22 { 23 Identifier = "xcode.lang.gyp.keyword"; 24 Syntax = { 25 Words = ( 26 "and", 27 "or", 28 "<!", 29 "<", 30 ); 31 Type = "xcode.syntax.keyword"; 32 }; 33 }, 34 35 { 36 Identifier = "xcode.lang.gyp.target.declarator"; 37 Syntax = { 38 Words = ( 39 "'target_name'", 40 ); 41 Type = "xcode.syntax.identifier.type"; 42 }; 43 }, 44 45 { 46 Identifier = "xcode.lang.gyp.string.singlequote"; 47 Syntax = { 48 IncludeRules = ( 49 "xcode.lang.string", 50 "xcode.lang.gyp.keyword", 51 "xcode.lang.number", 52 ); 53 Start = "'"; 54 End = "'"; 55 }; 56 }, 57 58 { 59 Identifier = "xcode.lang.gyp.comma"; 60 Syntax = { 61 Words = ( ",", ); 62 63 }; 64 }, 65 66 { 67 Identifier = "xcode.lang.gyp"; 68 Description = "GYP Coloring"; 69 BasedOn = "xcode.lang.simpleColoring"; 70 IncludeInMenu = YES; 71 Name = "GYP"; 72 Syntax = { 73 Tokenizer = "xcode.lang.gyp.lexer.toplevel"; 74 IncludeRules = ( 75 "xcode.lang.gyp.dictionary", 76 ); 77 Type = "xcode.syntax.plain"; 78 }; 79 }, 80 81 // The following rule returns tokens to the other rules 82 { 83 Identifier = "xcode.lang.gyp.lexer"; 84 Syntax = { 85 IncludeRules = ( 86 "xcode.lang.gyp.comment", 87 "xcode.lang.string", 88 'xcode.lang.gyp.targetname.declarator', 89 "xcode.lang.gyp.string.singlequote", 90 "xcode.lang.number", 91 "xcode.lang.gyp.comma", 92 ); 93 }; 94 }, 95 96 { 97 Identifier = "xcode.lang.gyp.lexer.toplevel"; 98 Syntax = { 99 IncludeRules = ( 100 "xcode.lang.gyp.comment", 101 ); 102 }; 103 }, 104 105 { 106 Identifier = "xcode.lang.gyp.assignment"; 107 Syntax = { 108 Tokenizer = "xcode.lang.gyp.lexer"; 109 Rules = ( 110 "xcode.lang.gyp.assignment.lhs", 111 ":", 112 "xcode.lang.gyp.assignment.rhs", 113 ); 114 }; 115 116 }, 117 118 { 119 Identifier = "xcode.lang.gyp.target.declaration"; 120 Syntax = { 121 Tokenizer = "xcode.lang.gyp.lexer"; 122 Rules = ( 123 "xcode.lang.gyp.target.declarator", 124 ":", 125 "xcode.lang.gyp.target.name", 126 ); 127 }; 128 }, 129 130 { 131 Identifier = "xcode.lang.gyp.target.name"; 132 Syntax = { 133 Tokenizer = "xcode.lang.gyp.lexer"; 134 Rules = ( 135 "xcode.lang.gyp.string.singlequote", 136 ); 137 Type = "xcode.syntax.definition.function"; 138 }; 139 }, 140 141 { 142 Identifier = "xcode.lang.gyp.assignment.lhs"; 143 Syntax = { 144 Tokenizer = "xcode.lang.gyp.lexer"; 145 Rules = ( 146 "xcode.lang.gyp.string.singlequote", 147 ); 148 Type = "xcode.syntax.identifier.type"; 149 }; 150 }, 151 152 { 153 Identifier = "xcode.lang.gyp.assignment.rhs"; 154 Syntax = { 155 Tokenizer = "xcode.lang.gyp.lexer"; 156 Rules = ( 157 "xcode.lang.gyp.string.singlequote?", 158 "xcode.lang.gyp.array?", 159 "xcode.lang.gyp.dictionary?", 160 "xcode.lang.number?", 161 ); 162 }; 163 }, 164 165 { 166 Identifier = "xcode.lang.gyp.dictionary"; 167 Syntax = { 168 Tokenizer = "xcode.lang.gyp.lexer"; 169 Start = "{"; 170 End = "}"; 171 Foldable = YES; 172 Recursive = YES; 173 IncludeRules = ( 174 "xcode.lang.gyp.target.declaration", 175 "xcode.lang.gyp.assignment", 176 ); 177 }; 178 }, 179 180 { 181 Identifier = "xcode.lang.gyp.array"; 182 Syntax = { 183 Tokenizer = "xcode.lang.gyp.lexer"; 184 Start = "["; 185 End = "]"; 186 Foldable = YES; 187 Recursive = YES; 188 IncludeRules = ( 189 "xcode.lang.gyp.array", 190 "xcode.lang.gyp.dictionary", 191 "xcode.lang.gyp.string.singlequote", 192 ); 193 }; 194 }, 195 196 { 197 Identifier = "xcode.lang.gyp.todo.mark"; 198 Syntax = { 199 StartChars = "T"; 200 Match = ( 201 "^\(TODO\(.*\):[ \t]+.*\)$", // include "TODO: " in the markers list 202 ); 203 // This is the order of captures. All of the match strings above need the same order. 204 CaptureTypes = ( 205 "xcode.syntax.mark" 206 ); 207 Type = "xcode.syntax.comment"; 208 }; 209 }, 210 211 { 212 Identifier = "xcode.lang.gyp.comment"; 213 BasedOn = "xcode.lang.comment"; // for text macros 214 Syntax = { 215 Start = "#"; 216 End = "\n"; 217 IncludeRules = ( 218 "xcode.lang.url", 219 "xcode.lang.url.mail", 220 "xcode.lang.comment.mark", 221 "xcode.lang.gyp.todo.mark", 222 ); 223 Type = "xcode.syntax.comment"; 224 }; 225 }, 226) 227