First version of editor for Sifu langauge

--- grammars/sifu.cson
+++ grammars/sifu.cson
@@ -1,5 +1,6 @@
+
 'scopeName': 'source.sifu'
-'name': 'PackageName'
+'name': 'Sifu language'
 'fileTypes': [
   'sifu',
   'sifu.debug'
@@ -16,14 +17,19934 @@

 'repository':
   'comments':
-    'match': '#.*\\b'
+    'match': '#.*'
     'name': 'comment'

+  'api':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(api))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'api'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#restSimple'
+          }
+          {
+            'include': '#version'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dto'
+          }
+          {
+            'include': '#customEndpoint'
+          }
+          {
+            'include': '#findEndpoint'
+          }
+          {
+            'include': '#readEndpoint'
+          }
+          {
+            'include': '#pagedEndpoint'
+          }
+          {
+            'include': '#createEndpoint'
+          }
+          {
+            'include': '#updateEndpoint'
+          }
+          {
+            'include': '#deleteEndpoint'
+          }
+          {
+            'include': '#countEndpoint'
+          }
+          {
+            'include': '#crudEndpoint'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'binaryCondition':
+    'begin': '(?i:\\s*((optional)?)\\s*((mandatory)?)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)\\s*((==|!=|>=|>|<=|<|like|in))\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'option'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'option'
+      '4':
+        'name': 'keyword'
+      '5':
+        'name': 'constant'
+      '6':
+        'name': 'or'
+      '7':
+        'name': 'markup.inserted'
+      '8':
+        'name': 'constant'
+
+    'name': 'binaryCondition'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'bind':
+    'begin': '(?i:\\s*(bind))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'bind'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'bindParamsProperty':
+    'begin': '(?i:\\s*(bind)\\s*(params)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'repeat'
+      '4':
+        'name': 'composit'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'bindParamsProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'bindUiModelProperty':
+    'begin': '(?i:\\s*(bind)\\s*(model)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'repeat'
+      '4':
+        'name': 'composit'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'bindUiModelProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'bindItemProperty':
+    'begin': '(?i:\\s*(bind)\\s*(item)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'repeat'
+      '4':
+        'name': 'composit'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'bindItemProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'bindPrincipalProperty':
+    'begin': '(?i:\\s*(bind)\\s*(principal)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'repeat'
+      '4':
+        'name': 'composit'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'bindPrincipalProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'callEndpoint':
+    'begin': '(?i:\\s*(call)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'callEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'cardinality':
+    'begin': '(?i:\\s*((oneToOne|oneToMany|manyToOne|manyToMany))\\s*(([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)?))'
+    'beginCaptures':
+      '1':
+        'name': 'or'
+      '2':
+        'name': 'markup.inserted'
+      '3':
+        'name': 'option'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'cardinality'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'client':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(client))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'client'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#clientTemplate'
+          }
+          {
+            'include': '#path'
+          }
+          {
+            'include': '#connectedToConnectedToEndpoint'
+          }
+          {
+            'include': '#connectedTo'
+          }
+          {
+            'include': '#i18nLanguageElement'
+          }
+          {
+            'include': '#i18n'
+          }
+          {
+            'include': '#home'
+          }
+          {
+            'include': '#loggedIn'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#page'
+          }
+          {
+            'include': '#event'
+          }
+          {
+            'include': '#form'
+          }
+          {
+            'include': '#view'
+          }
+          {
+            'include': '#list'
+          }
+          {
+            'include': '#multiSelect'
+          }
+          {
+            'include': '#table'
+          }
+          {
+            'include': '#dropDown'
+          }
+          {
+            'include': '#container'
+          }
+          {
+            'include': '#navigation'
+          }
+          {
+            'include': '#unidentifiedComponent'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'clientTemplate':
+    'begin': '(?i:\\s*(template)\\s*((js-angular|android|ios)))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'or'
+      '3':
+        'name': 'markup.inserted'
+
+    'name': 'clientTemplate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#simpleObject'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'close':
+    'begin': '(?i:\\s*(close))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'close'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'compositeCondition':
+    'begin': '(?i:\\s*(()\\s*(object)\\s*()))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'object'
+      '3':
+        'name': 'keyword'
+
+    'name': 'compositeCondition'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'conditionExpression':
+    'begin': '(?i:\\s*((object|object|object))\\s*(((#.*s*(and|or)s*#.*s*(object|object|object)))?))'
+    'beginCaptures':
+      '1':
+        'name': 'or'
+      '2':
+        'name': 'object'
+      '3':
+        'name': 'repeat'
+      '4':
+        'name': 'composit'
+      '5':
+        'name': 'or'
+      '6':
+        'name': 'markup.inserted'
+
+    'name': 'conditionExpression'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'connectedToEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'support.type'
+      '2':
+        'name': 'support.type'
+
+    'name': 'connectedToEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'connectedTo':
+    'begin': '(?i:\\s*(connectedTo))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'connectedTo'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#connectedToEndpoint'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'connectedToConnectedToEndpoint':
+    'begin': '(?i:\\s*(connectedTo)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'connectedToConnectedToEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'container':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(container))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'container'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'countEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(count))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'countEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#restSimple'
+          }
+          {
+            'include': '#endpointQueryCount'
+          }
+          {
+            'include': '#endpointQueryInlineCount'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#public'
+          }
+          {
+            'include': '#endpointErrorsIdentifierElement'
+          }
+          {
+            'include': '#endpointErrors'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'createEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(create))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'createEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#restSimple'
+          }
+          {
+            'include': '#endpointQueryFind'
+          }
+          {
+            'include': '#modelSetting'
+          }
+          {
+            'include': '#requestInlineDto'
+          }
+          {
+            'include': '#requestDto'
+          }
+          {
+            'include': '#responseInlineDto'
+          }
+          {
+            'include': '#responseDto'
+          }
+          {
+            'include': '#stub'
+          }
+          {
+            'include': '#responseMappedResponseMappedProperty'
+          }
+          {
+            'include': '#responseMapped'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#public'
+          }
+          {
+            'include': '#endpointErrorsIdentifierElement'
+          }
+          {
+            'include': '#endpointErrors'
+          }
+          {
+            'include': '#version'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#crudPropertyInt'
+          }
+          {
+            'include': '#crudPropertyText'
+          }
+          {
+            'include': '#crudPropertyBoolean'
+          }
+          {
+            'include': '#crudPropertyDecimal'
+          }
+          {
+            'include': '#crudPropertyDateTime'
+          }
+          {
+            'include': '#crudPropertyDate'
+          }
+          {
+            'include': '#crudPropertyTime'
+          }
+          {
+            'include': '#crudPropertyUUID'
+          }
+          {
+            'include': '#crudPropertyBytes'
+          }
+          {
+            'include': '#crudPropertyInlineEnum'
+          }
+          {
+            'include': '#crudPropertyInlineDto'
+          }
+          {
+            'include': '#crudPropertyCopy'
+          }
+          {
+            'include': '#crudPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(crud))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'crudEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#modelSetting'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#public'
+          }
+          {
+            'include': '#restSimple'
+          }
+          {
+            'include': '#version'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#crudPropertyInt'
+          }
+          {
+            'include': '#crudPropertyText'
+          }
+          {
+            'include': '#crudPropertyBoolean'
+          }
+          {
+            'include': '#crudPropertyDecimal'
+          }
+          {
+            'include': '#crudPropertyDateTime'
+          }
+          {
+            'include': '#crudPropertyDate'
+          }
+          {
+            'include': '#crudPropertyTime'
+          }
+          {
+            'include': '#crudPropertyUUID'
+          }
+          {
+            'include': '#crudPropertyBytes'
+          }
+          {
+            'include': '#crudPropertyInlineEnum'
+          }
+          {
+            'include': '#crudPropertyInlineDto'
+          }
+          {
+            'include': '#crudPropertyCopy'
+          }
+          {
+            'include': '#crudPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyBoolean':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(boolean))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyBoolean'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#defaultBoolean'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyBytes':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(bytes))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyBytes'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyCopy':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*((mandatory)?)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'option'
+      '6':
+        'name': 'keyword'
+      '7':
+        'name': 'punctuation.definition.identity'
+      '8':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'crudPropertyCopy'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#minAny'
+          }
+          {
+            'include': '#maxAny'
+          }
+          {
+            'include': '#saveValue'
+          }
+          {
+            'include': '#updateValue'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'include': '#scale'
+          }
+          {
+            'include': '#precision'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyDate':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(date))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyDate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minDate'
+          }
+          {
+            'include': '#maxDate'
+          }
+          {
+            'include': '#defaultDate'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyDateTime':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(datetime))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyDateTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minDateTime'
+          }
+          {
+            'include': '#maxDateTime'
+          }
+          {
+            'include': '#defaultDateTime'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyDecimal':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(decimal))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minDecimal'
+          }
+          {
+            'include': '#maxDecimal'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultDecimal'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'include': '#scale'
+          }
+          {
+            'include': '#precision'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyInlineDto':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(dto))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyInlineDto'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoPropertyInt'
+          }
+          {
+            'include': '#dtoPropertyText'
+          }
+          {
+            'include': '#dtoPropertyBoolean'
+          }
+          {
+            'include': '#dtoPropertyDecimal'
+          }
+          {
+            'include': '#dtoPropertyDateTime'
+          }
+          {
+            'include': '#dtoPropertyDate'
+          }
+          {
+            'include': '#dtoPropertyTime'
+          }
+          {
+            'include': '#dtoPropertyUUID'
+          }
+          {
+            'include': '#dtoPropertyBytes'
+          }
+          {
+            'include': '#dtoPropertyInlineEnum'
+          }
+          {
+            'include': '#dtoPropertyDtoInline'
+          }
+          {
+            'include': '#dtoPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyInlineEnum':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(enum))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyInlineEnum'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultEnum'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#enumValue'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyInt':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(integer))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyInt'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultNumber'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyText':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(text))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyText'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultText'
+          }
+          {
+            'include': '#regex'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyTime':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(time))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minTime'
+          }
+          {
+            'include': '#maxTime'
+          }
+          {
+            'include': '#defaultTime'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyUUID':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(bytes))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'crudPropertyUUID'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudPropertyUnidentified':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*|[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'or'
+      '6':
+        'name': 'support.type'
+      '7':
+        'name': 'support.type'
+
+    'name': 'crudPropertyUnidentified'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minAny'
+          }
+          {
+            'include': '#maxAny'
+          }
+          {
+            'include': '#defaultAny'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#regex'
+          }
+          {
+            'include': '#crudVisible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudTypeElement':
+    'begin': '(?i:\\s*((create|read|update|delete)))'
+    'beginCaptures':
+      '1':
+        'name': 'or'
+      '2':
+        'name': 'markup.inserted'
+
+    'name': 'crudTypeElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'crudVisible':
+    'begin': '(?i:\\s*(visible))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'crudVisible'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#crudTypeElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'currencies':
+    'begin': '(?i:\\s*(currencies))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'currencies'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#currencyTypeElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'currenciesCurrencyTypeElement':
+    'begin': '(?i:\\s*(currencies)\\s*((EUR|RSD|USD|HRK)))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'or'
+      '3':
+        'name': 'markup.inserted'
+
+    'name': 'currenciesCurrencyTypeElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'currencyTypeElement':
+    'begin': '(?i:\\s*((EUR|RSD|USD|HRK)))'
+    'beginCaptures':
+      '1':
+        'name': 'or'
+      '2':
+        'name': 'markup.inserted'
+
+    'name': 'currencyTypeElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'customEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(custom))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'customEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#requestInlineDto'
+          }
+          {
+            'include': '#requestDto'
+          }
+          {
+            'include': '#responseInlineDto'
+          }
+          {
+            'include': '#responseDto'
+          }
+          {
+            'include': '#responseMappedResponseMappedProperty'
+          }
+          {
+            'include': '#responseMapped'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#public'
+          }
+          {
+            'include': '#endpointErrorsIdentifierElement'
+          }
+          {
+            'include': '#endpointErrors'
+          }
+          {
+            'include': '#rest'
+          }
+          {
+            'include': '#version'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultAny':
+    'begin': '(?i:\\s*(default)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'defaultAny'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultBoolean':
+    'begin': '(?i:\\s*(default)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'defaultBoolean'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultDate':
+    'begin': '(?i:\\s*(default)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'defaultDate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultDateTime':
+    'begin': '(?i:\\s*(default)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'defaultDateTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultDecimal':
+    'begin': '(?i:\\s*(default)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'defaultDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultEnum':
+    'begin': '(?i:\\s*(default)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'defaultEnum'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultModelType':
+    'begin': '(?i:\\s*(default model type)\\s*((sql|nosql)))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'or'
+      '3':
+        'name': 'markup.inserted'
+
+    'name': 'defaultModelType'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultNumber':
+    'begin': '(?i:\\s*(default)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'defaultNumber'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultText':
+    'begin': '(?i:\\s*(default)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'defaultText'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'defaultTime':
+    'begin': '(?i:\\s*(default)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'defaultTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'deleteEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(delete))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'deleteEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#restSimple'
+          }
+          {
+            'include': '#endpointQueryFind'
+          }
+          {
+            'include': '#endpointQueryInlineFind'
+          }
+          {
+            'include': '#endpointQueryInlineCount'
+          }
+          {
+            'include': '#endpointQueryCount'
+          }
+          {
+            'include': '#endpointQueryDelete'
+          }
+          {
+            'include': '#endpointQueryInlineDelete'
+          }
+          {
+            'include': '#responseMappedResponseMappedProperty'
+          }
+          {
+            'include': '#responseMapped'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#public'
+          }
+          {
+            'include': '#endpointErrorsIdentifierElement'
+          }
+          {
+            'include': '#endpointErrors'
+          }
+          {
+            'include': '#version'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'developers':
+    'begin': '(?i:\\s*(developer))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'developers'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#identifierElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'developersIdentifierElement':
+    'begin': '(?i:\\s*(developer)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'developersIdentifierElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dropConstant':
+    'begin': '(?i:\\s*(drop)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'dropConstant'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dropDown':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(dropdown))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'dropDown'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'include': '#enumSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSelectGoToPage'
+          }
+          {
+            'include': '#onSelectFireEvent'
+          }
+          {
+            'include': '#onSelectClose'
+          }
+          {
+            'include': '#onSelectReload'
+          }
+          {
+            'include': '#onSelectReplace'
+          }
+          {
+            'include': '#onSelectOpen'
+          }
+          {
+            'include': '#onSelectShow'
+          }
+          {
+            'include': '#onSelectHide'
+          }
+          {
+            'include': '#onSelectCallEndpoint'
+          }
+          {
+            'include': '#onSelect'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dropVariable':
+    'begin': '(?i:\\s*(drop)\\s*(([a-zA-Z][_a-zA-Z0-9]*)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'dropVariable'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dto':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(dto))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'dto'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#modelSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoPropertyInt'
+          }
+          {
+            'include': '#dtoPropertyText'
+          }
+          {
+            'include': '#dtoPropertyBoolean'
+          }
+          {
+            'include': '#dtoPropertyDecimal'
+          }
+          {
+            'include': '#dtoPropertyDateTime'
+          }
+          {
+            'include': '#dtoPropertyDate'
+          }
+          {
+            'include': '#dtoPropertyTime'
+          }
+          {
+            'include': '#dtoPropertyUUID'
+          }
+          {
+            'include': '#dtoPropertyBytes'
+          }
+          {
+            'include': '#dtoPropertyInlineEnum'
+          }
+          {
+            'include': '#dtoPropertyDtoInline'
+          }
+          {
+            'include': '#dtoPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyBoolean':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(boolean))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyBoolean'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#defaultBoolean'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyBytes':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(bytes))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyBytes'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyDate':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(date))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyDate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minDate'
+          }
+          {
+            'include': '#maxDate'
+          }
+          {
+            'include': '#defaultDate'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyDateTime':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(datetime))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyDateTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minDateTime'
+          }
+          {
+            'include': '#maxDateTime'
+          }
+          {
+            'include': '#defaultDateTime'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyDecimal':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(decimal))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minDecimal'
+          }
+          {
+            'include': '#maxDecimal'
+          }
+          {
+            'include': '#defaultDecimal'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#scale'
+          }
+          {
+            'include': '#precision'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyDtoInline':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(dto))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyDtoInline'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#modelSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoPropertyInt'
+          }
+          {
+            'include': '#dtoPropertyText'
+          }
+          {
+            'include': '#dtoPropertyBoolean'
+          }
+          {
+            'include': '#dtoPropertyDecimal'
+          }
+          {
+            'include': '#dtoPropertyDateTime'
+          }
+          {
+            'include': '#dtoPropertyDate'
+          }
+          {
+            'include': '#dtoPropertyTime'
+          }
+          {
+            'include': '#dtoPropertyUUID'
+          }
+          {
+            'include': '#dtoPropertyBytes'
+          }
+          {
+            'include': '#dtoPropertyInlineEnum'
+          }
+          {
+            'include': '#dtoPropertyDtoInline'
+          }
+          {
+            'include': '#dtoPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyInlineEnum':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(enum))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyInlineEnum'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#defaultEnum'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#enumValue'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyInt':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(integer))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyInt'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#defaultNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyText':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(text))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyText'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#regex'
+          }
+          {
+            'include': '#defaultText'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyTime':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(time))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minTime'
+          }
+          {
+            'include': '#maxTime'
+          }
+          {
+            'include': '#defaultTime'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyUUID':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(uuid))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyUUID'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoPropertyUnidentified':
+    'begin': '(?i:\\s*(([a-zA-Z][_a-zA-Z0-9]*)?)\\s*(((optional|list))?)\\s*((mandatory)?)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*((dto)?))'
+    'beginCaptures':
+      '1':
+        'name': 'option'
+      '2':
+        'name': 'punctuation.definition.identity'
+      '3':
+        'name': 'repeat'
+      '4':
+        'name': 'or'
+      '5':
+        'name': 'markup.inserted'
+      '6':
+        'name': 'option'
+      '7':
+        'name': 'keyword'
+      '8':
+        'name': 'punctuation.definition.identity'
+      '9':
+        'name': 'punctuation.definition.identity'
+      '10':
+        'name': 'option'
+      '11':
+        'name': 'keyword'
+
+    'name': 'dtoPropertyUnidentified'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minAny'
+          }
+          {
+            'include': '#maxAny'
+          }
+          {
+            'include': '#regex'
+          }
+          {
+            'include': '#defaultAny'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#modelSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoPropertyInt'
+          }
+          {
+            'include': '#dtoPropertyText'
+          }
+          {
+            'include': '#dtoPropertyBoolean'
+          }
+          {
+            'include': '#dtoPropertyDecimal'
+          }
+          {
+            'include': '#dtoPropertyDateTime'
+          }
+          {
+            'include': '#dtoPropertyDate'
+          }
+          {
+            'include': '#dtoPropertyTime'
+          }
+          {
+            'include': '#dtoPropertyUUID'
+          }
+          {
+            'include': '#dtoPropertyBytes'
+          }
+          {
+            'include': '#dtoPropertyInlineEnum'
+          }
+          {
+            'include': '#dtoPropertyDtoInline'
+          }
+          {
+            'include': '#dtoPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'dtoSetting':
+    'begin': '(?i:\\s*(dto)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'dtoSetting'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'embeddedModel':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(embedded))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'embeddedModel'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#modelPropertyInt'
+          }
+          {
+            'include': '#modelPropertyText'
+          }
+          {
+            'include': '#modelPropertyBoolean'
+          }
+          {
+            'include': '#modelPropertyDateTime'
+          }
+          {
+            'include': '#modelPropertyBytes'
+          }
+          {
+            'include': '#modelPropertyDate'
+          }
+          {
+            'include': '#modelPropertyTime'
+          }
+          {
+            'include': '#modelPropertyDecimal'
+          }
+          {
+            'include': '#modelPropertyUUID'
+          }
+          {
+            'include': '#modelPropertyEnumInline'
+          }
+          {
+            'include': '#modelPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointErrors':
+    'begin': '(?i:\\s*(errors))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'endpointErrors'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#identifierElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointErrorsIdentifierElement':
+    'begin': '(?i:\\s*(errors)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'endpointErrorsIdentifierElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointQueryCount':
+    'begin': '(?i:\\s*(query)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'endpointQueryCount'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointQueryDelete':
+    'begin': '(?i:\\s*(query)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'endpointQueryDelete'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointQueryFind':
+    'begin': '(?i:\\s*(query)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'endpointQueryFind'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointQueryInlineCount':
+    'begin': '(?i:\\s*(object))'
+    'beginCaptures':
+      '1':
+        'name': 'object'
+
+    'name': 'endpointQueryInlineCount'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointQueryInlineDelete':
+    'begin': '(?i:\\s*(object))'
+    'beginCaptures':
+      '1':
+        'name': 'object'
+
+    'name': 'endpointQueryInlineDelete'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointQueryInlineFind':
+    'begin': '(?i:\\s*(object))'
+    'beginCaptures':
+      '1':
+        'name': 'object'
+
+    'name': 'endpointQueryInlineFind'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointQueryInlineGet':
+    'begin': '(?i:\\s*(object))'
+    'beginCaptures':
+      '1':
+        'name': 'object'
+
+    'name': 'endpointQueryInlineGet'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointQueryInlineSelect':
+    'begin': '(?i:\\s*(object))'
+    'beginCaptures':
+      '1':
+        'name': 'object'
+
+    'name': 'endpointQueryInlineSelect'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'endpointQuerySelect':
+    'begin': '(?i:\\s*(query)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'endpointQuerySelect'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'enum':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(enum))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'enum'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#enumValue'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'enumSetting':
+    'begin': '(?i:\\s*(enum)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'enumSetting'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'enumValue':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(([a-zA-Z][_a-zA-Z0-9]*)?))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'enumValue'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'error':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((unauthorized|dataConstraint|badRequest|internalError)))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'or'
+      '3':
+        'name': 'markup.inserted'
+
+    'name': 'error'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'event':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(event))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'event'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoPropertyInt'
+          }
+          {
+            'include': '#dtoPropertyText'
+          }
+          {
+            'include': '#dtoPropertyBoolean'
+          }
+          {
+            'include': '#dtoPropertyDecimal'
+          }
+          {
+            'include': '#dtoPropertyDateTime'
+          }
+          {
+            'include': '#dtoPropertyDate'
+          }
+          {
+            'include': '#dtoPropertyTime'
+          }
+          {
+            'include': '#dtoPropertyUUID'
+          }
+          {
+            'include': '#dtoPropertyBytes'
+          }
+          {
+            'include': '#dtoPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'eventProperty':
+    'begin': '(?i:\\s*(event)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'composit'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'eventProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'fileStorage':
+    'begin': '(?i:\\s*(file storage)\\s*((db|fs|aws)))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'or'
+      '3':
+        'name': 'markup.inserted'
+
+    'name': 'fileStorage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'findEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(find))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'findEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#restSimple'
+          }
+          {
+            'include': '#endpointQueryFind'
+          }
+          {
+            'include': '#endpointQueryInlineFind'
+          }
+          {
+            'include': '#responseMappedResponseMappedProperty'
+          }
+          {
+            'include': '#responseMapped'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#public'
+          }
+          {
+            'include': '#endpointErrorsIdentifierElement'
+          }
+          {
+            'include': '#endpointErrors'
+          }
+          {
+            'include': '#version'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'fireEvent':
+    'begin': '(?i:\\s*(fire)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'fireEvent'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'form':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(form))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'form'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'include': '#submitEndpointSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'goToPage':
+    'begin': '(?i:\\s*(goto)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'goToPage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'hidden':
+    'begin': '(?i:\\s*(hidden))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'hidden'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'hide':
+    'begin': '(?i:\\s*(hide))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'hide'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'home':
+    'begin': '(?i:\\s*(home)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'home'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'i18n':
+    'begin': '(?i:\\s*(i18n))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'i18n'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#languageElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'i18nLanguageElement':
+    'begin': '(?i:\\s*(i18n)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'i18nLanguageElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'identifierElement':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'identifierElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'indexed':
+    'begin': '(?i:\\s*(indexed))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'indexed'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'inlineContainer':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(container))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'inlineContainer'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'inlineDropDown':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(dropdown))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'inlineDropDown'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'include': '#enumSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSelectGoToPage'
+          }
+          {
+            'include': '#onSelectFireEvent'
+          }
+          {
+            'include': '#onSelectClose'
+          }
+          {
+            'include': '#onSelectReload'
+          }
+          {
+            'include': '#onSelectReplace'
+          }
+          {
+            'include': '#onSelectOpen'
+          }
+          {
+            'include': '#onSelectShow'
+          }
+          {
+            'include': '#onSelectHide'
+          }
+          {
+            'include': '#onSelectCallEndpoint'
+          }
+          {
+            'include': '#onSelect'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'inlineForm':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(form))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'inlineForm'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'include': '#submitEndpointSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'inlineList':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(list))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'inlineList'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSelectGoToPage'
+          }
+          {
+            'include': '#onSelectFireEvent'
+          }
+          {
+            'include': '#onSelectClose'
+          }
+          {
+            'include': '#onSelectReload'
+          }
+          {
+            'include': '#onSelectReplace'
+          }
+          {
+            'include': '#onSelectOpen'
+          }
+          {
+            'include': '#onSelectShow'
+          }
+          {
+            'include': '#onSelectHide'
+          }
+          {
+            'include': '#onSelectCallEndpoint'
+          }
+          {
+            'include': '#onSelect'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'inlineMultiSelect':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(multiselect))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'inlineMultiSelect'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#enumSetting'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSelectGoToPage'
+          }
+          {
+            'include': '#onSelectFireEvent'
+          }
+          {
+            'include': '#onSelectClose'
+          }
+          {
+            'include': '#onSelectReload'
+          }
+          {
+            'include': '#onSelectReplace'
+          }
+          {
+            'include': '#onSelectOpen'
+          }
+          {
+            'include': '#onSelectShow'
+          }
+          {
+            'include': '#onSelectHide'
+          }
+          {
+            'include': '#onSelectCallEndpoint'
+          }
+          {
+            'include': '#onSelect'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'inlineTable':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(table))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'inlineTable'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSelectGoToPage'
+          }
+          {
+            'include': '#onSelectFireEvent'
+          }
+          {
+            'include': '#onSelectClose'
+          }
+          {
+            'include': '#onSelectReload'
+          }
+          {
+            'include': '#onSelectReplace'
+          }
+          {
+            'include': '#onSelectOpen'
+          }
+          {
+            'include': '#onSelectShow'
+          }
+          {
+            'include': '#onSelectHide'
+          }
+          {
+            'include': '#onSelectCallEndpoint'
+          }
+          {
+            'include': '#onSelect'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'inlineView':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(view))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'inlineView'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'itemProperty':
+    'begin': '(?i:\\s*(item)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'composit'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'itemProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'join':
+    'begin': '(?i:\\s*((join|left join))\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(on)\\s*((([a-zA-Z][_a-zA-Z0-9]*s*with))?)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'or'
+      '2':
+        'name': 'markup.inserted'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'option'
+      '6':
+        'name': 'composit'
+      '7':
+        'name': 'punctuation.definition.identity'
+      '8':
+        'name': 'keyword'
+      '9':
+        'name': 'option'
+      '10':
+        'name': 'composit'
+      '11':
+        'name': 'punctuation.definition.identity'
+      '12':
+        'name': 'support.type'
+      '13':
+        'name': 'support.type'
+
+    'name': 'join'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'key':
+    'begin': '(?i:\\s*(key)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'key'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'languageElement':
+    'begin': '(?i:\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'constant'
+
+    'name': 'languageElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'list':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(list))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'list'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSelectGoToPage'
+          }
+          {
+            'include': '#onSelectFireEvent'
+          }
+          {
+            'include': '#onSelectClose'
+          }
+          {
+            'include': '#onSelectReload'
+          }
+          {
+            'include': '#onSelectReplace'
+          }
+          {
+            'include': '#onSelectOpen'
+          }
+          {
+            'include': '#onSelectShow'
+          }
+          {
+            'include': '#onSelectHide'
+          }
+          {
+            'include': '#onSelectCallEndpoint'
+          }
+          {
+            'include': '#onSelect'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'loadEndpointSetting':
+    'begin': '(?i:\\s*(load)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'loadEndpointSetting'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'loggedIn':
+    'begin': '(?i:\\s*(loggedin)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'loggedIn'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'logged':
+    'begin': '(?i:\\s*(logged))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'logged'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'mail':
+    'begin': '(?i:\\s*(mail)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'mail'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'maxAny':
+    'begin': '(?i:\\s*(max)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'maxAny'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'maxDate':
+    'begin': '(?i:\\s*(max)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'maxDate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'maxDateTime':
+    'begin': '(?i:\\s*(max)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'maxDateTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'maxDecimal':
+    'begin': '(?i:\\s*(max)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'maxDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'maxNumber':
+    'begin': '(?i:\\s*(max)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'maxNumber'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'maxTime':
+    'begin': '(?i:\\s*(max)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'maxTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'minAny':
+    'begin': '(?i:\\s*(min)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'minAny'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'minDate':
+    'begin': '(?i:\\s*(min)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'minDate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'minDateTime':
+    'begin': '(?i:\\s*(min)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'minDateTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'minDecimal':
+    'begin': '(?i:\\s*(min)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'minDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'minNumber':
+    'begin': '(?i:\\s*(min)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'minNumber'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'minTime':
+    'begin': '(?i:\\s*(min)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'minTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelDtoSetting':
+    'begin': '(?i:\\s*(model))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'modelDtoSetting'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoPropertyInt'
+          }
+          {
+            'include': '#dtoPropertyText'
+          }
+          {
+            'include': '#dtoPropertyBoolean'
+          }
+          {
+            'include': '#dtoPropertyDecimal'
+          }
+          {
+            'include': '#dtoPropertyDateTime'
+          }
+          {
+            'include': '#dtoPropertyDate'
+          }
+          {
+            'include': '#dtoPropertyTime'
+          }
+          {
+            'include': '#dtoPropertyUUID'
+          }
+          {
+            'include': '#dtoPropertyBytes'
+          }
+          {
+            'include': '#dtoPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'model':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(model))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'model'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#modelType'
+          }
+          {
+            'include': '#tracked'
+          }
+          {
+            'include': '#publish'
+          }
+          {
+            'include': '#logged'
+          }
+          {
+            'include': '#multipleUnique'
+          }
+          {
+            'include': '#multipleIndex'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#queryFind'
+          }
+          {
+            'include': '#queryCount'
+          }
+          {
+            'include': '#queryGet'
+          }
+          {
+            'include': '#queryDelete'
+          }
+          {
+            'include': '#querySelect'
+          }
+          {
+            'include': '#modelPropertyInt'
+          }
+          {
+            'include': '#modelPropertyText'
+          }
+          {
+            'include': '#modelPropertyBoolean'
+          }
+          {
+            'include': '#modelPropertyDateTime'
+          }
+          {
+            'include': '#modelPropertyBytes'
+          }
+          {
+            'include': '#modelPropertyDate'
+          }
+          {
+            'include': '#modelPropertyTime'
+          }
+          {
+            'include': '#modelPropertyDecimal'
+          }
+          {
+            'include': '#modelPropertyUUID'
+          }
+          {
+            'include': '#modelPropertyEnumInline'
+          }
+          {
+            'include': '#modelPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyBoolean':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(boolean))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyBoolean'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#defaultBoolean'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#propertyPublishBoolean'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyBytes':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(bytes))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyBytes'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#propertyPublishAny'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyDate':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(date))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyDate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#minDate'
+          }
+          {
+            'include': '#maxDate'
+          }
+          {
+            'include': '#defaultDate'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#propertyPublishDate'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyDateTime':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(datetime))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyDateTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#minDateTime'
+          }
+          {
+            'include': '#maxDateTime'
+          }
+          {
+            'include': '#defaultDateTime'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#propertyPublishDateTime'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyDecimal':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(decimal))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#minDecimal'
+          }
+          {
+            'include': '#maxDecimal'
+          }
+          {
+            'include': '#defaultDecimal'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#scale'
+          }
+          {
+            'include': '#precision'
+          }
+          {
+            'include': '#propertyPublishDecimal'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyEnumInline':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(enum))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyEnumInline'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#defaultEnum'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#searchable'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#propertyPublishEnum'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#enumValue'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyInt':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(integer))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyInt'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#defaultNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#propertyPublishNumber'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyText':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(text))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyText'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#regex'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultText'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#searchable'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#propertyPublishText'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyTime':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(time))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#minTime'
+          }
+          {
+            'include': '#maxTime'
+          }
+          {
+            'include': '#defaultTime'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#propertyPublishTime'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyUUID':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*(uuid))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'keyword'
+
+    'name': 'modelPropertyUUID'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#propertyPublishAny'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelPropertyUnidentified':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*((optional)?)\\s*((list)?)\\s*(([a-zA-Z][_a-zA-Z0-9]*)))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'option'
+      '5':
+        'name': 'keyword'
+      '6':
+        'name': 'or'
+      '7':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'modelPropertyUnidentified'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#primaryKey'
+          }
+          {
+            'include': '#defaultEnum'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#indexed'
+          }
+          {
+            'include': '#unique'
+          }
+          {
+            'include': '#cardinality'
+          }
+          {
+            'include': '#searchable'
+          }
+          {
+            'include': '#propertyTracked'
+          }
+          {
+            'include': '#minAny'
+          }
+          {
+            'include': '#maxAny'
+          }
+          {
+            'include': '#propertyPublishAny'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelSetting':
+    'begin': '(?i:\\s*(model)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'modelSetting'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'modelType':
+    'begin': '(?i:\\s*(type)\\s*((sql|nosql)))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'or'
+      '3':
+        'name': 'markup.inserted'
+
+    'name': 'modelType'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'multiSelect':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(multiselect))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'multiSelect'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#enumSetting'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSelectGoToPage'
+          }
+          {
+            'include': '#onSelectFireEvent'
+          }
+          {
+            'include': '#onSelectClose'
+          }
+          {
+            'include': '#onSelectReload'
+          }
+          {
+            'include': '#onSelectReplace'
+          }
+          {
+            'include': '#onSelectOpen'
+          }
+          {
+            'include': '#onSelectShow'
+          }
+          {
+            'include': '#onSelectHide'
+          }
+          {
+            'include': '#onSelectCallEndpoint'
+          }
+          {
+            'include': '#onSelect'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'multipleIndex':
+    'begin': '(?i:\\s*(index))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'multipleIndex'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#pathElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'multipleUnique':
+    'begin': '(?i:\\s*(unique))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'multipleUnique'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#pathElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'namespace':
+    'begin': '(?i:\\s*(namespace)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'punctuation.definition.identity'
+      '3':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'namespace'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'navigation':
+    'begin': '(?i:\\s*(navigation)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'navigation'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#navigationPage'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'navigationPage':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'support.type'
+      '2':
+        'name': 'support.type'
+
+    'name': 'navigationPage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClick':
+    'begin': '(?i:\\s*(on)\\s*(click))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+
+    'name': 'onClick'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#goToPage'
+          }
+          {
+            'include': '#fireEvent'
+          }
+          {
+            'include': '#close'
+          }
+          {
+            'include': '#reload'
+          }
+          {
+            'include': '#replace'
+          }
+          {
+            'include': '#open'
+          }
+          {
+            'include': '#show'
+          }
+          {
+            'include': '#hide'
+          }
+          {
+            'include': '#callEndpoint'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClickGoToPage':
+    'begin': '(?i:\\s*(on)\\s*(click)\\s*(goto)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onClickGoToPage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClickFireEvent':
+    'begin': '(?i:\\s*(on)\\s*(click)\\s*(fire)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onClickFireEvent'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClickClose':
+    'begin': '(?i:\\s*(on)\\s*(click)\\s*(close))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onClickClose'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClickReload':
+    'begin': '(?i:\\s*(on)\\s*(click)\\s*(reload))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onClickReload'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClickReplace':
+    'begin': '(?i:\\s*(on)\\s*(click)\\s*(replace)\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(with)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'punctuation.definition.identity'
+      '5':
+        'name': 'keyword'
+      '6':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'onClickReplace'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClickOpen':
+    'begin': '(?i:\\s*(on)\\s*(click)\\s*(open)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onClickOpen'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClickShow':
+    'begin': '(?i:\\s*(on)\\s*(click)\\s*(show))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onClickShow'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClickHide':
+    'begin': '(?i:\\s*(on)\\s*(click)\\s*(hide))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onClickHide'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClickCallEndpoint':
+    'begin': '(?i:\\s*(on)\\s*(click)\\s*(call)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onClickCallEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onClose':
+    'begin': '(?i:\\s*(on)\\s*(close))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+
+    'name': 'onClose'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#goToPage'
+          }
+          {
+            'include': '#fireEvent'
+          }
+          {
+            'include': '#close'
+          }
+          {
+            'include': '#reload'
+          }
+          {
+            'include': '#replace'
+          }
+          {
+            'include': '#open'
+          }
+          {
+            'include': '#show'
+          }
+          {
+            'include': '#hide'
+          }
+          {
+            'include': '#callEndpoint'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onCloseGoToPage':
+    'begin': '(?i:\\s*(on)\\s*(close)\\s*(goto)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onCloseGoToPage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onCloseFireEvent':
+    'begin': '(?i:\\s*(on)\\s*(close)\\s*(fire)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onCloseFireEvent'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onCloseClose':
+    'begin': '(?i:\\s*(on)\\s*(close)\\s*(close))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onCloseClose'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onCloseReload':
+    'begin': '(?i:\\s*(on)\\s*(close)\\s*(reload))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onCloseReload'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onCloseReplace':
+    'begin': '(?i:\\s*(on)\\s*(close)\\s*(replace)\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(with)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'punctuation.definition.identity'
+      '5':
+        'name': 'keyword'
+      '6':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'onCloseReplace'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onCloseOpen':
+    'begin': '(?i:\\s*(on)\\s*(close)\\s*(open)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onCloseOpen'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onCloseShow':
+    'begin': '(?i:\\s*(on)\\s*(close)\\s*(show))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onCloseShow'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onCloseHide':
+    'begin': '(?i:\\s*(on)\\s*(close)\\s*(hide))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onCloseHide'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onCloseCallEndpoint':
+    'begin': '(?i:\\s*(on)\\s*(close)\\s*(call)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onCloseCallEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEvent':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'onEvent'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#goToPage'
+          }
+          {
+            'include': '#fireEvent'
+          }
+          {
+            'include': '#close'
+          }
+          {
+            'include': '#reload'
+          }
+          {
+            'include': '#replace'
+          }
+          {
+            'include': '#open'
+          }
+          {
+            'include': '#show'
+          }
+          {
+            'include': '#hide'
+          }
+          {
+            'include': '#callEndpoint'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEventGoToPage':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(goto)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'keyword'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'onEventGoToPage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEventFireEvent':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(fire)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'keyword'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'onEventFireEvent'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEventClose':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(close))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'keyword'
+
+    'name': 'onEventClose'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEventReload':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(reload))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'keyword'
+
+    'name': 'onEventReload'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEventReplace':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(replace)\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(with)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'keyword'
+      '5':
+        'name': 'punctuation.definition.identity'
+      '6':
+        'name': 'keyword'
+      '7':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'onEventReplace'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEventOpen':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(open)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'keyword'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'onEventOpen'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEventShow':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(show))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'keyword'
+
+    'name': 'onEventShow'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEventHide':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(hide))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'keyword'
+
+    'name': 'onEventHide'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onEventCallEndpoint':
+    'begin': '(?i:\\s*(on)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(call)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'keyword'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'onEventCallEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoad':
+    'begin': '(?i:\\s*(on)\\s*(load))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+
+    'name': 'onLoad'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#goToPage'
+          }
+          {
+            'include': '#fireEvent'
+          }
+          {
+            'include': '#close'
+          }
+          {
+            'include': '#reload'
+          }
+          {
+            'include': '#replace'
+          }
+          {
+            'include': '#open'
+          }
+          {
+            'include': '#show'
+          }
+          {
+            'include': '#hide'
+          }
+          {
+            'include': '#callEndpoint'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoadGoToPage':
+    'begin': '(?i:\\s*(on)\\s*(load)\\s*(goto)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onLoadGoToPage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoadFireEvent':
+    'begin': '(?i:\\s*(on)\\s*(load)\\s*(fire)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onLoadFireEvent'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoadClose':
+    'begin': '(?i:\\s*(on)\\s*(load)\\s*(close))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onLoadClose'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoadReload':
+    'begin': '(?i:\\s*(on)\\s*(load)\\s*(reload))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onLoadReload'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoadReplace':
+    'begin': '(?i:\\s*(on)\\s*(load)\\s*(replace)\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(with)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'punctuation.definition.identity'
+      '5':
+        'name': 'keyword'
+      '6':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'onLoadReplace'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoadOpen':
+    'begin': '(?i:\\s*(on)\\s*(load)\\s*(open)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onLoadOpen'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoadShow':
+    'begin': '(?i:\\s*(on)\\s*(load)\\s*(show))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onLoadShow'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoadHide':
+    'begin': '(?i:\\s*(on)\\s*(load)\\s*(hide))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onLoadHide'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onLoadCallEndpoint':
+    'begin': '(?i:\\s*(on)\\s*(load)\\s*(call)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onLoadCallEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelect':
+    'begin': '(?i:\\s*(on)\\s*(select))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+
+    'name': 'onSelect'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#goToPage'
+          }
+          {
+            'include': '#fireEvent'
+          }
+          {
+            'include': '#close'
+          }
+          {
+            'include': '#reload'
+          }
+          {
+            'include': '#replace'
+          }
+          {
+            'include': '#open'
+          }
+          {
+            'include': '#show'
+          }
+          {
+            'include': '#hide'
+          }
+          {
+            'include': '#callEndpoint'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelectGoToPage':
+    'begin': '(?i:\\s*(on)\\s*(select)\\s*(goto)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onSelectGoToPage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelectFireEvent':
+    'begin': '(?i:\\s*(on)\\s*(select)\\s*(fire)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onSelectFireEvent'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelectClose':
+    'begin': '(?i:\\s*(on)\\s*(select)\\s*(close))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onSelectClose'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelectReload':
+    'begin': '(?i:\\s*(on)\\s*(select)\\s*(reload))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onSelectReload'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelectReplace':
+    'begin': '(?i:\\s*(on)\\s*(select)\\s*(replace)\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(with)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'punctuation.definition.identity'
+      '5':
+        'name': 'keyword'
+      '6':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'onSelectReplace'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelectOpen':
+    'begin': '(?i:\\s*(on)\\s*(select)\\s*(open)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onSelectOpen'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelectShow':
+    'begin': '(?i:\\s*(on)\\s*(select)\\s*(show))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onSelectShow'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelectHide':
+    'begin': '(?i:\\s*(on)\\s*(select)\\s*(hide))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onSelectHide'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSelectCallEndpoint':
+    'begin': '(?i:\\s*(on)\\s*(select)\\s*(call)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onSelectCallEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccess':
+    'begin': '(?i:\\s*(on)\\s*(success))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+
+    'name': 'onSuccess'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#goToPage'
+          }
+          {
+            'include': '#fireEvent'
+          }
+          {
+            'include': '#close'
+          }
+          {
+            'include': '#reload'
+          }
+          {
+            'include': '#replace'
+          }
+          {
+            'include': '#open'
+          }
+          {
+            'include': '#show'
+          }
+          {
+            'include': '#hide'
+          }
+          {
+            'include': '#callEndpoint'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccessGoToPage':
+    'begin': '(?i:\\s*(on)\\s*(success)\\s*(goto)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onSuccessGoToPage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccessFireEvent':
+    'begin': '(?i:\\s*(on)\\s*(success)\\s*(fire)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onSuccessFireEvent'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccessClose':
+    'begin': '(?i:\\s*(on)\\s*(success)\\s*(close))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onSuccessClose'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccessReload':
+    'begin': '(?i:\\s*(on)\\s*(success)\\s*(reload))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onSuccessReload'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccessReplace':
+    'begin': '(?i:\\s*(on)\\s*(success)\\s*(replace)\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(with)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'punctuation.definition.identity'
+      '5':
+        'name': 'keyword'
+      '6':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'onSuccessReplace'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccessOpen':
+    'begin': '(?i:\\s*(on)\\s*(success)\\s*(open)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onSuccessOpen'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccessShow':
+    'begin': '(?i:\\s*(on)\\s*(success)\\s*(show))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onSuccessShow'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccessHide':
+    'begin': '(?i:\\s*(on)\\s*(success)\\s*(hide))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+
+    'name': 'onSuccessHide'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'onSuccessCallEndpoint':
+    'begin': '(?i:\\s*(on)\\s*(success)\\s*(call)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'onSuccessCallEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'open':
+    'begin': '(?i:\\s*(open)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'open'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'orderBy':
+    'begin': '(?i:\\s*(order by))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'orderBy'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#orderByProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'orderByOrderByProperty':
+    'begin': '(?i:\\s*(order by)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*((asc|desc)))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'or'
+      '5':
+        'name': 'markup.inserted'
+
+    'name': 'orderByOrderByProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'orderByProperty':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*((asc|desc)))'
+    'beginCaptures':
+      '1':
+        'name': 'support.type'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+
+    'name': 'orderByProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'orderableBy':
+    'begin': '(?i:\\s*(orderable by))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'orderableBy'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#orderableByProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'orderableByOrderableByProperty':
+    'begin': '(?i:\\s*(orderable by)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'orderableByOrderableByProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'orderableByProperty':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'support.type'
+      '2':
+        'name': 'support.type'
+
+    'name': 'orderableByProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'page':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(page))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'page'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#path'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#placeHolder'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'pagedEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(paged))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'pagedEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#restSimple'
+          }
+          {
+            'include': '#endpointQueryFind'
+          }
+          {
+            'include': '#endpointQueryInlineFind'
+          }
+          {
+            'include': '#endpointQueryInlineCount'
+          }
+          {
+            'include': '#endpointQueryCount'
+          }
+          {
+            'include': '#responseMappedResponseMappedProperty'
+          }
+          {
+            'include': '#responseMapped'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#public'
+          }
+          {
+            'include': '#endpointErrorsIdentifierElement'
+          }
+          {
+            'include': '#endpointErrors'
+          }
+          {
+            'include': '#version'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'paged':
+    'begin': '(?i:\\s*(paged))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'paged'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'params':
+    'begin': '(?i:\\s*(params))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'params'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoPropertyInt'
+          }
+          {
+            'include': '#dtoPropertyText'
+          }
+          {
+            'include': '#dtoPropertyBoolean'
+          }
+          {
+            'include': '#dtoPropertyDecimal'
+          }
+          {
+            'include': '#dtoPropertyDateTime'
+          }
+          {
+            'include': '#dtoPropertyDate'
+          }
+          {
+            'include': '#dtoPropertyTime'
+          }
+          {
+            'include': '#dtoPropertyUUID'
+          }
+          {
+            'include': '#dtoPropertyBytes'
+          }
+          {
+            'include': '#dtoPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'paramsProperty':
+    'begin': '(?i:\\s*(params)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'composit'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'paramsProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'pathElement':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'pathElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'path':
+    'begin': '(?i:\\s*(path)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'path'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'paymentProviderElement':
+    'begin': '(?i:\\s*((stripe|paypal)))'
+    'beginCaptures':
+      '1':
+        'name': 'or'
+      '2':
+        'name': 'markup.inserted'
+
+    'name': 'paymentProviderElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'paymentProviders':
+    'begin': '(?i:\\s*(payment provider))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'paymentProviders'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#paymentProviderElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'placeHolder':
+    'begin': '(?i:\\s*(placeholder))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'placeHolder'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'precision':
+    'begin': '(?i:\\s*(precision)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'precision'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'primaryKey':
+    'begin': '(?i:\\s*(primarykey))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'primaryKey'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'principalProperty':
+    'begin': '(?i:\\s*(principal)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'composit'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'principalProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'productionBoolean':
+    'begin': '(?i:\\s*(production)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'productionBoolean'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'productionDecimal':
+    'begin': '(?i:\\s*(production)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'productionDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'productionEnum':
+    'begin': '(?i:\\s*(production)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'productionEnum'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'productionNumber':
+    'begin': '(?i:\\s*(production)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'productionNumber'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'productionText':
+    'begin': '(?i:\\s*(production)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'productionText'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
   'project':
-    'begin': '(?i:\\s*([_a-zA-Z][_a-zA-Z0-9]*)\\s+(project)\\b)'
-    'beginCaptures':
-      '1':
-        'name': 'definition'
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(project))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
       '2':
         'name': 'keyword'

