1<lexer>
  2  <config>
  3    <name>YAML</name>
  4    <alias>yaml</alias>
  5    <filename>*.yaml</filename>
  6    <filename>*.yml</filename>
  7    <mime_type>text/x-yaml</mime_type>
  8  </config>
  9  <rules>
 10    <state name="root">
 11      <rule>
 12        <include state="whitespace"/>
 13      </rule>
 14      <rule pattern="^---">
 15        <token type="NameNamespace"/>
 16      </rule>
 17      <rule pattern="^\.\.\.">
 18        <token type="NameNamespace"/>
 19      </rule>
 20      <rule pattern="[\n?]?\s*- ">
 21        <token type="Text"/>
 22      </rule>
 23      <rule pattern="#.*$">
 24        <token type="Comment"/>
 25      </rule>
 26      <rule pattern="!![^\s]+">
 27        <token type="CommentPreproc"/>
 28      </rule>
 29      <rule pattern="&[^\s]+">
 30        <token type="CommentPreproc"/>
 31      </rule>
 32      <rule pattern="\*[^\s]+">
 33        <token type="CommentPreproc"/>
 34      </rule>
 35      <rule pattern="^%include\s+[^\n\r]+">
 36        <token type="CommentPreproc"/>
 37      </rule>
 38      <rule>
 39        <include state="key"/>
 40      </rule>
 41      <rule>
 42        <include state="value"/>
 43      </rule>
 44      <rule pattern="[?:,\[\]]">
 45        <token type="Punctuation"/>
 46      </rule>
 47      <rule pattern=".">
 48        <token type="Text"/>
 49      </rule>
 50    </state>
 51    <state name="value">
 52      <rule pattern="([>|](?:[+-])?)(\n(^ {1,})(?:(?:.*\n*(?:^\3 *).*)+|.*))">
 53        <bygroups>
 54          <token type="Punctuation"/>
 55          <token type="LiteralStringDoc"/>
 56          <token type="Ignore"/>
 57        </bygroups>
 58      </rule>
 59      <rule pattern="(false|False|FALSE|true|True|TRUE|null|Off|off|yes|Yes|YES|OFF|On|ON|no|No|on|NO|n|N|Y|y)\b">
 60        <token type="KeywordConstant"/>
 61      </rule>
 62      <rule pattern=""(?:\\.|[^"])*"">
 63        <token type="LiteralStringDouble"/>
 64      </rule>
 65      <rule pattern="'(?:\\.|[^'])*'">
 66        <token type="LiteralStringSingle"/>
 67      </rule>
 68      <rule pattern="\d\d\d\d-\d\d-\d\d([T ]\d\d:\d\d:\d\d(\.\d+)?(Z|\s+[-+]\d+)?)?">
 69        <token type="LiteralDate"/>
 70      </rule>
 71      <rule pattern="\b[+\-]?(0x[\da-f]+|0o[0-7]+|(\d+\.?\d*|\.?\d+)(e[\+\-]?\d+)?|\.inf|\.nan)\b">
 72        <token type="LiteralNumber"/>
 73      </rule>
 74      <rule pattern="([^\{\}\[\]\?,\:\!\-\*&\@].*)( )+(#.*)">
 75        <bygroups>
 76          <token type="Literal"/>
 77          <token type="TextWhitespace"/>
 78          <token type="Comment"/>
 79        </bygroups>
 80      </rule>
 81      <rule pattern="[^\{\}\[\]\?,\:\!\-\*&\@].*">
 82        <token type="Literal"/>
 83      </rule>
 84    </state>
 85    <state name="key">
 86      <rule pattern=""[^"\n].*": ">
 87        <token type="NameTag"/>
 88      </rule>
 89      <rule pattern="(-)( )([^"\n{]*)(:)( )">
 90        <bygroups>
 91          <token type="Punctuation"/>
 92          <token type="TextWhitespace"/>
 93          <token type="NameTag"/>
 94          <token type="Punctuation"/>
 95          <token type="TextWhitespace"/>
 96        </bygroups>
 97      </rule>
 98      <rule pattern="([^"\n{]*)(:)( )">
 99        <bygroups>
100          <token type="NameTag"/>
101          <token type="Punctuation"/>
102          <token type="TextWhitespace"/>
103        </bygroups>
104      </rule>
105      <rule pattern="([^"\n{]*)(:)(\n)">
106        <bygroups>
107          <token type="NameTag"/>
108          <token type="Punctuation"/>
109          <token type="TextWhitespace"/>
110        </bygroups>
111      </rule>
112    </state>
113    <state name="whitespace">
114      <rule pattern="\s+">
115        <token type="TextWhitespace"/>
116      </rule>
117      <rule pattern="\n+">
118        <token type="TextWhitespace"/>
119      </rule>
120    </state>
121  </rules>
122</lexer>