summaryrefslogtreecommitdiffstats
path: root/kate/data/modula-2-pim-only.xml
diff options
context:
space:
mode:
Diffstat (limited to 'kate/data/modula-2-pim-only.xml')
-rw-r--r--kate/data/modula-2-pim-only.xml308
1 files changed, 308 insertions, 0 deletions
diff --git a/kate/data/modula-2-pim-only.xml b/kate/data/modula-2-pim-only.xml
new file mode 100644
index 000000000..9906339df
--- /dev/null
+++ b/kate/data/modula-2-pim-only.xml
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="Modula-2 (PIM only)" mimetype="text/x-modula2" version="1"
+ kateversion="2.2" section="Sources" priority="4" extensions="*.mod;*.def"
+ casesensitive="1" author="B. Kowarsch (trijezdci@github)" license="MIT">
+<!--
+ *****************************************************************************
+ PIM Modula-2 syntax highlighting profile for Kate
+
+ Copyright (C) 2018 Modula-2 Software Foundation
+
+ Licensed under the MIT license <https://opensource.org/licenses/MIT>
+
+ The authoritative reference for classic Modula-2 is Niklaus Wirth's monograph
+ "Programming in Modula-2" published by Springer, Heidelberg, commonly known
+ as PIM. The most recent edition is the 4th edition, commonly known as PIM4.
+
+ In Modula-2 terminology, keywords are called reserved words. A list of
+ reserved words can be found in PIM4, page 135, at the end of section 3.
+
+ There are three kinds of built-in identifiers: (1) standard identifiers, also
+ called pervasive identifiers or simply pervasives, (2) built-in macros and
+ (3) identifiers provided by a built-in module called SYSTEM. There is no
+ terminology for the latter group.
+
+ A list of pervasives can be found in PIM4 page 136, at the end of section 4.
+ Built-in macros NEW and DISPOSE are given in PIM4 at the bottom of page 77.
+ Procedures ALLOCATE and DEALLOCATE to which macros NEW and DISPOSE resolve
+ are not given in PIM4 but have been implemented in all of Wirth's Modula-2
+ compilers, then followed by all other compiler implementations. Although
+ the implementations of ALLOCATE and DEALLOCATE are library supplied, their
+ identifiers are hardcoded into the language. For the purpose of syntax
+ highlighting, they should therefore be treated as built-in identifiers.
+ Identifiers exported by built-in module SYSTEM are given in PIM4, page 121.
+
+ In Modula-2 terminology, there are two kinds of procedures: those that return
+ a result in their own name, and those that do not. When it is necessary to
+ differentiate, the former are called function procedures and the latter
+ proper procedures. For this reason, both function and procedure identifiers
+ are listed together under a single group "procedures" in this profile.
+
+ Some classic Modula-2 compilers implemented additional built-in types, most
+ notably BYTE, LONGCARD, SHORTCARD and SHORTINT. However, these types are
+ not part of the classical Modula-2 language definition and consequently
+ they are not recognised as built-in identifiers in this profile.
+ *****************************************************************************
+-->
+ <highlighting>
+ <list name="workaround">
+ <!-- BUG: Kate ignores first entry in context 'Normal' -->
+ <!-- WORKAROUND: Use the name of this dummy list as first entry -->
+ <item>???</item> <!-- use '???' in source to test/verify this bug -->
+ </list>
+
+ <!-- Reserved Words -->
+ <list name="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>
+
+ <!-- Built-in Constant Identifiers -->
+ <list name="constants">
+ <item>FALSE</item>
+ <item>NIL</item>
+ <item>TRUE</item>
+ </list>
+
+ <!-- Built-in Type Identifiers -->
+ <list name="types">
+ <!-- Pervasives -->
+ <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>
+
+ <!-- Built-in Procedure Identifiers -->
+ <list name="procedures">
+ <!-- Pervasives -->
+ <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>
+
+ <!-- Built-in Macros -->
+ <list name="macros">
+ <!-- NEW resolves to ALLOCATE -->
+ <item>NEW</item>
+ <item>ALLOCATE</item>
+
+ <!-- DISPOSE resolves to DEALLOCATE -->
+ <item>DISPOSE</item>
+ <item>DEALLOCATE</item>
+ </list>
+
+ <!-- Module SYSTEM -->
+ <list name="unsafe">
+ <!-- Module Identifier -->
+ <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>
+
+ <contexts>
+ <context attribute="Plain Source" lineEndContext="#stay" name="plain">
+ <!-- BUG: first entry is ignored, leave Dummy at first position -->
+ <keyword attribute="Dummy" context="#stay" String="workaround"/>
+
+ <!-- Reserved Words -->
+ <keyword attribute="Keyword" context="#stay" String="keywords"/>
+
+ <!-- Built-in Constant Identifiers -->
+ <keyword attribute="Const" context="#stay" String="constants"/>
+
+ <!-- Built-in Type Identifiers -->
+ <keyword attribute="Type" context="#stay" String="types"/>
+
+ <!-- Built-in Procedure Identifiers -->
+ <keyword attribute="Builtin" context="#stay" String="procedures"/>
+
+ <!-- Built-in Macro Identifiers and Translations -->
+ <keyword attribute="Builtin" context="#stay" String="macros"/>
+
+ <!-- Facilities from Built-in Module SYSTEM -->
+ <keyword attribute="Unsafe" context="#stay" String="unsafe"/>
+
+ <!-- Base-16 Integer Literals -->
+ <RegExpr attribute="Number" context="#stay" String="0[0-9A-F]*H"/>
+
+ <!-- Base-8 Integers and Character Code Literals -->
+ <RegExpr attribute="Number" context="#stay" String="[0-7]+[BC]"/>
+
+ <!-- Real Number Literals -->
+ <Float attribute="Number" context="#stay"/>
+
+ <!-- Decimal Integer Literals -->
+ <Int attribute="Number" context="#stay"/>
+
+ <!-- Start of Double-Quoted String Literal -->
+ <DetectChar attribute="String" context="DoubleQuotedString" char="&quot;" />
+
+ <!-- Start of Single-Quoted String Literal -->
+ <DetectChar attribute="String" context="SingleQuotedString" char="'" />
+
+ <!-- Start of Modula-2 Dialect Tag -->
+ <StringDetect attribute="DialectTag" context="InDialectTag" String="(*!"/>
+
+ <!-- Start of Pragma -->
+ <StringDetect attribute="Pragma" context="InPragma" String="(*$"/>
+
+ <!-- Start of Comment -->
+ <Detect2Chars attribute="Comment"
+ context="InComment" char="(" char1="*" beginRegion="FoldableComment"/>
+ </context>
+
+ <!-- End of Double-Quoted String Literal -->
+ <context attribute="String" lineEndContext="#pop" name="DoubleQuotedString">
+ <DetectChar attribute="String" context="#pop" char="&quot;"/>
+ </context>
+
+ <!-- End of Single-Quoted String Literal -->
+ <context attribute="String" lineEndContext="#pop" name="SingleQuotedString">
+ <DetectChar attribute="String" context="#pop" char="'" />
+ </context>
+
+ <!-- End of Dialect Tag -->
+ <context attribute="DialectTag" lineEndContext="#pop" name="InDialectTag">
+ <Detect2Chars attribute="DialectTag" context="#pop" char="*" char1=")"/>
+ </context>
+
+ <!-- End of Pragma -->
+ <context attribute="Pragma" lineEndContext="#stay" name="InPragma">
+ <Detect2Chars attribute="Pragma" context="#pop" char="*" char1=")"/>
+ </context>
+
+ <context attribute="Comment" lineEndContext="#stay" name="InComment">
+ <!-- Start of nested Comment -->
+ <Detect2Chars attribute="Comment"
+ context="InComment" char="(" char1="*" beginRegion="FoldableComment"/>
+ <!-- End of Comment -->
+ <Detect2Chars attribute="Comment"
+ context="#pop" char="*" char1=")" endRegion="FoldableComment"/>
+ </context>
+ </contexts>
+
+ <itemDatas>
+ <!-- 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 Built-in Constant Identifiers -->
+ <itemData name="Const"
+ defStyleNum="dsBuiltIn" bold="1" italic="0" />
+
+ <!-- Style for Built-in Type Identifiers -->
+ <itemData name="Type"
+ defStyleNum="dsDataType" bold="1" italic="0" />
+
+ <!-- Style for Facilities from Module SYSTEM -->
+ <itemData name="Unsafe"
+ defStyleNum="dsWarning" bold="1" italic="0"/>
+
+ <!-- Style for Built-in Procedure Identifiers -->
+ <itemData name="Builtin"
+ defStyleNum="dsBuiltIn" 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="*)" />
+ </comments>
+ </general>
+</language>