@@ -41,6 +19962,10 @@
           {
             'include': '#namespace'
           }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
         ]
         'end': '\\]'
       }
@@ -56,226 +19981,8481 @@
           {
             'include': '#client'
           }
-        ]
-        'end': '\\)'
-      }
-
-      {
-        'begin': '\\{'
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\}'
-      }
-    ]
-    'end': '(?=(\\,|\\n|#.*|\\]|\\)|\\}))'
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyPublishAny':
+    'begin': '(?i:\\s*(publish)\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'constant'
+
+    'name': 'propertyPublishAny'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyPublishBoolean':
+    'begin': '(?i:\\s*(publish)\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'constant'
+
+    'name': 'propertyPublishBoolean'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyPublishDate':
+    'begin': '(?i:\\s*(publish)\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'constant'
+
+    'name': 'propertyPublishDate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyPublishDateTime':
+    'begin': '(?i:\\s*(publish)\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'constant'
+
+    'name': 'propertyPublishDateTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyPublishDecimal':
+    'begin': '(?i:\\s*(publish)\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'constant'
+
+    'name': 'propertyPublishDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyPublishEnum':
+    'begin': '(?i:\\s*(publish)\\s*(([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'support.type'
+
+    'name': 'propertyPublishEnum'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyPublishNumber':
+    'begin': '(?i:\\s*(publish)\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'constant'
+
+    'name': 'propertyPublishNumber'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyPublishText':
+    'begin': '(?i:\\s*(publish)\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'constant'
+
+    'name': 'propertyPublishText'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyPublishTime':
+    'begin': '(?i:\\s*(publish)\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'constant'
+
+    'name': 'propertyPublishTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'propertyTracked':
+    'begin': '(?i:\\s*(tracked))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'propertyTracked'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'public':
+    'begin': '(?i:\\s*(public))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'public'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'publish':
+    'begin': '(?i:\\s*(publish))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'publish'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#crudTypeElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'queryCount':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(count)\\s*(#.*)\\s*(((froms*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'comment'
+      '4':
+        'name': 'option'
+      '5':
+        'name': 'composit'
+      '6':
+        'name': 'support.type'
+      '7':
+        'name': 'support.type'
+      '8':
+        'name': 'option'
+      '9':
+        'name': 'composit'
+      '10':
+        'name': 'punctuation.definition.identity'
+      '11':
+        'name': 'repeat'
+      '12':
+        'name': 'composit'
+      '13':
+        'name': 'object'
+      '14':
+        'name': 'option'
+      '15':
+        'name': 'composit'
+      '16':
+        'name': 'object'
+
+    'name': 'queryCount'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'queryDelete':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(delete)\\s*(#.*)\\s*(((froms*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'comment'
+      '4':
+        'name': 'option'
+      '5':
+        'name': 'composit'
+      '6':
+        'name': 'support.type'
+      '7':
+        'name': 'support.type'
+      '8':
+        'name': 'option'
+      '9':
+        'name': 'composit'
+      '10':
+        'name': 'punctuation.definition.identity'
+      '11':
+        'name': 'repeat'
+      '12':
+        'name': 'composit'
+      '13':
+        'name': 'object'
+      '14':
+        'name': 'option'
+      '15':
+        'name': 'composit'
+      '16':
+        'name': 'object'
+
+    'name': 'queryDelete'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'queryFind':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(find)\\s*(#.*)\\s*(((froms*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'comment'
+      '4':
+        'name': 'option'
+      '5':
+        'name': 'composit'
+      '6':
+        'name': 'support.type'
+      '7':
+        'name': 'support.type'
+      '8':
+        'name': 'option'
+      '9':
+        'name': 'composit'
+      '10':
+        'name': 'punctuation.definition.identity'
+      '11':
+        'name': 'repeat'
+      '12':
+        'name': 'composit'
+      '13':
+        'name': 'object'
+      '14':
+        'name': 'option'
+      '15':
+        'name': 'composit'
+      '16':
+        'name': 'object'
+      '17':
+        'name': 'option'
+      '18':
+        'name': 'composit'
+      '19':
+        'name': 'object'
+      '20':
+        'name': 'option'
+      '21':
+        'name': 'composit'
+      '22':
+        'name': 'object'
+      '23':
+        'name': 'option'
+      '24':
+        'name': 'composit'
+      '25':
+        'name': 'object'
+      '26':
+        'name': 'option'
+      '27':
+        'name': 'composit'
+      '28':
+        'name': 'object'
+      '29':
+        'name': 'option'
+      '30':
+        'name': 'composit'
+      '31':
+        'name': 'object'
+      '32':
+        'name': 'option'
+      '33':
+        'name': 'composit'
+      '34':
+        'name': 'object'
+
+    'name': 'queryFind'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'queryGet':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(get)\\s*(#.*)\\s*(((froms*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'comment'
+      '4':
+        'name': 'option'
+      '5':
+        'name': 'composit'
+      '6':
+        'name': 'support.type'
+      '7':
+        'name': 'support.type'
+      '8':
+        'name': 'option'
+      '9':
+        'name': 'composit'
+      '10':
+        'name': 'punctuation.definition.identity'
+      '11':
+        'name': 'repeat'
+      '12':
+        'name': 'composit'
+      '13':
+        'name': 'object'
+      '14':
+        'name': 'option'
+      '15':
+        'name': 'composit'
+      '16':
+        'name': 'object'
+
+    'name': 'queryGet'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'queryInlineCount':
+    'begin': '(?i:\\s*(count)\\s*(from)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'option'
+      '6':
+        'name': 'composit'
+      '7':
+        'name': 'punctuation.definition.identity'
+      '8':
+        'name': 'repeat'
+      '9':
+        'name': 'composit'
+      '10':
+        'name': 'object'
+      '11':
+        'name': 'option'
+      '12':
+        'name': 'composit'
+      '13':
+        'name': 'object'
+
+    'name': 'queryInlineCount'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'queryInlineDelete':
+    'begin': '(?i:\\s*(delete)\\s*(from)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'option'
+      '6':
+        'name': 'composit'
+      '7':
+        'name': 'punctuation.definition.identity'
+      '8':
+        'name': 'repeat'
+      '9':
+        'name': 'composit'
+      '10':
+        'name': 'object'
+      '11':
+        'name': 'option'
+      '12':
+        'name': 'composit'
+      '13':
+        'name': 'object'
+
+    'name': 'queryInlineDelete'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'queryInlineFind':
+    'begin': '(?i:\\s*(from)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'option'
+      '5':
+        'name': 'composit'
+      '6':
+        'name': 'punctuation.definition.identity'
+      '7':
+        'name': 'repeat'
+      '8':
+        'name': 'composit'
+      '9':
+        'name': 'object'
+      '10':
+        'name': 'option'
+      '11':
+        'name': 'composit'
+      '12':
+        'name': 'object'
+      '13':
+        'name': 'option'
+      '14':
+        'name': 'composit'
+      '15':
+        'name': 'object'
+      '16':
+        'name': 'option'
+      '17':
+        'name': 'composit'
+      '18':
+        'name': 'object'
+      '19':
+        'name': 'option'
+      '20':
+        'name': 'composit'
+      '21':
+        'name': 'object'
+      '22':
+        'name': 'option'
+      '23':
+        'name': 'composit'
+      '24':
+        'name': 'object'
+      '25':
+        'name': 'option'
+      '26':
+        'name': 'composit'
+      '27':
+        'name': 'object'
+      '28':
+        'name': 'option'
+      '29':
+        'name': 'composit'
+      '30':
+        'name': 'object'
+
+    'name': 'queryInlineFind'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'queryInlineGet':
+    'begin': '(?i:\\s*(get)\\s*(from)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'option'
+      '6':
+        'name': 'composit'
+      '7':
+        'name': 'punctuation.definition.identity'
+      '8':
+        'name': 'repeat'
+      '9':
+        'name': 'composit'
+      '10':
+        'name': 'object'
+      '11':
+        'name': 'option'
+      '12':
+        'name': 'composit'
+      '13':
+        'name': 'object'
+
+    'name': 'queryInlineGet'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'queryInlineSelect':
+    'begin': '(?i:\\s*(select)\\s*(from)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'option'
+      '6':
+        'name': 'composit'
+      '7':
+        'name': 'punctuation.definition.identity'
+      '8':
+        'name': 'repeat'
+      '9':
+        'name': 'composit'
+      '10':
+        'name': 'object'
+      '11':
+        'name': 'option'
+      '12':
+        'name': 'composit'
+      '13':
+        'name': 'object'
+      '14':
+        'name': 'option'
+      '15':
+        'name': 'composit'
+      '16':
+        'name': 'object'
+      '17':
+        'name': 'option'
+      '18':
+        'name': 'composit'
+      '19':
+        'name': 'object'
+      '20':
+        'name': 'option'
+      '21':
+        'name': 'composit'
+      '22':
+        'name': 'object'
+      '23':
+        'name': 'option'
+      '24':
+        'name': 'composit'
+      '25':
+        'name': 'object'
+      '26':
+        'name': 'option'
+      '27':
+        'name': 'composit'
+      '28':
+        'name': 'object'
+      '29':
+        'name': 'option'
+      '30':
+        'name': 'composit'
+      '31':
+        'name': 'object'
+
+    'name': 'queryInlineSelect'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'querySelect':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(select)\\s*(#.*)\\s*(((froms*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?)\\s*(((ass*[a-zA-Z][_a-zA-Z0-9]*))?)\\s*(((#.*s*object))?)\\s*(((#.*s*wheres*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?)\\s*(((#.*s*object))?))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'comment'
+      '4':
+        'name': 'option'
+      '5':
+        'name': 'composit'
+      '6':
+        'name': 'support.type'
+      '7':
+        'name': 'support.type'
+      '8':
+        'name': 'option'
+      '9':
+        'name': 'composit'
+      '10':
+        'name': 'punctuation.definition.identity'
+      '11':
+        'name': 'repeat'
+      '12':
+        'name': 'composit'
+      '13':
+        'name': 'object'
+      '14':
+        'name': 'option'
+      '15':
+        'name': 'composit'
+      '16':
+        'name': 'object'
+      '17':
+        'name': 'option'
+      '18':
+        'name': 'composit'
+      '19':
+        'name': 'object'
+      '20':
+        'name': 'option'
+      '21':
+        'name': 'composit'
+      '22':
+        'name': 'object'
+      '23':
+        'name': 'option'
+      '24':
+        'name': 'composit'
+      '25':
+        'name': 'object'
+      '26':
+        'name': 'option'
+      '27':
+        'name': 'composit'
+      '28':
+        'name': 'object'
+      '29':
+        'name': 'option'
+      '30':
+        'name': 'composit'
+      '31':
+        'name': 'object'
+      '32':
+        'name': 'option'
+      '33':
+        'name': 'composit'
+      '34':
+        'name': 'object'
+
+    'name': 'querySelect'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'readEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(read))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'readEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#restSimple'
+          }
+          {
+            'include': '#endpointQueryFind'
+          }
+          {
+            'include': '#endpointQueryInlineFind'
+          }
+          {
+            'include': '#endpointQueryInlineGet'
+          }
+          {
+            'include': '#responseMappedResponseMappedProperty'
+          }
+          {
+            'include': '#responseMapped'
+          }
+          {
+            'include': '#endpointQueryInlineSelect'
+          }
+          {
+            'include': '#endpointQuerySelect'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#public'
+          }
+          {
+            'include': '#paged'
+          }
+          {
+            'include': '#endpointErrorsIdentifierElement'
+          }
+          {
+            'include': '#endpointErrors'
+          }
+          {
+            'include': '#version'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'regex':
+    'begin': '(?i:\\s*(regex)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'regex'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'reload':
+    'begin': '(?i:\\s*(reload))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'reload'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'replace':
+    'begin': '(?i:\\s*(replace)\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(with)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'punctuation.definition.identity'
+      '3':
+        'name': 'keyword'
+      '4':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'replace'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#successProperty'
+          }
+          {
+            'include': '#selectedProperty'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#eventProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'requestDto':
+    'begin': '(?i:\\s*(request)\\s*(((optional|list))?)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'requestDto'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'requestInlineDto':
+    'begin': '(?i:\\s*(request)\\s*(((optional|list))?)\\s*(dto))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'requestInlineDto'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#modelSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoPropertyInt'
+          }
+          {
+            'include': '#dtoPropertyText'
+          }
+          {
+            'include': '#dtoPropertyBoolean'
+          }
+          {
+            'include': '#dtoPropertyDecimal'
+          }
+          {
+            'include': '#dtoPropertyDateTime'
+          }
+          {
+            'include': '#dtoPropertyDate'
+          }
+          {
+            'include': '#dtoPropertyTime'
+          }
+          {
+            'include': '#dtoPropertyUUID'
+          }
+          {
+            'include': '#dtoPropertyBytes'
+          }
+          {
+            'include': '#dtoPropertyInlineEnum'
+          }
+          {
+            'include': '#dtoPropertyDtoInline'
+          }
+          {
+            'include': '#dtoPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'responseDto':
+    'begin': '(?i:\\s*(response)\\s*(((optional|list))?)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'support.type'
+      '6':
+        'name': 'support.type'
+
+    'name': 'responseDto'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'responseInlineDto':
+    'begin': '(?i:\\s*(response)\\s*(((optional|list))?)\\s*(dto))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'responseInlineDto'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#modelSetting'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#dtoPropertyInt'
+          }
+          {
+            'include': '#dtoPropertyText'
+          }
+          {
+            'include': '#dtoPropertyBoolean'
+          }
+          {
+            'include': '#dtoPropertyDecimal'
+          }
+          {
+            'include': '#dtoPropertyDateTime'
+          }
+          {
+            'include': '#dtoPropertyDate'
+          }
+          {
+            'include': '#dtoPropertyTime'
+          }
+          {
+            'include': '#dtoPropertyUUID'
+          }
+          {
+            'include': '#dtoPropertyBytes'
+          }
+          {
+            'include': '#dtoPropertyInlineEnum'
+          }
+          {
+            'include': '#dtoPropertyDtoInline'
+          }
+          {
+            'include': '#dtoPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'responseMapped':
+    'begin': '(?i:\\s*(response))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'responseMapped'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#responseMappedProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'responseMappedResponseMappedProperty':
+    'begin': '(?i:\\s*(response)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'responseMappedResponseMappedProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'responseMappedProperty':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'support.type'
+      '2':
+        'name': 'support.type'
+
+    'name': 'responseMappedProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'rest':
+    'begin': '(?i:\\s*((get|post|put|delete))\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'or'
+      '2':
+        'name': 'markup.inserted'
+      '3':
+        'name': 'option'
+      '4':
+        'name': 'constant'
+
+    'name': 'rest'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'restSimple':
+    'begin': '(?i:\\s*(rest)\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'constant'
+
+    'name': 'restSimple'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'saveValue':
+    'begin': '(?i:\\s*(save value)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'saveValue'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'scale':
+    'begin': '(?i:\\s*(scale)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'scale'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'searchable':
+    'begin': '(?i:\\s*(searchable))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'searchable'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'secured':
+    'begin': '(?i:\\s*(secured))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'secured'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#identifierElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securedIdentifierElement':
+    'begin': '(?i:\\s*(secured)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'securedIdentifierElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securityAdminRole':
+    'begin': '(?i:\\s*(adminRole)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'securityAdminRole'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securityDefaultRole':
+    'begin': '(?i:\\s*(defaultRole)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'securityDefaultRole'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'security':
+    'begin': '(?i:\\s*(security))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'security'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#securityPrincipal'
+          }
+          {
+            'include': '#securityPermission'
+          }
+          {
+            'include': '#securityRole'
+          }
+          {
+            'include': '#securityTypeSignInTypeElement'
+          }
+          {
+            'include': '#securityType'
+          }
+          {
+            'include': '#securitySignIn'
+          }
+          {
+            'include': '#securityDefaultRole'
+          }
+          {
+            'include': '#securityAdminRole'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securityPermission':
+    'begin': '(?i:\\s*(permission)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'securityPermission'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securityPrincipal':
+    'begin': '(?i:\\s*(principal)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'securityPrincipal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securityRole':
+    'begin': '(?i:\\s*(role)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'securityRole'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securitySignIn':
+    'begin': '(?i:\\s*(signIn))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'securitySignIn'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#securitySignInQuery'
+          }
+          {
+            'include': '#securitySignInResponseResponseMappedProperty'
+          }
+          {
+            'include': '#securitySignInResponse'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securitySignInQuery':
+    'begin': '(?i:\\s*(query)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'securitySignInQuery'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securitySignInResponse':
+    'begin': '(?i:\\s*(response))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'securitySignInResponse'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#responseMappedProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securitySignInResponseResponseMappedProperty':
+    'begin': '(?i:\\s*(response)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'securitySignInResponseResponseMappedProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securityType':
+    'begin': '(?i:\\s*(type))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'securityType'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#signInTypeElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'securityTypeSignInTypeElement':
+    'begin': '(?i:\\s*(type)\\s*((username|email|facebook|google)))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'or'
+      '3':
+        'name': 'markup.inserted'
+
+    'name': 'securityTypeSignInTypeElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'selectedProperty':
+    'begin': '(?i:\\s*(selected)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'composit'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'selectedProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'sensitive':
+    'begin': '(?i:\\s*(sensitive))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'sensitive'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'serverBooleanProperty':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(boolean))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'serverBooleanProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#testBoolean'
+          }
+          {
+            'include': '#productionBoolean'
+          }
+          {
+            'include': '#key'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'serverDecimalProperty':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(decimal))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'serverDecimalProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#testDecimal'
+          }
+          {
+            'include': '#productionDecimal'
+          }
+          {
+            'include': '#key'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'serverFinancial':
+    'begin': '(?i:\\s*(financial))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'serverFinancial'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#currenciesCurrencyTypeElement'
+          }
+          {
+            'include': '#currencies'
+          }
+          {
+            'include': '#paymentProviders'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'serverIntProperty':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(integer))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'serverIntProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#testNumber'
+          }
+          {
+            'include': '#productionNumber'
+          }
+          {
+            'include': '#key'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'server':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(server))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'server'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#serverTemplate'
+          }
+          {
+            'include': '#developersIdentifierElement'
+          }
+          {
+            'include': '#developers'
+          }
+          {
+            'include': '#defaultModelType'
+          }
+          {
+            'include': '#path'
+          }
+          {
+            'include': '#security'
+          }
+          {
+            'include': '#serverFinancial'
+          }
+          {
+            'include': '#fileStorage'
+          }
+          {
+            'include': '#mail'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#enum'
+          }
+          {
+            'include': '#error'
+          }
+          {
+            'include': '#model'
+          }
+          {
+            'include': '#embeddedModel'
+          }
+          {
+            'include': '#api'
+          }
+          {
+            'include': '#serverTextProperty'
+          }
+          {
+            'include': '#serverIntProperty'
+          }
+          {
+            'include': '#serverDecimalProperty'
+          }
+          {
+            'include': '#serverBooleanProperty'
+          }
+          {
+            'include': '#serverUnidentifiedProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'serverTemplate':
+    'begin': '(?i:\\s*(template)\\s*((java-springboot|scala)))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'or'
+      '3':
+        'name': 'markup.inserted'
+
+    'name': 'serverTemplate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#simpleObject'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'serverTextProperty':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(text))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'serverTextProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#testText'
+          }
+          {
+            'include': '#productionText'
+          }
+          {
+            'include': '#key'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'serverUnidentifiedProperty':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*)))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'or'
+      '3':
+        'name': 'support.type'
+      '4':
+        'name': 'support.type'
+
+    'name': 'serverUnidentifiedProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#testEnum'
+          }
+          {
+            'include': '#productionEnum'
+          }
+          {
+            'include': '#key'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'show':
+    'begin': '(?i:\\s*(show))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'show'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'signInTypeElement':
+    'begin': '(?i:\\s*((username|email|facebook|google)))'
+    'beginCaptures':
+      '1':
+        'name': 'or'
+      '2':
+        'name': 'markup.inserted'
+
+    'name': 'signInTypeElement'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'simpleObject':
+    'begin': '(?i:\\s*(([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)?))'
+    'beginCaptures':
+      '1':
+        'name': 'repeat'
+      '2':
+        'name': 'constant'
+
+    'name': 'simpleObject'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'stub':
+    'begin': '(?i:\\s*(stub))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'stub'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'submitEndpointSetting':
+    'begin': '(?i:\\s*(submit)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'submitEndpointSetting'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'successProperty':
+    'begin': '(?i:\\s*(success)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'composit'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'successProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'table':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(table))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'table'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onSelectGoToPage'
+          }
+          {
+            'include': '#onSelectFireEvent'
+          }
+          {
+            'include': '#onSelectClose'
+          }
+          {
+            'include': '#onSelectReload'
+          }
+          {
+            'include': '#onSelectReplace'
+          }
+          {
+            'include': '#onSelectOpen'
+          }
+          {
+            'include': '#onSelectShow'
+          }
+          {
+            'include': '#onSelectHide'
+          }
+          {
+            'include': '#onSelectCallEndpoint'
+          }
+          {
+            'include': '#onSelect'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'takeConstant':
+    'begin': '(?i:\\s*(take)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'takeConstant'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'takeVariable':
+    'begin': '(?i:\\s*(take)\\s*(([a-zA-Z][_a-zA-Z0-9]*)?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'option'
+      '3':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'takeVariable'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'testBoolean':
+    'begin': '(?i:\\s*(test)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'testBoolean'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'testDecimal':
+    'begin': '(?i:\\s*(test)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'testDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'testEnum':
+    'begin': '(?i:\\s*(test)\\s*([a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'support.type'
+      '3':
+        'name': 'support.type'
+
+    'name': 'testEnum'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'testNumber':
+    'begin': '(?i:\\s*(test)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'testNumber'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'testText':
+    'begin': '(?i:\\s*(test)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'testText'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'tracked':
+    'begin': '(?i:\\s*(tracked))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'tracked'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiModelProperty':
+    'begin': '(?i:\\s*(model)\\s*(((.s*[a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z][_a-zA-Z0-9]*)*))?))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'composit'
+      '4':
+        'name': 'support.type'
+      '5':
+        'name': 'support.type'
+
+    'name': 'uiModelProperty'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyBoolean':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(boolean))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyBoolean'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultBoolean'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyButton':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(button))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'uiPropertyButton'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onClickGoToPage'
+          }
+          {
+            'include': '#onClickFireEvent'
+          }
+          {
+            'include': '#onClickClose'
+          }
+          {
+            'include': '#onClickReload'
+          }
+          {
+            'include': '#onClickReplace'
+          }
+          {
+            'include': '#onClickOpen'
+          }
+          {
+            'include': '#onClickShow'
+          }
+          {
+            'include': '#onClickHide'
+          }
+          {
+            'include': '#onClickCallEndpoint'
+          }
+          {
+            'include': '#onClick'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyDate':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(date))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyDate'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minDate'
+          }
+          {
+            'include': '#maxDate'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultDate'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyDateTime':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(datetime))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyDateTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minDateTime'
+          }
+          {
+            'include': '#maxDateTime'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultDateTime'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyDecimal':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(decimal))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyDecimal'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minDecimal'
+          }
+          {
+            'include': '#maxDecimal'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultDecimal'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#scale'
+          }
+          {
+            'include': '#precision'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyFacebookSignInButton':
+    'begin': '(?i:\\s*(facebookSignInButton))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'uiPropertyFacebookSignInButton'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyFile':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(file))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyFile'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyFileUpload':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(upload))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyFileUpload'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyGoogleSignInButton':
+    'begin': '(?i:\\s*(googleSignInButton))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'uiPropertyGoogleSignInButton'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyGpsCoordinates':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(gpsCoordinates))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyGpsCoordinates'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyImage':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(image))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyImage'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyInt':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(integer))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyInt'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultNumber'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyLabel':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(label))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'uiPropertyLabel'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyLink':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(link))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'uiPropertyLink'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onClickGoToPage'
+          }
+          {
+            'include': '#onClickFireEvent'
+          }
+          {
+            'include': '#onClickClose'
+          }
+          {
+            'include': '#onClickReload'
+          }
+          {
+            'include': '#onClickReplace'
+          }
+          {
+            'include': '#onClickOpen'
+          }
+          {
+            'include': '#onClickShow'
+          }
+          {
+            'include': '#onClickHide'
+          }
+          {
+            'include': '#onClickCallEndpoint'
+          }
+          {
+            'include': '#onClick'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyMoney':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(money))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyMoney'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultNumber'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyText':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(text))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyText'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minNumber'
+          }
+          {
+            'include': '#maxNumber'
+          }
+          {
+            'include': '#regex'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultText'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyTime':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(time))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyTime'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#minTime'
+          }
+          {
+            'include': '#maxTime'
+          }
+          {
+            'include': '#sensitive'
+          }
+          {
+            'include': '#defaultTime'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyUUID':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*(uuid))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'keyword'
+
+    'name': 'uiPropertyUUID'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'uiPropertyUnidentified':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(((optional|list))?)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'repeat'
+      '3':
+        'name': 'or'
+      '4':
+        'name': 'markup.inserted'
+      '5':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'uiPropertyUnidentified'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#paramsProperty'
+          }
+          {
+            'include': '#uiModelProperty'
+          }
+          {
+            'include': '#itemProperty'
+          }
+          {
+            'include': '#principalProperty'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onSelectGoToPage'
+          }
+          {
+            'include': '#onSelectFireEvent'
+          }
+          {
+            'include': '#onSelectClose'
+          }
+          {
+            'include': '#onSelectReload'
+          }
+          {
+            'include': '#onSelectReplace'
+          }
+          {
+            'include': '#onSelectOpen'
+          }
+          {
+            'include': '#onSelectShow'
+          }
+          {
+            'include': '#onSelectHide'
+          }
+          {
+            'include': '#onSelectCallEndpoint'
+          }
+          {
+            'include': '#onSelect'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'include': '#onClickGoToPage'
+          }
+          {
+            'include': '#onClickFireEvent'
+          }
+          {
+            'include': '#onClickClose'
+          }
+          {
+            'include': '#onClickReload'
+          }
+          {
+            'include': '#onClickReplace'
+          }
+          {
+            'include': '#onClickOpen'
+          }
+          {
+            'include': '#onClickShow'
+          }
+          {
+            'include': '#onClickHide'
+          }
+          {
+            'include': '#onClickCallEndpoint'
+          }
+          {
+            'include': '#onClick'
+          }
+          {
+            'include': '#onSuccessGoToPage'
+          }
+          {
+            'include': '#onSuccessFireEvent'
+          }
+          {
+            'include': '#onSuccessClose'
+          }
+          {
+            'include': '#onSuccessReload'
+          }
+          {
+            'include': '#onSuccessReplace'
+          }
+          {
+            'include': '#onSuccessOpen'
+          }
+          {
+            'include': '#onSuccessShow'
+          }
+          {
+            'include': '#onSuccessHide'
+          }
+          {
+            'include': '#onSuccessCallEndpoint'
+          }
+          {
+            'include': '#onSuccess'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'unaryCondition':
+    'begin': '(?i:\\s*((optional)?)\\s*((mandatory)?)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+)\\s*((is null|is not null)))'
+    'beginCaptures':
+      '1':
+        'name': 'option'
+      '2':
+        'name': 'keyword'
+      '3':
+        'name': 'option'
+      '4':
+        'name': 'keyword'
+      '5':
+        'name': 'constant'
+      '6':
+        'name': 'or'
+      '7':
+        'name': 'markup.inserted'
+
+    'name': 'unaryCondition'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'unidentifiedComponent':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*([a-zA-Z][_a-zA-Z0-9]*))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'punctuation.definition.identity'
+
+    'name': 'unidentifiedComponent'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#hidden'
+          }
+          {
+            'include': '#bindParamsProperty'
+          }
+          {
+            'include': '#bindUiModelProperty'
+          }
+          {
+            'include': '#bindItemProperty'
+          }
+          {
+            'include': '#bindPrincipalProperty'
+          }
+          {
+            'include': '#bind'
+          }
+          {
+            'include': '#path'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#placeHolder'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'unique':
+    'begin': '(?i:\\s*(unique))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'unique'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'updateEndpoint':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(update))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'updateEndpoint'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#modelSetting'
+          }
+          {
+            'include': '#restSimple'
+          }
+          {
+            'include': '#endpointQueryFind'
+          }
+          {
+            'include': '#endpointQueryInlineFind'
+          }
+          {
+            'include': '#endpointQueryInlineCount'
+          }
+          {
+            'include': '#endpointQueryCount'
+          }
+          {
+            'include': '#endpointQueryInlineSelect'
+          }
+          {
+            'include': '#endpointQuerySelect'
+          }
+          {
+            'include': '#requestInlineDto'
+          }
+          {
+            'include': '#requestDto'
+          }
+          {
+            'include': '#responseInlineDto'
+          }
+          {
+            'include': '#responseDto'
+          }
+          {
+            'include': '#responseMappedResponseMappedProperty'
+          }
+          {
+            'include': '#responseMapped'
+          }
+          {
+            'include': '#securedIdentifierElement'
+          }
+          {
+            'include': '#secured'
+          }
+          {
+            'include': '#public'
+          }
+          {
+            'include': '#endpointErrorsIdentifierElement'
+          }
+          {
+            'include': '#endpointErrors'
+          }
+          {
+            'include': '#version'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#crudPropertyInt'
+          }
+          {
+            'include': '#crudPropertyText'
+          }
+          {
+            'include': '#crudPropertyBoolean'
+          }
+          {
+            'include': '#crudPropertyDecimal'
+          }
+          {
+            'include': '#crudPropertyDateTime'
+          }
+          {
+            'include': '#crudPropertyDate'
+          }
+          {
+            'include': '#crudPropertyTime'
+          }
+          {
+            'include': '#crudPropertyUUID'
+          }
+          {
+            'include': '#crudPropertyBytes'
+          }
+          {
+            'include': '#crudPropertyInlineEnum'
+          }
+          {
+            'include': '#crudPropertyInlineDto'
+          }
+          {
+            'include': '#crudPropertyCopy'
+          }
+          {
+            'include': '#crudPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'updateValue':
+    'begin': '(?i:\\s*(update value)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
+    'name': 'updateValue'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'

   'url':
-    'begin': '(?i:\\s*(url)\\s+([_a-zA-Z][_a-zA-Z0-9]*)\\b)'
-    'beginCaptures':
-      '1':
-        'name': 'keyword'
-      '2':
-        'name': 'variable'
+    'begin': '(?i:\\s*(url)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+      '2':
+        'name': 'constant'
+
     'name': 'url'
-    'patterns': [
-      {
-        'begin': '\\['
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\]'
-      }
-
-      {
-        'begin': '\\('
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\)'
-      }
-
-      {
-        'begin': '\\{'
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\}'
-      }
-    ]
-    'end': '(?=(\\,|\\n|#.*|\\]|\\)|\\}))'
-
-  'namespace':
-    'begin': '(?i:\\s*(namespace)\\s+(([_a-zA-Z][_a-zA-Z0-9]+)(\\.[_a-zA-Z][_a-zA-Z0-9]*)*)\\b)'
-    'beginCaptures':
-      '1':
-        'name': 'keyword'
-      '2':
-        'name': 'variable'
-    'name': 'namespace'
-    'patterns': [
-      {
-        'begin': '\\['
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\]'
-      }
-
-      {
-        'begin': '\\('
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\)'
-      }
-
-      {
-        'begin': '\\{'
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\}'
-      }
-    ]
-    'end': '(?=(\\,|\\n|#.*|\\]|\\)|\\}))'
-
-  'server':
-    'begin': '(?i:\\s*([_a-zA-Z][_a-zA-Z0-9]*)\\s+(server)\\b)'
-    'beginCaptures':
-      '1':
-        'name': 'definition'
-      '2':
-        'name': 'keyword'
-    'name': 'server'
-    'patterns': [
-      {
-        'begin': '\\['
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-          {
-            'include': '#server-template'
-          }
-        ]
-        'end': '\\]'
-      }
-
-      {
-        'begin': '\\('
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\)'
-      }
-
-      {
-        'begin': '\\{'
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\}'
-      }
-    ]
-    'end': '(?=(\\,|\\n|#.*|\\]|\\)|\\}))'
-
-  'server-template':
-    'begin': '(?i:\\s*(template)\\s+(java-springboot)\\b)'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'version':
+    'begin': '(?i:\\s*(version)\\s*([^(\\s\\{\\}\\[\\]\\(\\)#,)]+))'
     'beginCaptures':
       '1':
         'name': 'keyword'
       '2':
         'name': 'constant'
