diff options
| author | Ondřej Surý <ondrej@sury.org> | 2011-09-13 13:13:40 +0200 | 
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2011-09-13 13:13:40 +0200 | 
| commit | 5ff4c17907d5b19510a62e08fd8d3b11e62b431d (patch) | |
| tree | c0650497e988f47be9c6f2324fa692a52dea82e1 /misc/xcode/go.xclangspec | |
| parent | 80f18fc933cf3f3e829c5455a1023d69f7b86e52 (diff) | |
| download | golang-upstream/60.tar.gz | |
Imported Upstream version 60upstream/60
Diffstat (limited to 'misc/xcode/go.xclangspec')
| -rw-r--r-- | misc/xcode/go.xclangspec | 293 | 
1 files changed, 293 insertions, 0 deletions
| diff --git a/misc/xcode/go.xclangspec b/misc/xcode/go.xclangspec new file mode 100644 index 000000000..e515564da --- /dev/null +++ b/misc/xcode/go.xclangspec @@ -0,0 +1,293 @@ +/* +	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"; +		}; +	}, + +	{ +		Identifier = "xcode.lang.go.rawstring"; +		Syntax = { +			Start = "`"; +			End = "`"; +			Type = "xcode.syntax.string"; +		}; +	}, + +// ---------------------------------------------------------------------------- +// 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.rawstring", +				"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.rawstring", +				"xcode.lang.go.type.declaration", +				"xcode.lang.go.method.declaration", +				"xcode.lang.go.function.declaration", +				"xcode.lang.go.identifier", +				"xcode.lang.number", +			); +		}; +	}, + +	{ +		Identifier = "xcode.lang.go.method.declaration"; +		Syntax = { +			Tokenizer = "xcode.lang.go.lexer"; +			Rules = ( +				"func", +				"xcode.lang.go.parenexpr", +				"xcode.lang.go.identifier", +				"xcode.lang.go.parenexpr", +			); +			Type = "xcode.syntax.declaration.method"; +		}; +	}, + +	{ +		Identifier = "xcode.lang.go.type.declaration"; +		Syntax = { +			Tokenizer = "xcode.lang.go.lexer"; +			Rules = ( +				"type", +				"xcode.lang.go.identifier", +			); +			Type = "xcode.syntax.typedef"; +		}; +	}, + +	{ +		Identifier = "xcode.lang.go.function.declaration"; +		Syntax = { +			Tokenizer = "xcode.lang.go.lexer"; +			Rules = ( +				"func", +				"xcode.lang.go.identifier", +				"xcode.lang.go.parenexpr", +			); +			Type = "xcode.syntax.declaration.function"; +		}; +	}, + +// ---------------------------------------------------------------------------- +// 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", +				"xcode.lang.go.block", +			); +		}; +	}, + +	{ +		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"; +		}; +	}, + +	// This rule recognizes special comments markers and adds them +	// to the list of file markers at the top of the editor window. +	// This overrides the markers specified in +	// /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Versions/A/Resources/BaseSupport.xclangspec +	// and appears to apply them to all languages. Thus, for now +	// "inherit" the existing markers here for backward-compatibility. +	{ +		Identifier = "xcode.lang.comment.mark"; +		Syntax = { +			StartChars = "BMTF!?"; +			Match = ( +				// Go-specific markers +				"^\(BUG.*$\)$",			// inlude "BUG" in the markers list +				"^\(TODO.*$\)$",		// inlude "TODO" in the markers list +				// inherited markers +				"^MARK:[ \t]+\(.*\)$", +				"^\(TODO:[ \t]+.*\)$",		// include "TODO: " in the markers list +				"^\(FIXME:[ \t]+.*\)$",		// include "FIXME: " in the markers list +				"^\(!!!:.*\)$",			// include "!!!:" in the markers list +				"^\(\\?\\?\\?:.*\)$"		// include "???:" in the markers list +			); +			// This is the order of captures. All of the match strings above need the same order. +			CaptureTypes = ( +				"xcode.syntax.mark" +			); +			Type = "xcode.syntax.comment"; +		}; +	}, + +) | 
