(* Modula-2 R10 Syntax highlighting test *)

(* dialect tags *)

(*!m2r10*)


(* pragmas *)

<*foo*>


(* line comments *)

! foo bar baz bam boo


(* foldable comments *)

(* foo bar baz
   (* nested comment *)
   bam boo bee bop *)


(* reserved words *)

ALIAS AND ARGLIST ARRAY BEGIN BLUEPRINT BY CASE CONST COPY DEFINITION DIV DO
ELSE ELSIF END EXIT FOR FROM GENLIB IF IMPLEMENTATION IMPORT IN LOOP MOD
MODULE NEW NOT OF OPAQUE OR POINTER PROCEDURE READ RECORD REFERENTIAL RELEASE
REPEAT RETAIN RETURN SET THEN TO TYPE UNTIL VAR WHILE WRITE YIELD


(* built-in constants *)

FALSE NIL TRUE


(* built-in types *)

BOOLEAN CARDINAL CHAR INTEGER LONGCARD LONGINT LONGREAL OCTET REAL


(* built-in procedures *)

ABS APPEND CAPACITY CHR COUNT ENTIER INSERT LENGTH LOG2 MAX MIN ODD ORD
POW2 PRED PTR REMOVE SGN SUCC


(* UNSAFE facilities *)

(* module identifier *)

UNSAFE

(* reserved words *)

CAST

(* constants *)

BitsPerAddress BitsPerByte BytesPerWord BytesPerLongWord

(* types *)

ADDRESS BYTE WORD LONGWORD OCTETSEQ

(* procedures *)

ADD ADR BIT BWAND BWNOT BWOR HALT SETBIT SHL SHR SUB


(* number literals *)

CONST
  b = 0b0110'1001; (* base-2 *)

  n = 1000'0000; (* base-10 *)

  x = 0xDEAD'BEEF; (* base-16 *)

  c = 0u2A; (* character code *)

  r = 1.234; (* real number *)


(* quoted literals *)

CONST
  apostrophe = "'"; doublequote = '"';
  single ='foobar'; double = "bazbam";


(* sample code *)

TYPE Foo = RECORD
  bar : Baz;
  bam : Boo
END; (* Foobar *)


VAR
  foo, bar, baz : CARDINAL;


IF foo > bar THEN
  baz := bam
ELSE
  baz := boo
END;


(* EOF *)