xref: /vim-8.2.3635/runtime/autoload/ada.vim (revision 6c391a74)
1c81e5e79SBram Moolenaar"------------------------------------------------------------------------------
2c81e5e79SBram Moolenaar"  Description: Perform Ada specific completion & tagging.
3c81e5e79SBram Moolenaar"     Language: Ada (2005)
45c73622aSBram Moolenaar"	   $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
53df0173fSBram Moolenaar"   Maintainer: Mathias Brousset <[email protected]>
63df0173fSBram Moolenaar"		Martin Krischik <[email protected]>
7c236c16dSBram Moolenaar"		Taylor Venable <[email protected]>
8c81e5e79SBram Moolenaar"		Neil Bird <[email protected]>
9c236c16dSBram Moolenaar"		Ned Okie <[email protected]>
105c73622aSBram Moolenaar"      $Author: krischik $
113df0173fSBram Moolenaar"	 $Date: 2017-01-31 20:20:05 +0200 (Mon, 01 Jan 2017) $
12c236c16dSBram Moolenaar"      Version: 4.6
135c73622aSBram Moolenaar"    $Revision: 887 $
14c236c16dSBram Moolenaar"     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/ada.vim $
15c81e5e79SBram Moolenaar"      History: 24.05.2006 MK Unified Headers
16c81e5e79SBram Moolenaar"		26.05.2006 MK ' should not be in iskeyword.
17c81e5e79SBram Moolenaar"		16.07.2006 MK Ada-Mode as vim-ball
18c81e5e79SBram Moolenaar"		02.10.2006 MK Better folding.
19c81e5e79SBram Moolenaar"		15.10.2006 MK Bram's suggestion for runtime integration
20c81e5e79SBram Moolenaar"		05.11.2006 MK Bram suggested not to use include protection for
21c81e5e79SBram Moolenaar"			      autoload
22c81e5e79SBram Moolenaar"		05.11.2006 MK Bram suggested to save on spaces
23c236c16dSBram Moolenaar"		08.07.2007 TV fix mapleader problems.
24c236c16dSBram Moolenaar"	        09.05.2007 MK Session just won't work no matter how much
25c236c16dSBram Moolenaar"			      tweaking is done
26c236c16dSBram Moolenaar"		19.09.2007 NO still some mapleader problems
273df0173fSBram Moolenaar"		31.01.2017 MB fix more mapleader problems
28c81e5e79SBram Moolenaar"    Help Page: ft-ada-functions
29c81e5e79SBram Moolenaar"------------------------------------------------------------------------------
30c81e5e79SBram Moolenaar
31c81e5e79SBram Moolenaarif version < 700
32c81e5e79SBram Moolenaar   finish
33c81e5e79SBram Moolenaarendif
349a7224b5SBram Moolenaarlet s:keepcpo= &cpo
359a7224b5SBram Moolenaarset cpo&vim
36c81e5e79SBram Moolenaar
37c81e5e79SBram Moolenaar" Section: Constants {{{1
38c81e5e79SBram Moolenaar"
39c81e5e79SBram Moolenaarlet g:ada#DotWordRegex	   = '\a\w*\(\_s*\.\_s*\a\w*\)*'
40c81e5e79SBram Moolenaarlet g:ada#WordRegex	   = '\a\w*'
41c81e5e79SBram Moolenaarlet g:ada#Comment	   = "\\v^(\"[^\"]*\"|'.'|[^\"']){-}\\zs\\s*--.*"
42c81e5e79SBram Moolenaarlet g:ada#Keywords	   = []
43c81e5e79SBram Moolenaar
44c81e5e79SBram Moolenaar" Section: g:ada#Keywords {{{1
45c81e5e79SBram Moolenaar"
46c81e5e79SBram Moolenaar" Section: add Ada keywords {{{2
47c81e5e79SBram Moolenaar"
48c81e5e79SBram Moolenaarfor Item in ['abort', 'else', 'new', 'return', 'abs', 'elsif', 'not', 'reverse', 'abstract', 'end', 'null', 'accept', 'entry', 'select', 'access', 'exception', 'of', 'separate', 'aliased', 'exit', 'or', 'subtype', 'all', 'others', 'synchronized', 'and', 'for', 'out', 'array', 'function', 'overriding', 'tagged', 'at', 'task', 'generic', 'package', 'terminate', 'begin', 'goto', 'pragma', 'then', 'body', 'private', 'type', 'if', 'procedure', 'case', 'in', 'protected', 'until', 'constant', 'interface', 'use', 'is', 'raise', 'declare', 'range', 'when', 'delay', 'limited', 'record', 'while', 'delta', 'loop', 'rem', 'with', 'digits', 'renames', 'do', 'mod', 'requeue', 'xor']
49c81e5e79SBram Moolenaar    let g:ada#Keywords += [{
50c81e5e79SBram Moolenaar	    \ 'word':  Item,
51c81e5e79SBram Moolenaar	    \ 'menu':  'keyword',
52c81e5e79SBram Moolenaar	    \ 'info':  'Ada keyword.',
53c81e5e79SBram Moolenaar	    \ 'kind':  'k',
54c81e5e79SBram Moolenaar	    \ 'icase': 1}]
55c81e5e79SBram Moolenaarendfor
56c81e5e79SBram Moolenaar
57c81e5e79SBram Moolenaar" Section: GNAT Project Files {{{3
58c81e5e79SBram Moolenaar"
59c81e5e79SBram Moolenaarif exists ('g:ada_with_gnat_project_files')
60c81e5e79SBram Moolenaar    for Item in ['project']
61c81e5e79SBram Moolenaar       let g:ada#Keywords += [{
62c81e5e79SBram Moolenaar	       \ 'word':  Item,
63c81e5e79SBram Moolenaar	       \ 'menu':  'keyword',
64c81e5e79SBram Moolenaar	       \ 'info':  'GNAT projectfile keyword.',
65c81e5e79SBram Moolenaar	       \ 'kind':  'k',
66c81e5e79SBram Moolenaar	       \ 'icase': 1}]
67c81e5e79SBram Moolenaar    endfor
68c81e5e79SBram Moolenaarendif
69c81e5e79SBram Moolenaar
70*6c391a74SBram Moolenaar" Section: add	standard exception {{{2
71c81e5e79SBram Moolenaar"
72c81e5e79SBram Moolenaarfor Item in ['Constraint_Error', 'Program_Error', 'Storage_Error', 'Tasking_Error', 'Status_Error', 'Mode_Error', 'Name_Error', 'Use_Error', 'Device_Error', 'End_Error', 'Data_Error', 'Layout_Error', 'Length_Error', 'Pattern_Error', 'Index_Error', 'Translation_Error', 'Time_Error', 'Argument_Error', 'Tag_Error', 'Picture_Error', 'Terminator_Error', 'Conversion_Error', 'Pointer_Error', 'Dereference_Error', 'Update_Error']
73c81e5e79SBram Moolenaar    let g:ada#Keywords += [{
74c81e5e79SBram Moolenaar	    \ 'word':  Item,
75c81e5e79SBram Moolenaar	    \ 'menu':  'exception',
76*6c391a74SBram Moolenaar	    \ 'info':  'Ada standard exception.',
77c81e5e79SBram Moolenaar	    \ 'kind':  'x',
78c81e5e79SBram Moolenaar	    \ 'icase': 1}]
79c81e5e79SBram Moolenaarendfor
80c81e5e79SBram Moolenaar
81c81e5e79SBram Moolenaar" Section: add	GNAT exception {{{3
82c81e5e79SBram Moolenaar"
83c81e5e79SBram Moolenaarif exists ('g:ada_gnat_extensions')
84c81e5e79SBram Moolenaar    for Item in ['Assert_Failure']
85c81e5e79SBram Moolenaar	let g:ada#Keywords += [{
86c81e5e79SBram Moolenaar		\ 'word':  Item,
87c81e5e79SBram Moolenaar		\ 'menu':  'exception',
88c81e5e79SBram Moolenaar		\ 'info':  'GNAT exception.',
89c81e5e79SBram Moolenaar		\ 'kind':  'x',
90c81e5e79SBram Moolenaar		\ 'icase': 1}]
91c81e5e79SBram Moolenaar    endfor
92c81e5e79SBram Moolenaarendif
93c81e5e79SBram Moolenaar
94c81e5e79SBram Moolenaar" Section: add Ada buildin types {{{2
95c81e5e79SBram Moolenaar"
96c81e5e79SBram Moolenaarfor Item in ['Boolean', 'Integer', 'Natural', 'Positive', 'Float', 'Character', 'Wide_Character', 'Wide_Wide_Character', 'String', 'Wide_String', 'Wide_Wide_String', 'Duration']
97c81e5e79SBram Moolenaar    let g:ada#Keywords += [{
98c81e5e79SBram Moolenaar	    \ 'word':  Item,
99c81e5e79SBram Moolenaar	    \ 'menu':  'type',
100c81e5e79SBram Moolenaar	    \ 'info':  'Ada buildin type.',
101c81e5e79SBram Moolenaar	    \ 'kind':  't',
102c81e5e79SBram Moolenaar	    \ 'icase': 1}]
103c81e5e79SBram Moolenaarendfor
104c81e5e79SBram Moolenaar
105c81e5e79SBram Moolenaar" Section: add GNAT buildin types {{{3
106c81e5e79SBram Moolenaar"
107c81e5e79SBram Moolenaarif exists ('g:ada_gnat_extensions')
108c81e5e79SBram Moolenaar    for Item in ['Short_Integer', 'Short_Short_Integer', 'Long_Integer', 'Long_Long_Integer', 'Short_Float', 'Short_Short_Float', 'Long_Float', 'Long_Long_Float']
109c81e5e79SBram Moolenaar	let g:ada#Keywords += [{
110c81e5e79SBram Moolenaar		\ 'word':  Item,
111c81e5e79SBram Moolenaar		\ 'menu':  'type',
112c81e5e79SBram Moolenaar		\ 'info':  'GNAT buildin type.',
113c81e5e79SBram Moolenaar		\ 'kind':  't',
114c81e5e79SBram Moolenaar		\ 'icase': 1}]
115c81e5e79SBram Moolenaar    endfor
116c81e5e79SBram Moolenaarendif
117c81e5e79SBram Moolenaar
118c81e5e79SBram Moolenaar" Section: add Ada Attributes {{{2
119c81e5e79SBram Moolenaar"
120c81e5e79SBram Moolenaarfor Item in ['''Access', '''Address', '''Adjacent', '''Aft', '''Alignment', '''Base', '''Bit_Order', '''Body_Version', '''Callable', '''Caller', '''Ceiling', '''Class', '''Component_Size', '''Compose', '''Constrained', '''Copy_Sign', '''Count', '''Definite', '''Delta', '''Denorm', '''Digits', '''Emax', '''Exponent', '''External_Tag', '''Epsilon', '''First', '''First_Bit', '''Floor', '''Fore', '''Fraction', '''Identity', '''Image', '''Input', '''Large', '''Last', '''Last_Bit', '''Leading_Part', '''Length', '''Machine', '''Machine_Emax', '''Machine_Emin', '''Machine_Mantissa', '''Machine_Overflows', '''Machine_Radix', '''Machine_Rounding', '''Machine_Rounds', '''Mantissa', '''Max', '''Max_Size_In_Storage_Elements', '''Min', '''Mod', '''Model', '''Model_Emin', '''Model_Epsilon', '''Model_Mantissa', '''Model_Small', '''Modulus', '''Output', '''Partition_ID', '''Pos', '''Position', '''Pred', '''Priority', '''Range', '''Read', '''Remainder', '''Round', '''Rounding', '''Safe_Emax', '''Safe_First', '''Safe_Large', '''Safe_Last', '''Safe_Small', '''Scale', '''Scaling', '''Signed_Zeros', '''Size', '''Small', '''Storage_Pool', '''Storage_Size', '''Stream_Size', '''Succ', '''Tag', '''Terminated', '''Truncation', '''Unbiased_Rounding', '''Unchecked_Access', '''Val', '''Valid', '''Value', '''Version', '''Wide_Image', '''Wide_Value', '''Wide_Wide_Image', '''Wide_Wide_Value', '''Wide_Wide_Width', '''Wide_Width', '''Width', '''Write']
121c81e5e79SBram Moolenaar    let g:ada#Keywords += [{
122c81e5e79SBram Moolenaar	    \ 'word':  Item,
123c81e5e79SBram Moolenaar	    \ 'menu':  'attribute',
124c81e5e79SBram Moolenaar	    \ 'info':  'Ada attribute.',
125c81e5e79SBram Moolenaar	    \ 'kind':  'a',
126c81e5e79SBram Moolenaar	    \ 'icase': 1}]
127c81e5e79SBram Moolenaarendfor
128c81e5e79SBram Moolenaar
129c81e5e79SBram Moolenaar" Section: add GNAT Attributes {{{3
130c81e5e79SBram Moolenaar"
131c81e5e79SBram Moolenaarif exists ('g:ada_gnat_extensions')
132c81e5e79SBram Moolenaar    for Item in ['''Abort_Signal', '''Address_Size', '''Asm_Input', '''Asm_Output', '''AST_Entry', '''Bit', '''Bit_Position', '''Code_Address', '''Default_Bit_Order', '''Elaborated', '''Elab_Body', '''Elab_Spec', '''Emax', '''Enum_Rep', '''Epsilon', '''Fixed_Value', '''Has_Access_Values', '''Has_Discriminants', '''Img', '''Integer_Value', '''Machine_Size', '''Max_Interrupt_Priority', '''Max_Priority', '''Maximum_Alignment', '''Mechanism_Code', '''Null_Parameter', '''Object_Size', '''Passed_By_Reference', '''Range_Length', '''Storage_Unit', '''Target_Name', '''Tick', '''To_Address', '''Type_Class', '''UET_Address', '''Unconstrained_Array', '''Universal_Literal_String', '''Unrestricted_Access', '''VADS_Size', '''Value_Size', '''Wchar_T_Size', '''Word_Size']
133c81e5e79SBram Moolenaar    let g:ada#Keywords += [{
134c81e5e79SBram Moolenaar	    \ 'word':  Item,
135c81e5e79SBram Moolenaar	    \ 'menu':  'attribute',
136c81e5e79SBram Moolenaar	    \ 'info':  'GNAT attribute.',
137c81e5e79SBram Moolenaar	    \ 'kind':  'a',
138c81e5e79SBram Moolenaar	    \ 'icase': 1}]
139c81e5e79SBram Moolenaar    endfor
140c81e5e79SBram Moolenaarendif
141c81e5e79SBram Moolenaar
142c81e5e79SBram Moolenaar" Section: add Ada Pragmas {{{2
143c81e5e79SBram Moolenaar"
144c81e5e79SBram Moolenaarfor Item in ['All_Calls_Remote', 'Assert', 'Assertion_Policy', 'Asynchronous', 'Atomic', 'Atomic_Components', 'Attach_Handler', 'Controlled', 'Convention', 'Detect_Blocking', 'Discard_Names', 'Elaborate', 'Elaborate_All', 'Elaborate_Body', 'Export', 'Import', 'Inline', 'Inspection_Point', 'Interface (Obsolescent)', 'Interrupt_Handler', 'Interrupt_Priority', 'Linker_Options', 'List', 'Locking_Policy', 'Memory_Size (Obsolescent)', 'No_Return', 'Normalize_Scalars', 'Optimize', 'Pack', 'Page', 'Partition_Elaboration_Policy', 'Preelaborable_Initialization', 'Preelaborate', 'Priority', 'Priority_Specific_Dispatching', 'Profile', 'Pure', 'Queueing_Policy', 'Relative_Deadline', 'Remote_Call_Interface', 'Remote_Types', 'Restrictions', 'Reviewable', 'Shared (Obsolescent)', 'Shared_Passive', 'Storage_Size', 'Storage_Unit (Obsolescent)', 'Suppress', 'System_Name (Obsolescent)', 'Task_Dispatching_Policy', 'Unchecked_Union', 'Unsuppress', 'Volatile', 'Volatile_Components']
145c81e5e79SBram Moolenaar    let g:ada#Keywords += [{
146c81e5e79SBram Moolenaar	    \ 'word':  Item,
147c81e5e79SBram Moolenaar	    \ 'menu':  'pragma',
148c81e5e79SBram Moolenaar	    \ 'info':  'Ada pragma.',
149c81e5e79SBram Moolenaar	    \ 'kind':  'p',
150c81e5e79SBram Moolenaar	    \ 'icase': 1}]
151c81e5e79SBram Moolenaarendfor
152c81e5e79SBram Moolenaar
153c81e5e79SBram Moolenaar" Section: add GNAT Pragmas {{{3
154c81e5e79SBram Moolenaar"
155c81e5e79SBram Moolenaarif exists ('g:ada_gnat_extensions')
156c81e5e79SBram Moolenaar    for Item in ['Abort_Defer', 'Ada_83', 'Ada_95', 'Ada_05', 'Annotate', 'Ast_Entry', 'C_Pass_By_Copy', 'Comment', 'Common_Object', 'Compile_Time_Warning', 'Complex_Representation', 'Component_Alignment', 'Convention_Identifier', 'CPP_Class', 'CPP_Constructor', 'CPP_Virtual', 'CPP_Vtable', 'Debug', 'Elaboration_Checks', 'Eliminate', 'Export_Exception', 'Export_Function', 'Export_Object', 'Export_Procedure', 'Export_Value', 'Export_Valued_Procedure', 'Extend_System', 'External', 'External_Name_Casing', 'Finalize_Storage_Only', 'Float_Representation', 'Ident', 'Import_Exception', 'Import_Function', 'Import_Object', 'Import_Procedure', 'Import_Valued_Procedure', 'Initialize_Scalars', 'Inline_Always', 'Inline_Generic', 'Interface_Name', 'Interrupt_State', 'Keep_Names', 'License', 'Link_With', 'Linker_Alias', 'Linker_Section', 'Long_Float', 'Machine_Attribute', 'Main_Storage', 'Obsolescent', 'Passive', 'Polling', 'Profile_Warnings', 'Propagate_Exceptions', 'Psect_Object', 'Pure_Function', 'Restriction_Warnings', 'Source_File_Name', 'Source_File_Name_Project', 'Source_Reference', 'Stream_Convert', 'Style_Checks', 'Subtitle', 'Suppress_All', 'Suppress_Exception_Locations', 'Suppress_Initialization', 'Task_Info', 'Task_Name', 'Task_Storage', 'Thread_Body', 'Time_Slice', 'Title', 'Unimplemented_Unit', 'Universal_Data', 'Unreferenced', 'Unreserve_All_Interrupts', 'Use_VADS_Size', 'Validity_Checks', 'Warnings', 'Weak_External']
157c81e5e79SBram Moolenaar	let g:ada#Keywords += [{
158c81e5e79SBram Moolenaar		\ 'word':  Item,
159c81e5e79SBram Moolenaar		\ 'menu':  'pragma',
160c81e5e79SBram Moolenaar		\ 'info':  'GNAT pragma.',
161c81e5e79SBram Moolenaar		\ 'kind':  'p',
162c81e5e79SBram Moolenaar		\ 'icase': 1}]
163c81e5e79SBram Moolenaar    endfor
164c81e5e79SBram Moolenaarendif
165c81e5e79SBram Moolenaar" 1}}}
166c81e5e79SBram Moolenaar
167c81e5e79SBram Moolenaar" Section: g:ada#Ctags_Kinds {{{1
168c81e5e79SBram Moolenaar"
169c81e5e79SBram Moolenaarlet g:ada#Ctags_Kinds = {
170c81e5e79SBram Moolenaar   \ 'P': ["packspec",	  "package specifications"],
171c81e5e79SBram Moolenaar   \ 'p': ["package",	  "packages"],
172c81e5e79SBram Moolenaar   \ 'T': ["typespec",	  "type specifications"],
173c81e5e79SBram Moolenaar   \ 't': ["type",	  "types"],
174c81e5e79SBram Moolenaar   \ 'U': ["subspec",	  "subtype specifications"],
175c81e5e79SBram Moolenaar   \ 'u': ["subtype",	  "subtypes"],
176c81e5e79SBram Moolenaar   \ 'c': ["component",   "record type components"],
177c81e5e79SBram Moolenaar   \ 'l': ["literal",	  "enum type literals"],
178c81e5e79SBram Moolenaar   \ 'V': ["varspec",	  "variable specifications"],
179c81e5e79SBram Moolenaar   \ 'v': ["variable",	  "variables"],
180c81e5e79SBram Moolenaar   \ 'f': ["formal",	  "generic formal parameters"],
181c81e5e79SBram Moolenaar   \ 'n': ["constant",	  "constants"],
182c81e5e79SBram Moolenaar   \ 'x': ["exception",   "user defined exceptions"],
183c81e5e79SBram Moolenaar   \ 'R': ["subprogspec", "subprogram specifications"],
184c81e5e79SBram Moolenaar   \ 'r': ["subprogram",  "subprograms"],
185c81e5e79SBram Moolenaar   \ 'K': ["taskspec",	  "task specifications"],
186c81e5e79SBram Moolenaar   \ 'k': ["task",	  "tasks"],
187c81e5e79SBram Moolenaar   \ 'O': ["protectspec", "protected data specifications"],
188c81e5e79SBram Moolenaar   \ 'o': ["protected",   "protected data"],
189c81e5e79SBram Moolenaar   \ 'E': ["entryspec",   "task/protected data entry specifications"],
190c81e5e79SBram Moolenaar   \ 'e': ["entry",	  "task/protected data entries"],
191c81e5e79SBram Moolenaar   \ 'b': ["label",	  "labels"],
192c81e5e79SBram Moolenaar   \ 'i': ["identifier",  "loop/declare identifiers"],
193c81e5e79SBram Moolenaar   \ 'a': ["autovar",	  "automatic variables"],
194c81e5e79SBram Moolenaar   \ 'y': ["annon",	  "loops and blocks with no identifier"]}
195c81e5e79SBram Moolenaar
196c81e5e79SBram Moolenaar" Section: ada#Word (...) {{{1
197c81e5e79SBram Moolenaar"
198c81e5e79SBram Moolenaar" Extract current Ada word across multiple lines
199c81e5e79SBram Moolenaar" AdaWord ([line, column])\
200c81e5e79SBram Moolenaar"
201c81e5e79SBram Moolenaarfunction ada#Word (...)
202c81e5e79SBram Moolenaar   if a:0 > 1
203c81e5e79SBram Moolenaar      let l:Line_Nr    = a:1
204c81e5e79SBram Moolenaar      let l:Column_Nr  = a:2 - 1
205c81e5e79SBram Moolenaar   else
206c81e5e79SBram Moolenaar      let l:Line_Nr    = line('.')
207c81e5e79SBram Moolenaar      let l:Column_Nr  = col('.') - 1
208c81e5e79SBram Moolenaar   endif
209c81e5e79SBram Moolenaar
210c81e5e79SBram Moolenaar   let l:Line = substitute (getline (l:Line_Nr), g:ada#Comment, '', '' )
211c81e5e79SBram Moolenaar
212c81e5e79SBram Moolenaar   " Cope with tag searching for items in comments; if we are, don't loop
213*6c391a74SBram Moolenaar   " backwards looking for previous lines
214c81e5e79SBram Moolenaar   if l:Column_Nr > strlen(l:Line)
215c81e5e79SBram Moolenaar      " We were in a comment
216c81e5e79SBram Moolenaar      let l:Line = getline(l:Line_Nr)
217c81e5e79SBram Moolenaar      let l:Search_Prev_Lines = 0
218c81e5e79SBram Moolenaar   else
219c81e5e79SBram Moolenaar      let l:Search_Prev_Lines = 1
220c81e5e79SBram Moolenaar   endif
221c81e5e79SBram Moolenaar
222c81e5e79SBram Moolenaar   " Go backwards until we find a match (Ada ID) that *doesn't* include our
223c81e5e79SBram Moolenaar   " location - i.e., the previous ID. This is because the current 'correct'
224c81e5e79SBram Moolenaar   " match will toggle matching/not matching as we traverse characters
225c81e5e79SBram Moolenaar   " backwards. Thus, we have to find the previous unrelated match, exclude
226c81e5e79SBram Moolenaar   " it, then use the next full match (ours).
227c81e5e79SBram Moolenaar   " Remember to convert vim column 'l:Column_Nr' [1..n] to string offset [0..(n-1)]
228c81e5e79SBram Moolenaar   " ... but start, here, one after the required char.
229c81e5e79SBram Moolenaar   let l:New_Column = l:Column_Nr + 1
230c81e5e79SBram Moolenaar   while 1
231c81e5e79SBram Moolenaar      let l:New_Column = l:New_Column - 1
232c81e5e79SBram Moolenaar      if l:New_Column < 0
233c81e5e79SBram Moolenaar	 " Have to include previous l:Line from file
234c81e5e79SBram Moolenaar	 let l:Line_Nr = l:Line_Nr - 1
235c81e5e79SBram Moolenaar	 if l:Line_Nr < 1  ||  !l:Search_Prev_Lines
236c81e5e79SBram Moolenaar	    " Start of file or matching in a comment
237c81e5e79SBram Moolenaar	    let l:Line_Nr     = 1
238c81e5e79SBram Moolenaar	    let l:New_Column  = 0
239c81e5e79SBram Moolenaar	    let l:Our_Match   = match (l:Line, g:ada#WordRegex )
240c81e5e79SBram Moolenaar	    break
241c81e5e79SBram Moolenaar	 endif
242c81e5e79SBram Moolenaar	 " Get previous l:Line, and prepend it to our search string
243c81e5e79SBram Moolenaar	 let l:New_Line    = substitute (getline (l:Line_Nr), g:ada#Comment, '', '' )
244c81e5e79SBram Moolenaar	 let l:New_Column  = strlen (l:New_Line) - 1
245c81e5e79SBram Moolenaar	 let l:Column_Nr   = l:Column_Nr + l:New_Column
246c81e5e79SBram Moolenaar	 let l:Line	   = l:New_Line . l:Line
247c81e5e79SBram Moolenaar      endif
248c81e5e79SBram Moolenaar      " Check to see if this is a match excluding 'us'
249c81e5e79SBram Moolenaar      let l:Match_End = l:New_Column +
250c81e5e79SBram Moolenaar		      \ matchend (strpart (l:Line,l:New_Column), g:ada#WordRegex ) - 1
251c81e5e79SBram Moolenaar      if l:Match_End >= l:New_Column  &&
252c81e5e79SBram Moolenaar       \ l:Match_End < l:Column_Nr
253c81e5e79SBram Moolenaar	 " Yes
254c81e5e79SBram Moolenaar	 let l:Our_Match = l:Match_End+1 +
255c81e5e79SBram Moolenaar			 \ match (strpart (l:Line,l:Match_End+1), g:ada#WordRegex )
256c81e5e79SBram Moolenaar	 break
257c81e5e79SBram Moolenaar      endif
258c81e5e79SBram Moolenaar   endwhile
259c81e5e79SBram Moolenaar
260c81e5e79SBram Moolenaar   " Got anything?
261c81e5e79SBram Moolenaar   if l:Our_Match < 0
262c81e5e79SBram Moolenaar      return ''
263c81e5e79SBram Moolenaar   else
264c81e5e79SBram Moolenaar      let l:Line = strpart (l:Line, l:Our_Match)
265c81e5e79SBram Moolenaar   endif
266c81e5e79SBram Moolenaar
267c81e5e79SBram Moolenaar   " Now simply add further lines until the match gets no bigger
268c81e5e79SBram Moolenaar   let l:Match_String = matchstr (l:Line, g:ada#WordRegex)
269c81e5e79SBram Moolenaar   let l:Last_Line    = line ('$')
270c81e5e79SBram Moolenaar   let l:Line_Nr      = line ('.') + 1
271c81e5e79SBram Moolenaar   while l:Line_Nr <= l:Last_Line
272c81e5e79SBram Moolenaar      let l:Last_Match = l:Match_String
273c81e5e79SBram Moolenaar      let l:Line = l:Line .
274c81e5e79SBram Moolenaar	 \ substitute (getline (l:Line_Nr), g:ada#Comment, '', '')
275c81e5e79SBram Moolenaar      let l:Match_String = matchstr (l:Line, g:ada#WordRegex)
276c81e5e79SBram Moolenaar      if l:Match_String == l:Last_Match
277c81e5e79SBram Moolenaar	 break
278c81e5e79SBram Moolenaar      endif
279c81e5e79SBram Moolenaar   endwhile
280c81e5e79SBram Moolenaar
281c81e5e79SBram Moolenaar   " Strip whitespace & return
282c81e5e79SBram Moolenaar   return substitute (l:Match_String, '\s\+', '', 'g')
283c81e5e79SBram Moolenaarendfunction ada#Word
284c81e5e79SBram Moolenaar
285c81e5e79SBram Moolenaar" Section: ada#List_Tag (...) {{{1
286c81e5e79SBram Moolenaar"
287c81e5e79SBram Moolenaar"  List tags in quickfix window
288c81e5e79SBram Moolenaar"
289c81e5e79SBram Moolenaarfunction ada#List_Tag (...)
290c81e5e79SBram Moolenaar   if a:0 > 1
291c81e5e79SBram Moolenaar      let l:Tag_Word = ada#Word (a:1, a:2)
292c81e5e79SBram Moolenaar   elseif a:0 > 0
293c81e5e79SBram Moolenaar      let l:Tag_Word = a:1
294c81e5e79SBram Moolenaar   else
295c81e5e79SBram Moolenaar      let l:Tag_Word = ada#Word ()
296c81e5e79SBram Moolenaar   endif
297c81e5e79SBram Moolenaar
298c81e5e79SBram Moolenaar   echo "Searching for" l:Tag_Word
299c81e5e79SBram Moolenaar
300c81e5e79SBram Moolenaar   let l:Pattern = '^' . l:Tag_Word . '$'
301c81e5e79SBram Moolenaar   let l:Tag_List = taglist (l:Pattern)
302c81e5e79SBram Moolenaar   let l:Error_List = []
303c81e5e79SBram Moolenaar   "
304c81e5e79SBram Moolenaar   " add symbols
305c81e5e79SBram Moolenaar   "
306c81e5e79SBram Moolenaar   for Tag_Item in l:Tag_List
307c81e5e79SBram Moolenaar      if l:Tag_Item['kind'] == ''
308c81e5e79SBram Moolenaar	 let l:Tag_Item['kind'] = 's'
309c81e5e79SBram Moolenaar      endif
310c81e5e79SBram Moolenaar
311c81e5e79SBram Moolenaar      let l:Error_List += [
312c81e5e79SBram Moolenaar	 \ l:Tag_Item['filename'] . '|' .
313c81e5e79SBram Moolenaar	 \ l:Tag_Item['cmd']	  . '|' .
314c81e5e79SBram Moolenaar	 \ l:Tag_Item['kind']	  . "\t" .
315c81e5e79SBram Moolenaar	 \ l:Tag_Item['name'] ]
316c81e5e79SBram Moolenaar   endfor
317c81e5e79SBram Moolenaar   set errorformat=%f\|%l\|%m
318c81e5e79SBram Moolenaar   cexpr l:Error_List
319c81e5e79SBram Moolenaar   cwindow
320c81e5e79SBram Moolenaarendfunction ada#List_Tag
321c81e5e79SBram Moolenaar
322c81e5e79SBram Moolenaar" Section: ada#Jump_Tag (Word, Mode) {{{1
323c81e5e79SBram Moolenaar"
324c81e5e79SBram Moolenaar" Word tag - include '.' and if Ada make uppercase
325c81e5e79SBram Moolenaar"
326c81e5e79SBram Moolenaarfunction ada#Jump_Tag (Word, Mode)
327c81e5e79SBram Moolenaar   if a:Word == ''
328c81e5e79SBram Moolenaar      " Get current word
329c81e5e79SBram Moolenaar      let l:Word = ada#Word()
330c81e5e79SBram Moolenaar      if l:Word == ''
331c81e5e79SBram Moolenaar	 throw "NOT_FOUND: no identifier found."
332c81e5e79SBram Moolenaar      endif
333c81e5e79SBram Moolenaar   else
334c81e5e79SBram Moolenaar      let l:Word = a:Word
335c81e5e79SBram Moolenaar   endif
336c81e5e79SBram Moolenaar
337c81e5e79SBram Moolenaar   echo "Searching for " . l:Word
338c81e5e79SBram Moolenaar
339c81e5e79SBram Moolenaar   try
340c81e5e79SBram Moolenaar      execute a:Mode l:Word
341c81e5e79SBram Moolenaar   catch /.*:E426:.*/
342c81e5e79SBram Moolenaar      let ignorecase = &ignorecase
343c81e5e79SBram Moolenaar      set ignorecase
344c81e5e79SBram Moolenaar      execute a:Mode l:Word
345c81e5e79SBram Moolenaar      let &ignorecase = ignorecase
346c81e5e79SBram Moolenaar   endtry
347c81e5e79SBram Moolenaar
348c81e5e79SBram Moolenaar   return
349c81e5e79SBram Moolenaarendfunction ada#Jump_Tag
350c81e5e79SBram Moolenaar
351c81e5e79SBram Moolenaar" Section: ada#Insert_Backspace () {{{1
352c81e5e79SBram Moolenaar"
353c81e5e79SBram Moolenaar" Backspace at end of line after auto-inserted commentstring '-- ' wipes it
354c81e5e79SBram Moolenaar"
355c81e5e79SBram Moolenaarfunction ada#Insert_Backspace ()
356c81e5e79SBram Moolenaar   let l:Line = getline ('.')
357c81e5e79SBram Moolenaar   if col ('.') > strlen (l:Line) &&
358c81e5e79SBram Moolenaar    \ match (l:Line, '-- $') != -1 &&
359c81e5e79SBram Moolenaar    \ match (&comments,'--') != -1
360c81e5e79SBram Moolenaar      return "\<bs>\<bs>\<bs>"
361c81e5e79SBram Moolenaar   else
362c81e5e79SBram Moolenaar      return "\<bs>"
363c81e5e79SBram Moolenaar   endif
364c81e5e79SBram Moolenaar
365c81e5e79SBram Moolenaar   return
366c81e5e79SBram Moolenaarendfunction ada#InsertBackspace
367c81e5e79SBram Moolenaar
368c81e5e79SBram Moolenaar" Section: Insert Completions {{{1
369c81e5e79SBram Moolenaar"
370c81e5e79SBram Moolenaar" Section: ada#User_Complete(findstart, base) {{{2
371c81e5e79SBram Moolenaar"
372c81e5e79SBram Moolenaar" This function is used for the 'complete' option.
373c81e5e79SBram Moolenaar"
374c81e5e79SBram Moolenaarfunction! ada#User_Complete(findstart, base)
375c81e5e79SBram Moolenaar   if a:findstart == 1
376c81e5e79SBram Moolenaar      "
377c81e5e79SBram Moolenaar      " locate the start of the word
378c81e5e79SBram Moolenaar      "
379c81e5e79SBram Moolenaar      let line = getline ('.')
380c81e5e79SBram Moolenaar      let start = col ('.') - 1
381c81e5e79SBram Moolenaar      while start > 0 && line[start - 1] =~ '\i\|'''
382c81e5e79SBram Moolenaar	 let start -= 1
383c81e5e79SBram Moolenaar      endwhile
384c81e5e79SBram Moolenaar      return start
385c81e5e79SBram Moolenaar   else
386c81e5e79SBram Moolenaar      "
387c81e5e79SBram Moolenaar      " look up matches
388c81e5e79SBram Moolenaar      "
389c81e5e79SBram Moolenaar      let l:Pattern = '^' . a:base . '.*$'
390c81e5e79SBram Moolenaar      "
391c81e5e79SBram Moolenaar      " add keywords
392c81e5e79SBram Moolenaar      "
393c81e5e79SBram Moolenaar      for Tag_Item in g:ada#Keywords
394c81e5e79SBram Moolenaar	 if l:Tag_Item['word'] =~? l:Pattern
395c81e5e79SBram Moolenaar	    if complete_add (l:Tag_Item) == 0
396c81e5e79SBram Moolenaar	       return []
397c81e5e79SBram Moolenaar	    endif
398c81e5e79SBram Moolenaar	    if complete_check ()
399c81e5e79SBram Moolenaar	       return []
400c81e5e79SBram Moolenaar	    endif
401c81e5e79SBram Moolenaar	 endif
402c81e5e79SBram Moolenaar      endfor
403c81e5e79SBram Moolenaar      return []
404c81e5e79SBram Moolenaar   endif
405c81e5e79SBram Moolenaarendfunction ada#User_Complete
406c81e5e79SBram Moolenaar
407c81e5e79SBram Moolenaar" Section: ada#Completion (cmd) {{{2
408c81e5e79SBram Moolenaar"
409c81e5e79SBram Moolenaar" Word completion (^N/^R/^X^]) - force '.' inclusion
410c81e5e79SBram Moolenaarfunction ada#Completion (cmd)
411c81e5e79SBram Moolenaar   set iskeyword+=46
412c81e5e79SBram Moolenaar   return a:cmd . "\<C-R>=ada#Completion_End ()\<CR>"
413c81e5e79SBram Moolenaarendfunction ada#Completion
414c81e5e79SBram Moolenaar
415c81e5e79SBram Moolenaar" Section: ada#Completion_End () {{{2
416c81e5e79SBram Moolenaar"
417c81e5e79SBram Moolenaarfunction ada#Completion_End ()
418c81e5e79SBram Moolenaar   set iskeyword-=46
419c81e5e79SBram Moolenaar   return ''
420c81e5e79SBram Moolenaarendfunction ada#Completion_End
421c81e5e79SBram Moolenaar
422c81e5e79SBram Moolenaar" Section: ada#Create_Tags {{{1
423c81e5e79SBram Moolenaar"
424c81e5e79SBram Moolenaarfunction ada#Create_Tags (option)
425c81e5e79SBram Moolenaar   if a:option == 'file'
426c81e5e79SBram Moolenaar      let l:Filename = fnamemodify (bufname ('%'), ':p')
427c81e5e79SBram Moolenaar   elseif a:option == 'dir'
428c81e5e79SBram Moolenaar      let l:Filename =
429c81e5e79SBram Moolenaar	 \ fnamemodify (bufname ('%'), ':p:h') . "*.ada " .
430c81e5e79SBram Moolenaar	 \ fnamemodify (bufname ('%'), ':p:h') . "*.adb " .
431c81e5e79SBram Moolenaar	 \ fnamemodify (bufname ('%'), ':p:h') . "*.ads"
432c81e5e79SBram Moolenaar   else
433c81e5e79SBram Moolenaar      let l:Filename = a:option
434c81e5e79SBram Moolenaar   endif
435c81e5e79SBram Moolenaar   execute '!ctags --excmd=number ' . l:Filename
436c81e5e79SBram Moolenaarendfunction ada#Create_Tags
437c81e5e79SBram Moolenaar
438c236c16dSBram Moolenaar" Section: ada#Switch_Session {{{1
439c236c16dSBram Moolenaar"
440c236c16dSBram Moolenaarfunction ada#Switch_Session (New_Session)
441c236c16dSBram Moolenaar   "
442c236c16dSBram Moolenaar   " you should not save to much date into the seession since they will
443c236c16dSBram Moolenaar   " be sourced
444c236c16dSBram Moolenaar   "
445c236c16dSBram Moolenaar   let l:sessionoptions=&sessionoptions
446c236c16dSBram Moolenaar
447c236c16dSBram Moolenaar   try
448c236c16dSBram Moolenaar      set sessionoptions=buffers,curdir,folds,globals,resize,slash,tabpages,tabpages,unix,winpos,winsize
449c236c16dSBram Moolenaar
450c81e5e79SBram Moolenaar      if a:New_Session != v:this_session
451c81e5e79SBram Moolenaar	 "
4523df0173fSBram Moolenaar	 "  We actually got a new session - otherwise there
453c81e5e79SBram Moolenaar	 "  is nothing to do.
454c81e5e79SBram Moolenaar	 "
455c81e5e79SBram Moolenaar	 if strlen (v:this_session) > 0
456c81e5e79SBram Moolenaar	    execute 'mksession! ' . v:this_session
457c81e5e79SBram Moolenaar	 endif
458c81e5e79SBram Moolenaar
459c81e5e79SBram Moolenaar	 let v:this_session = a:New_Session
460c81e5e79SBram Moolenaar
461c236c16dSBram Moolenaar	 "if filereadable (v:this_session)
462c236c16dSBram Moolenaar	    "execute 'source ' . v:this_session
463c236c16dSBram Moolenaar	 "endif
464c81e5e79SBram Moolenaar
465c81e5e79SBram Moolenaar	 augroup ada_session
466c81e5e79SBram Moolenaar	    autocmd!
467c81e5e79SBram Moolenaar	    autocmd VimLeavePre * execute 'mksession! ' . v:this_session
468c81e5e79SBram Moolenaar	 augroup END
469c236c16dSBram Moolenaar
470c236c16dSBram Moolenaar	 "if exists ("g:Tlist_Auto_Open") && g:Tlist_Auto_Open
471c236c16dSBram Moolenaar	    "TlistOpen
472c236c16dSBram Moolenaar	 "endif
473c236c16dSBram Moolenaar
474c81e5e79SBram Moolenaar      endif
475c236c16dSBram Moolenaar   finally
476c236c16dSBram Moolenaar      let &sessionoptions=l:sessionoptions
477c236c16dSBram Moolenaar   endtry
478c81e5e79SBram Moolenaar
479c81e5e79SBram Moolenaar   return
480c236c16dSBram Moolenaarendfunction ada#Switch_Session
481c81e5e79SBram Moolenaar
482c81e5e79SBram Moolenaar" Section: GNAT Pretty Printer folding {{{1
483c81e5e79SBram Moolenaar"
484c81e5e79SBram Moolenaarif exists('g:ada_folding') && g:ada_folding[0] == 'g'
485c81e5e79SBram Moolenaar   "
486c81e5e79SBram Moolenaar   " Lines consisting only of ')' ';' are due to a gnat pretty bug and
487c81e5e79SBram Moolenaar   " have the same level as the line above (can't happen in the first
488c81e5e79SBram Moolenaar   " line).
489c81e5e79SBram Moolenaar   "
490c81e5e79SBram Moolenaar   let s:Fold_Collate = '^\([;)]*$\|'
491c81e5e79SBram Moolenaar
492c81e5e79SBram Moolenaar   "
493c81e5e79SBram Moolenaar   " some lone statements are folded with the line above
494c81e5e79SBram Moolenaar   "
495c81e5e79SBram Moolenaar   if stridx (g:ada_folding, 'i') >= 0
496c81e5e79SBram Moolenaar      let s:Fold_Collate .= '\s\+\<is\>$\|'
497c81e5e79SBram Moolenaar   endif
498c81e5e79SBram Moolenaar   if stridx (g:ada_folding, 'b') >= 0
499c81e5e79SBram Moolenaar      let s:Fold_Collate .= '\s\+\<begin\>$\|'
500c81e5e79SBram Moolenaar   endif
501c81e5e79SBram Moolenaar   if stridx (g:ada_folding, 'p') >= 0
502c81e5e79SBram Moolenaar      let s:Fold_Collate .= '\s\+\<private\>$\|'
503c81e5e79SBram Moolenaar   endif
504c81e5e79SBram Moolenaar   if stridx (g:ada_folding, 'x') >= 0
505c81e5e79SBram Moolenaar      let s:Fold_Collate .= '\s\+\<exception\>$\|'
506c81e5e79SBram Moolenaar   endif
507c81e5e79SBram Moolenaar
508c81e5e79SBram Moolenaar   " We also handle empty lines and
509c81e5e79SBram Moolenaar   " comments here.
510c81e5e79SBram Moolenaar   let s:Fold_Collate .= '--\)'
511c81e5e79SBram Moolenaar
512c81e5e79SBram Moolenaar   function ada#Pretty_Print_Folding (Line)			     " {{{2
513c81e5e79SBram Moolenaar      let l:Text = getline (a:Line)
514c81e5e79SBram Moolenaar
515c81e5e79SBram Moolenaar      if l:Text =~ s:Fold_Collate
516c81e5e79SBram Moolenaar	 "
517c81e5e79SBram Moolenaar	 "  fold with line above
518c81e5e79SBram Moolenaar	 "
519c81e5e79SBram Moolenaar	 let l:Level = "="
520c81e5e79SBram Moolenaar      elseif l:Text =~ '^\s\+('
521c81e5e79SBram Moolenaar	 "
522c81e5e79SBram Moolenaar	 " gnat outdents a line which stards with a ( by one characters so
523c81e5e79SBram Moolenaar	 " that parameters which follow are aligned.
524c81e5e79SBram Moolenaar	 "
525c81e5e79SBram Moolenaar	 let l:Level = (indent (a:Line) + 1) / &shiftwidth
526c81e5e79SBram Moolenaar      else
527c81e5e79SBram Moolenaar	 let l:Level = indent (a:Line) / &shiftwidth
528c81e5e79SBram Moolenaar      endif
529c81e5e79SBram Moolenaar
530c81e5e79SBram Moolenaar      return l:Level
531c81e5e79SBram Moolenaar   endfunction ada#Pretty_Print_Folding				     " }}}2
532c81e5e79SBram Moolenaarendif
533c81e5e79SBram Moolenaar
534c81e5e79SBram Moolenaar" Section: Options and Menus {{{1
535c81e5e79SBram Moolenaar"
536c81e5e79SBram Moolenaar" Section: ada#Switch_Syntax_Options {{{2
537c81e5e79SBram Moolenaar"
538c81e5e79SBram Moolenaarfunction ada#Switch_Syntax_Option (option)
539c81e5e79SBram Moolenaar   syntax off
540c81e5e79SBram Moolenaar   if exists ('g:ada_' . a:option)
541c81e5e79SBram Moolenaar      unlet g:ada_{a:option}
542c81e5e79SBram Moolenaar      echo  a:option . 'now off'
543c81e5e79SBram Moolenaar   else
544c81e5e79SBram Moolenaar      let g:ada_{a:option}=1
545c81e5e79SBram Moolenaar      echo  a:option . 'now on'
546c81e5e79SBram Moolenaar   endif
547c81e5e79SBram Moolenaar   syntax on
548c81e5e79SBram Moolenaarendfunction ada#Switch_Syntax_Option
549c81e5e79SBram Moolenaar
550c81e5e79SBram Moolenaar" Section: ada#Map_Menu {{{2
551c81e5e79SBram Moolenaar"
552c81e5e79SBram Moolenaarfunction ada#Map_Menu (Text, Keys, Command)
553c81e5e79SBram Moolenaar   if a:Keys[0] == ':'
554c81e5e79SBram Moolenaar      execute
555c81e5e79SBram Moolenaar	\ "50amenu " .
556c81e5e79SBram Moolenaar	\ "Ada."     . escape(a:Text, ' ') .
557c81e5e79SBram Moolenaar	\ "<Tab>"    . a:Keys .
558c81e5e79SBram Moolenaar	\ " :"	     . a:Command . "<CR>"
559c81e5e79SBram Moolenaar      execute
560c81e5e79SBram Moolenaar	\ "command -buffer " .
561c81e5e79SBram Moolenaar	\ a:Keys[1:] .
562c81e5e79SBram Moolenaar	\" :" . a:Command . "<CR>"
563c81e5e79SBram Moolenaar   elseif a:Keys[0] == '<'
564c81e5e79SBram Moolenaar      execute
565c81e5e79SBram Moolenaar	\ "50amenu " .
566c81e5e79SBram Moolenaar	\ "Ada."     . escape(a:Text, ' ') .
567c81e5e79SBram Moolenaar	\ "<Tab>"    . a:Keys .
568c81e5e79SBram Moolenaar	\ " :"	     . a:Command . "<CR>"
569c81e5e79SBram Moolenaar      execute
570c81e5e79SBram Moolenaar	\ "nnoremap <buffer> "	 .
571c81e5e79SBram Moolenaar	\ a:Keys		 .
572c81e5e79SBram Moolenaar	\" :" . a:Command . "<CR>"
573c81e5e79SBram Moolenaar      execute
574c81e5e79SBram Moolenaar	\ "inoremap <buffer> "	 .
575c81e5e79SBram Moolenaar	\ a:Keys		 .
576c81e5e79SBram Moolenaar	\" <C-O>:" . a:Command . "<CR>"
577c81e5e79SBram Moolenaar   else
578c236c16dSBram Moolenaar      if exists("g:mapleader")
579c236c16dSBram Moolenaar         let l:leader = g:mapleader
580c236c16dSBram Moolenaar      else
581c236c16dSBram Moolenaar         let l:leader = '\'
582c236c16dSBram Moolenaar      endif
583c81e5e79SBram Moolenaar      execute
584c81e5e79SBram Moolenaar	\ "50amenu " .
585c81e5e79SBram Moolenaar	\ "Ada."  . escape(a:Text, ' ') .
586c236c16dSBram Moolenaar	\ "<Tab>" . escape(l:leader . "a" . a:Keys , '\') .
587c81e5e79SBram Moolenaar	\ " :"	  . a:Command . "<CR>"
588c81e5e79SBram Moolenaar      execute
589c81e5e79SBram Moolenaar	\ "nnoremap <buffer>" .
5903df0173fSBram Moolenaar	\ " <Leader>a" . a:Keys .
591c81e5e79SBram Moolenaar	\" :" . a:Command
592c81e5e79SBram Moolenaar      execute
593c81e5e79SBram Moolenaar	\ "inoremap <buffer>" .
59401164a65SBram Moolenaar	\ " <Leader>a" . a:Keys .
595c81e5e79SBram Moolenaar	\" <C-O>:" . a:Command
596c81e5e79SBram Moolenaar   endif
597c81e5e79SBram Moolenaar   return
598c81e5e79SBram Moolenaarendfunction
599c81e5e79SBram Moolenaar
600c81e5e79SBram Moolenaar" Section: ada#Map_Popup {{{2
601c81e5e79SBram Moolenaar"
602c81e5e79SBram Moolenaarfunction ada#Map_Popup (Text, Keys, Command)
603c236c16dSBram Moolenaar   if exists("g:mapleader")
604c236c16dSBram Moolenaar      let l:leader = g:mapleader
605c236c16dSBram Moolenaar   else
606c236c16dSBram Moolenaar      let l:leader = '\'
607c236c16dSBram Moolenaar   endif
608c81e5e79SBram Moolenaar   execute
609c81e5e79SBram Moolenaar     \ "50amenu " .
610c81e5e79SBram Moolenaar     \ "PopUp."   . escape(a:Text, ' ') .
611c236c16dSBram Moolenaar     \ "<Tab>"	  . escape(l:leader . "a" . a:Keys , '\') .
612c81e5e79SBram Moolenaar     \ " :"	  . a:Command . "<CR>"
613c81e5e79SBram Moolenaar
614c81e5e79SBram Moolenaar   call ada#Map_Menu (a:Text, a:Keys, a:Command)
615c81e5e79SBram Moolenaar   return
616c81e5e79SBram Moolenaarendfunction ada#Map_Popup
617c81e5e79SBram Moolenaar
618c81e5e79SBram Moolenaar" }}}1
619c81e5e79SBram Moolenaar
620c81e5e79SBram Moolenaarlockvar  g:ada#WordRegex
621c81e5e79SBram Moolenaarlockvar  g:ada#DotWordRegex
622c81e5e79SBram Moolenaarlockvar  g:ada#Comment
623c81e5e79SBram Moolenaarlockvar! g:ada#Keywords
624c81e5e79SBram Moolenaarlockvar! g:ada#Ctags_Kinds
625c81e5e79SBram Moolenaar
6269a7224b5SBram Moolenaarlet &cpo = s:keepcpo
6279a7224b5SBram Moolenaarunlet s:keepcpo
6289a7224b5SBram Moolenaar
629c81e5e79SBram Moolenaarfinish " 1}}}
630c81e5e79SBram Moolenaar
631c81e5e79SBram Moolenaar"------------------------------------------------------------------------------
632c81e5e79SBram Moolenaar"   Copyright (C) 2006	Martin Krischik
633c81e5e79SBram Moolenaar"
634c81e5e79SBram Moolenaar"   Vim is Charityware - see ":help license" or uganda.txt for licence details.
635c81e5e79SBram Moolenaar"------------------------------------------------------------------------------
636c81e5e79SBram Moolenaar" vim: textwidth=78 wrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
637c81e5e79SBram Moolenaar" vim: foldmethod=marker
638