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