terraform.xml

  1<lexer>
  2  <config>
  3    <name>Terraform</name>
  4    <alias>terraform</alias>
  5    <alias>tf</alias>
  6    <filename>*.tf</filename>
  7    <mime_type>application/x-tf</mime_type>
  8    <mime_type>application/x-terraform</mime_type>
  9  </config>
 10  <rules>
 11    <state name="string">
 12      <rule pattern="&#34;">
 13        <token type="LiteralStringDouble"/>
 14        <pop depth="1"/>
 15      </rule>
 16      <rule pattern="\\\\">
 17        <token type="LiteralStringDouble"/>
 18      </rule>
 19      <rule pattern="\\\\&#34;">
 20        <token type="LiteralStringDouble"/>
 21      </rule>
 22      <rule pattern="\$\{">
 23        <token type="LiteralStringInterpol"/>
 24        <push state="interp-inside"/>
 25      </rule>
 26      <rule pattern="\$">
 27        <token type="LiteralStringDouble"/>
 28      </rule>
 29      <rule pattern="[^&#34;\\\\$]+">
 30        <token type="LiteralStringDouble"/>
 31      </rule>
 32    </state>
 33    <state name="interp-inside">
 34      <rule pattern="\}">
 35        <token type="LiteralStringInterpol"/>
 36        <pop depth="1"/>
 37      </rule>
 38      <rule>
 39        <include state="root"/>
 40      </rule>
 41    </state>
 42    <state name="root">
 43      <rule pattern="[\[\](),.{}]">
 44        <token type="Punctuation"/>
 45      </rule>
 46      <rule pattern="-?[0-9]+">
 47        <token type="LiteralNumber"/>
 48      </rule>
 49      <rule pattern="=&gt;">
 50        <token type="Punctuation"/>
 51      </rule>
 52      <rule pattern="(false|true)\b">
 53        <token type="KeywordConstant"/>
 54      </rule>
 55      <rule pattern="/(?s)\*(((?!\*/).)*)\*/">
 56        <token type="CommentMultiline"/>
 57      </rule>
 58      <rule pattern="\s*(#|//).*\n">
 59        <token type="CommentSingle"/>
 60      </rule>
 61      <rule pattern="([a-zA-Z]\w*)(\s*)(=(?!&gt;))">
 62        <bygroups>
 63          <token type="NameAttribute"/>
 64          <token type="Text"/>
 65          <token type="Text"/>
 66        </bygroups>
 67      </rule>
 68      <rule pattern="^\s*(provisioner|variable|resource|provider|module|output|data)\b">
 69        <token type="KeywordReserved"/>
 70      </rule>
 71      <rule pattern="(for|in)\b">
 72        <token type="Keyword"/>
 73      </rule>
 74      <rule pattern="(module|count|data|each|var)">
 75        <token type="NameBuiltin"/>
 76      </rule>
 77      <rule pattern="(parseint|signum|floor|ceil|log|max|min|abs|pow)\b">
 78        <token type="NameBuiltin"/>
 79      </rule>
 80      <rule pattern="(trimsuffix|formatlist|trimprefix|trimspace|regexall|replace|indent|strrev|format|substr|chomp|split|title|regex|lower|upper|trim|join)\b">
 81        <token type="NameBuiltin"/>
 82      </rule>
 83      <rule pattern="[^.](setintersection|coalescelist|setsubtract|setproduct|matchkeys|chunklist|transpose|contains|distinct|coalesce|setunion|reverse|flatten|element|compact|lookup|length|concat|values|zipmap|range|merge|slice|index|list|sort|keys|map)\b">
 84        <token type="NameBuiltin"/>
 85      </rule>
 86      <rule pattern="[^.](base64decode|base64encode|base64gzip|jsondecode|jsonencode|yamldecode|yamlencode|csvdecode|urlencode)\b">
 87        <token type="NameBuiltin"/>
 88      </rule>
 89      <rule pattern="(templatefile|filebase64|fileexists|pathexpand|basename|abspath|fileset|dirname|file)\b">
 90        <token type="NameBuiltin"/>
 91      </rule>
 92      <rule pattern="(formatdate|timestamp|timeadd)\b">
 93        <token type="NameBuiltin"/>
 94      </rule>
 95      <rule pattern="(filebase64sha256|filebase64sha512|base64sha512|base64sha256|filesha256|rsadecrypt|filesha512|filesha1|filemd5|uuidv5|bcrypt|sha256|sha512|sha1|uuid|md5)\b">
 96        <token type="NameBuiltin"/>
 97      </rule>
 98      <rule pattern="(cidrnetmask|cidrsubnet|cidrhost)\b">
 99        <token type="NameBuiltin"/>
100      </rule>
101      <rule pattern="(tostring|tonumber|tobool|tolist|tomap|toset|can|try)\b">
102        <token type="NameBuiltin"/>
103      </rule>
104      <rule pattern="=(?!&gt;)|\+|-|\*|\/|:|!|%|&gt;|&lt;(?!&lt;)|&gt;=|&lt;=|==|!=|&amp;&amp;|\||\?">
105        <token type="Operator"/>
106      </rule>
107      <rule pattern="\n|\s+|\\\n">
108        <token type="Text"/>
109      </rule>
110      <rule pattern="[a-zA-Z]\w*">
111        <token type="NameOther"/>
112      </rule>
113      <rule pattern="&#34;">
114        <token type="LiteralStringDouble"/>
115        <push state="string"/>
116      </rule>
117      <rule pattern="(?s)(&lt;&lt;-?)(\w+)(\n\s*(?:(?!\2).)*\s*\n\s*)(\2)">
118        <bygroups>
119          <token type="Operator"/>
120          <token type="Operator"/>
121          <token type="LiteralString"/>
122          <token type="Operator"/>
123        </bygroups>
124      </rule>
125    </state>
126    <state name="declaration">
127      <rule pattern="(\s*)(&#34;(?:\\\\|\\&#34;|[^&#34;])*&#34;)(\s*)">
128        <bygroups>
129          <token type="Text"/>
130          <token type="NameVariable"/>
131          <token type="Text"/>
132        </bygroups>
133      </rule>
134      <rule pattern="\{">
135        <token type="Punctuation"/>
136        <pop depth="1"/>
137      </rule>
138    </state>
139  </rules>
140</lexer>