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