makefile.xml

  1<lexer>
  2  <config>
  3    <name>Makefile</name>
  4    <alias>make</alias>
  5    <alias>makefile</alias>
  6    <alias>mf</alias>
  7    <alias>bsdmake</alias>
  8    <filename>*.mak</filename>
  9    <filename>*.mk</filename>
 10    <filename>Makefile</filename>
 11    <filename>makefile</filename>
 12    <filename>Makefile.*</filename>
 13    <filename>GNUmakefile</filename>
 14    <filename>BSDmakefile</filename>
 15    <filename>Justfile</filename>
 16    <filename>justfile</filename>
 17    <filename>.justfile</filename>
 18    <mime_type>text/x-makefile</mime_type>
 19    <ensure_nl>true</ensure_nl>
 20  </config>
 21  <rules>
 22    <state name="root">
 23      <rule pattern="^(?:[\t ]+.*\n|\n)+">
 24        <using lexer="Bash"/>
 25      </rule>
 26      <rule pattern="\$[&lt;@$+%?|*]">
 27        <token type="Keyword"/>
 28      </rule>
 29      <rule pattern="\s+">
 30        <token type="Text"/>
 31      </rule>
 32      <rule pattern="#.*?\n">
 33        <token type="Comment"/>
 34      </rule>
 35      <rule pattern="(export)(\s+)(?=[\w${}\t -]+\n)">
 36        <bygroups>
 37          <token type="Keyword"/>
 38          <token type="Text"/>
 39        </bygroups>
 40        <push state="export"/>
 41      </rule>
 42      <rule pattern="export\s+">
 43        <token type="Keyword"/>
 44      </rule>
 45      <rule pattern="([\w${}().-]+)(\s*)([!?:+]?=)([ \t]*)((?:.*\\\n)+|.*\n)">
 46        <bygroups>
 47          <token type="NameVariable"/>
 48          <token type="Text"/>
 49          <token type="Operator"/>
 50          <token type="Text"/>
 51          <using lexer="Bash"/>
 52        </bygroups>
 53      </rule>
 54      <rule pattern="(?s)&#34;(\\\\|\\.|[^&#34;\\])*&#34;">
 55        <token type="LiteralStringDouble"/>
 56      </rule>
 57      <rule pattern="(?s)&#39;(\\\\|\\.|[^&#39;\\])*&#39;">
 58        <token type="LiteralStringSingle"/>
 59      </rule>
 60      <rule pattern="([^\n:]+)(:+)([ \t]*)">
 61        <bygroups>
 62          <token type="NameFunction"/>
 63          <token type="Operator"/>
 64          <token type="Text"/>
 65        </bygroups>
 66        <push state="block-header"/>
 67      </rule>
 68      <rule pattern="\$\(">
 69        <token type="Keyword"/>
 70        <push state="expansion"/>
 71      </rule>
 72    </state>
 73    <state name="expansion">
 74      <rule pattern="[^$a-zA-Z_()]+">
 75        <token type="Text"/>
 76      </rule>
 77      <rule pattern="[a-zA-Z_]+">
 78        <token type="NameVariable"/>
 79      </rule>
 80      <rule pattern="\$">
 81        <token type="Keyword"/>
 82      </rule>
 83      <rule pattern="\(">
 84        <token type="Keyword"/>
 85        <push/>
 86      </rule>
 87      <rule pattern="\)">
 88        <token type="Keyword"/>
 89        <pop depth="1"/>
 90      </rule>
 91    </state>
 92    <state name="export">
 93      <rule pattern="[\w${}-]+">
 94        <token type="NameVariable"/>
 95      </rule>
 96      <rule pattern="\n">
 97        <token type="Text"/>
 98        <pop depth="1"/>
 99      </rule>
100      <rule pattern="\s+">
101        <token type="Text"/>
102      </rule>
103    </state>
104    <state name="block-header">
105      <rule pattern="[,|]">
106        <token type="Punctuation"/>
107      </rule>
108      <rule pattern="#.*?\n">
109        <token type="Comment"/>
110        <pop depth="1"/>
111      </rule>
112      <rule pattern="\\\n">
113        <token type="Text"/>
114      </rule>
115      <rule pattern="\$\(">
116        <token type="Keyword"/>
117        <push state="expansion"/>
118      </rule>
119      <rule pattern="[a-zA-Z_]+">
120        <token type="Name"/>
121      </rule>
122      <rule pattern="\n">
123        <token type="Text"/>
124        <pop depth="1"/>
125      </rule>
126      <rule pattern=".">
127        <token type="Text"/>
128      </rule>
129    </state>
130  </rules>
131</lexer>