objectpascal.xml

  1<lexer>
  2  <config>
  3    <name>ObjectPascal</name>
  4    <alias>objectpascal</alias>
  5    <filename>*.pas</filename>
  6    <filename>*.pp</filename>
  7    <filename>*.inc</filename>
  8    <filename>*.dpr</filename>
  9    <filename>*.dpk</filename>
 10    <filename>*.lpr</filename>
 11    <filename>*.lpk</filename>
 12    <mime_type>text/x-pascal</mime_type>
 13  </config>
 14  <rules>
 15    <state name="root">
 16      <!-- TextWhitespace -->
 17      <rule pattern="[^\S\n]+">
 18        <token type="TextWhitespace" />
 19      </rule>
 20      <rule pattern="\n">
 21        <token type="Text"/>
 22      </rule>
 23      <rule pattern="\s+">
 24        <token type="Text"/>
 25      </rule>
 26      <!-- Magic Number (BOM) -->
 27      <rule pattern="[^\u0000-\u007F]+">
 28        <token type="Text"/>
 29      </rule>
 30      <!-- Compiler Directive -->
 31      <rule pattern="\{[$].*?\}|\{[-](NOD|EXT|OBJ).*?\}|\([*][$].*?[*]\)">
 32        <token type="CommentPreproc" />
 33      </rule>
 34      <!-- Comment Single -->
 35      <rule pattern="(//.*?)(\n)">
 36        <bygroups>
 37          <token type="CommentSingle" />
 38          <token type="TextWhitespace" />
 39        </bygroups>
 40      </rule>
 41      <!-- Comment Multiline Block -->
 42      <rule pattern="\([*](.|\n)*?[*]\)">
 43        <token type="CommentMultiline"/>
 44      </rule>
 45      <!-- Comment Multiline Source Documentation -->
 46      <rule pattern="[{](.|\n)*?[}]">
 47        <token type="CommentMultiline"/>
 48      </rule>
 49      <!-- Range Indicator -->
 50      <rule pattern="(?i:(\.\.))">
 51        <token type="Operator" />
 52      </rule>
 53      <!-- Control Character -->
 54      <rule pattern="[\#][0-9a-fA-F]*|[0-9]+[xX][0-9a-fA-F]*">
 55        <token type="LiteralStringEscape" />
 56      </rule>
 57      <!-- Numbers -->
 58      <rule pattern="[\$][0-9a-fA-F]*[xX][0-9a-fA-F]*|[\$][0-9a-fA-F]*|([0-9]+[0-9a-fA-F]+(?=[hH]))">
 59        <token type="LiteralNumberHex" />
 60      </rule>
 61      <rule pattern="[0-9]+(\&#39;[0-9]+)*\.[0-9]+(\&#39;[0-9]+)*[eE][+-]?[0-9]+(\&#39;[0-9]+)*|[0-9]+(\&#39;[0-9]+)*\.[0-9]+(\&#39;[0-9]+)*|\d+[eE][+-]?[0-9]+">
 62        <token type="LiteralNumberFloat" />
 63      </rule>
 64      <rule pattern="0|[1-9][0-9_]*?">
 65        <token type="LiteralNumberInteger" />
 66      </rule>
 67      <!-- Multiline string Literal -->
 68      <rule pattern="(&#39;&#39;&#39;\s*\n)(.|\n)*?(&#39;&#39;&#39;)(?=\s*&#59;)">
 69        <token type="LiteralString" />
 70      </rule>
 71      <!-- string -->
 72      <rule pattern="(?i:(\')).*?(?i:(\'))">
 73        <token type="LiteralString" />
 74      </rule>
 75      <!-- string (Special case for Delphi Assembler)-->
 76      <rule pattern="(?i:(&#34;)).*?(?i:(&#34;))">
 77        <token type="LiteralString" />
 78      </rule>
 79      <!-- Simple Types -->
 80      <rule pattern="\b(?!=\.)(?i:(NativeInt|NativeUInt|LongInt|LongWord|Integer|Int64|Cardinal|UInt64|ShortInt|SmallInt|FixedInt|Byte|Word|FixedUInt|Int8|Int16|Int32|UInt8|UInt16|UInt32|Real48|Single|Double|Real|Extended|Comp|Currency|Char|AnsiChar|WideChar|UCS2Char|UCS4Char|string|ShortString|AnsiString|UnicodeString|WideString|RawByteString|UTF8String|File|TextFile|Text|Boolean|ByteBool|WordBool|LongBool|Pointer|Variant|OleVariant))\b(?![&#60;\/(])">
 81        <token type="KeywordType" />
 82      </rule>
 83      <!-- T Types -->
 84      <rule pattern="\b(?!=\.)(?i:(TSingleRec|TDoubleRec|TExtended80Rec|TByteArray|TTextBuf|TVarRec|TWordArray))\b(?![&#60;\/(])">
 85        <token type="KeywordType" />
 86      </rule>
 87      <!-- Pointer Types -->
 88      <rule pattern="\b(?!=\.)(?i:(PChar|PAnsiChar|PWideChar|PRawByteString|PUnicodeString|PString|PAnsiString|PShortString|PTextBuf|PWideString|PByte|PShortInt|PWord|PSmallInt|PCardinal|PLongWord|PFixedUInt|PLongint|PFixedInt|PUInt64|PInt64|PNativeUInt|PNativeInt|PByteArray|PCurrency|PDouble|PExtended|PSingle|PInteger|POleVariant|PVarRec|PVariant|PWordArray|PBoolean|PWordBool|PLongBool|PPointer))\b(?![&#60;\/(])">
 89        <token type="KeywordType" />
 90      </rule>
 91      <!-- More Types -->
 92      <rule pattern="\b(?!=\.)(?i:(IntPtr|UIntPtr|Float32|Float64|_ShortStr|_ShortString|_AnsiStr|_AnsiString|_AnsiChr|_AnsiChar|_WideStr|_WideString|_PAnsiChr|_PAnsiChar|UTF8Char|_AnsiChar|PUTF8Char|_PAnsiChar|MarshaledString|MarshaledAString))\b(?![&#60;\/(])">
 93        <token type="KeywordType" />
 94      </rule>
 95      <!-- Result -->
 96      <rule pattern="\b(?!=\.)(?i:(Result))\b(?![&#60;\/(])">
 97        <token type="GenericEmph" />
 98      </rule>      
 99      <!-- Result Constants -->