-    'name': 'server-template'
-    'patterns': [
-      {
-        'begin': '\\['
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\]'
-      }
-
-      {
-        'begin': '\\('
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\)'
-      }
-
-      {
-        'begin': '\\{'
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\}'
-      }
-    ]
-    'end': '(?=(\\,|\\n|#.*|\\]|\\)|\\}))'
-
-  'client':
-    'begin': '(?i:\\s*([_a-zA-Z][_a-zA-Z0-9]*)\\s+(client)\\b)'
-    'beginCaptures':
-      '1':
-        'name': 'definition'
-      '2':
-        'name': 'keyword'
-    'name': 'client'
-    'patterns': [
-      {
-        'begin': '\\['
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\]'
-      }
-
-      {
-        'begin': '\\('
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\)'
-      }
-
-      {
-        'begin': '\\{'
-        'patterns': [
-          {
-            'include': '#comments'
-          }
-        ]
-        'end': '\\}'
-      }
-    ]
-    'end': '(?=(\\,|\\n|#.*|\\]|\\)|\\}))'
+
+    'name': 'version'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'view':
+    'begin': '(?i:\\s*([a-zA-Z][_a-zA-Z0-9]*)\\s*(view))'
+    'beginCaptures':
+      '1':
+        'name': 'punctuation.definition.identity'
+      '2':
+        'name': 'keyword'
+
+    'name': 'view'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#params'
+          }
+          {
+            'include': '#loadEndpointSetting'
+          }
+          {
+            'include': '#modelDtoSetting'
+          }
+          {
+            'include': '#visible'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#uiPropertyBoolean'
+          }
+          {
+            'include': '#uiPropertyText'
+          }
+          {
+            'include': '#uiPropertyInt'
+          }
+          {
+            'include': '#uiPropertyUUID'
+          }
+          {
+            'include': '#uiPropertyDate'
+          }
+          {
+            'include': '#uiPropertyDateTime'
+          }
+          {
+            'include': '#uiPropertyDecimal'
+          }
+          {
+            'include': '#uiPropertyTime'
+          }
+          {
+            'include': '#uiPropertyFile'
+          }
+          {
+            'include': '#uiPropertyFileUpload'
+          }
+          {
+            'include': '#uiPropertyGpsCoordinates'
+          }
+          {
+            'include': '#uiPropertyMoney'
+          }
+          {
+            'include': '#uiPropertyImage'
+          }
+          {
+            'include': '#uiPropertyButton'
+          }
+          {
+            'include': '#uiPropertyLink'
+          }
+          {
+            'include': '#uiPropertyLabel'
+          }
+          {
+            'include': '#uiPropertyFacebookSignInButton'
+          }
+          {
+            'include': '#uiPropertyGoogleSignInButton'
+          }
+          {
+            'include': '#inlineForm'
+          }
+          {
+            'include': '#inlineView'
+          }
+          {
+            'include': '#inlineList'
+          }
+          {
+            'include': '#inlineMultiSelect'
+          }
+          {
+            'include': '#inlineTable'
+          }
+          {
+            'include': '#inlineDropDown'
+          }
+          {
+            'include': '#inlineContainer'
+          }
+          {
+            'include': '#uiPropertyUnidentified'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#onLoadGoToPage'
+          }
+          {
+            'include': '#onLoadFireEvent'
+          }
+          {
+            'include': '#onLoadClose'
+          }
+          {
+            'include': '#onLoadReload'
+          }
+          {
+            'include': '#onLoadReplace'
+          }
+          {
+            'include': '#onLoadOpen'
+          }
+          {
+            'include': '#onLoadShow'
+          }
+          {
+            'include': '#onLoadHide'
+          }
+          {
+            'include': '#onLoadCallEndpoint'
+          }
+          {
+            'include': '#onLoad'
+          }
+          {
+            'include': '#onEventGoToPage'
+          }
+          {
+            'include': '#onEventFireEvent'
+          }
+          {
+            'include': '#onEventClose'
+          }
+          {
+            'include': '#onEventReload'
+          }
+          {
+            'include': '#onEventReplace'
+          }
+          {
+            'include': '#onEventOpen'
+          }
+          {
+            'include': '#onEventShow'
+          }
+          {
+            'include': '#onEventHide'
+          }
+          {
+            'include': '#onEventCallEndpoint'
+          }
+          {
+            'include': '#onEvent'
+          }
+          {
+            'include': '#onCloseGoToPage'
+          }
+          {
+            'include': '#onCloseFireEvent'
+          }
+          {
+            'include': '#onCloseClose'
+          }
+          {
+            'include': '#onCloseReload'
+          }
+          {
+            'include': '#onCloseReplace'
+          }
+          {
+            'include': '#onCloseOpen'
+          }
+          {
+            'include': '#onCloseShow'
+          }
+          {
+            'include': '#onCloseHide'
+          }
+          {
+            'include': '#onCloseCallEndpoint'
+          }
+          {
+            'include': '#onClose'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+  'visible':
+    'begin': '(?i:\\s*(visible))'
+    'beginCaptures':
+      '1':
+        'name': 'keyword'
+
+    'name': 'visible'
+    'patterns':[
+      {
+        'begin': '\\['
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\]'
+      }
+      {
+        'begin': '\\('
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+          {
+            'include': '#pathElement'
+          }
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\)'
+      }
+
+      {
+        'begin': '\\{'
+        'patterns': [
+          {
+            'include': '#comments'
+          }
+
+          {
+            'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+            'name': 'invalid.illegal'
+          }
+        ]
+        'end': '\\}'
+      }
+      {
+        'match': '[^(\\s\\{\\}\\[\\]\\(\\)#,)]+'
+        'name': 'invalid.illegal'
+      }
+    ]
+    'end': '(?=\\s*(,|#|\\]|\\)|\\}|\\n))'
+
+