tartrazine/lexers/smalltalk.xml

295 lines
8.4 KiB
XML
Raw Normal View History

2024-08-02 20:03:49 +00:00
<lexer>
<config>
<name>Smalltalk</name>
<alias>smalltalk</alias>
<alias>squeak</alias>
<alias>st</alias>
<filename>*.st</filename>
<mime_type>text/x-smalltalk</mime_type>
</config>
<rules>
<state name="inner_parenth">
<rule pattern="\)">
<token type="LiteralStringSymbol"/>
<pop depth="1"/>
</rule>
<rule>
<include state="_parenth_helper"/>
</rule>
</state>
<state name="objects">
<rule pattern="\[">
<token type="Text"/>
<push state="blockvariables"/>
</rule>
<rule pattern="\]">
<token type="Text"/>
<push state="afterobject"/>
</rule>
<rule pattern="\b(self|super|true|false|nil|thisContext)\b">
<token type="NameBuiltinPseudo"/>
<push state="afterobject"/>
</rule>
<rule pattern="\b[A-Z]\w*(?!:)\b">
<token type="NameClass"/>
<push state="afterobject"/>
</rule>
<rule pattern="\b[a-z]\w*(?!:)\b">
<token type="NameVariable"/>
<push state="afterobject"/>
</rule>
<rule pattern="#(&#34;(&#34;&#34;|[^&#34;])*&#34;|[-+*/\\~&lt;&gt;=|&amp;!?,@%]+|[\w:]+)">
<token type="LiteralStringSymbol"/>
<push state="afterobject"/>
</rule>
<rule>
<include state="literals"/>
</rule>
</state>
<state name="afterobject">
<rule pattern="! !$">
<token type="Keyword"/>
<pop depth="1"/>
</rule>
<rule>
<include state="whitespaces"/>
</rule>
<rule pattern="\b(ifTrue:|ifFalse:|whileTrue:|whileFalse:|timesRepeat:)">
<token type="NameBuiltin"/>
<pop depth="1"/>
</rule>
<rule pattern="\b(new\b(?!:))">
<token type="NameBuiltin"/>
</rule>
<rule pattern=":=|_">
<token type="Operator"/>
<pop depth="1"/>
</rule>
<rule pattern="\b[a-zA-Z]+\w*:">
<token type="NameFunction"/>
<pop depth="1"/>
</rule>
<rule pattern="\b[a-zA-Z]+\w*">
<token type="NameFunction"/>
</rule>
<rule pattern="\w+:?|[-+*/\\~&lt;&gt;=|&amp;!?,@%]+">
<token type="NameFunction"/>
<pop depth="1"/>
</rule>
<rule pattern="\.">
<token type="Punctuation"/>
<pop depth="1"/>
</rule>
<rule pattern=";">
<token type="Punctuation"/>
</rule>
<rule pattern="[\])}]">
<token type="Text"/>
</rule>
<rule pattern="[\[({]">
<token type="Text"/>
<pop depth="1"/>
</rule>
</state>
<state name="literals">
<rule pattern="&#39;(&#39;&#39;|[^&#39;])*&#39;">
<token type="LiteralString"/>
<push state="afterobject"/>
</rule>
<rule pattern="\$.">
<token type="LiteralStringChar"/>
<push state="afterobject"/>
</rule>
<rule pattern="#\(">
<token type="LiteralStringSymbol"/>
<push state="parenth"/>
</rule>
<rule pattern="\)">
<token type="Text"/>
<push state="afterobject"/>
</rule>
<rule pattern="(\d+r)?-?\d+(\.\d+)?(e-?\d+)?">
<token type="LiteralNumber"/>
<push state="afterobject"/>
</rule>
</state>
<state name="root">
<rule pattern="(&lt;)(\w+:)(.*?)(&gt;)">
<bygroups>
<token type="Text"/>
<token type="Keyword"/>
<token type="Text"/>
<token type="Text"/>
</bygroups>
</rule>
<rule>
<include state="squeak fileout"/>
</rule>
<rule>
<include state="whitespaces"/>
</rule>
<rule>
<include state="method definition"/>
</rule>
<rule pattern="(\|)([\w\s]*)(\|)">
<bygroups>
<token type="Operator"/>
<token type="NameVariable"/>
<token type="Operator"/>
</bygroups>
</rule>
<rule>
<include state="objects"/>
</rule>
<rule pattern="\^|:=|_">
<token type="Operator"/>
</rule>
<rule pattern="[\]({}.;!]">
<token type="Text"/>
</rule>
</state>
<state name="_parenth_helper">
<rule>
<include state="whitespaces"/>
</rule>
<rule pattern="(\d+r)?-?\d+(\.\d+)?(e-?\d+)?">
<token type="LiteralNumber"/>
</rule>
<rule pattern="[-+*/\\~&lt;&gt;=|&amp;#!?,@%\w:]+">
<token type="LiteralStringSymbol"/>
</rule>
<rule pattern="&#39;(&#39;&#39;|[^&#39;])*&#39;">
<token type="LiteralString"/>
</rule>
<rule pattern="\$.">
<token type="LiteralStringChar"/>
</rule>
<rule pattern="#*\(">
<token type="LiteralStringSymbol"/>
<push state="inner_parenth"/>
</rule>
</state>
<state name="parenth">
<rule pattern="\)">
<token type="LiteralStringSymbol"/>
<push state="root" state="afterobject"/>
</rule>
<rule>
<include state="_parenth_helper"/>
</rule>
</state>
<state name="whitespaces">
<rule pattern="\s+">
<token type="Text"/>
</rule>
<rule pattern="&#34;(&#34;&#34;|[^&#34;])*&#34;">
<token type="Comment"/>
</rule>
</state>
<state name="squeak fileout">
<rule pattern="^&#34;(&#34;&#34;|[^&#34;])*&#34;!">
<token type="Keyword"/>
</rule>
<rule pattern="^&#39;(&#39;&#39;|[^&#39;])*&#39;!">
<token type="Keyword"/>
</rule>
<rule pattern="^(!)(\w+)( commentStamp: )(.*?)( prior: .*?!\n)(.*?)(!)">
<bygroups>
<token type="Keyword"/>
<token type="NameClass"/>
<token type="Keyword"/>
<token type="LiteralString"/>
<token type="Keyword"/>
<token type="Text"/>
<token type="Keyword"/>
</bygroups>
</rule>
<rule pattern="^(!)(\w+(?: class)?)( methodsFor: )(&#39;(?:&#39;&#39;|[^&#39;])*&#39;)(.*?!)">
<bygroups>
<token type="Keyword"/>
<token type="NameClass"/>
<token type="Keyword"/>
<token type="LiteralString"/>
<token type="Keyword"/>
</bygroups>
</rule>
<rule pattern="^(\w+)( subclass: )(#\w+)(\s+instanceVariableNames: )(.*?)(\s+classVariableNames: )(.*?)(\s+poolDictionaries: )(.*?)(\s+category: )(.*?)(!)">
<bygroups>
<token type="NameClass"/>
<token type="Keyword"/>
<token type="LiteralStringSymbol"/>
<token type="Keyword"/>
<token type="LiteralString"/>
<token type="Keyword"/>
<token type="LiteralString"/>
<token type="Keyword"/>
<token type="LiteralString"/>
<token type="Keyword"/>
<token type="LiteralString"/>
<token type="Keyword"/>
</bygroups>
</rule>
<rule pattern="^(\w+(?: class)?)(\s+instanceVariableNames: )(.*?)(!)">
<bygroups>
<token type="NameClass"/>
<token type="Keyword"/>
<token type="LiteralString"/>
<token type="Keyword"/>
</bygroups>
</rule>
<rule pattern="(!\n)(\].*)(! !)$">
<bygroups>
<token type="Keyword"/>
<token type="Text"/>
<token type="Keyword"/>
</bygroups>
</rule>
<rule pattern="! !$">
<token type="Keyword"/>
</rule>
</state>
<state name="method definition">
<rule pattern="([a-zA-Z]+\w*:)(\s*)(\w+)">
<bygroups>
<token type="NameFunction"/>
<token type="Text"/>
<token type="NameVariable"/>
</bygroups>
</rule>
<rule pattern="^(\b[a-zA-Z]+\w*\b)(\s*)$">
<bygroups>
<token type="NameFunction"/>
<token type="Text"/>
</bygroups>
</rule>
<rule pattern="^([-+*/\\~&lt;&gt;=|&amp;!?,@%]+)(\s*)(\w+)(\s*)$">
<bygroups>
<token type="NameFunction"/>
<token type="Text"/>
<token type="NameVariable"/>
<token type="Text"/>
</bygroups>
</rule>
</state>
<state name="blockvariables">
<rule>
<include state="whitespaces"/>
</rule>
<rule pattern="(:)(\s*)(\w+)">
<bygroups>
<token type="Operator"/>
<token type="Text"/>
<token type="NameVariable"/>
</bygroups>
</rule>
<rule pattern="\|">
<token type="Operator"/>
<pop depth="1"/>
</rule>
<rule>
<pop depth="1"/>
</rule>
</state>
</rules>
2024-08-26 23:18:28 +00:00
</lexer>