100      <rule pattern="\b(?!=\.)(?i:(True|False))\b(?![&#60;\/(])">
101        <token type="NameConstant" />
102      </rule>
103      <!-- Operator (Assign) -->
104      <rule pattern="[(\:\=)]">
105        <token type="Operator" />
106      </rule>      
107      <!-- Operators (Arithmetic, Unary Arithmetic, String, Pointer, Set, Relational, Address) -->
108      <rule pattern="[\+\-\*\/\^&#60;&#62;\=\@]">
109        <token type="Operator" />
110      </rule>
111      <!-- Operators (Arithmetic, Boolean, Logical (Bitwise), Set) -->
112      <rule pattern="\b(?i:([div][mod][not][and][or][xor][shl][shr][in]))\b">
113        <token type="OperatorWord" />
114      </rule>
115      <!-- Special Symbols (Escape, Literal Chr, Hex Value, Binary Numeral Expression Indicator) -->
116      <rule pattern="[&#38;\#\$\%]">
117        <token type="Operator" />
118      </rule>
119      <!-- Special Symbols (Punctuation) -->
120      <rule pattern="[\(\)\,\.\:\;\[\]]">
121        <token type="Punctuation" />
122      </rule>
123      <!-- Reserved Words -->
124      <rule pattern="\b(?!=\.)(?i:(and|end|interface|record|var|array|except|is|repeat|while|as|exports|label|resourcestring|with|asm|file|library|set|xor|begin|finalization|mod|shl|case|finally|nil|shr|class|for|not|string|const|function|object|then|constructor|goto|of|threadvar|destructor|if|or|to|dispinterface|implementation|packed|try|div|in|procedure|type|do|inherited|program|unit|downto|initialization|property|until|else|inline|raise|uses))\b(?![&#60;\/(])">
125        <token type="KeywordReserved" />
126      </rule>
127      <!-- Directives -->
128      <rule pattern="\b(?!=\.)(?i:(absolute|export|name|public|stdcall|abstract|external|published|strict|assembler|nodefault|read|stored|automated|final|operator|readonly|unsafe|cdecl|forward|out|reference|varargs|contains|helper|overload|register|virtual|default|implements|override|reintroduce|winapi|delayed|index|package|requires|write|deprecated|inline|pascal|writeonly|dispid|library|platform|safecall|dynamic|local|private|sealed|experimental|message|protected|static))\b(?![&#60;\/(])">
129        <token type="Keyword" />
130      </rule>
131      <!-- Directives obsolete -->
132      <rule pattern="\b(?!=\.)(?i:(near|far|resident))\b(?![&#60;\/(])">
133        <token type="Keyword" />
134      </rule>
135      <!-- Constant Expressions -->
136      <rule pattern="\b(?!=\.)(?i:(Abs|High|Low|Pred|Succ|Chr|Length|Odd|Round|Swap|Hi|Lo|Ord|SizeOf|Trunc))\b(?![&#60;\/(])">
137        <token type="KeywordConstant" />
138      </rule>
139      <!-- everything else -->
140      <rule pattern="([^\W\d]|\$)[\w$]*">
141        <token type="Text" />
142      </rule>
143    </state>
144  </rules>
145</lexer>