patch 9.1.0013: Modula2 filetype support lacking

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>
diff --git a/runtime/syntax/testdir/input/modula2_pim.def b/runtime/syntax/testdir/input/modula2_pim.def
new file mode 100644
index 0000000..e008160
--- /dev/null
+++ b/runtime/syntax/testdir/input/modula2_pim.def
@@ -0,0 +1,111 @@
+(* Modula-2 PIM Test File for Vim Syntax Colouring *)
+
+(* --------------------------------------------------
+ * THIS FILE IS LICENSED UNDER THE VIM LICENSE
+ * see https://github.com/vim/vim/blob/master/LICENSE
+ * -------------------------------------------------- *)
+
+DEFINITION MODULE Foobar; (*!m2pim*)
+
+FROM SYSTEM IMPORT WORD, ADDRESS;
+
+CONST MaxFoo = 1.0; LF = CHR(10);
+
+TYPE Foo = POINTER TO Bar;
+
+(* predefined constants *)
+FALSE NIL TRUE
+
+(* predefined types *)
+BITSET BOOLEAN CHAR PROC CARDINAL INTEGER LONGINT REAL LONGREAL
+
+(* predefined procedures *)
+CAP DEC EXCL HALT INC INCL
+
+(* predefined functions *)
+ABS CHR FLOAT HIGH MAX MIN ODD ORD SIZE TRUNC VAL
+
+(* predefined macros *)
+NEW DISPOSE
+
+(* unsafe builtins *)
+ADDRESS PROCESS WORD ADR TSIZE NEWPROCESS TRANSFER SYSTEM
+
+(* non-standard language extensions *)
+BYTE LONGCARD LONGBITSET
+
+(* user defined identifiers *)
+foobar Foobar FooBar foo123 foo_bar
+
+(* string literals *)
+str := "foo 'bar' baz";
+str := 'foo "bar" baz';
+
+(* numeric literals *)
+0FFFH, 1.23, 1.23e-45, 1000
+
+(* octal literals *)
+n := 0377B; ch := 0377C;
+
+(* pragmas *)
+(*$foo*)
+
+(* block comments with emphasis *)
+(* copyright (c) Jurrasic Inc.
+   author Fred Flintstone Sr.
+   license see LICENSE file. *)
+
+(* pre-conditions: foo bar baz bam boo doodle wah.
+   post-conditions: foodle babble bozo bim bam dang.
+   error-conditions: dada jingle jungle boggle dee boo. *)
+
+(* technical debt markers *)
+(* TODO: ... *)
+(* FIXME *)
+(* DEPRECATED *)
+
+(* procedures *)
+PROCEDURE NewFooWithBar ( VAR foo: Foo; bar : INTEGER );
+BEGIN
+  NEW(foo);
+  foo^.bar := bar;
+  RETURN
+END SetBar;
+
+(* functions *)
+PROCEDURE bar ( foo : Foo ) : INTEGER;
+BEGIN
+  IF foo = NIL THEN
+    HALT
+  ELSE
+    RETURN foo^.bar
+  END (* IF *)
+END bar;
+  
+(* disabled code *)
+?<
+WHILE foo = bar DO
+  baz(bam, boo)
+END (* WHILE *);
+>?
+
+(* synonyms *)
+&  ~
+
+(* illegal characters *)
+`  !  @  $  %  \  ?  _
+
+(* illegal identifiers *)
+
+_bar  _bar_baz  _bar_baz__bam  _bar_baz__bam_boo
+
+bar_  bar_baz_  bar_baz__bam_  bar_baz__bam_boo_
+
+__bar  __bar_baz  __bar_baz__bam  __bar_baz__bam_boo
+
+bar__  bar_baz__  bar_baz__bam__  bar_baz__bam_boo__
+
+bar__baz  __bar_baz__  __bar__baz__  __
+
+
+END Foobar.