diff options
46 files changed, 2354 insertions, 112 deletions
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index af32d6a3ab..6ebaeda19e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -13,6 +13,7 @@ runtime/autoload/freebasic.vim @dkearns runtime/autoload/getscript.vim @cecamp runtime/autoload/haskell.vim @alx741 runtime/autoload/javascript.vim @jsit +runtime/autoload/modula2.vim @dkearns runtime/autoload/netrw.vim @cecamp runtime/autoload/netrwFileHandlers.vim @cecamp runtime/autoload/netrwSettings.vim @cecamp @@ -65,6 +66,7 @@ runtime/compiler/eruby.vim @dkearns runtime/compiler/fbc.vim @dkearns runtime/compiler/gawk.vim @dkearns runtime/compiler/gjs.vim @dkearns +runtime/compiler/gm2.vim @dkearns runtime/compiler/go.vim @dbarnett runtime/compiler/haml.vim @tpope runtime/compiler/hare.vim @rsaihe @@ -182,6 +184,7 @@ runtime/ftplugin/m3quake.vim @dkearns runtime/ftplugin/markdown.vim @tpope runtime/ftplugin/matlab.vim @cecamp runtime/ftplugin/meson.vim @Liambeguin +runtime/ftplugin/modula2.vim @dkearns runtime/ftplugin/modula3.vim @dkearns runtime/ftplugin/nginx.vim @chr4 runtime/ftplugin/nroff.vim @a-vrma @@ -442,6 +445,10 @@ runtime/syntax/maple.vim @cecamp runtime/syntax/markdown.vim @tpope runtime/syntax/mason.vim @petdance runtime/syntax/meson.vim @Liambeguin +runtime/syntax/modula2.vim @dkearns +runtime/syntax/modula2/opt/iso.vim @trijezdci +runtime/syntax/modula2/opt/pim.vim @trijezdci +runtime/syntax/modula2/opt/r10.vim @trijezdci runtime/syntax/modula3.vim @dkearns runtime/syntax/n1ql.vim @pr3d4t0r runtime/syntax/netrw.vim @cecamp @@ -818,6 +818,7 @@ RT_SCRIPTS = \ runtime/plugin/README.txt \ runtime/syntax/*.vim \ runtime/syntax/README.txt \ + runtime/syntax/modula2/opt/*.vim \ runtime/syntax/shared/*.vim \ runtime/syntax/shared/README.txt \ runtime/syntax/Makefile \ diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index 2423fd4469..9d0f2ee7af 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -2,8 +2,8 @@ vim9script # Vim functions for file type detection # -# Maintainer: The Vim Project <https://github.com/vim/vim> -# Last Change: 2023 Aug 10 +# Maintainer: The Vim Project <https://github.com/vim/vim> +# Last Change: 2024 Jan 05 # Former Maintainer: Bram Moolenaar <Bram@vim.org> # These functions are moved here from runtime/filetype.vim to make startup @@ -279,6 +279,19 @@ export def DtraceCheck() endif enddef +export def FTdef() + if get(g:, "filetype_def", "") == "modula2" || IsModula2() + SetFiletypeModula2() + return + endif + + if exists("g:filetype_def") + exe "setf " .. g:filetype_def + else + setf def + endif +enddef + export def FTe() if exists('g:filetype_euphoria') exe 'setf ' .. g:filetype_euphoria @@ -517,16 +530,53 @@ def IsLProlog(): bool return getline(lnum) =~ '\<module\s\+\w\+\s*\.\s*\(%\|$\)' enddef +def IsModula2(): bool + return getline(nextnonblank(1)) =~ '\<MODULE\s\+\w\+\s*;\|^\s*(\*' +enddef + +def SetFiletypeModula2() + const KNOWN_DIALECTS = ["iso", "pim", "r10"] + const KNOWN_EXTENSIONS = ["gm2"] + const LINE_COUNT = 200 + const TAG = '(\*!m2\(\w\+\)\%(+\(\w\+\)\)\=\*)' + + var dialect = get(g:, "modula2_default_dialect", "pim") + var extension = get(g:, "modula2_default_extension", "") + + var matches = [] + + # ignore unknown dialects or badly formatted tags + for lnum in range(1, min([line("$"), LINE_COUNT])) + matches = matchlist(getline(lnum), TAG) + if !empty(matches) + if index(KNOWN_DIALECTS, matches[1]) >= 0 + dialect = matches[1] + endif + if index(KNOWN_EXTENSIONS, matches[2]) >= 0 + extension = matches[2] + endif + break + endif + endfor + + modula2#SetDialect(dialect, extension) + + setf modula2 +enddef + # Determine if *.mod is ABB RAPID, LambdaProlog, Modula-2, Modsim III or go.mod export def FTmod() + if get(g:, "filetype_mod", "") == "modula2" || IsModula2() + SetFiletypeModula2() + return + endif + if exists("g:filetype_mod") exe "setf " .. g:filetype_mod elseif expand("<afile>") =~ '\<go.mod$' setf gomod elseif IsLProlog() setf lprolog - elseif getline(nextnonblank(1)) =~ '\%(\<MODULE\s\+\w\+\s*;\|^\s*(\*\)' - setf modula2 elseif IsRapid() setf rapid else @@ -1243,4 +1293,4 @@ export def FTvba() enddef # Uncomment this line to check for compilation errors early -# defcompile +defcompile diff --git a/runtime/autoload/modula2.vim b/runtime/autoload/modula2.vim new file mode 100644 index 0000000000..284dc2768f --- /dev/null +++ b/runtime/autoload/modula2.vim @@ -0,0 +1,31 @@ +" Vim filetype plugin file +" Language: Modula-2 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 04 + +" Dialect can be one of pim, iso, r10 +function modula2#GetDialect() abort + + if exists("b:modula2.dialect") + return b:modula2.dialect + endif + + if exists("g:modula2_default_dialect") + let dialect = g:modula2_default_dialect + else + let dialect = "pim" + endif + + return dialect +endfunction + +function modula2#SetDialect(dialect, extension = "") abort + if exists("b:modula2") + unlockvar! b:modula2 + endif + + let b:modula2 = #{ dialect: a:dialect, extension: a:extension } + lockvar! b:modula2 +endfunction + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/runtime/compiler/gm2.vim b/runtime/compiler/gm2.vim new file mode 100644 index 0000000000..5053912200 --- /dev/null +++ b/runtime/compiler/gm2.vim @@ -0,0 +1,26 @@ +" Vim compiler file +" Compiler: GNU Modula-2 Compiler +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2024 Jan 04 + +if exists("current_compiler") + finish +endif +let current_compiler = "gm2" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=gm2 +CompilerSet errorformat=%-G%f:%l:%c:\ error:\ compilation\ failed, + \%f:%l:%c:\ %trror:\ %m, + \%f:%l:%c:\ %tarning:\ %m, + \%f:%l:%c:\ %tote:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index e8445db541..4876e3d754 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -1,4 +1,4 @@ -*filetype.txt* For Vim version 9.1. Last change: 2024 Jan 01 +*filetype.txt* For Vim version 9.1. Last change: 2024 Jan 04 VIM REFERENCE MANUAL by Bram Moolenaar @@ -148,6 +148,7 @@ variables can be used to overrule the filetype used for certain extensions: *.cls g:filetype_cls *.csh g:filetype_csh |ft-csh-syntax| *.dat g:filetype_dat + *.def g:filetype_def *.f g:filetype_f |ft-forth-syntax| *.frm g:filetype_frm |ft-form-syntax| *.fs g:filetype_fs |ft-forth-syntax| diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index e3cac2e248..cc293a5979 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -2251,6 +2251,56 @@ have the following in your .vimrc: > let filetype_m = "mma" +MODULA2 *modula2.vim* *ft-modula2-syntax* + +Vim will recognise comments with dialect tags to automatically select a given +dialect. + +The syntax for a dialect tag comment is: > + + taggedComment := + '(*!' dialectTag '*)' + ; + + dialectTag := + m2pim | m2iso | m2r10 + ; + + reserved words + m2pim = 'm2pim', m2iso = 'm2iso', m2r10 = 'm2r10' + +A dialect tag comment is recognised by Vim if it occurs within the first 200 +lines of the source file. Only the very first such comment is recognised, any +additional dialect tag comments are ignored. + +Example: > + + DEFINITION MODULE FooLib; (*!m2pim*) + ... + +Variable g:modula2_default_dialect sets the default Modula-2 dialect when the +dialect cannot be determined from the contents of the Modula-2 file: if +defined and set to 'm2pim', the default dialect is PIM. + +Example: > + + let g:modula2_default_dialect = 'm2pim' + + +Highlighting is further configurable for each dialect via the following +variables. + +Variable Highlight ~ +*modula2_iso_allow_lowline* allow low line in identifiers +*modula2_iso_disallow_octals* disallow octal integer literals +*modula2_iso_disallow_synonyms* disallow "@", "&" and "~" synonyms + +*modula2_pim_allow_lowline* allow low line in identifiers +*modula2_pim_disallow_octals* disallow octal integer literals +*modula2_pim_disallow_synonyms* disallow "&" and "~" synonyms + +*modula2_r10_allow_lowline* allow low line in identifiers + MOO *moo.vim* *ft-moo-syntax* If you use C-style comments inside expressions and find it mangles your diff --git a/runtime/doc/tags b/runtime/doc/tags index 9af1ac0f64..5b9e5a9b64 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -7270,6 +7270,7 @@ ft-metapost-intro ft_mp.txt /*ft-metapost-intro* ft-metapost-mappings ft_mp.txt /*ft-metapost-mappings* ft-metapost-settings ft_mp.txt /*ft-metapost-settings* ft-mma-syntax syntax.txt /*ft-mma-syntax* +ft-modula2-syntax syntax.txt /*ft-modula2-syntax* ft-moo-syntax syntax.txt /*ft-moo-syntax* ft-msql-syntax syntax.txt /*ft-msql-syntax* ft-n1ql-syntax syntax.txt /*ft-n1ql-syntax* @@ -8659,6 +8660,14 @@ modeline options.txt /*modeline* modeline-local options.txt /*modeline-local* modeline-version options.txt /*modeline-version* modifyOtherKeys map.txt /*modifyOtherKeys* +modula2.vim syntax.txt /*modula2.vim* +modula2_iso_allow_lowline syntax.txt /*modula2_iso_allow_lowline* +modula2_iso_disallow_octals syntax.txt /*modula2_iso_disallow_octals* +modula2_iso_disallow_synonyms syntax.txt /*modula2_iso_disallow_synonyms* +modula2_pim_allow_lowline syntax.txt /*modula2_pim_allow_lowline* +modula2_pim_disallow_octals syntax.txt /*modula2_pim_disallow_octals* +modula2_pim_disallow_synonyms syntax.txt /*modula2_pim_disallow_synonyms* +modula2_r10_allow_lowline syntax.txt /*modula2_r10_allow_lowline* moo.vim syntax.txt /*moo.vim* more-compatible version5.txt /*more-compatible* more-prompt message.txt /*more-prompt* diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 30f8a1e16d..0c2869a017 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -619,8 +619,12 @@ au BufNewFile,BufRead *.intr setf dylanintr " Dylan au BufNewFile,BufRead *.dylan setf dylan -" Microsoft Module Definition -au BufNewFile,BufRead *.def setf def +" Microsoft Module Definition or Modula-2 +au BufNewFile,BufRead *.def call dist#ft#FTdef() + +if has("fname_case") + au BufNewFile,BufRead *.DEF setf modula2 +endif " Dracula au BufNewFile,BufRead *.drac,*.drc,*lvs,*lpe setf dracula @@ -1339,9 +1343,6 @@ au BufNewFile,BufRead *.mmp setf mmp " ABB Rapid, Modula-2, Modsim III or LambdaProlog au BufNewFile,BufRead *.mod\c call dist#ft#FTmod() -" Modula-2 (.md removed in favor of Markdown, see dist#ft#FTmod for *.MOD) -au BufNewFile,BufRead *.m2,*.DEF,*.mi setf modula2 - " Modula-3 (.m3, .i3, .mg, .ig) au BufNewFile,BufRead *.[mi][3g] setf modula3 diff --git a/runtime/ftplugin/modula2.vim b/runtime/ftplugin/modula2.vim index 1d0e81ee70..e230636acc 100644 --- a/runtime/ftplugin/modula2.vim +++ b/runtime/ftplugin/modula2.vim @@ -11,28 +11,39 @@ let b:did_ftplugin = 1 let s:cpo_save = &cpo set cpo&vim -setlocal comments=s0:(*,mb:\ ,ex:*) -setlocal commentstring=(*%s*) +let s:dialect = modula2#GetDialect() + +if s:dialect ==# "r10" + setlocal comments=s:(*,m:\ ,e:*),:! + setlocal commentstring=!\ %s +else + setlocal commentstring=(*%s*) + setlocal comments=s:(*,m:\ ,e:*) +endif setlocal formatoptions-=t formatoptions+=croql +let b:undo_ftplugin = "setl com< cms< fo<" + if exists("loaded_matchit") && !exists("b:match_words") - " The second branch of the middle pattern is intended to match CASE labels + let b:match_ignorecase = 0 + " the second branch of the middle pattern is intended to match CASE labels let b:match_words = '\<REPEAT\>:\<UNTIL\>,' .. - \ '\<\%(BEGIN\|CASE\|FOR\|IF\|LOOP\|WHILE\|WITH\)\>' .. - \ ':' .. - \ '\<\%(ELSIF\|ELSE\)\>\|\%(^\s*\)\@<=\w\+\%(\s*\,\s*\w\+\)\=\s*\:=\@!' .. - \ ':' .. - \ '\<END\>' + \ '\<\%(BEGIN\|CASE\|FOR\|IF\|LOOP\|WHILE\|WITH\|RECORD\)\>' .. + \ ':' .. + \ '\<\%(ELSIF\|ELSE\)\>\|\%(^\s*\)\@<=\w\+\%(\s*\,\s*\w\+\)\=\s*\:=\@!' .. + \ ':' .. + \ '\<END\>,' .. + \ '(\*:\*),<\*:\*>' + let b:match_skip = 's:Comment\|Pragma' + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_skip b:match_words" endif if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter = "Modula-2 Source Files (*.def *.mod)\t*.def;*.mod\n" .. - \ "All Files (*.*)\t*.*\n" + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin ..= " | unlet! b:browsefilter" endif -let b:undo_ftplugin = "setl com< cms< fo< " .. - \ "| unlet! b:browsefilter b:match_words" - let &cpo = s:cpo_save unlet s:cpo_save diff --git a/runtime/makemenu.vim b/runtime/makemenu.vim index 16af2035e3..6707f2b6a6 100644 --- a/runtime/makemenu.vim +++ b/runtime/makemenu.vim @@ -384,8 +384,10 @@ SynMenu M.MMIX:mmix SynMenu M.Modconf:modconf SynMenu M.Model:model SynMenu M.Modsim\ III:modsim3 -SynMenu M.Modula\ 2:modula2 -SynMenu M.Modula\ 3:modula3 +SynMenu M.Modula-2.R10\ (2010):modula2:r10 +SynMenu M.Modula-2.ISO\ (1994):modula2:iso +SynMenu M.Modula-2.PIM\ (1985):modula2:pim +SynMenu M.Modula-3:modula3 SynMenu M.Monk:monk SynMenu M.Motorola\ S-Record:srec SynMenu M.Mplayer\ config:mplayerconf diff --git a/runtime/synmenu.vim b/runtime/synmenu.vim index eeede5f7ce..23c1c7b95b 100644 --- a/runtime/synmenu.vim +++ b/runtime/synmenu.vim @@ -1,8 +1,8 @@ " Vim support file to define the syntax selection menu " This file is normally sourced from menu.vim. " -" Maintainer: The Vim Project <https://github.com/vim/vim> -" Last Change: 2023 Aug 10 +" Maintainer: The Vim Project <https://github.com/vim/vim> +" Last Change: 2024 Jan 04 " Former Maintainer: Bram Moolenaar <Bram@vim.org> " Define the SetSyn function, used for the Syntax menu entries. @@ -13,6 +13,10 @@ def SetSyn(name: string) g:use_fvwm_1 = name == "fvwm1" g:use_fvwm_2 = name == "fvwm2" filetype = "fvwm" + elseif name =~ '^modula2:\w\+$' + var dialect: string + [filetype, dialect] = split(name, ":") + modula2#SetDialect(dialect) endif if name == "whitespace" # do not replace the filetype but add whitespace on top @@ -359,25 +363,27 @@ an 50.70.340 &Syntax.M.MMIX :cal SetSyn("mmix")<CR> an 50.70.350 &Syntax.M.Modconf :cal SetSyn("modconf")<CR> an 50.70.360 &Syntax.M.Model :cal SetSyn("model")<CR> an 50.70.370 &Syntax.M.Modsim\ III :cal SetSyn("modsim3")<CR> -an 50.70.380 &Syntax.M.Modula\ 2 :cal SetSyn("modula2")<CR> -an 50.70.390 &Syntax.M.Modula\ 3 :cal SetSyn("modula3")<CR> -an 50.70.400 &Syntax.M.Monk :cal SetSyn("monk")<CR> -an 50.70.410 &Syntax.M.Motorola\ S-Record :cal SetSyn("srec")<CR> -an 50.70.420 &Syntax.M.Mplayer\ config :cal SetSyn("mplayerconf")<CR> -an 50.70.430 &Syntax.M.MOO :cal SetSyn("moo")<CR> -an 50.70.440 &Syntax.M.Mrxvtrc :cal SetSyn("mrxvtrc")<CR> -an 50.70.450 &Syntax.M.MS-DOS/Windows.4DOS\ \.bat\ file :cal SetSyn("btm")<CR> -an 50.70.460 &Syntax.M.MS-DOS/Windows.\.bat\/\.cmd\ file :cal SetSyn("dosbatch")<CR> -an 50.70.470 &Syntax.M.MS-DOS/Windows.\.ini\ file :cal SetSyn("dosini")<CR> -an 50.70.480 &Syntax.M.MS-DOS/Windows.Message\ text :cal SetSyn("msmessages")<CR> -an 50.70.490 &Syntax.M.MS-DOS/Windows.Module\ Definition :cal SetSyn("def")<CR> -an 50.70.500 &Syntax.M.MS-DOS/Windows.Registry :cal SetSyn("registry")<CR> -an 50.70.510 &Syntax.M.MS-DOS/Windows.Resource\ file :cal SetSyn("rc")<CR> -an 50.70.520 &Syntax.M.Msql :cal SetSyn("msql")<CR> -an 50.70.530 &Syntax.M.MuPAD :cal SetSyn("mupad")<CR> -an 50.70.540 &Syntax.M.Murphi :cal SetSyn("murphi")<CR> -an 50.70.550 &Syntax.M.MUSHcode :cal SetSyn("mush")<CR> -an 50.70.560 &Syntax.M.Muttrc :cal SetSyn("muttrc")<CR> +an 50.70.380 &Syntax.M.Modula-2.R10\ (2010) :cal SetSyn("modula2:r10")<CR> +an 50.70.390 &Syntax.M.Modula-2.ISO\ (1994) :cal SetSyn("modula2:iso")<CR> +an 50.70.400 &Syntax.M.Modula-2.PIM\ (1985) :cal SetSyn("modula2:pim")<CR> +an 50.70.410 &Syntax.M.Modula-3 :cal SetSyn("modula3")<CR> +an 50.70.420 &Syntax.M.Monk :cal SetSyn("monk")<CR> +an 50.70.430 &Syntax.M.Motorola\ S-Record :cal SetSyn("srec")<CR> +an 50.70.440 &Syntax.M.Mplayer\ config :cal SetSyn("mplayerconf")<CR> +an 50.70.450 &Syntax.M.MOO :cal SetSyn("moo")<CR> +an 50.70.460 &Syntax.M.Mrxvtrc :cal SetSyn("mrxvtrc")<CR> +an 50.70.470 &Syntax.M.MS-DOS/Windows.4DOS\ \.bat\ file :cal SetSyn("btm")<CR> +an 50.70.480 &Syntax.M.MS-DOS/Windows.\.bat\/\.cmd\ file :cal SetSyn("dosbatch")<CR> +an 50.70.490 &Syntax.M.MS-DOS/Windows.\.ini\ file :cal SetSyn("dosini")<CR> +an 50.70.500 &Syntax.M.MS-DOS/Windows.Message\ text :cal SetSyn("msmessages")<CR> +an 50.70.510 &Syntax.M.MS-DOS/Windows.Module\ Definition :cal SetSyn("def")<CR> +an 50.70.520 &Syntax.M.MS-DOS/Windows.Registry :cal SetSyn("registry")<CR> +an 50.70.530 &Syntax.M.MS-DOS/Windows.Resource\ file :cal SetSyn("rc")<CR> +an 50.70.540 &Syntax.M.Msql :cal SetSyn("msql")<CR> +an 50.70.550 &Syntax.M.MuPAD :cal SetSyn("mupad")<CR> +an 50.70.560 &Syntax.M.Murphi :cal SetSyn("murphi")<CR> +an 50.70.570 &Syntax.M.MUSHcode :cal SetSyn("mush")<CR> +an 50.70.580 &Syntax.M.Muttrc :cal SetSyn("muttrc")<CR> an 50.80.100 &Syntax.NO.N1QL :cal SetSyn("n1ql")<CR> an 50.80.110 &Syntax.NO.Nanorc :cal SetSyn("nanorc")<CR> an 50.80.120 &Syntax.NO.Nastran\ input/DMAP :cal SetSyn("nastran")<CR> diff --git a/runtime/syntax/modula2.vim b/runtime/syntax/modula2.vim index 4a14cf1f6f..6a9f4af6aa 100644 --- a/runtime/syntax/modula2.vim +++ b/runtime/syntax/modula2.vim @@ -1,73 +1,16 @@ " 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 +" Language: Modula-2 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: pf@artcom0.north.de (Peter Funk) +" Last Change: 2024 Jan 04 -" quit when a syntax file was already loaded if 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. -" Only when an item doesn't have highlighting yet - -hi def link modula2Ident Identifier -hi def link modula2StdConst Boolean -hi def link modula2Type Identifier -hi def link modula2StdFunc Identifier -hi def link modula2Header Type -hi def link modula2Keyword Statement -hi def link modula2AttKeyword PreProc -hi def link 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 -hi def link modula2Todo Todo -hi def link modula2String String -hi def link modula2Set String - +let dialect = modula2#GetDialect() +exe "runtime! syntax/modula2/opt/" .. dialect .. ".vim" let b:current_syntax = "modula2" -" vim: ts=8 +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/syntax/modula2/opt/iso.vim b/runtime/syntax/modula2/opt/iso.vim new file mode 100644 index 0000000000..5bd24f6885 --- /dev/null +++ b/runtime/syntax/modula2/opt/iso.vim @@ -0,0 +1,380 @@ +" Vim syntax file +" Language: Modula-2 (ISO) +" Maintainer: B.Kowarsch <trijezdci@moc.liamg> +" Last Change: 2016 August 22 + +" ---------------------------------------------------- +" THIS FILE IS LICENSED UNDER THE VIM LICENSE +" see https://github.com/vim/vim/blob/master/LICENSE +" ---------------------------------------------------- + +" Remarks: +" Vim Syntax files are available for the following Modula-2 dialects: |