*ft_ada.txt*	For Vim version 7.2.  Last change: 2008 Jun 21


		    ADA FILE TYPE PLUG-INS REFERENCE MANUAL~

ADA								      *ada.vim*

1.  Syntax Highlighting			    |ft-ada-syntax|
2.  Plug-in				    |ft-ada-plugin|
3.  Omni Completion			    |ft-ada-omni|
    3.1 Omni Completion with "gnat xref"	|gnat-xref|
    3.2 Omni Completion with "ctags"		|ada-ctags|
4.  Compiler Support			    |ada-compiler|
    4.1 GNAT					|compiler-gnat|
    4.1 Dec Ada					|compiler-decada|
5.  References				    |ada-reference|
    5.1 Options					|ft-ada-options|
    5.2 Functions				|ft-ada-functions|
    5.3 Commands				|ft-ada-commands|
    5.4 Variables				|ft-ada-variables|
    5.5 Constants				|ft-ada-constants|
8.  Extra Plug-ins			    |ada-extra-plugins|

==============================================================================
1. Syntax Highlighting ~
							       *ft-ada-syntax*

This mode is designed for the 2005 edition of Ada ("Ada 2005"), which includes
support for objected-programming, protected types, and so on.  It handles code
written for the original Ada language ("Ada83", "Ada87", "Ada95") as well,
though code which uses Ada 2005-only keywords will be wrongly colored (such
code should be fixed anyway).  For more information about Ada, see
http://www.adapower.com.

The Ada mode handles a number of situations cleanly.

For example, it knows that the "-" in "-5" is a number, but the same character
in "A-5" is an operator.  Normally, a "with" or "use" clause referencing
another compilation unit is coloured the same way as C's "#include" is coloured.
If you have "Conditional" or "Repeat" groups coloured differently, then "end
if" and "end loop" will be coloured as part of those respective groups.

You can set these to different colours using vim's "highlight" command (e.g.,
to change how loops are displayed, enter the command ":hi Repeat" followed by
the colour specification; on simple terminals the colour specification
ctermfg=White often shows well).

There are several options you can select in this Ada mode. See|ft-ada-options|
for a complete list.

To enable them, assign a value to the option.  For example, to turn one on:
 >
    > let g:ada_standard_types = 1
>
To disable them use ":unlet".  Example:
>
    > unlet g:ada_standard_types

You can just use ":" and type these into the command line to set these
temporarily before loading an Ada file.  You can make these option settings
permanent by adding the "let" command(s), without a colon, to your "~/.vimrc"
file.

Even on a slow (90Mhz) PC this mode works quickly, but if you find the
performance unacceptable, turn on |g:ada_withuse_ordinary|.

Syntax folding instructions (|fold-syntax|) are added when |g:ada_folding| is
set.

==============================================================================
2. File type Plug-in ~
					       *ft-ada-indent* *ft-ada-plugin*

The Ada plug-in provides support for:

 - auto indenting	(|indent.txt|)
 - insert completion	(|i_CTRL-N|)
 - user completion	(|i_CTRL-X_CTRL-U|)
 - tag searches		(|tagsrch.txt|)
 - Quick Fix		(|quickfix.txt|)
 - backspace handling	(|'backspace'|)
 - comment handling	(|'comments'|, |'commentstring'|)

The plug-in only activates the features of the Ada mode whenever an Ada
file is opened and adds Ada related entries to the main and pop-up menu.

==============================================================================
3. Omni Completion ~
								 *ft-ada-omni*

The Ada omni-completions (|i_CTRL-X_CTRL-O|) uses tags database created either
by "gnat xref -v" or the "exuberant Ctags (http://ctags.sourceforge.net).  The
complete function will automatically detect which tool was used to create the
tags file.

------------------------------------------------------------------------------
3.1 Omni Completion with "gnat xref" ~
								   *gnat-xref*

GNAT XREF uses the compiler internal information (ali-files) to produce the
tags file. This has the advantage to be 100% correct and the option of deep
nested analysis. However the code must compile, the generator is quite
slow and the created tags file contains only the basic Ctags information for
each entry - not enough for some of the more advanced Vim code browser
plug-ins.

NOTE: "gnat xref -v" is very tricky to use as it has almost no diagnostic
       output - If nothing is printed then usually the parameters are wrong.
       Here some important tips:

1)  You need to compile your code first and use the "-aO" option to point to
    your .ali files.
2)  "gnat xref -v ../Include/adacl.ads" won't work - use  the "gnat xref -v
    -aI../Include adacl.ads" instead.
