summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Kearns <dougkearns@gmail.com>2024-01-05 17:59:04 +0100
committerChristian Brabandt <cb@256bit.org>2024-01-05 17:59:04 +0100
commit68a89470693c7687d4e736ca056c05de632e3ac7 (patch)
tree6b075cfda5ae9a9f125eaa9012bf0f90f1fc7112
parent3779516988f14f2070d827514c79383334a0946b (diff)
patch 9.1.0013: Modula2 filetype support lackingv9.1.0013
Problem: Modula2 filetype support lacking Solution: Improve the Modula-2 runtime support, add additional modula2 dialects, add compiler plugin, update syntax highlighting, include syntax tests, update Makefiles (Doug Kearns) closes: #6796 closes: #8115 Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Benjamin Kowarsch <trijezdci@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r--.github/CODEOWNERS7
-rw-r--r--Filelist1
-rw-r--r--runtime/autoload/dist/ft.vim60
-rw-r--r--runtime/autoload/modula2.vim31
-rw-r--r--runtime/compiler/gm2.vim26
-rw-r--r--runtime/doc/filetype.txt3
-rw-r--r--runtime/doc/syntax.txt50
-rw-r--r--runtime/doc/tags9
-rw-r--r--runtime/filetype.vim11
-rw-r--r--runtime/ftplugin/modula2.vim35
-rw-r--r--runtime/makemenu.vim6
-rw-r--r--runtime/synmenu.vim48
-rw-r--r--runtime/syntax/modula2.vim71
-rw-r--r--runtime/syntax/modula2/opt/iso.vim380
-rw-r--r--runtime/syntax/modula2/opt/pim.vim377
-rw-r--r--runtime/syntax/modula2/opt/r10.vim452
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_pim_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_pim_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_pim_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_pim_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_pim_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_pim_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_pim_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_99.dump20
-rw-r--r--runtime/syntax/testdir/input/modula2_iso.def114
-rw-r--r--runtime/syntax/testdir/input/modula2_pim.def111
-rw-r--r--runtime/syntax/testdir/input/modula2_r10.def146
-rw-r--r--src/Makefile8
-rw-r--r--src/testdir/test_filetype.vim38
-rw-r--r--src/version.c2
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
diff --git a/Filelist b/Filelist
index df188e8a5e..d4fbca342e 100644
--- a/Filelist
+++ b/Filelist
@@ -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:
+" * for the PIM dialect : m2pim.vim
+" * for the ISO dialect : m2iso.vim (this file)
+" * for the R10 dialect : m2r10.vim
+
+" -----------------------------------------------------------------------------
+" This syntax description follows ISO standard IS-10514 (aka ISO Modula-2)
+" with the addition of the following language extensions:
+" * non-standard types LONGCARD and LONGBITSET
+" * non-nesting code disabling tags ?< and >? at the start of a line
+" -----------------------------------------------------------------------------
+
+" Parameters:
+"
+" Vim's filetype sc