mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			288 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			288 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:	Ada (95) | ||
|  | " Maintainer:	David A. Wheeler <dwheeler@dwheeler.com> | ||
|  | " URL: http://www.dwheeler.com/vim | ||
|  | " Last Change:	2001-11-02 | ||
|  | 
 | ||
|  | " Former Maintainer:	Simon Bradley <simon.bradley@pitechnology.com> | ||
|  | "			(was <sib93@aber.ac.uk>) | ||
|  | " Other contributors: Preben Randhol. | ||
|  | " The formal spec of Ada95 (ARM) is the "Ada95 Reference Manual". | ||
|  | " For more Ada95 info, see http://www.gnuada.org and http://www.adapower.com. | ||
|  | 
 | ||
|  | " This vim syntax file works on vim 5.6, 5.7, 5.8 and 6.x. | ||
|  | " It implements Bram Moolenaar's April 25, 2001 recommendations to make | ||
|  | " the syntax file maximally portable across different versions of vim. | ||
|  | " If vim 6.0+ is available, | ||
|  | " this syntax file takes advantage of the vim 6.0 advanced pattern-matching | ||
|  | " functions to avoid highlighting uninteresting leading spaces in | ||
|  | " some expressions containing "with" and "use". | ||
|  | 
 | ||
|  | " For version 5.x: Clear all syntax items | ||
|  | " For version 6.x: Quit when a syntax file was already loaded | ||
|  | if version < 600 | ||
|  |  syntax clear | ||
|  | elseif exists("b:current_syntax") | ||
|  |  finish | ||
|  | endif | ||
|  | 
 | ||
|  | " Ada is entirely case-insensitive. | ||
|  | syn case ignore | ||
|  | 
 | ||
|  | " We don't need to look backwards to highlight correctly; | ||
|  | " this speeds things up greatly. | ||
|  | syn sync minlines=1 maxlines=1 | ||
|  | 
 | ||
|  | " Highlighting commands.  There are 69 reserved words in total in Ada95. | ||
|  | " Some keywords are used in more than one way. For example: | ||
|  | " 1. "end" is a general keyword, but "end if" ends a Conditional. | ||
|  | " 2. "then" is a conditional, but "and then" is an operator. | ||
|  | 
 | ||
|  | 
 | ||
|  | " Standard Exceptions (including I/O). | ||
|  | " We'll highlight the standard exceptions, similar to vim's Python mode. | ||
|  | " It's possible to redefine the standard exceptions as something else, | ||
|  | " but doing so is very bad practice, so simply highlighting them makes sense. | ||
|  | syn keyword adaException Constraint_Error Program_Error Storage_Error | ||
|  | syn keyword adaException Tasking_Error | ||
|  | syn keyword adaException Status_Error Mode_Error Name_Error Use_Error | ||
|  | syn keyword adaException Device_Error End_Error Data_Error Layout_Error | ||
|  | syn keyword adaException Length_Error Pattern_Error Index_Error | ||
|  | syn keyword adaException Translation_Error | ||
|  | syn keyword adaException Time_Error Argument_Error | ||
|  | syn keyword adaException Tag_Error | ||
|  | syn keyword adaException Picture_Error | ||
|  | " Interfaces | ||
|  | syn keyword adaException Terminator_Error Conversion_Error | ||
|  | syn keyword adaException Pointer_Error Dereference_Error Update_Error | ||
|  | " This isn't in the Ada spec, but a GNAT extension. | ||
|  | syn keyword adaException Assert_Failure | ||
|  | " We don't list ALL exceptions defined in particular compilers (e.g., GNAT), | ||
|  | " because it's quite reasonable to define those phrases as non-exceptions. | ||
|  | 
 | ||
|  | 
 | ||
|  | " We don't normally highlight types in package Standard | ||
|  | " (Integer, Character, Float, etc.).  I don't think it looks good | ||
|  | " with the other type keywords, and many Ada programs define | ||
|  | " so many of their own types that it looks inconsistent. | ||
|  | " However, if you want this highlighting, turn on "ada_standard_types". | ||
|  | " For package Standard's definition, see ARM section A.1. | ||
|  | 
 | ||
