summaryrefslogtreecommitdiff
path: root/runtime/syntax/ada.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/ada.vim')
-rw-r--r--runtime/syntax/ada.vim287
1 files changed, 287 insertions, 0 deletions
diff --git a/runtime/syntax/ada.vim b/runtime/syntax/ada.vim
new file mode 100644
index 000000000..7a7b2a077
--- /dev/null
+++ b/runtime/syntax/ada.vim
@@ -0,0 +1,287 @@
+" 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