title: extend sublime text 3's sql syntax
body: <p><a href="https://stackoverflow.com/questions/13314417/how-do-i-add-features-to-a-syntax-definition-in-sublime-text-without-editing-it">This SO question</a> covers the same general problem I have ... except that its answer is not detailed enough for me to understand what I must be doing wrong.</p>
  
  <p>I am wanting to have sql files highlight any "CREATE PROCEDURE" commands.</p>
  
  <p>I have the following file called <code>sql-extension.tmLanguage</code> in <code>Packages\User\</code>:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
  &lt;plist version="1.0"&gt;
  &lt;dict&gt;
      &lt;key&gt;fileTypes&lt;/key&gt;
      &lt;array&gt;
          &lt;string&gt;sql&lt;/string&gt;
      &lt;/array&gt;
      &lt;key&gt;name&lt;/key&gt;
      &lt;string&gt;XYZ&lt;/string&gt;
      &lt;key&gt;patterns&lt;/key&gt;
      &lt;array&gt;
          &lt;dict&gt;
              &lt;key&gt;captures&lt;/key&gt;
              &lt;dict&gt;
                  &lt;key&gt;1&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.create.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;2&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;5&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;entity.name.function.sql&lt;/string&gt;
                  &lt;/dict&gt;
              &lt;/dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:^\s*(create)\s+(procedure)\s+)(['"`]?)(\w+)\4&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;meta.create.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;include&lt;/key&gt;
              &lt;string&gt;#SQL&lt;/string&gt;
          &lt;/dict&gt;
      &lt;/dict&gt;
      &lt;key&gt;scopeName&lt;/key&gt;
      &lt;string&gt;source.sql&lt;/string&gt;
      &lt;key&gt;uuid&lt;/key&gt;
      &lt;string&gt;158e3bda-c76d-439e-b8ea-cb640f0a911c&lt;/string&gt;
  &lt;/dict&gt;
  &lt;/plist&gt;
  </code></pre>
  
  <p>I copied this information from the <code>SQL.tmLanguage</code> file in the <code>SQL</code> package for ST3. Its content is this:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
  &lt;plist version="1.0"&gt;
  &lt;dict&gt;
      &lt;key&gt;fileTypes&lt;/key&gt;
      &lt;array&gt;
          &lt;string&gt;sql&lt;/string&gt;
          &lt;string&gt;ddl&lt;/string&gt;
          &lt;string&gt;dml&lt;/string&gt;
      &lt;/array&gt;
      &lt;key&gt;foldingStartMarker&lt;/key&gt;
      &lt;string&gt;\s*\(\s*$&lt;/string&gt;
      &lt;key&gt;foldingStopMarker&lt;/key&gt;
      &lt;string&gt;^\s*\)&lt;/string&gt;
      &lt;key&gt;keyEquivalent&lt;/key&gt;
      &lt;string&gt;^~S&lt;/string&gt;
      &lt;key&gt;name&lt;/key&gt;
      &lt;string&gt;SQL&lt;/string&gt;
      &lt;key&gt;patterns&lt;/key&gt;
      &lt;array&gt;
          &lt;dict&gt;
              &lt;key&gt;include&lt;/key&gt;
              &lt;string&gt;#comments&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;captures&lt;/key&gt;
              &lt;dict&gt;
                  &lt;key&gt;1&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.create.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;2&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;5&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;entity.name.function.sql&lt;/string&gt;
                  &lt;/dict&gt;
              &lt;/dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:^\s*(create)\s+(aggregate|conversion|database|domain|function|group|(unique\s+)?index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view)\s+)(['"`]?)(\w+)\4&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;meta.create.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;captures&lt;/key&gt;
              &lt;dict&gt;
                  &lt;key&gt;1&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.create.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;2&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.sql&lt;/string&gt;
                  &lt;/dict&gt;
              &lt;/dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:^\s*(drop)\s+(aggregate|conversion|database|domain|function|group|index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view))&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;meta.drop.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;captures&lt;/key&gt;
              &lt;dict&gt;
                  &lt;key&gt;1&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.create.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;2&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.table.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;3&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;entity.name.function.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;4&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.cascade.sql&lt;/string&gt;
                  &lt;/dict&gt;
              &lt;/dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:\s*(drop)\s+(table)\s+(\w+)(\s+cascade)?\b)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;meta.drop.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;captures&lt;/key&gt;
              &lt;dict&gt;
                  &lt;key&gt;1&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.create.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;2&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;keyword.other.table.sql&lt;/string&gt;
                  &lt;/dict&gt;
              &lt;/dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:^\s*(alter)\s+(aggregate|conversion|database|domain|function|group|index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view)\s+)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;meta.alter.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;captures&lt;/key&gt;
              &lt;dict&gt;
                  &lt;key&gt;1&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;storage.type.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;10&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;constant.numeric.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;11&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;storage.type.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;12&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;storage.type.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;13&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;storage.type.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;14&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;constant.numeric.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;15&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;storage.type.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;2&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;storage.type.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;3&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;constant.numeric.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;4&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;storage.type.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;5&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;constant.numeric.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;6&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;storage.type.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;7&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;constant.numeric.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;8&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;constant.numeric.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;9&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;storage.type.sql&lt;/string&gt;
                  &lt;/dict&gt;
              &lt;/dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?xi)
  
                  # normal stuff, capture 1
                   \b(bigint|bigserial|bit|boolean|box|bytea|cidr|circle|date|double\sprecision|inet|int|integer|line|lseg|macaddr|money|oid|path|point|polygon|real|serial|smallint|sysdate|text)\b
  
                  # numeric suffix, capture 2 + 3i
                  |\b(bit\svarying|character\s(?:varying)?|tinyint|var\schar|float|interval)\((\d+)\)
  
                  # optional numeric suffix, capture 4 + 5i
                  |\b(char|number|varchar\d?)\b(?:\((\d+)\))?
  
                  # special case, capture 6 + 7i + 8i
                  |\b(numeric)\b(?:\((\d+),(\d+)\))?
  
                  # special case, captures 9, 10i, 11
                  |\b(times)(?:\((\d+)\))(\swithoutstimeszone\b)?
  
                  # special case, captures 12, 13, 14i, 15
                  |\b(timestamp)(?:(s)\((\d+)\)(\swithoutstimeszone\b)?)?
  
              &lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:\b((?:primary|foreign)\s+key|references|on\sdelete(\s+cascade)?|check|constraint)\b)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;storage.modifier.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;\b\d+\b&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;constant.numeric.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:\b(select(\s+distinct)?|insert\s+(ignore\s+)?into|update|delete|from|set|where|group\sby|or|like|and|union(\s+all)?|having|order\sby|limit|(inner|cross)\s+join|straight_join|(left|right)(\s+outer)?\s+join|natural(\s+(left|right)(\s+outer)?)?\s+join)\b)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.other.DML.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:\b(on|((is\s+)?not\s+)?null)\b)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.other.DDL.create.II.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:\bvalues\b)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.other.DML.II.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:\b(begin(\s+work)?|start\s+transaction|commit(\s+work)?|rollback(\s+work)?)\b)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.other.LUW.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:\b(grant(\swith\sgrant\soption)?|revoke)\b)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.other.authorization.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:\bin\b)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.other.data-integrity.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i:^\s*(comment\s+on\s+(table|column|aggregate|constraint|database|domain|function|index|operator|rule|schema|sequence|trigger|type|view))\s+.*?\s+(is)\s+)&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.other.object-comments.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i)\bAS\b&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.other.alias.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i)\b(DESC|ASC)\b&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.other.order.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;\*&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.operator.star.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;[!&amp;lt;&amp;gt;]?=|&amp;lt;&amp;gt;|&amp;lt;|&amp;gt;&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.operator.comparison.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;-|\+|/&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.operator.math.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;\|\|&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;keyword.operator.concatenator.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;comment&lt;/key&gt;
              &lt;string&gt;List of SQL99 built-in functions from http://www.oreilly.com/catalog/sqlnut/chapter/ch04.html&lt;/string&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i)\b(CURRENT_(DATE|TIME(STAMP)?|USER)|(SESSION|SYSTEM)_USER)\b&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;support.function.scalar.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;comment&lt;/key&gt;
              &lt;string&gt;List of SQL99 built-in functions from http://www.oreilly.com/catalog/sqlnut/chapter/ch04.html&lt;/string&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i)\b(AVG|COUNT|MIN|MAX|SUM)(?=\s*\()&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;support.function.aggregate.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(?i)\b(CONCATENATE|CONVERT|LOWER|SUBSTRING|TRANSLATE|TRIM|UPPER)\b&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;support.function.string.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;captures&lt;/key&gt;
              &lt;dict&gt;
                  &lt;key&gt;1&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;constant.other.database-name.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;key&gt;2&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;constant.other.table-name.sql&lt;/string&gt;
                  &lt;/dict&gt;
              &lt;/dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;\b(\w+?)\.(\w+)\b&lt;/string&gt;
              &lt;!-- &lt;string&gt;(\w+?)\.(\w+)&lt;/string&gt; --&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;include&lt;/key&gt;
              &lt;string&gt;#strings&lt;/string&gt;
          &lt;/dict&gt;
          &lt;dict&gt;
              &lt;key&gt;include&lt;/key&gt;
              &lt;string&gt;#regexps&lt;/string&gt;
          &lt;/dict&gt;
      &lt;/array&gt;
      &lt;key&gt;repository&lt;/key&gt;
      &lt;dict&gt;
          &lt;key&gt;comments&lt;/key&gt;
          &lt;dict&gt;
              &lt;key&gt;patterns&lt;/key&gt;
              &lt;array&gt;
                  &lt;dict&gt;
                      &lt;key&gt;captures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;1&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.comment.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;match&lt;/key&gt;
                      &lt;string&gt;(--).*$\n?&lt;/string&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;comment.line.double-dash.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;dict&gt;
                      &lt;key&gt;captures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;1&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.comment.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;match&lt;/key&gt;
                      &lt;string&gt;(#).*$\n?&lt;/string&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;comment.line.number-sign.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;dict&gt;
                      &lt;key&gt;begin&lt;/key&gt;
                      &lt;string&gt;/\*&lt;/string&gt;
                      &lt;key&gt;captures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.comment.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;end&lt;/key&gt;
                      &lt;string&gt;\*/&lt;/string&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;comment.block.c&lt;/string&gt;
                  &lt;/dict&gt;
              &lt;/array&gt;
          &lt;/dict&gt;
          &lt;key&gt;regexps&lt;/key&gt;
          &lt;dict&gt;
              &lt;key&gt;patterns&lt;/key&gt;
              &lt;array&gt;
                  &lt;dict&gt;
                      &lt;key&gt;begin&lt;/key&gt;
                      &lt;string&gt;/(?=\S.*/)&lt;/string&gt;
                      &lt;key&gt;beginCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.begin.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;end&lt;/key&gt;
                      &lt;string&gt;/&lt;/string&gt;
                      &lt;key&gt;endCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;string.regexp.sql&lt;/string&gt;
                      &lt;key&gt;patterns&lt;/key&gt;
                      &lt;array&gt;
                          &lt;dict&gt;
                              &lt;key&gt;include&lt;/key&gt;
                              &lt;string&gt;#string_interpolation&lt;/string&gt;
                          &lt;/dict&gt;
                          &lt;dict&gt;
                              &lt;key&gt;match&lt;/key&gt;
                              &lt;string&gt;\\/&lt;/string&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;constant.character.escape.slash.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/array&gt;
                  &lt;/dict&gt;
                  &lt;dict&gt;
                      &lt;key&gt;begin&lt;/key&gt;
                      &lt;string&gt;%r\{&lt;/string&gt;
                      &lt;key&gt;beginCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.begin.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;comment&lt;/key&gt;
                      &lt;string&gt;We should probably handle nested bracket pairs!?! -- Allan&lt;/string&gt;
                      &lt;key&gt;end&lt;/key&gt;
                      &lt;string&gt;\}&lt;/string&gt;
                      &lt;key&gt;endCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;string.regexp.modr.sql&lt;/string&gt;
                      &lt;key&gt;patterns&lt;/key&gt;
                      &lt;array&gt;
                          &lt;dict&gt;
                              &lt;key&gt;include&lt;/key&gt;
                              &lt;string&gt;#string_interpolation&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/array&gt;
                  &lt;/dict&gt;
              &lt;/array&gt;
          &lt;/dict&gt;
          &lt;key&gt;string_escape&lt;/key&gt;
          &lt;dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;\\.&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;constant.character.escape.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;key&gt;string_interpolation&lt;/key&gt;
          &lt;dict&gt;
              &lt;key&gt;captures&lt;/key&gt;
              &lt;dict&gt;
                  &lt;key&gt;1&lt;/key&gt;
                  &lt;dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                  &lt;/dict&gt;
              &lt;/dict&gt;
              &lt;key&gt;match&lt;/key&gt;
              &lt;string&gt;(#\{)([^\}]*)(\})&lt;/string&gt;
              &lt;key&gt;name&lt;/key&gt;
              &lt;string&gt;string.interpolated.sql&lt;/string&gt;
          &lt;/dict&gt;
          &lt;key&gt;strings&lt;/key&gt;
          &lt;dict&gt;
              &lt;key&gt;patterns&lt;/key&gt;
              &lt;array&gt;
                  &lt;dict&gt;
                      &lt;key&gt;captures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;1&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.begin.sql&lt;/string&gt;
                          &lt;/dict&gt;
                          &lt;key&gt;3&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;comment&lt;/key&gt;
                      &lt;string&gt;this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.&lt;/string&gt;
                      &lt;key&gt;match&lt;/key&gt;
                      &lt;string&gt;(')[^'\\]*(')&lt;/string&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;string.quoted.single.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;dict&gt;
                      &lt;key&gt;begin&lt;/key&gt;
                      &lt;string&gt;'&lt;/string&gt;
                      &lt;key&gt;beginCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.begin.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;end&lt;/key&gt;
                      &lt;string&gt;'&lt;/string&gt;
                      &lt;key&gt;endCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;string.quoted.single.sql&lt;/string&gt;
                      &lt;key&gt;patterns&lt;/key&gt;
                      &lt;array&gt;
                          &lt;dict&gt;
                              &lt;key&gt;include&lt;/key&gt;
                              &lt;string&gt;#string_escape&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/array&gt;
                  &lt;/dict&gt;
                  &lt;dict&gt;
                      &lt;key&gt;captures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;1&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.begin.sql&lt;/string&gt;
                          &lt;/dict&gt;
                          &lt;key&gt;3&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;comment&lt;/key&gt;
                      &lt;string&gt;this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.&lt;/string&gt;
                      &lt;key&gt;match&lt;/key&gt;
                      &lt;string&gt;(`)[^`\\]*(`)&lt;/string&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;string.quoted.other.backtick.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;dict&gt;
                      &lt;key&gt;begin&lt;/key&gt;
                      &lt;string&gt;`&lt;/string&gt;
                      &lt;key&gt;beginCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.begin.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;end&lt;/key&gt;
                      &lt;string&gt;`&lt;/string&gt;
                      &lt;key&gt;endCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;string.quoted.other.backtick.sql&lt;/string&gt;
                      &lt;key&gt;patterns&lt;/key&gt;
                      &lt;array&gt;
                          &lt;dict&gt;
                              &lt;key&gt;include&lt;/key&gt;
                              &lt;string&gt;#string_escape&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/array&gt;
                  &lt;/dict&gt;
                  &lt;dict&gt;
                      &lt;key&gt;captures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;1&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.begin.sql&lt;/string&gt;
                          &lt;/dict&gt;
                          &lt;key&gt;3&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;comment&lt;/key&gt;
                      &lt;string&gt;this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.&lt;/string&gt;
                      &lt;key&gt;match&lt;/key&gt;
                      &lt;string&gt;(")[^"#]*(")&lt;/string&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;string.quoted.double.sql&lt;/string&gt;
                  &lt;/dict&gt;
                  &lt;dict&gt;
                      &lt;key&gt;begin&lt;/key&gt;
                      &lt;string&gt;"&lt;/string&gt;
                      &lt;key&gt;beginCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.begin.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;end&lt;/key&gt;
                      &lt;string&gt;"&lt;/string&gt;
                      &lt;key&gt;endCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;string.quoted.double.sql&lt;/string&gt;
                      &lt;key&gt;patterns&lt;/key&gt;
                      &lt;array&gt;
                          &lt;dict&gt;
                              &lt;key&gt;include&lt;/key&gt;
                              &lt;string&gt;#string_interpolation&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/array&gt;
                  &lt;/dict&gt;
                  &lt;dict&gt;
                      &lt;key&gt;begin&lt;/key&gt;
                      &lt;string&gt;%\{&lt;/string&gt;
                      &lt;key&gt;beginCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.begin.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;end&lt;/key&gt;
                      &lt;string&gt;\}&lt;/string&gt;
                      &lt;key&gt;endCaptures&lt;/key&gt;
                      &lt;dict&gt;
                          &lt;key&gt;0&lt;/key&gt;
                          &lt;dict&gt;
                              &lt;key&gt;name&lt;/key&gt;
                              &lt;string&gt;punctuation.definition.string.end.sql&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/dict&gt;
                      &lt;key&gt;name&lt;/key&gt;
                      &lt;string&gt;string.other.quoted.brackets.sql&lt;/string&gt;
                      &lt;key&gt;patterns&lt;/key&gt;
                      &lt;array&gt;
                          &lt;dict&gt;
                              &lt;key&gt;include&lt;/key&gt;
                              &lt;string&gt;#string_interpolation&lt;/string&gt;
                          &lt;/dict&gt;
                      &lt;/array&gt;
                  &lt;/dict&gt;
              &lt;/array&gt;
          &lt;/dict&gt;
      &lt;/dict&gt;
      &lt;key&gt;scopeName&lt;/key&gt;
      &lt;string&gt;source.sql&lt;/string&gt;
      &lt;key&gt;uuid&lt;/key&gt;
      &lt;string&gt;C49120AC-6ECC-11D9-ACC8-000D93589AF6&lt;/string&gt;
  &lt;/dict&gt;
  &lt;/plist&gt;
  </code></pre>
  
  <p>I got the uuid from typing the following in the console:</p>
  
  <pre><code>import uuid
  u = uuid.uuid4()
  </code></pre>
  
  <p>and then copy/pasting the UUID created into the file.</p>
  
  <p>After saving the file and viewing a sql file, I get this (notice that the words "CREATE PROCEDURE" are not highlighted):</p>
  
  <p><img src="https://i.stack.imgur.com/Blcqm.png" alt="enter image description here"></p>
  
  <p>So what am I doing wrong?</p>
  
  <hr>
  
  <p>EXTRA NOTE:</p>
  
  <p>the AAAPackageDev package does not seem to work in ST3. All the menu options are greyed out.</p>