|  | if exists("ada_standard_types") | ||
|  |   syn keyword adaBuiltinType	Boolean Integer Natural Positive Float | ||
|  |   syn keyword adaBuiltinType	Character Wide_Character | ||
|  |   syn keyword adaBuiltinType	String Wide_String | ||
|  |   syn keyword adaBuiltinType	Duration | ||
|  |   " These aren't listed in ARM section A.1's code, but they're noted as | ||
|  |   " options in ARM sections 3.5.4 and 3.5.7: | ||
|  |   syn keyword adaBuiltinType	Short_Integer Short_Short_Integer | ||
|  |   syn keyword adaBuiltinType	Long_Integer Long_Long_Integer | ||
|  |   syn keyword adaBuiltinType	Short_Float Short_Short_Float | ||
|  |   syn keyword adaBuiltinType	Long_Float Long_Long_Float | ||
|  | endif | ||
|  | 
 | ||
|  | " There are MANY other predefined types; they've not been added, because | ||
|  | " determining when they're a type requires context in general. | ||
|  | " One potential addition would be Unbounded_String. | ||
|  | 
 | ||
|  | 
 | ||
|  | syn keyword adaLabel		others | ||
|  | 
 | ||
|  | syn keyword adaOperator		abs mod not rem xor | ||
|  | syn match adaOperator		"\<and\>" | ||
|  | syn match adaOperator		"\<and\s\+then\>" | ||
|  | syn match adaOperator		"\<or\>" | ||
|  | syn match adaOperator		"\<or\s\+else\>" | ||
|  | syn match adaOperator		"[-+*/<>&]" | ||
|  | syn keyword adaOperator		** | ||
|  | syn match adaOperator		"[/<>]=" | ||
|  | syn keyword adaOperator		=> | ||
|  | syn match adaOperator		"\.\." | ||
|  | syn match adaOperator		"=" | ||
|  | 
 | ||
|  | " We won't map "adaAssignment" by default, but we need to map ":=" to | ||
|  | " something or the "=" inside it will be mislabelled as an operator. | ||
|  | " Note that in Ada, assignment (:=) is not considered an operator. | ||
|  | syn match adaAssignment		":=" | ||
|  | 
 | ||
|  | " Handle the box, <>, specially: | ||
|  | syn keyword adaSpecial	<> | ||
|  | 
 | ||
|  | " Numbers, including floating point, exponents, and alternate bases. | ||
|  | syn match   adaNumber		"\<\d[0-9_]*\(\.\d[0-9_]*\)\=\([Ee][+-]\=\d[0-9_]*\)\=\>" | ||
|  | syn match   adaNumber		"\<\d\d\=#\x[0-9A-Fa-f_]*\(\.\x[0-9A-Fa-f_]*\)\=#\([Ee][+-]\=\d[0-9_]*\)\=" | ||
|  | 
 | ||
|  | " Identify leading numeric signs. In "A-5" the "-" is an operator, | ||
|  | " but in "A:=-5" the "-" is a sign. This handles "A3+-5" (etc.) correctly. | ||
|  | " This assumes that if you put a don't put a space after +/- when it's used | ||
|  | " as an operator, you won't put a space before it either -- which is true | ||
|  | " in code I've seen. | ||
|  | syn match adaSign "[[:space:]<>=(,|:;&*/+-][+-]\d"lc=1,hs=s+1,he=e-1,me=e-1 | ||
|  | 
 | ||
|  | " Labels for the goto statement. | ||
|  | syn region  adaLabel		start="<<"  end=">>" | ||
|  | 
 | ||
|  | " Boolean Constants. | ||
|  | syn keyword adaBoolean	true false | ||
|  | 
 | ||
|  | " Warn people who try to use C/C++ notation erroneously: | ||
|  | syn match adaError "//" | ||
|  | syn match adaError "/\*" | ||
|  | syn match adaError "==" | ||
|  | 
 | ||
|  | 
 | ||
