/* Copyright 2009 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. Go.xclangspec Go language specification for Xcode 3 This is a preliminary version that supports basic syntax high-lighting (such as keywords, literals, and comments) and an attempt to provide some structure information (incomplete). There is not much documentation available regarding the format of .xclangspec files. As a starting point, see for instance the outdated documentation at: http://maxao.free.fr/xcode-plugin-interface/specifications.html and the files in: /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Versions/A/Resources/ Place this file in directory: ~/Library/Application Support/Developer/Shared/Xcode/Specifications/ */ ( // ---------------------------------------------------------------------------- // Keywords // TODO How do we get general Unicode identifiers? { Identifier = "xcode.lang.go.identifier"; Syntax = { StartChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; Chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"; Words = ( "break", "case", "chan", "const", "continue", "default", "defer", "else", "fallthrough", "for", "func", "go", "goto", "if", "import", "interface", "map", "package", "range", "return", "select", "struct", "switch", "type", "var", ); Type = "xcode.syntax.keyword"; AltType = "xcode.syntax.identifier"; // non-keywords are identifiers }; }, // TODO decide what should go here, if anything { Identifier = "xcode.lang.go.interestingOperators"; Syntax = { Words = ( "...", ".", ":", ); Type = "xcode.syntax.plain"; }; }, // ---------------------------------------------------------------------------- // Syntax Coloring { Identifier = "xcode.lang.go"; Description = "Go Coloring"; BasedOn = "xcode.lang.simpleColoring"; IncludeInMenu = YES; Name = "Go"; Syntax = { Tokenizer = "xcode.lang.go.lexer.toplevel"; IncludeRules = ( "xcode.lang.go.block", "xcode.lang.go.bracketexpr", "xcode.lang.go.parenexpr", ); Type = "xcode.syntax.plain"; }; }, // The following rule returns tokens to the other rules { Identifier = "xcode.lang.go.lexer"; Syntax = { IncludeRules = ( "xcode.lang.go.comment", "xcode.lang.go.comment.singleline", "xcode.lang.string", "xcode.lang.character", "xcode.lang.go.identifier", "xcode.lang.number", "xcode.lang.go.interestingOperators", ); }; }, { Identifier = "xcode.lang.go.lexer.toplevel"; Syntax = { IncludeRules = ( "xcode.lang.go.comment", "xcode.lang.go.comment.singleline", "xcode.lang.string", "xcode.lang.character", "xcode.lang.go.type.declaration", "xcode.lang.go.identifier", "xcode.lang.number", ); }; }, { Identifier = "xcode.lang.go.type.declaration"; Syntax = { Tokenizer = "xcode.lang.go.lexer"; Rules = ( "type", "xcode.lang.go.identifier", ); Type = "xcode.syntax.name.partial"; }; }, // ---------------------------------------------------------------------------- // Blocks { Identifier = "xcode.lang.go.block"; Syntax = { Tokenizer = "xcode.lang.go.lexer"; Start = "{"; End = "}"; Foldable = YES; Recursive = YES; IncludeRules = ( "xcode.lang.go.bracketexpr", "xcode.lang.go.parenexpr", ); }; }, { Identifier = "xcode.lang.go.parenexpr"; Syntax = { Tokenizer = "xcode.lang.go.lexer"; Start = "("; End = ")"; Recursive = YES; IncludeRules = ( "xcode.lang.go.bracketexpr", ); }; }, { Identifier = "xcode.lang.go.bracketexpr"; Syntax = { Tokenizer = "xcode.lang.go.lexer"; Start = "["; End = "]"; Recursive = YES; IncludeRules = ( "xcode.lang.go.parenexpr", ); }; }, { Identifier = "xcode.lang.go.comment"; Syntax = { Start = "/*"; End = "*/"; Foldable = YES; IncludeRules = ( "xcode.lang.url", "xcode.lang.url.mail", "xcode.lang.comment.mark", ); Type = "xcode.syntax.comment"; }; }, { Identifier = "xcode.lang.go.comment.singleline"; Syntax = { Start = "//"; End = "\n"; IncludeRules = ( "xcode.lang.url", "xcode.lang.url.mail", "xcode.lang.comment.mark", ); Type = "xcode.syntax.comment"; }; }, )