3)  "gnat xref -v -aI../Include *.ad?" won't work - use "cd ../Include" and
    then "gnat xref -v *.ad?"
4)  Project manager support is completely broken - don't even try "gnat xref
    -Padacl.gpr".
5)  VIM is faster when the tags file is sorted - use "sort --unique
    --ignore-case --output=tags tags" .
6)  Remember to insert "!_TAG_FILE_SORTED 2 %sort ui" as first line to mark
    the file assorted.

------------------------------------------------------------------------------
3.2 Omni Completion with "ctags"~
								   *ada-ctags*

Exuberant Ctags uses its own multi-language code parser. The parser is quite
fast, produces a lot of extra information (hence the name "Exuberant Ctags")
and can run on files which currently do not compile.

There are also lots of other Vim-tools which use exuberant Ctags.

You will need to install a version of the Exuberant Ctags which has Ada
support patched in. Such a version is available from the GNU Ada Project
(http://gnuada.sourceforge.net).

The Ada parser for Exuberant Ctags is fairly new - don't expect complete
support yet.

==============================================================================
4.  Compiler Support ~
								*ada-compiler*

The Ada mode supports more than one Ada compiler and will automatically load the
compiler set in|g:ada_default_compiler|whenever an Ada source is opened. The
provided compiler plug-ins are split into the actual compiler plug-in and a
collection of support functions and variables. This allows the easy
development of specialized compiler plug-ins fine tuned to your development
environment.

------------------------------------------------------------------------------
4.1 GNAT ~
							       *compiler-gnat*

GNAT is the only free (beer and speech) Ada compiler available. There are
several versions available which differ in the licence terms used.

The GNAT compiler plug-in will perform a compile on pressing <F7> and then
immediately shows the result. You can set the project file to be used by
setting:
 >
 > call g:gnat.Set_Project_File ('my_project.gpr')

Setting a project file will also create a Vim session (|views-sessions|) so -
like with the GPS - opened files, window positions etc. will be remembered
separately for all projects.

								*gnat_members*
GNAT OBJECT ~

							       *g:gnat.Make()*
g:gnat.Make()
		Calls|g:gnat.Make_Command|and displays the result inside a
               |quickfix| window.

							     *g:gnat.Pretty()*
g:gnat.Pretty()
		Calls|g:gnat.Pretty_Command|

							       *g:gnat.Find()*
g:gnat.Find()
		Calls|g:gnat.Find_Command|

							       *g:gnat.Tags()*
g:gnat.Tags()
		Calls|g:gnat.Tags_Command|

						   *g:gnat.Set_Project_File()*
g:gnat.Set_Project_File([{file}])
		Set gnat project file and load associated session.  An open
		project will be closed and the session written.  If called
		without file name the file selector opens for selection of a
		project file. If called with an empty string then the project
		and associated session are closed.

							 *g:gnat.Project_File*
g:gnat.Project_File	string
		Current project file.

							 *g:gnat.Make_Command*
g:gnat.Make_Command	string
		External command used for|g:gnat.Make()| (|'makeprg'|).

						       *g:gnat.Pretty_Program*
g:gnat.Pretty_Program	string
		External command used for|g:gnat.Pretty()|

							 *g:gnat.Find_Program*
g:gnat.Find_Program	string
		External command used for|g:gnat.Find()|

							 *g:gnat.Tags_Command*
g:gnat.Tags_Command	string
		External command used for|g:gnat.Tags()|

							 *g:gnat.Error_Format*
g:gnat.Error_Format	string
		Error format (|'errorformat'|)

------------------------------------------------------------------------------
4.2 Dec Ada ~
					    *compiler-hpada* *compiler-decada*
					*compiler-vaxada* *compiler-compaqada*

Dec Ada (also known by - in chronological order - VAX Ada, Dec Ada, Compaq Ada
and HP Ada) is a fairly dated Ada 83 compiler. Support is basic: <F7> will
compile the current unit.

The Dec Ada compiler expects the package name and not the file name to be
passed as a parameter. The compiler plug-in supports the usual file name
convention to convert the file into a unit name. Both '-' and '__' are allowed
as separators.

							      *decada_members*
DEC ADA OBJECT ~

							     *g:decada.Make()*
g:decada.Make()		function
		Calls|g:decada.Make_Command|and displays the result inside a
               |quickfix| window.

							*g:decada.Unit_Name()*
g:decada.Unit_Name()	function
		Get the Unit name for the current file.

						       *g:decada.Make_Command*
g:decada.Make_Command	string
		External command used for|g:decadat.Make()| (|'makeprg'|).

						       *g:decada.Error_Format*
g:decada.Error_Format|	string
		Error format (|'errorformat'|).

==============================================================================
5. References ~
							       *ada-reference*

------------------------------------------------------------------------------
5.1 Options ~
							      *ft-ada-options*

							*g:ada_standard_types*
g:ada_standard_types	bool (true when exists)
		Highlight types in package Standard (e.g., "Float").

							  *g:ada_space_errors*
						  *g:ada_no_trail_space_error*
						    *g:ada_no_tab_space_error*
							 *g:ada_all_tab_usage*
g:ada_space_errors	 bool (true when exists)
		Highlight extraneous errors in spaces ...
		g:ada_no_trail_space_error
		    - but ignore trailing spaces at the end of a line
		g:ada_no_tab_space_error
		    - but ignore tabs after spaces
		g:ada_all_tab_usage
		    - highlight all tab use

							   *g:ada_line_errors*
g:ada_line_errors	  bool (true when exists)
		Highlight lines which are too long. Note: This highlighting
		option is quite CPU intensive.

							 *g:ada_rainbow_color*
g:ada_rainbow_color	  bool (true when exists)
		Use rainbow colours for '(' and ')'. You need the
		rainbow_parenthesis for this to work.

							       *g:ada_folding*
g:ada_folding		  set ('sigpft')
		Use folding for Ada sources.
		    's':    activate syntax folding on load
			'p':    fold packages
			'f':    fold functions and procedures
			't':    fold types
			'c':    fold conditionals
		    'g':    activate gnat pretty print folding on load
			'i':    lone 'is' folded with line above
			'b':	lone 'begin' folded with line above
			'p':	lone 'private' folded with line above
			'x':	lone 'exception' folded with line above
		    'i':    activate indent folding on load

		Note: Syntax folding is in an early (unusable) stage and
		      indent or gnat pretty folding is suggested.

		For gnat pretty folding to work the following settings are
		suggested: -cl3 -M79 -c2 -c3 -c4 -A1 -A2 -A3 -A4 -A5

		For indent folding to work the following settings are
		suggested: shiftwidth=3 softtabstop=3

								*g:ada_abbrev*
g:ada_abbrev		  bool (true when exists)
		Add some abbreviations. This feature is more or less superseded
		by the various completion methods.

						      *g:ada_withuse_ordinary*
g:ada_withuse_ordinary	  bool (true when exists)
		Show "with" and "use" as ordinary keywords (when used to
		reference other compilation units they're normally highlighted
		specially).

							 *g:ada_begin_preproc*
g:ada_begin_preproc	  bool (true when exists)
		Show all begin-like keywords using the colouring of C
		preprocessor commands.

						    *g:ada_omni_with_keywords*
g:ada_omni_with_keywords
		Add Keywords, Pragmas, Attributes to omni-completions
		(|compl-omni|). Note: You can always complete then with user
		completion (|i_CTRL-X_CTRL-U|).

						      *g:ada_extended_tagging*
g:ada_extended_tagging	  enum ('jump', 'list')
		use extended tagging, two options are available
		    'jump': use tjump to jump.
		    'list': add tags quick fix list.
		Normal tagging does not support function or operator
		overloading as these features are not available in C and
		tagging was originally developed for C.

						   *g:ada_extended_completion*
g:ada_extended_completion
		Uses extended completion for <C-N> and <C-R> completions
		(|i_CTRL-N|). In this mode the '.' is used as part of the
		identifier so that 'Object.Method' or 'Package.Procedure' are
		completed together.

						       *g:ada_gnat_extensions*
g:ada_gnat_extensions	  bool (true when exists)
		 Support GNAT extensions.

					       *g:ada_with_gnat_project_files*
g:ada_with_gnat_project_files	 bool (true when exists)
		 Add gnat project file keywords and Attributes.

						      *g:ada_default_compiler*
g:ada_default_compiler	  string
		set default compiler. Currently supported are 'gnat' and
		'decada'.

An "exists" type is a boolean considered true when the variable is defined and
false when the variable is undefined. The value to which the variable is set
makes no difference.

------------------------------------------------------------------------------
5.3 Commands ~
							     *ft-ada-commands*

:AdaRainbow							 *:AdaRainbow*
		Toggles rainbow colour (|g:ada_rainbow_color|) mode for
		'(' and ')'.

:AdaLines							   *:AdaLines*
		Toggles line error (|g:ada_line_errors|) display.

:AdaSpaces							  *:AdaSpaces*
		Toggles space error (|g:ada_space_errors|) display.

:AdaTagDir							  *:AdaTagDir*
		Creates tags file for the directory of the current file.

:AdaTagFile							 *:AdaTagFile*
		Creates tags file for the current file.

:AdaTypes							   *:AdaTypes*
		Toggles standard types (|g:ada_standard_types|) colour.

:GnatFind							   *:GnatFind*
		Calls |g:gnat.Find()|

:GnatPretty							 *:GnatPretty*
		Calls |g:gnat.Pretty()|

:GnatTags							   *:GnatTags*
		Calls |g:gnat.Tags()|

------------------------------------------------------------------------------
5.3 Variables ~
							    *ft-ada-variables*

								      *g:gnat*
g:gnat			    object
		Control object which manages GNAT compiles.  The object
		is created when the first Ada source code is loaded provided
		that |g:ada_default_compiler|is set to 'gnat'. See|gnat_members|
		for details.

								    *g:decada*
g:decada		      object
		Control object which manages Dec Ada compiles.	The object
		is created when the first Ada source code is loaded provided
		that |g:ada_default_compiler|is set to 'decada'. See
	       |decada_members|for details.

------------------------------------------------------------------------------
5.4 Constants ~
							    *ft-ada-constants*

All constants are locked. See |:lockvar| for details.

							     *g:ada#WordRegex*
g:ada#WordRegex		string
		Regular expression to search for Ada words.

							  *g:ada#DotWordRegex*
g:ada#DotWordRegex	string
		Regular expression to search for Ada words separated by dots.

							       *g:ada#Comment*
g:ada#Comment		string
		Regular expression to search for Ada comments.

							      *g:ada#Keywords*
g:ada#Keywords		list of dictionaries
		List of keywords, attributes etc. pp. in the format used by
		omni completion. See |complete-items| for details.

							   *g:ada#Ctags_Kinds*
g:ada#Ctags_Kinds	dictionary of lists
		Dictionary of the various kinds of items which the Ada support
		for Ctags generates.

------------------------------------------------------------------------------
5.2 Functions ~
							    *ft-ada-functions*

ada#Word([{line}, {col}])					  *ada#Word()*
		Return full name of Ada entity under the cursor (or at given
		line/column), stripping white space/newlines as necessary.

ada#List_Tag([{line}, {col}])				      *ada#Listtags()*
		List all occurrences of the Ada entity under the cursor (or at
		given line/column) inside the quick-fix window.

ada#Jump_Tag ({ident}, {mode})				      *ada#Jump_Tag()*
		List all occurrences of the Ada entity under the cursor (or at
		given line/column) in the tag jump list. Mode can either be
		'tjump' or 'stjump'.

ada#Create_Tags ({option})				   *ada#Create_Tags()*
		Creates tag file using Ctags. The option can either be 'file'
		for the current file, 'dir' for the directory of the current
		file or a file name.

gnat#Insert_Tags_Header()			   *gnat#Insert_Tags_Header()*
		Adds the tag file header (!_TAG_) information to the current
		file which are missing from the GNAT XREF output.

ada#Switch_Syntax_Option ({option})		  *ada#Switch_Syntax_Option()*
		Toggles highlighting options on or off. Used for the Ada menu.

								  *gnat#New()*
gnat#New ()
		Create a new gnat object. See |g:gnat| for details.


==============================================================================
8. Extra Plugins ~
							   *ada-extra-plugins*

You can optionally install the following extra plug-ins. They work well with
Ada and enhance the ability of the Ada mode:

backup.vim
	http://www.vim.org/scripts/script.php?script_id=1537
	Keeps as many backups as you like so you don't have to.

rainbow_parenthsis.vim
	http://www.vim.org/scripts/script.php?script_id=1561
	Very helpful since Ada uses only '(' and ')'.

nerd_comments.vim
	http://www.vim.org/scripts/script.php?script_id=1218
	Excellent commenting and uncommenting support for almost any
	programming language.

matchit.vim
	http://www.vim.org/scripts/script.php?script_id=39
	'%' jumping for any language. The normal '%' jump only works for '{}'
	style languages. The Ada mode will set the needed search patterns.

taglist.vim
	http://www.vim.org/scripts/script.php?script_id=273
	Source code explorer sidebar. There is a patch for Ada available.

The GNU Ada Project distribution (http://gnuada.sourceforge.net) of Vim
contains all of the above.

==============================================================================
vim: textwidth=78 nowrap tabstop=8 shiftwidth=4 softtabstop=4 noexpandtab
vim: filetype=help