|  | if exists("ada_space_errors") | ||
|  |   if !exists("ada_no_trail_space_error") | ||
|  |     syn match   adaSpaceError     excludenl "\s\+$" | ||
|  |   endif | ||
|  |   if !exists("ada_no_tab_space_error") | ||
|  |     syn match   adaSpaceError     " \+\t"me=e-1 | ||
|  |   endif | ||
|  | endif | ||
|  | 
 | ||
|  | " Unless special ("end loop", "end if", etc.), "end" marks the end of a | ||
|  | " begin, package, task etc. Assiging it to adaEnd. | ||
|  | syn match adaEnd		"\<end\>" | ||
|  | 
 | ||
|  | syn keyword adaPreproc		pragma | ||
|  | 
 | ||
|  | syn keyword adaRepeat		exit for loop reverse while | ||
|  | syn match adaRepeat		"\<end\s\+loop\>" | ||
|  | 
 | ||
|  | syn keyword adaStatement	accept delay goto raise requeue return | ||
|  | syn keyword adaStatement	terminate | ||
|  | syn match adaStatement	"\<abort\>" | ||
|  | 
 | ||
|  | " Handle Ada's record keywords. | ||
|  | " 'record' usually starts a structure, but "with null record;" does not, | ||
|  | " and 'end record;' ends a structure.  The ordering here is critical - | ||
|  | " 'record;' matches a "with null record", so make it a keyword (this can | ||
|  | " match when the 'with' or 'null' is on a previous line). | ||
|  | " We see the "end" in "end record" before the word record, so we match that | ||
|  | " pattern as adaStructure (and it won't match the "record;" pattern). | ||
|  | syn match adaStructure	"\<record\>" | ||
|  | syn match adaStructure	"\<end\s\+record\>" | ||
|  | syn match adaKeyword	"\<record;"me=e-1 | ||
|  | 
 | ||
|  | syn keyword adaStorageClass	abstract access aliased array at constant delta | ||
|  | syn keyword adaStorageClass	digits limited of private range tagged | ||
|  | syn keyword adaTypedef		subtype type | ||
|  | 
 | ||
|  | " Conditionals. "abort" after "then" is a conditional of its own. | ||
|  | syn match adaConditional	"\<then\>" | ||
|  | syn match adaConditional	"\<then\s\+abort\>" | ||
|  | syn match adaConditional	"\<else\>" | ||
|  | syn match adaConditional	"\<end\s\+if\>" | ||
|  | syn match adaConditional	"\<end\s\+case\>" | ||
|  | syn match adaConditional	"\<end\s\+select\>" | ||
|  | syn keyword adaConditional	if case select | ||
|  | syn keyword adaConditional	elsif when | ||
|  | 
 | ||
|  | syn keyword adaKeyword		all do exception in is new null out | ||
|  | syn keyword adaKeyword		separate until | ||
|  | 
 | ||
|  | " These keywords begin various constructs, and you _might_ want to | ||
|  | " highlight them differently. | ||
|  | syn keyword adaBegin		begin body declare entry function generic | ||
|  | syn keyword adaBegin		package procedure protected renames task | ||
|  | 
 | ||
|  | 
 | ||
|  | if exists("ada_withuse_ordinary") | ||
|  | " Don't be fancy. Display "with" and "use" as ordinary keywords in all cases. | ||
|  |  syn keyword adaKeyword		with use | ||
|  | else | ||
|  |  " Highlight "with" and "use" clauses like C's "#include" when they're used | ||
|  |  " to reference other compilation units; otherwise they're ordinary keywords. | ||
|  |  " If we have vim 6.0 or later, we'll use its advanced pattern-matching | ||
|  |  " capabilities so that we won't match leading spaces. | ||
|  |  syn match adaKeyword	"\<with\>" | ||
|  |  syn match adaKeyword	"\<use\>" | ||
|  |  if version < 600 | ||
|  |   syn match adaBeginWith "^\s*\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc | ||
|  |   syn match adaSemiWith	";\s*\(\(with\(\s\+type\)\=\)\|\(use\)\)\>"lc=1 contains=adaInc | ||
|  |  else | ||
|  |   syn match adaBeginWith "^\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc | ||
|  |   syn match adaSemiWith	";\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc | ||
|  |  endif | ||
|  |  syn match adaInc	"\<with\>" contained contains=NONE | ||
|  |  syn match adaInc	"\<with\s\+type\>" contained contains=NONE | ||
|  |  syn match adaInc	"\<use\>" contained contains=NONE | ||
|  |  " Recognize "with null record" as a keyword (even the "record"). | ||
|  |  syn match adaKeyword	"\<with\s\+null\s\+record\>" | ||
|  |  " Consider generic formal parameters of subprograms and packages as keywords. | ||
|  |  if version < 600 | ||
|  |   syn match adaKeyword	";\s*with\s\+\(function\|procedure\|package\)\>" | ||
|  |   syn match adaKeyword	"^\s*with\s\+\(function\|procedure\|package\)\>" | ||
|  |  else | ||
|  |   syn match adaKeyword	";\s*\zswith\s\+\(function\|procedure\|package\)\>" | ||
|  |   syn match adaKeyword	"^\s*\zswith\s\+\(function\|procedure\|package\)\>" | ||
|  |  endif | ||
|  | endif | ||
|  | 
 | ||
