mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -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
 |