1"------------------------------------------------------------------------------
2"  Description: Perform Ada specific completion & tagging.
3"     Language: Ada (2005)
4"	   $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
5"   Maintainer: Martin Krischik <krischik@users.sourceforge.net>
6"		Taylor Venable <taylor@metasyntax.net>
7"		Neil Bird <neil@fnxweb.com>
8"      $Author: krischik $
9"	 $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
10"      Version: 4.6
11"    $Revision: 887 $
12"     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $
13"      History: 24.05.2006 MK Unified Headers
14"		26.05.2006 MK ' should not be in iskeyword.
15"		16.07.2006 MK Ada-Mode as vim-ball
16"		02.10.2006 MK Better folding.
17"		15.10.2006 MK Bram's suggestion for runtime integration
18"               05.11.2006 MK Bram suggested not to use include protection for
19"                             autoload
20"		05.11.2006 MK Bram suggested to save on spaces
21"		08.07.2007 TV fix default compiler problems.
22"    Help Page: ft-ada-plugin
23"------------------------------------------------------------------------------
24" Provides mapping overrides for tag jumping that figure out the current
25" Ada object and tag jump to that, not the 'simple' vim word.
26" Similarly allows <Ctrl-N> matching of full-length ada entities from tags.
27"------------------------------------------------------------------------------
28
29" Only do this when not done yet for this buffer
30if exists ("b:did_ftplugin") || version < 700
31   finish
32endif
33
34" Don't load another plugin for this buffer
35let b:did_ftplugin = 45
36
37"
38" Temporarily set cpoptions to ensure the script loads OK
39"
40let s:cpoptions = &cpoptions
41set cpoptions-=C
42
43" Section: Comments  {{{1
44"
45setlocal comments=O:--,:--\ \
46setlocal commentstring=--\ \ %s
47setlocal complete=.,w,b,u,t,i
48
49" Section: case	     {{{1
50"
51setlocal nosmartcase
52setlocal ignorecase
53
54" Section: formatoptions {{{1
55"
56setlocal formatoptions+=ron
57
58" Section: Tagging {{{1
59"
60if exists ("g:ada_extended_tagging")
61   " Make local tag mappings for this buffer (if not already set)
62   if g:ada_extended_tagging == 'jump'
63      if mapcheck('<C-]>','n') == ''
64	 nnoremap <unique> <buffer> <C-]>    :call ada#Jump_Tag ('', 'tjump')<cr>
65      endif
66      if mapcheck('g<C-]>','n') == ''
67	 nnoremap <unique> <buffer> g<C-]>   :call ada#Jump_Tag ('','stjump')<cr>
68      endif
69   elseif g:ada_extended_tagging == 'list'
70      if mapcheck('<C-]>','n') == ''
71	 nnoremap <unique> <buffer> <C-]>    :call ada#List_Tag ()<cr>
72      endif
73      if mapcheck('g<C-]>','n') == ''
74	 nnoremap <unique> <buffer> g<C-]>   :call ada#List_Tag ()<cr>
75      endif
76   endif
77endif
78
79" Section: Completion {{{1
80"
81setlocal completefunc=ada#User_Complete
82setlocal omnifunc=adacomplete#Complete
83
84if exists ("g:ada_extended_completion")
85   if mapcheck ('<C-N>','i') == ''
86      inoremap <unique> <buffer> <C-N> <C-R>=ada#Completion("\<lt>C-N>")<cr>
87   endif
88   if mapcheck ('<C-P>','i') == ''
89      inoremap <unique> <buffer> <C-P> <C-R>=ada#Completion("\<lt>C-P>")<cr>
90   endif
91   if mapcheck ('<C-X><C-]>','i') == ''
92      inoremap <unique> <buffer> <C-X><C-]> <C-R>=<SID>ada#Completion("\<lt>C-X>\<lt>C-]>")<cr>
93   endif
94   if mapcheck ('<bs>','i') == ''
95      inoremap <silent> <unique> <buffer> <bs> <C-R>=ada#Insert_Backspace ()<cr>
96   endif
97endif
98
99" Section: Matchit {{{1
100"
101" Only do this when not done yet for this buffer & matchit is used
102"
103if !exists ("b:match_words")  &&
104  \ exists ("loaded_matchit")
105   "
106   " The following lines enable the macros/matchit.vim plugin for
107   " Ada-specific extended matching with the % key.
108   "
109   let s:notend      = '\%(\<end\s\+\)\@<!'
110   let b:match_words =
111      \ s:notend . '\<if\>:\<elsif\>:\<else\>:\<end\>\s\+\<if\>,' .
112      \ s:notend . '\<case\>:\<when\>:\<end\>\s\+\<case\>,' .
113      \ '\%(\<while\>.*\|\<for\>.*\|'.s:notend.'\)\<loop\>:\<end\>\s\+\<loop\>,' .
114      \ '\%(\<do\>\|\<begin\>\):\<exception\>:\<end\>\s*\%($\|[;A-Z]\),' .
115      \ s:notend . '\<record\>:\<end\>\s\+\<record\>'
116endif
117
118
119" Section: Compiler {{{1
120"
121if ! exists("g:ada_default_compiler")
122   if has("vms")
123      let g:ada_default_compiler = 'decada'
124   else
125      let g:ada_default_compiler = 'gnat'
126   endif
127endif
128
129if ! exists("current_compiler")			||
130   \ current_compiler != g:ada_default_compiler
131   execute "compiler " . g:ada_default_compiler
132endif
133
134" Section: Folding {{{1
135"
136if exists("g:ada_folding")
137   if g:ada_folding[0] == 'i'
138      setlocal foldmethod=indent
139      setlocal foldignore=--
140      setlocal foldnestmax=5
141   elseif g:ada_folding[0] == 'g'
142      setlocal foldmethod=expr
143      setlocal foldexpr=ada#Pretty_Print_Folding(v:lnum)
144   elseif g:ada_folding[0] == 's'
145      setlocal foldmethod=syntax
146   endif
147   setlocal tabstop=8
148   setlocal softtabstop=3
149   setlocal shiftwidth=3
150endif
151
152" Section: Abbrev {{{1
153"
154if exists("g:ada_abbrev")
155   iabbrev ret	return
156   iabbrev proc procedure
157   iabbrev pack package
158   iabbrev func function
159endif
160
161" Section: Commands, Mapping, Menus {{{1
162"
163call ada#Map_Popup (
164   \ 'Tag.List',
165   \  'l',
166   \ 'call ada#List_Tag ()')
167call ada#Map_Popup (
168   \'Tag.Jump',
169   \'j',
170   \'call ada#Jump_Tag ()')
171call ada#Map_Menu (
172   \'Tag.Create File',
173   \':AdaTagFile',
174   \'call ada#Create_Tags (''file'')')
175call ada#Map_Menu (
176   \'Tag.Create Dir',
177   \':AdaTagDir',
178   \'call ada#Create_Tags (''dir'')')
179
180call ada#Map_Menu (
181   \'Highlight.Toggle Space Errors',
182   \ ':AdaSpaces',
183   \'call ada#Switch_Syntax_Option (''space_errors'')')
184call ada#Map_Menu (
185   \'Highlight.Toggle Lines Errors',
186   \ ':AdaLines',
187   \'call ada#Switch_Syntax_Option (''line_errors'')')
188call ada#Map_Menu (
189   \'Highlight.Toggle Rainbow Color',
190   \ ':AdaRainbow',
191   \'call ada#Switch_Syntax_Option (''rainbow_color'')')
192call ada#Map_Menu (
193   \'Highlight.Toggle Standard Types',
194   \ ':AdaTypes',
195   \'call ada#Switch_Syntax_Option (''standard_types'')')
196
197" 1}}}
198" Reset cpoptions
199let &cpoptions = s:cpoptions
200unlet s:cpoptions
201
202finish " 1}}}
203
204"------------------------------------------------------------------------------
205"   Copyright (C) 2006	Martin Krischik
206"
207"   Vim is Charityware - see ":help license" or uganda.txt for licence details.
208"------------------------------------------------------------------------------
209" vim: textwidth=78 nowrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
210" vim: foldmethod=marker
211