|  | 
 | ||
|  | " String and character constants. | ||
|  | syn region  adaString		start=+"+  skip=+""+  end=+"+ | ||
|  | syn match   adaCharacter	"'.'" | ||
|  | 
 | ||
|  | " Todo (only highlighted in comments) | ||
|  | syn keyword adaTodo contained	TODO FIXME XXX | ||
|  | 
 | ||
|  | " Comments. | ||
|  | syn region  adaComment	oneline contains=adaTodo start="--"  end="$" | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | " Define the default highlighting. | ||
|  | " For version 5.7 and earlier: only when not done already | ||
|  | " For version 5.8 and later: only when an item doesn't have highlighting yet | ||
|  | if version >= 508 || !exists("did_ada_syn_inits") | ||
|  |   if version < 508 | ||
|  |     let did_ada_syn_inits = 1 | ||
|  |     command -nargs=+ HiLink hi link <args> | ||
|  |   else | ||
|  |     command -nargs=+ HiLink hi def link <args> | ||
|  |   endif | ||
|  | 
 | ||
|  |   " The default methods for highlighting. Can be overridden later. | ||
|  |   HiLink adaCharacter	Character | ||
|  |   HiLink adaComment	Comment | ||
|  |   HiLink adaConditional	Conditional | ||
|  |   HiLink adaKeyword	Keyword | ||
|  |   HiLink adaLabel	Label | ||
|  |   HiLink adaNumber	Number | ||
|  |   HiLink adaSign	Number | ||
|  |   HiLink adaOperator	Operator | ||
|  |   HiLink adaPreproc	PreProc | ||
|  |   HiLink adaRepeat	Repeat | ||
|  |   HiLink adaSpecial	Special | ||
|  |   HiLink adaStatement	Statement | ||
|  |   HiLink adaString	String | ||
|  |   HiLink adaStructure	Structure | ||
|  |   HiLink adaTodo	Todo | ||
|  |   HiLink adaType	Type | ||
|  |   HiLink adaTypedef	Typedef | ||
|  |   HiLink adaStorageClass	StorageClass | ||
|  |   HiLink adaBoolean	Boolean | ||
|  |   HiLink adaException	Exception | ||
|  |   HiLink adaInc	Include | ||
|  |   HiLink adaError	Error | ||
|  |   HiLink adaSpaceError	Error | ||
|  |   HiLink adaBuiltinType Type | ||
|  | 
 | ||
|  |   if exists("ada_begin_preproc") | ||
|  |    " This is the old default display: | ||
|  |    HiLink adaBegin	PreProc | ||
|  |    HiLink adaEnd	PreProc | ||
|  |   else | ||
|  |    " This is the new default display: | ||
|  |    HiLink adaBegin	Keyword | ||
|  |    HiLink adaEnd	Keyword | ||
|  |   endif | ||
|  | 
 | ||
|  |   delcommand HiLink | ||
|  | endif | ||
|  | 
 | ||
|  | let b:current_syntax = "ada" | ||
|  | 
 | ||
|  | " vim: ts=8 |