diff options
Diffstat (limited to 'kate/data/modula-2.xml')
-rw-r--r-- | kate/data/modula-2.xml | 1331 |
1 files changed, 1167 insertions, 164 deletions
diff --git a/kate/data/modula-2.xml b/kate/data/modula-2.xml index b6c65a274..da3676b59 100644 --- a/kate/data/modula-2.xml +++ b/kate/data/modula-2.xml @@ -1,188 +1,1191 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE language SYSTEM "language.dtd"> -<language name="Modula-2" version="2" kateversion="2.2" section="Sources" extensions="*.mod;*.def;*.mi;*.md" mimetype="text/x-modula-2"> +<language name="Modula-2" mimetype="text/x-modula2" version="5" + kateversion="2.2" section="Sources" priority="5" extensions="*.mod;*.def" + casesensitive="1" author="B. Kowarsch (trijezdci@github)" license="MIT"> +<!-- + ***************************************************************************** + Multi-Dialect Modula-2 syntax highlighting profile for Kate + + Copyright (C) 2018 Modula-2 Software Foundation + + Licensed under the MIT license <https://opensource.org/licenses/MIT> + + This file should be placed in /usr/share.org.kde.syntax-highlighting/syntax/. + + 1. Dialect Support + + This profile covers the following Modula-2 dialects: + + (1) PIM Modula-2 (Wirth, 1985) + (2) ISO Modula-2 (ISO 10514-1) + (3) Modula-2 R10 (Kowarsch & Sutcliffe, 2010) + + The default context recognises reserved words and built-in identifiers that + are common to all dialects and tags them accordingly for highlighting. + + 1.2 Dialect Disambiguation + + In order to disambiguate dialects, the profile also recognises entities that + are indicative of a specific dialect, tags them accordingly for highlighting + and switches the context to the dialect of which the entity is indicative. + + However, this approach does NOT prevent mis-identification as it is always + possible that a user or library defined identifier matches an entity that + is a reserved word or built-in identifier in another dialect. + + It is therefore advisable to place dialect tags into the top of Modula-2 + source files. + + 1.3 Dialect Tags + + A dialect tag is a specially formatted comment that specifies the dialect in + use. The profile recognises the following dialect tags: + + (*!m2pim*) specifies the PIM dialect + (*!m2iso*) specifies the ISO dialect + (*!m2r10*) specifies the R10 dialect + + Dialect tags may also include a compiler extension suffix following the + dialect identifier and preceded by '+' to indicate the use of compiler + specific language extensions. Such suffixes are recognised but ignored. + + Using a dialect tag guarantees that the profile identifies the source file + correctly. Attention: No whitespace is permitted within a dialect tag. + + These dialect tags are also recognised by Emacs, Vim/vi and the Pygments + source code rendering framework. Support in other editors and frameworks is + being added over time. + + 2. Classification + + 2.1 Reserved Words + + In Modula-2 terminology, keywords are called reserved words. Reserved words + are tagged "Keyword" regardless of their kind or purpose. + + 2.2 Built-in Identifiers + + Modula-2 distinguishes two kinds of built-in identifiers: so called standard + identifiers, also called pervasive identifiers or simply pervasives; and + identifiers provided by a built-in module for unsafe facilities, called + SYSTEM in PIM and ISO Modula-2, and UNSAFE in Modula-2 R10. + + Pervasive Identifiers are tagged according to their kind as follows: + + (1) Constants are tagged "Const" + (2) Types are tagged "Type" + (3) Functions, procedures and macros are tagged "Builtin" + (4) Identifiers provided by SYSTEM/UNSAFE are tagged "Unsafe" + + The tagging of the latter group regardless of kind or purpose follows the + Modula-2 philosophy of making the use of unsafe facilities explicit and + easily identifiable within the source code in order to sensitise programmers + and thereby discourage and minimise their use. + + 2.3 Numeric Literals + + There are three kinds of numeric literals: whole number literals, real + number literals and character code literals. Numeric literals are tagged + "Number" regardless of their kind. + + 2.4 Quoted Literals + + There are two ways to quote a character or string: using single quotes, or + using double quotes. Quoted literals are tagged "String" regardless of + their type or kind. + + 2.5 Comments and Pragmas + + Dialect tags, although comments, are tagged "DialectTag", any other comments + are tagged "Comment", and pragmas are tagged "Pragma". + + 2.6 Any Other Entities + + Any other entities are tagged "Plain Source". + + 3. Rendering Styles + + By default, the above tags/attributes are assigned styles as follows: + + Keyword => dsKeyword, bold + Const => dsBuiltin, bold + Type => dsDataType, bold + Builtin => dsBuiltin, bold + Unsafe => dsWarning, bold + Number => dsDecVal + String => dsString + DialectTag => dsComment, bold + Comment => dsComment, italic + Pragma => dsPreprocessor, bold + Plain Source => dsNormal + + These styles can be customised in Kate via Settings->Configure Kate... + ***************************************************************************** +--> <highlighting> - <list name="directives"> - <item> ASSEMBLER </item> - <item> ALLOCATE </item> - <item> DEALLOCATE </item> - <item> SIZE </item> - <item> Write </item> - <item> WriteString </item> - <item> WriteCard </item> - <item> WriteLn </item> - <item> WriteBf </item> - <item> WriteInt </item> - <item> WriteReal </item> - <item> WriteLongReal </item> - <item> Read </item> - <item> ReadString </item> - <item> ReadCard </item> - <item> ReadInt </item> - <item> ReadReal </item> - <item> ReadLongReal </item> - <item> Open </item> - <item> Close </item> - <item> OpenInput </item> - <item> OpenOutput </item> - <item> Accessible </item> - <item> Erase </item> - <item> EOF </item> - <item> Done </item> - <item> EmptyString </item> - <item> Assign </item> - <item> Append </item> - <item> Length </item> - <item> StrEq </item> - <item> Copy </item> - <item> Concat </item> - <item> pos </item> - <item> Delete </item> - <item> Insert </item> - <item> compare </item> - <item> CAPS </item> - <item> PutBf </item> - <item> GetArgs </item> - <item> GetEnv </item> - <item> ResetClock </item> - <item> UserTime </item> - <item> SystemTime </item> - <item> GetChar </item> - <item> GetInt </item> - <item> GetCard </item> - <item> GetString </item> - <item> GetReal </item> - <item> GetLongReal </item> - <item> PutChar </item> - <item> PutInt </item> - <item> PutCard </item> - <item> PutString </item> - <item> PutReal </item> - <item> PutLongReal </item> - <item> PutLn </item> - </list> - <list name="keywords"> - <item> AND </item> - <item> ARRAY </item> - <item> ASM </item> - <item> BEGIN </item> - <item> CASE </item> - <item> CONST </item> - <item> DIV </item> - <item> DO </item> - <item> ELSE </item> - <item> ELSIF </item> - <item> END </item> - <item> FOR </item> - <item> IF </item> - <item> IMPLEMENTATION </item> - <item> IN </item> - <item> SET </item> - <item> INCL </item> - <item> EXCL </item> - <item> ABS </item> - <item> BITSET </item> - <item> CAP </item> - <item> CHR </item> - <item> DEC </item> - <item> HALT </item> - <item> HIGH </item> - <item> INC </item> - <item> MAX </item> - <item> MIN </item> - <item> ODD </item> - <item> ORD </item> - <item> PROC </item> - <item> TRUNC </item> - <item> VAL </item> - <item> MOD </item> - <item> NIL </item> - <item> NOT </item> - <item> OF </item> - <item> OR </item> - <item> PROCEDURE </item> - <item> MODULE </item> - <item> DEFINITION </item> - <item> RECORD </item> - <item> REPEAT </item> - <item> THEN </item> - <item> TO </item> - <item> TYPE </item> - <item> UNTIL </item> - <item> LOOP </item> - <item> VAR </item> - <item> WHILE </item> - <item> WITH </item> - <item> EXIT </item> - <item> FALSE </item> - <item> TRUE </item> - <item> BY </item> - <item> FROM </item> - <item> IMPORT </item> - <item> EXPORT </item> - <item> QUALIFIED </item> - <item> RETURN </item> - <item> NEWPROCESS </item> - <item> TRANSFER </item> - <item> IOTRANSFER </item> - <item> FOREIGN </item> - </list> - <list name="types"> - <item> INTEGER </item> - <item> CARDINAL </item> - <item> SHORTINT </item> - <item> SHORTCARD </item> - <item> LONGINT </item> - <item> LONGREAL </item> - <item> CHAR </item> - <item> BOOLEAN </item> - <item> POINTER </item> - <item> ADDRESS </item> - <item> ADR </item> - <item> REAL </item> - <item> File </item> + <list name="workaround"> + <!-- BUG: Kate ignores first entry in first context --> + <!-- WORKAROUND: Use the name of this dummy list as first entry --> + <item>???</item> <!-- use '???' in source to test/verify this bug --> + </list> + +<!-- + ============================================================================ + Common Entities - Lowest Common Denominator + ============================================================================ +--> + <!-- Common Reserved Words --> + <list name="common-keywords"> + <item>AND</item> + <item>ARRAY</item> + <item>BEGIN</item> + <item>BY</item> + <item>CASE</item> + <item>CONST</item> + <item>DEFINITION</item> + <item>DIV</item> + <item>DO</item> + <item>ELSE</item> + <item>ELSIF</item> + <item>END</item> + <item>EXIT</item> + <item>FOR</item> + <item>FROM</item> + <item>IF</item> + <item>IMPLEMENTATION</item> + <item>IMPORT</item> + <item>IN</item> + <item>LOOP</item> + <item>MOD</item> + <item>MODULE</item> + <item>NOT</item> + <item>OF</item> + <item>OR</item> + <item>POINTER</item> + <item>PROCEDURE</item> + <item>RECORD</item> + <item>REPEAT</item> + <item>RETURN</item> + <item>SET</item> + <item>THEN</item> + <item>TO</item> + <item>TYPE</item> + <item>UNTIL</item> + <item>VAR</item> + <item>WHILE</item> + </list> + + <!-- Common Pervasive Constants --> + <list name="common-constants"> + <item>FALSE</item> + <item>NIL</item> + <item>TRUE</item> + </list> + + <!-- Common Pervasive Types --> + <list name="common-types"> + <item>BOOLEAN</item> + <item>CARDINAL</item> + <item>CHAR</item> + <item>INTEGER</item> + <item>LONGREAL</item> + <item>REAL</item> + </list> + + <!-- Common Pervasive Procedures --> + <list name="common-procedures"> + <item>ABS</item> + <item>CHR</item> + <item>MAX</item> + <item>MIN</item> + <item>ODD</item> + <item>ORD</item> + </list> + + <!-- Common Unsafe Facilities --> + <list name="common-unsafe"> + <!-- Types --> + <item>ADDRESS</item> + <item>WORD</item> + <!-- Procedures --> + <item>ADR</item> + </list> + +<!-- + ============================================================================ + Dialect Indicative Entities + ============================================================================ +--> +<!-- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + PIM Indicators - Entities indicative of PIM Modula-2 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--> + <!-- There are no reswords, pervasives or builtins indicative of PIM --> + + <!-- PIM-only Libraries --> + <list name="pim-only-libraries"> + <item>InOut</item> + <item>MathLib0</item> + </list> + +<!-- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ISO Indicators - Entities indicative of ISO Modula-2 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--> + <!-- ISO-only Reserved Words --> + <list name="iso-only-keywords"> + <!--NB: FORWARD is not indicative of ISO, + PIM single-pass compilers also use it.--> + <item>EXCEPT</item> + <item>FINALLY</item> + <item>PACKEDSET</item> + <item>REM</item> + <item>RETRY</item> + </list> + + <!-- ISO-only Pervasive Constants --> + <list name="iso-only-constants"> + <item>INTERRUPTIBLE</item> + <item>UNINTERRUPTIBLE</item> + </list> + + <!-- ISO-only Pervasive Types --> + <list name="iso-only-types"> + <!--NB: COMPLEX and LONGCOMPLEX are not indicative of ISO, + they are also part of the R10 standard library.--> + <item>PROTECTION</item> + </list> + + <!-- ISO-only Pervasive Procedures --> + <list name="iso-only-procedures"> + <item>CMPLX</item> + <item>IM</item> + <item>LFLOAT</item> + <item>RE</item> + </list> + + <!-- ISO-only Unsafe Facilities --> + <list name="iso-only-unsafe"> + <!-- Constants --> + <item>BITSPERLOC</item> + <item>BITSPERWORD</item> + <!-- Types --> + <item>LOC</item> + <!-- Procedures --> + <item>ADDADR</item> + <item>DIFADR</item> + <item>MAKEADR</item> + <item>ROTATE</item> + <item>SHIFT</item> + <item>SUBADR</item> + </list> + + <!-- ISO-only Libraries --> + <list name="iso-only-libraries"> + <item>IOConsts</item> + <item>IOLink</item> + <item>IOResult</item> + <item>LongIO</item> + <item>WholeIO</item> + <item>RawIO</item> + <item>SIOResult</item> + <item>SLongIO</item> + <item>SWholeIO</item> + <item>SRealIO</item> + <item>SRawIO</item> + <item>ConvTypes</item> + <item>RealStr</item> + <item>WholeStr</item> + <item>WholeConv</item> + </list> + +<!-- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + R10 Indicators - Entities indicative of Modula-2 R10 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--> + <!-- R10-only Reserved Words --> + <list name="r10-only-keywords"> + <item>ALIAS</item> + <item>ARGLIST</item> + <item>BLUEPRINT</item> + <item>COPY</item> + <item>GENLIB</item> + <item>OPAQUE</item> + <item>READ</item> + <item>REFERENTIAL</item> + <item>RELEASE</item> + <item>RETAIN</item> + <item>WRITE</item> + <item>YIELD</item> + </list> + + <!-- R10-only Pervasive Types --> + <list name="r10-only-types"> + <!--NB: LONGCARD is not indicative of R10, + some PIM and ISO compilers also use it.--> + <item>OCTET</item> + <item>UNICHAR</item> + </list> + + <!-- R10-only Pervasive Procedures --> + <list name="r10-only-procedures"> + <item>APPEND</item> + <item>CAPACITY</item> + <item>COUNT</item> + <item>INSERT</item> + <item>LOG2</item> + <item>POW2</item> + <item>PRED</item> + <item>PTR</item> + <item>REMOVE</item> + <item>SGN</item> + <item>SUCC</item> + </list> + + <!-- R10-only Pervasive Macros --> + <list name="r10-only-macros"> + <item>TLIMIT</item> + <item>TMAX</item> + <item>TMIN</item> + </list> + + <!-- R10-only Unsafe Facilities --> + <list name="r10-only-unsafe"> + <!-- Module --> + <item>UNSAFE</item> + <!-- Types --> + <item>LONGWORD</item> + <item>OCTETSEQ</item> + <!-- Procedures --> + <item>BIT</item> + <item>BWAND</item> + <item>BWNOT</item> + <item>BWOR</item> + <item>SETBIT</item> + <item>SHL</item> + <item>SHR</item> + </list> + + <!-- R10-only Libraries --> + <list name="r10-only-libraries"> + <item>PervasiveIO</item> + <item>UnsafeIO</item> + </list> + +<!-- + ============================================================================ + Entities for PIM Context + ============================================================================ +--> + <!-- All PIM Reserved Words --> + <list name="pim-keywords"> + <item>AND</item> + <item>ARRAY</item> + <item>BEGIN</item> + <item>BY</item> + <item>CASE</item> + <item>CONST</item> + <item>DEFINITION</item> + <item>DIV</item> + <item>DO</item> + <item>ELSE</item> + <item>ELSIF</item> + <item>END</item> + <item>EXIT</item> + <item>EXPORT</item> + <item>FOR</item> + <item>FROM</item> + <item>IF</item> + <item>IMPLEMENTATION</item> + <item>IMPORT</item> + <item>IN</item> + <item>LOOP</item> + <item>MOD</item> + <item>MODULE</item> + <item>NOT</item> + <item>OF</item> + <item>OR</item> + <item>POINTER</item> + <item>PROCEDURE</item> + <item>QUALIFIED</item> + <item>RECORD</item> + <item>REPEAT</item> + <item>RETURN</item> + <item>SET</item> + <item>THEN</item> + <item>TO</item> + <item>TYPE</item> + <item>UNTIL</item> + <item>VAR</item> + <item>WHILE</item> + <item>WITH</item> + </list> + + <!-- All PIM Pervasive Constants --> + <list name="pim-constants"> + <item>FALSE</item> + <item>NIL</item> + <item>TRUE</item> + </list> + + <!-- All PIM Pervasive Types --> + <list name="pim-types"> + <item>BOOLEAN</item> + <item>BITSET</item> + <item>CARDINAL</item> + <item>CHAR</item> + <item>INTEGER</item> + <item>LONGINT</item> + <item>LONGREAL</item> + <item>PROC</item> + <item>REAL</item> + </list> + + <!-- All PIM Pervasive Procedures --> + <list name="pim-procedures"> + <item>ABS</item> + <item>CAP</item> + <item>CHR</item> + <item>DEC</item> + <item>EXCL</item> + <item>FLOAT</item> + <item>HALT</item> + <item>HIGH</item> + <item>INC</item> + <item>INCL</item> + <item>MAX</item> + <item>MIN</item> + <item>ODD</item> + <item>ORD</item> + <item>SIZE</item> + <item>TRUNC</item> + <item>VAL</item> + </list> + + <!-- All PIM Pervasive Macros and their translations --> + <list name="pim-macros"> + <item>NEW</item> + <!--resolves to--> + <item>ALLOCATE</item> + <item>DISPOSE</item> + <!--resolves to--> + <item>DEALLOCATE</item> + </list> + + <!-- All PIM Unsafe Facilities --> + <list name="pim-unsafe"> + <!-- Module --> + <item>SYSTEM</item> + <!-- Types --> + <item>ADDRESS</item> + <item>PROCESS</item> + <item>WORD</item> + <!-- Procedures --> + <item>ADR</item> + <item>NEWPROCESS</item> + <item>TRANSFER</item> + <item>TSIZE</item> + </list> + +<!-- + ============================================================================ + Entities for ISO Context + ============================================================================ +--> + <!-- All ISO Reserved Words --> + <list name="iso-keywords"> + <item>AND</item> + <item>ARRAY</item> + <item>BEGIN</item> + <item>BY</item> + <item>CASE</item> + <item>CONST</item> + <item>DEFINITION</item> + <item>DIV</item> + <item>DO</item> + <item>ELSE</item> + <item>ELSIF</item> + <item>END</item> + <item>EXIT</item> + <item>EXCEPT</item> + <item>EXPORT</item> + <item>FINALLY</item> + <item>FOR</item> + <item>FORWARD</item> + <item>FROM</item> + <item>IF</item> + <item>IMPLEMENTATION</item> + <item>IMPORT</item> + <item>IN</item> + <item>LOOP</item> + <item>MOD</item> + <item>MODULE</item> + <item>NOT</item> + <item>OF</item> + <item>OR</item> + <item>PACKEDSET</item> + <item>POINTER</item> + <item>PROCEDURE</item> + <item>QUALIFIED</item> + <item>RECORD</item> + <item>REM</item> + <item>REPEAT</item> + <item>RETRY</item> + <item>RETURN</item> + <item>SET</item> + <item>THEN</item> + <item>TO</item> + <item>TYPE</item> + <item>UNTIL</item> + <item>VAR</item> + <item>WHILE</item> + <item>WITH</item> + </list> + + <!-- All ISO Pervasive Constants --> + <list name="iso-constants"> + <item>FALSE</item> + <item>INTERRUPTIBLE</item> + <item>NIL</item> + <item>TRUE</item> + <item>UNINTERRUPTIBLE</item> + </list> + + <!-- All ISO Pervasive Types --> + <list name="iso-types"> + <item>BOOLEAN</item> + <item>BITSET</item> + <item>CARDINAL</item> + <item>COMPLEX</item> + <item>CHAR</item> + <item>INTEGER</item> + <item>LONGCOMPLEX</item> + <item>LONGREAL</item> + <item>PROC</item> + <item>PROTECTION</item> + <item>REAL</item> + </list> + + <!-- All ISO Pervasive Procedures --> + <list name="iso-procedures"> + <item>ABS</item> + <item>CAP</item> + <item>CHR</item> + <item>CMPLX</item> + <item>DEC</item> + <item>EXCL</item> + <item>FLOAT</item> + <item>HALT</item> + <item>HIGH</item> + <item>IM</item> + <item>INC</item> + <item>INCL</item> + <item>INT</item> + <item>LENGTH</item> + <item>LFLOAT</item> + <item>MAX</item> + <item>MIN</item> + <item>ODD</item> + <item>ORD</item> + <item>RE</item> + <item>SIZE</item> + <item>TRUNC</item> + <item>VAL</item> + </list> + + <!-- All ISO Pervasive Macros and teir translations --> + <list name="iso-macros"> + <item>NEW</item> + <!--resolves to--> + <item>ALLOCATE</item> + <item>DISPOSE</item> + <!--resolves to--> + <item>DEALLOCATE</item> + </list> + + <!-- All ISO Unsafe Facilities --> + <list name="iso-unsafe"> + <!-- Module --> + <item>SYSTEM</item> + <!-- Constants --> + <item>BITSPERLOC</item> + <item>BITSPERWORD</item> + <!-- Types --> + <item>ADDRESS</item> + <item>LOC</item> + <item>WORD</item> + <!-- Procedures --> + <item>ADDADR</item> + <item>ADR</item> + <item>CAST</item> + <item>DIFADR</item> + <item>MAKEADR</item> + <item>ROTATE</item> + <item>SHIFT</item> + <item>SUBADR</item> + <item>TSIZE</item> + </list> + +<!-- + ============================================================================ + Entities for R10 Context + ============================================================================ +--> + <!-- All R10 Reserved Words --> + <list name="r10-keywords"> + <item>ALIAS</item> + <item>AND</item> + <item>ARGLIST</item> + <item>ARRAY</item> + <item>BEGIN</item> + <item>BLUEPRINT</item> + <item>BY</item> + <item>CASE</item> + <item>CONST</item> + <item>COPY</item> + <item>DEFINITION</item> + <item>DIV</item> + <item>DO</item> + <item>ELSE</item> + <item>ELSIF</item> + <item>END</item> + <item>EXIT</item> + <item>FOR</item> + <item>FROM</item> + <item>GENLIB</item> + <item>IF</item> + <item>IMPLEMENTATION</item> + <item>IMPORT</item> + <item>IN</item> + <item>LOOP</item> + <item>MOD</item> + <item>MODULE</item> + <item>NEW</item> + <item>NOT</item> + <item>OF</item> + <item>OPAQUE</item> + <item>OR</item> + <item>POINTER</item> + <item>PROCEDURE</item> + <item>READ</item> + <item>RECORD</item> + <item>REFERENTIAL</item> + <item>RELEASE</item> + <item>REPEAT</item> + <item>RETAIN</item> + <item>RETURN</item> + <item>SET</item> + <item>THEN</item> + <item>TO</item> + <item>TYPE</item> + <item>UNTIL</item> + <item>VAR</item> + <item>WHILE</item> + <item>WRITE</item> + <item>YIELD</item> + </list> + + <!-- All R10 Pervasive Constants --> + <list name="r10-constants"> + <item>FALSE</item> + <item>NIL</item> + <item>TRUE</item> </list> + + <!-- All R10 Pervasive Types --> + <list name="r10-types"> + <item>BOOLEAN</item> + <item>CARDINAL</item> + <item>CHAR</item> + <item>INTEGER</item> + <item>LONGCARD</item> + <item>LONGINT</item> + <item>LONGREAL</item> + <item>OCTET</item> + <item>REAL</item> + <item>UNICHAR</item> + </list> + + <!-- All R10 Pervasive Procedures --> + <list name="r10-procedures"> + <item>ABS</item> + <item>APPEND</item> + <item>CAPACITY</item> + <item>CHR</item> + <item>COUNT</item> + <item>ENTIER</item> + <item>INSERT</item> + <item>LENGTH</item> + <item>LOG2</item> + <item>MAX</item> + <item>MIN</item> + <item>ODD</item> + <item>ORD</item> + <item>POW2</item> + <item>PRED</item> + <item>PTR</item> + <item>REMOVE</item> + <item>SGN</item> + <item>SUCC</item> + </list> + + <!-- All R10 Pervasive Macros --> + <list name="r10-macros"> + <item>TLIMIT</item> + <item>TMAX</item> + <item>TMIN</item> + <item>TSIZE</item> + </list> + + <!-- All R10 Unsafe Facilities --> + <list name="r10-unsafe"> + <!-- Reserved Words --> + <item>CAST</item> + <!-- Module --> + <item>UNSAFE</item> + <!-- Constants --> + <item>BitsPerAddress</item> + <item>BitsPerByte</item> + <item>BytesPerWord</item> + <item>BytesPerLongWord</item> + <!-- Types --> + <item>ADDRESS</item> + <item>BYTE</item> + <item>LONGWORD</item> + <item>OCTETSEQ</item> + <item>WORD</item> + <!-- Procedures --> + <item>ADD</item> + <item>ADR</item> + <item>BIT</item> + <item>BWAND</item> + <item>BWNOT</item> + <item>BWOR</item> + <item>HALT</item> + <item>SETBIT</item> + <item>SHL</item> + <item>SHR</item> + <item>SUB</item> + <!-- Macros --> + <item>NOP</item> + </list> + <contexts> - <context attribute="Normal Text" lineEndContext="#stay" name="Normal"> - <keyword attribute="Keyword" context="#stay" String="keywords"/> - <keyword attribute="Directive" context="#stay" String="directives"/> - <keyword attribute="Type" context="#stay" String="types"/> +<!-- + ============================================================================ + Common Context + ============================================================================ + This context is selected by default, prior to any dialect disambiguation. + ============================================================================ +--> + <context name="Common" attribute="Plain Source" lineEndContext="#stay"> + <!-- BUG: first entry is ignored, leave Dummy at first position --> + <keyword attribute="Dummy" context="#stay" String="workaround"/> +<!-- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Dialect tags + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Occurence selects specified dialect. Compiler extension suffix is ignored. + + EBNF: + + dialectTag := + '(*!' dialectIdent ( '+' compilerExtension )? '*)' + ; + + dialectIdent := + 'm2pim' | 'm2iso' | 'm2r10' + ; + + compilerExtension := + LowerCaseLetter ( LowerCaseLetter | Digit )* + ; + + LowerCaseLetter := 'a' .. 'z'; + + Digit := '0' .. '9' ; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--> + <!-- PIM Dialect Tag (*!m2pim*) --> + <RegExpr attribute="DialectTag" context="PIM" + String="\(\*\!m2pim(\+[a-z][a-z0-9]*)?\*\)"/> + + <!-- ISO Dialect Tag (*!m2iso*) --> + <RegExpr attribute="DialectTag" context="ISO" + String="\(\*\!m2iso(\+[a-z][a-z0-9]*)?\*\)"/> + + <!-- R10 Dialect Tag (*!m2r10*) --> + <RegExpr attribute="DialectTag" context="R10" + String="\(\*\!m2r10(\+[a-z][a-z0-9]*)?\*\)"/> +<!-- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Entities common to all dialects, occurrence does not select any dialect + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--> + <!-- Common Reserved Words --> + <keyword attribute="Keyword" + context="#stay" String="common-keywords"/> + + <!-- Common Pervasive Constants --> + <keyword attribute="Const" + context="#stay" String="common-constants"/> + + <!-- Common Pervasive Types --> + <keyword attribute="Const" + context="#stay" String="common-types"/> + + <!-- Common Pervasive Procedures --> + <keyword attribute="Builtin" + context="#stay" String="common-procedures"/> + + <!-- Common Unsafe Facilities --> + <keyword attribute="Unsafe" + context="#stay" String="common-unsafe"/> +<!-- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Entities indicative of a dialect, occurrence selects indicated dialect + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--> + <!-- Dialect Indicative Reserved Words --> + <keyword attribute="Keyword" + context="ISO" String="iso-only-keywords"/> + <keyword attribute="Keyword" + context="R10" String="r10-only-keywords"/> + + <!-- Dialect Indicative Constants --> + <keyword attribute="Const" + context="ISO" String="iso-only-constants"/> + + <!-- Dialect Indicative Types --> + <keyword attribute="Type" + context="ISO" String="iso-only-types"/> + <keyword attribute="Type" + context="R10" String="r10-only-types"/> + + <!-- Dialect Indicative Procedures --> + <keyword attribute="Builtin" + context="ISO" String="iso-only-procedures"/> + <keyword attribute="Builtin" + context="R10" String="r10-only-procedures"/> + + <!-- Dialect Indicative Macros --> + <keyword attribute="Builtin" + context="R10" String="r10-only-macros"/> + + <!-- Dialect Indicative Unsafe Facilities --> + <keyword attribute="Unsafe" context="ISO" String="iso-only-unsafe"/> + <keyword attribute="Unsafe" context="R10" String="r10-only-unsafe"/> + + <!-- Dialect Indicative Libraries --> + <keyword attribute="Plain Source" + context="PIM" String="pim-only-libraries"/> + <keyword attribute="Plain Source" + context="ISO" String="iso-only-libraries"/> + <keyword attribute="Plain Source" + context="R10" String="r10-only-libraries"/> +<!-- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Literals common to all dialects, occurrence does not select any dialect + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--> + <!-- Real Number Literals --> <Float attribute="Number" context="#stay"/> + + <!-- Decimal Whole Number Literals --> <Int attribute="Number" context="#stay"/> - <DetectChar attribute="String" context="String1" char=""" /> - <DetectChar attribute="String" context="String2" char="'" /> - <StringDetect attribute="Directive" context="Prep1" String="(*$"/> - <Detect2Chars attribute="Comment" context="Comment2" char="(" char1="*"/> - </context> - <context attribute="String" lineEndContext="#pop" name="String1"> + + <!-- Double-Quoted Character and String Literals --> + <DetectChar attribute="String" context="DoubleQuoted" char="""/> + + <!-- Single-Quoted Character and String Literals --> + <DetectChar attribute="String" context="SingleQuoted" char="'"/> + + <!-- Opening Block Comment Delimiter --> + <Detect2Chars attribute="Comment" context="BlockComment" + char="(" char1="*" beginRegion="FoldableComment"/> + </context><!--Common--> + +<!-- + ============================================================================ + PIM Context + ============================================================================ + This context is selected when either the PIM dialect tag (*!m2pim*) or an + entity indicative of the PIM dialect is found within the source file. + ============================================================================ +--> + <context name="PIM" attribute="Plain Source" lineEndContext="#stay"> + <!-- Reserved Words --> + <keyword attribute="Keyword" context="#stay" String="pim-keywords"/> + + <!-- Pervasive Constant Identifiers --> + <keyword attribute="Const" context="#stay" String="pim-constants"/> + + <!-- Pervasive Type Identifiers --> + <keyword attribute="Type" context="#stay" String="pim-types"/> + + <!-- Pervasive Procedure Identifiers --> + <keyword attribute="Builtin" context="#stay" String="pim-procedures"/> + + <!-- Pervasive Macro Identifiers and Translations --> + <keyword attribute="Builtin" context="#stay" String="pim-macros"/> + + <!-- Built-in Unsafe Facilities --> + <keyword attribute="Unsafe" context="#stay" String="pim-unsafe"/> + + <!-- Base-16 Whole Number Literals --> + <RegExpr attribute="Number" context="#stay" String="0[0-9A-F]*H"/> + + <!-- Base-8 Whole Number and Character Code Literals --> + <RegExpr attribute="Number" context="#stay" String="[0-7]+[BC]"/> + + <!-- Real Number Literals --> + <Float attribute="Number" context="#stay"/> + + <!-- Decimal Whole Number Literals --> + <Int attribute="Number" context="#stay"/> + + <!-- Double-Quoted Character and String Literals --> + <DetectChar attribute="String" context="DoubleQuoted" char="""/> + + <!-- Single-Quoted Character and String Literals --> + <DetectChar attribute="String" context="SingleQuoted" char="'"/> + + <!-- Opening Pragma Delimiter --> + <StringDetect attribute="Pragma" context="PIM-Pragma" String="(*$"/> + + <!-- Opening Block Comment Delimiter --> + <Detect2Chars attribute="Comment" context="BlockComment" + char="(" char1="*" beginRegion="FoldableComment"/> + </context><!--PIM--> + +<!-- + ============================================================================ + ISO Context + ============================================================================ + This context is selected when either the ISO dialect tag (*!m2iso*) or an + entity indicative of the ISO dialect is found within the source file. + ============================================================================ +--> + <context name="ISO" attribute="Plain Source" lineEndContext="#stay"> + <!-- Reserved Words --> + <keyword attribute="Keyword" context="#stay" String="iso-keywords"/> + + <!-- Pervasive Constant Identifiers --> + <keyword attribute="Const" context="#stay" String="iso-constants"/> + + <!-- Pervasive Type Identifiers --> + <keyword attribute="Type" context="#stay" String="iso-types"/> + + <!-- Pervasive Procedure Identifiers --> + <keyword attribute="Builtin" context="#stay" String="iso-procedures"/> + + <!-- Pervasive Macro Identifiers and Translations --> + <keyword attribute="Builtin" context="#stay" String="iso-macros"/> + + <!-- Built-in Unsafe Facilities --> + <keyword attribute="Unsafe" context="#stay" String="iso-unsafe"/> + + <!-- Base-16 Whole Number Literals --> + <RegExpr attribute="Number" context="#stay" String="0[0-9A-F]*H"/> + + <!-- Base-8 Whole Number and Character Code Literals --> + <RegExpr attribute="Number" context="#stay" String="[0-7]+[BC]"/> + + <!-- Real Number Literals --> + <Float attribute="Number" context="#stay"/> + + <!-- Decimal Whole Number Literals --> + <Int attribute="Number" context="#stay"/> + + <!-- Double-Quoted Character and String Literals --> + <DetectChar attribute="String" context="DoubleQuoted" char="""/> + + <!-- Single-Quoted Character and String Literals --> + <DetectChar attribute="String" context="SingleQuoted" char="'"/> + + <!-- Opening Pragma Delimiter --> + <Detect2Chars attribute="Pragma" + context="ISO-Pragma" char="<" char1="*"/> + + <!-- Opening Block Comment Delimiter --> + <Detect2Chars attribute="Comment" context="BlockComment" + char="(" char1="*" beginRegion="FoldableComment"/> + </context><!--ISO--> + +<!-- + ============================================================================ + R10 Context + ============================================================================ + This context is selected when either the R10 dialect tag (*!m2r10*) or an + entity indicative of the R10 dialect is found within the source file. + ============================================================================ +--> + <context name="R10" attribute="Plain Source" lineEndContext="#stay"> + <!-- Reserved Words --> + <keyword attribute="Keyword" context="#stay" String="r10-keywords"/> + + <!-- Built-in Constant Identifiers --> + <keyword attribute="Const" context="#stay" String="r10-constants"/> + + <!-- Built-in Type Identifiers --> + <keyword attribute="Type" context="#stay" String="r10-types"/> + + <!-- Built-in Procedure Identifiers --> + <keyword attribute="Builtin" context="#stay" String="r10-procedures"/> + + <!-- Built-in Macro Identifiers and Translations --> + <keyword attribute="Builtin" context="#stay" String="r10-macros"/> + + <!-- Facilities from Built-in Module UNSAFE --> + <keyword attribute="Unsafe" context="#stay" String="r10-unsafe"/> + + <!-- Base-2 Whole Number Literals --> + <RegExpr attribute="Number" context="#stay" + String="0b([01]+('[01]+)?)+"/> + + <!-- Base-16 Whole Number and Character Code Literals --> + <RegExpr attribute="Number" context="#stay" + String="0[ux]([0-9A-F]+('[0-9A-F]+)?)+"/> + + <!-- Real Number Literals --> + <Float attribute="Number" context="#stay"/> + + <!-- Decimal Whole Number Literals --> + <RegExpr attribute="Number" context="#stay" + String="([1-9][0-9]*('[0-9]+)*)|0"/> + + <!-- Double-Quoted Character and String Literals --> + <DetectChar attribute="String" context="DoubleQuoted" char="""/> + + <!-- Single-Quoted Character and String Literals --> + <DetectChar attribute="String" context="SingleQuoted" char="'"/> + + <!-- Opening Pragma Delimiter --> + <Detect2Chars attribute="Pragma" + context="ISO-Pragma" char="<" char1="*"/> + + <!-- Line Comment --> + <DetectChar attribute ="Comment" context="LineComment" char="!"/> + + <!-- Opening Block Comment Delimiter --> + <Detect2Chars attribute="Comment" context="BlockComment" + char="(" char1="*" beginRegion="FoldableComment"/> + </context><!--R10--> + +<!-- + ============================================================================ + Sub-Contexts + ============================================================================ + These contexts are used to process entities that are recognised by their + opening delimiters, such as quoted literals, pragmas and comments. + ============================================================================ +--> + <!-- Double-Quoted Literal --> + <context name="DoubleQuoted" attribute="String" lineEndContext="#pop"> + <!-- Closing Delimiter --> <DetectChar attribute="String" context="#pop" char="""/> </context> - <context attribute="String" lineEndContext="#pop" name="String2"> + + <!-- Single-Quoted Literal --> + <context name="SingleQuoted" attribute="String" lineEndContext="#pop"> + <!-- CLosing Delimiter --> <DetectChar attribute="String" context="#pop" char="'" /> </context> - <context attribute="Comment" lineEndContext="#stay" name="Comment2"> - <Detect2Chars attribute="Comment" context="#pop" char="*" char1=")"/> + + <!-- PIM Pragma Body --> + <context name="PIM-Pragma" attribute="Pragma" lineEndContext="#stay"> + <!-- Closing Delimiter --> + <Detect2Chars attribute="Pragma" context="#pop" char="*" char1=")"/> </context> - <context attribute="Comment" lineEndContext="#pop" name="Comment3" /> - <context attribute="Directive" lineEndContext="#stay" name="Prep1"> - <StringDetect attribute="Directive" context="Prep1" String="$*)"/> + + <!-- ISO Pragma Body --> + <context name="ISO-Pragma" attribute="Pragma" lineEndContext="#stay"> + <!-- Closing Delimiter --> + <Detect2Chars attribute="Pragma" + context="#pop" char="*" char1=">"/> + </context> + + <!-- Line Comment Body --> + <context name="LineComment" attribute="Comment" lineEndContext="#pop"> </context> + <!-- Block Comment Body --> + <context name="BlockComment" attribute="Comment" lineEndContext="#stay"> + <!-- Opening Delimiter of Nested Comment --> + <Detect2Chars attribute="Comment" context="BlockComment" + char="(" char1="*" beginRegion="FoldableComment"/> + <!-- Closing Delimiter --> + <Detect2Chars attribute="Comment" context="#pop" + char="*" char1=")" endRegion="FoldableComment"/> + </context> </contexts> + +<!-- + ============================================================================ + Rendering Styles + ============================================================================ +--> <itemDatas> - <itemData name="Normal Text" defStyleNum="dsNormal" /> - <itemData name="Keyword" defStyleNum="dsKeyword" /> - <itemData name="Type" defStyleNum="dsDataType"/> - <itemData name="Number" defStyleNum="dsDecVal" /> - <itemData name="String" defStyleNum="dsString" /> - <itemData name="Directive" defStyleNum="dsOthers" /> - <itemData name="Comment" defStyleNum="dsComment" /> + <!-- Style for Plain Source Text --> + <itemData name="Plain Source" + defStyleNum="dsNormal" bold="0" italic="0"/> + + <!-- Style for Reserved Words --> + <itemData name="Keyword" + defStyleNum="dsKeyword" bold="1" italic="0"/> + + <!-- Style for Pervasive Constant Identifiers --> + <itemData name="Const" + defStyleNum="dsBuiltIn" bold="1" italic="0"/> + + <!-- Style for Pervasive Type Identifiers --> + <itemData name="Type" + defStyleNum="dsDataType" bold="1" italic="0"/> + + <!-- Style for Pervasive Procedure Identifiers --> + <itemData name="Builtin" + defStyleNum="dsBuiltIn" bold="1" italic="0"/> + + <!-- Style for Unsafe Facilities --> + <itemData name="Unsafe" + defStyleNum="dsWarning" bold="1" italic="0"/> + + <!-- Style for Number Literals --> + <itemData name="Number" + defStyleNum="dsDecVal" bold="0" italic="0"/> + + <!-- Style for Quoted Literals --> + <itemData name="String" + defStyleNum="dsString" bold="0" italic="0"/> + + <!-- Style for Dialect Tags --> + <itemData name="DialectTag" + defStyleNum="dsComment" bold="1" italic="0"/> + + <!-- Style for Pragmas --> + <itemData name="Pragma" + defStyleNum="dsPreprocessor" bold="1" italic="0"/> + + <!-- Style for Comments --> + <itemData name="Comment" + defStyleNum="dsComment" bold="0" italic="1"/> + + <!-- Dummy style for testing --> + <itemData name="Dummy" defStyleNum="dsError"/> </itemDatas> </highlighting> + <general> <keywords casesensitive="1" /> <comments> - <comment name="multiLine" start="(*" end="*)" /> + <comment name="singleLine" start="!"/> + <comment name="multiLine" start="(*" end="*)"/> </comments> </general> </language> + +<!--EOF--> |