1"------------------------------------------------------------------------------
2"  Description: Vim Ada/GNAT compiler file
3"     Language: Ada (GNAT)
4"          $Id: gnat.vim 887 2008-07-08 14:29:01Z krischik $
5"    Copyright: Copyright (C) 2006 Martin Krischik
6"   Maintainer:	Martin Krischi <krischik@users.sourceforge.net>k
7"		Ned Okie <nokie@radford.edu>
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/autoload/gnat.vim $
13"      History: 24.05.2006 MK Unified Headers
14"		16.07.2006 MK Ada-Mode as vim-ball
15"		05.08.2006 MK Add session support
16"               15.10.2006 MK Bram's suggestion for runtime integration
17"               05.11.2006 MK Bram suggested not to use include protection for
18"                             autoload
19"		05.11.2006 MK Bram suggested to save on spaces
20"		19.09.2007 NO use project file only when there is a project
21"    Help Page: compiler-gnat
22"------------------------------------------------------------------------------
23
24if version < 700
25    finish
26endif
27
28function gnat#Make () dict					     " {{{1
29   let &l:makeprg	 = self.Get_Command('Make')
30   let &l:errorformat = self.Error_Format
31   wall
32   make
33   copen
34   set wrap
35   wincmd W
36endfunction gnat#Make						     " }}}1
37
38function gnat#Pretty () dict					     " {{{1
39   execute "!" . self.Get_Command('Pretty')
40endfunction gnat#Make						     " }}}1
41
42function gnat#Find () dict					     " {{{1
43   execute "!" . self.Get_Command('Find')
44endfunction gnat#Find						     " }}}1
45
46function gnat#Tags () dict					     " {{{1
47   execute "!" . self.Get_Command('Tags')
48   edit tags
49   call gnat#Insert_Tags_Header ()
50   update
51   quit
52endfunction gnat#Tags						     " }}}1
53
54function gnat#Set_Project_File (...) dict			     " {{{1
55   if a:0 > 0
56      let self.Project_File = a:1
57
58      if ! filereadable (self.Project_File)
59	 let self.Project_File = findfile (
60	    \ fnamemodify (self.Project_File, ':r'),
61	    \ $ADA_PROJECT_PATH,
62	    \ 1)
63      endif
64   elseif strlen (self.Project_File) > 0
65      let self.Project_File = browse (0, 'GNAT Project File?', '', self.Project_File)
66   elseif expand ("%:e") == 'gpr'
67      let self.Project_File = browse (0, 'GNAT Project File?', '', expand ("%:e"))
68   else
69      let self.Project_File = browse (0, 'GNAT Project File?', '', 'default.gpr')
70   endif
71
72   if strlen (v:this_session) > 0
73      execute 'mksession! ' . v:this_session
74   endif
75
76   "if strlen (self.Project_File) > 0
77      "if has("vms")
78	 "call ada#Switch_Session (
79	    "\ expand('~')[0:-2] . ".vimfiles.session]gnat_" .
80	    "\ fnamemodify (self.Project_File, ":t:r") . ".vim")
81      "else
82	 "call ada#Switch_Session (
83	    "\ expand('~') . "/vimfiles/session/gnat_" .
84	    "\ fnamemodify (self.Project_File, ":t:r") . ".vim")
85      "endif
86   "else
87      "call ada#Switch_Session ('')
88   "endif
89
90   return
91endfunction gnat#Set_Project_File				     " }}}1
92
93function gnat#Get_Command (Command) dict			     " {{{1
94   let l:Command = eval ('self.' . a:Command . '_Command')
95   return eval (l:Command)
96endfunction gnat#Get_Command					     " }}}1
97
98function gnat#Set_Session (...) dict				     " {{{1
99   if argc() == 1 && fnamemodify (argv(0), ':e') == 'gpr'
100      call self.Set_Project_File (argv(0))
101   elseif  strlen (v:servername) > 0
102      call self.Set_Project_File (v:servername . '.gpr')
103   endif
104endfunction gnat#Set_Session					     " }}}1
105
106function gnat#New ()						     " {{{1
107   let l:Retval = {
108      \ 'Make'	      : function ('gnat#Make'),
109      \ 'Pretty'	      : function ('gnat#Pretty'),
110      \ 'Find'	      : function ('gnat#Find'),
111      \ 'Tags'	      : function ('gnat#Tags'),
112      \ 'Set_Project_File' : function ('gnat#Set_Project_File'),
113      \ 'Set_Session'      : function ('gnat#Set_Session'),
114      \ 'Get_Command'      : function ('gnat#Get_Command'),
115      \ 'Project_File'     : '',
116      \ 'Make_Command'     : '"gnat make -P " . self.Project_File . "  -F -gnatef  "',
117      \ 'Pretty_Command'   : '"gnat pretty -P " . self.Project_File . " "',
118      \ 'Find_Program'     : '"gnat find -P " . self.Project_File . " -F "',
119      \ 'Tags_Command'     : '"gnat xref -P " . self.Project_File . " -v  *.AD*"',
120      \ 'Error_Format'     : '%f:%l:%c: %trror: %m,'   .
121			   \ '%f:%l:%c: %tarning: %m,' .
122			   \ '%f:%l:%c: (%ttyle) %m'}
123
124   return l:Retval
125endfunction gnat#New						  " }}}1
126
127function gnat#Insert_Tags_Header ()				  " {{{1
128   1insert
129!_TAG_FILE_FORMAT       1	 /extended format; --format=1 will not append ;" to lines/
130!_TAG_FILE_SORTED       1	 /0=unsorted, 1=sorted, 2=foldcase/
131!_TAG_PROGRAM_AUTHOR    AdaCore	 /info@adacore.com/
132!_TAG_PROGRAM_NAME      gnatxref //
133!_TAG_PROGRAM_URL       http://www.adacore.com  /official site/
134!_TAG_PROGRAM_VERSION   5.05w   //
135.
136   return
137endfunction gnat#Insert_Tags_Header				  " }}}1
138
139finish " 1}}}
140
141"------------------------------------------------------------------------------
142"   Copyright (C) 2006  Martin Krischik
143"
144"   Vim is Charityware - see ":help license" or uganda.txt for licence details.
145"------------------------------------------------------------------------------
146" vim: textwidth=0 wrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
147" vim: foldmethod=marker
148