tartrazine/lexers/fish.xml

159 lines
5.3 KiB
XML
Raw Normal View History

2024-08-02 20:03:49 +00:00
<lexer>
<config>
<name>Fish</name>
<alias>fish</alias>
<alias>fishshell</alias>
<filename>*.fish</filename>
<filename>*.load</filename>
<mime_type>application/x-fish</mime_type>
</config>
<rules>
<state name="paren">
<rule pattern="\)">
<token type="Keyword"/>
<pop depth="1"/>
</rule>
<rule>
<include state="root"/>
</rule>
</state>
<state name="math">
<rule pattern="\)\)">
<token type="Keyword"/>
<pop depth="1"/>
</rule>
<rule pattern="[-+*/%^|&amp;]|\*\*|\|\|">
<token type="Operator"/>
</rule>
<rule pattern="\d+#\d+">
<token type="LiteralNumber"/>
</rule>
<rule pattern="\d+#(?! )">
<token type="LiteralNumber"/>
</rule>
<rule pattern="\d+">
<token type="LiteralNumber"/>
</rule>
<rule>
<include state="root"/>
</rule>
</state>
<state name="root">
<rule>
<include state="basic"/>
</rule>
<rule>
<include state="interp"/>
</rule>
<rule>
<include state="data"/>
</rule>
</state>
<state name="interp">
<rule pattern="\$\(\(">
<token type="Keyword"/>
<push state="math"/>
</rule>
<rule pattern="\(">
<token type="Keyword"/>
<push state="paren"/>
</rule>
<rule pattern="\$#?(\w+|.)">
<token type="NameVariable"/>
</rule>
</state>
<state name="basic">
<rule pattern="(?&lt;=(?:^|\A|;|&amp;&amp;|\|\||\||\b(continue|function|return|switch|begin|while|break|count|false|block|echo|case|true|else|exit|test|set|cdh|and|pwd|for|end|not|if|cd|or)\b)\s*)(continue|function|return|switch|begin|while|break|count|false|block|test|case|true|echo|exit|else|set|cdh|and|pwd|for|end|not|if|cd|or)(?=;?\b)">
<token type="Keyword"/>
</rule>
<rule pattern="(?&lt;=for\s+\S+\s+)in\b">
<token type="Keyword"/>
</rule>
<rule pattern="\b(fish_update_completions|fish_command_not_found|fish_breakpoint_prompt|fish_status_to_signal|fish_right_prompt|fish_is_root_user|fish_mode_prompt|fish_vcs_prompt|fish_key_reader|fish_svn_prompt|fish_git_prompt|fish_hg_prompt|fish_greeting|fish_add_path|commandline|fish_prompt|fish_indent|fish_config|fish_pager|breakpoint|fish_title|prompt_pwd|functions|set_color|realpath|funcsave|contains|complete|argparse|fish_opt|history|builtin|getopts|suspend|command|mimedb|printf|ulimit|disown|string|source|funced|status|random|isatty|fishd|prevd|vared|umask|nextd|alias|pushd|emit|jobs|popd|help|psub|wait|fish|read|time|exec|eval|math|trap|type|dirs|dirh|abbr|kill|bind|hash|open|fc|bg|fg)\s*\b(?!\.)">
<token type="NameBuiltin"/>
</rule>
<rule pattern="#!.*\n">
<token type="CommentHashbang"/>
</rule>
<rule pattern="#.*\n">
<token type="Comment"/>
</rule>
<rule pattern="\\[\w\W]">
<token type="LiteralStringEscape"/>
</rule>
<rule pattern="(\b\w+)(\s*)(=)">
<bygroups>
<token type="NameVariable"/>
<token type="Text"/>
<token type="Operator"/>
</bygroups>
</rule>
<rule pattern="[\[\]()={}]">
<token type="Operator"/>
</rule>
<rule pattern="(?&lt;=\[[^\]]+)\.\.|-(?=[^\[]+\])">
<token type="Operator"/>
</rule>
<rule pattern="&lt;&lt;-?\s*(\&#39;?)\\?(\w+)[\w\W]+?\2">
<token type="LiteralString"/>
</rule>
<rule pattern="(?&lt;=set\s+(?:--?[^\d\W][\w-]*\s+)?)\w+">
<token type="NameVariable"/>
</rule>
<rule pattern="(?&lt;=for\s+)\w[\w-]*(?=\s+in)">
<token type="NameVariable"/>
</rule>
<rule pattern="(?&lt;=function\s+)\w(?:[^\n])*?(?= *[-\n])">
<token type="NameFunction"/>
</rule>
<rule pattern="(?&lt;=(?:^|\b(?:and|or|sudo)\b|;|\|\||&amp;&amp;|\||\(|(?:\b\w+\s*=\S+\s)) *)\w[\w-]*">
<token type="NameFunction"/>
</rule>
</state>
<state name="data">
<rule pattern="(?s)\$?&#34;(\\\\|\\[0-7]+|\\.|[^&#34;\\$])*&#34;">
<token type="LiteralStringDouble"/>
</rule>
<rule pattern="&#34;">
<token type="LiteralStringDouble"/>
<push state="string"/>
</rule>
<rule pattern="(?s)\$&#39;(\\\\|\\[0-7]+|\\.|[^&#39;\\])*&#39;">
<token type="LiteralStringSingle"/>
</rule>
<rule pattern="(?s)&#39;.*?&#39;">
<token type="LiteralStringSingle"/>
</rule>
<rule pattern=";">
<token type="Punctuation"/>
</rule>
<rule pattern="&amp;&amp;|\|\||&amp;|\||\^|&lt;|&gt;">
<token type="Operator"/>
</rule>
<rule pattern="\s+">
<token type="Text"/>
</rule>
<rule pattern="\b\d+\b">
<token type="LiteralNumber"/>
</rule>
<rule pattern="(?&lt;=\s+)--?[^\d][\w-]*">
<token type="NameAttribute"/>
</rule>
<rule pattern=".+?">
<token type="Text"/>
</rule>
</state>
<state name="string">
<rule pattern="&#34;">
<token type="LiteralStringDouble"/>
<pop depth="1"/>
</rule>
<rule pattern="(?s)(\\\\|\\[0-7]+|\\.|[^&#34;\\$])+">
<token type="LiteralStringDouble"/>
</rule>
<rule>
<include state="interp"/>
</rule>
</state>
</rules>
</lexer>