Skip to content

Commit

Permalink
improve PSL directive and function highlighting
Browse files Browse the repository at this point in the history
  • Loading branch information
skylerjessee-agvantis authored and alecthomas committed May 3, 2023
1 parent bf8d359 commit be82a0b
Show file tree
Hide file tree
Showing 3 changed files with 284 additions and 517 deletions.
167 changes: 127 additions & 40 deletions lexers/embedded/psl.xml
Expand Up @@ -11,38 +11,40 @@
<rules>
<!-- NameFunction|TypeName -->
<state name="root">
<rule pattern="[^\S\n]+">
<token type="Text"/>
</rule>
<rule pattern="\\\n">
<token type="Text"/>
</rule>
<rule pattern="\n">
<token type="Text"/>
</rule>
<rule pattern="//.*$">
<token type="CommentSingle"/>
</rule>
<rule pattern="/(\\\n)?[*](.|\n)*?[*](\\\n)?/">
<token type="CommentMultiline"/>
</rule>
<rule pattern="\+|-|\*|/|%|'?&lt;|'?&gt;|'?=|\band\b|\bor\b|_|:">
<rule pattern="\+|-|\*|\/|\b%\b|&lt;|&gt;|=|'|\band\b|\bor\b|_|:|!">
<token type="Operator"/>
</rule>
<rule pattern="[{}(),\[\]]">
<rule pattern="[{}(,)\[\]]">
<token type="Punctuation"/>
<push state="root"/>
</rule>
<rule pattern="#">
<token type="KeywordPseudo"/>
<push state="directive"/>
</rule>
<rule pattern="[+-]?\d*\.\d+">
<rule pattern="\.?\d+">
<token type="LiteralNumber"/>
</rule>
<rule pattern="&quot;">
<token type="LiteralString"/>
<push state="string"/>
</rule>
<rule pattern="\.">
<token type="Operator"/>
<push state="method"/>
</rule>
<rule pattern="\$\$">
<token type="NameFunction"/>
<push state="method"/>
</rule>
<rule pattern="\bdo\b">
<token type="KeywordReserved"/>
<push state="callmethod"/>
</rule>
<rule pattern="\b(do|set|if|for|while|quit|catch|return|while)\b">
<rule pattern="\b(do|set|if|else|for|while|quit|catch|return|ret|while)\b">
<token type="Keyword"/>
</rule>
<rule pattern="\b(true|false)\b">
Expand All @@ -58,12 +60,28 @@
<rule pattern="\b(Boolean|String|Number|Date)\b">
<token type="KeywordType"/>
</rule>
<rule pattern="\^?[a-zA-Z][a-zA-Z0-9]*">
<rule pattern="(\${0,2}[_a-zA-z]\w*)?(\^[_a-zA-Z]\w*)">
<bygroups>
<token type="NameFunction"/>
<token type="NameClass"/>
</bygroups>
</rule>
<rule pattern="([_a-zA-z]\w*)(\.[_a-zA-Z]\w*)(\()">
<bygroups>
<token type="Name"/>
<token type="NameFunction"/>
<token type="Punctuation"/>
</bygroups>
</rule>
<rule pattern="(\${0,2}[_a-zA-z]\w*)(\.[_a-zA-Z]\w*)">
<bygroups>
<token type="Name"/>
<token type="NameProperty"/>
</bygroups>
</rule>
<rule pattern="\.?(%|\${0,2})[_a-zA-Z]\w*">
<token type="Name"/>
</rule>
<rule pattern="\s+">
<token type="Text"/>
</rule>
</state>
<state name="string">
<rule pattern="&quot;">
Expand All @@ -83,44 +101,113 @@
<token type="LiteralString"/>
</rule>
</state>
<state name="method">
<rule pattern="\(">
<token type="Punctuation"/>
<pop depth="1"/>
<state name="typename">
<rule pattern="\s+">
<token type="Text"/>
</rule>
<rule pattern="\^[a-zA-Z][a-zA-Z0-9]*">
<token type="NameClass"/>
<rule pattern="\b(public|req|private|void)\b">
<token type="KeywordDeclaration"/>
</rule>
<rule pattern="([_a-zA-Z]\w*)?(\s+)([_a-zA-Z]\w*)">
<bygroups>
<token type="NameClass"/>
<token type="Text"/>
<token type="Name"/>
</bygroups>
<pop depth="1"/>
</rule>
<rule pattern="[a-zA-Z][a-zA-Z0-9]*">
<token type="NameFunction"/>
<rule>
<pop depth="1"/>
</rule>
</state>
<state name="callmethod">
<rule pattern="\(|{">
<token type="Punctuation"/>
<state name="directive">
<rule pattern="ACCEPT">
<token type="KeywordPseudo"/>
<push state="accept-directive"/>
</rule>
<rule pattern="CLASSDEF">
<token type="KeywordPseudo"/>
<push state="classdef-directive"/>
</rule>
<rule pattern="IF|ELSEIF">
<token type="KeywordPseudo"/>
<push state="if-directive"/>
</rule>
<rule pattern="PACKAGE">
<token type="KeywordPseudo"/>
<push state="package-directive"/>
</rule>
<rule pattern="PROPERTYDEF">
<token type="KeywordPseudo"/>
<pop depth="1"/>
</rule>
<rule pattern="\^[a-zA-Z][a-zA-Z0-9]*">
<token type="NameClass"/>
<rule pattern="INFO|WARN">
<token type="KeywordPseudo"/>
<push state="warn-directive"/>
</rule>
<rule pattern="[a-zA-Z][a-zA-Z0-9]*">
<token type="NameFunction"/>
<rule pattern="OPTION">
<token type="KeywordPseudo"/>
<push state="option-directive"/>
</rule>
<rule pattern="\s+">
<token type="Text"/>
<rule pattern="BYPASS|ELSE|END|ENDBYPASS|ENDIF|OPTIMIZE">
<token type="KeywordPseudo"/>
<push state="other-directive"/>
</rule>
</state>
<state name="typename">
<state name="accept-directive">
<rule pattern=".+$">
<token type="CommentSingle"/>
</rule>
</state>
<state name="other-directive">
<rule pattern=".+$">
<token type="CommentSingle"/>
</rule>
</state>
<state name="classdef-directive">
<rule pattern="\s+">
<token type="Text"/>
</rule>
<rule pattern="\b(public|req|private|void)\b">
<rule pattern="delimiter|extends">
<token type="Keyword"/>
</rule>
<rule pattern="public">
<token type="KeywordDeclaration"/>
</rule>
<rule pattern="[a-zA-Z][a-zA-Z0-9]*">
<rule pattern="=">
<token type="Operator"/>
</rule>
<rule pattern="[\w\d]+">
<token type="NameClass"/>
</rule>
</state>
<state name="if-directive">
<rule pattern=".+$">
<include state="root"/>
</rule>
</state>
<state name="option-directive">
<rule pattern="\s+">
<token type="Text"/>
</rule>
<rule pattern="ON|OFF">
<token type="KeywordConstant"/>
<pop depth="1"/>
</rule>
<rule pattern="[\w\d]+">
<token type="Name"/>
</rule>
</state>
<state name="package-directive">
<rule pattern="\s+">
<token type="Text"/>
</rule>
<rule pattern="\w+">
<token type="Name"/>
</rule>
<rule>
<include state="root"/>
</rule>
</state>
</rules>
</lexer>
6 changes: 6 additions & 0 deletions lexers/testdata/psl.actual
@@ -1,9 +1,15 @@
#PACKAGE custom
#ACCEPT Date = 04/03/2021;
#OPTION ResultClass ON

public Number SumMethod() {
// this is a comment
type public Number x
set x = 10.0
type String thisIsAString = "this"_x_"conjoined"
type String i = ""
type Date sysDate = %SystemDate
type Boolean publicVar = .PubBoolean
for set i = ^UTBL("test",i).order() quit:i.isNull() {
set x = x + i
}
Expand Down

0 comments on commit be82a0b

Please sign in to comment.