forked from aniani/vim
		
	
		
			
	
	
		
			87 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:	Modula 2 | ||
|  | " Maintainer:	pf@artcom0.north.de (Peter Funk) | ||
|  | "   based on original work of Bram Moolenaar <Bram@vim.org> | ||
|  | " Last Change:	2001 May 09 | ||
|  | 
 | ||
|  | " For version 5.x: Clear all syntax items | ||
|  | " For version 6.x: Quit when a syntax file was already loaded | ||
|  | if version < 600 | ||
|  |   syntax clear | ||
|  | elseif exists("b:current_syntax") | ||
|  |   finish | ||
|  | endif | ||
|  | 
 | ||
|  | " Don't ignore case (Modula-2 is case significant). This is the default in vim | ||
|  | 
 | ||
|  | " Especially emphasize headers of procedures and modules: | ||
|  | syn region modula2Header matchgroup=modula2Header start="PROCEDURE " end="(" contains=modula2Ident oneline | ||
|  | syn region modula2Header matchgroup=modula2Header start="MODULE " end=";" contains=modula2Ident oneline | ||
|  | syn region modula2Header matchgroup=modula2Header start="BEGIN (\*" end="\*)" contains=modula2Ident oneline | ||
|  | syn region modula2Header matchgroup=modula2Header start="END " end=";" contains=modula2Ident oneline | ||
|  | syn region modula2Keyword start="END" end=";" contains=ALLBUT,modula2Ident oneline | ||
|  | 
 | ||
|  | " Some very important keywords which should be emphasized more than others: | ||
|  | syn keyword modula2AttKeyword CONST EXIT HALT RETURN TYPE VAR | ||
|  | " All other keywords in alphabetical order: | ||
|  | syn keyword modula2Keyword AND ARRAY BY CASE DEFINITION DIV DO ELSE | ||
|  | syn keyword modula2Keyword ELSIF EXPORT FOR FROM IF IMPLEMENTATION IMPORT | ||
|  | syn keyword modula2Keyword IN LOOP MOD NOT OF OR POINTER QUALIFIED RECORD | ||
|  | syn keyword modula2Keyword SET THEN TO UNTIL WHILE WITH | ||
|  | 
 | ||
|  | syn keyword modula2Type ADDRESS BITSET BOOLEAN CARDINAL CHAR INTEGER REAL WORD | ||
|  | syn keyword modula2StdFunc ABS CAP CHR DEC EXCL INC INCL ORD SIZE TSIZE VAL | ||
|  | syn keyword modula2StdConst FALSE NIL TRUE | ||
|  | " The following may be discussed, since NEW and DISPOSE are some kind of | ||
|  | " special builtin macro functions: | ||
|  | syn keyword modula2StdFunc NEW DISPOSE | ||
|  | " The following types are added later on and may be missing from older | ||
|  | " Modula-2 Compilers (they are at least missing from the original report | ||
|  | " by N.Wirth from March 1980 ;-)  Highlighting should apply nevertheless: | ||
|  | syn keyword modula2Type BYTE LONGCARD LONGINT LONGREAL PROC SHORTCARD SHORTINT | ||
|  | " same note applies to min and max, which were also added later to m2: | ||
|  | syn keyword modula2StdFunc MAX MIN | ||
|  | " The underscore was originally disallowed in m2 ids, it was also added later: | ||
|  | syn match   modula2Ident " [A-Z,a-z][A-Z,a-z,0-9,_]*" contained | ||
|  | 
 | ||
|  | " Comments may be nested in Modula-2: | ||
|  | syn region modula2Comment start="(\*" end="\*)" contains=modula2Comment,modula2Todo | ||
|  | syn keyword modula2Todo	contained TODO FIXME XXX | ||
|  | 
 | ||
|  | " Strings | ||
|  | syn region modula2String start=+"+ end=+"+ | ||
|  | syn region modula2String start="'" end="'" | ||
|  | syn region modula2Set start="{" end="}" | ||
|  | 
 | ||
|  | " Define the default highlighting. | ||
|  | " For version 5.7 and earlier: only when not done already | ||
|  | " For version 5.8 and later: only when an item doesn't have highlighting yet | ||
|  | if version >= 508 || !exists("did_modula2_syntax_inits") | ||
|  |   if version < 508 | ||
|  |     let did_modula2_syntax_inits = 1 | ||
|  |     command -nargs=+ HiLink hi link <args> | ||
|  |   else | ||
|  |     command -nargs=+ HiLink hi def link <args> | ||
|  |   endif | ||
|  | 
 | ||
|  |   HiLink modula2Ident		Identifier | ||
|  |   HiLink modula2StdConst	Boolean | ||
|  |   HiLink modula2Type		Identifier | ||
|  |   HiLink modula2StdFunc		Identifier | ||
|  |   HiLink modula2Header		Type | ||
|  |   HiLink modula2Keyword		Statement | ||
|  |   HiLink modula2AttKeyword	PreProc | ||
|  |   HiLink modula2Comment		Comment | ||
|  |   " The following is just a matter of taste (you want to try this instead): | ||
|  |   " hi modula2Comment term=bold ctermfg=DarkBlue guifg=Blue gui=bold | ||
|  |   HiLink modula2Todo		Todo | ||
|  |   HiLink modula2String		String | ||
|  |   HiLink modula2Set		String | ||
|  | 
 | ||
|  |   delcommand HiLink | ||
|  | endif | ||
|  | 
 | ||
|  | let b:current_syntax = "modula2" | ||
|  | 
 | ||
|  | " vim: ts=8 |