diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,14 @@
 # Revision history for skylighting and skylighting-core
 
+## 0.14.5
+
+  * Update xml syntax definitions for bash, cmake, commonlisp, isocpp,
+    javascript-react, julia, latex, lua, markdown, modelines, nix, orgmode,
+    php, python, rhtml, ruby, swift, xml, yaml, zig, zsh. Add odin (required
+    by orgmode).
+
+  * Update JSON syntax definition from upstream. (#203)
+
 ## 0.14.4
 
   * Add `gdscript`, `typst`, `tlaplus` syntax (#184, #199).
diff --git a/skylighting-core.cabal b/skylighting-core.cabal
--- a/skylighting-core.cabal
+++ b/skylighting-core.cabal
@@ -1,5 +1,5 @@
 name:                skylighting-core
-version:             0.14.4
+version:             0.14.5
 synopsis:            syntax highlighting library
 description:         Skylighting is a syntax highlighting library.
                      It derives its tokenizers from XML syntax
diff --git a/test/expected/abc.ruby.native b/test/expected/abc.ruby.native
--- a/test/expected/abc.ruby.native
+++ b/test/expected/abc.ruby.native
@@ -1,10 +1,11 @@
 [ [ ( NormalTok , "words " )
-  , ( KeywordTok , "=" )
-  , ( OtherTok , " %w(" )
-  , ( StringTok , "A BaRK BOoK tREaT COmMOn SqUAD CoNfuSE" )
+  , ( OperatorTok , "=" )
+  , ( NormalTok , " " )
+  , ( OtherTok , "%w(" )
+  , ( VerbatimStringTok , "A BaRK BOoK tREaT COmMOn SqUAD CoNfuSE" )
   , ( OtherTok , ")" )
   , ( NormalTok , " " )
-  , ( KeywordTok , "<<" )
+  , ( OperatorTok , "<<" )
   , ( NormalTok , " " )
   , ( StringTok , "\"\"" )
   ]
@@ -14,36 +15,38 @@
   , ( NormalTok , " " )
   , ( ControlFlowTok , "do" )
   , ( NormalTok , " " )
-  , ( KeywordTok , "|" )
+  , ( OperatorTok , "|" )
   , ( NormalTok , "word" )
-  , ( KeywordTok , "|" )
+  , ( OperatorTok , "|" )
   ]
 , [ ( NormalTok , "  blocks " )
-  , ( KeywordTok , "=" )
+  , ( OperatorTok , "=" )
   , ( NormalTok , " " )
   , ( StringTok
     , "\"BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM\""
     )
   ]
 , [ ( NormalTok , "  res " )
-  , ( KeywordTok , "=" )
+  , ( OperatorTok , "=" )
   , ( NormalTok , " word" )
   , ( AttributeTok , ".each_char.all?" )
-  , ( KeywordTok , "{|" )
+  , ( OperatorTok , "{|" )
   , ( NormalTok , "c" )
-  , ( KeywordTok , "|" )
+  , ( OperatorTok , "|" )
   , ( NormalTok , " blocks" )
   , ( AttributeTok , ".sub!" )
   , ( NormalTok , "(" )
-  , ( SpecialStringTok , "/\\w?" )
+  , ( SpecialStringTok , "/" )
+  , ( SpecialCharTok , "\\w" )
+  , ( SpecialStringTok , "?" )
   , ( SpecialCharTok , "#{" )
   , ( NormalTok , "c" )
-  , ( SpecialCharTok , "}" )
-  , ( SpecialStringTok , "\\w?/i" )
+  , ( SpecialCharTok , "}\\w" )
+  , ( SpecialStringTok , "?/i" )
   , ( NormalTok , ", " )
   , ( StringTok , "\"\"" )
   , ( NormalTok , ")" )
-  , ( KeywordTok , "}" )
+  , ( OperatorTok , "}" )
   , ( NormalTok , "  " )
   , ( CommentTok , "#regexps can be interpolated like strings" )
   ]
diff --git a/xml/bash.xml b/xml/bash.xml
--- a/xml/bash.xml
+++ b/xml/bash.xml
@@ -56,17 +56,22 @@
 
     <!ENTITY arithmetic_as_subshell "\(((?:[^`'&quot;()$]++|\$\{[^`'&quot;(){}$]+\}|\$(?=[^{`'&quot;()])|`[^`]*+`|\((?1)(?:[)]|(?=['&quot;])))++)(?:[)](?=$|[^)])|[&quot;'])">
 
-    <!ENTITY unary_operators  "-[abcdefghkprstuwxGLNOSovRnz]&eos;">
-    <!ENTITY binary_operators "(?:-(?:e[fq]|[nolg]t|[nlg]e)|==?|!=)&eos;">
+    <!ENTITY unary_operators  "-[abcdefghkprstuwxGLNOSovRnz](?=\\?$|[ &tab;])">
+    <!ENTITY binary_operators "(?:-(?:e[fq]|[nolg]t|[nlg]e)|==?|!=)(?=\\?$|[ &tab;])">
 
     <!ENTITY dblbracket_close "\]\](?=($|[ &tab;;|&amp;)]))">
 
     <!ENTITY weakDeliminatorSymbols "^&#37;#[]$.{}:-/">
 ]>
 
+<!--
+https://git.savannah.gnu.org/cgit/bash.git/tree/NEWS
+current: bash-5.2
+-->
+
 <language
     name="Bash"
-    version="51"
+    version="53"
     kateversion="5.79"
     section="Scripts"
     extensions="*.sh;*.bash;*.ebuild;*.eclass;*.exlib;*.exheres-0;.bashrc;.bash_profile;.bash_login;.profile;PKGBUILD;APKBUILD"
@@ -872,6 +877,7 @@
 
       <!-- FindPathThenPopInAlternateValue consumes path in ${xx:here}-->
       <context attribute="Normal Text" lineEndContext="#pop" name="FindPathThenPopInAlternateValue">
+        <DetectChar attribute="Variable" char="&amp;"/>
         <Detect2Chars context="#pop!PathThenPopInAlternateValue" char="?" char1="(" lookAhead="1"/>
         <Detect2Chars context="#pop!PathThenPopInAlternateValue" char="*" char1="(" lookAhead="1"/>
         <Detect2Chars context="#pop!PathThenPopInAlternateValue" char="+" char1="(" lookAhead="1"/>
@@ -1239,12 +1245,12 @@
         <IncludeRules context="Start"/>
       </context>
 
-      <!-- StringEsc eats till ', but escaping many characters -->
+      <!-- StringEsc eats till ', but escaping many characters in $'...' -->
       <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
         <DetectSpaces attribute="String SingleQ"/>
         <DetectIdentifier attribute="String SingleQ"/>
         <DetectChar attribute="String SingleQ" context="#pop" char="'"/>
-        <RegExpr attribute="String Escape" context="#stay" String="\\(?:[abefnrtv\\']|[0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)"/>
+        <RegExpr attribute="String Escape" context="#stay" String="\\(?:[abeEfnrtv\\'&quot;?]|[0-7]{1,3}|x[A-Fa-f0-9]{1,2}|u[A-Fa-f0-9]{1,4}|U[A-Fa-f0-9]{1,8}|c.)"/>
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="FindWord">
@@ -1368,7 +1374,7 @@
       <!-- called as soon as ${xxx@ is encoutered -->
       <context attribute="Normal Text" lineEndContext="#stay" name="VarTransformation" fallthroughContext="#pop!VarError">
         <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
-        <AnyChar attribute="Parameter Expansion" context="#stay" String="UuLQEPAKa"/>
+        <AnyChar attribute="Parameter Expansion" context="#stay" String="UuLQEPAKak"/>
       </context>
 
       <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion">
@@ -1495,13 +1501,19 @@
         <IncludeRules context="FindNormalText"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2" fallthroughContext="ExprBracketValue">
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2" fallthroughContext="#pop!ExprBracketParam2_Value">
+        <LineContinue attribute="Escape" context="SkipSpaces"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2_Value" fallthroughContext="ExprBracketValue">
         <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam3"/>
         <AnyChar context="TestMaybeBinary" String="-=!" lookAhead="1"/>
         <IncludeRules context="FindExprBracketEnd"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="ExprBracketFinal" name="ExprBracketParam3" fallthroughContext="ExprBracketValue">
+      <context attribute="Normal Text" lineEndContext="ExprBracketFinal" name="ExprBracketParam3" fallthroughContext="#pop!ExprBracketParam3_Value">
+        <LineContinue attribute="Escape" context="SkipSpaces"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="ExprBracketFinal" name="ExprBracketParam3_Value" fallthroughContext="ExprBracketValue">
         <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketFinal"/>
         <IncludeRules context="FindExprBracketEnd"/>
       </context>
@@ -1525,8 +1537,12 @@
         <RegExpr attribute="Expression" context="#pop" String="&binary_operators;"/>
       </context>
 
+      <context attribute="Normal Text" lineEndContext="#pop" name="SkipSpaces" fallthroughContext="#pop">
+        <DetectSpaces context="#pop"/>
+      </context>
 
-      <!-- ExprDblBracket consumes an expression till ]] -->
+
+      <!-- ExprDblBracket consumes an expression till ]] in [[ ... ]] -->
       <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket" fallthroughContext="#pop!ExprDblBracketNot">
         <DetectSpaces attribute="Normal Text" context="#stay"/>
         <DetectChar attribute="Comment" context="Comment" char="#"/>
@@ -1641,7 +1657,10 @@
         <DetectChar attribute="Operator" context="ExprDblBracketValuePattern" char=")" endRegion="expression" beginRegion="subshell"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2" fallthroughContext="ExprDblBracketValuePattern">
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2" fallthroughContext="#pop!ExprDblBracketParam2_Value">
+        <LineContinue attribute="Escape" context="SkipSpaces"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2_Value" fallthroughContext="ExprDblBracketValuePattern">
         <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/>
         <AnyChar context="TestMaybeBinary2" String="-=!" lookAhead="1"/>
         <AnyChar attribute="Expression" context="#pop!ExprDblBracketParam3Spe" String="&lt;>"/>
@@ -1657,7 +1676,10 @@
         <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3" fallthroughContext="ExprDblBracketValuePattern">
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3" fallthroughContext="#pop!ExprDblBracketParam3_Value">
+        <LineContinue attribute="Escape" context="SkipSpaces"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3_Value" fallthroughContext="ExprDblBracketValuePattern">
         <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/>
         <IncludeRules context="FindExprDblBracketEnd"/>
         <AnyChar attribute="Error" context="#stay" String="&lt;>"/>
@@ -1773,7 +1795,7 @@
         <DetectChar attribute="Error" context="#pop" char="]"/>
       </context>
 
-      <!-- SubShell consumes shell input till ) -->
+      <!-- SubShell consumes shell input till ) in (...) -->
       <context attribute="Normal Text" lineEndContext="#stay" name="SubShell" fallthroughContext="Command">
         <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell"/>
         <IncludeRules context="Start"/>
@@ -1788,7 +1810,7 @@
         <IncludeRules context="NormalOption"/>
       </context>
 
-      <!-- AssignArray consumes everything till ), marking assignments -->
+      <!-- AssignArray consumes everything till ) in var=(...), marking assignments -->
       <context attribute="Normal Text" lineEndContext="#stay" name="AssignArray" fallthroughContext="NormalOption">
         <DetectSpaces attribute="Normal Text" context="#stay"/>
         <DetectChar attribute="Comment" context="Comment" char="#"/>
@@ -1807,7 +1829,7 @@
         <IncludeRules context="Start"/>
       </context>
 
-      <!-- Subscript consumes anything till ], marks as Variable -->
+      <!-- Subscript consumes anything till ] in [ ... ], marks as Variable -->
       <context attribute="Normal Text" lineEndContext="#stay" name="Subscript" fallthroughContext="#pop!Subscript2">
         <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
         <AnyChar attribute="Decimal" context="#stay" String="0123456789"/>
diff --git a/xml/cmake.xml b/xml/cmake.xml
--- a/xml/cmake.xml
+++ b/xml/cmake.xml
@@ -18,14 +18,13 @@
  -->
 
 <!-- ***** THIS FILE WAS GENERATED BY A SCRIPT - DO NOT EDIT *****
-  cd data/generators
-  # increase version of cmake.xml.tpl then
-  ./generate-cmake-syntax.py cmake.yaml > ../syntax/cmake.xml
+  $ cd data/generators
+  $ ./generate-cmake-syntax.py cmake.yaml > ../syntax/cmake.xml
 -->
 
 <language
     name="CMake"
-    version="50"
+    version="53"
     kateversion="5.62"
     section="Other"
     extensions="CMakeLists.txt;*.cmake;*.cmake.in"
@@ -44,6 +43,7 @@
         <item>cmake_minimum_required</item>
         <item>cmake_parse_arguments</item>
         <item>cmake_path</item>
+        <item>cmake_pkg_config</item>
         <item>cmake_policy</item>
         <item>configure_file</item>
         <item>continue</item>
@@ -214,6 +214,7 @@
       <item>DEFER</item>
       <item>DIRECTORY</item>
       <item>EVAL</item>
+      <item>EXIT</item>
       <item>GET_CALL</item>
       <item>GET_CALL_IDS</item>
       <item>GET_MESSAGE_LOG_LEVEL</item>
@@ -277,6 +278,31 @@
       <item>TO_CMAKE_PATH_LIST</item>
       <item>TO_NATIVE_PATH_LIST</item>
     </list>
+    <list name="cmake_pkg_config_nargs">
+      <item>ALLOW_SYSTEM_INCLUDES</item>
+      <item>ALLOW_SYSTEM_LIBS</item>
+      <item>DISABLE_UNINSTALLED</item>
+      <item>ENV_MODE</item>
+      <item>EXACT</item>
+      <item>EXTRACT</item>
+      <item>PC_LIBDIR</item>
+      <item>PC_PATH</item>
+      <item>PC_SYSROOT_DIR</item>
+      <item>QUIET</item>
+      <item>REQUIRED</item>
+      <item>STRICTNESS</item>
+      <item>SYSTEM_INCLUDE_DIRS</item>
+      <item>SYSTEM_LIBRARY_DIRS</item>
+      <item>TOP_BUILD_DIR</item>
+    </list>
+    <list name="cmake_pkg_config_sargs">
+      <item>BEST_EFFORT</item>
+      <item>FDO</item>
+      <item>IGNORE</item>
+      <item>PERMISSIVE</item>
+      <item>PKGCONF</item>
+      <item>STRICT</item>
+    </list>
     <list name="cmake_policy_nargs">
       <item>GET</item>
       <item>POP</item>
@@ -315,8 +341,11 @@
       <item>IN_LIST</item>
       <item>IS_ABSOLUTE</item>
       <item>IS_DIRECTORY</item>
+      <item>IS_EXECUTABLE</item>
       <item>IS_NEWER_THAN</item>
+      <item>IS_READABLE</item>
       <item>IS_SYMLINK</item>
+      <item>IS_WRITABLE</item>
       <item>LESS</item>
       <item>LESS_EQUAL</item>
       <item>MATCHES</item>
@@ -480,6 +509,7 @@
       <item>TIMESTAMP</item>
       <item>TLS_CAINFO</item>
       <item>TLS_VERIFY</item>
+      <item>TLS_VERSION</item>
       <item>TOUCH</item>
       <item>TOUCH_NOCREATE</item>
       <item>TO_CMAKE_PATH</item>
@@ -490,6 +520,7 @@
       <item>USE_SOURCE_PERMISSIONS</item>
       <item>UTC</item>
       <item>VERBOSE</item>
+      <item>WORKING_DIRECTORY</item>
       <item>WRITE</item>
     </list>
     <list name="file_sargs">
@@ -848,6 +879,7 @@
       <item>APPEND</item>
       <item>ARGS</item>
       <item>BYPRODUCTS</item>
+      <item>CODEGEN</item>
       <item>COMMAND</item>
       <item>COMMAND_EXPAND_LISTS</item>
       <item>COMMENT</item>
@@ -970,11 +1002,17 @@
     <list name="export_nargs">
       <item>ANDROID_MK</item>
       <item>APPEND</item>
+      <item>AUTO</item>
+      <item>ENABLED</item>
       <item>EXPORT</item>
       <item>EXPORT_LINK_INTERFACE_LIBRARIES</item>
       <item>FILE</item>
       <item>NAMESPACE</item>
+      <item>PACKAGE_DEPENDENCY</item>
+      <item>SETUP</item>
+      <item>TARGET</item>
       <item>TARGETS</item>
+      <item>XCFRAMEWORK_LOCATION</item>
     </list>
     <list name="get_source_file_property_nargs">
       <item>DIRECTORY</item>
@@ -1047,14 +1085,28 @@
       <item>USE_SOURCE_PERMISSIONS</item>
     </list>
     <list name="install_sargs">
+      <item>BIN</item>
+      <item>DATA</item>
+      <item>DOC</item>
       <item>GROUP_EXECUTE</item>
       <item>GROUP_READ</item>
       <item>GROUP_WRITE</item>
+      <item>INCLUDE</item>
+      <item>INFO</item>
+      <item>LIB</item>
+      <item>LIBEXEC</item>
+      <item>LOCALE</item>
+      <item>LOCALSTATE</item>
+      <item>MAN</item>
       <item>OWNER_EXECUTE</item>
       <item>OWNER_READ</item>
       <item>OWNER_WRITE</item>
+      <item>RUNSTATE</item>
+      <item>SBIN</item>
       <item>SETGID</item>
       <item>SETUID</item>
+      <item>SHAREDSTATE</item>
+      <item>SYSCONF</item>
       <item>WORLD_EXECUTE</item>
       <item>WORLD_READ</item>
       <item>WORLD_WRITE</item>
@@ -1358,8 +1410,10 @@
       <item>EXCLUDE_FIXTURE</item>
       <item>EXCLUDE_FIXTURE_CLEANUP</item>
       <item>EXCLUDE_FIXTURE_SETUP</item>
+      <item>EXCLUDE_FROM_FILE</item>
       <item>EXCLUDE_LABEL</item>
       <item>INCLUDE</item>
+      <item>INCLUDE_FROM_FILE</item>
       <item>INCLUDE_LABEL</item>
       <item>PARALLEL_LEVEL</item>
       <item>QUIET</item>
@@ -1468,6 +1522,28 @@
       <item>SameMajorVersion</item>
       <item>SameMinorVersion</item>
     </list>
+    <list name="generate_apple_platform_selection_file_nargs">
+      <item>INSTALL_DESTINATION</item>
+      <item>INSTALL_PREFIX</item>
+      <item>IOS_INCLUDE_FILE</item>
+      <item>IOS_SIMULATOR_INCLUDE_FILE</item>
+      <item>MACOS_INCLUDE_FILE</item>
+      <item>TVOS_INCLUDE_FILE</item>
+      <item>TVOS_SIMULATOR_INCLUDE_FILE</item>
+      <item>VISIONOS_INCLUDE_FILE</item>
+      <item>VISIONOS_SIMULATOR_INCLUDE_FILE</item>
+      <item>WATCHOS_INCLUDE_FILE</item>
+      <item>WATCHOS_SIMULATOR_INCLUDE_FILE</item>
+    </list>
+    <list name="generate_apple_architecture_selection_file_nargs">
+      <item>ERROR_VARIABLE</item>
+      <item>INSTALL_DESTINATION</item>
+      <item>INSTALL_PREFIX</item>
+      <item>SINGLE_ARCHITECTURES</item>
+      <item>SINGLE_ARCHITECTURE_INCLUDE_FILES</item>
+      <item>UNIVERSAL_ARCHITECTURES</item>
+      <item>UNIVERSAL_INCLUDE_FILE</item>
+    </list>
     <list name="cmake_print_properties_nargs">
       <item>CACHE_ENTRIES</item>
       <item>DIRECTORIES</item>
@@ -1667,6 +1743,7 @@
       <item>TIMEOUT</item>
       <item>TLS_CAINFO</item>
       <item>TLS_VERIFY</item>
+      <item>TLS_VERSION</item>
       <item>TMP_DIR</item>
       <item>UPDATE_COMMAND</item>
       <item>UPDATE_DISCONNECTED</item>
@@ -1878,6 +1955,7 @@
       <item>WORKING_DIRECTORY</item>
     </list>
     <list name="gtest_discover_tests_nargs">
+      <item>DISCOVERY_EXTRA_ARGS</item>
       <item>DISCOVERY_MODE</item>
       <item>DISCOVERY_TIMEOUT</item>
       <item>EXTRA_ARGS</item>
@@ -2123,7 +2201,9 @@
       <item>CABLE_TCL_LIBRARY</item>
       <item>CMAKE_ABSOLUTE_DESTINATION_FILES</item>
       <item>CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY</item>
+      <item>CMAKE_ADSP_ROOT</item>
       <item>CMAKE_AIX_EXPORT_ALL_SYMBOLS</item>
+      <item>CMAKE_AIX_SHARED_LIBRARY_ARCHIVE</item>
       <item>CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS</item>
       <item>CMAKE_ANDROID_API</item>
       <item>CMAKE_ANDROID_API_MIN</item>
@@ -2165,7 +2245,6 @@
       <item>CMAKE_AUTOMOC_EXECUTABLE</item>
       <item>CMAKE_AUTOMOC_MOC_OPTIONS</item>
       <item>CMAKE_AUTOMOC_PATH_PREFIX</item>
-      <item>CMAKE_AUTOMOC_RELAXED_MODE</item>
       <item>CMAKE_AUTORCC</item>
       <item>CMAKE_AUTORCC_EXECUTABLE</item>
       <item>CMAKE_AUTORCC_OPTIONS</item>
@@ -2173,7 +2252,6 @@
       <item>CMAKE_AUTOUIC_EXECUTABLE</item>
       <item>CMAKE_AUTOUIC_OPTIONS</item>
       <item>CMAKE_AUTOUIC_SEARCH_PATHS</item>
-      <item>CMAKE_BACKWARDS_COMPATIBILITY</item>
       <item>CMAKE_BINARY_DIR</item>
       <item>CMAKE_BUILD_RPATH</item>
       <item>CMAKE_BUILD_RPATH_USE_ORIGIN</item>
@@ -2195,9 +2273,6 @@
       <item>CMAKE_COLOR_MAKEFILE</item>
       <item>CMAKE_COMMAND</item>
       <item>CMAKE_COMPILER_2005</item>
-      <item>CMAKE_COMPILER_IS_GNUCC</item>
-      <item>CMAKE_COMPILER_IS_GNUCXX</item>
-      <item>CMAKE_COMPILER_IS_GNUG77</item>
       <item>CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY</item>
       <item>CMAKE_COMPILE_WARNING_AS_ERROR</item>
       <item>CMAKE_CONFIGURATION_TYPES</item>
@@ -2209,7 +2284,6 @@
       <item>CMAKE_CUDA_ARCHITECTURES</item>
       <item>CMAKE_CUDA_COMPILE_FEATURES</item>
       <item>CMAKE_CUDA_EXTENSIONS</item>
-      <item>CMAKE_CUDA_HOST_COMPILER</item>
       <item>CMAKE_CUDA_LINK_NO_PIE_SUPPORTED</item>
       <item>CMAKE_CUDA_LINK_PIE_SUPPORTED</item>
       <item>CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS</item>
@@ -2265,10 +2339,10 @@
       <item>CMAKE_EXECUTE_PROCESS_COMMAND_ECHO</item>
       <item>CMAKE_EXE_LINKER_FLAGS</item>
       <item>CMAKE_EXE_LINKER_FLAGS_INIT</item>
+      <item>CMAKE_EXPORT_BUILD_DATABASE</item>
       <item>CMAKE_EXPORT_COMPILE_COMMANDS</item>
       <item>CMAKE_EXPORT_NO_PACKAGE_REGISTRY</item>
       <item>CMAKE_EXPORT_PACKAGE_REGISTRY</item>
-      <item>CMAKE_EXTRA_GENERATOR</item>
       <item>CMAKE_EXTRA_INCLUDE_FILES</item>
       <item>CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES</item>
       <item>CMAKE_FIND_APPBUNDLE</item>
@@ -2280,8 +2354,6 @@
       <item>CMAKE_FIND_LIBRARY_SUFFIXES</item>
       <item>CMAKE_FIND_NO_INSTALL_PREFIX</item>
       <item>CMAKE_FIND_PACKAGE_NAME</item>
-      <item>CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY</item>
-      <item>CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY</item>
       <item>CMAKE_FIND_PACKAGE_PREFER_CONFIG</item>
       <item>CMAKE_FIND_PACKAGE_REDIRECTS_DIR</item>
       <item>CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS</item>
@@ -2339,6 +2411,7 @@
       <item>CMAKE_HIP_STANDARD_REQUIRED</item>
       <item>CMAKE_HOST_APPLE</item>
       <item>CMAKE_HOST_BSD</item>
+      <item>CMAKE_HOST_EXECUTABLE_SUFFIX</item>
       <item>CMAKE_HOST_LINUX</item>
       <item>CMAKE_HOST_SOLARIS</item>
       <item>CMAKE_HOST_SYSTEM</item>
@@ -2424,12 +2497,14 @@
       <item>CMAKE_LIBRARY_OUTPUT_DIRECTORY</item>
       <item>CMAKE_LIBRARY_PATH</item>
       <item>CMAKE_LIBRARY_PATH_FLAG</item>
+      <item>CMAKE_LINKER_TYPE</item>
       <item>CMAKE_LINK_DEF_FILE_FLAG</item>
       <item>CMAKE_LINK_DEPENDS_NO_SHARED</item>
       <item>CMAKE_LINK_DEPENDS_USE_LINKER</item>
       <item>CMAKE_LINK_DIRECTORIES_BEFORE</item>
       <item>CMAKE_LINK_INTERFACE_LIBRARIES</item>
       <item>CMAKE_LINK_LIBRARIES_ONLY_TARGETS</item>
+      <item>CMAKE_LINK_LIBRARIES_STRATEGY</item>
       <item>CMAKE_LINK_LIBRARY_FILE_FLAG</item>
       <item>CMAKE_LINK_LIBRARY_FLAG</item>
       <item>CMAKE_LINK_LIBRARY_SUFFIX</item>
@@ -2485,6 +2560,28 @@
       <item>CMAKE_PCH_INSTANTIATE_TEMPLATES</item>
       <item>CMAKE_PCH_WARN_INVALID</item>
       <item>CMAKE_PDB_OUTPUT_DIRECTORY</item>
+      <item>CMAKE_PKG_CONFIG_ALLOW_SYS_INCLUDES</item>
+      <item>CMAKE_PKG_CONFIG_ALLOW_SYS_LIBS</item>
+      <item>CMAKE_PKG_CONFIG_CFLAGS</item>
+      <item>CMAKE_PKG_CONFIG_COMPILE_OPTIONS</item>
+      <item>CMAKE_PKG_CONFIG_CONFLICTS</item>
+      <item>CMAKE_PKG_CONFIG_DESCRIPTION</item>
+      <item>CMAKE_PKG_CONFIG_DISABLE_UNINSTALLED</item>
+      <item>CMAKE_PKG_CONFIG_INCLUDES</item>
+      <item>CMAKE_PKG_CONFIG_LIBDIRS</item>
+      <item>CMAKE_PKG_CONFIG_LIBNAMES</item>
+      <item>CMAKE_PKG_CONFIG_LIBS</item>
+      <item>CMAKE_PKG_CONFIG_LINK_OPTIONS</item>
+      <item>CMAKE_PKG_CONFIG_NAME</item>
+      <item>CMAKE_PKG_CONFIG_PC_LIB_DIRS</item>
+      <item>CMAKE_PKG_CONFIG_PC_PATH</item>
+      <item>CMAKE_PKG_CONFIG_PKGCONF_INCLUDES</item>
+      <item>CMAKE_PKG_CONFIG_PROVIDES</item>
+      <item>CMAKE_PKG_CONFIG_REQUIRES</item>
+      <item>CMAKE_PKG_CONFIG_SYSROOT_DIR</item>
+      <item>CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS</item>
+      <item>CMAKE_PKG_CONFIG_SYS_LIB_DIRS</item>
+      <item>CMAKE_PKG_CONFIG_TOP_BUILD_DIR</item>
       <item>CMAKE_PLATFORM_NO_VERSIONED_SONAME</item>
       <item>CMAKE_POSITION_INDEPENDENT_CODE</item>
       <item>CMAKE_PREFIX_PATH</item>
@@ -2505,6 +2602,7 @@
       <item>CMAKE_REQUIRED_FLAGS</item>
       <item>CMAKE_REQUIRED_INCLUDES</item>
       <item>CMAKE_REQUIRED_LIBRARIES</item>
+      <item>CMAKE_REQUIRED_LINK_DIRECTORIES</item>
       <item>CMAKE_REQUIRED_LINK_OPTIONS</item>
       <item>CMAKE_REQUIRED_QUIET</item>
       <item>CMAKE_ROOT</item>
@@ -2523,6 +2621,7 @@
       <item>CMAKE_SKIP_INSTALL_RPATH</item>
       <item>CMAKE_SKIP_INSTALL_RULES</item>
       <item>CMAKE_SKIP_RPATH</item>
+      <item>CMAKE_SKIP_TEST_ALL_DEPENDENCY</item>
       <item>CMAKE_SOURCE_DIR</item>
       <item>CMAKE_STAGING_PREFIX</item>
       <item>CMAKE_STATIC_LIBRARY_PREFIX</item>
@@ -2549,9 +2648,12 @@
       <item>CMAKE_SYSTEM_PROCESSOR</item>
       <item>CMAKE_SYSTEM_PROGRAM_PATH</item>
       <item>CMAKE_SYSTEM_VERSION</item>
+      <item>CMAKE_Swift_COMPILATION_MODE</item>
       <item>CMAKE_Swift_LANGUAGE_VERSION</item>
       <item>CMAKE_Swift_MODULE_DIRECTORY</item>
+      <item>CMAKE_Swift_NUM_THREADS</item>
       <item>CMAKE_TASKING_TOOLSET</item>
+      <item>CMAKE_TEST_LAUNCHER</item>
       <item>CMAKE_THREAD_LIBS_INIT</item>
       <item>CMAKE_THREAD_PREFER_PTHREAD</item>
       <item>CMAKE_TOOLCHAIN_FILE</item>
@@ -2564,7 +2666,6 @@
       <item>CMAKE_UNITY_BUILD_BATCH_SIZE</item>
       <item>CMAKE_USER_MAKE_RULES_OVERRIDE</item>
       <item>CMAKE_USE_PTHREADS_INIT</item>
-      <item>CMAKE_USE_RELATIVE_PATHS</item>
       <item>CMAKE_USE_SPROC_INIT</item>
       <item>CMAKE_USE_WIN32_THREADS_INIT</item>
       <item>CMAKE_VERBOSE_MAKEFILE</item>
@@ -2600,6 +2701,7 @@
       <item>CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER</item>
       <item>CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION</item>
       <item>CMAKE_VS_TARGET_FRAMEWORK_VERSION</item>
+      <item>CMAKE_VS_USE_DEBUG_LIBRARIES</item>
       <item>CMAKE_VS_VERSION_BUILD_NUMBER</item>
       <item>CMAKE_VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION</item>
       <item>CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION</item>
@@ -2687,6 +2789,7 @@
       <item>CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY</item>
       <item>CPACK_DEBIAN_PACKAGE_HOMEPAGE</item>
       <item>CPACK_DEBIAN_PACKAGE_MAINTAINER</item>
+      <item>CPACK_DEBIAN_PACKAGE_MULTIARCH</item>
       <item>CPACK_DEBIAN_PACKAGE_NAME</item>
       <item>CPACK_DEBIAN_PACKAGE_PREDEPENDS</item>
       <item>CPACK_DEBIAN_PACKAGE_PRIORITY</item>
@@ -2749,6 +2852,7 @@
       <item>CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME</item>
       <item>CPACK_IFW_PACKAGE_NAME</item>
       <item>CPACK_IFW_PACKAGE_PRODUCT_IMAGES</item>
+      <item>CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS</item>
       <item>CPACK_IFW_PACKAGE_PUBLISHER</item>
       <item>CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR</item>
       <item>CPACK_IFW_PACKAGE_RESOURCES</item>
@@ -2852,10 +2956,15 @@
       <item>CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME</item>
       <item>CPACK_NUGET_PACKAGE_NAME</item>
       <item>CPACK_NUGET_PACKAGE_OWNERS</item>
+      <item>CPACK_NUGET_PACKAGE_README</item>
       <item>CPACK_NUGET_PACKAGE_RELEASE_NOTES</item>
+      <item>CPACK_NUGET_PACKAGE_REPOSITORY_BRANCH</item>
+      <item>CPACK_NUGET_PACKAGE_REPOSITORY_COMMIT</item>
+      <item>CPACK_NUGET_PACKAGE_REPOSITORY_TYPE</item>
+      <item>CPACK_NUGET_PACKAGE_REPOSITORY_URL</item>
       <item>CPACK_NUGET_PACKAGE_TAGS</item>
+      <item>CPACK_NUGET_PACKAGE_TFMS</item>
       <item>CPACK_NUGET_PACKAGE_TITLE</item>
-      <item>CPACK_NUGET_PACKAGE_VERSION</item>
       <item>CPACK_OBJCOPY_EXECUTABLE</item>
       <item>CPACK_OBJDUMP_EXECUTABLE</item>
       <item>CPACK_OUTPUT_CONFIG_FILE</item>
@@ -2987,6 +3096,7 @@
       <item>CPACK_WIX_EXTENSIONS</item>
       <item>CPACK_WIX_EXTRA_OBJECTS</item>
       <item>CPACK_WIX_EXTRA_SOURCES</item>
+      <item>CPACK_WIX_INSTALL_SCOPE</item>
       <item>CPACK_WIX_LICENSE_RTF</item>
       <item>CPACK_WIX_PATCH_FILE</item>
       <item>CPACK_WIX_PRODUCT_GUID</item>
@@ -3033,7 +3143,6 @@
       <item>CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION</item>
       <item>CTEST_CUSTOM_WARNING_EXCEPTION</item>
       <item>CTEST_CUSTOM_WARNING_MATCH</item>
-      <item>CTEST_CVS_CHECKOUT</item>
       <item>CTEST_CVS_COMMAND</item>
       <item>CTEST_CVS_UPDATE_OPTIONS</item>
       <item>CTEST_DROP_LOCATION</item>
@@ -3062,7 +3171,6 @@
       <item>CTEST_P4_UPDATE_OPTIONS</item>
       <item>CTEST_RESOURCE_SPEC_FILE</item>
       <item>CTEST_RUN_CURRENT_SCRIPT</item>
-      <item>CTEST_SCP_COMMAND</item>
       <item>CTEST_SITE</item>
       <item>CTEST_SOURCE_DIRECTORY</item>
       <item>CTEST_SUBMIT_INACTIVITY_TIMEOUT</item>
@@ -3072,7 +3180,8 @@
       <item>CTEST_SVN_UPDATE_OPTIONS</item>
       <item>CTEST_TEST_LOAD</item>
       <item>CTEST_TEST_TIMEOUT</item>
-      <item>CTEST_TRIGGER_SITE</item>
+      <item>CTEST_TLS_VERIFY</item>
+      <item>CTEST_TLS_VERSION</item>
       <item>CTEST_UPDATE_COMMAND</item>
       <item>CTEST_UPDATE_OPTIONS</item>
       <item>CTEST_UPDATE_VERSION_ONLY</item>
@@ -3297,15 +3406,6 @@
       <item>MPI_SKIP_GUESSING</item>
       <item>MPI_SUBARRAYS_SUPPORTED</item>
       <item>MSVC</item>
-      <item>MSVC10</item>
-      <item>MSVC11</item>
-      <item>MSVC12</item>
-      <item>MSVC14</item>
-      <item>MSVC60</item>
-      <item>MSVC70</item>
-      <item>MSVC71</item>
-      <item>MSVC80</item>
-      <item>MSVC90</item>
       <item>MSVC_IDE</item>
       <item>MSVC_TOOLSET_VERSION</item>
       <item>MSVC_VERSION</item>
@@ -3337,6 +3437,7 @@
       <item>OpenGL_GL_PREFERENCE</item>
       <item>OpenMP_Fortran_HAVE_OMPLIB_HEADER</item>
       <item>OpenMP_Fortran_HAVE_OMPLIB_MODULE</item>
+      <item>OpenMP_RUNTIME_MSVC</item>
       <item>PACKAGE_FIND_NAME</item>
       <item>PACKAGE_FIND_VERSION_COMPLETE</item>
       <item>PACKAGE_FIND_VERSION_COUNT</item>
@@ -3409,8 +3510,10 @@
       <item>Python2_ARTIFACTS_INTERACTIVE</item>
       <item>Python2_COMPILER</item>
       <item>Python2_COMPILER_ID</item>
+      <item>Python2_DEBUG_POSTFIX</item>
       <item>Python2_DOTNET_LAUNCHER</item>
       <item>Python2_EXECUTABLE</item>
+      <item>Python2_EXECUTABLE_DEBUG</item>
       <item>Python2_FIND_ABI</item>
       <item>Python2_FIND_FRAMEWORK</item>
       <item>Python2_FIND_IMPLEMENTATIONS</item>
@@ -3418,6 +3521,7 @@
       <item>Python2_FIND_STRATEGY</item>
       <item>Python2_FIND_UNVERSIONED_NAMES</item>
       <item>Python2_FIND_VIRTUALENV</item>
+      <item>Python2_INTERPRETER</item>
       <item>Python2_INTERPRETER_ID</item>
       <item>Python2_LINK_OPTIONS</item>
       <item>Python2_SITEARCH</item>
@@ -3429,8 +3533,10 @@
       <item>Python3_ARTIFACTS_INTERACTIVE</item>
       <item>Python3_COMPILER</item>
       <item>Python3_COMPILER_ID</item>
+      <item>Python3_DEBUG_POSTFIX</item>
       <item>Python3_DOTNET_LAUNCHER</item>
       <item>Python3_EXECUTABLE</item>
+      <item>Python3_EXECUTABLE_DEBUG</item>
       <item>Python3_FIND_ABI</item>
       <item>Python3_FIND_FRAMEWORK</item>
       <item>Python3_FIND_IMPLEMENTATIONS</item>
@@ -3438,19 +3544,23 @@
       <item>Python3_FIND_STRATEGY</item>
       <item>Python3_FIND_UNVERSIONED_NAMES</item>
       <item>Python3_FIND_VIRTUALENV</item>
+      <item>Python3_INTERPRETER</item>
       <item>Python3_INTERPRETER_ID</item>
       <item>Python3_LINK_OPTIONS</item>
       <item>Python3_SITEARCH</item>
       <item>Python3_SITELIB</item>
       <item>Python3_SOABI</item>
+      <item>Python3_SOSABI</item>
       <item>Python3_STDARCH</item>
       <item>Python3_STDLIB</item>
       <item>Python3_USE_STATIC_LIBS</item>
       <item>Python_ARTIFACTS_INTERACTIVE</item>
       <item>Python_COMPILER</item>
       <item>Python_COMPILER_ID</item>
+      <item>Python_DEBUG_POSTFIX</item>
       <item>Python_DOTNET_LAUNCHER</item>
       <item>Python_EXECUTABLE</item>
+      <item>Python_EXECUTABLE_DEBUG</item>
       <item>Python_FIND_ABI</item>
       <item>Python_FIND_FRAMEWORK</item>
       <item>Python_FIND_IMPLEMENTATIONS</item>
@@ -3458,11 +3568,13 @@
       <item>Python_FIND_STRATEGY</item>
       <item>Python_FIND_UNVERSIONED_NAMES</item>
       <item>Python_FIND_VIRTUALENV</item>
+      <item>Python_INTERPRETER</item>
       <item>Python_INTERPRETER_ID</item>
       <item>Python_LINK_OPTIONS</item>
       <item>Python_SITEARCH</item>
       <item>Python_SITELIB</item>
       <item>Python_SOABI</item>
+      <item>Python_SOSABI</item>
       <item>Python_STDARCH</item>
       <item>Python_STDLIB</item>
       <item>Python_USE_STATIC_LIBS</item>
@@ -3529,8 +3641,16 @@
     </list>
 
     <list name="deprecated-or-internal-variables">
+      <item>CMAKE_AUTOMOC_RELAXED_MODE</item>
+      <item>CMAKE_BACKWARDS_COMPATIBILITY</item>
+      <item>CMAKE_COMPILER_IS_GNUCC</item>
+      <item>CMAKE_COMPILER_IS_GNUCXX</item>
+      <item>CMAKE_COMPILER_IS_GNUG77</item>
       <item>CMAKE_ENABLE_EXPORTS</item>
+      <item>CMAKE_EXTRA_GENERATOR</item>
       <item>CMAKE_FILES_DIRECTORY</item>
+      <item>CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY</item>
+      <item>CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY</item>
       <item>CMAKE_HOME_DIRECTORY</item>
       <item>CMAKE_INTERNAL_PLATFORM_ABI</item>
       <item>CMAKE_IOS_INSTALL_COMBINED</item>
@@ -3539,6 +3659,7 @@
       <item>CMAKE_SUPPRESS_DEVELOPER_ERRORS</item>
       <item>CMAKE_SUPPRESS_DEVELOPER_WARNINGS</item>
       <item>CMAKE_SYSTEM_ARCH</item>
+      <item>CMAKE_USE_RELATIVE_PATHS</item>
       <item>CMAKE_VS_INTEL_Fortran_PROJECT_VERSION</item>
       <item>CPACK_INSTALL_PREFIX</item>
       <item>CPACK_INSTALL_SCRIPT</item>
@@ -3546,6 +3667,18 @@
       <item>CPACK_PACKAGE_RELOCATABLE</item>
       <item>CPACK_TEMPORARY_DIRECTORY</item>
       <item>CPACK_TOPLEVEL_DIRECTORY</item>
+      <item>CTEST_CVS_CHECKOUT</item>
+      <item>CTEST_SCP_COMMAND</item>
+      <item>CTEST_TRIGGER_SITE</item>
+      <item>MSVC10</item>
+      <item>MSVC11</item>
+      <item>MSVC12</item>
+      <item>MSVC14</item>
+      <item>MSVC60</item>
+      <item>MSVC70</item>
+      <item>MSVC71</item>
+      <item>MSVC80</item>
+      <item>MSVC90</item>
     </list>
 
     <list name="environment-variables">
@@ -3561,17 +3694,25 @@
       <item>CMAKE_CONFIGURATION_TYPES</item>
       <item>CMAKE_CONFIG_TYPE</item>
       <item>CMAKE_CROSSCOMPILING_EMULATOR</item>
+      <item>CMAKE_EXPORT_BUILD_DATABASE</item>
       <item>CMAKE_EXPORT_COMPILE_COMMANDS</item>
       <item>CMAKE_FRAMEWORK_PATH</item>
       <item>CMAKE_GENERATOR</item>
       <item>CMAKE_GENERATOR_INSTANCE</item>
       <item>CMAKE_GENERATOR_PLATFORM</item>
       <item>CMAKE_GENERATOR_TOOLSET</item>
+      <item>CMAKE_INCLUDE_PATH</item>
       <item>CMAKE_INSTALL_MODE</item>
+      <item>CMAKE_INSTALL_PREFIX</item>
+      <item>CMAKE_LIBRARY_PATH</item>
+      <item>CMAKE_MAXIMUM_RECURSION_DEPTH</item>
       <item>CMAKE_MSVCIDE_RUN_PATH</item>
       <item>CMAKE_NO_VERBOSE</item>
       <item>CMAKE_OSX_ARCHITECTURES</item>
       <item>CMAKE_PREFIX_PATH</item>
+      <item>CMAKE_PROGRAM_PATH</item>
+      <item>CMAKE_TLS_VERIFY</item>
+      <item>CMAKE_TLS_VERSION</item>
       <item>CMAKE_TOOLCHAIN_FILE</item>
       <item>CSFLAGS</item>
       <item>CTEST_INTERACTIVE_DEBUG_MODE</item>
@@ -3603,6 +3744,7 @@
       <item>QTIFWDIR</item>
       <item>RC</item>
       <item>RCFLAGS</item>
+      <item>SOURCE_DATE_EPOCH</item>
       <item>SSL_CERT_DIR</item>
       <item>SSL_CERT_FILE</item>
       <item>SWIFTC</item>
@@ -3639,6 +3781,7 @@
       <item>PACKAGES_FOUND</item>
       <item>PACKAGES_NOT_FOUND</item>
       <item>PREDEFINED_TARGETS_FOLDER</item>
+      <item>PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE</item>
       <item>REPORT_UNDEFINED_PROPERTIES</item>
       <item>RULE_LAUNCH_COMPILE</item>
       <item>RULE_LAUNCH_CUSTOM</item>
@@ -3688,7 +3831,9 @@
     <list name="target-properties">
       <item>ADDITIONAL_CLEAN_FILES</item>
       <item>AIX_EXPORT_ALL_SYMBOLS</item>
+      <item>AIX_SHARED_LIBRARY_ARCHIVE</item>
       <item>ALIASED_TARGET</item>
+      <item>ALIAS_GLOBAL</item>
       <item>ANDROID_ANT_ADDITIONAL_OPTIONS</item>
       <item>ANDROID_API</item>
       <item>ANDROID_API_MIN</item>
@@ -3779,6 +3924,7 @@
       <item>ENABLE_EXPORTS</item>
       <item>EXCLUDE_FROM_ALL</item>
       <item>EXCLUDE_FROM_DEFAULT_BUILD</item>
+      <item>EXPORT_BUILD_DATABASE</item>
       <item>EXPORT_COMPILE_COMMANDS</item>
       <item>EXPORT_NAME</item>
       <item>EXPORT_NO_SYSTEM</item>
@@ -3861,6 +4007,8 @@
       <item>LINK_INTERFACE_MULTIPLICITY</item>
       <item>LINK_LIBRARIES</item>
       <item>LINK_LIBRARIES_ONLY_TARGETS</item>
+      <item>LINK_LIBRARIES_STRATEGY</item>
+      <item>LINK_LIBRARY_OVERRIDE</item>
       <item>LINK_OPTIONS</item>
       <item>LINK_SEARCH_END_STATIC</item>
       <item>LINK_SEARCH_START_STATIC</item>
@@ -3870,7 +4018,12 @@
       <item>MACHO_CURRENT_VERSION</item>
       <item>MACOSX_BUNDLE</item>
       <item>MACOSX_BUNDLE_INFO_PLIST</item>
+      <item>MACOSX_FRAMEWORK_BUNDLE_NAME</item>
+      <item>MACOSX_FRAMEWORK_BUNDLE_VERSION</item>
+      <item>MACOSX_FRAMEWORK_ICON_FILE</item>
+      <item>MACOSX_FRAMEWORK_IDENTIFIER</item>
       <item>MACOSX_FRAMEWORK_INFO_PLIST</item>
+      <item>MACOSX_FRAMEWORK_SHORT_VERSION_STRING</item>
       <item>MACOSX_RPATH</item>
       <item>MANUALLY_ADDED_DEPENDENCIES</item>
       <item>MSVC_DEBUG_INFORMATION_FORMAT</item>
@@ -3914,9 +4067,14 @@
       <item>STATIC_LIBRARY_OPTIONS</item>
       <item>SUFFIX</item>
       <item>SYSTEM</item>
+      <item>Swift_COMPILATION_MODE</item>
       <item>Swift_DEPENDENCIES_FILE</item>
+      <item>Swift_LANGUAGE_VERSION</item>
       <item>Swift_MODULE_DIRECTORY</item>
       <item>Swift_MODULE_NAME</item>
+      <item>TEST_LAUNCHER</item>
+      <item>TRANSITIVE_COMPILE_PROPERTIES</item>
+      <item>TRANSITIVE_LINK_PROPERTIES</item>
       <item>TYPE</item>
       <item>UNITY_BUILD</item>
       <item>UNITY_BUILD_BATCH_SIZE</item>
@@ -3939,6 +4097,8 @@
       <item>VS_DOTNET_STARTUP_OBJECT</item>
       <item>VS_DOTNET_TARGET_FRAMEWORK_VERSION</item>
       <item>VS_DPI_AWARE</item>
+      <item>VS_FILTER_PROPS</item>
+      <item>VS_FRAMEWORK_REFERENCES</item>
       <item>VS_GLOBAL_KEYWORD</item>
       <item>VS_GLOBAL_PROJECT_TYPES</item>
       <item>VS_GLOBAL_ROOTNAMESPACE</item>
@@ -3959,6 +4119,7 @@
       <item>VS_SDK_REFERENCES</item>
       <item>VS_SOLUTION_DEPLOY</item>
       <item>VS_USER_PROPS</item>
+      <item>VS_USE_DEBUG_LIBRARIES</item>
       <item>VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION</item>
       <item>VS_WINRT_COMPONENT</item>
       <item>VS_WINRT_EXTENSIONS</item>
@@ -4144,6 +4305,14 @@
       <item>Fortran_COMPILER_ID</item>
       <item>HIP_COMPILER_ID</item>
       <item>ISPC_COMPILER_ID</item>
+      <item>C_COMPILER_FRONTEND_VARIANT</item>
+      <item>CXX_COMPILER_FRONTEND_VARIANT</item>
+      <item>CUDA_COMPILER_FRONTEND_VARIANT</item>
+      <item>OBJC_COMPILER_FRONTEND_VARIANT</item>
+      <item>OBJCXX_COMPILER_FRONTEND_VARIANT</item>
+      <item>Fortran_COMPILER_FRONTEND_VARIANT</item>
+      <item>HIP_COMPILER_FRONTEND_VARIANT</item>
+      <item>ISPC_COMPILER_FRONTEND_VARIANT</item>
       <item>COMPILE_LANGUAGE</item>
       <item>COMPILE_LANG_AND_ID</item>
       <item>COMPILE_FEATURES</item>
@@ -4200,6 +4369,7 @@
       <item>ANGLE-R</item>
       <item>COMMA</item>
       <item>SEMICOLON</item>
+      <item>QUOTE</item>
     </list>
     <list name="genex-LIST-subcommands">
       <item>LENGTH</item>
@@ -4557,6 +4727,7 @@
         <WordDetect String="cmake_minimum_required" insensitive="true" attribute="Command" context="cmake_minimum_required_ctx"/>
         <WordDetect String="cmake_parse_arguments" insensitive="true" attribute="Command" context="cmake_parse_arguments_ctx"/>
         <WordDetect String="cmake_path" insensitive="true" attribute="Command" context="cmake_path_ctx"/>
+        <WordDetect String="cmake_pkg_config" insensitive="true" attribute="Command" context="cmake_pkg_config_ctx"/>
         <WordDetect String="cmake_policy" insensitive="true" attribute="Command" context="cmake_policy_ctx"/>
         <WordDetect String="configure_file" insensitive="true" attribute="Command" context="configure_file_ctx"/>
         <WordDetect String="continue" insensitive="true" attribute="Control Flow" context="break_ctx"/>
@@ -4719,6 +4890,8 @@
         <WordDetect String="find_dependency" insensitive="true" attribute="CMake Provided Function/Macro" context="function_ctx"/>
         <WordDetect String="configure_package_config_file" insensitive="true" attribute="CMake Provided Function/Macro" context="configure_package_config_file_ctx"/>
         <WordDetect String="write_basic_package_version_file" insensitive="true" attribute="CMake Provided Function/Macro" context="write_basic_package_version_file_ctx"/>
+        <WordDetect String="generate_apple_platform_selection_file" insensitive="true" attribute="CMake Provided Function/Macro" context="generate_apple_platform_selection_file_ctx"/>
+        <WordDetect String="generate_apple_architecture_selection_file" insensitive="true" attribute="CMake Provided Function/Macro" context="generate_apple_architecture_selection_file_ctx"/>
         <WordDetect String="cmake_print_properties" insensitive="true" attribute="CMake Provided Function/Macro" context="cmake_print_properties_ctx"/>
         <WordDetect String="cmake_push_check_state" insensitive="true" attribute="CMake Provided Function/Macro" context="cmake_push_check_state_ctx"/>
         <WordDetect String="cmake_pop_check_state" insensitive="true" attribute="CMake Provided Function/Macro" context="function_ctx"/>
@@ -4902,6 +5075,17 @@
         <keyword attribute="Named Args" context="#stay" String="cmake_path_nargs"/>
         <IncludeRules context="User Function Args"/>
       </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="cmake_pkg_config_ctx">
+        <DetectChar attribute="Normal Text" context="cmake_pkg_config_ctx_op" char="("/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="cmake_pkg_config_ctx_op">
+        <DetectSpaces/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
+        <keyword attribute="Named Args" context="#stay" String="cmake_pkg_config_nargs"/>
+        <keyword attribute="Special Args" context="#stay" String="cmake_pkg_config_sargs"/>
+        <IncludeRules context="User Function Args"/>
+      </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="cmake_policy_ctx">
         <DetectChar attribute="Normal Text" context="cmake_policy_ctx_op" char="("/>
         <DetectChar attribute="Normal Text" context="#pop" char=")"/>
@@ -5469,13 +5653,14 @@
         <DetectSpaces/>
         <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
         <WordDetect String="TARGETS" attribute="Named Args" context="export_tgts"/>
+        <WordDetect String="TARGET" attribute="Named Args" context="export_tgts"/>
         <keyword attribute="Named Args" context="#stay" String="export_nargs"/>
         <IncludeRules context="User Function Args"/>
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="export_tgts">
         <DetectSpaces/>
         <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
-        <keyword attribute="Named Args" context="#pop" String="export_nargs"/>
+        <keyword attribute="Named Args" context="#pop" String="export_nargs" lookAhead="true"/>
         <IncludeRules context="Detect Aliased Targets"/>
         <IncludeRules context="Detect Targets"/>
         <IncludeRules context="User Function Args"/>
@@ -5550,7 +5735,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="install_tgts">
         <DetectSpaces/>
         <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
-        <keyword attribute="Named Args" context="#pop" String="install_nargs"/>
+        <keyword attribute="Named Args" context="#pop" String="install_nargs" lookAhead="true"/>
         <IncludeRules context="Detect Aliased Targets"/>
         <IncludeRules context="Detect Targets"/>
         <IncludeRules context="User Function Args"/>
@@ -6023,6 +6208,26 @@
         <keyword attribute="Special Args" context="#stay" String="write_basic_package_version_file_sargs"/>
         <IncludeRules context="User Function Args"/>
       </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="generate_apple_platform_selection_file_ctx">
+        <DetectChar attribute="Normal Text" context="generate_apple_platform_selection_file_ctx_op" char="("/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="generate_apple_platform_selection_file_ctx_op">
+        <DetectSpaces/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
+        <keyword attribute="Named Args" context="#stay" String="generate_apple_platform_selection_file_nargs"/>
+        <IncludeRules context="User Function Args"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="generate_apple_architecture_selection_file_ctx">
+        <DetectChar attribute="Normal Text" context="generate_apple_architecture_selection_file_ctx_op" char="("/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="generate_apple_architecture_selection_file_ctx_op">
+        <DetectSpaces/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
+        <keyword attribute="Named Args" context="#stay" String="generate_apple_architecture_selection_file_nargs"/>
+        <IncludeRules context="User Function Args"/>
+      </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="cmake_print_properties_ctx">
         <DetectChar attribute="Normal Text" context="cmake_print_properties_ctx_op" char="("/>
         <DetectChar attribute="Normal Text" context="#pop" char=")"/>
@@ -6037,7 +6242,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="cmake_print_properties_tgts">
         <DetectSpaces/>
         <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
-        <keyword attribute="Named Args" context="#pop" String="cmake_print_properties_nargs"/>
+        <keyword attribute="Named Args" context="#pop" String="cmake_print_properties_nargs" lookAhead="true"/>
         <IncludeRules context="Detect Aliased Targets"/>
         <IncludeRules context="Detect Targets"/>
         <IncludeRules context="User Function Args"/>
@@ -6381,7 +6586,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="install_jar_exports_tgts">
         <DetectSpaces/>
         <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
-        <keyword attribute="Named Args" context="#pop" String="install_jar_exports_nargs"/>
+        <keyword attribute="Named Args" context="#pop" String="install_jar_exports_nargs" lookAhead="true"/>
         <IncludeRules context="Detect Aliased Targets"/>
         <IncludeRules context="Detect Targets"/>
         <IncludeRules context="User Function Args"/>
@@ -6401,7 +6606,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="export_jars_tgts">
         <DetectSpaces/>
         <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
-        <keyword attribute="Named Args" context="#pop" String="export_jars_nargs"/>
+        <keyword attribute="Named Args" context="#pop" String="export_jars_nargs" lookAhead="true"/>
         <IncludeRules context="Detect Aliased Targets"/>
         <IncludeRules context="Detect Targets"/>
         <IncludeRules context="User Function Args"/>
@@ -6606,7 +6811,7 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect More target-properties">
-        <RegExpr attribute="Property" context="#stay" String="\b(?:&var_ref_re;_((COMPIL|LINK)ER_LAUNCHER|CLANG_TIDY(_EXPORT_FIXES_DIR)?|CPP(CHECK|LINT)|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|((ARCHIVE|LIBRARY|RUNTIME)_OUTPUT_(DIRECTORY|NAME)|COMPILE_PDB_(NAME|OUTPUT_DIRECTORY)|CXX_MODULE_(DIRS|SET)|EXCLUDE_FROM_DEFAULT_BUILD|FRAMEWORK_MULTI_CONFIG_POSTFIX|HEADER_(DIRS|SET)|IMPORTED_((NO_)?SONAME|IMPLIB|LIBNAME|LINK_(DEPENDENT_LIBRARIES|INTERFACE_(LANGUAGES|LIBRARIES|MULTIPLICITY))|LOCATION|OBJECTS)|INTERPROCEDURAL_OPTIMIZATION|LINK_(FLAGS|INTERFACE_(LIBRARIES|MULTIPLICITY))|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_(NAME|OUTPUT_DIRECTORY)|STATIC_LIBRARY_FLAGS|VS_(DOTNET_REFERENCE(PROP_&var_ref_re;_TAG)?|GLOBAL|SOURCE_SETTINGS))_&var_ref_re;|XCODE_(ATTRIBUTE_&var_ref_re;|EMBED_&var_ref_re;(_((CODE_SIGN|REMOVE_HEADERS)_ON_COPY|PATH))?))\b"/>
+        <RegExpr attribute="Property" context="#stay" String="\b(?:&var_ref_re;_((COMPIL|LINK)ER_LAUNCHER|CLANG_TIDY(_EXPORT_FIXES_DIR)?|CPP(CHECK|LINT)|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|((ARCHIVE|LIBRARY|RUNTIME)_OUTPUT_(DIRECTORY|NAME)|COMPILE_PDB_(NAME|OUTPUT_DIRECTORY)|CXX_MODULE_(DIRS|SET)|EXCLUDE_FROM_DEFAULT_BUILD|FRAMEWORK_MULTI_CONFIG_POSTFIX|HEADER_(DIRS|SET)|IMPORTED_((NO_)?SONAME|IMPLIB|LIBNAME|LINK_(DEPENDENT_LIBRARIES|INTERFACE_(LANGUAGES|LIBRARIES|MULTIPLICITY))|LOCATION|OBJECTS)|INTERPROCEDURAL_OPTIMIZATION|LINK_(FLAGS|INTERFACE_(LIBRARIES|MULTIPLICITY)|LIBRARY_OVERRIDE)|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_(NAME|OUTPUT_DIRECTORY)|STATIC_LIBRARY_FLAGS|VS_(DOTNET_REFERENCE(PROP_&var_ref_re;_TAG)?|GLOBAL|SOURCE_SETTINGS))_&var_ref_re;|XCODE_(ATTRIBUTE_&var_ref_re;|EMBED_&var_ref_re;(_((CODE_SIGN|REMOVE_HEADERS)_ON_COPY|PATH))?))\b"/>
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect More source-properties">
@@ -6632,7 +6837,7 @@
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect More Builtin Variables">
         <RegExpr attribute="CMake Internal Variable" context="#stay" String="\b(?:CMAKE_&var_ref_re;_(COMPILER_(ABI|ARCHITECTURE_ID|VERSION_INTERNAL)|PLATFORM_ID))\b"/>
-        <RegExpr attribute="Builtin Variable" context="#stay" String="\b(?:&var_ref_re;_(((STATIC_)?LINK_)?LIBRARIES|(BINARY|SOURCE)_DIR|(C|LD)FLAGS(_OTHER)?|(INCLUDE|LIBRARY)_DIRS|CONFIG|CONSIDERED_(CONFIGS|VERSIONS)|DESCRIPTION|FIND_(COMPONENTS|REQUIRED(_&var_ref_re;)?|VERSION_(COMPLETE|COUNT|EXACT|M(AX|IN)(_(COUNT|MAJOR|MINOR|PATCH|TWEAK))?|RANGE(_(MAX|MIN))?)|QUIETLY)|FOUND|HOMEPAGE_URL|IS_TOP_LEVEL|KEYWORDS_MISSING_VALUES|MODULE_NAME|ROOT|UNPARSED_ARGUMENTS|VERSION(_(MAJOR|MINOR|PATCH|TWEAK|COUNT|STRING))?)|&var_ref_re;__TRYRUN_OUTPUT|(DOXYGEN|ExternalData_(CUSTOM_SCRIPT|URL_ALGO)|FETCHCONTENT_(SOURCE_DIR|UPDATES_DISCONNECTED))_&var_ref_re;|ARGV[0-9]+|BISON_&var_ref_re;_(COMPILE_FLAGS|DEFINED|INPUT|OUTPUT(S|_(HEADER|SOURCE)))|Boost_&var_ref_re;_LIBRARY(_(DEBUG|RELEASE))?|CMAKE_(&var_ref_re;_(ANDROID_TOOLCHAIN_((PRE|SUF)FIX|MACHINE)|ARCHIVE_(APPEND|CREATE|FINISH)|BYTE_ORDER|CLANG_TIDY(_EXPORT_FIXES_DIR)?|COMPILER(_(AR|EXTERNAL_TOOLCHAIN|FRONTEND_VARIANT|ID|LAUNCHER|LOADED|RANLIB|TARGET|VERSION))?|COMPILE_OBJECT|CPP(CHECK|LINT)|CREATE_(SHARED_(LIBRARY|MODULE)|STATIC_LIBRARY)|EXTENSIONS(_DEFAULT)?|FLAGS(_((DEBUG|MINSIZEREL|REL(EASE|WITHDEBINFO)|&var_ref_re;)(_INIT)?|INIT))?|GHS_KERNEL_FLAGS_(DEBUG|MINSIZEREL|REL(EASE|WITHDEBINFO))|IGNORE_EXTENSIONS|IMPLICIT_(INCLUDE_DIRECTORIES|LINK_((FRAMEWORK_)?DIRECTORIES|LIBRARIES))|INCLUDE_WHAT_YOU_USE|LIBRARY_ARCHITECTURE|LINKER_(LAUNCHER|PREFERENCE(_PROPAGATES)?|WRAPPER_FLAG(_SEP)?)|LINK_(EXECUTABLE|GROUP_USING_&var_ref_re;(_SUPPORTED)?|LIBRARY_(FILE_FLAG|FLAG|USING_&var_ref_re;(_SUPPORTED)?)|WHAT_YOU_USE_FLAG)|OUTPUT_EXTENSION|POSTFIX|SIMULATE_(ID|VERSION)|SIZEOF_DATA_PTR|SOURCE_FILE_EXTENSIONS|STANDARD_(INCLUDE_DIRECTO|LIBRA)RIES|VISIBILITY_PRESET)|((ARCHIVE|(COMPILE_)?PDB|LIBRARY|RUNTIME)_OUTPUT_DIRECTORY|(DISABLE|REQUIRE)_FIND_PACKAGE|FRAMEWORK_MULTI_CONFIG_POSTFIX|GET_OS_RELEASE_FALLBACK_RESULT|INTERPROCEDURAL_OPTIMIZATION|MAP_IMPORTED_CONFIG|USER_MAKE_RULES_OVERRIDE|XCODE_ATTRIBUTE)_&var_ref_re;|(EXE|MODULE|SHARED|STATIC)_LINKER_FLAGS_&var_ref_re;(_INIT)?|LINK_(GROUP|LIBRARY)_USING_&var_ref_re;(_SUPPORTED)?|PROJECT_&var_ref_re;_INCLUDE(_BEFORE)?)|CMAKE_(ARGV|MATCH_)[0-9]+|CMAKE_POLICY_(DEFAULT|WARNING)_CMP[0-9]{4}|CPACK_(&var_ref_re;_COMPONENT_INSTALL|ARCHIVE_&var_ref_re;_FILE_NAME|BINARY_&var_ref_re;|COMPONENT_&var_ref_re;_(DEPENDS|DESCRIPTION|DIS(ABLED|PLAY_NAME)|GROUP|HIDDEN|REQUIRED)|DEBIAN_&var_ref_re;_(DESCRIPTION|FILE_NAME|PACKAGE_((PRE)?DEPENDS|ARCHITECTURE|BREAKS|CONFLICTS|CONTROL_(EXTRA|STRICT_PERMISSION)|ENHANCES|NAME|PRIORITY|PROVIDES|RECOMMENDS|REPLACES|SECTION|SHLIBDEPS|SOURCE|SUGGESTS)|DEBUGINFO_PACKAGE)|DMG_&var_ref_re;_FILE_NAME|INNOSETUP_(&var_ref_re;_INSTALL_DIRECTORY|(DEFINE|SETUP)_&var_ref_re;)|NSIS_&var_ref_re;_INSTALL_DIRECTORY|NUGET_(&var_ref_re;_PACKAGE_(AUTHORS|COPYRIGHT|DEPENDENCIES(_&var_ref_re;_VERSION)?|DESCRIPTION(_SUMMARY)?|HOMEPAGE_URL|ICON(URL)?|LANGUAGE|LICENSE(URL|_(EXPRESSION|FILE_NAME))|NAME|OWNERS|RELEASE_NOTES|TAGS|TITLE|VERSION)|PACKAGE_DEPENDENCIES_&var_ref_re;_VERSION)|P(RE|OST)FLIGHT_&var_ref_re;_SCRIPT|RPM_(&var_ref_re;_(DEFAULT_((DIR|FILE)_PERMISSIONS|GROUP|USER)|BUILD_SOURCE_DIRS_PREFIX|DEBUGINFO_(FILE_NAME|PACKAGE)|FILE_NAME|PACKAGE_(ARCHITECTURE|AUTO(PROV|REQ(PROV)?)|CONFLICTS|DESCRIPTION|GROUP|NAME|OBSOLETES|PREFIX|PROVIDES|REQUIRES(_P(RE|OST)(UN)?)?|SUGGESTS|SUMMARY|URL)|USER_(FILELIST|BINARY_SPECFILE))|NO_&var_ref_re;_INSTALL_PREFIX_RELOCATION)|WIX_(&var_ref_re;_EXT(ENSIONS|RA_FLAGS)|PROPERTY_&var_ref_re;))|ICU_&var_ref_re;_(LIBRARY|EXECUTABLE)|MPI_&var_ref_re;_(ADDITIONAL_INCLUDE_VARS|COMPILE(R|_(DEFINI|OP)TIONS)|LIB(_NAMES|RARY))|OpenACC_&var_ref_re;_(FLAGS|OPTIONS|SPEC_DATE)|OpenMP_&var_ref_re;_(FLAGS|LIB(_NAMES|RARY)|SPEC_DATE)|SWIG_MODULE_&var_ref_re;_EXTRA_DEPS)\b"/>
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\b(?:&var_ref_re;_(((STATIC_)?LINK_)?LIBRARIES|(BINARY|SOURCE)_DIR|(C|LD)FLAGS(_OTHER)?|(INCLUDE|LIBRARY)_DIRS|CONFIG|CONSIDERED_(CONFIGS|VERSIONS)|DESCRIPTION|FIND_(COMPONENTS|REQUIRED(_&var_ref_re;)?|VERSION_(COMPLETE|COUNT|EXACT|M(AX|IN)(_(COUNT|MAJOR|MINOR|PATCH|TWEAK))?|RANGE(_(MAX|MIN))?)|QUIETLY)|FOUND|HOMEPAGE_URL|IS_TOP_LEVEL|KEYWORDS_MISSING_VALUES|MODULE_NAME|ROOT|UNPARSED_ARGUMENTS|VERSION(_(MAJOR|MINOR|PATCH|TWEAK|COUNT|STRING))?)|&var_ref_re;__TRYRUN_OUTPUT|(DOXYGEN|ExternalData_(CUSTOM_SCRIPT|URL_ALGO)|FETCHCONTENT_(SOURCE_DIR|UPDATES_DISCONNECTED))_&var_ref_re;|ARGV[0-9]+|BISON_&var_ref_re;_(COMPILE_FLAGS|DEFINED|INPUT|OUTPUT(S|_(HEADER|SOURCE)))|Boost_&var_ref_re;_LIBRARY(_(DEBUG|RELEASE))?|CMAKE_(&var_ref_re;_(ANDROID_TOOLCHAIN_((PRE|SUF)FIX|MACHINE)|ARCHIVE_(APPEND|CREATE|FINISH)|BYTE_ORDER|CLANG_TIDY(_EXPORT_FIXES_DIR)?|COMPILER(_(AR|EXTERNAL_TOOLCHAIN|FRONTEND_VARIANT|ID|LAUNCHER|LINKER(_(FRONTEND_VARIANT|ID|VERSION))?|LOADED|PREDEFINES_COMMAND|RANLIB|TARGET|VERSION))?|COMPILE_OBJECT|CPP(CHECK|LINT)|CREATE_(SHARED_(LIBRARY(_ARCHIVE)?|MODULE)|STATIC_LIBRARY)|EXTENSIONS(_DEFAULT)?|FLAGS(_((DEBUG|MINSIZEREL|REL(EASE|WITHDEBINFO)|&var_ref_re;)(_INIT)?|INIT))?|HOST_COMPILER(_ID)?|IGNORE_EXTENSIONS|IMPLICIT_(INCLUDE_DIRECTORIES|LINK_((FRAMEWORK_)?DIRECTORIES|LIBRARIES))|INCLUDE_WHAT_YOU_USE|LIBRARY_ARCHITECTURE|LINKER_(LAUNCHER|PREFERENCE(_PROPAGATES)?|WRAPPER_FLAG(_SEP)?)|LINK_(EXECUTABLE|GROUP_USING_&var_ref_re;(_SUPPORTED)?|LIBRARY_(FILE_FLAG|FLAG|USING_&var_ref_re;(_SUPPORTED)?)|WHAT_YOU_USE_FLAG)|OUTPUT_EXTENSION|POSTFIX|SIMULATE_(ID|VERSION)|SIZEOF_DATA_PTR|SOURCE_FILE_EXTENSIONS|STANDARD_((INCLUDE_DIRECTO|LIBRA)RIES|DEFAULT|LATEST|LINK_DIRECTORIES)|USING_LINKER_(&var_ref_re;|MODE)|VISIBILITY_PRESET)|((ARCHIVE|(COMPILE_)?PDB|LIBRARY|RUNTIME)_OUTPUT_DIRECTORY|(DISABLE|REQUIRE)_FIND_PACKAGE|FRAMEWORK_MULTI_CONFIG_POSTFIX|GET_OS_RELEASE_FALLBACK_RESULT|INTERPROCEDURAL_OPTIMIZATION|MAP_IMPORTED_CONFIG|USER_MAKE_RULES_OVERRIDE|XCODE_ATTRIBUTE)_&var_ref_re;|(EXE|MODULE|SHARED|STATIC)_LINKER_FLAGS_&var_ref_re;(_INIT)?|LINK_(GROUP_USING_&var_ref_re;(_SUPPORTED)?|LIBRARY_(&var_ref_re;_ATTRIBUTES|USING_&var_ref_re;(_SUPPORTED)?))|PKG_CONFIG_&var_ref_re;_PRIVATE|PROJECT_&var_ref_re;_INCLUDE(_BEFORE)?)|CMAKE_(ARGV|MATCH_)[0-9]+|CMAKE_POLICY_(DEFAULT|WARNING)_CMP[0-9]{4}|CPACK_(&var_ref_re;_COMPONENT_INSTALL|ARCHIVE_&var_ref_re;_FILE_NAME|BINARY_&var_ref_re;|COMPONENT_&var_ref_re;_(DEPENDS|DESCRIPTION|DIS(ABLED|PLAY_NAME)|GROUP|HIDDEN|REQUIRED)|DEBIAN_&var_ref_re;_(DESCRIPTION|FILE_NAME|PACKAGE_((PRE)?DEPENDS|ARCHITECTURE|BREAKS|CONFLICTS|CONTROL_(EXTRA|STRICT_PERMISSION)|ENHANCES|MULTIARCH|NAME|PRIORITY|PROVIDES|RECOMMENDS|REPLACES|SECTION|SHLIBDEPS|SOURCE|SUGGESTS)|DEBUGINFO_PACKAGE)|DMG_&var_ref_re;_FILE_NAME|INNOSETUP_(&var_ref_re;_INSTALL_DIRECTORY|(DEFINE|SETUP)_&var_ref_re;)|NSIS_&var_ref_re;_INSTALL_DIRECTORY|NUGET_(&var_ref_re;_(PACKAGE_(AUTHORS|COPYRIGHT|DEPENDENCIES(_&var_ref_re;)?|DESCRIPTION(_SUMMARY)?|HOMEPAGE_URL|ICON(URL)?|LANGUAGE|LICENSE(URL|_(EXPRESSION|FILE_NAME))|NAME|OWNERS|README|RELEASE_NOTES|TAGS|TFMS|TITLE)|REPOSITORY_(BRANCH|COMMIT|TYPE|URL))|PACKAGE_DEPENDENCIES_&var_ref_re;)|P(RE|OST)FLIGHT_&var_ref_re;_SCRIPT|RPM_(&var_ref_re;_(DEFAULT_((DIR|FILE)_PERMISSIONS|GROUP|USER)|BUILD_SOURCE_DIRS_PREFIX|DEBUGINFO_(FILE_NAME|PACKAGE)|FILE_NAME|PACKAGE_(ARCHITECTURE|AUTO(PROV|REQ(PROV)?)|CONFLICTS|DESCRIPTION|GROUP|NAME|OBSOLETES|PREFIX|PROVIDES|REQUIRES(_P(RE|OST)(UN)?)?|SUGGESTS|SUMMARY|URL)|USER_(FILELIST|BINARY_SPECFILE))|NO_&var_ref_re;_INSTALL_PREFIX_RELOCATION)|WIX_(&var_ref_re;_EXT(ENSIONS|RA_FLAGS)|PROPERTY_&var_ref_re;))|ICU_&var_ref_re;_(LIBRARY|EXECUTABLE)|MPI_&var_ref_re;_(ADDITIONAL_INCLUDE_VARS|COMPILE(R|_(DEFINI|OP)TIONS)|LIB(_NAMES|RARY))|OpenACC_&var_ref_re;_(FLAGS|OPTIONS|SPEC_DATE)|OpenMP_&var_ref_re;_(FLAGS|LIB(_NAMES|RARY)|SPEC_DATE)|SWIG_MODULE_&var_ref_re;_EXTRA_DEPS)\b"/>
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Variable Substitutions">
diff --git a/xml/commonlisp.xml b/xml/commonlisp.xml
--- a/xml/commonlisp.xml
+++ b/xml/commonlisp.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE language [
     <!ENTITY identchar "[A-Za-z0-9-+&lt;&gt;/*]">
 ]>
-<language version="11" kateversion="5.79" name="Common Lisp" section="Sources" extensions="*.lisp;*.cl;*.lsp;*.el" mimetype="" author="Dominik Haumann (dhaumann@kde.org)" license="MIT">
+<language version="12" kateversion="5.79" name="Common Lisp" section="Sources" extensions="*.lisp;*.cl;*.lsp;*.el" mimetype="" author="Dominik Haumann (dhaumann@kde.org)" license="MIT">
   <highlighting>
     <list name="symbols">
       <item>&lt;</item>
@@ -911,7 +911,6 @@
       <item>translate-pathname</item> 
       <item>tree-equal</item> 
       <item>truename</item> 
-      <item>truncase</item> 
       <item>truncate</item> 
       <item>two-way-stream</item> 
       <item>two-way-stream-input-stream</item> 
diff --git a/xml/isocpp.xml b/xml/isocpp.xml
--- a/xml/isocpp.xml
+++ b/xml/isocpp.xml
@@ -35,7 +35,7 @@
 <language
     name="ISO C++"
     section="Sources"
-    version="31"
+    version="32"
     kateversion="5.79"
     indenter="cstyle"
     style="C++"
@@ -468,24 +468,24 @@
       </context>
 
       <context name="IntSuffixPattern" attribute="Error" lineEndContext="#pop#pop" fallthroughContext="NumericSuffixError">
+        <DetectChar context="#pop!NumericUserSuffixPattern" char="_" lookAhead="1"/>
         <!-- https://en.cppreference.com/w/cpp/language/integer_literal#The_type_of_the_literal -->
         <RegExpr attribute="Standard Suffix" context="NumericSuffixError" String="([Uu](LL?|ll?|[Zz])?|(LL?|ll?|[Zz])[Uu]?)\b"/>
         <!-- https://en.cppreference.com/w/cpp/language/user_literal#Standard_library -->
         <RegExpr attribute="Standard Classes" context="NumericSuffixError" String="(?:i[fl]?|min|[mun]?s|[hyd])\b"/>
-        <DetectChar context="#pop!NumericUserSuffixPattern" char="_" lookAhead="1"/>
       </context>
 
       <context name="FloatSuffix" attribute="Error" lineEndContext="#pop#pop" fallthroughContext="NumericSuffixError">
         <DetectChar attribute="Error" context="#stay" char="'" />
-        <AnyChar context="#pop!FloatSuffixPattern" String="fFlLimsh_" lookAhead="1"/>
+        <AnyChar context="#pop!FloatSuffixPattern" String="fFlLbBimshd_" lookAhead="1"/>
       </context>
 
       <context name="FloatSuffixPattern" attribute="Error" lineEndContext="#pop#pop" fallthroughContext="NumericSuffixError">
+        <DetectChar context="#pop!NumericUserSuffixPattern" char="_" lookAhead="1"/>
         <!-- https://en.cppreference.com/w/cpp/language/floating_literal#Syntax -->
-        <AnyChar attribute="Standard Suffix" context="NumericSuffixError" String="fFlL" />
+        <RegExpr attribute="Standard Suffix" context="NumericSuffixError" String="[fF](?:16|32|64|128)?|[lL]|bf16|BF16"/>
         <!-- https://en.cppreference.com/w/cpp/language/user_literal#Standard_library -->
-        <RegExpr attribute="Standard Classes" context="NumericSuffixError" String="(?:i[fl]?|min|[mun]?s|h)\b" />
-        <DetectChar context="#pop!NumericUserSuffixPattern" char="_" lookAhead="1" />
+        <RegExpr attribute="Standard Classes" context="NumericSuffixError" String="(?:i[fl]?|min|[mun]?s|[hd])\b"/>
       </context>
 
       <context name="NumericUserSuffixPattern" attribute="Error" lineEndContext="#pop#pop">
diff --git a/xml/javascript-react.xml b/xml/javascript-react.xml
--- a/xml/javascript-react.xml
+++ b/xml/javascript-react.xml
@@ -53,7 +53,7 @@
      * v1 [2018-06-20]: Initial version
 -->
 
-<language name="JavaScript React (JSX)" version="10" kateversion="5.53" section="Scripts" indenter="cstyle"
+<language name="JavaScript React (JSX)" alternativeNames="JSX" version="11" kateversion="5.53" section="Scripts" indenter="cstyle"
           priority="9" extensions="*.jsx" mimetype="text/jsx;text/x-jsx;application/jsx;application/x-jsx;"
           author="Nibaldo González (nibgonz@gmail.com)" license="MIT">
 
diff --git a/xml/json.xml b/xml/json.xml
--- a/xml/json.xml
+++ b/xml/json.xml
@@ -13,7 +13,7 @@
  ** https://www.json.org/json-en.html
  ***************************************************************************
 -->
-<language name="JSON" section="Markup" version="8" kateversion="2.4" extensions="*.json;.kateproject;.arcconfig;*.geojson;*.gltf;*.theme" mimetype="application/json" author="Sebastian Pipping (sebastian@pipping.org)" license="GPL">
+<language name="JSON" section="Markup" version="9" kateversion="2.4" extensions="*.json;*.jsonl;.kateproject;.arcconfig;*.geojson;*.gltf;*.theme;*.cast" mimetype="application/json" author="Sebastian Pipping (sebastian@pipping.org)" license="GPL">
   <highlighting>
     <list name="Constants">
       <item>null</item>
@@ -62,7 +62,7 @@
 
         <keyword String="Constants" context="#stay" attribute="Style_Keyword" />
 
-        <RegExpr String="-?\b([1-9][0-9]*\.[0-9]+(?:[eE][+-]?[0-9]+)?)" context="#stay" attribute="Style_Float" />
+        <RegExpr String="-?\b((0\b|[1-9][0-9]*)\.[0-9]+(?:[eE][+-]?[0-9]+)?)" context="#stay" attribute="Style_Float" />
         <RegExpr String="-?\b(0\b|[1-9][0-9]*(?:[eE][+-]?[0-9]+)?)" context="#stay" attribute="Style_Decimal" />
       </context>
 
diff --git a/xml/julia.xml b/xml/julia.xml
--- a/xml/julia.xml
+++ b/xml/julia.xml
@@ -36,7 +36,7 @@
   <!ENTITY function_begin_boundary "(?:(?&lt;=[&function_disallowed_chars;!]|^)(?=[^&function_disallowed_first_char;]))">
 ]>
 
-<language name="Julia" alternativeNames="JL" style="julia" indenter="julia" section="Sources" version="15" kateversion="5.62" extensions="*.jl" casesensitive="1" priority="5" license="MIT">
+<language name="Julia" alternativeNames="JL" style="julia" indenter="julia" section="Sources" version="16" kateversion="5.62" extensions="*.jl" casesensitive="1" priority="5" license="MIT">
 
   <highlighting>
     <list name="cflow_begin">
@@ -45,11 +45,11 @@
       <item>if</item>
       <item>begin</item>
       <item>do</item>
+      <item>try</item>
     </list>
     <list name="cflow_eb">
       <item>else</item>
       <item>elseif</item>
-      <item>try</item>
       <item>catch</item>
       <item>finally</item>
     </list>
diff --git a/xml/latex.xml b/xml/latex.xml
--- a/xml/latex.xml
+++ b/xml/latex.xml
@@ -4,7 +4,7 @@
     <!ENTITY bullet "&#xd7;">
     <!ENTITY envname "[a-zA-Z]+\*?">
 ]>
-<language name="LaTeX" version="23" section="Markup" kateversion="5.79" priority="10" extensions="*.tex;*.ltx;*.dtx;*.sty;*.cls;*.bbx;*.cbx;*.lbx;*.tikz;*.pgf" mimetype="text/x-tex" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Holger Danielsson (holger.danielsson@versanet.de)+Michel Ludwig (michel.ludwig@kdemail.net)+Thomas Braun (thomas.braun@virtuell-zuhause.de)" license="LGPL" >
+<language name="LaTeX" version="24" section="Markup" kateversion="5.79" priority="10" extensions="*.tex;*.ltx;*.dtx;*.sty;*.cls;*.bbx;*.cbx;*.lbx;*.tikz;*.pgf" mimetype="text/x-tex" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Holger Danielsson (holger.danielsson@versanet.de)+Michel Ludwig (michel.ludwig@kdemail.net)+Thomas Braun (thomas.braun@virtuell-zuhause.de)" license="LGPL" >
   <highlighting>
     <!-- NOTE: Keywords of kind "\something" do not need a delimiter before "\".
          Using a DetectChar rule with lookAhead to detect "\" at the beginning
@@ -5049,9 +5049,9 @@
         <DetectSpaces/>
         <RegExpr String=".+" attribute="Error" context="#stay"/>
       </context>
-      <context name="HighlightingRuby" attribute="Normal Text" lineEndContext="#stay">
+      <context name="HighlightingRuby" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="Expr##Ruby">
         <IncludeRules context="HighlightingCommon"/>
-        <IncludeRules context="##Ruby" includeAttrib="true"/>
+        <IncludeRules context="Ruby##Ruby" includeAttrib="true"/>
       </context>
 
       <context name="HighlightingRustCodeEnvS" attribute="Error" lineEndContext="#stay">
diff --git a/xml/lua.xml b/xml/lua.xml
--- a/xml/lua.xml
+++ b/xml/lua.xml
@@ -48,7 +48,7 @@
     - NOTE, FIXME, TODO alerts added on comments
     - improved highlighting
 -->
-<language name="Lua" version="18" indenter="lua" kateversion="5.79" section="Scripts" extensions="*.lua;*.rockspec" mimetype="text/x-lua">
+<language name="Lua" version="19" indenter="cstyle" kateversion="5.79" section="Scripts" extensions="*.lua;*.rockspec" mimetype="text/x-lua">
   <highlighting>
     <list name="keywords">
       <item>and</item>
diff --git a/xml/markdown.xml b/xml/markdown.xml
--- a/xml/markdown.xml
+++ b/xml/markdown.xml
@@ -94,7 +94,7 @@
 <!ENTITY checkbox "\[[ x]\](?=\s)">
 ]>
 
-<language name="Markdown" version="30" kateversion="5.79" section="Markup" extensions="*.md;*.mmd;*.markdown;*.md.html" mimetype="text/markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
+<language name="Markdown" version="31" kateversion="5.79" section="Markup" extensions="*.md;*.mmd;*.markdown;*.md.html" mimetype="text/markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
   <highlighting>
     <contexts>
       <!-- Start of the Markdown document: find metadata or code block -->
@@ -368,7 +368,8 @@
         <RegExpr attribute="Fenced Code" context="#pop!qml-code" String="&fcode;\s*qml(?:types)?&end;" insensitive="true" beginRegion="code-block"/>
         <RegExpr attribute="Fenced Code" context="#pop!r-code" String="&fcode;\s*(?:r|rprofile|rscript)&end;" insensitive="true" beginRegion="code-block"/>
         <RegExpr attribute="Fenced Code" context="#pop!rest-code" String="&fcode;\s*(?:rst|rest|restructuredtext)&end;" insensitive="true" beginRegion="code-block"/> <!-- Included in the CMake definition -->
-        <RegExpr attribute="Fenced Code" context="#pop!ruby-code" String="&fcode;\s*(?:ruby|rbx?|rjs|rake|f?cgi|gemspec|irbrc|ru|prawn|Appraisals|(?:Rake|Cap|Chef|Gem|Guard|Hobo|Vagrant||Rant|Berks|Thor|Puppet)file|rxml|(?:xml|js)\.erb)&end;" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Fenced Code" context="#pop!ruby-code" String="&fcode;\s*(?:ruby|rbx?|rjs|rake|f?cgi|gemspec|irbrc|ru|prawn|Appraisals|(?:Rake|Cap|Chef|Gem|Guard|Hobo|Vagrant||Rant|Berks|Thor|Puppet)file|rxml)&end;" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Fenced Code" context="#pop!rhtml-code" String="&fcode;\s*((?:xml\.|js\.)?erb)&end;" insensitive="true" beginRegion="code-block"/>
         <RegExpr attribute="Fenced Code" context="#pop!rust-code" String="&fcode;\s*(?:rust|rs)&end;" insensitive="true" beginRegion="code-block"/>
         <RegExpr attribute="Fenced Code" context="#pop!mysql-code" String="&fcode;\s*(?:mysql|sql|ddl)&end;" insensitive="true" beginRegion="code-block"/> <!-- Included in the PHP definition -->
         <RegExpr attribute="Fenced Code" context="#pop!nim-code" String="&fcode;\s*(?:nims?)&end;" insensitive="true" beginRegion="code-block"/>
@@ -491,9 +492,13 @@
         <IncludeRules context="code"/>
         <IncludeRules context="##reStructuredText" includeAttrib="true"/>
       </context>
-      <context attribute="Normal Text" lineEndContext="#stay" name="ruby-code">
+      <context attribute="Normal Text" lineEndContext="#stay" name="ruby-code" fallthroughContext="Expr##Ruby">
         <IncludeRules context="code"/>
-        <IncludeRules context="##Ruby" includeAttrib="true"/>
+        <IncludeRules context="Ruby##Ruby" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="rhtml-code">
+        <IncludeRules context="code"/>
+        <IncludeRules context="##Ruby/Rails/RHTML" includeAttrib="true"/>
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="rust-code">
         <IncludeRules context="code"/>
diff --git a/xml/modelines.xml b/xml/modelines.xml
--- a/xml/modelines.xml
+++ b/xml/modelines.xml
@@ -1,14 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language
-[
-    <!ENTITY space " ">
-    <!ENTITY end "&#59;">
-]>
+<!DOCTYPE language>
 <!--
   Copyright (c) 2012-2014 by Alex Turbov (i.zaufi@gmail.com)
   -->
 <language name="Modelines"
-          version="6"
+          version="7"
           kateversion="5.0"
           section="Other"
           extensions=""
@@ -33,15 +29,15 @@
   <list name="Booleans">
     <item>auto-brackets</item>
     <!-- NOTE Deprecated -->
-<!--     <item>auto-insert-doxygen</item> -->
+    <!--<item>auto-insert-doxygen</item> -->
     <item>automatic-spell-checking</item>                 <!-- NOTE Since KDE 4.?? -->
     <item>backspace-indents</item>
-    <item>block-selection</item>
     <item>bookmark-sorting</item>
     <item>bom</item>
     <item>byte-order-marker</item>
     <item>byte-order-mark</item>
     <item>dynamic-word-wrap</item>
+    <item>enter-to-insert-completion</item>
     <item>folding-markers</item>
     <item>folding-preview</item>                          <!-- Since KTextEditor 5.24 -->
     <item>icon-border</item>
@@ -55,7 +51,8 @@
     <!-- <item>remove-trailing-space</item> -->
     <item>replace-tabs-save</item>
     <item>replace-tabs</item>
-    <item>replace-trailing-space-save</item>
+    <!-- NOTE Deprecated since KDE 4.10 -->
+    <!-- <item>replace-trailing-space-save</item> -->
     <item>smart-home</item>
     <item>scrollbar-minimap</item>                         <!-- Since KTextEditor 5.24 -->
     <item>scrollbar-preview</item>                         <!-- Since KTextEditor 5.24 -->
@@ -64,7 +61,6 @@
     <item>show-trailing-spaces</item>                     <!-- NOTE Since KDE 4.?? -->
     <item>tab-indents</item>
     <item>word-wrap</item>
-    <item>wrap-cursor</item>
   </list>
 
   <list name="True">
@@ -82,10 +78,10 @@
   <list name="Integrals">
     <item>auto-center-lines</item>
     <item>font-size</item>
-    <item>indent-mode</item>
     <item>indent-width</item>
     <item>tab-width</item>
-    <item>undo-steps</item>
+    <!-- NOTE Deprecated since KDE 4 -->
+    <!-- <item>undo-steps</item> -->
     <item>word-wrap-column</item>
   </list>
 
@@ -100,6 +96,7 @@
     <item>font</item>
     <item>hl</item>
     <item>icon-bar-color</item>
+    <item>indent-mode</item>
     <item>mode</item>                                     <!-- NOTE Since KDE 4.?? -->
     <item>scheme</item>
     <item>selection-color</item>
@@ -129,7 +126,6 @@
   <contexts>
     <context name="Normal" attribute="Comment" lineEndContext="#stay">
       <keyword String="ModelineStartKeyword" context="Modeline" attribute="Keyword" />
-      <RegExpr String="\bkate-(?:mimetype|wildcard)\(.*\):" context="Modeline" attribute="Keyword" />
     </context>
 
     <context name="Modeline" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
@@ -141,31 +137,28 @@
     </context>
 
     <context name="Booleans" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-      <DetectSpaces />
-      <keyword String="True" attribute="Option ON" context="#stay" />
-      <keyword String="False" attribute="Option OFF" context="#stay" />
-      <DetectChar char="&end;" context="#pop" attribute="Variable" />
+      <IncludeRules context="SpacesEnd"/>
+      <keyword String="True" attribute="Option ON" context="#pop!SpacesEnd" />
+      <keyword String="False" attribute="Option OFF" context="#pop!SpacesEnd" />
     </context>
 
     <context name="Integrals" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-      <DetectSpaces />
-      <Int attribute="Number" context="#stay" />
-      <DetectChar char="&end;" context="#pop" attribute="Variable" />
+      <IncludeRules context="SpacesEnd"/>
+      <Int attribute="Number" context="#pop!SpacesEnd" />
     </context>
 
     <context name="Strings" attribute="String" lineEndContext="#pop">
-      <DetectSpaces />
-      <RegExpr String="[^&end;&space;]" context="#stay" />
-      <DetectChar char="&end;" context="#pop" attribute="Variable" />
+      <IncludeRules context="SpacesEnd"/>
     </context>
 
     <context name="RemoveSpaces" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-      <DetectSpaces />
-      <keyword String="RemoveSpacesOptions" attribute="Value" context="#pop!RemoveSpacesEnd" />
-      <DetectChar char="&end;" context="#pop" attribute="Variable" />
+      <IncludeRules context="SpacesEnd"/>
+      <keyword String="RemoveSpacesOptions" attribute="Value" context="#pop!SpacesEnd" />
     </context>
-    <context name="RemoveSpacesEnd" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-      <DetectChar char="&end;" context="#pop" attribute="Variable" />
+
+    <context name="SpacesEnd" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+      <DetectSpaces/>
+      <DetectChar char=";" context="#pop" attribute="Variable" />
     </context>
 
   </contexts>
diff --git a/xml/nix.xml b/xml/nix.xml
--- a/xml/nix.xml
+++ b/xml/nix.xml
@@ -4,7 +4,7 @@
 ]>
 
 <!--
-    SPDX-FileCopyrightText: 2021 Marco Rebhan <me@dblsaiko.net>
+    SPDX-FileCopyrightText: 2024 Marco Rebhan <me@dblsaiko.net>
     SPDX-FileContributor: Tuan Le <webmaster@michivi.com>
 
     SPDX-License-Identifier: MIT
@@ -12,7 +12,7 @@
 
 <language
     name="Nix"
-    version="2"
+    version="4"
     kateversion="5.79"
     section="Scripts"
     extensions="*.nix"
@@ -73,10 +73,16 @@
                 <RegExpr String="[a-zA-Z0-9-_.]*(/[a-zA-Z0-9-_.]+)+" attribute="Path" />
                 <Float attribute="Float" />
                 <Int attribute="Int" />
+                <DetectChar char="." attribute="Symbol" context="Set Access" />
                 <WordDetect String="true" attribute="Constant" />
                 <WordDetect String="false" attribute="Constant" />
                 <WordDetect String="null" attribute="Constant" />
             </context>
+            <context name="Set Access" attribute="Normal Text" lineEndContext="#stay">
+                <Detect2Chars char="$" char1="{" attribute="Special Char" context="#pop!Interpolated String" />
+                <DetectChar char="&quot;" attribute="String" context="#pop!String" />
+                <DetectIdentifier context="#pop" />
+            </context>
             <context name="Parentheses" attribute="Normal Text" lineEndContext="#stay">
                 <DetectChar char=")" attribute="Symbol" context="#pop" />
 
@@ -129,6 +135,7 @@
                 <DetectChar char="=" attribute="Operator" context="Any Brace - Set Value" />
                 <DetectChar char="&quot;" attribute="String" context="Any Brace - String" />
                 <Detect2Chars char="'" char1="'" attribute="String" context="Any Brace - String2" />
+                <Detect2Chars char="$" char1="{" attribute="Special Char" context="Any Brace - Interpolated String" />
 
                 <DetectChar char="," attribute="Symbol" context="#pop!Set Expansion" />
                 <DetectChar char="?" attribute="Symbol" context="Any Brace - Default Value" />
@@ -146,11 +153,11 @@
                 <DetectChar char=";" attribute="Symbol" context="#pop#pop!Set" />
                 <IncludeRules context="Set Value" />
             </context>
-            <context name="Any Brace - String" attribute="Normal Text" lineEndContext="#stay">
+            <context name="Any Brace - String" attribute="String" lineEndContext="#stay">
                 <DetectChar char="&quot;" attribute="String" context="#pop#pop!Set" />
                 <IncludeRules context="String" />
             </context>
-            <context name="Any Brace - String2" attribute="Normal Text" lineEndContext="#stay">
+            <context name="Any Brace - String2" attribute="String" lineEndContext="#stay">
                 <Detect2Chars char="'" char1="'" attribute="String" context="#pop#pop!Set" />
                 <IncludeRules context="String" />
             </context>
@@ -158,6 +165,10 @@
                 <DetectChar char=";" attribute="Symbol" context="#pop#pop!Set" />
                 <IncludeRules context="Inherit" />
             </context>
+            <context name="Any Brace - Interpolated String" attribute="Normal Text">
+                <DetectChar char="}" attribute="Special Char" context="#pop!Set" />
+                <IncludeRules context="Interpolated String" />
+            </context>
             <context name="Any Brace - Default Value" attribute="Normal Text" lineEndContext="#stay">
                 <DetectChar char="," attribute="Symbol" context="#pop#pop!Set Expansion" />
                 <IncludeRules context="Default Value" />
@@ -168,12 +179,23 @@
                 <DetectChar char="&quot;" attribute="String" context="String" />
                 <Detect2Chars char="'" char1="'" attribute="String" context="String2" />
                 <DetectChar char="=" attribute="Operator" context="Set Value" />
+                <Detect2Chars char="$" char1="{" attribute="Special Char" context="Interpolated String" />
                 <RegExpr String="&ident;" attribute="Identifier" />
                 <IncludeRules context="Comment Rules" />
             </context>
             <context name="Inherit" attribute="Normal Text" lineEndContext="#stay">
-                <DetectChar char=";" attribute="Symbol" context="#pop" />
-                <IncludeRules context="Single Expression" />
+                <DetectChar char="(" attribute="Symbol" context="Inherit - Source" />
+                <DetectIdentifier attribute="Identifier" context="Inherit - Keys" />
+            </context>
+            <context name="Inherit - Source" attribute="Normal Text" lineEndContext="#stay">
+                <DetectChar char=")" attribute="Symbol" context="#pop!Inherit - Keys" />
+
+                <IncludeRules context="Parentheses" />
+            </context>
+            <context name="Inherit - Keys" attribute="Normal Text" lineEndContext="#stay">
+                <DetectChar char=";" attribute="Symbol" context="#pop#pop" />
+                <DetectChar char="(" attribute="Error" />
+                <DetectIdentifier attribute="Identifier" />
             </context>
 
             <context name="Set" attribute="Normal Text" lineEndContext="#stay">
diff --git a/xml/odin.xml b/xml/odin.xml
new file mode 100644
--- /dev/null
+++ b/xml/odin.xml
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language
+[
+  <!ENTITY symbols ":!&#37;&amp;()+,-/.*&lt;=&gt;?[]|~^;">
+  <!ENTITY bin_int "(?:[01]+(?:_[01]+)*)">
+  <!ENTITY oct_int "(?:[0-7]+(?:_[0-7]+)*)">
+  <!ENTITY dec_int "(?:[0-9]+(?:_[0-9]+)*)">
+  <!ENTITY hex_int "(?:[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*)">
+  <!ENTITY exp_float "(?:[eE][+-]?&dec_int;)">
+  <!ENTITY exp_hexfloat "(?:[pP][-+]?&dec_int;)">
+]>
+<language name="Odin" section="Sources"
+          version="7" kateversion="5.79"
+          indenter="cstyle"
+          extensions="*.odin"
+          priority="1"
+          author="Akseli Lahtinen (akselmo@akselmo.dev)"
+          license="MIT">
+
+  <highlighting>
+    <list name="controlflow">
+     <item>if</item>
+     <item>else</item>
+     <item>when</item>
+     <item>for</item>
+     <item>in</item>
+     <item>not_in</item>
+     <item>switch</item>
+     <item>return</item>
+     <item>do</item>
+     <item>where</item>
+     <item>fallthrough</item>
+     <item>break</item>
+     <item>continue</item>
+     <item>or_else</item>
+     <item>or_return</item>
+     <item>or_break</item>
+     <item>or_continue</item>
+    </list>
+
+    <list name="keywords">
+      <item>const</item>
+      <item>case</item>
+      <item>defer</item>
+      <item>asm</item>
+      <item>distinct</item>
+      <item>nil</item>
+      <item>true</item>
+      <item>false</item>
+      <item>---</item>
+      <item>struct</item>
+      <item>enum</item>
+      <item>union</item>
+      <item>map</item>
+      <item>bit_set</item>
+      <item>dynamic</item>
+      <item>cast</item>
+      <item>transmute</item>
+      <item>auto_cast</item>
+      <item>force_inline</item>
+      <item>force_no_inline</item>
+      <item>size_of</item>
+      <item>align_of</item>
+      <item>offset_of</item>
+      <item>type_of</item>
+      <item>type_info_of</item>
+      <item>typeid_of</item>
+    </list>
+
+    <list name="context">
+      <item>context</item>
+    </list>
+
+    <list name="types">
+      <item>i8</item>
+      <item>i16</item>
+      <item>i32</item>
+      <item>i64</item>
+      <item>i128</item>
+      <item>int</item>
+      <item>u8</item>
+      <item>u16</item>
+      <item>u32</item>
+      <item>u64</item>
+      <item>u128</item>
+      <item>uint</item>
+      <item>uintptr</item>
+      <item>f16</item>
+      <item>f32</item>
+      <item>f64</item>
+      <item>f16le</item>
+      <item>f32le</item>
+      <item>f64le</item>
+      <item>f16be</item>
+      <item>f32be</item>
+      <item>f64be</item>
+      <item>complex32</item>
+      <item>complex64</item>
+      <item>complex128</item>
+      <item>complex_float</item>
+      <item>complex_double</item>
+      <item>quaternion64</item>
+      <item>quaternion128</item>
+      <item>quaternion256</item>
+      <item>bool</item>
+      <item>b8</item>
+      <item>b16</item>
+      <item>b32</item>
+      <item>b64</item>
+      <item>string</item>
+      <item>cstring</item>
+      <item>rune</item>
+      <item>rawptr</item>
+      <item>any</item>
+      <item>typeid</item>
+      <item>byte</item>
+      <item>u16le</item>
+      <item>u32le</item>
+      <item>u64le</item>
+      <item>u128le</item>
+      <item>i16le</item>
+      <item>i32le</item>
+      <item>i64le</item>
+      <item>i128le</item>
+      <item>i16be</item>
+      <item>i32be</item>
+      <item>i64be</item>
+      <item>i128be</item>
+      <item>u16be</item>
+      <item>u32be</item>
+      <item>u64be</item>
+      <item>u128be</item>
+    </list>
+
+    <list name="procedure">
+      <item>proc</item>
+    </list>
+
+    <list name="import">
+      <item>import</item>
+      <item>package</item>
+      <item>foreign</item>
+    </list>
+
+    <list name="attributes">
+      <item>private</item>
+      <item>require</item>
+      <item>link_name</item>
+      <item>link_prefix</item>
+      <item>linkage</item>
+      <item>default_calling_convention</item>
+      <item>link_section</item>
+      <item>extra_linker_flags</item>
+      <item>deferred_in</item>
+      <item>deferred_out</item>
+      <item>deferred_in_out</item>
+      <item>deferred_none</item>
+      <item>deprecated</item>
+      <item>require_results</item>
+      <item>disabled</item>
+      <item>init</item>
+      <item>cold</item>
+      <item>optimization_mode</item>
+      <item>test</item>
+      <item>static</item>
+      <item>thread_local</item>
+      <item>builtin</item>
+      <item>objc_type</item>
+      <item>objc_is_class_method</item>
+      <item>require_target_feature</item>
+      <item>enable_target_feature</item>
+    </list>
+
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Normal Text" >
+        <Detect2Chars attribute="Comment" char="/" char1="/" context="SingleLineComment"/>
+        <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*" lookAhead="true" beginRegion="Comment1" />
+        <Detect2Chars attribute="Operator" char=":" char1=":" context="#stay"/>
+        <DetectChar attribute="String" context="DoubleQuoteString" char="&quot;"/>
+        <DetectChar attribute="Character" context="Character" char="'"/>
+        <keyword attribute="Control Flow" context="#stay" String="controlflow" />
+        <keyword attribute="Keyword" context="#stay" String="keywords" />
+        <keyword attribute="Data Type" context="#stay" String="types" />
+        <keyword String="context" attribute="Context Variable" context="#stay"/>
+        <DetectChar attribute="Attribute" context="AttributeContext" char='@' column="0"/>
+        <AnyChar context="Number" String="0123456789" lookAhead="1" />
+        <RegExpr attribute="Directive" context="#stay" String="\#\w+"/>
+        <RegExpr attribute="Procedure" firstNonSpace="true" context="Procedure" String="\w{1,}\s{0,}::\s{0,}(?=proc)" lookAhead="true"/>
+        <RegExpr attribute="Procedure" context="#stay" String="[A-Za-z_0-9]*\s*(?=\()" />
+        <RegExpr attribute="Variable" context="#stay" firstNonSpace="true" String="\w{1,},{0,1}\s{0,}\w{0,}\s{0,}(?=:\=|:\s{0,}\w{1,}\s{0,}\=)(?!::)"/> <!--TODO this is too expensive-->
+        <AnyChar attribute="Operator" context="#stay" String="&symbols;" />
+        <DetectChar attribute="Operator" context="#stay" char="{" beginRegion="Brace1" />
+        <DetectChar attribute="Operator" context="#stay" char="}" endRegion="Brace1" />
+        <DetectChar attribute="RawString" context="RawString" char="`" />
+        <keyword attribute="Use" context="#stay" String="import"/>
+        <DetectIdentifier/>
+      </context>
+
+      <context name="SingleLineComment" attribute="Comment" lineEndContext="#pop">
+        <IncludeRules context="##Comments" />
+      </context>
+
+      <context name="MultiLineComment" attribute="Comment" lineEndContext="#stay">
+        <IncludeRules context="##Comments" />
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment1"/>
+      </context>
+
+      <context attribute="String" lineEndContext="#pop" name="DoubleQuoteString">
+          <DetectChar context="EscapeChar" char="\" lookAhead="1"/>
+          <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+      <context attribute="Character" lineEndContext="#pop" name="Character">
+          <DetectChar context="EscapeChar" char="\" lookAhead="1"/>
+          <DetectChar attribute="Character" context="#pop" char="'"/>
+      </context>
+      <context name="EscapeChar" attribute="String Char" lineEndContext="#pop">
+          <RegExpr attribute="String Char" context="#pop" String="\\([nrt'&quot;\\]|x[0-9a-fA-F]{2}|[0-7]{3}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})"/>
+      </context>
+
+      <context name="RawString" attribute="RawString" lineEndContext="#stay">
+          <DetectChar attribute="RawString" context="#pop" char="`" />
+      </context>
+
+      <context name="Procedure" attribute="Procedure" lineEndContext="#pop">
+        <Detect2Chars attribute="Operator" char=":" char1=":" context="#stay"/>
+        <WordDetect attribute="Keyword" context="#stay" String="proc" />
+        <DetectChar attribute="String" context="SimpleDoubleQuoteString" char="&quot;"/> <!--e.g, "contextless" | "c" -->
+        <AnyChar attribute="Symbol" context="#pop" lookAhead="true" String="\("/>
+      </context>
+
+      <context attribute="String" lineEndContext="#pop" name="SimpleDoubleQuoteString">
+          <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+
+      <context name="AttributeContext" attribute="Normal Text" lineEndContext="#pop">
+        <DetectChar attribute="Symbol" context="#stay" char='('/>
+        <DetectSpaces />
+        <keyword attribute="Attribute" context="#pop" String="attributes" />
+      </context>
+
+      <!-- Integer / Float -->
+      <context name="Number" attribute="Normal Text" lineEndContext="#pop">
+          <RegExpr attribute="Float" context="#pop!SuffixNumber" String="&dec_int;(\.&dec_int;&exp_float;?|&exp_float;)"/>
+          <RegExpr attribute="Decimal" context="#pop!SuffixNumber" String="0(?=[^xob]|$)|(?=0[xob])|&dec_int;"/>
+          <RegExpr attribute="Hex" context="#pop!SuffixNumber" String="0x&hex_int;"/>
+          <RegExpr attribute="Octal" context="#pop!SuffixNumber" String="0o&oct_int;"/>
+          <RegExpr attribute="Binary" context="#pop!SuffixNumber" String="0b&bin_int;"/>
+          <DetectChar attribute="Decimal" context="#pop!SuffixNumber" char="0"/>
+      </context>
+      <context name="SuffixNumber" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
+          <DetectChar attribute="Symbol" char=':' context="#pop"/> <!-- in `[0:a]` -->
+          <StringDetect attribute="Symbol" String=".." context="#pop"/> <!-- in `0..a` -->
+          <AnyChar attribute="Error" String=".0123456789" context="#pop"/>
+          <DetectIdentifier attribute="Error" context="#pop"/>
+      </context>
+
+    </contexts>
+    <itemDatas>
+      <itemData name="Normal Text"  defStyleNum="dsNormal" spellChecking="false"/>
+      <itemData name="Variable" defStyleNum="dsVariable"/>
+      <itemData name="Control Flow" defStyleNum="dsControlFlow" spellChecking="false"/>
+      <itemData name="Keyword"      defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="Data Type"    defStyleNum="dsDataType" spellChecking="false"/>
+      <itemData name="Attribute"       defStyleNum="dsAttribute"/>
+      <itemData name="Directive"       defStyleNum="dsPreprocessor"/>
+      <itemData name="Procedure"       defStyleNum="dsFunction"/>
+      <itemData name="Operator"       defStyleNum="dsOperator"/>
+      <itemData name="String"       defStyleNum="dsString"/>
+      <itemData name="RawString"       defStyleNum="dsSpecialString"/>
+      <itemData name="Comment"      defStyleNum="dsComment"/>
+      <itemData name="Binary"       defStyleNum="dsBaseN"  spellChecking="false"/>
+      <itemData name="Octal"        defStyleNum="dsBaseN"  spellChecking="false"/>
+      <itemData name="Hex"          defStyleNum="dsBaseN"  spellChecking="false"/>
+      <itemData name="Decimal"      defStyleNum="dsDecVal" spellChecking="false"/>
+      <itemData name="Float"        defStyleNum="dsFloat"  spellChecking="false"/>
+      <itemData name="Use"          defStyleNum="dsImport"/>
+      <itemData name="Error"        defStyleNum="dsError" spellChecking="false"/>
+      <itemData name="Context Variable" defStyleNum="dsKeyword" spellChecking="0"/>
+      <itemData name="Symbol"       defStyleNum="dsOperator" spellChecking="false"/>
+      <itemData name="String Char"  defStyleNum="dsSpecialChar"/>
+      <itemData name="Character" defStyleNum="dsChar" spellChecking="false"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="//" position="afterwhitespace" />
+      <comment name="multiLine" start="/*" end="*/" region="Comment"/>
+    </comments>
+  </general>
+</language>
diff --git a/xml/orgmode.xml b/xml/orgmode.xml
--- a/xml/orgmode.xml
+++ b/xml/orgmode.xml
@@ -33,20 +33,33 @@
 
 <!-- org syntax spec: https://orgmode.org/worg/dev/org-syntax.html -->
 <!-- syntax highlight: https://docs.kde.org/stable5/en/kate/katepart/highlight.html -->
-<language name="Org Mode" version="4" kateversion="5.79" section="Markup" extensions="*.org" priority="15" author="Gary Wang" license="MIT">
+<language name="Org Mode" version="8" kateversion="5.79" section="Markup" extensions="*.org" priority="15" author="Gary Wang" license="MIT">
   <highlighting>
     <list name="org-todo-keywords-todo">
       <item>TODO</item>
+      <item>NEXT</item>
     </list>
+    <list name="org-todo-keywords-doing">
+      <item>DOING</item>
+    </list>
+    <list name="org-todo-keywords-waiting">
+      <item>WAITING</item>
+    </list>
+    <list name="org-todo-keywords-canceled">
+      <item>CANCELED</item>
+      <item>CANCELLED</item>
+    </list>
     <list name="org-todo-keywords-done">
       <item>DONE</item>
     </list>
     <contexts>
       <context name="Normal Text" attribute="Normal Text" lineEndContext="#stay">
+        <StringDetect String=":PROPERTIES:" attribute="Block" context="property-block" beginRegion="PropertiesBlock" lookAhead="true"/>
         <DetectChar context="find-header" char="*" column="0" lookAhead="true"/>
         <RegExpr attribute="List" context="list" String="^(\s*)&listbullet;(\s+)" column="0"/>
         <RegExpr attribute="Number List" context="numlist" String="^(\s*)\d+(?:\.|\))(\s+)" column="0"/>
         <RegExpr attribute="Comment" String="^(\s*)# .*" column="0"/>
+        <StringDetect attribute="Block" context="find-src-block" String="#+BEGIN_SRC" beginRegion="RegionBlock" column="0"/>
         <RegExpr attribute="Block" context="find-block" String="^#\+BEGIN(_\w+|:).*" beginRegion="RegionBlock" column="0"/>
         <RegExpr attribute="Babel" String="^(\s*)#\+[A-Z]+(?:\[[A-Z]+\])?:.*" column="0"/>
         <DetectChar context="find-bold-normal" char="*" lookAhead="true"/>
@@ -60,12 +73,18 @@
         <RegExpr attribute="Normal Text: Link" String="&implicitlink;"/>
       </context>
       <context name="find-header" attribute="Normal Text" lineEndContext="#pop">
-        <RegExpr context="parse-header" String="^(?:\*){1,}\s+(?:([A-Z]+)\s+){0,1}(?:(\[#(?:[A-Z\d]+)\])\s+){0,1}(.*)\s*(\[[\d/%]+\]){0,1}\s*$" column="0" lookAhead="true"/>
+        <RegExpr context="parse-header" String="^(?:\*){1,}\s+(?:([A-Z]+)\s+){0,1}(?:(\[#(?:[A-Z\d]+)\])\s+){0,1}(.*)\s*(\[[\d/%]+\]){0,1}\s*$" column="0" lookAhead="true" beginRegion="ItemBlock" endRegion="ItemBlock"/>
       </context>
+      <context name="property-block" attribute="Block" lineEndContext="#stay">
+        <StringDetect String=":END:" attribute="Block" context="#pop" endRegion="PropertiesBlock" lookAhead="false"/>
+      </context>
       <context name="parse-header" attribute="Heading" lineEndContext="#pop">
         <RegExpr attribute="Heading" String="(?:\*){1,}\s+" lookAhead="false"/>
         <keyword String="org-todo-keywords-todo" attribute="Keyword Todo" context="#stay" />
         <keyword String="org-todo-keywords-done" attribute="Keyword Done" context="#stay" />
+        <keyword String="org-todo-keywords-doing" attribute="Keyword Doing" context="#stay" />
+        <keyword String="org-todo-keywords-waiting" attribute="Keyword Waiting" context="#stay" />
+        <keyword String="org-todo-keywords-canceled" attribute="Keyword Canceled" context="#stay" />
         <RegExpr attribute="Cookie: Priority" String="\[#(?:[A-Z\d]+)\]" lookAhead="false"/>
         <RegExpr attribute="Cookie: Statistics" String="\[[\d/%]+\]" lookAhead="false"/>
       </context>
@@ -80,6 +99,46 @@
       <context name="find-block" attribute="Block" lineEndContext="#stay">
         <StringDetect context="#pop" attribute="Block" String="#+END%1" dynamic="true" endRegion="RegionBlock" column="0"/>
       </context>
+      <!-- Source Code Syntax Highlighting Blocks -->
+      <context name="find-src-block" attribute="Block" lineEndContext="#pop">
+        <RegExpr attribute="Block" context="#pop!bash-code" String="\s*(?:bash(?:rc|_profile|_login|_logout)?|shell|sh|profile|PKGBUILD|APKBUILD|ebuild|eclass|nix)" insensitive="true"/>
+        <RegExpr attribute="Block" context="#pop!zsh-code" String="\s*(?:zsh)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!cpp-code" String="\s*(?:[ch]pp|[ch]\+\+|[ch]xx|h?cc|hh|cuh?|ino|pde|moc)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!csharp-code" String="\s*(?:cs|csharp|c\#)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!cmake-code" String="\s*(?:cmake|CMakeLists(?:\.txt)?)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!css-code" String="\s*css" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!c-code" String="\s*[ch]" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!doxygen-code" String="\s*doxygen" insensitive="true" beginRegion="code-block"/> <!-- Block comment of Doxygen -->
+        <RegExpr attribute="Block" context="#pop!email-code" String="\s*(?:email|emlx?|mbo?x)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!go-code" String="\s*go(?:lang)?" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!hamlet-code" String="\s*[wxs]?hamlet" insensitive="true" beginRegion="code-block"/> <!-- Included in the Haskell definition -->
+        <RegExpr attribute="Block" context="#pop!haskell-code" String="\s*(?:haskell|c?hs|hs\-boot)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!html-code" String="\s*(?:[sx]?html?|inc|tmpl|tpl)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!java-code" String="\s*(?:java|bsh)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!javascript-code" String="\s*(?:javascript|m?js|es6|kwinscript|julius)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!jsx-code" String="\s*(?:jsx|tsx|(?:java|type)script\-react)" insensitive="true" beginRegion="code-block"/> <!-- Included in the HTML definition. Also apply for TSX. -->
+        <RegExpr attribute="Block" context="#pop!json-code" String="\s*(?:json5?|gltf)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!yaml-code" String="\s*(?:ya?ml)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!matlab-code" String="\s*matlab" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!markdown-code" String="\s*(?:markdown|m?md)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!mustache-code" String="\s*(?:handlebars|hbs|mustache|mst|ractive|hogan|hulk)" insensitive="true" beginRegion="code-block"/> <!-- Included in the HTML definition -->
+        <RegExpr attribute="Block" context="#pop!perl-code" String="\s*(?:perl|p[lm]|pod|psgi|vcl)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!php-code" String="\s*(?:php[3457t]?|wml|phtml?|aw|ctp)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!python-code" String="\s*(?:python[23]?|py[23w]?|[rc]py|sconstruct|gypi?)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!qml-code" String="\s*qml(?:types)?" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!r-code" String="\s*(?:r|rprofile|rscript).?\n" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!raku-code" String="\s*(?:raku(?:mod|doc|test)?|perl6|p[lm]?6|pod6|nqp)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!rest-code" String="\s*(?:rst|rest|restructuredtext)" insensitive="true" beginRegion="code-block"/> <!-- Included in the CMake definition -->
+        <RegExpr attribute="Block" context="#pop!rust-code" String="\s*(?:rust|rs)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!ruby-code" String="\s*(?:ruby|rbx?|rjs|rake|f?cgi|gemspec|irbrc|ru|prawn|Appraisals|(?:Rake|Cap|Chef|Gem|Guard|Hobo|Vagrant||Rant|Berks|Thor|Puppet)file|rxml)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!rhtml-code" String="\s*(?:xml\.|js\.)?erb" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!mysql-code" String="\s*(?:mysql|sql|ddl)" insensitive="true" beginRegion="code-block"/> <!-- Included in the PHP definition -->
+        <RegExpr attribute="Block" context="#pop!nim-code" String="\s*(?:nims?)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!typescript-code" String="\s*(?:typescript|ts)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!xml-code" String="\s*(?:xml|xsd|xspf|tld|jsp|c?pt|dtml|rss|opml|svg|daml|rdf|ui|kcfg|qrc|wsdl|scxml|xbel|dae|sch|brd|docbook)" insensitive="true" beginRegion="code-block"/>
+        <RegExpr attribute="Block" context="#pop!odin-code" String="\s*(?:odin)" insensitive="true" beginRegion="code-block"/>
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+      </context>
       <context name="find-bold-normal" attribute="Normal Text" lineEndContext="#pop">
         <RegExpr attribute="Bold Text" context="#pop" minimal="true" String="&bold_regex;"/>
         <DetectChar attribute="Normal Text" context="#pop" char="*"/>
@@ -114,6 +173,153 @@
         <RegExpr attribute="Code" context="#pop" minimal="true" String="&inlinecode_regex;"/>
         <DetectChar attribute="Normal Text" context="#pop" char="~"/>
       </context>
+
+      <!-- Source Code Syntax Highlighting -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="bash-code" fallthroughContext="Command##Bash">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Bash" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="zsh-code" fallthroughContext="Command##Zsh">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Zsh" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="cmake-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##CMake" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="c-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##C" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="cpp-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##C++" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="csharp-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##C#" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="css-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##CSS" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="doxygen-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="BlockComment##Doxygen" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="email-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Email" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="go-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Go" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="hamlet-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Hamlet" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="haskell-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Haskell" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="html-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##HTML" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="java-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Java" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="javascript-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="jsx-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="Normal##JavaScript React (JSX)" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="json-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##JSON" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="yaml-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##YAML" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="markdown-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="Normal Text##Markdown"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="matlab-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Matlab" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="mustache-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Mustache/Handlebars (HTML)" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="perl-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Perl" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="php-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="phpsource##PHP/PHP" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="python-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Python" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="qml-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="Normal##QML" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="r-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##R Script" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="raku-code" fallthroughContext="term##Raku">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="base##Raku" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="rest-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##reStructuredText" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="ruby-code" fallthroughContext="Expr##Ruby">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="Ruby##Ruby" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="rhtml-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Ruby/Rails/RHTML" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="rust-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Rust" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="mysql-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##SQL (MySQL)" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="nim-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Nim" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="typescript-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="Normal##TypeScript" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="xml-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##XML" includeAttrib="true"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="odin-code">
+        <StringDetect context="#pop" attribute="Block" String="#+END_SRC" endRegion="RegionBlock" column="0"/>
+        <IncludeRules context="##Odin" includeAttrib="true"/>
+      </context>
+
     </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal"/>
@@ -124,6 +330,9 @@
       <itemData name="Strikethrough Text" defStyleNum="dsNormal" strikeOut="true"/>
       <itemData name="Keyword Done" defStyleNum="dsInformation" spellChecking="false"/>
       <itemData name="Keyword Todo" defStyleNum="dsAlert" spellChecking="false"/>
+      <itemData name="Keyword Doing" defStyleNum="dsControlFlow" spellChecking="false"/>
+      <itemData name="Keyword Waiting" defStyleNum="dsOthers" spellChecking="false"/>
+      <itemData name="Keyword Canceled" defStyleNum="dsError" spellChecking="false"/>
       <itemData name="Cookie: Priority" defStyleNum="dsInformation" spellChecking="false"/>
       <itemData name="Cookie: Statistics" defStyleNum="dsInformation" spellChecking="false"/>
       <itemData name="Heading" defStyleNum="dsFunction"/>
diff --git a/xml/php.xml b/xml/php.xml
--- a/xml/php.xml
+++ b/xml/php.xml
@@ -77,7 +77,7 @@
   <!ENTITY float "\b&LNUM;(\.(&LNUM;)?(&EXPONENT;)?|&EXPONENT;)|\.&LNUM;(&EXPONENT;)?">
 ]>
 
-<language name="PHP/PHP" indenter="cstyle" version="27" kateversion="5.79" section="Scripts" extensions="" priority="5" mimetype="" hidden="true">
+<language name="PHP/PHP" indenter="cstyle" version="28" kateversion="5.79" section="Scripts" extensions="" priority="5" mimetype="" hidden="true">
   <highlighting>
     <!-- https://php.watch/versions -->
     <!-- Based on 8.3 (https://php.watch/versions/8.3 and https://stitcher.io/blog/new-in-php-83) -->
@@ -11291,7 +11291,7 @@
       <context name="doublequotestringescaped" attribute="String" lineEndContext="#stay">
         <!-- Common rules for double quoted strings and backticks (execution operator) URL:
               https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double -->
-        <RegExpr attribute="Backslash Code" context="#pop" String="\\([\\nrtvef$&quot;]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u\{[0-9A-Fa-f]+\})"/>
+        <RegExpr attribute="Backslash Code" context="#pop" String="\\([\\nrtvef$&quot;{]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u\{[0-9A-Fa-f]+\})"/>
         <DetectChar attribute="String" context="#pop" char="\"/>
       </context>
 
diff --git a/xml/python.xml b/xml/python.xml
--- a/xml/python.xml
+++ b/xml/python.xml
@@ -38,882 +38,2238 @@
 	<!ENTITY rawString "(?:ru|u?r|)(?:'(?:[^']++|\\')*+'|&quot;(?:[^&quot;]++|\\&quot;)*+&quot;)">
 	<!ENTITY formatString "(?:r?f|fr?)(?:'(?:[^'{]++|\\'|\{\{|\{[^}]++\})*+'|&quot;(?:[^&quot;]++|\\&quot;|\{\{|\{[^}]*+\})*+&quot;)">
 	<!ENTITY string "&rawString;|&formatString;">
-]>
-<!-- Python syntax highlightning v0.9 by Per Wigren -->
-<!-- Python syntax highlighting v1.9 by Michael Bueker (improved keyword differentiation) -->
-<!-- Python syntax highlighting v1.97 by Paul Giannaros -->
-<!-- Python syntax highlighting v1.99 by Primoz Anzur -->
-<!-- Python syntax highlighting v2.01 by Paul Giannaros:
-	* full format character support
-	* unicode string modifier supported -->
-<!-- v2.02 remove RegExpr for nums and make indent consistent -->
-<!-- v2.03 highlight decorators, remove operator regex, don't highlight parens as operators -->
-<!-- v2.04 make alerts visible even if they are directly after ''' or # without a space -->
-<!-- v2.06 decorator names can (and often do) contain periods -->
-<!-- v2.07 add support for %prog and co, see bug 142832 -->
-<!-- v2.08 add missing overloaders, new Python 3 statements, builtins, and keywords -->
-<!-- v2.29 recognize escape sequenzes correctly -->
-<language name="Python" alternativeNames="Py" version="28" style="python" indenter="python" kateversion="5.0" section="Scripts" extensions="*.py;*.pyw;*.pyi;SConstruct;SConscript;*.FCMacro" mimetype="application/x-python;text/x-python;text/x-python3" casesensitive="1" author="Michael Bueker" license="">
-	<highlighting>
-		<list name="import">
-			<item>import</item>
-			<item>from</item>
-			<item>as</item>
-		</list>
-		<list name="defs">
-			<item>class</item>
-			<item>def</item>
-			<item>del</item>
-			<item>global</item>
-			<item>lambda</item>
-			<item>nonlocal</item>
-		</list>
-		<list name="operators">
-			<item>and</item>
-			<item>in</item>
-			<item>is</item>
-			<item>not</item>
-			<item>or</item>
-		</list>
-		<list name="flow">
-			<item>assert</item>
-			<item>break</item>
-			<item>continue</item>
-			<item>elif</item>
-			<item>else</item>
-			<item>except</item>
-			<item>finally</item>
-			<item>for</item>
-			<item>if</item>
-			<item>pass</item>
-			<item>raise</item>
-			<item>return</item>
-			<item>try</item>
-			<item>while</item>
-			<item>with</item>
-			<item>async</item>
-			<item>await</item>
-		</list>
-		<list name="flow_yield">
-			<item>yield</item>
-			<!--
-				"yield from" added here as a keyword for autocompletion. The actual handling
-				is in context="yield" so that we won't need to add space as a weakDeliminator.
-			-->
-			<item>yield from</item>
-		</list>
-		<list name="patternmatching">
-			<item>match</item>
-			<item>case</item>
-		</list>
-		<list name="builtinfuncs">
-			<!-- https://docs.python.org/3.11/library/functions.html#built-in-funcs -->
-			<item>__import__</item>
-			<item>abs</item>
-			<item>aiter</item>
-			<item>all</item>
-			<item>anext</item>
-			<item>any</item>
-			<item>apply</item>
-			<item>ascii</item>
-			<item>basestring</item>
-			<item>bin</item>
-			<item>breakpoint</item>
-			<item>bool</item>
-			<item>buffer</item>
-			<item>bytearray</item>
-			<item>bytes</item>
-			<item>callable</item>
-			<item>chr</item>
-			<item>classmethod</item>
-			<item>cmp</item>
-			<item>coerce</item>
-			<item>compile</item>
-			<item>complex</item>
-			<item>delattr</item>
-			<item>dict</item>
-			<item>dir</item>
-			<item>divmod</item>
-			<item>enumerate</item>
-			<item>eval</item>
-			<item>exec</item>
-			<item>execfile</item>
-			<item>file</item>
-			<item>filter</item>
-			<item>float</item>
-			<item>format</item>
-			<item>frozenset</item>
-			<item>getattr</item>
-			<item>globals</item>
-			<item>hasattr</item>
-			<item>hash</item>
-			<item>help</item>
-			<item>hex</item>
-			<item>id</item>
-			<item>input</item>
-			<item>int</item>
-			<item>intern</item>
-			<item>isinstance</item>
-			<item>issubclass</item>
-			<item>iter</item>
-			<item>len</item>
-			<item>list</item>
-			<item>locals</item>
-			<item>long</item>
-			<item>map</item>
-			<item>max</item>
-			<item>memoryview</item>
-			<item>min</item>
-			<item>next</item>
-			<item>object</item>
-			<item>oct</item>
-			<item>open</item>
-			<item>ord</item>
-			<item>pow</item>
-			<item>print</item>
-			<item>property</item>
-			<item>range</item>
-			<item>raw_input</item>
-			<item>reduce</item>
-			<item>reload</item>
-			<item>repr</item>
-			<item>reversed</item>
-			<item>round</item>
-			<item>set</item>
-			<item>setattr</item>
-			<item>slice</item>
-			<item>sorted</item>
-			<item>staticmethod</item>
-			<item>str</item>
-			<item>sum</item>
-			<item>super</item>
-			<item>tuple</item>
-			<item>type</item>
-			<item>unichr</item>
-			<item>unicode</item>
-			<item>vars</item>
-			<item>xrange</item>
-			<item>zip</item>
-		</list>
-		<list name="specialvars">
-			<item>None</item>
-			<item>self</item>
-			<item>True</item>
-			<item>False</item>
-			<item>NotImplemented</item>
-			<item>Ellipsis</item>
-			<item>__debug__</item>
-			<item>__file__</item>
-			<item>__name__</item>
-			<item>__qualname__</item>
-		</list>
-		<list name="bindings">
-			<item>SIGNAL</item>
-			<item>SLOT</item>
-			<item>connect</item>
-		</list>
-		<list name="overloaders">
-			<!-- https://docs.python.org/3.10/reference/datamodel.html#special-method-names -->
-			<item>__new__</item>
-			<item>__init__</item>
-			<item>__del__</item>
-			<item>__repr__</item>
-			<item>__str__</item>
-			<item>__lt__</item>
-			<item>__le__</item>
-			<item>__eq__</item>
-			<item>__ne__</item>
-			<item>__gt__</item>
-			<item>__ge__</item>
-			<item>__cmp__</item>
-			<item>__rcmp__</item>
-			<item>__hash__</item>
-			<item>__bool__</item>
-			<item>__nonzero__</item>
-			<item>__unicode__</item>
-			<item>__getattr__</item>
-			<item>__setattr__</item>
-			<item>__delattr__</item>
-			<item>__getattribute__</item>
-			<item>__get__</item>
-			<item>__set__</item>
-			<item>__delete__</item>
-			<item>__call__</item>
-			<item>__len__</item>
-			<item>__length_hint__</item>
-			<item>__getitem__</item>
-			<item>__setitem__</item>
-			<item>__delitem__</item>
-			<item>__missing__</item>
-			<item>__iter__</item>
-			<item>__reversed__</item>
-			<item>__contains__</item>
-			<item>__getslice__</item>
-			<item>__setslice__</item>
-			<item>__delslice__</item>
-			<item>__add__</item>
-			<item>__sub__</item>
-			<item>__mul__</item>
-			<item>__matmul__</item>
-			<item>__floordiv__</item>
-			<item>__mod__</item>
-			<item>__divmod__</item>
-			<item>__pow__</item>
-			<item>__lshift__</item>
-			<item>__rshift__</item>
-			<item>__and__</item>
-			<item>__xor__</item>
-			<item>__or__</item>
-			<item>__div__</item>
-			<item>__truediv__</item>
-			<item>__radd__</item>
-			<item>__rsub__</item>
-			<item>__rmul__</item>
-			<item>__rmatmul__</item>
-			<item>__rdiv__</item>
-			<item>__rtruediv__</item>
-			<item>__rfloordiv__</item>
-			<item>__rmod__</item>
-			<item>__rdivmod__</item>
-			<item>__rpow__</item>
-			<item>__rlshift__</item>
-			<item>__rrshift__</item>
-			<item>__rand__</item>
-			<item>__rxor__</item>
-			<item>__ror__</item>
-			<item>__iadd__</item>
-			<item>__isub__</item>
-			<item>__imul__</item>
-			<item>__imatmul__</item>
-			<item>__idiv__</item>
-			<item>__itruediv__</item>
-			<item>__ifloordiv__</item>
-			<item>__imod__</item>
-			<item>__ipow__</item>
-			<item>__ilshift__</item>
-			<item>__irshift__</item>
-			<item>__iand__</item>
-			<item>__ixor__</item>
-			<item>__ior__</item>
-			<item>__neg__</item>
-			<item>__pos__</item>
-			<item>__abs__</item>
-			<item>__invert__</item>
-			<item>__complex__</item>
-			<item>__int__</item>
-			<item>__long__</item>
-			<item>__float__</item>
-			<item>__oct__</item>
-			<item>__hex__</item>
-			<item>__index__</item>
-			<item>__round__</item>
-			<item>__trunc__</item>
-			<item>__floor__</item>
-			<item>__ceil__</item>
-			<item>__coerce__</item>
-			<item>__enter__</item>
-			<item>__exit__</item>
-			<item>__match_args__</item>
-			<item>__buffer__</item>
-			<item>__release_buffer__</item>
-			<item>__bytes__</item>
-			<item>__format__</item>
-			<item>__next__</item>
-			<item>__dir__</item>
-			<item>__await__</item>
-			<item>__aiter__</item>
-			<item>__anext__</item>
-			<item>__aenter__</item>
-			<item>__aexit__</item>
-			<item>__slots__</item>
-			<item>__init_subclass__</item>
-			<item>__set_name__</item>
-			<item>__prepare__</item>
-			<item>__instancecheck__</item>
-			<item>__subclasscheck__</item>
-			<item>__class_getitem__</item>
-		</list>
-		<list name="exceptions">
-			<!--
-				Exceptions list resources used:
-				- http://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
-				- http://docs.python.org/3.10/library/exceptions.html#exception-hierarchy
-			-->
-			<item>ArithmeticError</item>
-			<item>AssertionError</item>
-			<item>AttributeError</item>
-			<item>BaseException</item>
-			<item>BlockingIOError</item>
-			<item>BrokenPipeError</item>
-			<item>BufferError</item>
-			<item>BytesWarning</item>
-			<item>ChildProcessError</item>
-			<item>ConnectionAbortedError</item>
-			<item>ConnectionError</item>
-			<item>ConnectionRefusedError</item>
-			<item>ConnectionResetError</item>
-			<item>DeprecationWarning</item>
-			<item>EnvironmentError</item>
-			<item>EOFError</item>
-			<item>EncodingWarning</item>
-			<item>Exception</item>
-			<item>FileExistsError</item>
-			<item>FileNotFoundError</item>
-			<item>FloatingPointError</item>
-			<item>FutureWarning</item>
-			<item>GeneratorExit</item>
-			<item>ImportError</item>
-			<item>ImportWarning</item>
-			<item>IndentationError</item>
-			<item>IndexError</item>
-			<item>InterruptedError</item>
-			<item>IOError</item>
-			<item>IsADirectoryError</item>
-			<item>KeyboardInterrupt</item>
-			<item>KeyError</item>
-			<item>LookupError</item>
-			<item>MemoryError</item>
-			<item>ModuleNotFoundError</item>
-			<item>NameError</item>
-			<item>NotADirectoryError</item>
-			<item>NotImplementedError</item>
-			<item>OSError</item>
-			<item>OverflowError</item>
-			<item>PendingDeprecationWarning</item>
-			<item>PermissionError</item>
-			<item>ProcessLookupError</item>
-			<item>RecursionError</item>
-			<item>ReferenceError</item>
-			<item>ResourceWarning</item>
-			<item>RuntimeError</item>
-			<item>RuntimeWarning</item>
-			<item>StandardError</item>
-			<item>StopAsyncIteration</item>
-			<item>StopIteration</item>
-			<item>SyntaxError</item>
-			<item>SyntaxWarning</item>
-			<item>SystemError</item>
-			<item>SystemExit</item>
-			<item>TabError</item>
-			<item>TimeoutError</item>
-			<item>TypeError</item>
-			<item>UnboundLocalError</item>
-			<item>UnicodeDecodeError</item>
-			<item>UnicodeEncodeError</item>
-			<item>UnicodeError</item>
-			<item>UnicodeTranslateError</item>
-			<item>UnicodeWarning</item>
-			<item>UserWarning</item>
-			<item>ValueError</item>
-			<item>Warning</item>
-			<item>WindowsError</item>
-			<item>ZeroDivisionError</item>
-		</list>
-		<contexts>
-			<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
-				<DetectSpaces attribute="Normal Text"/>
-
-				<DetectChar attribute="Normal Text" char="(" context="Tuple" beginRegion="Tuple"/>
-				<DetectChar attribute="Normal Text" char="[" context="List" beginRegion="List"/>
-				<DetectChar attribute="Normal Text" char="{" context="Dictionary" beginRegion="Dictionary"/>
-
-				<DetectChar attribute="Comment" char="#" context="Hash comment"/>
-
-				<keyword attribute="Special Variable" String="specialvars" context="#stay"/>
-				<keyword attribute="Flow Control Keyword" String="flow" context="#stay"/>
-				<keyword attribute="Operator Keyword" String="operators" context="#stay"/>
-				<keyword attribute="Builtin Function" String="builtinfuncs" context="#stay"/>
-				<keyword attribute="Definition Keyword" String="defs" context="#stay"/>
-				<keyword attribute="Flow Control Keyword" String="flow_yield" context="yield"/>
-				<keyword attribute="Flow Control Keyword" String="patternmatching" context="Pattern Matching" lookAhead="1" firstNonSpace="1"/>
-				<keyword attribute="Import" String="import" context="#stay"/>
-				<keyword attribute="Exceptions" String="exceptions" context="#stay"/>
-				<keyword attribute="Overloaders" String="overloaders" context="#stay"/>
-				<keyword attribute="Extensions" String="bindings" context="#stay"/>
-
-				<IncludeRules context="Number" />
-				<IncludeRules context="CommentVariants" />
-				<IncludeRules context="StringVariants" />
-
-				<DetectIdentifier attribute="Normal Text"/>
-
-				<RegExpr attribute="Decorator" String="@[_a-zA-Z[:^ascii:]][\._a-zA-Z0-9[:^ascii:]]*" firstNonSpace="true"/>
-				<Detect2Chars attribute="Operator" char=":" char1="=" context="#stay"/>
-				<AnyChar attribute="Operator" String="+*/%|=;&lt;&gt;!^&amp;~-@" context="#stay"/>
-
-				<LineContinue attribute="Operator" context="MultiLineExpr"/>
-
-				<Int attribute="Error"/>
-			</context>
-			<context name="MultiLineExpr" attribute="Normal Text" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
-				<DetectSpaces attribute="Normal Text"/>
-				<IncludeRules context="StringVariants" />
-			</context>
-
-			<!-- https://docs.python.org/2/reference/lexical_analysis.html#integer-and-long-integer-literals -->
-			<!-- https://docs.python.org/3/reference/lexical_analysis.html#integer-literals -->
-			<context name="Number" attribute="Normal Text" lineEndContext="#pop">
-				<!-- fast path -->
-				<RegExpr String="&beforeDigit;[0-9]|&beforePointFloat;\.[0-9]" context="AssumeNumber" lookAhead="1"/>
-			</context>
-			<context name="AssumeNumber" attribute="Normal Text" lineEndContext="#pop">
-				<!-- Complex: 1j ; 1.1j ; 1.j ; .1j ; 1e3j ; 1.1e3j ; 1.e3j ; .1e3j -->
-				<RegExpr attribute="Complex" String="(?:&digitPart;(?:\.(?:&digitPart;)?)?|&beforePointFloat;\.&digitPart;)(?:[eE][\+\-]?&digitPart;)?[jJ]" context="CheckSuffixError"/>
-				<!-- Hexadecimal: 0xA1, Binary: 0b01, Octal: 0o71 -->
-				<RegExpr attribute="Hex" String="0[xX](?:_?[0-9a-fA-F])+" context="CheckSuffixError"/>
-				<RegExpr attribute="Binary" String="0[bB](?:_?[01])+" context="CheckSuffixError"/>
-				<RegExpr attribute="Octal" String="0[oO](?:_?[0-7])+" context="CheckSuffixError"/>
-				<!-- Float: 1.1 ; 1. ; .1 ; 1e3 ; 1.1e3 ; 1.e3 ; .1e3 -->
-				<RegExpr attribute="Float" String="(?:&digitPart;(?:\.(?:&digitPart;)?)?|\.&digitPart;)[eE][\+\-]?&digitPart;|&digitPart;\.(?:&digitPart;)?|\.&digitPart;" context="CheckSuffixError"/>
-				<!-- Decimal: 123 ; 000 -->
-				<!-- l and L are python2 suffixes -->
-				<RegExpr attribute="Int" String="(?:[1-9](?:_?\d)*|0(?:_?0)*)[lL]?" context="CheckSuffixError"/>
-			</context>
-			<context name="CheckSuffixError" attribute="Normal Text" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
-				<RegExpr attribute="Error" String="[\w\d]+" context="#pop#pop"/>
-			</context>
-
-			<context name="yield" attribute="Flow Control Keyword" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
-				<DetectSpaces attribute="Normal Text" context="#stay"/>
-				<WordDetect attribute="Flow Control Keyword" context="#pop" String="from"/>
-			</context>
-
-			<context name="Pattern Matching" attribute="Flow Control Keyword" lineEndContext="#pop">
-				<!--
-					Python 3.10: https://docs.python.org/3.10/reference/compound_stmts.html#the-match-statement
-					( 'match' | 'case' ) expression ':'
-					exclude:
-					( 'match' | 'case' ) ( 'if' | 'for' | '.' | ':' | '=' | ',' | ']' | ')' ) ...
-				-->
-				<RegExpr attribute="Flow Control Keyword" String="\w++(?=\s+(?!(?:if|for)\b)[\w'&quot;~]|\s*+(?![.:=\]),]|(?:if|for)\b)((?:&string;|[^#;(){}]|\(\)|\((?1)\)|\{\}|\{(\s*+(?:(?:&string;|[a-zA-Z0-9.]++)\s*+:\s*+(?:&string;|[^#;(){},]|\(\)|\((?1)\)|\{\}|\{(?2)\})++,?)*+)\})+?):)|" context="#pop"/>
-				<DetectIdentifier attribute="Normal Text" context="#pop"/>
-			</context>
-
-			<context name="#CheckForString" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-				<DetectSpaces/>
-				<LineContinue attribute="Normal Text" context="#pop!CheckForStringNext"/>
-			</context>
-
-			<context name="CheckForStringNext" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-				<DetectSpaces/>
-				<LineContinue attribute="Normal Text" context="#stay"/>
-				<IncludeRules context="StringVariants"/>
-			</context>
-
-			<!-- https://docs.python.org/2/reference/lexical_analysis.html#string-literals -->
-			<!-- https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals -->
-			<context name="StringVariants" attribute="Normal Text" lineEndContext="#stay">
-				<!-- fast path -->
-				<RegExpr String="(?:u|r|b|f|ur|fr|rf|br|rb)?['&quot;]" insensitive="true" context="AssumeStringVariants" lookAhead="1"/>
-			</context>
-			<context name="AssumeStringVariants" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="String" String="u?'''"                insensitive="true" context="#pop!Triple A-string" beginRegion="Triple A-region"/>
-				<RegExpr attribute="String" String="u?&quot;&quot;&quot;" insensitive="true" context="#pop!Triple Q-string" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="String" String="u?'"                  insensitive="true" context="#pop!Single A-string"/>
-				<RegExpr attribute="String" String="u?&quot;"             insensitive="true" context="#pop!Single Q-string"/>
-
-				<StringDetect attribute="F-String" String="f'''"                insensitive="true" context="#pop!Triple A-F-String" beginRegion="Triple A-region"/>
-				<StringDetect attribute="F-String" String="f&quot;&quot;&quot;" insensitive="true" context="#pop!Triple Q-F-String" beginRegion="Triple Q-region"/>
-				<StringDetect attribute="F-String" String="f'"                  insensitive="true" context="#pop!Single A-F-String"/>
-				<StringDetect attribute="F-String" String="f&quot;"             insensitive="true" context="#pop!Single Q-F-String"/>
-
-				<RegExpr attribute="Raw String" String="u?r'''"                insensitive="true" context="#pop!Raw Triple A-string" beginRegion="Triple A-region"/>
-				<RegExpr attribute="Raw String" String="u?r&quot;&quot;&quot;" insensitive="true" context="#pop!Raw Triple Q-string" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="Raw String" String="u?r'"                  insensitive="true" context="#pop!Raw A-string"/>
-				<RegExpr attribute="Raw String" String="u?r&quot;"             insensitive="true" context="#pop!Raw Q-string"/>
-
-				<RegExpr attribute="Raw F-String" String="(?:fr|rf)'''"                insensitive="true" context="#pop!Raw Triple A-F-String" beginRegion="Triple A-region"/>
-				<RegExpr attribute="Raw F-String" String="(?:fr|rf)&quot;&quot;&quot;" insensitive="true" context="#pop!Raw Triple Q-F-String" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="Raw F-String" String="(?:fr|rf)'"                  insensitive="true" context="#pop!Raw A-F-String"/>
-				<RegExpr attribute="Raw F-String" String="(?:fr|rf)&quot;"             insensitive="true" context="#pop!Raw Q-F-String"/>
-
-				<StringDetect attribute="B-String" String="b'''"                insensitive="true" context="#pop!Triple A-B-String" beginRegion="Triple A-region"/>
-				<StringDetect attribute="B-String" String="b&quot;&quot;&quot;" insensitive="true" context="#pop!Triple Q-B-String" beginRegion="Triple Q-region"/>
-				<StringDetect attribute="B-String" String="b'"                  insensitive="true" context="#pop!Single A-B-String"/>
-				<StringDetect attribute="B-String" String="b&quot;"             insensitive="true" context="#pop!Single Q-B-String"/>
-
-				<RegExpr attribute="Raw B-String" String="(?:br|rb)'''"                insensitive="true" context="#pop!Raw Triple A-B-String" beginRegion="Triple A-region"/>
-				<RegExpr attribute="Raw B-String" String="(?:br|rb)&quot;&quot;&quot;" insensitive="true" context="#pop!Raw Triple Q-B-String" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="Raw B-String" String="(?:br|rb)'"                  insensitive="true" context="#pop!Raw A-B-String"/>
-				<RegExpr attribute="Raw B-String" String="(?:br|rb)&quot;"             insensitive="true" context="#pop!Raw Q-B-String"/>
-			</context>
-
-			<!-- https://docs.python.org/2/reference/lexical_analysis.html#string-literals -->
-			<!-- https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals -->
-			<context name="CommentVariants" attribute="Normal Text" lineEndContext="#stay">
-				<!-- fast path -->
-				<RegExpr String="(?:u|r|ur)?['&quot;]" insensitive="true" firstNonSpace="true" context="AssumeCommentVariants" lookAhead="1"/>
-			</context>
-			<context name="AssumeCommentVariants" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Comment" String="(?:u?r?)'''"                insensitive="true" context="#pop!Triple A-comment" beginRegion="Triple A-region"/>
-				<RegExpr attribute="Comment" String="(?:u?r?)&quot;&quot;&quot;" insensitive="true" context="#pop!Triple Q-comment" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="Comment" String="(?:u?r?)'"                  insensitive="true" context="#pop!Single A-comment"/>
-				<RegExpr attribute="Comment" String="(?:u?r?)&quot;"             insensitive="true" context="#pop!Single Q-comment"/>
-			</context>
-
-			<context name="Dictionary" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces/>
-				<DetectChar attribute="Normal Text" char="}" context="#pop" endRegion="Dictionary"/>
-				<IncludeRules context="StringVariants" />
-				<IncludeRules context="Normal" />
-			</context>
-
-			<context name="List" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces/>
-				<DetectChar attribute="Normal Text" char="]" context="#pop" endRegion="List"/>
-				<IncludeRules context="StringVariants" />
-				<IncludeRules context="Normal" />
-			</context>
-
-			<context name="Tuple" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces/>
-				<DetectChar attribute="Normal Text" char=")" context="#pop" endRegion="Tuple"/>
-				<IncludeRules context="StringVariants" />
-				<IncludeRules context="Normal" />
-			</context>
-
-			<context name="UnfinishedStringError" attribute="Error" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<!-- A single string/comment reached the end of the line without a \ line escape -->
-				<!-- We set the following line (or part of it) to the "Error" attribute so that this error is easier to spot -->
-				<RegExpr attribute="Error" String="^(\s{4,}|[^[\]()&quot;']{4,}([&quot;'].*)?)" context="#pop" column="0"/>
-			</context>
-
-			<!-- Comments -->
-
-			<context name="Hash comment" attribute="Comment" lineEndContext="#pop">
-				<DetectSpaces />
-				<IncludeRules context="##Comments" />
-				<DetectIdentifier/>
-			</context>
-
-			<context name="Triple A-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces/>
-				<StringDetect attribute="Comment" String="'''" context="#pop" endRegion="Triple A-region"/>
-				<IncludeRules context="##Comments" />
-				<DetectIdentifier/>
-				<IncludeRules context="stringescape"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Triple Q-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces/>
-				<StringDetect attribute="Comment" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
-				<IncludeRules context="##Comments" />
-				<DetectIdentifier/>
-				<IncludeRules context="stringescape"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Single A-comment" attribute="Comment" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces/>
-				<DetectChar attribute="Comment" char="'" context="#pop"/>
-				<IncludeRules context="##Comments" />
-				<DetectIdentifier/>
-				<IncludeRules context="stringescape"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Single Q-comment" attribute="Comment" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces/>
-				<DetectChar attribute="Comment" char="&quot;" context="#pop"/>
-				<IncludeRules context="##Comments" />
-				<DetectIdentifier/>
-				<IncludeRules context="stringescape"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<!-- Strings -->
-
-			<!-- format characters -->
-			<context name="stringformat" attribute="String Substitution" lineEndContext="#stay">
-				<RegExpr attribute="String Substitution" String="&strsubstitution_py2;|&strsubstitution_py3;" context="#stay"/>
-				<Detect2Chars attribute="String Substitution" char="{" char1="{" context="#stay" />
-				<Detect2Chars attribute="String Substitution" char="}" char1="}" context="#stay" />
-			</context>
-
-			<!-- escape characters -->
-			<context name="stringescape" attribute="String Char" lineEndContext="#stay">
-				<!-- As this highlighting style is for both, Python 2 and 3,
-				we do not know if a normal string is “unicode” or not. So we
-				-->
-				<RegExpr attribute="String Char" String="\\[\\'&quot;abfnrtv]|\\[0-7]{1,3}|\\x[0-9A-Fa-f]{2}|\\u[0-9A-Fa-f]{4}|\\U[0-9A-Fa-f]{8}|\\N\{[a-zA-Z0-9\- ]+\}" context="#stay"/>
-			</context>
-
-			<!-- escape characters -->
-			<context name="bytesescape" attribute="String Char" lineEndContext="#stay">
-				<!-- As this highlighting style is for both, Python 2 and 3,
-				we do not know if a normal string is “unicode” or not. So we
-				-->
-				<RegExpr attribute="String Char" String="\\[\\'&quot;abfnrtv]|\\[0-7]{1,3}|\\x[0-9A-Fa-f]{2}" context="#stay"/>
-			</context>
-
-			<!-- f-literals -->
-			<context name="stringinterpolation" attribute="F-String" lineEndContext="#stay">
-				<Detect2Chars attribute="String Char" char="{" char1="{" context="#stay"/>
-				<DetectChar attribute="String Substitution" char="{" context="String Interpolation"/>
-				<Detect2Chars attribute="String Char" char="}" char1="}" context="#stay"/>
-				<DetectChar attribute="Error" char="}" context="#stay"/>
-			</context>
-			<context name="String Interpolation" attribute="String Substitution" lineEndContext="#stay">
-				<DetectChar attribute="Error" char="\" context="#pop"/>
-				<RegExpr attribute="String Substitution" String="&format_spec;\}" context="#pop"/>
-				<IncludeRules context="Normal"/> <!-- TODO: create expression context instead -->
-			</context>
-
-
-			<!--
-			It follows a Binary tree of string kinds (not even touching byte literals).
-			The levels are:
-			1. triple- vs. single-quoted
-			2. apostrophe vs. quotation mark
-			3. static vs. interpolated (f-literal)
-			4. escaped vs. raw
-			Adding byte literals wouldn’t make the current 2⁴ into 2⁵ contexts, as there are no byte f-literals
-			-->
-
-			<!-- Triple-quoted A-strings -->
-			<context name="Triple A-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces attribute="String"/>
-				<DetectIdentifier attribute="String"/>
-				<IncludeRules context="stringescape"/>
-				<IncludeRules context="stringformat"/>
-				<StringDetect attribute="String" String="'''" context="#pop!#CheckForString" endRegion="Triple A-region"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Raw Triple A-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces attribute="Raw String"/>
-				<DetectIdentifier attribute="Raw String"/>
-				<Detect2Chars attribute="Raw String" char="\" char1="'"/>
-				<Detect2Chars attribute="Raw String" char="\" char1="\"/>
-				<IncludeRules context="stringformat"/>
-				<StringDetect attribute="Raw String" String="'''" context="#pop!#CheckForString" endRegion="Triple A-region"/>
-			</context>
-
-			<context name="Triple A-F-String" attribute="F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces attribute="F-String"/>
-				<DetectIdentifier attribute="F-String"/>
-				<IncludeRules context="stringescape"/>
-				<IncludeRules context="stringinterpolation"/>
-				<StringDetect attribute="F-String" String="'''" context="#pop!#CheckForString" endRegion="Triple A-region"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Raw Triple A-F-String" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces attribute="Raw F-String"/>
-				<DetectIdentifier attribute="Raw F-String"/>
-				<Detect2Chars attribute="Raw F-String" char="\" char1="'"/>
-				<Detect2Chars attribute="Raw F-String" char="\" char1="\"/>
-				<IncludeRules context="stringinterpolation"/>
-				<StringDetect attribute="Raw F-String" String="'''" context="#pop!#CheckForString" endRegion="Triple A-region"/>
-			</context>
-
-			<context name="Triple A-B-String" attribute="B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<RegExpr attribute="B-String" String="([\x20-\x26\x28-\x5B\x5D-\x7E]++|\\(?=[^\\'&quot;abfnrtvx0-7])|\\x(?![0-9a-fA-F]{2})|'(?!''))++"/>
-				<IncludeRules context="bytesescape"/>
-				<StringDetect attribute="B-String" String="'''" context="#pop!#CheckForString" endRegion="Triple A-region"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-				<RegExpr attribute="Error" String="."/>
-			</context>
-
-			<context name="Raw Triple A-B-String" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<RegExpr attribute="Raw B-String" String="([\x20-\x26\x28-\x5B\x5D-\x7E]++|\\.?|'(?!''))++"/>
-				<StringDetect attribute="Raw B-String" String="'''" context="#pop!#CheckForString" endRegion="Triple A-region"/>
-				<RegExpr attribute="Error" String="."/>
-			</context>
-
-			<!-- Triple-quoted Q-strings -->
-			<context name="Triple Q-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces attribute="String"/>
-				<DetectIdentifier attribute="String"/>
-				<IncludeRules context="stringescape"/>
-				<IncludeRules context="stringformat"/>
-				<StringDetect attribute="String" String="&quot;&quot;&quot;" context="#pop!#CheckForString" endRegion="Triple Q-region"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Raw Triple Q-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces attribute="Raw String"/>
-				<DetectIdentifier attribute="Raw String"/>
-				<Detect2Chars attribute="Raw String" char="\" char1="&quot;"/>
-				<Detect2Chars attribute="Raw String" char="\" char1="\"/>
-				<IncludeRules context="stringformat"/>
-				<StringDetect attribute="Raw String" String="&quot;&quot;&quot;" context="#pop!#CheckForString" endRegion="Triple Q-region"/>
-			</context>
-
-			<context name="Triple Q-F-String" attribute="F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces attribute="F-String"/>
-				<DetectIdentifier attribute="F-String"/>
-				<IncludeRules context="stringescape"/>
-				<IncludeRules context="stringinterpolation"/>
-				<StringDetect attribute="F-String" String="&quot;&quot;&quot;" context="#pop!#CheckForString" endRegion="Triple Q-region"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Raw Triple Q-F-String" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<DetectSpaces attribute="Raw F-String"/>
-				<DetectIdentifier attribute="Raw F-String"/>
-				<Detect2Chars attribute="Raw F-String" char="\" char1="&quot;"/>
-				<Detect2Chars attribute="Raw F-String" char="\" char1="\"/>
-				<IncludeRules context="stringinterpolation"/>
-				<StringDetect attribute="Raw F-String" String="&quot;&quot;&quot;" context="#pop!#CheckForString" endRegion="Triple Q-region"/>
-			</context>
-
-			<context name="Triple Q-B-String" attribute="B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<RegExpr attribute="B-String" String="([\x20\x21\x23-\x5B\x5D-\x7E]++|\\(?=[^\\'&quot;abfnrtvx0-7])|\\x(?![0-9a-fA-F]{2})|&quot;(?!&quot;&quot;))++"/>
-				<IncludeRules context="bytesescape"/>
-				<StringDetect attribute="B-String" String="&quot;&quot;&quot;" context="#pop!#CheckForString" endRegion="Triple Q-region"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-				<RegExpr attribute="Error" String="."/>
-			</context>
-
-			<context name="Raw Triple Q-B-String" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<RegExpr attribute="Raw B-String" String="([\x20\x21\x23-\x5B\x5D-\x7E]++|\\.?|&quot;(?!&quot;&quot;))++"/>
-				<StringDetect attribute="Raw B-String" String="&quot;&quot;&quot;" context="#pop!#CheckForString" endRegion="Triple Q-region"/>
-				<RegExpr attribute="Error" String="."/>
-			</context>
-
-
-			<!-- Single-quoted A-strings -->
-			<context name="Single A-string" attribute="String" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces attribute="String"/>
-				<DetectIdentifier attribute="String"/>
-				<IncludeRules context="stringescape"/>
-				<IncludeRules context="stringformat"/>
-				<DetectChar attribute="String" char="'" context="#pop!#CheckForString"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Raw A-string" attribute="Raw String" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces attribute="Raw String"/>
-				<DetectIdentifier attribute="Raw String"/>
-				<Detect2Chars attribute="Raw String" char="\" char1="'"/>
-				<Detect2Chars attribute="Raw String" char="\" char1="\"/>
-				<IncludeRules context="stringformat"/>
-				<DetectChar attribute="Raw String" char="'" context="#pop!#CheckForString"/>
-				<LineContinue attribute="Raw String" context="#stay"/>
-			</context>
-
-			<context name="Single A-F-String" attribute="F-String" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces attribute="F-String"/>
-				<DetectIdentifier attribute="F-String"/>
-				<IncludeRules context="stringescape"/>
-				<IncludeRules context="stringinterpolation"/>
-				<DetectChar attribute="F-String" char="'" context="#pop!#CheckForString"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Raw A-F-String" attribute="Raw F-String" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces attribute="Raw F-String"/>
-				<DetectIdentifier attribute="Raw F-String"/>
-				<Detect2Chars attribute="Raw F-String" char="\" char1="'"/>
-				<Detect2Chars attribute="Raw F-String" char="\" char1="\"/>
-				<IncludeRules context="stringinterpolation"/>
-				<DetectChar attribute="Raw F-String" char="'" context="#pop!#CheckForString"/>
-				<LineContinue attribute="Raw F-String" context="#stay"/>
-			</context>
-
-			<context name="Single A-B-String" attribute="B-String" lineEndContext="#pop!UnfinishedStringError">
-				<RegExpr attribute="B-String" String="([\x20-\x26\x28-\x5B\x5D-\x7E]++|\\(?=[^\\'&quot;abfnrtvx0-7])|\\x(?![0-9a-fA-F]{2}))++"/>
-				<IncludeRules context="bytesescape"/>
-				<DetectChar attribute="B-String" char="'" context="#pop!#CheckForString"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-				<RegExpr attribute="Error" String="."/>
-			</context>
-
-			<context name="Raw A-B-String" attribute="Raw B-String" lineEndContext="#pop!UnfinishedStringError">
-				<RegExpr attribute="Raw B-String" String="([\x20-\x26\x28-\x5B\x5D-\x7E]++|\\.)++"/>
-				<DetectChar attribute="Raw B-String" char="'" context="#pop!#CheckForString"/>
-				<LineContinue attribute="Raw B-String" context="#stay"/>
-				<RegExpr attribute="Error" String="."/>
-			</context>
-
-			<!-- Single-quoted Q-strings -->
-			<context name="Single Q-string" attribute="String" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces attribute="String"/>
-				<DetectIdentifier attribute="String"/>
-				<IncludeRules context="stringescape"/>
-				<IncludeRules context="stringformat"/>
-				<DetectChar attribute="String" char="&quot;" context="#pop!#CheckForString"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Raw Q-string" attribute="Raw String" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces attribute="Raw String"/>
-				<DetectIdentifier attribute="Raw String"/>
-				<Detect2Chars attribute="Raw String" char="\" char1="&quot;"/>
-				<Detect2Chars attribute="Raw String" char="\" char1="\"/>
-				<IncludeRules context="stringformat"/>
-				<DetectChar attribute="Raw String" char="&quot;" context="#pop!#CheckForString"/>
-				<LineContinue attribute="Raw String" context="#stay"/>
-			</context>
-
-			<context name="Single Q-F-String" attribute="F-String" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces attribute="F-String"/>
-				<DetectIdentifier attribute="F-String"/>
-				<IncludeRules context="stringescape"/>
-				<IncludeRules context="stringinterpolation"/>
-				<DetectChar attribute="F-String" char="&quot;" context="#pop!#CheckForString"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-			</context>
-
-			<context name="Raw Q-F-String" attribute="Raw F-String" lineEndContext="#pop!UnfinishedStringError">
-				<DetectSpaces attribute="Raw F-String"/>
-				<DetectIdentifier attribute="Raw F-String"/>
-				<Detect2Chars attribute="Raw F-String" char="\" char1="&quot;"/>
-				<Detect2Chars attribute="Raw F-String" char="\" char1="\"/>
-				<IncludeRules context="stringinterpolation"/>
-				<DetectChar attribute="Raw F-String" char="&quot;" context="#pop!#CheckForString"/>
-				<LineContinue attribute="Raw F-String" context="#stay"/>
-			</context>
-
-			<context name="Single Q-B-String" attribute="B-String" lineEndContext="#pop!UnfinishedStringError">
-				<RegExpr attribute="B-String" String="([\x20\x21\x23-\x5B\x5D-\x7E]++|\\(?=[^\\'&quot;abfnrtvx0-7])|\\x(?![0-9a-fA-F]{2}))++"/>
-				<IncludeRules context="bytesescape"/>
-				<DetectChar attribute="B-String" char="&quot;" context="#pop!#CheckForString"/>
-				<LineContinue attribute="String Char" context="#stay"/>
-				<RegExpr attribute="Error" String="."/>
-			</context>
-
-			<context name="Raw Q-B-String" attribute="Raw B-String" lineEndContext="#pop!UnfinishedStringError">
-				<RegExpr attribute="Raw B-String" String="([\x20\x21\x23-\x5B\x5D-\x7E]++|\\.)++"/>
-				<DetectChar attribute="Raw B-String" char="&quot;" context="#pop!#CheckForString"/>
-				<Detect2Chars attribute="Raw B-String" char="\" char1="\"/>
-				<LineContinue attribute="Raw B-String" context="#stay"/>
-				<RegExpr attribute="Error" String="."/>
-			</context>
-
-		</contexts>
-
-		<itemDatas>
-			<itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false"/>
-			<itemData name="Definition Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
-			<itemData name="Operator" defStyleNum="dsOperator" spellChecking="false"/>
-			<itemData name="Operator Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
-			<itemData name="Flow Control Keyword" defStyleNum="dsControlFlow" spellChecking="false"/>
-			<itemData name="Builtin Function" defStyleNum="dsBuiltIn" spellChecking="false"/>
-			<itemData name="Special Variable" defStyleNum="dsVariable" spellChecking="false"/>
-			<itemData name="Extensions" defStyleNum="dsExtension" spellChecking="false"/>
-			<itemData name="Exceptions" defStyleNum="dsPreprocessor" spellChecking="false"/>
-			<itemData name="Overloaders" defStyleNum="dsFunction" spellChecking="false"/>
-			<itemData name="Import" defStyleNum="dsImport" spellChecking="false"/>
-			<itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
-			<itemData name="Int" defStyleNum="dsDecVal" spellChecking="false"/>
-			<itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false"/>
-			<itemData name="Octal" defStyleNum="dsBaseN" spellChecking="false"/>
-			<itemData name="Binary" defStyleNum="dsBaseN" spellChecking="false"/>
-			<itemData name="Complex" defStyleNum="dsOthers" spellChecking="false"/>
-			<itemData name="Comment" defStyleNum="dsComment"/>
-			<itemData name="String" defStyleNum="dsString"/>
-			<itemData name="Raw String" defStyleNum="dsVerbatimString"/>
-			<itemData name="F-String" defStyleNum="dsSpecialString"/>
-			<itemData name="Raw F-String" defStyleNum="dsVerbatimString"/>
-			<itemData name="B-String" defStyleNum="dsString" spellChecking="false"/>
-			<itemData name="Raw B-String" defStyleNum="dsVerbatimString" spellChecking="false"/>
-			<itemData name="String Char" defStyleNum="dsChar" spellChecking="false"/>
-			<itemData name="String Substitution" defStyleNum="dsSpecialChar" spellChecking="false"/>
-			<itemData name="Decorator" defStyleNum="dsAttribute" spellChecking="false"/>
-			<itemData name="Error" defStyleNum="dsError"/>
+
+	<!ENTITY escapedHex "\\x[0-9A-Fa-f]{2}">
+	<!ENTITY escapedHexUni "&escapedHex;|\\u[0-9A-Fa-f]{4}|\\U[0-9A-Fa-f]{8}|\\N\{[a-zA-Z0-9\- ]+\}">
+
+	<!ENTITY fStringSimpleParam "(?:[\w(), ]*|'[^']*'|&quot;[^&quot;]*&quot;)*">
+	<!ENTITY fStringSimpleIdent "(?:[_[:alpha:]]\w*&format_spec;)">
+	<!ENTITY fStringSimple "(?:\{[-+]?(&fStringSimpleIdent;(\.&fStringSimpleIdent;?|\(&fStringSimpleParam;\)|\[&fStringSimpleParam;\]|[-+*/&#37;@|&amp;^ ])*+)?\})">
+	<!ENTITY regFStringRangeN "(?:&fStringSimple;|[0-9]+)">
+]>
+<!-- Python syntax highlightning v0.9 by Per Wigren -->
+<!-- Python syntax highlighting v1.9 by Michael Bueker (improved keyword differentiation) -->
+<!-- Python syntax highlighting v1.97 by Paul Giannaros -->
+<!-- Python syntax highlighting v1.99 by Primoz Anzur -->
+<!-- Python syntax highlighting v2.01 by Paul Giannaros:
+	* full format character support
+	* unicode string modifier supported -->
+<!-- v2.02 remove RegExpr for nums and make indent consistent -->
+<!-- v2.03 highlight decorators, remove operator regex, don't highlight parens as operators -->
+<!-- v2.04 make alerts visible even if they are directly after ''' or # without a space -->
+<!-- v2.06 decorator names can (and often do) contain periods -->
+<!-- v2.07 add support for %prog and co, see bug 142832 -->
+<!-- v2.08 add missing overloaders, new Python 3 statements, builtins, and keywords -->
+<!-- v2.29 recognize escape sequenzes correctly -->
+<language name="Python" alternativeNames="Py" version="30" style="python" indenter="python" kateversion="5.0" section="Scripts" extensions="*.py;*.pyw;*.pyi;SConstruct;SConscript;*.FCMacro" mimetype="application/x-python;text/x-python;text/x-python3" casesensitive="1" author="Michael Bueker" license="">
+	<highlighting>
+		<list name="import">
+			<item>import</item>
+			<item>from</item>
+			<item>as</item>
+		</list>
+		<list name="defs">
+			<item>class</item>
+			<item>def</item>
+			<item>del</item>
+			<item>global</item>
+			<item>lambda</item>
+			<item>nonlocal</item>
+		</list>
+		<list name="operators">
+			<item>and</item>
+			<item>in</item>
+			<item>is</item>
+			<item>not</item>
+			<item>or</item>
+		</list>
+		<list name="flow">
+			<item>assert</item>
+			<item>break</item>
+			<item>continue</item>
+			<item>elif</item>
+			<item>else</item>
+			<item>except</item>
+			<item>finally</item>
+			<item>for</item>
+			<item>if</item>
+			<item>pass</item>
+			<item>raise</item>
+			<item>return</item>
+			<item>try</item>
+			<item>while</item>
+			<item>with</item>
+			<item>async</item>
+			<item>await</item>
+		</list>
+		<list name="flow_yield">
+			<item>yield</item>
+			<!--
+				"yield from" added here as a keyword for autocompletion. The actual handling
+				is in context="yield" so that we won't need to add space as a weakDeliminator.
+			-->
+			<item>yield from</item>
+		</list>
+		<list name="patternmatching">
+			<item>match</item>
+			<item>case</item>
+		</list>
+		<list name="builtinfuncs">
+			<!-- https://docs.python.org/3.11/library/functions.html#built-in-funcs -->
+			<item>__import__</item>
+			<item>abs</item>
+			<item>aiter</item>
+			<item>all</item>
+			<item>anext</item>
+			<item>any</item>
+			<item>apply</item>
+			<item>ascii</item>
+			<item>basestring</item>
+			<item>bin</item>
+			<item>breakpoint</item>
+			<item>bool</item>
+			<item>buffer</item>
+			<item>bytearray</item>
+			<item>bytes</item>
+			<item>callable</item>
+			<item>chr</item>
+			<item>classmethod</item>
+			<item>cmp</item>
+			<item>coerce</item>
+			<item>compile</item>
+			<item>complex</item>
+			<item>delattr</item>
+			<item>dict</item>
+			<item>dir</item>
+			<item>divmod</item>
+			<item>enumerate</item>
+			<item>eval</item>
+			<item>exec</item>
+			<item>execfile</item>
+			<item>file</item>
+			<item>filter</item>
+			<item>float</item>
+			<item>format</item>
+			<item>frozenset</item>
+			<item>getattr</item>
+			<item>globals</item>
+			<item>hasattr</item>
+			<item>hash</item>
+			<item>help</item>
+			<item>hex</item>
+			<item>id</item>
+			<item>input</item>
+			<item>int</item>
+			<item>intern</item>
+			<item>isinstance</item>
+			<item>issubclass</item>
+			<item>iter</item>
+			<item>len</item>
+			<item>list</item>
+			<item>locals</item>
+			<item>long</item>
+			<item>map</item>
+			<item>max</item>
+			<item>memoryview</item>
+			<item>min</item>
+			<item>next</item>
+			<item>object</item>
+			<item>oct</item>
+			<item>open</item>
+			<item>ord</item>
+			<item>pow</item>
+			<item>print</item>
+			<item>property</item>
+			<item>range</item>
+			<item>raw_input</item>
+			<item>reduce</item>
+			<item>reload</item>
+			<item>repr</item>
+			<item>reversed</item>
+			<item>round</item>
+			<item>set</item>
+			<item>setattr</item>
+			<item>slice</item>
+			<item>sorted</item>
+			<item>staticmethod</item>
+			<item>str</item>
+			<item>sum</item>
+			<item>super</item>
+			<item>tuple</item>
+			<item>type</item>
+			<item>unichr</item>
+			<item>unicode</item>
+			<item>vars</item>
+			<item>xrange</item>
+			<item>zip</item>
+		</list>
+		<list name="specialvars">
+			<item>None</item>
+			<item>self</item>
+			<item>True</item>
+			<item>False</item>
+			<item>NotImplemented</item>
+			<item>Ellipsis</item>
+			<item>__all__</item>
+			<item>__class__</item>
+			<item>__debug__</item>
+			<item>__file__</item>
+			<item>__name__</item>
+			<item>__qualname__</item>
+			<item>__slots__</item>
+		</list>
+		<list name="bindings">
+			<item>SIGNAL</item>
+			<item>SLOT</item>
+			<item>connect</item>
+		</list>
+		<list name="overloaders">
+			<!-- https://docs.python.org/3.10/reference/datamodel.html#special-method-names -->
+			<item>__new__</item>
+			<item>__init__</item>
+			<item>__del__</item>
+			<item>__repr__</item>
+			<item>__str__</item>
+			<item>__lt__</item>
+			<item>__le__</item>
+			<item>__eq__</item>
+			<item>__ne__</item>
+			<item>__gt__</item>
+			<item>__ge__</item>
+			<item>__cmp__</item>
+			<item>__rcmp__</item>
+			<item>__hash__</item>
+			<item>__bool__</item>
+			<item>__nonzero__</item>
+			<item>__unicode__</item>
+			<item>__getattr__</item>
+			<item>__setattr__</item>
+			<item>__delattr__</item>
+			<item>__getattribute__</item>
+			<item>__get__</item>
+			<item>__set__</item>
+			<item>__delete__</item>
+			<item>__call__</item>
+			<item>__len__</item>
+			<item>__length_hint__</item>
+			<item>__getitem__</item>
+			<item>__setitem__</item>
+			<item>__delitem__</item>
+			<item>__missing__</item>
+			<item>__iter__</item>
+			<item>__reversed__</item>
+			<item>__contains__</item>
+			<item>__getslice__</item>
+			<item>__setslice__</item>
+			<item>__delslice__</item>
+			<item>__add__</item>
+			<item>__sub__</item>
+			<item>__mul__</item>
+			<item>__matmul__</item>
+			<item>__floordiv__</item>
+			<item>__mod__</item>
+			<item>__divmod__</item>
+			<item>__pow__</item>
+			<item>__lshift__</item>
+			<item>__rshift__</item>
+			<item>__and__</item>
+			<item>__xor__</item>
+			<item>__or__</item>
+			<item>__div__</item>
+			<item>__truediv__</item>
+			<item>__radd__</item>
+			<item>__rsub__</item>
+			<item>__rmul__</item>
+			<item>__rmatmul__</item>
+			<item>__rdiv__</item>
+			<item>__rtruediv__</item>
+			<item>__rfloordiv__</item>
+			<item>__rmod__</item>
+			<item>__rdivmod__</item>
+			<item>__rpow__</item>
+			<item>__rlshift__</item>
+			<item>__rrshift__</item>
+			<item>__rand__</item>
+			<item>__rxor__</item>
+			<item>__ror__</item>
+			<item>__iadd__</item>
+			<item>__isub__</item>
+			<item>__imul__</item>
+			<item>__imatmul__</item>
+			<item>__idiv__</item>
+			<item>__itruediv__</item>
+			<item>__ifloordiv__</item>
+			<item>__imod__</item>
+			<item>__ipow__</item>
+			<item>__ilshift__</item>
+			<item>__irshift__</item>
+			<item>__iand__</item>
+			<item>__ixor__</item>
+			<item>__ior__</item>
+			<item>__neg__</item>
+			<item>__pos__</item>
+			<item>__abs__</item>
+			<item>__invert__</item>
+			<item>__complex__</item>
+			<item>__int__</item>
+			<item>__long__</item>
+			<item>__float__</item>
+			<item>__oct__</item>
+			<item>__hex__</item>
+			<item>__index__</item>
+			<item>__round__</item>
+			<item>__trunc__</item>
+			<item>__floor__</item>
+			<item>__ceil__</item>
+			<item>__coerce__</item>
+			<item>__enter__</item>
+			<item>__exit__</item>
+			<item>__match_args__</item>
+			<item>__buffer__</item>
+			<item>__release_buffer__</item>
+			<item>__bytes__</item>
+			<item>__format__</item>
+			<item>__next__</item>
+			<item>__dir__</item>
+			<item>__await__</item>
+			<item>__aiter__</item>
+			<item>__anext__</item>
+			<item>__aenter__</item>
+			<item>__aexit__</item>
+			<item>__slots__</item>
+			<item>__init_subclass__</item>
+			<item>__set_name__</item>
+			<item>__prepare__</item>
+			<item>__instancecheck__</item>
+			<item>__subclasscheck__</item>
+			<item>__class_getitem__</item>
+		</list>
+		<list name="exceptions">
+			<!--
+				Exceptions list resources used:
+				- http://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
+				- http://docs.python.org/3.10/library/exceptions.html#exception-hierarchy
+			-->
+			<item>ArithmeticError</item>
+			<item>AssertionError</item>
+			<item>AttributeError</item>
+			<item>BaseException</item>
+			<item>BlockingIOError</item>
+			<item>BrokenPipeError</item>
+			<item>BufferError</item>
+			<item>BytesWarning</item>
+			<item>ChildProcessError</item>
+			<item>ConnectionAbortedError</item>
+			<item>ConnectionError</item>
+			<item>ConnectionRefusedError</item>
+			<item>ConnectionResetError</item>
+			<item>DeprecationWarning</item>
+			<item>EnvironmentError</item>
+			<item>EOFError</item>
+			<item>EncodingWarning</item>
+			<item>Exception</item>
+			<item>FileExistsError</item>
+			<item>FileNotFoundError</item>
+			<item>FloatingPointError</item>
+			<item>FutureWarning</item>
+			<item>GeneratorExit</item>
+			<item>ImportError</item>
+			<item>ImportWarning</item>
+			<item>IndentationError</item>
+			<item>IndexError</item>
+			<item>InterruptedError</item>
+			<item>IOError</item>
+			<item>IsADirectoryError</item>
+			<item>KeyboardInterrupt</item>
+			<item>KeyError</item>
+			<item>LookupError</item>
+			<item>MemoryError</item>
+			<item>ModuleNotFoundError</item>
+			<item>NameError</item>
+			<item>NotADirectoryError</item>
+			<item>NotImplementedError</item>
+			<item>OSError</item>
+			<item>OverflowError</item>
+			<item>PendingDeprecationWarning</item>
+			<item>PermissionError</item>
+			<item>ProcessLookupError</item>
+			<item>RecursionError</item>
+			<item>ReferenceError</item>
+			<item>ResourceWarning</item>
+			<item>RuntimeError</item>
+			<item>RuntimeWarning</item>
+			<item>StandardError</item>
+			<item>StopAsyncIteration</item>
+			<item>StopIteration</item>
+			<item>SyntaxError</item>
+			<item>SyntaxWarning</item>
+			<item>SystemError</item>
+			<item>SystemExit</item>
+			<item>TabError</item>
+			<item>TimeoutError</item>
+			<item>TypeError</item>
+			<item>UnboundLocalError</item>
+			<item>UnicodeDecodeError</item>
+			<item>UnicodeEncodeError</item>
+			<item>UnicodeError</item>
+			<item>UnicodeTranslateError</item>
+			<item>UnicodeWarning</item>
+			<item>UserWarning</item>
+			<item>ValueError</item>
+			<item>Warning</item>
+			<item>WindowsError</item>
+			<item>ZeroDivisionError</item>
+		</list>
+		<contexts>
+			<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
+				<DetectSpaces attribute="Normal Text"/>
+
+				<DetectChar attribute="Normal Text" char="(" context="Tuple" beginRegion="Tuple"/>
+				<DetectChar attribute="Normal Text" char="[" context="List" beginRegion="List"/>
+				<DetectChar attribute="Normal Text" char="{" context="Dictionary" beginRegion="Dictionary"/>
+
+				<DetectChar attribute="Comment" char="#" context="Hash comment"/>
+
+				<keyword attribute="Special Variable" String="specialvars" context="#stay"/>
+				<keyword attribute="Flow Control Keyword" String="flow" context="#stay"/>
+				<keyword attribute="Operator Keyword" String="operators" context="#stay"/>
+				<keyword attribute="Builtin Function" String="builtinfuncs" context="#stay"/>
+				<keyword attribute="Definition Keyword" String="defs" context="#stay"/>
+				<keyword attribute="Flow Control Keyword" String="flow_yield" context="yield"/>
+				<keyword attribute="Flow Control Keyword" String="patternmatching" context="Pattern Matching" lookAhead="1" firstNonSpace="1"/>
+				<keyword attribute="Import" String="import" context="#stay"/>
+				<keyword attribute="Exceptions" String="exceptions" context="#stay"/>
+				<keyword attribute="Overloaders" String="overloaders" context="#stay"/>
+				<keyword attribute="Extensions" String="bindings" context="#stay"/>
+
+				<IncludeRules context="Number" />
+				<IncludeRules context="CommentVariants" />
+				<IncludeRules context="StringVariants" />
+
+				<DetectIdentifier attribute="Normal Text"/>
+
+				<RegExpr attribute="Decorator" String="@[_a-zA-Z[:^ascii:]][\._a-zA-Z0-9[:^ascii:]]*" firstNonSpace="true"/>
+				<Detect2Chars attribute="Operator" char=":" char1="=" context="#stay"/>
+				<AnyChar attribute="Operator" String="+*/%|=;&lt;&gt;!^&amp;~-@" context="#stay"/>
+
+				<LineContinue attribute="Operator" context="MultiLineExpr"/>
+
+				<Int attribute="Error"/>
+			</context>
+			<!-- a string at the beginning of lines is a comment, MultiLineExpr prevents this -->
+			<context name="MultiLineExpr" attribute="Normal Text" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
+				<DetectSpaces attribute="Normal Text"/>
+				<IncludeRules context="StringVariants"/>
+			</context>
+
+			<!-- https://docs.python.org/2/reference/lexical_analysis.html#integer-and-long-integer-literals -->
+			<!-- https://docs.python.org/3/reference/lexical_analysis.html#integer-literals -->
+			<context name="Number" attribute="Normal Text" lineEndContext="#pop">
+				<!-- fast path -->
+				<RegExpr String="&beforeDigit;[0-9]|&beforePointFloat;\.[0-9]" context="AssumeNumber" lookAhead="1"/>
+			</context>
+			<context name="AssumeNumber" attribute="Normal Text" lineEndContext="#pop">
+				<!-- Complex: 1j ; 1.1j ; 1.j ; .1j ; 1e3j ; 1.1e3j ; 1.e3j ; .1e3j -->
+				<RegExpr attribute="Complex" String="(?:&digitPart;(?:\.(?:&digitPart;)?)?|&beforePointFloat;\.&digitPart;)(?:[eE][\+\-]?&digitPart;)?[jJ]" context="CheckSuffixError"/>
+				<!-- Hexadecimal: 0xA1, Binary: 0b01, Octal: 0o71 -->
+				<RegExpr attribute="Hex" String="0[xX](?:_?[0-9a-fA-F])+" context="CheckSuffixError"/>
+				<RegExpr attribute="Binary" String="0[bB](?:_?[01])+" context="CheckSuffixError"/>
+				<RegExpr attribute="Octal" String="0[oO](?:_?[0-7])+" context="CheckSuffixError"/>
+				<!-- Float: 1.1 ; 1. ; .1 ; 1e3 ; 1.1e3 ; 1.e3 ; .1e3 -->
+				<RegExpr attribute="Float" String="(?:&digitPart;(?:\.(?:&digitPart;)?)?|\.&digitPart;)[eE][\+\-]?&digitPart;|&digitPart;\.(?:&digitPart;)?|\.&digitPart;" context="CheckSuffixError"/>
+				<!-- Decimal: 123 ; 000 -->
+				<!-- l and L are python2 suffixes -->
+				<RegExpr attribute="Int" String="(?:[1-9](?:_?[0-9])*|0(?:_?0)*)[lL]?" context="CheckSuffixError"/>
+			</context>
+			<context name="CheckSuffixError" attribute="Normal Text" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
+				<RegExpr attribute="Error" String="\w+" context="#pop#pop"/>
+			</context>
+
+			<context name="yield" attribute="Flow Control Keyword" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
+				<DetectSpaces attribute="Normal Text" context="#stay"/>
+				<WordDetect attribute="Flow Control Keyword" context="#pop" String="from"/>
+			</context>
+
+			<context name="Pattern Matching" attribute="Flow Control Keyword" lineEndContext="#pop">
+				<!--
+					Python 3.10: https://docs.python.org/3.10/reference/compound_stmts.html#the-match-statement
+					( 'match' | 'case' ) expression ':'
+					exclude:
+					( 'match' | 'case' ) ( 'if' | 'for' | '.' | ':' | '=' | ',' | ']' | ')' ) ...
+				-->
+				<RegExpr attribute="Flow Control Keyword" String="\w++(?=\s+(?!(?:if|for)\b)[\w'&quot;~]|\s*+(?![.:=\]),]|(?:if|for)\b)((?:&string;|[^#;(){}]|\(\)|\((?1)\)|\{\}|\{(\s*+(?:(?:&string;|[a-zA-Z0-9.]++)\s*+:\s*+(?:&string;|[^#;(){},]|\(\)|\((?1)\)|\{\}|\{(?2)\})++,?)*+)\})+?):)|" context="#pop"/>
+				<DetectIdentifier attribute="Normal Text" context="#pop"/>
+			</context>
+
+			<!-- https://docs.python.org/2/reference/lexical_analysis.html#string-literals -->
+			<!-- https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals -->
+			<context name="StringVariants" attribute="Normal Text" lineEndContext="#stay">
+				<!-- fast path -->
+				<RegExpr String="(?:u|r|b|f|ur|fr|rf|br|rb)?['&quot;]" insensitive="true" context="AssumeStringVariants" lookAhead="1"/>
+			</context>
+			<context name="AssumeStringVariants" attribute="Normal Text" lineEndContext="#stay">
+				<StringDetect attribute="String" String="'''"                context="#pop!Triple A-string" beginRegion="Triple A-region"/>
+				<StringDetect attribute="String" String="&quot;&quot;&quot;" context="#pop!Triple Q-string" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="String" String="'"                  context="#pop!Single A-string"/>
+				<StringDetect attribute="String" String="&quot;"             context="#pop!Single Q-string"/>
+
+				<StringDetect attribute="F-String" String="f'''"                insensitive="true" context="#pop!Triple A-F-String" beginRegion="Triple A-region"/>
+				<StringDetect attribute="F-String" String="f&quot;&quot;&quot;" insensitive="true" context="#pop!Triple Q-F-String" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="F-String" String="f'"                  insensitive="true" context="#pop!Single A-F-String"/>
+				<StringDetect attribute="F-String" String="f&quot;"             insensitive="true" context="#pop!Single Q-F-String"/>
+
+				<!-- lower r for regex -->
+				<StringDetect attribute="Raw String" String="r'''"                context="#pop!Raw Triple A-Regex" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw String" String="r&quot;&quot;&quot;" context="#pop!Raw Triple Q-Regex" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw String" String="r'"                  context="#pop!Raw A-Regex"/>
+				<StringDetect attribute="Raw String" String="r&quot;"             context="#pop!Raw Q-Regex"/>
+
+				<!-- upper r for string -->
+				<StringDetect attribute="Raw String" String="R'''"                context="#pop!Raw Triple A-string" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw String" String="R&quot;&quot;&quot;" context="#pop!Raw Triple Q-string" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw String" String="R'"                  context="#pop!Raw A-string"/>
+				<StringDetect attribute="Raw String" String="R&quot;"             context="#pop!Raw Q-string"/>
+
+				<StringDetect attribute="B-String" String="b'''"                insensitive="true" context="#pop!Triple A-B-String" beginRegion="Triple A-region"/>
+				<StringDetect attribute="B-String" String="b&quot;&quot;&quot;" insensitive="true" context="#pop!Triple Q-B-String" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="B-String" String="b'"                  insensitive="true" context="#pop!Single A-B-String"/>
+				<StringDetect attribute="B-String" String="b&quot;"             insensitive="true" context="#pop!Single Q-B-String"/>
+
+				<!-- lower r and f for regex -->
+				<StringDetect attribute="Raw F-String" String="fr'''"                context="#pop!Raw Triple A-F-Regex" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw F-String" String="rf'''"                context="#pop!Raw Triple A-F-Regex" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw F-String" String="fr&quot;&quot;&quot;" context="#pop!Raw Triple Q-F-Regex" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw F-String" String="rf&quot;&quot;&quot;" context="#pop!Raw Triple Q-F-Regex" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw F-String" String="fr'"                  context="#pop!Raw A-F-Regex"/>
+				<StringDetect attribute="Raw F-String" String="rf'"                  context="#pop!Raw A-F-Regex"/>
+				<StringDetect attribute="Raw F-String" String="fr&quot;"             context="#pop!Raw Q-F-Regex"/>
+				<StringDetect attribute="Raw F-String" String="rf&quot;"             context="#pop!Raw Q-F-Regex"/>
+
+				<!-- upper r or f for string -->
+				<StringDetect attribute="Raw F-String" String="fr'''"                insensitive="true" context="#pop!Raw Triple A-F-String" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw F-String" String="rf'''"                insensitive="true" context="#pop!Raw Triple A-F-String" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw F-String" String="fr&quot;&quot;&quot;" insensitive="true" context="#pop!Raw Triple Q-F-String" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw F-String" String="rf&quot;&quot;&quot;" insensitive="true" context="#pop!Raw Triple Q-F-String" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw F-String" String="fr'"                  insensitive="true" context="#pop!Raw A-F-String"/>
+				<StringDetect attribute="Raw F-String" String="rf'"                  insensitive="true" context="#pop!Raw A-F-String"/>
+				<StringDetect attribute="Raw F-String" String="fr&quot;"             insensitive="true" context="#pop!Raw Q-F-String"/>
+				<StringDetect attribute="Raw F-String" String="rf&quot;"             insensitive="true" context="#pop!Raw Q-F-String"/>
+
+				<!-- lower r and b for regex -->
+				<StringDetect attribute="Raw B-String" String="br'''"                context="#pop!Raw Triple A-B-Regex" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw B-String" String="rb'''"                context="#pop!Raw Triple A-B-Regex" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw B-String" String="br&quot;&quot;&quot;" context="#pop!Raw Triple Q-B-Regex" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw B-String" String="rb&quot;&quot;&quot;" context="#pop!Raw Triple Q-B-Regex" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw B-String" String="br'"                  context="#pop!Raw A-B-Regex"/>
+				<StringDetect attribute="Raw B-String" String="rb'"                  context="#pop!Raw A-B-Regex"/>
+				<StringDetect attribute="Raw B-String" String="br&quot;"             context="#pop!Raw Q-B-Regex"/>
+				<StringDetect attribute="Raw B-String" String="rb&quot;"             context="#pop!Raw Q-B-Regex"/>
+
+				<!-- upper r or b for string -->
+				<StringDetect attribute="Raw B-String" String="br'''"                insensitive="true" context="#pop!Raw Triple A-B-String" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw B-String" String="rb'''"                insensitive="true" context="#pop!Raw Triple A-B-String" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw B-String" String="br&quot;&quot;&quot;" insensitive="true" context="#pop!Raw Triple Q-B-String" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw B-String" String="rb&quot;&quot;&quot;" insensitive="true" context="#pop!Raw Triple Q-B-String" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw B-String" String="br'"                  insensitive="true" context="#pop!Raw A-B-String"/>
+				<StringDetect attribute="Raw B-String" String="rb'"                  insensitive="true" context="#pop!Raw A-B-String"/>
+				<StringDetect attribute="Raw B-String" String="br&quot;"             insensitive="true" context="#pop!Raw Q-B-String"/>
+				<StringDetect attribute="Raw B-String" String="rb&quot;"             insensitive="true" context="#pop!Raw Q-B-String"/>
+
+				<!-- Python 2 compatibility (unicode prefix) -->
+
+				<StringDetect attribute="String" String="u'''"                     insensitive="true" context="#pop!Triple A-string" beginRegion="Triple A-region"/>
+				<StringDetect attribute="String" String="u&quot;&quot;&quot;"      insensitive="true" context="#pop!Triple Q-string" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="String" String="u'"                       insensitive="true" context="#pop!Single A-string"/>
+				<StringDetect attribute="String" String="u&quot;"                  insensitive="true" context="#pop!Single Q-string"/>
+
+				<StringDetect attribute="Raw String" String="ur'''"                insensitive="true" context="#pop!Raw Triple A-string" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Raw String" String="ur&quot;&quot;&quot;" insensitive="true" context="#pop!Raw Triple Q-string" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Raw String" String="ur'"                  insensitive="true" context="#pop!Raw A-string"/>
+				<StringDetect attribute="Raw String" String="ur&quot;"             insensitive="true" context="#pop!Raw Q-string"/>
+			</context>
+
+			<!-- https://docs.python.org/2/reference/lexical_analysis.html#string-literals -->
+			<!-- https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals -->
+			<context name="CommentVariants" attribute="Normal Text" lineEndContext="#stay">
+				<!-- fast path -->
+				<RegExpr String="(?:u|r|ur)?['&quot;]" insensitive="true" firstNonSpace="true" context="AssumeCommentVariants" lookAhead="1"/>
+			</context>
+			<context name="AssumeCommentVariants" attribute="Normal Text" lineEndContext="#stay">
+				<StringDetect attribute="Comment" String="'''"                 insensitive="true" context="#pop!Triple A-comment" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Comment" String="&quot;&quot;&quot;"  insensitive="true" context="#pop!Triple Q-comment" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Comment" String="'"                   insensitive="true" context="#pop!Single A-comment"/>
+				<StringDetect attribute="Comment" String="&quot;"              insensitive="true" context="#pop!Single Q-comment"/>
+				<StringDetect attribute="Comment" String="r'''"                insensitive="true" context="#pop!Triple A-comment" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Comment" String="r&quot;&quot;&quot;" insensitive="true" context="#pop!Triple Q-comment" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Comment" String="r'"                  insensitive="true" context="#pop!Single A-comment"/>
+				<StringDetect attribute="Comment" String="r&quot;"             insensitive="true" context="#pop!Single Q-comment"/>
+
+				<!-- Python 2 compatibility (unicode prefix) -->
+				<StringDetect attribute="Comment" String="u'''"                 insensitive="true" context="#pop!Triple A-comment" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Comment" String="u&quot;&quot;&quot;"  insensitive="true" context="#pop!Triple Q-comment" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Comment" String="u'"                   insensitive="true" context="#pop!Single A-comment"/>
+				<StringDetect attribute="Comment" String="u&quot;"              insensitive="true" context="#pop!Single Q-comment"/>
+				<StringDetect attribute="Comment" String="ur'''"                insensitive="true" context="#pop!Triple A-comment" beginRegion="Triple A-region"/>
+				<StringDetect attribute="Comment" String="ur&quot;&quot;&quot;" insensitive="true" context="#pop!Triple Q-comment" beginRegion="Triple Q-region"/>
+				<StringDetect attribute="Comment" String="ur'"                  insensitive="true" context="#pop!Single A-comment"/>
+				<StringDetect attribute="Comment" String="ur&quot;"             insensitive="true" context="#pop!Single Q-comment"/>
+			</context>
+
+			<context name="Dictionary" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces/>
+				<DetectChar attribute="Normal Text" char="}" context="#pop" endRegion="Dictionary"/>
+				<IncludeRules context="StringVariants" />
+				<IncludeRules context="Normal" />
+			</context>
+
+			<context name="List" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces/>
+				<DetectChar attribute="Normal Text" char="]" context="#pop" endRegion="List"/>
+				<IncludeRules context="StringVariants" />
+				<IncludeRules context="Normal" />
+			</context>
+
+			<context name="Tuple" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces/>
+				<DetectChar attribute="Normal Text" char=")" context="#pop" endRegion="Tuple"/>
+				<IncludeRules context="StringVariants" />
+				<IncludeRules context="Normal" />
+			</context>
+
+			<context name="UnfinishedStringError" attribute="Error" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<!-- A single string/comment reached the end of the line without a \ line escape -->
+				<!-- We set the following line (or part of it) to the "Error" attribute so that this error is easier to spot -->
+				<RegExpr attribute="Error" String="^(\s{4,}|[^[\]()&quot;']{4,}([&quot;'].*)?)" context="#pop" column="0"/>
+			</context>
+
+			<!-- Comments -->
+
+			<context name="Hash comment" attribute="Comment" lineEndContext="#pop">
+				<DetectSpaces />
+				<IncludeRules context="##Comments" />
+				<DetectIdentifier/>
+			</context>
+
+			<context name="Triple A-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces/>
+				<StringDetect attribute="Comment" String="'''" context="#pop" endRegion="Triple A-region"/>
+				<IncludeRules context="##Comments" />
+				<DetectIdentifier/>
+				<IncludeRules context="stringescape"/>
+			</context>
+
+			<context name="Triple Q-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces/>
+				<StringDetect attribute="Comment" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
+				<IncludeRules context="##Comments" />
+				<DetectIdentifier/>
+				<IncludeRules context="stringescape"/>
+			</context>
+
+			<context name="Single A-comment" attribute="Comment" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces/>
+				<DetectChar attribute="Comment" char="'" context="#pop"/>
+				<IncludeRules context="##Comments" />
+				<DetectIdentifier/>
+				<IncludeRules context="stringescape"/>
+			</context>
+
+			<context name="Single Q-comment" attribute="Comment" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces/>
+				<DetectChar attribute="Comment" char="&quot;" context="#pop"/>
+				<IncludeRules context="##Comments" />
+				<DetectIdentifier/>
+				<IncludeRules context="stringescape"/>
+			</context>
+
+			<!-- Strings -->
+
+			<!-- format characters -->
+			<context name="stringformat" attribute="String Substitution" lineEndContext="#stay">
+				<RegExpr attribute="String Substitution" String="&strsubstitution_py2;|&strsubstitution_py3;" context="#stay"/>
+				<Detect2Chars attribute="String Substitution" char="{" char1="{" context="#stay" />
+				<Detect2Chars attribute="String Substitution" char="}" char1="}" context="#stay" />
+			</context>
+
+			<!-- escape characters -->
+			<context name="stringescape" attribute="String Char" lineEndContext="#stay">
+				<!-- As this highlighting style is for both, Python 2 and 3,
+				we do not know if a normal string is “unicode” or not. So we -->
+				<DetectChar char="\" lookAhead="1" context="stringescape2"/>
+			</context>
+			<context name="stringescape2" attribute="String Char" lineEndContext="#pop">
+				<RegExpr attribute="String Char" String="\\[\\'&quot;abfnrtv]|\\[0-7]{1,3}|&escapedHexUni;" context="#pop"/>
+				<LineContinue attribute="Operator" context="#pop"/>
+				<RegExpr attribute="Error" String="." context="#pop"/>
+			</context>
+
+			<!-- escape characters -->
+			<context name="bytesescape" attribute="String Char" lineEndContext="#stay">
+				<!-- As this highlighting style is for both, Python 2 and 3,
+				we do not know if a normal string is “unicode” or not. So we
+				-->
+				<DetectChar char="\" lookAhead="1" context="bytesescape2"/>
+			</context>
+			<context name="bytesescape2" attribute="String Char" lineEndContext="#pop">
+				<RegExpr attribute="String Char" String="\\[\\'&quot;abfnrtv]|\\[0-7]{1,3}|&escapedHex;" context="#pop"/>
+				<LineContinue attribute="Operator" context="#pop"/>
+				<RegExpr attribute="Error" String="." context="#pop"/>
+			</context>
+
+			<!-- f-literals -->
+			<context name="stringinterpolation" attribute="F-String" lineEndContext="#stay">
+				<Detect2Chars attribute="String Char" char="{" char1="{" context="#stay"/>
+				<DetectChar attribute="String Substitution" char="{" context="String Interpolation"/>
+				<Detect2Chars attribute="String Char" char="}" char1="}" context="#stay"/>
+				<DetectChar attribute="Error" char="}" context="#stay"/>
+			</context>
+			<context name="String Interpolation" attribute="String Substitution" lineEndContext="#stay">
+				<RegExpr attribute="String Substitution" String="&format_spec;\}" context="#pop"/>
+				<IncludeRules context="Normal"/> <!-- TODO: create expression context instead -->
+			</context>
+
+
+			<!--
+			It follows a Binary tree of string kinds (not even touching byte literals).
+			The levels are:
+			1. triple- vs. single-quoted
+			2. apostrophe vs. quotation mark
+			3. static vs. interpolated (f-literal)
+			4. escaped vs. raw
+			Adding byte literals wouldn’t make the current 2⁴ into 2⁵ contexts, as there are no byte f-literals
+			-->
+
+			<!-- Triple-quoted A-strings -->
+			<context name="Triple A-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="String"/>
+				<DetectIdentifier attribute="String"/>
+				<IncludeRules context="stringescape"/>
+				<IncludeRules context="stringformat"/>
+				<StringDetect attribute="String" String="'''" context="#pop" endRegion="Triple A-region"/>
+			</context>
+
+			<context name="Raw Triple A-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="'"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="\"/>
+				<IncludeRules context="stringformat"/>
+				<StringDetect attribute="Raw String" String="'''" context="#pop" endRegion="Triple A-region"/>
+			</context>
+
+			<context name="Triple A-F-String" attribute="F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="F-String"/>
+				<DetectIdentifier attribute="F-String"/>
+				<IncludeRules context="stringescape"/>
+				<IncludeRules context="stringinterpolation"/>
+				<StringDetect attribute="F-String" String="'''" context="#pop" endRegion="Triple A-region"/>
+			</context>
+
+			<context name="Raw Triple A-F-String" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="'"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="\"/>
+				<IncludeRules context="stringinterpolation"/>
+				<StringDetect attribute="Raw F-String" String="'''" context="#pop" endRegion="Triple A-region"/>
+			</context>
+
+			<context name="Triple A-B-String" attribute="B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<RegExpr attribute="B-String" String="([\x20-\x26\x28-\x5B\x5D-\x7E]++|'(?!''))++"/>
+				<IncludeRules context="bytesescape"/>
+				<StringDetect attribute="B-String" String="'''" context="#pop" endRegion="Triple A-region"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<context name="Raw Triple A-B-String" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<RegExpr attribute="Raw B-String" String="([\x20-\x26\x28-\x5B\x5D-\x7E]++|\\.?|'(?!''))++"/>
+				<StringDetect attribute="Raw B-String" String="'''" context="#pop" endRegion="Triple A-region"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<!-- Triple-quoted Q-strings -->
+			<context name="Triple Q-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="String"/>
+				<DetectIdentifier attribute="String"/>
+				<IncludeRules context="stringescape"/>
+				<IncludeRules context="stringformat"/>
+				<StringDetect attribute="String" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
+			</context>
+
+			<context name="Raw Triple Q-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="&quot;"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="\"/>
+				<IncludeRules context="stringformat"/>
+				<StringDetect attribute="Raw String" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
+			</context>
+
+			<context name="Triple Q-F-String" attribute="F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="F-String"/>
+				<DetectIdentifier attribute="F-String"/>
+				<IncludeRules context="stringescape"/>
+				<IncludeRules context="stringinterpolation"/>
+				<StringDetect attribute="F-String" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
+			</context>
+
+			<context name="Raw Triple Q-F-String" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="&quot;"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="\"/>
+				<IncludeRules context="stringinterpolation"/>
+				<StringDetect attribute="Raw F-String" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
+			</context>
+
+			<context name="Triple Q-B-String" attribute="B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<RegExpr attribute="B-String" String="([\x20\x21\x23-\x5B\x5D-\x7E]++|&quot;(?!&quot;&quot;))++"/>
+				<IncludeRules context="bytesescape"/>
+				<StringDetect attribute="B-String" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<context name="Raw Triple Q-B-String" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<RegExpr attribute="Raw B-String" String="([\x20\x21\x23-\x5B\x5D-\x7E]++|\\.?|&quot;(?!&quot;&quot;))++"/>
+				<StringDetect attribute="Raw B-String" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+
+			<!-- Single-quoted A-strings -->
+			<context name="Single A-string" attribute="String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="String"/>
+				<DetectIdentifier attribute="String"/>
+				<IncludeRules context="stringescape"/>
+				<IncludeRules context="stringformat"/>
+				<DetectChar attribute="String" char="'" context="#pop"/>
+			</context>
+
+			<context name="Raw A-string" attribute="Raw String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="'"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="\"/>
+				<IncludeRules context="stringformat"/>
+				<DetectChar attribute="Raw String" char="'" context="#pop"/>
+				<LineContinue attribute="Raw String" context="#stay"/>
+			</context>
+
+			<context name="Single A-F-String" attribute="F-String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="F-String"/>
+				<DetectIdentifier attribute="F-String"/>
+				<IncludeRules context="stringescape"/>
+				<IncludeRules context="stringinterpolation"/>
+				<DetectChar attribute="F-String" char="'" context="#pop"/>
+			</context>
+
+			<context name="Raw A-F-String" attribute="Raw F-String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="'"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="\"/>
+				<IncludeRules context="stringinterpolation"/>
+				<DetectChar attribute="Raw F-String" char="'" context="#pop"/>
+				<LineContinue attribute="Raw F-String" context="#stay"/>
+			</context>
+
+			<context name="Single A-B-String" attribute="B-String" lineEndContext="#pop!UnfinishedStringError">
+				<RegExpr attribute="B-String" String="[\x20-\x26\x28-\x5B\x5D-\x7E]++"/>
+				<IncludeRules context="bytesescape"/>
+				<DetectChar attribute="B-String" char="'" context="#pop"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<context name="Raw A-B-String" attribute="Raw B-String" lineEndContext="#pop!UnfinishedStringError">
+				<RegExpr attribute="Raw B-String" String="([\x20-\x26\x28-\x5B\x5D-\x7E]++|\\.)++"/>
+				<DetectChar attribute="Raw B-String" char="'" context="#pop"/>
+				<LineContinue attribute="Raw B-String" context="#stay"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<!-- Single-quoted Q-strings -->
+			<context name="Single Q-string" attribute="String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="String"/>
+				<DetectIdentifier attribute="String"/>
+				<IncludeRules context="stringescape"/>
+				<IncludeRules context="stringformat"/>
+				<DetectChar attribute="String" char="&quot;" context="#pop"/>
+			</context>
+
+			<context name="Raw Q-string" attribute="Raw String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="&quot;"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="\"/>
+				<IncludeRules context="stringformat"/>
+				<DetectChar attribute="Raw String" char="&quot;" context="#pop"/>
+				<LineContinue attribute="Raw String" context="#stay"/>
+			</context>
+
+			<context name="Single Q-F-String" attribute="F-String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="F-String"/>
+				<DetectIdentifier attribute="F-String"/>
+				<IncludeRules context="stringescape"/>
+				<IncludeRules context="stringinterpolation"/>
+				<DetectChar attribute="F-String" char="&quot;" context="#pop"/>
+			</context>
+
+			<context name="Raw Q-F-String" attribute="Raw F-String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="&quot;"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="\"/>
+				<IncludeRules context="stringinterpolation"/>
+				<DetectChar attribute="Raw F-String" char="&quot;" context="#pop"/>
+				<LineContinue attribute="Raw F-String" context="#stay"/>
+			</context>
+
+			<context name="Single Q-B-String" attribute="B-String" lineEndContext="#pop!UnfinishedStringError">
+				<RegExpr attribute="B-String" String="[\x20\x21\x23-\x5B\x5D-\x7E]++"/>
+				<IncludeRules context="bytesescape"/>
+				<DetectChar attribute="B-String" char="&quot;" context="#pop"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<context name="Raw Q-B-String" attribute="Raw B-String" lineEndContext="#pop!UnfinishedStringError">
+				<RegExpr attribute="Raw B-String" String="([\x20\x21\x23-\x5B\x5D-\x7E]++|\\.)++"/>
+				<DetectChar attribute="Raw B-String" char="&quot;" context="#pop"/>
+				<LineContinue attribute="Raw B-String" context="#stay"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<!-- Regex -->
+
+			<!--
+
+			doctest: NOTE|XXX|HACK|FIXME|BUG|TODO
+			que dit la doc ?
+
+			-->
+
+			<!-- Regex r'...' -->
+
+			<context name="Raw A-Regex" attribute="Raw String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw A-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw A-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw A-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw A-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw A-Regex Capture"/>
+				<StringDetect String="'" attribute="Raw String" context="#pop"/>
+				<IncludeRules context="RegexStringCommon"/>
+			</context>
+
+			<context name="Raw A-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw A-Regex NonCapture"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw A-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw A-Regex ParentComment"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw A-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01])*(-[imsxafLuw]+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw A-Regex ParentOptions"/>
+				<IncludeRules context="RegexParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw A-Regex ParentError"/>
+			</context>
+
+			<context name="Raw A-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw A-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw A-Regex ParentCond"/>
+			</context>
+			<context name="Raw A-Regex ParentCond" attribute="Raw String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw A-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw A-Regex Parenthesis"/>
+				<RegExpr String="\b[_[:alpha:]]\w+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw A-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw A-Regex ParentError" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw A-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw A-Regex NamedCapture" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([_[:alpha:]]\w*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw A-Regex Capture"/>
+			</context>
+
+			<context name="Raw A-Regex LookaroundInCond" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw A-Regex Parenthesis"/>
+				<IncludeRules context="Raw A-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-Regex Parenthesis" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop"/>
+				<IncludeRules context="Raw A-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-Regex Capture" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop"/>
+				<IncludeRules context="Raw A-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-Regex NonCapture" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop"/>
+				<IncludeRules context="Raw A-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-Regex ParentInside" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="'" lookAhead="1" context="#pop"/>
+				<IncludeRules context="Raw A-Regex"/>
+			</context>
+
+			<context name="Raw A-Regex ParentComment" attribute="Comment" lineEndContext="#pop">
+				<IncludeRules context="RegexCommentCommon"/>
+				<StringDetect String="'" lookAhead="1" context="#pop#pop"/>
+			</context>
+
+			<context name="Raw A-Regex Set" attribute="Regex Set" lineEndContext="#pop">
+				<IncludeRules context="RegexSetCommon"/>
+				<StringDetect String="'" lookAhead="1" context="#pop"/>
+			</context>
+
+
+			<!-- Regex r"..." -->
+
+			<context name="Raw Q-Regex" attribute="Raw String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw Q-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw Q-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw Q-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw Q-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw Q-Regex Capture"/>
+				<StringDetect String="&quot;" attribute="Raw String" context="#pop"/>
+				<IncludeRules context="RegexStringCommon"/>
+			</context>
+
+			<context name="Raw Q-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw Q-Regex NonCapture"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw Q-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw Q-Regex ParentComment"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw Q-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01])*(-[imsxafLuw]+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw Q-Regex ParentOptions"/>
+				<IncludeRules context="RegexParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw Q-Regex ParentError"/>
+			</context>
+
+			<context name="Raw Q-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Q-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw Q-Regex ParentCond"/>
+			</context>
+			<context name="Raw Q-Regex ParentCond" attribute="Raw String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw Q-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Q-Regex Parenthesis"/>
+				<RegExpr String="\b[_[:alpha:]]\w+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: lookaround in conditional pattern: (?(?!...)a|b) etc -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Q-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw Q-Regex ParentError" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw Q-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw Q-Regex NamedCapture" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([_[:alpha:]]\w*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Q-Regex Capture"/>
+			</context>
+
+			<context name="Raw Q-Regex LookaroundInCond" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw Q-Regex Parenthesis"/>
+				<IncludeRules context="Raw Q-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-Regex Parenthesis" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop"/>
+				<IncludeRules context="Raw Q-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-Regex Capture" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop"/>
+				<IncludeRules context="Raw Q-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-Regex NonCapture" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop"/>
+				<IncludeRules context="Raw Q-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-Regex ParentInside" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="&quot;" lookAhead="1" context="#pop"/>
+				<IncludeRules context="Raw Q-Regex"/>
+			</context>
+
+			<context name="Raw Q-Regex ParentComment" attribute="Comment" lineEndContext="#pop">
+				<IncludeRules context="RegexCommentCommon"/>
+				<StringDetect String="&quot;" lookAhead="1" context="#pop#pop"/>
+			</context>
+
+			<context name="Raw Q-Regex Set" attribute="Regex Set" lineEndContext="#pop">
+				<IncludeRules context="RegexSetCommon"/>
+				<StringDetect String="&quot;" lookAhead="1" context="#pop"/>
+			</context>
+
+
+			<!-- Regex r'''...''' -->
+
+			<context name="Raw Triple A-Regex" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw Triple A-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw Triple A-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw Triple A-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw Triple A-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw Triple A-Regex Capture" beginRegion="RegParent"/>
+				<StringDetect String="#" attribute="Comment" context="Raw Triple A-Regex Comment"/>
+				<StringDetect String="'''" attribute="Raw String" context="#pop" endRegion="Triple A-region"/>
+				<IncludeRules context="RegexStringCommon"/>
+			</context>
+
+			<context name="Raw Triple A-Regex Comment" attribute="Comment" lineEndContext="#pop">
+				<StringDetect String="'''" lookAhead="1" context="#pop"/>
+				<LineContinue attribute="Operator"/>
+				<RegExpr String="([^'\\]++|\\.|'(?!''))++" attribute="Comment"/>
+			</context>
+
+			<context name="Raw Triple A-Regex Parent" attribute="Regex Set" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw Triple A-Regex NonCapture" beginRegion="RegParent"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw Triple A-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw Triple A-Regex ParentComment" beginRegion="RegParent"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw Triple A-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01])*(-[imsxafLuw]+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw Triple A-Regex ParentOptions" beginRegion="RegParent"/>
+				<IncludeRules context="RegexParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw Triple A-Regex ParentError" beginRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple A-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#stay" noIndentationBasedFolding="true">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple A-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw Triple A-Regex ParentCond" beginRegion="RegParent"/>
+			</context>
+			<context name="Raw Triple A-Regex ParentCond" attribute="Raw String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw Triple A-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple A-Regex Parenthesis" endRegion="RegParent"/>
+				<RegExpr String="\b[_[:alpha:]]\w+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple A-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw Triple A-Regex ParentError" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw Triple A-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw Triple A-Regex NamedCapture" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing" beginRegion="RegParent"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([_[:alpha:]]\w*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple A-Regex Capture"/>
+			</context>
+
+			<context name="Raw Triple A-Regex LookaroundInCond" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw Triple A-Regex Parenthesis" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-Regex Parenthesis" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-Regex Capture" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-Regex NonCapture" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-Regex ParentInside" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String="'''" lookAhead="1" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-Regex"/>
+			</context>
+
+			<context name="Raw Triple A-Regex ParentComment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="RegexTripleCommentCommon"/>
+				<StringDetect String="'''" lookAhead="1" context="#pop#pop" endRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple A-Regex Set" attribute="Regex Set" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="RegexSetCommon"/>
+				<StringDetect String="'''" lookAhead="1" context="#pop"/>
+			</context>
+
+
+			<!-- Regex r"""...""" -->
+
+			<context name="Raw Triple Q-Regex" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw Triple Q-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw Triple Q-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw Triple Q-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw Triple Q-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw Triple Q-Regex Capture" beginRegion="RegParent"/>
+				<StringDetect String="#" attribute="Comment" context="Raw Triple Q-Regex Comment"/>
+				<StringDetect String="&quot;&quot;&quot;" attribute="Raw String" context="#pop" endRegion="Triple Q-region"/>
+				<IncludeRules context="RegexStringCommon"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex Comment" attribute="Comment" lineEndContext="#pop">
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop"/>
+				<LineContinue attribute="Operator"/>
+				<RegExpr String="([^&quot;\\]++|\\.|&quot;(?!&quot;&quot;))++" attribute="Comment"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw Triple Q-Regex NonCapture" beginRegion="RegParent"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw Triple Q-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw Triple Q-Regex ParentComment" beginRegion="RegParent"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw Triple Q-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01])*(-[imsxafLuw]+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw Triple Q-Regex ParentOptions" beginRegion="RegParent"/>
+				<IncludeRules context="RegexParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw Triple Q-Regex ParentError" beginRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple Q-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw Triple Q-Regex ParentCond" beginRegion="RegParent"/>
+			</context>
+			<context name="Raw Triple Q-Regex ParentCond" attribute="Raw String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw Triple Q-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple Q-Regex Parenthesis" endRegion="RegParent"/>
+				<RegExpr String="\b[_[:alpha:]]\w+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple Q-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex ParentError" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw Triple Q-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex NamedCapture" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing" beginRegion="RegParent"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([_[:alpha:]]\w*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple Q-Regex Capture"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex LookaroundInCond" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw Triple Q-Regex Parenthesis" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex Parenthesis" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex Capture" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex NonCapture" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex ParentInside" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-Regex"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex ParentComment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="RegexTripleCommentCommon"/>
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop#pop" endRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple Q-Regex Set" attribute="Regex Set" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="RegexSetCommon"/>
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop"/>
+			</context>
+
+
+			<!-- Regex rb'...' -->
+
+			<context name="Raw A-B-Regex" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<RegExpr attribute="Raw B-String" String="[ -#%&amp;,\-/->@-Z\]_-z~]++"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw A-B-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw A-B-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw A-B-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw A-B-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw A-B-Regex Capture"/>
+				<StringDetect String="'" attribute="Raw B-String" context="#pop"/>
+				<IncludeRules context="RegexBStringCommon"/>
+			</context>
+
+			<context name="Raw A-B-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw A-B-Regex NonCapture"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw A-B-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw A-Regex ParentComment"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw A-B-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01])*(-[imsxafLuw]+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw A-B-Regex ParentOptions"/>
+				<IncludeRules context="RegexParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw A-B-Regex ParentError"/>
+			</context>
+
+			<context name="Raw A-B-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw A-B-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw A-B-Regex ParentCond"/>
+			</context>
+			<context name="Raw A-B-Regex ParentCond" attribute="Raw B-String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw A-B-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw A-B-Regex Parenthesis"/>
+				<RegExpr String="\b[_a-zA-Z][_a-zA-Z0-9]+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw A-B-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw A-B-Regex ParentError" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw A-B-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw A-B-Regex NamedCapture" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([__a-zA-Z][_a-zA-Z0-9]*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw A-B-Regex Capture"/>
+			</context>
+
+			<context name="Raw A-B-Regex LookaroundInCond" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw A-B-Regex Parenthesis"/>
+				<IncludeRules context="Raw A-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-B-Regex Parenthesis" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop"/>
+				<IncludeRules context="Raw A-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-B-Regex Capture" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop"/>
+				<IncludeRules context="Raw A-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-B-Regex NonCapture" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop"/>
+				<IncludeRules context="Raw A-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-B-Regex ParentInside" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="'" lookAhead="1" context="#pop"/>
+				<IncludeRules context="Raw A-B-Regex"/>
+			</context>
+
+			<context name="Raw A-B-Regex Set" attribute="Regex Set" lineEndContext="#pop">
+				<RegExpr attribute="Regex Set" String="[ -&amp;(-Z^-~]++"/>
+				<IncludeRules context="RegexBStringSetCommon"/>
+				<StringDetect String="'" lookAhead="1" context="#pop"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+
+			<!-- Regex rb"..." -->
+
+			<context name="Raw Q-B-Regex" attribute="Raw B-String" lineEndContext="#pop!UnfinishedStringError">
+				<RegExpr attribute="Raw B-String" String="[ !#%-',\-/->@-Z\]_-z~]++"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw Q-B-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw Q-B-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw Q-B-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw Q-B-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw Q-B-Regex Capture"/>
+				<StringDetect String="&quot;" attribute="Raw B-String" context="#pop"/>
+				<IncludeRules context="RegexBStringCommon"/>
+			</context>
+
+			<context name="Raw Q-B-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw Q-B-Regex NonCapture"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw Q-B-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw Q-Regex ParentComment"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw Q-B-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01])*(-[imsxafLuw]+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw Q-B-Regex ParentOptions"/>
+				<IncludeRules context="RegexParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw Q-B-Regex ParentError"/>
+			</context>
+
+			<context name="Raw Q-B-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Q-B-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw Q-B-Regex ParentCond"/>
+			</context>
+			<context name="Raw Q-B-Regex ParentCond" attribute="Raw B-String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw Q-B-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Q-B-Regex Parenthesis"/>
+				<RegExpr String="\b[_a-zA-Z][_a-zA-Z0-9]+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Q-B-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw Q-B-Regex ParentError" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw Q-B-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw Q-B-Regex NamedCapture" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([__a-zA-Z][_a-zA-Z0-9]*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Q-B-Regex Capture"/>
+			</context>
+
+			<context name="Raw Q-B-Regex LookaroundInCond" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw Q-B-Regex Parenthesis"/>
+				<IncludeRules context="Raw Q-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-B-Regex Parenthesis" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop"/>
+				<IncludeRules context="Raw Q-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-B-Regex Capture" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop"/>
+				<IncludeRules context="Raw Q-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-B-Regex NonCapture" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop"/>
+				<IncludeRules context="Raw Q-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-B-Regex ParentInside" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="&quot;" lookAhead="1" context="#pop"/>
+				<IncludeRules context="Raw Q-B-Regex"/>
+			</context>
+
+			<context name="Raw Q-B-Regex Set" attribute="Regex Set" lineEndContext="#pop">
+				<RegExpr attribute="Regex Set" String="[ !#-Z^-~]++"/>
+				<IncludeRules context="RegexBStringSetCommon"/>
+				<StringDetect String="&quot;" lookAhead="1" context="#pop"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+
+			<!-- Regex rb'''...''' -->
+
+			<context name="Raw Triple A-B-Regex" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<RegExpr attribute="Raw B-String" String="([ !&quot;%&amp;,\-/->@-Z\]_-z~]++|'(?!''))++"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw Triple A-B-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw Triple A-B-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw Triple A-B-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw Triple A-B-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw Triple A-B-Regex Capture" beginRegion="RegParent"/>
+				<StringDetect String="#" attribute="Comment" context="Raw Triple A-B-Regex Comment"/>
+				<StringDetect String="'''" attribute="Raw B-String" context="#pop" endRegion="Triple A-region"/>
+				<IncludeRules context="RegexBStringCommon"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex Comment" attribute="Comment" lineEndContext="#pop">
+				<StringDetect String="'''" lookAhead="1" context="#pop"/>
+				<LineContinue attribute="Operator"/>
+				<RegExpr String="([ -&amp;(-\[\]-~]++|\\.|'(?!''))++" attribute="Comment"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw Triple A-B-Regex NonCapture" beginRegion="RegParent"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw Triple A-B-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw Triple A-Regex ParentComment" beginRegion="RegParent"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw Triple A-B-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01])*(-[imsxafLuw]+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw Triple A-B-Regex ParentOptions" beginRegion="RegParent"/>
+				<IncludeRules context="RegexParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw Triple A-B-Regex ParentError" beginRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple A-B-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw Triple A-B-Regex ParentCond" beginRegion="RegParent"/>
+			</context>
+			<context name="Raw Triple A-B-Regex ParentCond" attribute="Raw B-String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw Triple A-B-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple A-B-Regex Parenthesis" endRegion="RegParent"/>
+				<RegExpr String="\b[_a-zA-Z][_a-zA-Z0-9]+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple A-B-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex ParentError" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw Triple A-B-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex NamedCapture" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing" beginRegion="RegParent"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([__a-zA-Z][_a-zA-Z0-9]*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple A-B-Regex Capture"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex LookaroundInCond" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw Triple A-B-Regex Parenthesis" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex Parenthesis" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex Capture" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex NonCapture" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex ParentInside" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String="'''" lookAhead="1" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-B-Regex"/>
+			</context>
+
+			<context name="Raw Triple A-B-Regex Set" attribute="Regex Set" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<RegExpr attribute="Regex Set" String="([ -&amp;(-Z^-~]++|'(?!''))++"/>
+				<IncludeRules context="RegexBStringSetCommon"/>
+				<StringDetect String="'''" lookAhead="1" context="#pop"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+
+			<!-- Regex rb"""...""" -->
+
+			<context name="Raw Triple Q-B-Regex" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<RegExpr attribute="Raw B-String" String="([ !%-',\-/->@-Z\]_-z~]++|&quot;(?!&quot;&quot;))++"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw Triple Q-B-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw Triple Q-B-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw Triple Q-B-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw Triple Q-B-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw Triple Q-B-Regex Capture" beginRegion="RegParent"/>
+				<StringDetect String="#" attribute="Comment" context="Raw Triple Q-B-Regex Comment"/>
+				<StringDetect String="&quot;&quot;&quot;" attribute="Raw B-String" context="#pop" endRegion="Triple Q-region"/>
+				<IncludeRules context="RegexBStringCommon"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex Comment" attribute="Comment" lineEndContext="#pop">
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop"/>
+				<LineContinue attribute="Operator"/>
+				<RegExpr String="([ !#-\[\]-~]++|\\.|&quot;(?!&quot;&quot;))++" attribute="Comment"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw Triple Q-B-Regex NonCapture" beginRegion="RegParent"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw Triple Q-B-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw Triple Q-Regex ParentComment" beginRegion="RegParent"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw Triple Q-B-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01])*(-[imsxafLuw]+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw Triple Q-B-Regex ParentOptions" beginRegion="RegParent"/>
+				<IncludeRules context="RegexParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw Triple Q-B-Regex ParentError" beginRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple Q-B-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw Triple Q-B-Regex ParentCond" beginRegion="RegParent"/>
+			</context>
+			<context name="Raw Triple Q-B-Regex ParentCond" attribute="Raw B-String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw Triple Q-B-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple Q-B-Regex Parenthesis" endRegion="RegParent"/>
+				<RegExpr String="\b[_a-zA-Z][_a-zA-Z0-9]+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple Q-B-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex ParentError" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw Triple Q-B-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex NamedCapture" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing" beginRegion="RegParent"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([__a-zA-Z][_a-zA-Z0-9]*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple Q-B-Regex Capture"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex LookaroundInCond" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw Triple Q-B-Regex Parenthesis" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex Parenthesis" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex Capture" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex NonCapture" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-B-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex ParentInside" attribute="Raw B-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-B-Regex"/>
+			</context>
+
+			<context name="Raw Triple Q-B-Regex Set" attribute="Regex Set" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<RegExpr attribute="Regex Set" String="([ !#-Z^-~]++|&quot;(?!&quot;&quot;))++"/>
+				<IncludeRules context="RegexBStringSetCommon"/>
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+
+			<!-- Regex rf'...' -->
+
+			<context name="Raw A-F-Regex" attribute="Raw F-String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw A-F-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw A-F-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw A-F-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw A-F-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw A-F-Regex Capture"/>
+				<StringDetect String="'" attribute="Raw F-String" context="#pop"/>
+				<IncludeRules context="RegexFStringCommon"/>
+			</context>
+
+			<context name="Raw A-F-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw A-F-Regex NonCapture"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw A-F-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw A-F-Regex ParentComment"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw A-F-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01]|&fStringSimple;)*(-([imsxafLuw]|&fStringSimple;)+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw A-F-Regex ParentOptions"/>
+				<IncludeRules context="RegexFStringParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw A-F-Regex ParentError"/>
+			</context>
+
+			<context name="Raw A-F-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw A-F-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw A-F-Regex ParentCond"/>
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+			</context>
+			<context name="Raw A-F-Regex ParentCond" attribute="Raw F-String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw A-F-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw A-F-Regex Parenthesis"/>
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+				<RegExpr String="\b[_[:alpha:]]\w+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw A-F-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw A-F-Regex ParentError" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw A-F-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw A-F-Regex NamedCapture" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([_[:alpha:]]\w*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw A-F-Regex Capture"/>
+			</context>
+
+			<context name="Raw A-F-Regex LookaroundInCond" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw A-F-Regex Parenthesis"/>
+				<IncludeRules context="Raw A-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-F-Regex Parenthesis" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop"/>
+				<IncludeRules context="Raw A-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-F-Regex Capture" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop"/>
+				<IncludeRules context="Raw A-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-F-Regex NonCapture" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop"/>
+				<IncludeRules context="Raw A-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw A-F-Regex ParentInside" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="'" lookAhead="1" context="#pop"/>
+				<IncludeRules context="Raw A-F-Regex"/>
+			</context>
+
+			<context name="Raw A-F-Regex ParentComment" attribute="Comment" lineEndContext="#pop">
+				<IncludeRules context="RegexCommentCommon"/>
+				<IncludeRules context="RegexFString"/>
+				<StringDetect String="'" lookAhead="1" context="#pop#pop"/>
+			</context>
+
+			<context name="Raw A-F-Regex Set" attribute="Regex Set" lineEndContext="#pop">
+				<IncludeRules context="RegexFStringSetCommon"/>
+				<IncludeRules context="RegexFString"/>
+				<StringDetect String="'" lookAhead="1" context="#pop"/>
+			</context>
+
+
+			<!-- Regex rf"..." -->
+
+			<context name="Raw Q-F-Regex" attribute="Raw F-String" lineEndContext="#pop!UnfinishedStringError">
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw Q-F-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw Q-F-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw Q-F-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw Q-F-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw Q-F-Regex Capture"/>
+				<StringDetect String="&quot;" attribute="Raw F-String" context="#pop"/>
+				<IncludeRules context="RegexFStringCommon"/>
+			</context>
+
+			<context name="Raw Q-F-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw Q-F-Regex NonCapture"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw Q-F-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw Q-F-Regex ParentComment"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw Q-F-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01]|&fStringSimple;)*(-([imsxafLuw]|&fStringSimple;)+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw Q-F-Regex ParentOptions"/>
+				<IncludeRules context="RegexFStringParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw Q-F-Regex ParentError"/>
+			</context>
+
+			<context name="Raw Q-F-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Q-F-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw Q-F-Regex ParentCond"/>
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+			</context>
+			<context name="Raw Q-F-Regex ParentCond" attribute="Raw F-String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw Q-F-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Q-F-Regex Parenthesis"/>
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+				<RegExpr String="\b[_[:alpha:]]\w+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: lookaround in conditional pattern: (?(?!...)a|b) etc -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Q-F-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw Q-F-Regex ParentError" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw Q-F-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw Q-F-Regex NamedCapture" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([_[:alpha:]]\w*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Q-F-Regex Capture"/>
+			</context>
+
+			<context name="Raw Q-F-Regex LookaroundInCond" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw Q-F-Regex Parenthesis"/>
+				<IncludeRules context="Raw Q-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-F-Regex Parenthesis" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop"/>
+				<IncludeRules context="Raw Q-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-F-Regex Capture" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop"/>
+				<IncludeRules context="Raw Q-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-F-Regex NonCapture" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop"/>
+				<IncludeRules context="Raw Q-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Q-F-Regex ParentInside" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="&quot;" lookAhead="1" context="#pop"/>
+				<IncludeRules context="Raw Q-F-Regex"/>
+			</context>
+
+			<context name="Raw Q-F-Regex ParentComment" attribute="Comment" lineEndContext="#pop">
+				<IncludeRules context="RegexCommentCommon"/>
+				<IncludeRules context="RegexFString"/>
+				<StringDetect String="&quot;" lookAhead="1" context="#pop#pop"/>
+			</context>
+
+			<context name="Raw Q-F-Regex Set" attribute="Regex Set" lineEndContext="#pop">
+				<IncludeRules context="RegexFStringSetCommon"/>
+				<IncludeRules context="RegexFString"/>
+				<StringDetect String="&quot;" lookAhead="1" context="#pop"/>
+			</context>
+
+
+			<!-- Regex rf'''...''' -->
+
+			<context name="Raw Triple A-F-Regex" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw Triple A-F-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw Triple A-F-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw Triple A-F-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw Triple A-F-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw Triple A-F-Regex Capture" beginRegion="RegParent"/>
+				<StringDetect String="#" attribute="Comment" context="Raw Triple A-F-Regex Comment"/>
+				<StringDetect String="'''" attribute="Raw F-String" context="#pop" endRegion="Triple A-region"/>
+				<IncludeRules context="RegexFStringCommon"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex Comment" attribute="Comment" lineEndContext="#pop">
+				<StringDetect String="'''" lookAhead="1" context="#pop"/>
+				<LineContinue attribute="Operator"/>
+				<IncludeRules context="RegexFString"/>
+				<RegExpr String="([^'\\{}]++|\\.|'(?!''))++" attribute="Comment"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw Triple A-F-Regex NonCapture" beginRegion="RegParent"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw Triple A-F-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw Triple A-F-Regex ParentComment" beginRegion="RegParent"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw Triple A-F-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01]|&fStringSimple;)*(-([imsxafLuw]|&fStringSimple;)+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw Triple A-F-Regex ParentOptions" beginRegion="RegParent"/>
+				<IncludeRules context="RegexFStringParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw Triple A-F-Regex ParentError" beginRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple A-F-Regex Parenthesis"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw Triple A-F-Regex ParentCond" beginRegion="RegParent"/>
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+			</context>
+			<context name="Raw Triple A-F-Regex ParentCond" attribute="Raw F-String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw Triple A-F-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple A-F-Regex Parenthesis" endRegion="RegParent"/>
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+				<RegExpr String="\b[_[:alpha:]]\w+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple A-F-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex ParentError" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw Triple A-F-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex NamedCapture" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing" beginRegion="RegParent"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([_[:alpha:]]\w*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple A-F-Regex Capture"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex LookaroundInCond" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw Triple A-F-Regex Parenthesis" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex Parenthesis" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex Capture" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex NonCapture" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex ParentInside" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String="'''" lookAhead="1" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple A-F-Regex"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex ParentComment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="RegexTripleCommentCommon"/>
+				<IncludeRules context="RegexFString"/>
+				<StringDetect String="'''" lookAhead="1" context="#pop#pop" endRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple A-F-Regex Set" attribute="Regex Set" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="RegexFStringSetCommon"/>
+				<IncludeRules context="RegexFString"/>
+				<StringDetect String="'''" lookAhead="1" context="#pop"/>
+			</context>
+
+
+			<!-- Regex rf"""...""" -->
+
+			<context name="Raw Triple Q-F-Regex" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<StringDetect String="[^]" attribute="Regex Set" context="Raw Triple Q-F-Regex Set"/>
+				<StringDetect String="[]" attribute="Regex Set" context="Raw Triple Q-F-Regex Set"/>
+				<StringDetect String="[" attribute="Regex Set" context="Raw Triple Q-F-Regex Set"/>
+				<StringDetect String="(?" lookAhead="1" context="Raw Triple Q-F-Regex Parent"/>
+				<StringDetect String="(" attribute="Regex Capturing" context="Raw Triple Q-F-Regex Capture" beginRegion="RegParent"/>
+				<StringDetect String="#" attribute="Comment" context="Raw Triple Q-F-Regex Comment"/>
+				<StringDetect String="&quot;&quot;&quot;" attribute="Raw F-String" context="#pop" endRegion="Triple Q-region"/>
+				<IncludeRules context="RegexFStringCommon"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex Comment" attribute="Comment" lineEndContext="#pop">
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop"/>
+				<LineContinue attribute="Operator"/>
+				<IncludeRules context="RegexFString"/>
+				<RegExpr String="([^&quot;\\{}]++|\\.|&quot;(?!&quot;&quot;))++" attribute="Comment"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex Parent" attribute="Regex Set" lineEndContext="#pop">
+				<StringDetect String="(?:" attribute="Regex Non-Capturing" context="#pop!Raw Triple Q-F-Regex NonCapture" beginRegion="RegParent"/>
+				<StringDetect String="(?P&lt;" lookAhead="1" context="Raw Triple Q-F-Regex NamedCapture"/>
+				<StringDetect String="(?#" attribute="Comment" context="Raw Triple Q-F-Regex ParentComment" beginRegion="RegParent"/>
+				<!-- regex package support: (?<...>) for (?P<...>) -->
+				<StringDetect String="(?&lt;" lookAhead="1" context="Raw Triple Q-F-Regex NamedCapture"/>
+				<!-- regex package support:
+					(?b), (?e), (?p), (?r), (?V0), (?V1), (?f), (?w) (?-a), (?-f), (?-L), (?-u), (?-w)
+					(?|...) -->
+				<RegExpr String="\((?=\?(([aiLmsuxfwbepr]+|V[01]|&fStringSimple;)*(-([imsxafLuw]|&fStringSimple;)+)?:|[=>!|]|&lt;[=!]|\())" attribute="Regex Parenthesis" context="Raw Triple Q-F-Regex ParentOptions" beginRegion="RegParent"/>
+				<IncludeRules context="RegexFStringParentCommon"/>
+				<StringDetect String="(" attribute="Regex Parenthesis" context="Raw Triple Q-F-Regex ParentError" beginRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex ParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop#pop!Raw Triple Q-F-Regex Parenthesis">
+			  <!-- regex package support: | -->
+				<AnyChar String=":=>!|" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple Q-F-Regex Parenthesis"/>
+				<AnyChar String="&lt;?" attribute="Regex Parenthesis Options"/>
+				<StringDetect String="(" attribute="Regex Parenthesis Options" context="Raw Triple Q-F-Regex ParentCond" beginRegion="RegParent"/>
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+			</context>
+			<context name="Raw Triple Q-F-Regex ParentCond" attribute="Raw F-String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop!Raw Triple Q-F-Regex Parenthesis">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple Q-F-Regex Parenthesis" endRegion="RegParent"/>
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+				<RegExpr String="\b[_[:alpha:]]\w+|\b[0-9]{1,2}" attribute="Regex Backreference"/>
+			  <!-- regex package support: -->
+				<RegExpr String="\?&lt;?[=!]" attribute="Regex Parenthesis Options" context="#pop#pop#pop!Raw Triple Q-F-Regex LookaroundInCond"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex ParentError" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="?" attribute="Error" context="#pop#pop!Raw Triple Q-F-Regex Parenthesis"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex NamedCapture" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="(" attribute="Regex Capturing" beginRegion="RegParent"/>
+				<!-- regex package support: P is optional -->
+				<RegExpr String="\?P?&lt;(([_[:alpha:]]\w*)?>)?" attribute="Regex Parenthesis Options" context="#pop#pop!Raw Triple Q-F-Regex Capture"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex LookaroundInCond" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop!Raw Triple Q-F-Regex Parenthesis" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex Parenthesis" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Parenthesis" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex Capture" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex NonCapture" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String=")" attribute="Regex Non-Capturing" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-F-Regex ParentInside"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex ParentInside" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop" endRegion="RegParent"/>
+				<IncludeRules context="Raw Triple Q-F-Regex"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex ParentComment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="RegexTripleCommentCommon"/>
+				<IncludeRules context="RegexFString"/>
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop#pop" endRegion="RegParent"/>
+			</context>
+
+			<context name="Raw Triple Q-F-Regex Set" attribute="Regex Set" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="RegexFStringSetCommon"/>
+				<IncludeRules context="RegexFString"/>
+				<StringDetect String="&quot;&quot;&quot;" lookAhead="1" context="#pop"/>
+			</context>
+
+
+			<!-- Regex common context -->
+
+			<context name="RegexFString" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="{{" attribute="String Char"/>
+				<StringDetect String="}}" attribute="String Char"/>
+				<StringDetect String="{"  attribute="String Substitution" context="String Interpolation"/>
+				<StringDetect String="}"  attribute="Error"/>
+			</context>
+
+			<context name="RegexFStringParentCommon" attribute="Raw F-String" lineEndContext="#pop">
+				<!-- regex package support: (?R) (?0) -->
+				<RegExpr String="\(\?([R0](?=\))|(?=([aiLmsuxfwbepr]+|V[01]|&fStringSimple;)*\)))" attribute="Regex Parenthesis Options" context="RegexFStringParentOptions"/>
+				<!-- regex package support: (?P=1), (?1), (?P>name), (?P&name) -->
+				<RegExpr String="\(\?P[=>&amp;]" attribute="Regex Backreference" context="RegexFStringParentBackRef"/>
+			</context>
+			<context name="RegexFStringParentOptions" attribute="Regex Parenthesis Options" lineEndContext="#pop#pop">
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+				<StringDetect String=")" attribute="Regex Parenthesis Options" context="#pop#pop"/>
+			</context>
+			<context name="RegexFStringParentBackRef" attribute="Regex Backreference" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+				<StringDetect String=")" attribute="Regex Backreference" context="#pop#pop"/>
+				<DetectIdentifier attribute="Regex Backreference"/>
+				<Int attribute="Regex Backreference"/>
+			</context>
+
+			<context name="RegexFStringCommon" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="\" lookAhead="1" context="RegexFStringEscape"/>
+				<IncludeRules context="RegexCommonSymbol"/>
+				<RegExpr String="\{\{(,&regFStringRangeN;?|&regFStringRangeN;(,&regFStringRangeN;?)?)\}\}" lookAhead="1" context="RegexFStringCommonRange"/>
+				<IncludeRules context="RegexFString"/>
+			</context>
+			<context name="RegexFStringCommonRange" attribute="Regex Quantifier" lineEndContext="#pop">
+				<StringDetect String="{{" attribute="String Char"/>
+				<StringDetect String="}}" attribute="String Char" context="#pop"/>
+				<StringDetect String="{"  attribute="String Substitution" context="String Interpolation"/>
+			</context>
+
+			<context name="RegexFStringSetCommon" attribute="Raw F-String" lineEndContext="#pop">
+				<StringDetect String="]" attribute="Regex Set" context="#pop"/>
+				<StringDetect String="\" lookAhead="1" context="RegexFStringSetEscape"/>
+				<!-- regex package support: character classes [:...:] -->
+				<StringDetect String="[" lookAhead="1" context="RegexSetCharClass"/>
+			</context>
+
+			<context name="RegexFStringSetEscape" attribute="Raw F-String" lineEndContext="#pop">
+				<IncludeRules context="RegexFStringEscapeCommon"/>
+				<StringDetect String="\b" attribute="String Char" context="#pop"/>
+				<LineContinue attribute="String Char" context="#pop"/>
+				<RegExpr String="." attribute="Error" context="#pop"/>
+			</context>
+
+			<context name="RegexFStringEscape" attribute="Raw F-String" lineEndContext="#pop">
+				<IncludeRules context="RegexFStringEscapeCommon"/>
+				<IncludeRules context="RegexEscapeCommonBegin"/>
+				<RegExpr String="\\g&lt;(?=&fStringSimple;>)" attribute="Regex Backreference" context="RegexFStringEscapeG"/>
+				<IncludeRules context="RegexEscapeCommonEnd"/>
+			</context>
+			<context name="RegexFStringEscapeG" attribute="Regex Backreference" lineEndContext="#pop#pop">
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+				<StringDetect String=">" attribute="Regex Backreference" context="#pop#pop"/>
+			</context>
+
+			<!-- contains no \b -->
+			<context name="RegexFStringEscapeCommon" attribute="Raw F-String" lineEndContext="#pop">
+				<IncludeRules context="RegexEscapeSpecialCommon"/>
+				<!-- regex package support: \p{value} \P{value} \p{property=value} \P{property=value} -->
+				<RegExpr String="\\[[:^alnum:]afnrtv]|\\[0-7]{1,3}|&escapedHexUni;|\\[pP]{{\^?[a-zA-Z0-9_]+([:=][a-zA-Z0-9_]*)?}}|\\({{|}})|\\[xuUpPN]?(?={([^{]|$))" attribute="String Char" context="#pop"/>
+				<RegExpr String="\\[pP]{{\^?(?=(&fStringSimple;|[a-zA-Z0-9_]++)[:=]?(([a-zA-Z0-9_]*|&fStringSimple;)?)}})|\\N{{(?=&fStringSimple;}})" attribute="String Char" context="RegexFStringEscapeP"/>
+				<RegExpr String="\\L&lt;(?=&fStringSimple;>)" attribute="Regex Special" context="RegexFStringEscapeL"/>
+			</context>
+			<context name="RegexFStringEscapeP" attribute="String Char" lineEndContext="#pop#pop">
+				<StringDetect String="}}" attribute="String Char" context="#pop#pop"/>
+				<StringDetect String="{"  attribute="String Substitution" context="String Interpolation"/>
+			</context>
+			<context name="RegexFStringEscapeL" attribute="Regex Special" lineEndContext="#pop#pop">
+				<StringDetect String="{" attribute="String Substitution" context="String Interpolation"/>
+				<StringDetect String=">" attribute="Regex Special" context="#pop#pop"/>
+			</context>
+
+
+			<context name="RegexBStringCommon" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="\" lookAhead="1" context="RegexBStringEscape"/>
+				<IncludeRules context="RegexCommonSymbol"/>
+				<IncludeRules context="RegexCommonRangeQuantifier"/>
+				<AnyChar String="{}" attribute="Raw B-String"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<context name="RegexBStringSetCommon" attribute="Raw B-String" lineEndContext="#pop">
+				<StringDetect String="]" attribute="Regex Set" context="#pop"/>
+				<StringDetect String="\" lookAhead="1" context="RegexBStringSetEscape"/>
+				<!-- regex package support: character classes [:...:] -->
+				<StringDetect String="[" lookAhead="1" context="RegexSetCharClass"/>
+			</context>
+
+			<context name="RegexBStringSetEscape" attribute="Raw B-String" lineEndContext="#pop">
+				<IncludeRules context="RegexBStringEscapeCommon"/>
+				<StringDetect String="\b" attribute="String Char" context="#pop"/>
+				<LineContinue attribute="String Char" context="#pop"/>
+				<RegExpr String="." attribute="Error" context="#pop"/>
+			</context>
+
+			<context name="RegexBStringEscape" attribute="Raw B-String" lineEndContext="#pop">
+				<IncludeRules context="RegexBStringEscapeCommon"/>
+				<IncludeRules context="RegexEscapeCommonBegin"/>
+				<IncludeRules context="RegexEscapeCommonEnd"/>
+			</context>
+
+			<!-- contains no \b -->
+			<context name="RegexBStringEscapeCommon" attribute="Raw B-String" lineEndContext="#pop">
+				<IncludeRules context="RegexEscapeSpecialCommon"/>
+				<RegExpr String="\\[[:^alnum:]afnrtv]|\\[0-7]{1,3}|&escapedHex;" attribute="String Char" context="#pop"/>
+			</context>
+
+
+			<context name="RegexStringCommon" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="\" lookAhead="1" context="RegexEscape"/>
+				<IncludeRules context="RegexCommonSymbol"/>
+				<IncludeRules context="RegexCommonRangeQuantifier"/>
+			</context>
+
+			<context name="RegexCommonSymbol" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="|" attribute="Regex Alternation"/>
+				<StringDetect String=")" attribute="Error"/>
+				<AnyChar String="*+?" attribute="Regex Quantifier"/>
+				<AnyChar String="^$." attribute="Regex Special"/>
+			</context>
+			<context name="RegexCommonRangeQuantifier" attribute="Raw String" lineEndContext="#pop">
+				<RegExpr String="\{(,[0-9]*|[0-9]+(,[0-9]*)?)\}" attribute="Regex Quantifier"/>
+			</context>
+
+			<context name="RegexCommentCommon" attribute="Comment" lineEndContext="#pop">
+				<DetectSpaces attribute="Comment"/>
+				<DetectIdentifier attribute="Comment"/>
+				<StringDetect String=")" attribute="Comment" context="#pop#pop"/>
+				<StringDetect String="\)" attribute="Comment"/>
+				<StringDetect String="\\" attribute="Comment"/>
+				<StringDetect String="\'" attribute="Comment"/>
+				<StringDetect String="\&quot;" attribute="Comment"/>
+			</context>
+
+			<context name="RegexTripleCommentCommon" attribute="Comment" lineEndContext="#pop">
+				<DetectSpaces attribute="Comment"/>
+				<DetectIdentifier attribute="Comment"/>
+				<StringDetect String=")" attribute="Comment" context="#pop#pop" endRegion="RegParent"/>
+				<StringDetect String="\)" attribute="Comment"/>
+				<StringDetect String="\\" attribute="Comment"/>
+				<StringDetect String="\'" attribute="Comment"/>
+				<StringDetect String="\&quot;" attribute="Comment"/>
+			</context>
+
+			<context name="RegexParentCommon" attribute="Raw String" lineEndContext="#pop">
+				<!-- regex package support: (?R) (?0) -->
+				<RegExpr String="\(\?(([aiLmsuxfwbepr]+|V[01])*|[R0])\)" attribute="Regex Parenthesis Options" context="#pop"/>
+				<!-- regex package support: (?P=1), (?1), (?P>name), (?P&name) -->
+				<RegExpr String="\(\?(P=([_[:alpha:]]\w*|[0-9]{1,2})?|[0-9]{1,2}|P[>&amp;]([_[:alpha:]]\w*)?)\)?" attribute="Regex Backreference" context="#pop"/>
+			</context>
+
+			<context name="RegexSetCommon" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="]" attribute="Regex Set" context="#pop"/>
+				<StringDetect String="\" lookAhead="1" context="RegexSetEscape"/>
+				<!-- regex package support: character classes [:...:] -->
+				<StringDetect String="[" lookAhead="1" context="RegexSetCharClass"/>
+			</context>
+
+			<context name="RegexSetCharClass" attribute="Raw String" lineEndContext="#pop">
+				<RegExpr String="\[:\^?[a-zA-Z_]*:\]" attribute="Regex Character Class" context="#pop"/>
+				<StringDetect String="[" attribute="Regex Set" context="#pop"/>
+			</context>
+
+			<context name="RegexSetEscape" attribute="Raw String" lineEndContext="#pop">
+				<IncludeRules context="RegexStringEscapeCommon"/>
+				<StringDetect String="\b" attribute="String Char" context="#pop"/>
+				<LineContinue attribute="String Char" context="#pop"/>
+				<RegExpr String="." attribute="Error" context="#pop"/>
+			</context>
+
+			<context name="RegexEscape" attribute="Raw String" lineEndContext="#pop">
+				<IncludeRules context="RegexStringEscapeCommon"/>
+				<IncludeRules context="RegexEscapeCommonBegin"/>
+				<IncludeRules context="RegexEscapeCommonEnd"/>
+			</context>
+
+			<context name="RegexEscapeCommonBegin" attribute="Raw String" lineEndContext="#pop">
+				<RegExpr String="\\[0-9]{1,2}|\\g&lt;([0-9]{1,2}|[_[:alpha:]]\w*)>" attribute="Regex Backreference" context="#pop"/>
+			</context>
+			<context name="RegexEscapeCommonEnd" attribute="Raw String" lineEndContext="#pop">
+				<StringDetect String="\b" attribute="Regex Special" context="#pop"/>
+				<LineContinue attribute="String Char" context="#pop"/>
+				<RegExpr String="." attribute="Error" context="#pop"/>
+			</context>
+
+			<!-- contains no \b -->
+			<context name="RegexStringEscapeCommon" attribute="Raw String" lineEndContext="#pop">
+				<IncludeRules context="RegexEscapeSpecialCommon"/>
+				<!-- regex package support: \p{value} \P{value} \p{property=value} \P{property=value} -->
+				<RegExpr String="\\[[:^alnum:]afnrtv]|\\[0-7]{1,3}|&escapedHexUni;|\\[pP]\{\^?[a-zA-Z0-9_]+([:=][a-zA-Z0-9_]*)?\}" attribute="String Char" context="#pop"/>
+			</context>
+			<context name="RegexEscapeSpecialCommon" attribute="Raw String" lineEndContext="#pop">
+				<!-- regex package support: \K \m \M \G \X \L<name> -->
+				<RegExpr String="\\[ABdDsSwWZKmMGX]|\\L&lt;([_[:alpha:]]\w*)?>" attribute="Regex Special" context="#pop"/>
+			</context>
+
+		</contexts>
+
+		<itemDatas>
+			<itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false"/>
+			<itemData name="Definition Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
+			<itemData name="Operator" defStyleNum="dsOperator" spellChecking="false"/>
+			<itemData name="Operator Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
+			<itemData name="Flow Control Keyword" defStyleNum="dsControlFlow" spellChecking="false"/>
+			<itemData name="Builtin Function" defStyleNum="dsBuiltIn" spellChecking="false"/>
+			<itemData name="Special Variable" defStyleNum="dsVariable" spellChecking="false"/>
+			<itemData name="Extensions" defStyleNum="dsExtension" spellChecking="false"/>
+			<itemData name="Exceptions" defStyleNum="dsPreprocessor" spellChecking="false"/>
+			<itemData name="Overloaders" defStyleNum="dsFunction" spellChecking="false"/>
+			<itemData name="Import" defStyleNum="dsImport" spellChecking="false"/>
+			<itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
+			<itemData name="Int" defStyleNum="dsDecVal" spellChecking="false"/>
+			<itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false"/>
+			<itemData name="Octal" defStyleNum="dsBaseN" spellChecking="false"/>
+			<itemData name="Binary" defStyleNum="dsBaseN" spellChecking="false"/>
+			<itemData name="Complex" defStyleNum="dsOthers" spellChecking="false"/>
+			<itemData name="Comment" defStyleNum="dsComment"/>
+			<itemData name="String" defStyleNum="dsString"/>
+			<itemData name="Raw String" defStyleNum="dsVerbatimString"/>
+			<itemData name="F-String" defStyleNum="dsSpecialString"/>
+			<itemData name="Raw F-String" defStyleNum="dsVerbatimString"/>
+			<itemData name="B-String" defStyleNum="dsString" spellChecking="false"/>
+			<itemData name="Raw B-String" defStyleNum="dsVerbatimString" spellChecking="false"/>
+			<itemData name="String Char" defStyleNum="dsChar" spellChecking="false"/>
+			<itemData name="String Substitution" defStyleNum="dsSpecialChar" spellChecking="false"/>
+			<itemData name="Decorator" defStyleNum="dsAttribute" spellChecking="false"/>
+			<itemData name="Error" defStyleNum="dsError"/>
+			<!-- Regex -->
+			<itemData name="Regex Alternation" defStyleNum="dsControlFlow" spellChecking="false"/>
+			<itemData name="Regex Set" defStyleNum="dsPreprocessor" spellChecking="false"/>
+			<itemData name="Regex Character Class" defStyleNum="dsExtension" spellChecking="false" bold="0"/>
+			<itemData name="Regex Capturing" defStyleNum="dsKeyword" spellChecking="false"/>
+			<itemData name="Regex Non-Capturing" defStyleNum="dsNormal" spellChecking="false"/>
+			<itemData name="Regex Parenthesis" defStyleNum="dsExtension" spellChecking="false"/>
+			<itemData name="Regex Parenthesis Options" defStyleNum="dsFunction" spellChecking="false"/>
+			<itemData name="Regex Special" defStyleNum="dsDecVal" spellChecking="false"/>
+			<itemData name="Regex Quantifier" defStyleNum="dsOperator" spellChecking="false"/>
+			<itemData name="Regex Backreference" defStyleNum="dsVariable" spellChecking="false"/>
 		</itemDatas>
 	</highlighting>
 	<general>
diff --git a/xml/rhtml.xml b/xml/rhtml.xml
--- a/xml/rhtml.xml
+++ b/xml/rhtml.xml
@@ -44,7 +44,7 @@
 -->
 	
 <!-- Hold the "language" opening tag on a single line, as mentioned in "language.dtd". -->
-<language name="Ruby/Rails/RHTML" version="15" kateversion="5.79" section="Markup" extensions="*.rhtml;*.RHTML;*.html.erb" mimetype="" author="Richard Dale rdale@foton.es" license="LGPLv2+">
+<language name="Ruby/Rails/RHTML" version="16" kateversion="5.79" section="Markup" extensions="*.rhtml;*.RHTML;*.erb" mimetype="" author="Richard Dale rdale@foton.es" license="LGPLv2+" priority="1">
 	
 	<highlighting>
 	
diff --git a/xml/ruby.xml b/xml/ruby.xml
--- a/xml/ruby.xml
+++ b/xml/ruby.xml
@@ -1,922 +1,1394 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language>
-
-<!--
-  Ruby syntax highlighting definition for Kate.
-
-  Copyright (C) 2004  by Sebastian Vuorinen (sebastian dot vuorinen at helsinki dot fi)
-  Copyright (C) 2004  by Stefan Lang (langstefan@gmx.at)
-  Copyright (C) 2008  by Robin Pedersen (robinpeder@gmail.com)
-  Copyright (C) 2011  by Miquel Sabaté (mikisabate@gmail.com)
-
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Library General Public
-  License as published by the Free Software Foundation; either
-  version 2 of the License, or (at your option) any later version.
-
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Library General Public License for more details.
-
-  You should have received a copy of the GNU Library General Public
-  License along with this library; if not, write to the
-  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-  Boston, MA  02110-1301, USA.
--->
-
-<!--
-    TODO: Division after gdl contexts is interpreted as regexp
--->
-
-<!-- Hold the "language" opening tag on a single line, as mentioned in "language.dtd". -->
-<language name="Ruby" alternativeNames="RB;JRuby" section="Scripts"
-	  version="19" kateversion="5.0"
-	  extensions="*.rb;*.rjs;*.rxml;*.xml.erb;*.js.erb;*.rake;Rakefile;Gemfile;*.gemspec;Vagrantfile"
-	  mimetype="application/x-ruby"
-	  style="ruby" indenter="ruby"
-	  author="Stefan Lang (langstefan@gmx.at), Sebastian Vuorinen (sebastian.vuorinen@helsinki.fi), Robin Pedersen (robinpeder@gmail.com), Miquel Sabaté (mikisabate@gmail.com)" license="LGPLv2+">
-
-	<highlighting>
-
-		<list name="keywords">
-			<item>BEGIN</item>
-			<item>END</item>
-			<item>and</item>
-			<item>begin</item>
-			<item>break</item>
-			<item>case</item>
-			<item>defined?</item>
-			<item>do</item>
-			<item>else</item>
-			<item>elsif</item>
-			<item>end</item>
-			<item>ensure</item>
-			<item>for</item>
-			<item>if</item>
-			<item>in</item>
-			<item>next</item>
-			<item>not</item>
-			<item>or</item>
-			<item>redo</item>
-			<item>rescue</item>
-			<item>retry</item>
-			<item>return</item>
-			<item>then</item>
-			<item>unless</item>
-			<item>until</item>
-			<item>when</item>
-			<item>yield</item>
-		</list>
-
-		<list name="access-control">
-			<item>private_class_method</item>
-			<item>private</item>
-			<item>protected</item>
-			<item>public_class_method</item>
-			<item>public</item>
-		</list>
-
-		<list name="attribute-definitions">
-			<item>attr_reader</item>
-			<item>attr_writer</item>
-			<item>attr_accessor</item>
-		</list>
-
-		<list name="definitions">
-			<item>alias</item>
-			<item>module</item>
-			<item>class</item>
-			<item>def</item>
-			<item>undef</item>
-		</list>
-
-		<list name="pseudo-variables">
-			<item>self</item>
-			<item>super</item>
-			<item>nil</item>
-			<item>false</item>
-			<item>true</item>
-			<item>caller</item>
-			<item>__FILE__</item>
-			<item>__LINE__</item>
-		</list>
-
-		<list name="default-globals">
-			<item>$stdout</item>
-			<item>$defout</item>
-			<item>$stderr</item>
-			<item>$deferr</item>
-			<item>$stdin</item>
-		</list>
-
-		<!-- Kernel module methods.
-			NOTE: Methods ending in ? or !
-				are included below as regexes.
-		-->
-		<list name="kernel-methods">
-			<!-- backquote ` -->
-			<item>abort</item>
-			<item>at_exit</item>
-			<item>autoload</item>
-			<item>autoload?</item>
-			<item>binding</item>
-			<item>block_given?</item>
-			<item>callcc</item>
-			<item>caller</item>
-			<item>catch</item>
-			<item>chomp</item>
-			<item>chomp!</item>
-			<item>chop</item>
-			<item>chop!</item>
-			<item>eval</item>
-			<item>exec</item>
-			<item>exit</item>
-			<item>exit!</item>
-			<item>fail</item>
-			<item>fork</item>
-			<item>format</item>
-			<item>getc</item>
-			<item>gets</item>
-			<item>global_variables</item>
-			<item>gsub</item>
-			<item>gsub!</item>
-			<item>iterator?</item>
-			<item>lambda</item>
-			<item>load</item>
-			<item>local_variables</item>
-			<item>loop</item>
-			<item>method_missing</item>
-			<item>open</item>
-			<item>p</item>
-			<item>print</item>
-			<item>printf</item>
-			<item>proc</item>
-			<item>putc</item>
-			<item>puts</item>
-			<item>raise</item>
-			<item>rand</item>
-			<item>readline</item>
-			<item>readlines</item>
-			<item>require</item>
-			<item>require_relative</item>
-			<item>scan</item>
-			<item>select</item>
-			<item>set_trace_func</item>
-			<item>sleep</item>
-			<item>split</item>
-			<item>sprintf</item>
-			<item>srand</item>
-			<item>sub</item>
-			<item>sub!</item>
-			<item>syscall</item>
-			<item>system</item>
-			<item>test</item>
-			<item>throw</item>
-			<item>trace_var</item>
-			<item>trap</item>
-			<item>untrace_var</item>
-			<item>warn</item>
-		</list>
-
-		<list name="mixin-methods">
-			<item>extend</item>
-			<item>include</item>
-			<item>prepend</item>
-			<item>refine</item>
-			<item>using</item>
-		</list>
-
-		<contexts>
-			<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
-				<!-- ruby ignores newline after \ -->
-				<LineContinue attribute="Normal Text" context="Line Continue"/>
-
-				<!-- __END__ token on own line. -->
-				<RegExpr attribute="Keyword" String="^__END__$" context="DATA" column="0"/>
-
-				<!-- "shebang" line -->
-				<RegExpr attribute="Keyword" String="^#!\/.*" context="#stay" column="0"/>
-
-				<!-- "def" - "end" blocks -->
-				<!-- check for statement modifiers with regexes -->
-				<DetectChar attribute="Operator" char="{" context="Find closing block brace" beginRegion="def block"/>
-				<DetectChar attribute="Delimiter" char="}" context="check_div_1" endRegion="def block"/>
-				<RegExpr attribute="Keyword" String="[=([]\s*(if|unless|while|until)\b|(while|until)\b(?!.*\bdo\b)|\;\s*(while|until)\b(?!.*\bdo\b)|\;\s*(if|unless)\b" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="(if|unless)\b" context="#stay" beginRegion="def block" firstNonSpace="true"/>
-				<WordDetect attribute="Keyword" String="class" context="no_heredoc" beginRegion="def block"/>
-				<WordDetect attribute="Keyword" String="module" context="#stay" beginRegion="def block"/>
-				<WordDetect attribute="Keyword" String="begin" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="\bfor\b(?!.*\bdo\b)" context="#stay" beginRegion="def block"/>
-				<WordDetect attribute="Keyword" String="case" context="#stay" beginRegion="def block"/>
-				<WordDetect attribute="Keyword" String="do" context="#stay" beginRegion="def block"/>
-				<WordDetect attribute="Keyword" String="def" context="#stay" beginRegion="def block"/>
-				<WordDetect attribute="Keyword" String="end" context="#stay" endRegion="def block"/>
-				<!-- elsif/else close the current block and start a new one -->
-				<RegExpr attribute="Keyword" String="\b(else|elsif|rescue|ensure)\b" context="#stay" endRegion="def block" beginRegion="def block"/>
-
-				<StringDetect attribute="Operator" String="..." context="#stay"/>
-				<Detect2Chars attribute="Operator" char="." char1="." context="#stay"/>
-
-				<!-- marks a message (being sent, not defined) -->
-				<RegExpr attribute="Message" String="\.[_a-z][_a-zA-Z0-9]*(\?|\!|\b)" context="check_div_2"/>
-
-				<!-- Check for "ASCII code operator". e.g.: ?a -->
-				<RegExpr attribute="Dec" String="\s\?(\\M\-)?(\\C\-)?\\?\S" context="check_div_1"/>
-
-				<keyword attribute="Keyword" String="keywords" context="#stay"/>
-				<keyword attribute="Attribute Definition" String="attribute-definitions"  context="check_div_2"/>
-				<keyword attribute="Access Control" String="access-control" context="check_div_2"/>
-				<keyword attribute="Definition" String="definitions"  context="#stay" />
-				<keyword attribute="Pseudo variable" String="pseudo-variables"  context="check_div_1"/>
-				<keyword attribute="Default globals" String="default-globals" context="check_div_2"/>
-				<keyword attribute="Kernel methods" String="kernel-methods" context="check_div_2"/>
-				<keyword attribute="Module mixin methods" String="mixin-methods" context="check_div_2"/>
-
-				<!-- (global) vars starting with $
-						Match them before $_.
-				-->
-				<RegExpr attribute="Global Variable" String="\$[a-zA-Z_0-9]+|\$\-[a-zA-Z_]\b" context="check_div_1"/>
-				<!-- special-character globals -->
-				<RegExpr attribute="Default globals" String="\$[\d_*`+@;,.~=\!\$:?'/\\\-\&amp;&quot;&gt;&lt;]" context="check_div_1"/>
-				<RegExpr attribute="Global Constant" String="\b[_A-Z]+[A-Z_0-9]+\b" context="check_div_2"/>
-				<!-- Generally a module or class name like "File", "MyModule_1", .. -->
-				<RegExpr attribute="Constant" String="\b[A-Z]+_*([0-9]|[a-z])[_a-zA-Z0-9]*\b" context="check_div_2"/>
-
-				<!-- Numeric values. Note that we have to allow underscores between two digits (thus the creepy regular expressions). -->
-				<RegExpr attribute="Hex" String="\b\-?0[xX]([0-9a-fA-F]|_[0-9a-fA-F])+" context="check_div_1"/>
-				<RegExpr attribute="Bin" String="\b\-?0[bB]([01]|_[01])+" context="check_div_1"/>
-				<RegExpr attribute="Octal" String="\b\-?0[1-7]([0-7]|_[0-7])*" context="check_div_1"/>
-				<RegExpr attribute="Float" String="\b\-?[0-9]([0-9]|_[0-9])*\.[0-9]([0-9]|_[0-9])*([eE]\-?[1-9]([0-9]|_[0-9])*(\.[0-9]*)?)?" context="check_div_1"/>
-				<RegExpr attribute="Dec" String="\b\-?[1-9]([0-9]|_[0-9])*\b" context="check_div_1"/>
-				<Int attribute="Dec" context="check_div_1"/>
-				<HlCChar attribute="Char" context="check_div_1"/>
-
-				<!-- Check for =begin before assignment operator. -->
-				<RegExpr attribute="Blockcomment" String="^=begin(?:\s|$)" context="Embedded documentation" beginRegion="comment block" column="0"/>
-
-				<!-- recognize the beginning of a HEREDOC
-					This uses new features in Kate 2.3 and later
-
-					There is no other chance of keeping heredoc apart from the
-					push operator '<<' than requiring to put space between the operator
-					and the string.
-				-->
-				<RegExpr attribute="Operator" context="find_indented_heredoc" String="\s*&lt;&lt;[-~](?=\w+|[&quot;'`])" beginRegion="HereDocument" />
-				<RegExpr attribute="Operator" context="find_heredoc" String="\s*&lt;&lt;(?=\w+|[&quot;'`])" beginRegion="HereDocument" />
-
-				<DetectChar attribute="Operator" char="." context="#stay"/>
-				<Detect2Chars attribute="Operator" char="&amp;" char1="&amp;" context="#stay"/>
-				<Detect2Chars attribute="Operator" char="|" char1="|" context="#stay"/>
-				<!-- \s! is regexp hack -->
-				<RegExpr attribute="Operator" String="\s[\?\:\%]\s|[|&amp;&lt;&gt;\^\+*~\-=]+|\s!|/=\s" context="#stay"/>
-				<Detect2Chars attribute="Operator" char="%" char1="=" context="#stay"/>
-				<Detect2Chars attribute="Operator" char=":" char1=":" context="Member Access"/>
-
-				<RegExpr attribute="Symbol" String=":(@{1,2}|\$)?[a-zA-Z_][a-zA-Z0-9_]*[=?!]?|:\[\]=?" context="check_div_1"/>
-
-				<!-- Do not send to "check_div_1" context!:
-				     after detecting these rules (": ") there can be a regular expression (see bug: #361875) -->
-				<RegExpr attribute="Symbol" String="(@{1,2}|\$)?[a-zA-Z_][a-zA-Z0-9_]*[=?!]?: |\[\]=?: " context="#stay"/>
-
-				<DetectChar attribute="String" char="&quot;" context="Quoted String"/>
-				<DetectChar attribute="Raw String" char="'" context="Apostrophed String"/>
-				<DetectChar attribute="Command" char="`" context="Command String"/>
-
-				<Detect2Chars attribute="Normal Text" char="?" char1="#" context="#stay"/>
-
-				<RegExpr attribute="Comment" String="^#\s*BEGIN.*$"  context="#stay" beginRegion="marker" column="0"/>
-				<RegExpr attribute="Comment" String="^#\s*END.*$"  context="#stay" endRegion="marker" column="0"/>
-				<DetectChar attribute="Comment" char="#" context="General Comment"/>
-
-				<DetectChar attribute="Delimiter" char="["  context="#stay"/>
-				<DetectChar attribute="Delimiter" char="]"  context="check_div_1"/>
-
-				<RegExpr attribute="Instance Variable" String="@[a-zA-Z_0-9]+" context="check_div_1"/>
-				<RegExpr attribute="Class Variable" String="@@[a-zA-Z_0-9]+" context="check_div_1"/>
-
-				<!-- handle the different regular expression formats -->
-				<DetectChar attribute="Regular Expression" char="/" context="RegEx 1"/>
-
-				<!-- recognize the beginning of a general delimited input format -->
-				<!-- this moves to the next context to separate out the exact nature of the GDL input -->
-				<RegExpr attribute="GDL input" context="find_gdl_input" String="\s*[%](?=[QqxwW]?[^\s])" beginRegion="GdlInput" />
-
-				<DetectChar attribute="Normal Text" char=")" context="check_div_1"/>
-				<DetectIdentifier attribute="Normal Text" context="check_div_2"/>
-
-			</context>
-
-			<!-- In the following contexts, a slash character ('/') is a division operator -->
-			<!-- Everywhere else, it's a regular expression delimiter -->
-
-			<!-- A slash is always a division operator, even if preceeded by whitespace -->
-			<context name="check_div_1" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop" lineEndContext="#pop">
-				<DetectSpaces attribute="Normal Text" context="#stay"/>
-				<AnyChar attribute="Operator" String="/%" context="#pop"/>
-			</context>
-
-			<!-- Same as check_div_1, but with double pop to exit the surrounding context -->
-			<context name="check_div_1_pop" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop#pop" lineEndContext="#pop#pop">
-				<DetectSpaces attribute="Normal Text" context="#stay"/>
-				<AnyChar attribute="Operator" String="/%" context="#pop#pop"/>
-			</context>
-
-			<!-- A slash is division operator if it's the first character, or if preceeded and followed by whitespace -->
-			<context name="check_div_2" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop" lineEndContext="#pop">
-				<AnyChar attribute="Operator" String="/%" context="#pop"/>
-				<DetectSpaces attribute="Normal Text" context="check_div_2_internal"/>
-			</context>
-
-			<!-- Internal context used by check_div_2 -->
-			<context name="check_div_2_internal" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop#pop" lineEndContext="#pop#pop">
-<!-- 				<DetectChar attribute="Operator" char="%" context="#pop#pop"/> -->
-				<RegExpr attribute="Operator" String="[/%](?=\s)" context="#pop#pop"/>
-			</context>
-
-			<!-- Same as check_div_2, but with double pop to exit the surrounding context -->
-			<context name="check_div_2_pop" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop#pop" lineEndContext="#pop#pop">
-				<AnyChar attribute="Operator" String="/%" context="#pop#pop"/>
-				<DetectSpaces attribute="Normal Text" context="check_div_2_pop_internal"/>
-			</context>
-
-			<!-- Internal context used by check_div_2_pop -->
-			<context name="check_div_2_pop_internal" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop#pop#pop" lineEndContext="#pop#pop#pop">
-				<DetectChar attribute="Operator" char="%" context="#pop#pop#pop"/>
-				<RegExpr attribute="Operator" String="/(?=\s)" context="#pop#pop#pop"/>
-			</context>
-
-			<context name="Line Continue" attribute="Normal Text" lineEndContext="#pop">
-				<RegExpr attribute="Keyword" String="(while|until)\b(?!.*\bdo\b)|(if|unless)\b" context="#stay" firstNonSpace="true"/>
-				<IncludeRules context="Normal"/>
-			</context>
-
-			<context name="Find closing block brace" attribute="Normal Text" lineEndContext="#stay">
-				<DetectChar attribute="Operator" char="}" context="check_div_1_pop" endRegion="def block"/>
-				<IncludeRules context="Normal"/>
-			</context>
-
-			<context name="Quoted String" attribute="String" lineEndContext="#stay">
-				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
-				<Detect2Chars attribute="String" char="\" char1="&quot;" context="#stay"/>
-				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
-				<DetectChar char="&quot;" attribute="String" context="check_div_1_pop"/>
-			</context>
-
-			<context name="Apostrophed String" attribute="Raw String" lineEndContext="#stay">
-				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
-				<Detect2Chars attribute="String" char="\" char1="'" context="#stay"/>
-				<DetectChar char="'" attribute="Raw String" context="check_div_1_pop"/>
-			</context>
-
-			<context name="Command String" attribute="Command" lineEndContext="#stay">
-				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
-				<Detect2Chars attribute="String" char="\" char1="`" context="#stay"/>
-				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
-				<DetectChar char="`" attribute="Command" context="check_div_1_pop"/>
-			</context>
-
-			<context name="Embedded documentation" attribute="Blockcomment" lineEndContext="#stay">
-				<RegExpr attribute="Comment" String="^=end(?:\s.*|$)" context="#pop" endRegion="comment block" column="0"/>
-				<DetectSpaces />
-				<IncludeRules context="##Comments" />
-			</context>
-
-			<context name="RegEx 1" attribute="Regular Expression" lineEndContext="#stay">
-				<Detect2Chars attribute="Regular Expression" char="\" char1="/" context="#stay"/>
-				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
-				<RegExpr attribute="Regular Expression" String="/[uiomxn]*" context="check_div_1_pop"/>
-			</context>
-
-			<!-- Substitutions can be nested -->
-			<context name="Subst" attribute="Normal Text" lineEndContext="#stay">
-				<DetectChar attribute="Substitution" char="}" context="#pop"/>
-				<!-- Highlight substitution as code. -->
-				<IncludeRules context="Normal"/>
-			</context>
-
-			<context name="Short Subst" attribute="Substitution" lineEndContext="#pop">
-				<!-- Check for e.g.: "#@var#@@xy" -->
-				<RegExpr attribute="Substitution" String="#@{1,2}" context="#stay"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="$" context="#stay"/>
-				<RegExpr attribute="Substitution" String="\w(?!\w)" context="#pop"/>
-			</context>
-
-			<!-- This handles access of nested module classes and class methods -->
-			<context name="Member Access" attribute="Member" lineEndContext="#pop">
-				<!-- marks a message (being sent, not defined) -->
-				<RegExpr attribute="Message" String="\.?[_a-z]\w*(\?|\!)?(?=[^\w\d\.\:])" context="check_div_2_pop"/>
-				<RegExpr attribute="Message" String="\.?[_a-z]\w*(\?|\!)?" context="#stay"/>
-				<RegExpr attribute="Constant" String="[A-Z]+_*(\d|[a-z])\w*(?=[^\w\d\.\:])" context="check_div_2_pop"/>
-				<RegExpr attribute="Constant" String="[A-Z]+_*([0-9]|[a-z])\w*" context="#stay"/>
-				<RegExpr attribute="Constant Value" String="[_A-Z][_A-Z0-9]*(?=[^\w\d\.\:])" context="check_div_2_pop"/>
-				<RegExpr attribute="Constant Value" String="[_A-Z][_A-Z0-9]*" context="#stay"/>
-				<Detect2Chars attribute="Operator" char=":" char1=":" context="#stay"/>
-				<DetectChar attribute="Member" char="." context="#stay"/>
-
-				<AnyChar attribute="Operator" String="=+-*/%|&amp;[]{}~" context="#pop"/>
-				<DetectChar attribute="Comment" char="#" context="#pop"/>
-				<AnyChar attribute="Normal Text" String="()\" context="#pop"/>
-				<RegExpr attribute="Member" String="\W" context="#pop"/>
-			</context>
-
-			<context name="General Comment" attribute="Comment" lineEndContext="#pop">
-				<DetectSpaces />
-				<IncludeRules context="##Comments" />
-			</context>
-
-			<!-- HEREDOC support
-				The contexts below support both normal and indented heredocs
-			 -->
-			<!-- here we markup the heredoc markers -->
-			<context name="find_heredoc" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-				<RegExpr attribute="Keyword" context="apostrophed_normal_heredoc" String="'(\w+)'" />
-				<RegExpr attribute="Keyword" context="normal_heredoc" String="(?|(\w+)|&quot;(\w+)&quot;|`(\w+)`)" />
-			</context>
-			<context name="find_indented_heredoc" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-				<RegExpr attribute="Keyword" context="apostrophed_indented_heredoc" String="'(\w+)'" />
-				<RegExpr attribute="Keyword" context="indented_heredoc" String="(?|(\w+)|&quot;(\w+)&quot;|`(\w+)`)" />
-			</context>
-			<!-- these are the real heredoc contexts -->
-			<context name="indented_heredoc" attribute="Here Document" lineEndContext="#stay" dynamic="true">
-				<RegExpr attribute="Keyword" context="#pop#pop" String="%1$" dynamic="true" endRegion="HereDocument" firstNonSpace="true"/>
-				<IncludeRules context="heredoc_rules" />
-			</context>
-			<context name="apostrophed_indented_heredoc" attribute="Here Document" lineEndContext="#stay" dynamic="true">
-				<RegExpr attribute="Keyword" context="#pop#pop" String="%1$" dynamic="true" endRegion="HereDocument" firstNonSpace="true"/>
-			</context>
-
-			<context name="normal_heredoc" attribute="Here Document" lineEndContext="#stay" dynamic="true">
-				<RegExpr attribute="Keyword" context="#pop#pop" String="^%1$" dynamic="true" endRegion="HereDocument" column="0"/>
-				<IncludeRules context="heredoc_rules" />
-			</context>
-			<context name="apostrophed_normal_heredoc" attribute="Here Document" lineEndContext="#stay" dynamic="true">
-				<RegExpr attribute="Keyword" context="#pop#pop" String="^%1$" dynamic="true" endRegion="HereDocument" column="0"/>
-			</context>
-
-			<!-- rules for heredoc types -->
-			<context name="heredoc_rules" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
-			</context>
-
-			<!-- avoid highlighting heredoc markers, for example, in singleton class definition (see bug: #358273) -->
-			<context name="no_heredoc" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
-				<DetectSpaces />
-				<Detect2Chars attribute="Operator" char="&lt;" char1="&lt;" context="#pop"/>
-				<!-- comments -->
-				<RegExpr attribute="Comment" String="^#\s*BEGIN.*$"  context="#stay" beginRegion="marker" column="0"/>
-				<RegExpr attribute="Comment" String="^#\s*END.*$"  context="#stay" endRegion="marker" column="0"/>
-				<DetectChar attribute="Comment" char="#" context="General Comment"/>
-			</context>
-
-			<!-- General delimited input support
-				The contexts below handle the various gdl formats
-			 -->
-			<context name="find_gdl_input" attribute="Normal Text" lineEndContext="#pop">
-
-				<!-- handle token arrays -->
-				<Detect2Chars attribute="GDL input" context="gdl_token_array_1" char="w" char1="(" />
-				<Detect2Chars attribute="GDL input" context="gdl_token_array_2" char="w" char1="{" />
-				<Detect2Chars attribute="GDL input" context="gdl_token_array_3" char="w" char1="[" />
-				<Detect2Chars attribute="GDL input" context="gdl_token_array_4" char="w" char1="&lt;" />
-				<!-- then we handle the 'any char' format -->
-				<RegExpr attribute="GDL input" context="gdl_token_array_5" String="w([^\s\w])" />
-
-				<!-- handle token arrays -->
-				<Detect2Chars attribute="GDL input" context="gdl_token_array_1" char="W" char1="(" />
-				<Detect2Chars attribute="GDL input" context="gdl_token_array_2" char="W" char1="{" />
-				<Detect2Chars attribute="GDL input" context="gdl_token_array_3" char="W" char1="[" />
-				<Detect2Chars attribute="GDL input" context="gdl_token_array_4" char="W" char1="&lt;" />
-				<!-- then we handle the 'any char' format -->
-				<RegExpr attribute="GDL input" context="gdl_token_array_5" String="W([^\s\w])" />
-
-				<!-- handle apostrophed strings -->
-				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_1" char="q" char1="(" />
-				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_2" char="q" char1="{" />
-				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_3" char="q" char1="[" />
-				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_4" char="q" char1="&lt;" />
-				<!-- then we handle the 'any char' format -->
-				<RegExpr attribute="GDL input" context="gdl_apostrophed_5" String="q([^\s\w])" />
-
-				<!-- handle shell commands -->
-				<Detect2Chars attribute="GDL input" context="gdl_shell_command_1" char="x" char1="(" />
-				<Detect2Chars attribute="GDL input" context="gdl_shell_command_2" char="x" char1="{" />
-				<Detect2Chars attribute="GDL input" context="gdl_shell_command_3" char="x" char1="[" />
-				<Detect2Chars attribute="GDL input" context="gdl_shell_command_4" char="x" char1="&lt;" />
-				<!-- then we handle the 'any char' format -->
-				<RegExpr attribute="GDL input" context="gdl_shell_command_5" String="x([^\s\w])" />
-
-				<!-- handle regular expressions -->
-				<Detect2Chars attribute="GDL input" context="gdl_regexpr_1" char="r" char1="(" />
-				<Detect2Chars attribute="GDL input" context="gdl_regexpr_2" char="r" char1="{" />
-				<Detect2Chars attribute="GDL input" context="gdl_regexpr_3" char="r" char1="[" />
-				<Detect2Chars attribute="GDL input" context="gdl_regexpr_4" char="r" char1="&lt;" />
-				<!-- then we handle the 'any char' format -->
-				<RegExpr attribute="GDL input" context="gdl_regexpr_5" String="r([^\s\w])" />
-
-				<!-- handle double-quoted strings -->
-				<!--
-					  be careful to make this the last GDL ruleset, because the rule for
-					  the short form %?foo? will otherwise catch any of the other formats
-				-->
-				<Detect2Chars attribute="GDL input" context="gdl_dq_string_1" char="Q" char1="(" />
-				<Detect2Chars attribute="GDL input" context="gdl_dq_string_2" char="Q" char1="{" />
-				<Detect2Chars attribute="GDL input" context="gdl_dq_string_3" char="Q" char1="[" />
-				<Detect2Chars attribute="GDL input" context="gdl_dq_string_4" char="Q" char1="&lt;" />
-				<DetectChar attribute="GDL input" context="gdl_dq_string_1" char="(" />
-				<DetectChar attribute="GDL input" context="gdl_dq_string_2" char="{" />
-				<DetectChar attribute="GDL input" context="gdl_dq_string_3" char="[" />
-				<DetectChar attribute="GDL input" context="gdl_dq_string_4" char="&lt;" />
-				<!-- then we handle the 'any char' format -->
-				<RegExpr attribute="GDL input" context="gdl_dq_string_5" String="Q?([^\s\w])" />
-
-			</context>
-			<!-- double-quoted string specific contexts follow -->
-			<context name="gdl_dq_string_1" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="dq_string_rules" />
-				<Detect2Chars attribute="String" char="\" char1=")" context="#stay"/>
-				<DetectChar attribute="String" context="gdl_dq_string_1_nested" char="(" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char=")" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_dq_string_1_nested" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="dq_string_rules" />
-				<DetectChar attribute="String" context="gdl_dq_string_1_nested" char="(" />
-				<DetectChar attribute="String" context="#pop" char=")" />
-			</context>
-			<!-- note that here substitution should win over nesting -->
-			<context name="gdl_dq_string_2" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="dq_string_rules" />
-				<Detect2Chars attribute="String" char="\" char1="}" context="#stay"/>
-				<DetectChar attribute="GDL input" context="#pop#pop" char="}" endRegion="GdlInput" />
-				<DetectChar attribute="String" context="gdl_dq_string_2_nested" char="{" />
-			</context>
-			<context name="gdl_dq_string_2_nested" attribute="String" lineEndContext="#stay" >
-				<DetectChar attribute="String" context="gdl_dq_string_2_nested" char="{" />
-				<DetectChar attribute="String" context="#pop" char="}" />
-				<IncludeRules context="dq_string_rules" />
-			</context>
-
-			<context name="gdl_dq_string_3" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="dq_string_rules" />
-				<Detect2Chars attribute="String" char="\" char1="]" context="#stay"/>
-				<DetectChar attribute="String" context="gdl_dq_string_3_nested" char="[" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char="]" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_dq_string_3_nested" attribute="String" lineEndContext="#stay" >
-				<DetectChar attribute="String" context="gdl_dq_string_3_nested" char="[" />
-				<DetectChar attribute="String" context="#pop" char="]" />
-				<IncludeRules context="dq_string_rules" />
-			</context>
-
-			<context name="gdl_dq_string_4" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="dq_string_rules" />
-				<Detect2Chars attribute="String" char="\" char1="&gt;" context="#stay"/>
-				<DetectChar attribute="String" context="gdl_dq_string_4_nested" char="&lt;" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char="&gt;" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_dq_string_4_nested" attribute="String" lineEndContext="#stay" >
-				<DetectChar attribute="String" context="gdl_dq_string_4_nested" char="&lt;" />
-				<DetectChar attribute="String" context="#pop" char="&gt;" />
-				<IncludeRules context="dq_string_rules" />
-			</context>
-
-			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
-				delimiter character
-			 -->
-			<context name="gdl_dq_string_5" attribute="String" lineEndContext="#stay" dynamic="true">
-				<IncludeRules context="dq_string_rules" />
-				<StringDetect attribute="String" String="\%1" context="#stay" dynamic="true" />
-				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
-			</context>
-			<!-- rules to be included in all dq_string contexts -->
-			<context name="dq_string_rules" attribute="String" lineEndContext="#stay" >
-				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
-				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
-			</context>
-
-			<!-- token array specific contexts -->
-
-			<context name="gdl_token_array_1" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="token_array_rules" />
-				<Detect2Chars attribute="String" char="\" char1=")" context="#stay"/>
-				<DetectChar attribute="String" context="gdl_token_array_1_nested" char="(" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char=")" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_token_array_1_nested" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="token_array_rules" />
-				<DetectChar attribute="String" context="gdl_token_array_1_nested" char="(" />
-				<DetectChar attribute="String" context="#pop" char=")" />
-			</context>
-
-			<context name="gdl_token_array_2" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="token_array_rules" />
-				<Detect2Chars attribute="String" char="\" char1="}" context="#stay"/>
-				<DetectChar attribute="GDL input" context="#pop#pop" char="}" endRegion="GdlInput" />
-				<DetectChar attribute="String" context="gdl_token_array_2_nested" char="{" />
-			</context>
-			<context name="gdl_token_array_2_nested" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="token_array_rules" />
-				<DetectChar attribute="String" context="gdl_token_array_2_nested" char="{" />
-				<DetectChar attribute="String" context="#pop" char="}" />
-			</context>
-
-			<context name="gdl_token_array_3" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="token_array_rules" />
-				<Detect2Chars attribute="String" char="\" char1="]" context="#stay"/>
-				<DetectChar attribute="String" context="gdl_token_array_3_nested" char="[" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char="]" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_token_array_3_nested" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="token_array_rules" />
-				<DetectChar attribute="String" context="gdl_token_array_3_nested" char="[" />
-				<DetectChar attribute="String" context="#pop" char="]" />
-			</context>
-
-			<context name="gdl_token_array_4" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="token_array_rules" />
-				<Detect2Chars attribute="String" char="\" char1="&gt;" context="#stay"/>
-				<DetectChar attribute="String" context="gdl_token_array_4_nested" char="&lt;" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char="&gt;" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_token_array_4_nested" attribute="String" lineEndContext="#stay" >
-				<IncludeRules context="token_array_rules" />
-				<DetectChar attribute="String" context="gdl_token_array_4_nested" char="&lt;" />
-				<DetectChar attribute="String" context="#pop" char="&gt;" />
-			</context>
-
-			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
-				delimiter character
-			 -->
-			<context name="gdl_token_array_5" attribute="String" lineEndContext="#stay" dynamic="true">
-				<IncludeRules context="token_array_rules" />
-				<StringDetect attribute="String" String="\%1" context="#stay" dynamic="true"/>
-				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
-			</context>
-
-			<!-- rules to be included in all token_array contexts -->
-			<context name="token_array_rules" attribute="String" lineEndContext="#stay" >
-				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
-			</context>
-
-			<!-- apostrophed string specific contexts -->
-
-			<context name="gdl_apostrophed_1" attribute="Raw String" lineEndContext="#stay" >
-				<IncludeRules context="apostrophed_rules" />
-				<Detect2Chars attribute="Raw String" char="\" char1=")" context="#stay"/>
-				<DetectChar attribute="Raw String" context="gdl_apostrophed_1_nested" char="(" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char=")" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_apostrophed_1_nested" attribute="Raw String" lineEndContext="#stay" >
-				<IncludeRules context="apostrophed_rules" />
-				<DetectChar attribute="Raw String" context="gdl_apostrophed_1_nested" char="(" />
-				<DetectChar attribute="Raw String" context="#pop" char=")" />
-			</context>
-
-			<context name="gdl_apostrophed_2" attribute="Raw String" lineEndContext="#stay" >
-				<IncludeRules context="apostrophed_rules" />
-				<Detect2Chars attribute="Raw String" char="\" char1="}" context="#stay"/>
-				<DetectChar attribute="GDL input" context="#pop#pop" char="}" endRegion="GdlInput" />
-				<DetectChar attribute="Raw String" context="gdl_apostrophed_2_nested" char="{" />
-			</context>
-			<context name="gdl_apostrophed_2_nested" attribute="Raw String" lineEndContext="#stay" >
-				<IncludeRules context="apostrophed_rules" />
-				<DetectChar attribute="Raw String" context="gdl_apostrophed_2_nested" char="{" />
-				<DetectChar attribute="Raw String" context="#pop" char="}" />
-			</context>
-
-			<context name="gdl_apostrophed_3" attribute="Raw String" lineEndContext="#stay" >
-				<IncludeRules context="apostrophed_rules" />
-				<Detect2Chars attribute="Raw String" char="\" char1="]" context="#stay"/>
-				<DetectChar attribute="Raw String" context="gdl_apostrophed_3_nested" char="[" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char="]" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_apostrophed_3_nested" attribute="Raw String" lineEndContext="#stay" >
-				<IncludeRules context="apostrophed_rules" />
-				<DetectChar attribute="Raw String" context="gdl_apostrophed_3_nested" char="[" />
-				<DetectChar attribute="Raw String" context="#pop" char="]" />
-			</context>
-
-			<context name="gdl_apostrophed_4" attribute="Raw String" lineEndContext="#stay" >
-				<IncludeRules context="apostrophed_rules" />
-				<Detect2Chars attribute="Raw String" char="\" char1="&gt;" context="#stay"/>
-				<DetectChar attribute="Raw String" context="gdl_apostrophed_4_nested" char="&lt;" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char="&gt;" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_apostrophed_4_nested" attribute="Raw String" lineEndContext="#stay" >
-				<IncludeRules context="apostrophed_rules" />
-				<DetectChar attribute="Raw String" context="gdl_apostrophed_4_nested" char="&lt;" />
-				<DetectChar attribute="Raw String" context="#pop" char="&gt;" />
-			</context>
-
-			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
-				delimiter character
-			 -->
-			<context name="gdl_apostrophed_5" attribute="Raw String" lineEndContext="#stay" dynamic="true">
-				<IncludeRules context="apostrophed_rules" />
-				<StringDetect attribute="Raw String" String="\%1" context="#stay" dynamic="true"/>
-				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
-			</context>
-
-			<!-- rules to be included in all apostrophed contexts -->
-			<context name="apostrophed_rules" attribute="Raw String" lineEndContext="#stay" >
-				<Detect2Chars attribute="Raw String" char="\" char1="\" context="#stay"/>
-			</context>
-
-			<!-- shell command specific contexts -->
-
-			<context name="gdl_shell_command_1" attribute="Command" lineEndContext="#stay" >
-				<IncludeRules context="shell_command_rules" />
-				<Detect2Chars attribute="Command" char="\" char1=")" context="#stay"/>
-				<DetectChar attribute="Command" context="gdl_shell_command_1_nested" char="(" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char=")" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_shell_command_1_nested" attribute="Command" lineEndContext="#stay" >
-				<IncludeRules context="shell_command_rules" />
-				<DetectChar attribute="Command" context="gdl_shell_command_1_nested" char="(" />
-				<DetectChar attribute="Command" context="#pop" char=")" />
-			</context>
-
-			<context name="gdl_shell_command_2" attribute="Command" lineEndContext="#stay" >
-				<IncludeRules context="shell_command_rules" />
-				<Detect2Chars attribute="Command" char="\" char1="}" context="#stay"/>
-				<DetectChar attribute="GDL input" context="#pop#pop" char="}" endRegion="GdlInput" />
-				<DetectChar attribute="Command" context="gdl_shell_command_2_nested" char="{" />
-			</context>
-			<context name="gdl_shell_command_2_nested" attribute="Command" lineEndContext="#stay" >
-				<IncludeRules context="shell_command_rules" />
-				<DetectChar attribute="Command" context="gdl_shell_command_2_nested" char="{" />
-				<DetectChar attribute="Command" context="#pop" char="}" />
-			</context>
-
-			<context name="gdl_shell_command_3" attribute="Command" lineEndContext="#stay" >
-				<IncludeRules context="shell_command_rules" />
-				<Detect2Chars attribute="Command" char="\" char1="]" context="#stay"/>
-				<DetectChar attribute="Command" context="gdl_shell_command_3_nested" char="[" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char="]" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_shell_command_3_nested" attribute="Command" lineEndContext="#stay" >
-				<IncludeRules context="shell_command_rules" />
-				<DetectChar attribute="Command" context="gdl_shell_command_3_nested" char="[" />
-				<DetectChar attribute="Command" context="#pop" char="]" />
-			</context>
-
-			<context name="gdl_shell_command_4" attribute="Command" lineEndContext="#stay" >
-				<IncludeRules context="shell_command_rules" />
-				<Detect2Chars attribute="Command" char="\" char1="&gt;" context="#stay"/>
-				<DetectChar attribute="Command" context="gdl_shell_command_4_nested" char="&lt;" />
-				<DetectChar attribute="GDL input" context="#pop#pop" char="&gt;" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_shell_command_4_nested" attribute="Command" lineEndContext="#stay" >
-				<IncludeRules context="shell_command_rules" />
-				<DetectChar attribute="Command" context="gdl_shell_command_4_nested" char="&lt;" />
-				<DetectChar attribute="Command" context="#pop" char="&gt;" />
-			</context>
-
-			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
-				delimiter character
-			 -->
-			<context name="gdl_shell_command_5" attribute="Command" lineEndContext="#stay" dynamic="true">
-				<IncludeRules context="shell_command_rules" />
-				<StringDetect attribute="Command" String="\%1" context="#stay" dynamic="true" />
-				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
-			</context>
-
-			<!-- rules to be included in all shell_command contexts -->
-			<context name="shell_command_rules" attribute="Command" lineEndContext="#stay" >
-				<Detect2Chars attribute="Command" char="\" char1="\" context="#stay"/>
-				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
-			</context>
-
-			<!-- regular expression specific contexts -->
-
-			<context name="gdl_regexpr_1" attribute="Regular Expression" lineEndContext="#stay" >
-				<IncludeRules context="regexpr_rules" />
-				<Detect2Chars attribute="Regular Expression" char="\" char1=")" context="#stay"/>
-				<DetectChar attribute="Regular Expression" context="gdl_regexpr_1_nested" char="(" />
-				<RegExpr attribute="GDL input" context="#pop#pop" String="\)[uiomxn]*" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_regexpr_1_nested" attribute="Regular Expression" lineEndContext="#stay" >
-				<IncludeRules context="regexpr_rules" />
-				<DetectChar attribute="Regular Expression" context="gdl_regexpr_1_nested" char="(" />
-				<DetectChar attribute="Regular Expression" context="#pop" char=")" />
-			</context>
-
-			<context name="gdl_regexpr_2" attribute="Regular Expression" lineEndContext="#stay" >
-				<IncludeRules context="regexpr_rules" />
-				<Detect2Chars attribute="Regular Expression" char="\" char1="}" context="#stay"/>
-				<RegExpr attribute="GDL input" context="#pop#pop" String="\}[uiomxn]*" endRegion="GdlInput" />
-				<DetectChar attribute="Regular Expression" context="gdl_regexpr_2_nested" char="{" />
-			</context>
-			<context name="gdl_regexpr_2_nested" attribute="Regular Expression" lineEndContext="#stay" >
-				<IncludeRules context="regexpr_rules" />
-				<DetectChar attribute="Regular Expression" context="gdl_regexpr_2_nested" char="{" />
-				<DetectChar attribute="Regular Expression" context="#pop" char="}" />
-			</context>
-
-			<context name="gdl_regexpr_3" attribute="Regular Expression" lineEndContext="#stay" >
-				<IncludeRules context="regexpr_rules" />
-				<Detect2Chars attribute="Regular Expression" char="\" char1="]" context="#stay"/>
-				<DetectChar attribute="Regular Expression" context="gdl_regexpr_3_nested" char="[" />
-				<RegExpr attribute="GDL input" context="#pop#pop" String="\][uiomxn]*" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_regexpr_3_nested" attribute="Regular Expression" lineEndContext="#stay" >
-				<IncludeRules context="regexpr_rules" />
-				<DetectChar attribute="Regular Expression" context="gdl_regexpr_3_nested" char="[" />
-				<DetectChar attribute="Regular Expression" context="#pop" char="]" />
-			</context>
-
-			<context name="gdl_regexpr_4" attribute="Regular Expression" lineEndContext="#stay" >
-				<IncludeRules context="regexpr_rules" />
-				<Detect2Chars attribute="Regular Expression" char="\" char1="&gt;" context="#stay"/>
-				<DetectChar attribute="Regular Expression" context="gdl_regexpr_4_nested" char="&lt;" />
-				<RegExpr attribute="GDL input" context="#pop#pop" String="&gt;[uiomxn]*" endRegion="GdlInput" />
-			</context>
-			<context name="gdl_regexpr_4_nested" attribute="Regular Expression" lineEndContext="#stay" >
-				<IncludeRules context="regexpr_rules" />
-				<DetectChar attribute="Regular Expression" context="gdl_regexpr_4_nested" char="&lt;" />
-				<DetectChar attribute="Regular Expression" context="#pop" char="&gt;" />
-			</context>
-
-			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
-				delimiter character
-			 -->
-			<context name="gdl_regexpr_5" attribute="Regular Expression" lineEndContext="#stay" dynamic="true">
-				<IncludeRules context="regexpr_rules" />
-				<StringDetect attribute="Regular Expression" String="\%1" context="#stay" dynamic="true" />
-				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1[uiomxn]*" dynamic="true" endRegion="GdlInput" />
-			</context>
-
-			<!-- rules to be included in all regexpr contexts -->
-			<context name="regexpr_rules" attribute="Regular Expression" lineEndContext="#stay" >
-				<Detect2Chars attribute="Regular Expression" char="\" char1="\" context="#stay"/>
-				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
-				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
-			</context>
-
-			<!-- END of General delimited input support -->
-
-			<!-- handle data in script -->
-			<context name="DATA" attribute="Data" lineEndContext="#stay"/>
-		</contexts>
-
-		<itemDatas>
-			<itemData name="Normal Text" defStyleNum="dsNormal"/>
-
-			<itemData name="Keyword" defStyleNum="dsControlFlow"/>
-			<itemData name="Attribute Definition" defStyleNum="dsOthers"/>
-			<itemData name="Access Control" defStyleNum="dsAttribute" bold="1"/> <!-- #0000FF -->
-			<itemData name="Definition" defStyleNum="dsKeyword"/>
-			<itemData name="Pseudo variable" defStyleNum="dsDecVal"/>
-
-			<itemData name="Dec" defStyleNum="dsDecVal"/>
-			<itemData name="Float" defStyleNum="dsFloat"/>
-			<itemData name="Char" defStyleNum="dsChar"/>
-			<itemData name="Octal" defStyleNum="dsBaseN"/>
-			<itemData name="Hex" defStyleNum="dsBaseN"/>
-			<itemData name="Bin" defStyleNum="dsBaseN"/>
-
-			<itemData name="Symbol" defStyleNum="dsWarning" bold="0" underline="0"/> <!-- #D40000 -->
-			<itemData name="String" defStyleNum="dsString"/>
-			<itemData name="Raw String" defStyleNum="dsVerbatimString" /> <!-- #DD4A4A -->
-			<itemData name="Command" defStyleNum="dsInformation"/> <!-- #AA3000 -->
-			<itemData name="Message" defStyleNum="dsAttribute" bold="0"/> <!-- #4000A7 -->
-			<itemData name="Regular Expression" defStyleNum="dsSpecialString"/> <!-- #4A5704 -->
-			<itemData name="Substitution"	defStyleNum="dsSpecialChar"/>
-			<itemData name="Data" defStyleNum="dsNormal"/>
-			<!-- short for 'general delimited input' -->
-			<itemData name="GDL input" defStyleNum="dsOthers" />
-
-			<itemData name="Default globals" defStyleNum="dsVariable" bold="1"/> <!-- #C00000 -->
-			<itemData name="Global Variable" defStyleNum="dsVariable"/> <!-- #C00000 -->
-			<itemData name="Global Constant" defStyleNum="dsConstant" bold="1"/> <!-- #bb1188 -->
-			<itemData name="Constant" defStyleNum="dsDataType"/>
-			<itemData name="Constant Value" defStyleNum="dsConstant" bold="0"/> <!-- #bb1188 -->
-			<itemData name="Kernel methods" defStyleNum="dsFunction" bold="1"/> <!-- #CC0E86 -->
-			<itemData name="Module mixin methods" defStyleNum="dsFunction" bold="1"/> <!-- #CC0E86 -->
-			<itemData name="Member" defStyleNum="dsNormal"/>
-			<itemData name="Instance Variable" defStyleNum="dsOthers"/>
-			<itemData name="Class Variable" defStyleNum="dsOthers"/>
-
-			<itemData name="Comment" defStyleNum="dsComment"/>
-			<itemData name="Blockcomment" defStyleNum="dsComment"/>
-
-			<itemData name="Here Document" defStyleNum="dsDocumentation"/>
-
-			<itemData name="Delimiter" defStyleNum="dsKeyword"/> <!-- #FF9FEC -->
-			<itemData name="Operator" defStyleNum="dsKeyword"/> <!-- #FF9FEC -->
+<!DOCTYPE language[
+		<!ENTITY dec "[0-9](_?[0-9]++)*+">
+		<!ENTITY percent_lit "[QqxwWiIsr]?[^\s[:alnum:]]">
+
+		<!ENTITY ident "[_[:alpha:]]\w*+">
+		<!ENTITY global_constant "(?!^__END__$)(\b_+\d[_\d]*\b|\b(_[_\d]*)?[[:upper:]][_\d[:upper:]]*\b)">
+		<!ENTITY constant "\b[[:upper:]][_\d[:upper:]]*[[:lower:]]\w*">
+		<!ENTITY no_param "abort|alias|and|at_exit|attr_accessor|attr_reader|attr_writer|begin|binding|break|callcc|caller|case|catch|class|def|do|else|elsif|end|ensure|eval|exec|extend|fail|false|__FILE__|for|fork|format|getc|gets|global_variables|if|in|include|lambda|__LINE__|load|local_variables|loop|method_missing|module|next|nil|not|open|or|p|prepend|print|printf|private|private_class_method|proc|protected|public|public_class_method|putc|puts|raise|rand|readline|readlines|redo|refine|require|require_relative|rescue|retry|return|scan|select|self|set_trace_func|sleep|split|sprintf|srand|super|syscall|system|test|then|throw|trace_var|trap|true|undef|unless|until|untrace_var|using|warn|when|while|yield|autoload|chomp|chop|exit|gsub|sub">
+		<!-- ignore keyword, constant, class name and symbol (e.g. sym:).
+				Constants can be preceded by ? or !, but this doesn't work with <keyword>
+		-->
+		<!ENTITY is_constant "((_[_\d]*)?[[:upper:]]\w*+|_+\d[_\d]*+\b)([^?!]|$)">
+		<!ENTITY ident_not_kw "\b((?!(abort|alias|and|at_exit|attr_accessor|attr_reader|attr_writer|begin|binding|break|callcc|caller|case|catch|class|def|do|else|elsif|end|ensure|eval|exec|extend|fail|false|for|fork|format|getc|gets|global_variables|if|in|include|lambda|load|local_variables|loop|method_missing|module|next|nil|not|open|or|p|prepend|print|printf|private|private_class_method|proc|protected|public|public_class_method|putc|puts|raise|rand|readline|readlines|redo|refine|require|require_relative|rescue|retry|return|scan|select|self|set_trace_func|sleep|split|sprintf|srand|super|syscall|system|test|then|throw|trace_var|trap|true|undef|unless|until|untrace_var|using|warn|when|while|yield)([^?!\w]|$)|\bautoload([^!\w]|$)|(block_given\?|defined\?|iterator\?)|(chomp|chop|exit|gsub|sub)([^?\w]|$)|&is_constant;)|(?&lt;=[!?])(?=[[:lower:]]))&ident;(?!:)[?!]?">
+		<!ENTITY msg "\b(?!&is_constant;)&ident;[?!]?">
+
+		<!ENTITY special_escape "[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u\{[0-9a-fA-F]{0,6}\}|u[0-9a-fA-F]{4}|(c(\\M-)?|C-|M-(\\c|\\C-)?)(\\([^0-7xucCM]|[0-7]{1,3}|x[0-9a-fA-F]{1,2}|$)|[ -BD-LN-\[\]-bd-tv-~])">
+		<!ENTITY escape "\\([^0-7xucCM]|&special_escape;|$)">
+		<!ENTITY partial_escape "[ux][0-9a-fA-F]*|u(\{[0-9a-fA-F]{0,6})?|(c(\\M-)?|C-|M-(\\c|\\C-)?)(\\[xucCM]?)?|c(\\M?)?|C|M(-(\\c?|\\(C-?)?)?)?">
+
+		<!-- https://docs.ruby-lang.org/en/master/globals_rdoc.html -->
+		<!-- $= $, $; are deprecated -->
+		<!ENTITY global_var "\$([!@~&amp;`'+/\\&lt;>._*$?:&quot;=,;]|[0-9]+|-\w|[[:alpha:]]\w*)">
+
+		<!-- without ? : % / < = -->
+		<!ENTITY safe_op "(?:[-+*~^|&amp;]+|===?|&lt;(=>?|(?!&lt;))|[!>]=?|\.\.\.?)">
+		<!ENTITY op1 "&safe_op;++|([?:/&#37;]|&lt;&lt;)&safe_op;*+">
+		<!-- /= %= <<= -->
+		<!-- / spaces -->
+		<!-- % which is not gld -->
+		<!-- << which is not heredoc -->
+		<!-- nospace / -->
+		<!-- nospace % -->
+		<!-- nospace << -->
+		<!ENTITY op2 "&safe_op;++|[?:](?=\s|$)|([/&#37;]|&lt;&lt;)(?=[\s=]|$)|&#37;(?!&percent_lit;)|&lt;&lt;(?=\s|$|[^-~\w'&quot;`]|[-~][^\w'&quot;`])|(?&lt;!\s)([/&#37;]|&lt;&lt;)&safe_op;*+">
+
+		<!ENTITY sym_op "\[\]=?|[-+~]@?|![=~@]?|[/&#37;|^&amp;]|&lt;(=>?)?|>=?|=~|===?|\*\*?">
+		<!ENTITY symbol "&ident;[=?!]?:(?!:)|\[\]=?:">
+]>
+
+<!--
+  Ruby syntax highlighting definition for Kate.
+
+  Copyright (C) 2004  by Sebastian Vuorinen (sebastian dot vuorinen at helsinki dot fi)
+  Copyright (C) 2004  by Stefan Lang (langstefan@gmx.at)
+  Copyright (C) 2008  by Robin Pedersen (robinpeder@gmail.com)
+  Copyright (C) 2011  by Miquel Sabaté (mikisabate@gmail.com)
+  Copyright (C) 2024  by Jonathan Poelen (jonathan.poelen@gmail.com)
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Library General Public
+  License as published by the Free Software Foundation; either
+  version 2 of the License, or (at your option) any later version.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Library General Public License for more details.
+
+  You should have received a copy of the GNU Library General Public
+  License along with this library; if not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  Boston, MA  02110-1301, USA.
+-->
+
+<!--
+https://docs.ruby-lang.org/en/master/syntax_rdoc.html
+
+Ruby syntax has various ambiguous and context-dependent elements
+
+- regex (/patt/), percent literal (%_abc_) and heredoc (<<x) begin with operators.
+    puts %q+1+
+         ~ percent literal
+    puts a %q+1+
+           ~ operator
+  Note that regexes and oercent literal are indecisive because they depend on whether
+  the element on the left is a function or a variable. Therefore we assume a regex.
+    foo /a # (without space after /) operator or regex ?
+- 'do' creates a block (begin/endRegion), but is optional with 'for', 'until' and 'while'.
+    for x in a
+      puts x
+    end
+
+    for x in a do
+      puts x
+    end
+- 'if', 'unless', 'until' and 'while' when preceded by a value are modifiers
+  without closure (not a block region).
+    a += 1 while a < 10
+- '?' which is a function suffix, a literal char or a ternary operator
+    foo??a?1: 2
+    ~~~~ func
+        ~~ char
+          ~ ~ ternary operator
+
+For consistent highlighting and regions, the syntax is split into 3 parts:
+- function call (first element of an expression)
+- operator
+- value
+
+Each token fits into one of its categories and is followed by 1 or more of its
+categories. For example, 'and' is an operator followed by a function call,
+operator or value in order of priority.
+So '/' in 'and /' corresponds to a regex.
+
+Notes:
+- 'do' is a value that creates a block, except in the condition of 'for', 'until' and 'while'.
+- 'if', 'unless', 'until' and 'while' are modifiers only in the value category.
+-->
+
+<!--
+		NOTE This syntax should be synchronized with Haml, for which a ',' and ' |' at
+		the end of a line correspond to a <LineContinue>.
+-->
+
+<language name="Ruby" alternativeNames="RB;JRuby" section="Scripts"
+	  version="20" kateversion="5.79"
+	  extensions="*.rb;*.rjs;*.rxml;*.xml.erb;*.js.erb;*.rake;Rakefile;Gemfile;*.gemspec;Vagrantfile"
+	  mimetype="application/x-ruby"
+	  style="ruby" indenter="ruby"
+	  author="Stefan Lang (langstefan@gmx.at), Sebastian Vuorinen (sebastian.vuorinen@helsinki.fi), Robin Pedersen (robinpeder@gmail.com), Miquel Sabaté (mikisabate@gmail.com), Jonathan Poelen (jonathan.poelen@gmail.com)"
+	  license="LGPLv2+">
+
+	<highlighting>
+
+		<list name="keyword">
+			<item>class</item>
+			<item>def</item>
+			<item>end</item>
+			<item>ensure</item>
+			<item>when</item>
+			<include>keyword-begin-end-cond</include>
+			<include>keyword-block-cond</include>
+			<include>keyword-block-then-value</include>
+			<include>keyword-block</include>
+			<include>keyword-loop</include>
+			<include>keyword-then-stmt</include>
+			<include>keyword-then-value</include>
+		</list>
+
+		<list name="keyword-then-value">
+			<item>break</item>
+			<item>defined?</item>
+			<item>in</item>
+			<item>next</item>
+			<item>redo</item>
+			<item>retry</item>
+			<item>return</item>
+			<item>yield</item>
+		</list>
+
+		<list name="keyword-then-stmt">
+			<item>and</item>
+			<item>not</item>
+			<item>or</item>
+			<item>then</item>
+			<item>BEGIN</item>
+			<item>END</item>
+		</list>
+
+		<list name="keyword-block">
+			<item>begin</item>
+			<item>do</item>
+		</list>
+
+		<list name="keyword-block-then-value">
+			<item>case</item>
+			<item>module</item>
+		</list>
+
+		<!-- keyword with optional 'then' -->
+		<list name="keyword-block-cond">
+			<item>if</item>
+			<item>unless</item>
+		</list>
+
+		<list name="keyword-begin-end-cond">
+			<item>else</item>
+			<item>elsif</item>
+			<item>rescue</item>
+		</list>
+
+		<!-- keyword with optional 'do' -->
+		<list name="keyword-loop">
+			<item>for</item>
+			<item>until</item>
+			<item>while</item>
+		</list>
+
+		<list name="keyword-modifiers">
+			<item>if</item>
+			<item>unless</item>
+			<item>until</item>
+			<item>while</item>
+			<item>rescue</item>
+		</list>
+
+		<list name="access-control">
+			<item>private_class_method</item>
+			<item>private</item>
+			<item>protected</item>
+			<item>public_class_method</item>
+			<item>public</item>
+		</list>
+
+		<list name="attribute-definitions">
+			<item>attr_reader</item>
+			<item>attr_writer</item>
+			<item>attr_accessor</item>
+		</list>
+
+		<list name="definitions">
+			<item>alias</item>
+			<item>module</item>
+			<item>class</item>
+			<item>def</item>
+			<item>undef</item>
+		</list>
+
+		<list name="pseudo-variables">
+			<item>self</item>
+			<item>super</item>
+			<item>nil</item>
+			<item>false</item>
+			<item>true</item>
+			<item>caller</item>
+			<item>__FILE__</item>
+			<item>__LINE__</item>
+		</list>
+
+		<list name="default-globals">
+			<item>$stdout</item>
+			<item>$stderr</item>
+			<item>$stdin</item>
+		</list>
+
+		<!-- Kernel module methods.
+			NOTE: Methods ending in ? or !
+				are included below as regexes.
+		-->
+		<list name="kernel-methods">
+			<!-- backquote ` -->
+			<item>abort</item>
+			<item>at_exit</item>
+			<item>autoload</item>
+			<item>autoload?</item>
+			<item>binding</item>
+			<item>block_given?</item>
+			<item>callcc</item>
+			<item>caller</item>
+			<item>catch</item>
+			<item>chomp</item>
+			<item>chomp!</item>
+			<item>chop</item>
+			<item>chop!</item>
+			<item>eval</item>
+			<item>exec</item>
+			<item>exit</item>
+			<item>exit!</item>
+			<item>fail</item>
+			<item>fork</item>
+			<item>format</item>
+			<item>getc</item>
+			<item>gets</item>
+			<item>global_variables</item>
+			<item>gsub</item>
+			<item>gsub!</item>
+			<item>iterator?</item>
+			<item>lambda</item>
+			<item>load</item>
+			<item>local_variables</item>
+			<item>loop</item>
+			<item>method_missing</item>
+			<item>open</item>
+			<item>p</item>
+			<item>print</item>
+			<item>printf</item>
+			<item>proc</item>
+			<item>putc</item>
+			<item>puts</item>
+			<item>raise</item>
+			<item>rand</item>
+			<item>readline</item>
+			<item>readlines</item>
+			<item>require</item>
+			<item>require_relative</item>
+			<item>scan</item>
+			<item>select</item>
+			<item>set_trace_func</item>
+			<item>sleep</item>
+			<item>split</item>
+			<item>sprintf</item>
+			<item>srand</item>
+			<item>sub</item>
+			<item>sub!</item>
+			<item>syscall</item>
+			<item>system</item>
+			<item>test</item>
+			<item>throw</item>
+			<item>trace_var</item>
+			<item>trap</item>
+			<item>untrace_var</item>
+			<item>warn</item>
+		</list>
+
+		<list name="mixin-methods">
+			<item>extend</item>
+			<item>include</item>
+			<item>prepend</item>
+			<item>refine</item>
+			<item>using</item>
+		</list>
+
+		<contexts>
+			<context name="Normal" attribute="Normal Text" fallthroughContext="Ruby">
+				<!-- "shebang" line -->
+				<StringDetect attribute="Keyword" String="#!/" context="Shebang" column="0"/>
+			</context>
+
+			<context name="Shebang" attribute="Keyword" lineEndContext="#pop">
+			</context>
+
+			<context name="Ruby" attribute="Normal Text" fallthroughContext="Expr">
+				<DetectSpaces attribute="Normal Text"/>
+
+				<AnyChar attribute="Normal Text" String=";("/>
+				<DetectChar attribute="Normal Text" char=")" context="Op1ThenExpr"/>
+
+				<DetectChar attribute="Delimiter" char="]" context="Op1ThenExpr"/>
+
+				<DetectChar attribute="Operator" char="{" beginRegion="brace"/>
+				<DetectChar attribute="Operator" char="}" context="Op1ThenExpr" endRegion="brace"/>
+
+				<DetectChar attribute="Comment" char="#" context="General Comment"/>
+
+				<RegExpr attribute="Normal Text" String="&ident_not_kw;" context="MsgParamOrOp2"/>
+
+				<!-- Detects key symbol in a hash
+						 Unfortunately in the absence of a space before ':',
+						 the syntax is ambiguous with a function call containing a symbol.
+
+						 hash:    {sym:foo}
+						 function: foo:sym  <- 'foo:' is considered as a symbol
+				-->
+				<RegExpr attribute="Symbol" String="&symbol;" context="MsgParamOrOp2"/>
+
+				<DetectChar attribute="Delimiter" char="[" context="MsgParamOrOp2"/>
+
+				<keyword attribute="Keyword" String="keyword-block" beginRegion="def block"/>
+				<keyword attribute="Keyword" String="keyword-loop" context="Loop" beginRegion="def block"/>
+				<keyword attribute="Keyword" String="keyword-block-then-value" context="MsgParamOrOp2" beginRegion="def block"/>
+				<keyword attribute="Keyword" String="keyword-begin-end-cond" context="Cond" endRegion="def block" beginRegion="def block"/>
+				<keyword attribute="Keyword" String="keyword-then-stmt"/>
+				<keyword attribute="Keyword" String="keyword-then-value" context="MsgParamOrOp2"/>
+				<keyword attribute="Keyword" String="keyword-block-cond" context="Cond" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="end" context="MsgParamOrOp2" endRegion="def block"/>
+				<WordDetect attribute="Keyword" String="class" context="Op1ThenExpr" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="def" context="DefFn" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="when" context="Cond"/>
+				<WordDetect attribute="Keyword" String="ensure" endRegion="def block" beginRegion="def block"/>
+				<WordDetect attribute="Definition" String="alias" context="Alias"/>
+				<WordDetect attribute="Definition" String="undef" context="Alias"/>
+
+				<keyword attribute="Attribute Definition" String="attribute-definitions"  context="Op2ThenExpr"/>
+				<keyword attribute="Access Control" String="access-control" context="Op2ThenExpr"/>
+				<keyword attribute="Definition" String="definitions" context="Expr"/>
+				<keyword attribute="Pseudo variable" String="pseudo-variables" context="Op1ThenExpr"/>
+				<keyword attribute="Kernel methods" String="kernel-methods" context="Op2ThenExpr"/>
+				<keyword attribute="Module mixin methods" String="mixin-methods" context="Op2ThenExpr"/>
+
+				<!-- Generally a module or class name like "File", "MyModule_1", .. -->
+				<RegExpr attribute="Constant" String="&constant;" context="MsgParamOrOp2"/>
+				<RegExpr attribute="Global Constant" String="&global_constant;" context="MsgParamOrOp2"/>
+
+				<!-- __END__ token on own line. -->
+				<RegExpr attribute="Keyword" String="^__END__$" context="DATA" column="0"/>
+
+				<DetectIdentifier attribute="Normal Text" context="SuffixFunctionMsgParamOrOp2"/>
+
+				<!-- Check for =begin before assignment operator. -->
+				<WordDetect attribute="Blockcomment" String="=begin" context="Embedded documentation" beginRegion="comment block" column="0"/>
+
+				<!-- ruby ignores newline after \ -->
+				<LineContinue attribute="Normal Text"/>
+			</context>
+
+			<context name="SuffixFunctionMsgParamOrOp2" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!MsgParamOrOp2">
+				<AnyChar attribute="Normal Text" String="!?" context="#pop!MsgParamOrOp2"/>
+			</context>
+
+
+			<!-- until 'do' or end of line -->
+			<context name="Loop" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="LoopExpr">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="{" context="LoopFindBrace" beginRegion="brace"/>
+				<DetectChar attribute="Operator" char="}" context="#pop" lookAhead="1"/>
+				<WordDetect attribute="Keyword" String="do" context="#pop"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+			<context name="LoopFindBrace" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="LoopExpr">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="{" context="LoopFindBrace" beginRegion="brace"/>
+				<DetectChar attribute="Operator" char="}" context="#pop!Op1ThenLoopExpr" endRegion="brace"/>
+				<WordDetect attribute="Keyword" String="do" context="#pop" lookAhead="1"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+			<context name="LoopExpr" attribute="Normal Text" lineEndContext="#pop">
+				<WordDetect attribute="Keyword" String="do" context="#pop" lookAhead="1"/>
+				<IncludeRules context="Expr"/>
+			</context>
+
+			<!-- until 'then' or end of line -->
+			<context name="Cond" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="CondExpr">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="{" context="CondFindBrace" beginRegion="brace"/>
+				<DetectChar attribute="Operator" char="}" context="#pop" lookAhead="1"/>
+				<WordDetect attribute="Keyword" String="then" context="#pop"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+			<context name="CondFindBrace" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="CondExpr">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="{" context="CondFindBrace" beginRegion="brace"/>
+				<DetectChar attribute="Operator" char="}" context="#pop!Op1ThenCondExpr" endRegion="brace"/>
+				<WordDetect attribute="Keyword" String="then" context="#pop" lookAhead="1"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+			<context name="CondExpr" attribute="Normal Text" lineEndContext="#pop">
+				<WordDetect attribute="Keyword" String="then" context="#pop" lookAhead="1"/>
+				<IncludeRules context="Expr"/>
+			</context>
+
+			<!-- after function call
+				Assume that
+						foo /a is a regex but not foo /=a
+						foo %+ is a percent literal
+						foo <<a is a heredoc
+				(This is not true when foo is a variable...)
+			-->
+			<context name="MsgParamOrOp2" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!Expr">
+				<DetectSpaces attribute="Normal Text"/>
+				<RegExpr attribute="Operator" String="&op2;" context="#pop!Expr"/>
+				<DetectChar attribute="Member" char="." context="MemberAccessCall"/>
+				<StringDetect attribute="Operator" String="::" context="MemberAccessCall"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+
+			<context name="MsgFnName" attribute="Normal Text" lineEndContext="#pop#pop#pop" fallthroughContext="#pop!FnParent">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Member" char="." context="MemberAccess"/>
+				<StringDetect attribute="Operator" String="::" context="MemberAccess"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+
+			<context name="Expr" attribute="Normal Text" lineEndContext="#pop">
+				<DetectSpaces attribute="Normal Text"/>
+
+				<StringDetect attribute="Operator" String=".." context="Dot2Op"/>
+				<DetectChar attribute="Member" char="." context="MemberAccess"/>
+
+				<DetectChar attribute="Operator" char="=" context="#pop"/>
+
+				<!-- pop to parent for interpolation -->
+				<AnyChar String="{}" context="#pop" lookAhead="1"/>
+
+				<AnyChar attribute="Normal Text" String=";(" context="#pop"/>
+				<DetectChar attribute="Normal Text" char=","/>
+				<DetectChar attribute="Normal Text" char=")" context="Op1"/>
+
+				<DetectChar attribute="Comment" char="#" context="#pop!General Comment"/>
+
+				<DetectChar char="@" context="AtVar" lookAhead="1"/>
+				<DetectChar char="$" context="Var" lookAhead="1"/>
+
+				<DetectChar attribute="Delimiter" char="]" context="Op1"/>
+
+				<HlCChar attribute="Char" context="Op1"/>
+				<DetectChar attribute="String" char='"' context="DQuote"/>
+				<DetectChar attribute="Raw String" char="'" context="SQuote"/>
+				<DetectChar attribute="Command" char="`" context="Command String"/>
+
+				<DetectChar attribute="Regular Expression" char="/" context="RegEx"/>
+				<!-- Check for "ASCII code operator". e.g.: ?a -->
+				<DetectChar char="?" context="MaybeCharLiteral" lookAhead="1"/>
+
+				<AnyChar context="Number" String="0123456789" lookAhead="1"/>
+
+				<RegExpr attribute="Normal Text" String="&ident_not_kw;" context="Op2"/>
+
+				<RegExpr attribute="Symbol" String="&symbol;" context="#pop!MsgParamOrOp2"/>
+
+				<DetectChar attribute="Delimiter" char="[" context="#pop!MsgParamOrOp2"/>
+
+				<StringDetect attribute="Operator" String="::" context="MemberAccess"/>
+
+				<LineContinue attribute="Normal Text"/>
+
+				<keyword attribute="Attribute Definition" String="attribute-definitions" context="Op2"/>
+				<keyword attribute="Access Control" String="access-control" context="Op2"/>
+				<keyword attribute="Pseudo variable" String="pseudo-variables" context="Op1"/>
+				<keyword attribute="Kernel methods" String="kernel-methods" context="Op2"/>
+				<keyword attribute="Module mixin methods" String="mixin-methods" context="Op2"/>
+
+				<keyword attribute="Keyword" String="keyword-modifiers"/>
+
+				<keyword attribute="Keyword" String="keyword-block" beginRegion="def block" context="#pop"/>
+				<keyword attribute="Keyword" String="keyword-loop" context="#pop!Loop" beginRegion="def block"/>
+				<keyword attribute="Keyword" String="keyword-block-then-value" context="#pop!MsgParamOrOp2" beginRegion="def block"/>
+				<keyword attribute="Keyword" String="keyword-begin-end-cond" context="#pop!Cond" endRegion="def block" beginRegion="def block"/>
+				<keyword attribute="Keyword" String="keyword-then-stmt" context="#pop"/>
+				<keyword attribute="Keyword" String="keyword-then-value" context="#pop!MsgParamOrOp2"/>
+				<WordDetect attribute="Keyword" String="end" context="#pop!MsgParamOrOp2" endRegion="def block"/>
+				<WordDetect attribute="Keyword" String="class" context="Op1" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="def" context="#pop!DefFn" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="when" context="#pop!Cond"/>
+				<WordDetect attribute="Keyword" String="ensure" context="#pop" endRegion="def block" beginRegion="def block"/>
+				<WordDetect attribute="Definition" String="alias" context="Alias"/>
+				<WordDetect attribute="Definition" String="undef" context="Alias"/>
+
+				<keyword attribute="Definition" String="definitions"/>
+
+				<!-- Generally a module or class name like "File", "MyModule_1", .. -->
+				<RegExpr attribute="Constant" String="&constant;" context="Op1"/>
+				<RegExpr attribute="Global Constant" String="&global_constant;" context="Op1"/>
+
+				<RegExpr attribute="Symbol" String=":((@@?|\$)&ident;|&ident;([?]|!(?!=)|=(?![=>~]))?|&sym_op;|(?=['&quot;])|&global_var;)" context="Op1"/>
+
+				<!-- recognize the beginning of a general delimited input format -->
+				<!-- this moves to the next context to separate out the exact nature of the GDL input -->
+				<RegExpr attribute="GDL input" context="find_gdl_input" String="%(?=&percent_lit;)" beginRegion="GdlInput"/>
+
+				<!-- recognize the beginning of a HEREDOC -->
+				<RegExpr attribute="Operator" context="Heredoc" String="&lt;&lt;(?=[-~]?(\w+|'\w+'|&quot;\w+&quot;|`\w+`))" beginRegion="HereDocument"/>
+
+				<!-- should not happen in valid syntax -->
+				<RegExpr attribute="Operator" String="([/%?:]|&lt;&lt;?)&safe_op;*|&safe_op;+"/>
+				<DetectIdentifier attribute="Normal Text" context="SuffixFunction"/>
+			</context>
+
+			<!-- alias / +
+			           ~ never regex
+			     same for undef
+			-->
+			<context name="Alias" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
+				<DetectSpaces attribute="Normal Text"/>
+				<AnyChar attribute="Operator" String="-+*~^|&amp;=&lt;>!%/"/>
+				<DetectChar char="$" context="Var" lookAhead="1"/>
+				<DetectChar attribute="String" char='"' context="AliasDQuote"/>
+				<DetectChar attribute="Raw String" char="'" context="AliasSQuote"/>
+				<DetectChar attribute="Normal Text" char=","/>
+				<LineContinue attribute="Normal Text"/>
+				<RegExpr attribute="Symbol" String=":(&ident;[=?!]?|&sym_op;)"/>
+				<RegExpr attribute="Normal Text" String="\b(?!(&no_param;)([^?!\w]|$))&ident;"/>
+			</context>
+			<context name="AliasDQuote" attribute="String">
+				<DetectChar char='"' attribute="String" context="AliasCheckSym"/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+			<context name="AliasSQuote" attribute="Raw String">
+				<Detect2Chars attribute="String" char="\" char1="\"/>
+				<Detect2Chars attribute="String" char="\" char1="'"/>
+				<DetectChar char="'" attribute="Raw String" context="AliasCheckSym"/>
+			</context>
+			<context name="AliasCheckSym" attribute="Raw String" lineEndContext="#pop#pop#pop" fallthroughContext="#pop#pop">
+				<DetectChar char=":" attribute="Symbol" context="#pop#pop"/>
+			</context>
+
+			<context name="Dot2Op" attribute="Operator" lineEndContext="#pop#pop" fallthroughContext="#pop">
+				<!-- triple dot -->
+				<DetectChar attribute="Operator" char="." context="#pop"/>
+			</context>
+
+			<context name="SuffixFunction" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!Op2">
+				<AnyChar attribute="Normal Text" String="!?" context="#pop!Op2"/>
+			</context>
+
+			<!-- A slash is always a division operator, even if preceeded by whitespace -->
+			<context name="Op1" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="=" context="#pop#pop"/>
+				<RegExpr attribute="Operator" String="&op1;" context="#pop"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+
+			<context name="Op1ThenExpr" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!Expr">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="=" context="#pop"/>
+				<RegExpr attribute="Operator" String="&op1;" context="#pop!Expr"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+
+			<context name="Op1ThenLoopExpr" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!LoopExpr">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="=" context="#pop"/>
+				<RegExpr attribute="Operator" String="&op1;" context="#pop!LoopExpr"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+
+			<context name="Op1ThenCondExpr" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!CondExpr">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="=" context="#pop"/>
+				<RegExpr attribute="Operator" String="&op1;" context="#pop!CondExpr"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+
+			<!-- A slash is division operator if it's the first character, or if preceeded and followed by whitespace -->
+			<context name="Op2" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="=" context="#pop#pop"/>
+				<RegExpr attribute="Operator" String="&op2;" context="#pop"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+
+			<context name="Op2ThenExpr" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!Expr">
+				<DetectSpaces attribute="Normal Text"/>
+				<DetectChar attribute="Operator" char="=" context="#pop"/>
+				<RegExpr attribute="Operator" String="&op2;" context="#pop!Expr"/>
+				<LineContinue attribute="Normal Text"/>
+			</context>
+
+			<context name="Var" attribute="Normal Text" lineEndContext="#pop#pop">
+				<!-- (global) vars starting with $ -->
+				<RegExpr attribute="Global Variable" String="\$((?!(stdin|stdout|stderr|_|LOAD_PATH|LOADED_FEATURES|FILENAME|DEBUG|VERBOSE)\b)[[:alpha:]]\w*|[0-9]+|-(?![ailpFIvWwdx])\w)" context="#pop!Op1"/>
+				<!-- special-character globals and other predefined variables -->
+				<RegExpr attribute="Default globals" String="&global_var;" context="#pop!Op1"/>
+				<DetectChar attribute="Error" char="$" context="#pop!Op1"/>
+			</context>
+
+			<context name="AtVar" attribute="Normal Text" lineEndContext="#pop#pop">
+				<RegExpr attribute="Instance Variable" String="@&ident;" context="#pop!Op1"/>
+				<RegExpr attribute="Class Variable" String="@@&ident;" context="#pop!Op1"/>
+				<DetectChar attribute="Error" char="@"/>
+			</context>
+
+			<!-- def foo() block-statement
+			         ~~~ any ident (including keyword)
+
+			     def Abc::foo() block-statement
+			         ~~~  ~~~ ident (no keyword)
+			-->
+			<context name="DefFn" attribute="Normal Text" fallthroughContext="FnName">
+				<DetectSpaces attribute="Normal Text"/>
+				<LineContinue attribute="Normal Text"/>
+				<DetectChar attribute="Comment" char="#" context="General Comment"/>
+			</context>
+			<context name="FnName" attribute="Normal Text" fallthroughContext="FnParent">
+				<RegExpr attribute="Normal Text" String="&ident_not_kw;" context="MsgFnName"/>
+
+				<keyword attribute="Attribute Definition" String="attribute-definitions" context="FnParent" weakDeliminator=":"/>
+				<keyword attribute="Access Control" String="access-control" context="FnParent" weakDeliminator=":"/>
+				<keyword attribute="Definition" String="definitions" context="FnParent" weakDeliminator=":"/>
+				<keyword attribute="Pseudo variable" String="pseudo-variables" context="FnParent" weakDeliminator=":"/>
+				<keyword attribute="Kernel methods" String="kernel-methods" context="FnParent" weakDeliminator=":"/>
+				<keyword attribute="Module mixin methods" String="mixin-methods" context="FnParent" weakDeliminator=":"/>
+				<keyword attribute="Keyword" String="keyword" context="FnParent" weakDeliminator=":"/>
+
+				<RegExpr attribute="Operator" String="[-+~]@?|![~@]?|[/%^]|\*\*?|\|\||&amp;&amp;|&lt;(=>?)?|>=?|===?|\*\*?" context="FnParent"/>
+				<RegExpr attribute="Constant" String="&constant;" context="MsgFnName"/>
+				<RegExpr attribute="Global Constant" String="&global_constant;" context="MsgFnName"/>
+
+				<StringDetect attribute="Symbol" String="[]=" context="FnParent"/>
+				<StringDetect attribute="Symbol" String="[]" context="FnParent"/>
+				<DetectChar attribute="Comment" char="#" context="General Comment"/>
+			</context>
+			<context name="FnParent" attribute="Normal Text" fallthroughContext="#pop#pop#pop">
+				<DetectChar attribute="Normal Text" char="(" context="DefFnParams"/>
+				<DetectSpaces attribute="Normal Text"/>
+				<LineContinue attribute="Normal Text"/>
+				<DetectChar attribute="Comment" char="#" context="General Comment"/>
+			</context>
+			<context name="DefFnParams" attribute="Normal Text" fallthroughContext="#pop#pop#pop#pop">
+				<DetectChar attribute="Normal Text" char=")" context="#pop#pop#pop#pop"/>
+				<DetectChar attribute="Comment" char="#" context="General Comment"/>
+				<RegExpr attribute="Normal Text" String="([\s,]+|\b(?!(&no_param;)\b|[[:upper:]])&ident;(?=$|[^?!]))++"/>
+				<RegExpr attribute="Constant" String="&constant;"/>
+				<RegExpr attribute="Global Constant" String="&global_constant;"/>
+				<keyword attribute="Attribute Definition" String="attribute-definitions"/>
+				<keyword attribute="Access Control" String="access-control"/>
+				<keyword attribute="Kernel methods" String="kernel-methods"/>
+				<keyword attribute="Module mixin methods" String="mixin-methods"/>
+			</context>
+
+
+			<!-- Numeric values. Note that we have to allow underscores between two digits. -->
+			<context name="Number" attribute="Normal Text" lineEndContext="#pop#pop" fallthroughContext="NumberError">
+				<RegExpr attribute="Dec" String="\b(0[dD]&dec;|(0(\b|(?=[ri]))|[1-9](_?[0-9]++)*+)(?![eE]|[.][0-9]))" context="NumberSuffix"/>
+				<RegExpr attribute="Float" String="\b([1-9](_?[0-9]++)*+|0)(\.&dec;([eE][-+]?&dec;)?|[eE][-+]?&dec;)" context="NumberSuffix"/>
+				<RegExpr attribute="Hex" String="\b0[xX][0-9a-fA-F](_?[0-9a-fA-F]++)*+" context="NumberSuffix"/>
+				<RegExpr attribute="Bin" String="\b0[bB][01](_?[01]++)*+" context="NumberSuffix"/>
+				<RegExpr attribute="Octal" String="\b0[oO]?[0-7](_?[0-7]++)*+" context="NumberSuffix"/>
+				<DetectChar char="0" attribute="Dec" context="NumberError"/>
+			</context>
+
+			<context name="NumberSuffix" attribute="Number Suffix" lineEndContext="#pop#pop" fallthroughContext="#pop!NumberError">
+				<StringDetect attribute="Number Suffix" String="ri" context="#pop!NumberError"/>
+				<AnyChar attribute="Number Suffix" String="ri" context="#pop!NumberError"/>
+			</context>
+
+			<context name="NumberError" attribute="Error" lineEndContext="#pop#pop#pop" fallthroughContext="#pop#pop!Op1">
+				<DetectIdentifier/>
+				<AnyChar String="0123456789"/>
+			</context>
+
+			<context name="Find closing brace" attribute="Normal Text" fallthroughContext="Expr">
+				<DetectChar attribute="Operator" char="}" context="#pop!Op1ThenExpr" endRegion="brace"/>
+				<IncludeRules context="Ruby"/>
+			</context>
+
+			<!-- "..." -->
+			<context name="DQuote" attribute="String">
+				<DetectChar char='"' attribute="String" context="CheckSym"/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+			<!-- "...": -->
+			<context name="CheckSym" attribute="Raw String" lineEndContext="#pop#pop!Op1" fallthroughContext="#pop#pop!Op1">
+				<DetectChar char=":" attribute="Symbol" context="#pop#pop#pop"/>
+			</context>
+
+			<!-- \ in "..." -->
+			<context name="DQuoteSpecial" attribute="String">
+				<DetectChar char="\" context="DQuoteEscape" lookAhead="1"/>
+				<DetectChar char="#" context="DQuoteSubstitution" lookAhead="1"/>
+			</context>
+			<context name="DQuoteEscape" attribute="String">
+				<RegExpr attribute="String Char" String="&escape;" context="#pop"/>
+				<RegExpr attribute="Error" String="\\(&partial_escape;|)" context="#pop"/>
+			</context>
+			<context name="DQuoteSubstitution" attribute="String">
+				<StringDetect attribute="Substitution" String="#{" context="#pop!Subst"/>
+				<RegExpr attribute="Substitution" String="#@@?\w+|#&global_var;" context="#pop"/>
+				<DetectChar char="#" context="#pop"/>
+			</context>
+
+			<!-- '...' -->
+			<context name="SQuote" attribute="Raw String">
+				<Detect2Chars attribute="String" char="\" char1="\"/>
+				<Detect2Chars attribute="String" char="\" char1="'"/>
+				<DetectChar char="'" attribute="Raw String" context="CheckSym"/>
+			</context>
+
+			<!-- `...` -->
+			<context name="Command String" attribute="Command">
+				<DetectChar char="`" attribute="Command" context="#pop!Op1"/>
+				<Detect2Chars attribute="String" char="\" char1="\"/>
+				<Detect2Chars attribute="String" char="\" char1="`"/>
+				<DetectChar char="#" context="DQuoteSubstitution" lookAhead="1"/>
+			</context>
+
+			<!-- ?x -->
+			<context name="MaybeCharLiteral" attribute="String" lineEndContext="#pop" fallthroughContext="#pop!Op1">
+				<RegExpr attribute="Operator" String="\?(?=\s|$)" context="#pop"/>
+				<DetectChar attribute="Char Literal" char="?" context="CharLiteral"/>
+			</context>
+			<context name="CharLiteral" attribute="String">
+				<RegExpr attribute="Char" String="[^\\\s]" context="#pop#pop!Op1"/>
+				<RegExpr attribute="String Char" String="&escape;" context="#pop#pop!Op1"/>
+				<RegExpr attribute="Error" String="\\(&partial_escape;|)" context="#pop#pop!Op1"/>
+			</context>
+
+			<context name="Embedded documentation" attribute="Blockcomment">
+				<DetectSpaces/>
+				<IncludeRules context="##Comments"/>
+				<DetectIdentifier/>
+				<WordDetect attribute="Comment" String="=end" context="Embedded documentation End" endRegion="comment block" column="0"/>
+			</context>
+			<context name="Embedded documentation End" attribute="Comment" lineEndContext="#pop#pop">
+			</context>
+
+			<context name="RegEx" attribute="Regular Expression">
+				<DetectChar attribute="Regular Expression" context="RegExMode" char="/"/>
+				<IncludeRules context="RegExSpecial"/>
+			</context>
+			<!-- as DQuoteSpecial, but with \. and \p{...} -->
+			<context name="RegExSpecial" attribute="String Char">
+				<DetectChar char="#" context="DQuoteSubstitution" lookAhead="1"/>
+				<DetectChar char="\" context="RegExEscape" lookAhead="1"/>
+			</context>
+			<context name="RegExEscape" attribute="String">
+				<RegExpr attribute="String Char" String="\\([^0-7xucCMp]|&special_escape;|p\{[-[:alpha:]]*\}|$)" context="#pop"/>
+				<RegExpr attribute="Error" String="\\(&partial_escape;|p\{?|)" context="#pop"/>
+			</context>
+
+			<context name="RegExMode" attribute="String" lineEndContext="#pop#pop" fallthroughContext="#pop#pop!Op1">
+				<AnyChar attribute="Regular Expression" String="imxonues"/>
+			</context>
+
+			<!-- Substitutions can be nested -->
+			<context name="Subst" attribute="Normal Text" fallthroughContext="Expr">
+				<DetectChar attribute="Operator" char="{" context="Find closing brace" beginRegion="brace"/>
+				<DetectChar attribute="Substitution" char="}" context="#pop"/>
+				<!-- Highlight substitution as code. -->
+				<IncludeRules context="Ruby"/>
+			</context>
+
+			<!-- This handles access of nested module classes and class methods -->
+			<context name="MemberAccess" attribute="Member" fallthroughContext="#pop!Op1">
+				<DetectSpaces attribute="Normal Text"/>
+				<!-- marks a message (being sent, not defined) -->
+				<RegExpr attribute="Message" String="&msg;" context="#pop!Op1"/>
+				<RegExpr attribute="Constant" String="&constant;" context="#pop!Op1"/>
+				<RegExpr attribute="Constant Value" String="&global_constant;" context="#pop!Op1"/>
+				<RegExpr attribute="Operator" String="&sym_op;" context="#pop"/>
+			</context>
+
+			<context name="MemberAccessCall" attribute="Member" fallthroughContext="#pop">
+				<DetectSpaces attribute="Normal Text"/>
+				<!-- marks a message (being sent, not defined) -->
+				<RegExpr attribute="Message" String="&msg;" context="#pop"/>
+				<RegExpr attribute="Constant" String="&constant;" context="#pop"/>
+				<RegExpr attribute="Constant Value" String="&global_constant;" context="#pop"/>
+				<RegExpr attribute="Operator" String="&sym_op;" context="#pop"/>
+			</context>
+
+			<context name="General Comment" attribute="Comment" lineEndContext="#pop">
+				<DetectSpaces/>
+				<IncludeRules context="##Comments"/>
+				<DetectIdentifier/>
+			</context>
+
+			<!-- HEREDOC support
+				The contexts below support both normal and indented heredocs
+			 -->
+			<!-- here we markup the heredoc markers -->
+			<context name="Heredoc" attribute="Normal Text">
+				<AnyChar attribute="Operator" String="-~" context="#pop!IndentedHeredoc"/>
+				<RegExpr attribute="Keyword" context="apostrophed_normal_heredoc" String="'(\w+)'"/>
+				<RegExpr attribute="Keyword" context="normal_heredoc" String="(?|(\w+)|&quot;(\w+)&quot;|`(\w+)`)"/>
+			</context>
+			<context name="IndentedHeredoc" attribute="Normal Text">
+				<RegExpr attribute="Keyword" context="apostrophed_indented_heredoc" String="'(\w+)'"/>
+				<RegExpr attribute="Keyword" context="indented_heredoc" String="(?|(\w+)|&quot;(\w+)&quot;|`(\w+)`)"/>
+			</context>
+			<!-- these are the real heredoc contexts -->
+			<context name="indented_heredoc" attribute="Here Document">
+				<RegExpr attribute="Keyword" context="#pop#pop" String="%1$" dynamic="true" endRegion="HereDocument" firstNonSpace="true"/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+			<context name="apostrophed_indented_heredoc" attribute="Here Document">
+				<RegExpr attribute="Keyword" context="#pop#pop" String="%1$" dynamic="true" endRegion="HereDocument" firstNonSpace="true"/>
+			</context>
+
+			<context name="normal_heredoc" attribute="Here Document">
+				<RegExpr attribute="Keyword" context="#pop#pop" String="^%1$" dynamic="true" endRegion="HereDocument" column="0"/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+			<context name="apostrophed_normal_heredoc" attribute="Here Document">
+				<RegExpr attribute="Keyword" context="#pop#pop" String="^%1$" dynamic="true" endRegion="HereDocument" column="0"/>
+			</context>
+
+			<!-- General delimited input support
+				The contexts below handle the various gdl formats
+			 -->
+			<context name="find_gdl_input" attribute="Normal Text" lineEndContext="#pop">
+				<!-- handle double-quoted strings -->
+				<DetectChar attribute="GDL input" context="%Q(" char="("/>
+				<DetectChar attribute="GDL input" context="%Q{" char="{"/>
+				<DetectChar attribute="GDL input" context="%Q[" char="["/>
+				<DetectChar attribute="GDL input" context="%Q&lt;" char="&lt;"/>
+				<StringDetect attribute="GDL input" context="%Q(" String="Q("/>
+				<StringDetect attribute="GDL input" context="%Q{" String="Q{"/>
+				<StringDetect attribute="GDL input" context="%Q[" String="Q["/>
+				<StringDetect attribute="GDL input" context="%Q&lt;" String="Q&lt;"/>
+
+				<!-- handle token arrays -->
+				<StringDetect attribute="GDL input" context="%Q(" String="W("/>
+				<StringDetect attribute="GDL input" context="%Q{" String="W{"/>
+				<StringDetect attribute="GDL input" context="%Q[" String="W["/>
+				<StringDetect attribute="GDL input" context="%Q&lt;" String="W&lt;"/>
+
+				<!-- handle token arrays -->
+				<StringDetect attribute="GDL input" context="%Q(" String="I("/>
+				<StringDetect attribute="GDL input" context="%Q{" String="I{"/>
+				<StringDetect attribute="GDL input" context="%Q[" String="I["/>
+				<StringDetect attribute="GDL input" context="%Q&lt;" String="I&lt;"/>
+
+				<!-- then we handle the 'any char' format -->
+				<RegExpr attribute="GDL input" context="%Q_" String="[QWI]?([^[:alnum:]])"/>
+
+				<!-- handle token arrays -->
+				<StringDetect attribute="GDL input" context="%w(" String="w("/>
+				<StringDetect attribute="GDL input" context="%w{" String="w{"/>
+				<StringDetect attribute="GDL input" context="%w[" String="w["/>
+				<StringDetect attribute="GDL input" context="%w&lt;" String="w&lt;"/>
+
+				<!-- handle token arrays -->
+				<StringDetect attribute="GDL input" context="%w(" String="i("/>
+				<StringDetect attribute="GDL input" context="%w{" String="i{"/>
+				<StringDetect attribute="GDL input" context="%w[" String="i["/>
+				<StringDetect attribute="GDL input" context="%w&lt;" String="i&lt;"/>
+
+				<!-- then we handle the 'any char' format -->
+				<RegExpr attribute="GDL input" context="%w_" String="[wi]([^[:alnum:]])"/>
+
+				<!-- handle apostrophed strings -->
+				<StringDetect attribute="GDL input" context="%q(" String="q("/>
+				<StringDetect attribute="GDL input" context="%q{" String="q{"/>
+				<StringDetect attribute="GDL input" context="%q[" String="q["/>
+				<StringDetect attribute="GDL input" context="%q&lt;" String="q&lt;"/>
+				<!-- then we handle the 'any char' format -->
+				<RegExpr attribute="GDL input" context="%q_" String="q([^[:alnum:]])"/>
+
+				<!-- handle token arrays -->
+				<StringDetect attribute="GDL input" context="%s(" String="s("/>
+				<StringDetect attribute="GDL input" context="%s{" String="s{"/>
+				<StringDetect attribute="GDL input" context="%s[" String="s["/>
+				<StringDetect attribute="GDL input" context="%s&lt;" String="s&lt;"/>
+				<!-- then ie handle the 'any char' format -->
+				<RegExpr attribute="GDL input" context="%s_" String="s([^[:alnum:]])"/>
+
+				<!-- handle regular expressions -->
+				<StringDetect attribute="GDL input" context="%r(" String="r("/>
+				<StringDetect attribute="GDL input" context="%r{" String="r{"/>
+				<StringDetect attribute="GDL input" context="%r[" String="r["/>
+				<StringDetect attribute="GDL input" context="%r&lt;" String="r&lt;"/>
+				<!-- then we handle the 'any char' format -->
+				<RegExpr attribute="GDL input" context="%r_" String="r([^[:alnum:]])"/>
+
+				<!-- handle shell commands -->
+				<StringDetect attribute="GDL input" context="%x(" String="x("/>
+				<StringDetect attribute="GDL input" context="%x{" String="x{"/>
+				<StringDetect attribute="GDL input" context="%x[" String="x["/>
+				<StringDetect attribute="GDL input" context="%x&lt;" String="x&lt;"/>
+				<!-- then we handle the 'any char' format -->
+				<RegExpr attribute="GDL input" context="%x_" String="x([^[:alnum:]])"/>
+			</context>
+
+
+			<!-- double-quoted string specific contexts follow -->
+
+			<context name="%Q(" attribute="String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=")" endRegion="GdlInput" />
+				<IncludeRules context="%Q(_rule"/>
+			</context>
+			<context name="%Q(_nested" attribute="String">
+				<DetectChar attribute="String" context="#pop" char=")"/>
+				<IncludeRules context="%Q(_rule"/>
+			</context>
+			<context name="%Q(_rule" attribute="String">
+				<DetectChar attribute="String" context="%Q(_nested" char="("/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+			<!-- note that here substitution should win over nesting -->
+			<context name="%Q{" attribute="String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="}" endRegion="GdlInput" />
+				<IncludeRules context="%Q{_rule"/>
+			</context>
+			<context name="%Q{_nested" attribute="String">
+				<DetectChar attribute="String" context="#pop" char="}"/>
+				<IncludeRules context="%Q{_rule"/>
+			</context>
+			<context name="%Q{_rule" attribute="String">
+				<DetectChar attribute="String" context="%Q{_nested" char="{"/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+			<context name="%Q[" attribute="String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="]" endRegion="GdlInput" />
+				<IncludeRules context="%Q[_rule"/>
+			</context>
+			<context name="%Q[_nested" attribute="String">
+				<DetectChar attribute="String" context="#pop" char="]"/>
+				<IncludeRules context="%Q[_rule"/>
+			</context>
+			<context name="%Q[_rule" attribute="String">
+				<DetectChar attribute="String" context="%Q[_nested" char="["/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+			<context name="%Q&lt;" attribute="String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=">" endRegion="GdlInput" />
+				<IncludeRules context="%Q&lt;_rule"/>
+			</context>
+			<context name="%Q&lt;_nested" attribute="String">
+				<DetectChar attribute="String" context="#pop" char=">"/>
+				<IncludeRules context="%Q&lt;_rule"/>
+			</context>
+			<context name="%Q&lt;_rule" attribute="String">
+				<DetectChar attribute="String" context="%Q&lt;_nested" char="&lt;"/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
+				delimiter character
+			 -->
+			<context name="%Q_" attribute="String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="1" dynamic="true" endRegion="GdlInput" />
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+
+			<!-- token array specific contexts -->
+
+			<context name="%w(" attribute="Raw String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=")" endRegion="GdlInput"/>
+				<IncludeRules context="%w(_rule"/>
+			</context>
+			<context name="%w(_nested" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="#pop" char=")"/>
+				<IncludeRules context="%w(_rule"/>
+			</context>
+			<context name="%w(_rule" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="%w(_nested" char="("/>
+				<Detect2Chars attribute="String Char" char="\" char1=" "/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1=")"/>
+				<Detect2Chars attribute="String Char" char="\" char1="("/>
+			</context>
+
+			<context name="%w{" attribute="Raw String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="}" endRegion="GdlInput"/>
+				<IncludeRules context="%w{_rule"/>
+			</context>
+			<context name="%w{_nested" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="#pop" char="}"/>
+				<IncludeRules context="%w{_rule"/>
+			</context>
+			<context name="%w{_rule" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="%w{_nested" char="{"/>
+				<Detect2Chars attribute="String Char" char="\" char1=" "/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1="}"/>
+				<Detect2Chars attribute="String Char" char="\" char1="{"/>
+			</context>
+
+			<context name="%w[" attribute="Raw String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="]" endRegion="GdlInput"/>
+				<IncludeRules context="%w[_rule"/>
+			</context>
+			<context name="%w[_nested" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="#pop" char="]"/>
+				<IncludeRules context="%w[_rule"/>
+			</context>
+			<context name="%w[_rule" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="%w[_nested" char="["/>
+				<Detect2Chars attribute="String Char" char="\" char1=" "/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1="]"/>
+				<Detect2Chars attribute="String Char" char="\" char1="["/>
+			</context>
+
+			<context name="%w&lt;" attribute="Raw String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=">" endRegion="GdlInput"/>
+				<IncludeRules context="%w&lt;_rule"/>
+			</context>
+			<context name="%w&lt;_nested" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="#pop" char=">"/>
+				<IncludeRules context="%w&lt;_rule"/>
+			</context>
+			<context name="%w&lt;_rule" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="%w&lt;_nested" char="&lt;"/>
+				<Detect2Chars attribute="String Char" char="\" char1=" "/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1=">"/>
+				<Detect2Chars attribute="String Char" char="\" char1="&lt;"/>
+			</context>
+
+			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
+				delimiter character
+			 -->
+			<context name="%w_" attribute="Raw String">
+				<Detect2Chars attribute="String Char" char="\" char1=" "/>
+				<IncludeRules context="%q_"/>
+			</context>
+
+
+			<!-- apostrophed string specific contexts -->
+
+			<context name="%q(" attribute="Raw String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=")" endRegion="GdlInput"/>
+				<IncludeRules context="%q(_rule"/>
+			</context>
+			<context name="%q(_nested" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="#pop" char=")"/>
+				<IncludeRules context="%q(_rule"/>
+			</context>
+			<context name="%q(_rule" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="%q(_nested" char="("/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1=")"/>
+				<Detect2Chars attribute="String Char" char="\" char1="("/>
+			</context>
+
+			<context name="%q{" attribute="Raw String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="}" endRegion="GdlInput"/>
+				<IncludeRules context="%q{_rule"/>
+			</context>
+			<context name="%q{_nested" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="#pop" char="}"/>
+				<IncludeRules context="%q{_rule"/>
+			</context>
+			<context name="%q{_rule" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="%q{_nested" char="{"/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1="}"/>
+				<Detect2Chars attribute="String Char" char="\" char1="{"/>
+			</context>
+
+			<context name="%q[" attribute="Raw String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="]" endRegion="GdlInput"/>
+				<IncludeRules context="%q[_rule"/>
+			</context>
+			<context name="%q[_nested" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="#pop" char="]"/>
+				<IncludeRules context="%q[_rule"/>
+			</context>
+			<context name="%q[_rule" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="%q[_nested" char="["/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1="]"/>
+				<Detect2Chars attribute="String Char" char="\" char1="["/>
+			</context>
+
+			<context name="%q&lt;" attribute="Raw String">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=">" endRegion="GdlInput"/>
+				<IncludeRules context="%q&lt;_rule"/>
+			</context>
+			<context name="%q&lt;_nested" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="#pop" char=">"/>
+				<IncludeRules context="%q&lt;_rule"/>
+			</context>
+			<context name="%q&lt;_rule" attribute="Raw String">
+				<DetectChar attribute="Raw String" context="%q&lt;_nested" char="&lt;"/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1=">"/>
+				<Detect2Chars attribute="String Char" char="\" char1="&lt;"/>
+			</context>
+
+			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
+				delimiter character
+			 -->
+			<context name="%q_" attribute="Raw String">
+				<Detect2Chars attribute="Raw String" char="\" char1="\"/>
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="1" dynamic="true" endRegion="GdlInput" />
+				<StringDetect attribute="String Char" String="\%1" dynamic="true"/>
+			</context>
+
+
+			<!-- symbol string specific contexts -->
+
+			<context name="%s(" attribute="Symbol">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=")" endRegion="GdlInput"/>
+				<IncludeRules context="%s(_rule"/>
+			</context>
+			<context name="%s(_nested" attribute="Symbol">
+				<DetectChar attribute="Symbol" context="#pop" char=")"/>
+				<IncludeRules context="%s(_rule"/>
+			</context>
+			<context name="%s(_rule" attribute="Symbol">
+				<DetectChar attribute="Symbol" context="%s(_nested" char="("/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1=")"/>
+				<Detect2Chars attribute="String Char" char="\" char1="("/>
+			</context>
+
+			<context name="%s{" attribute="Symbol">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="}" endRegion="GdlInput"/>
+				<IncludeRules context="%s{_rule"/>
+			</context>
+			<context name="%s{_nested" attribute="Symbol">
+				<DetectChar attribute="Symbol" context="#pop" char="}"/>
+				<IncludeRules context="%s{_rule"/>
+			</context>
+			<context name="%s{_rule" attribute="Symbol">
+				<DetectChar attribute="Symbol" context="%s{_nested" char="{"/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1="}"/>
+				<Detect2Chars attribute="String Char" char="\" char1="{"/>
+			</context>
+
+			<context name="%s[" attribute="Symbol">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="]" endRegion="GdlInput"/>
+				<IncludeRules context="%s[_rule"/>
+			</context>
+			<context name="%s[_nested" attribute="Symbol">
+				<DetectChar attribute="Symbol" context="#pop" char="]"/>
+				<IncludeRules context="%s[_rule"/>
+			</context>
+			<context name="%s[_rule" attribute="Symbol">
+				<DetectChar attribute="Symbol" context="%s[_nested" char="["/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1="]"/>
+				<Detect2Chars attribute="String Char" char="\" char1="["/>
+			</context>
+
+			<context name="%s&lt;" attribute="Symbol">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=">" endRegion="GdlInput"/>
+				<IncludeRules context="%s&lt;_rule"/>
+			</context>
+			<context name="%s&lt;_nested" attribute="Symbol">
+				<DetectChar attribute="Symbol" context="#pop" char=">"/>
+				<IncludeRules context="%s&lt;_rule"/>
+			</context>
+			<context name="%s&lt;_rule" attribute="Symbol">
+				<DetectChar attribute="Symbol" context="%s&lt;_nested" char="&lt;"/>
+				<Detect2Chars attribute="String Char" char="\" char1="\"/>
+				<Detect2Chars attribute="String Char" char="\" char1=">"/>
+				<Detect2Chars attribute="String Char" char="\" char1="&lt;"/>
+			</context>
+
+			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
+				delimiter character
+			 -->
+			<context name="%s_" attribute="Symbol">
+				<Detect2Chars attribute="Symbol" char="\" char1="\"/>
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="1" dynamic="true" endRegion="GdlInput" />
+				<StringDetect attribute="String Char" String="\%1" dynamic="true"/>
+			</context>
+
+
+			<!-- regular expression specific contexts -->
+
+			<context name="%r(" attribute="String">
+				<DetectChar attribute="GDL input" context="#pop!RegExMode" char=")" endRegion="GdlInput" /> <IncludeRules context="%r(_rule"/>
+			</context>
+			<context name="%r(_nested" attribute="String">
+				<DetectChar attribute="String" context="#pop" char=")"/>
+				<IncludeRules context="%r(_rule"/>
+			</context>
+			<context name="%r(_rule" attribute="String">
+				<DetectChar attribute="String" context="%r(_nested" char="("/>
+				<IncludeRules context="RegExSpecial"/>
+			</context>
+
+			<context name="%r{" attribute="String">
+				<DetectChar attribute="GDL input" context="#pop!RegExMode" char="}" endRegion="GdlInput" />
+				<IncludeRules context="%r{_rule"/>
+			</context>
+			<context name="%r{_nested" attribute="String">
+				<DetectChar attribute="String" context="#pop" char="}"/>
+				<IncludeRules context="%r{_rule"/>
+			</context>
+			<context name="%r{_rule" attribute="String">
+				<DetectChar attribute="String" context="%r{_nested" char="{"/>
+				<IncludeRules context="RegExSpecial"/>
+			</context>
+
+			<context name="%r[" attribute="String">
+				<DetectChar attribute="GDL input" context="#pop!RegExMode" char="]" endRegion="GdlInput" />
+				<IncludeRules context="%r[_rule"/>
+			</context>
+			<context name="%r[_nested" attribute="String">
+				<DetectChar attribute="String" context="#pop" char="]"/>
+				<IncludeRules context="%r[_rule"/>
+			</context>
+			<context name="%r[_rule" attribute="String">
+				<DetectChar attribute="String" context="%r[_nested" char="["/>
+				<IncludeRules context="RegExSpecial"/>
+			</context>
+
+			<context name="%r&lt;" attribute="String">
+				<DetectChar attribute="GDL input" context="#pop!RegExMode" char=">" endRegion="GdlInput" />
+				<IncludeRules context="%r&lt;_rule"/>
+			</context>
+			<context name="%r&lt;_nested" attribute="String">
+				<DetectChar attribute="String" context="#pop" char=">"/>
+				<IncludeRules context="%r&lt;_rule"/>
+			</context>
+			<context name="%r&lt;_rule" attribute="String">
+				<DetectChar attribute="String" context="%r&lt;_nested" char="&lt;"/>
+				<IncludeRules context="RegExSpecial"/>
+			</context>
+
+			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
+				delimiter character
+			 -->
+			<context name="%r_" attribute="Regular Expression">
+				<DetectChar attribute="GDL input" context="#pop!RegExMode" char="1" dynamic="true" endRegion="GdlInput" />
+				<StringDetect attribute="String Char" String="\%1" dynamic="true" />
+				<IncludeRules context="RegExSpecial"/>
+			</context>
+
+
+			<!-- shell command specific contexts -->
+
+			<context name="%x(" attribute="Command">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=")" endRegion="GdlInput" />
+				<IncludeRules context="%x(_rule"/>
+			</context>
+			<context name="%x(_nested" attribute="Command">
+				<DetectChar attribute="Command" context="#pop" char=")"/>
+				<IncludeRules context="%x(_rule"/>
+			</context>
+			<context name="%x(_rule" attribute="Command">
+				<DetectChar attribute="Command" context="%x(_nested" char="("/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+			<context name="%x{" attribute="Command">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="}" endRegion="GdlInput" />
+				<IncludeRules context="%x{_rule"/>
+			</context>
+			<context name="%x{_nested" attribute="Command">
+				<DetectChar attribute="Command" context="#pop" char="}"/>
+				<IncludeRules context="%x{_rule"/>
+			</context>
+			<context name="%x{_rule" attribute="Command">
+				<DetectChar attribute="Command" context="%x{_nested" char="{"/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+			<context name="%x[" attribute="Command">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char="]" endRegion="GdlInput" />
+				<IncludeRules context="%x[_rule"/>
+			</context>
+			<context name="%x[_nested" attribute="Command">
+				<DetectChar attribute="Command" context="#pop" char="]"/>
+				<IncludeRules context="%x[_rule"/>
+			</context>
+			<context name="%x[_rule" attribute="Command">
+				<DetectChar attribute="Command" context="%x[_nested" char="["/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+			<context name="%x&lt;" attribute="Command">
+				<DetectChar attribute="GDL input" context="#pop#pop!Op1" char=">" endRegion="GdlInput" />
+				<IncludeRules context="%x&lt;_rule"/>
+			</context>
+			<context name="%x&lt;_nested" attribute="Command">
+				<DetectChar attribute="Command" context="#pop" char=">"/>
+				<IncludeRules context="%x&lt;_rule"/>
+			</context>
+			<context name="%x&lt;_rule" attribute="Command">
+				<DetectChar attribute="Command" context="%x&lt;_nested" char="&lt;"/>
+				<IncludeRules context="DQuoteSpecial"/>
+			</context>
+
+			<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
+				delimiter character
+			 -->
+			<context name="%x_" attribute="Command">
+				<IncludeRules context="%Q_"/>
+			</context>
+
+			<!-- END of General delimited input support -->
+
+			<!-- handle data in script -->
+			<context name="DATA" attribute="Data"/>
+		</contexts>
+
+		<itemDatas>
+			<itemData name="Normal Text" defStyleNum="dsNormal"/>
+
+			<itemData name="Keyword" defStyleNum="dsControlFlow"/>
+			<itemData name="Attribute Definition" defStyleNum="dsOthers"/>
+			<itemData name="Access Control" defStyleNum="dsAttribute" bold="1"/> <!-- #0000FF -->
+			<itemData name="Definition" defStyleNum="dsKeyword"/>
+			<itemData name="Pseudo variable" defStyleNum="dsDecVal"/>
+
+			<itemData name="Dec" defStyleNum="dsDecVal"/>
+			<itemData name="Float" defStyleNum="dsFloat"/>
+			<itemData name="Octal" defStyleNum="dsBaseN"/>
+			<itemData name="Hex" defStyleNum="dsBaseN"/>
+			<itemData name="Bin" defStyleNum="dsBaseN"/>
+			<itemData name="Number Suffix" defStyleNum="dsBuiltIn"/>
+
+			<itemData name="Symbol" defStyleNum="dsWarning" bold="0" underline="0"/> <!-- #D40000 -->
+			<itemData name="String" defStyleNum="dsString"/>
+			<itemData name="String Char" defStyleNum="dsSpecialChar" spellChecking="false"/>
+			<itemData name="Raw String" defStyleNum="dsVerbatimString" /> <!-- #DD4A4A -->
+			<itemData name="Char Literal" defStyleNum="dsSpecialChar" spellChecking="false"/>
+			<itemData name="Char" defStyleNum="dsChar"/>
+
+			<itemData name="Command" defStyleNum="dsInformation"/> <!-- #AA3000 -->
+			<itemData name="Message" defStyleNum="dsAttribute" bold="0"/> <!-- #4000A7 -->
+			<itemData name="Regular Expression" defStyleNum="dsSpecialString" spellChecking="false"/> <!-- #4A5704 -->
+			<itemData name="Substitution"	defStyleNum="dsSpecialChar"/>
+			<itemData name="Data" defStyleNum="dsNormal"/>
+			<!-- short for 'general delimited input' -->
+			<itemData name="GDL input" defStyleNum="dsOthers" />
+
+			<itemData name="Default globals" defStyleNum="dsVariable" bold="1"/> <!-- #C00000 -->
+			<itemData name="Global Variable" defStyleNum="dsVariable"/> <!-- #C00000 -->
+			<itemData name="Global Constant" defStyleNum="dsConstant" bold="1"/> <!-- #bb1188 -->
+			<itemData name="Constant" defStyleNum="dsDataType"/>
+			<itemData name="Constant Value" defStyleNum="dsConstant" bold="0"/> <!-- #bb1188 -->
+			<itemData name="Kernel methods" defStyleNum="dsFunction" bold="1"/> <!-- #CC0E86 -->
+			<itemData name="Module mixin methods" defStyleNum="dsFunction" bold="1"/> <!-- #CC0E86 -->
+			<itemData name="Member" defStyleNum="dsAttribute"/>
+			<itemData name="Instance Variable" defStyleNum="dsOthers"/>
+			<itemData name="Class Variable" defStyleNum="dsOthers"/>
+
+			<itemData name="Comment" defStyleNum="dsComment"/>
+			<itemData name="Blockcomment" defStyleNum="dsComment"/>
+
+			<itemData name="Here Document" defStyleNum="dsDocumentation"/>
+
+			<itemData name="Delimiter" defStyleNum="dsKeyword"/> <!-- #FF9FEC -->
+			<itemData name="Operator" defStyleNum="dsOperator" bold="1"/> <!-- #FF9FEC -->
+
+			<itemData name="Error" defStyleNum="dsError"/>
 		</itemDatas>
 	</highlighting>
 	<general>
diff --git a/xml/swift.xml b/xml/swift.xml
--- a/xml/swift.xml
+++ b/xml/swift.xml
@@ -10,7 +10,7 @@
 
 <language
     name="Swift"
-    version="1"
+    version="2"
     kateversion="5.62"
     section="Sources"
     extensions="*.swift"
@@ -139,8 +139,7 @@
                 <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1"/>
                 <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1"/>
 
-                <Detect2Chars attribute="Comment" context="CommentSingleLine" char="/" char1="/"/>
-                <Detect2Chars attribute="Comment" context="CommentMultiline" char="/" char1="*" beginRegion="Comment"/>
+                <IncludeRules context="FindComments"/>
 
                 <AnyChar attribute="Symbol" context="#stay" String="()[]&amp;|+,-/*&lt;=&gt;;!%?:~^"/>
 
@@ -172,6 +171,11 @@
                 <DetectIdentifier attribute="Normal Text"/>
             </context>
 
+            <context attribute="Normal Text" lineEndContext="#stay" name="FindComments">
+                <Detect2Chars attribute="Comment" context="CommentSingleLine" char="/" char1="/"/>
+                <Detect2Chars attribute="Comment" context="CommentMultiline" char="/" char1="*" beginRegion="Comment"/>
+            </context>
+
             <context attribute="Normal Text" lineEndContext="#stay" name="Number">
                 <IncludeRules context="FindFloat"/>
                 <RegExpr attribute="Hex" context="#pop" String="\b0[xX]&hex;[lL]?\b"/>
@@ -251,16 +255,20 @@
                 <DetectIdentifier attribute="Variable" context="#pop" />
             </context>
 
-            <context name="TypeDeclaration" lineEndContext="#stay" attribute="Normal Text">
+            <context name="TypeDeclaration" lineEndContext="#stay" attribute="Normal Text" fallthroughContext="#pop">
                 <keyword attribute="Keyword" context="#stay" String="keywords"/>
 
                 <DetectChar attribute="Symbol" context="TypeParameters" char="&lt;" />
                 <DetectChar attribute="Symbol" context="Parameters" char="(" />
                 <DetectChar attribute="Symbol" context="SuperTypes" char=":" />
                 <DetectChar attribute="Symbol" context="#pop" char="{" lookAhead="true" />
+
+                <DetectIdentifier attribute="Normal Text" context="#stay"/>
+                <DetectSpaces attribute="Normal Text" context="#stay"/>
+                <IncludeRules context="FindComments"/>
             </context>
 
-            <context name="SuperTypes" lineEndContext="#stay" attribute="Normal Text">
+            <context name="SuperTypes" lineEndContext="#stay" attribute="Normal Text" fallthroughContext="#pop">
                 <keyword attribute="Keyword" context="#pop#pop" String="keywords" lookAhead="true" />
 
                 <DetectChar attribute="Symbol" context="#stay" char="," />
@@ -269,18 +277,21 @@
                 <DetectChar attribute="Symbol" context="TypeParameters" char="&lt;" />
 
                 <DetectIdentifier attribute="Data Type" context="#stay"/>
+                <DetectSpaces attribute="Normal Text" context="#stay"/>
+                <IncludeRules context="FindComments"/>
             </context>
 
-            <context name="FunctionDeclaration" lineEndContext="#stay" attribute="Normal Text">
+            <context name="FunctionDeclaration" lineEndContext="#stay" attribute="Normal Text" fallthroughContext="#pop">
                 <keyword attribute="Keyword" context="#stay" String="keywords"/>
                 <DetectChar attribute="Symbol" context="#stay" char="." />
                 <DetectChar attribute="Symbol" context="Parameters" char="(" />
                 <DetectChar attribute="Symbol" context="TypeParameters" char="&lt;" />
                 <DetectChar attribute="Symbol" context="TypeName" char=":" />
-
-                <AnyChar attribute="Symbol" context="#pop" String="{=" lookAhead="true" />
+                <AnyChar attribute="Normal Text" String="->[]?" />
 
                 <DetectIdentifier attribute="Function" context="#stay"/>
+                <DetectSpaces attribute="Normal Text" context="#stay"/>
+                <IncludeRules context="FindComments"/>
             </context>
 
             <context name="TypeParameters" lineEndContext="#stay" attribute="Normal Text">
@@ -293,6 +304,8 @@
                 <DetectChar attribute="Symbol" context="TypeParameters" char="&lt;" />
 
                 <DetectIdentifier attribute="Data Type" context="DataTypeSuffix"/>
+                <DetectSpaces attribute="Normal Text" context="#stay"/>
+                <IncludeRules context="FindComments"/>
             </context>
             <context name="DataTypeSuffix" lineEndContext="#pop" attribute="Normal Text" fallthroughContext="#pop">
                 <DetectChar attribute="Symbol" context="#pop" char="?"/>
@@ -305,6 +318,8 @@
                 <DetectChar attribute="Symbol" context="Expression" char="=" />
                 <DetectIdentifier attribute="Variable" context="#stay"/>
                 <DetectChar attribute="Symbol" context="#stay" char=","/>
+                <DetectSpaces attribute="Normal Text" context="#stay"/>
+                <IncludeRules context="FindComments"/>
             </context>
 
             <context name="TypeName" lineEndContext="#stay" attribute="Normal Text">
@@ -339,8 +354,7 @@
                 <DetectChar context="String" char="&quot;" lookAhead="1"/>
                 <DetectChar context="Char" char="'" lookAhead="1"/>
 
-                <Detect2Chars attribute="Comment" context="CommentSingleLine" char="/" char1="/"/>
-                <Detect2Chars attribute="Comment" context="CommentMultiline" char="/" char1="*" beginRegion="Comment"/>
+                <IncludeRules context="FindComments"/>
 
                 <DetectIdentifier attribute="Normal Text"/>
             </context>
@@ -357,12 +371,14 @@
             <context attribute="Comment" lineEndContext="#pop" name="CommentSingleLine">
                 <DetectSpaces />
                 <IncludeRules context="##Comments"/>
+                <DetectIdentifier />
             </context>
             <context attribute="Comment" lineEndContext="#stay" name="CommentMultiline">
                 <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
                 <Detect2Chars attribute="Comment" context="CommentMultiline" char="/" char1="*" beginRegion="Comment"/>
                 <DetectSpaces />
                 <IncludeRules context="##Comments"/>
+                <DetectIdentifier />
             </context>
 
         </contexts>
diff --git a/xml/xml.xml b/xml/xml.xml
--- a/xml/xml.xml
+++ b/xml/xml.xml
@@ -6,7 +6,7 @@
 	<!ENTITY name    "(?![0-9])[\w_:][\w.:_-]*">
 	<!ENTITY entref  "&amp;(?:#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
 ]>
-<language name="XML" version="20" kateversion="5.0" section="Markup" extensions="*.page;*.docbook;*.xml;*ui.rc;*.daml;*.rdf;*.rss;*.xspf;*.xsd;*.svg;*.ui;*.kcfg;*.qrc;*.wsdl;*.scxml;*.xbel;*.dae;*.sch;*.brd" mimetype="text/xml;text/book;text/daml;text/rdf;application/rss+xml;application/xspf+xml;image/svg+xml;application/x-designer;application/x-xbel;application/xml;application/scxml+xml;application/vnd.oasis.opendocument.text-flat-xml;application/vnd.oasis.opendocument.graphics-flat-xml;application/vnd.oasis.opendocument.presentation-flat-xml;application/vnd.oasis.opendocument.spreadsheet-flat-xml;application/gpx+xml" casesensitive="1" indenter="xml" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
+<language name="XML" version="22" kateversion="5.0" section="Markup" extensions="*.page;*.docbook;*.xml;*ui.rc;*.daml;*.rdf;*.rss;*.xspf;*.xsd;*.svg;*.ui;*.kcfg;*.qrc;*.wsdl;*.scxml;*.xbel;*.dae;*.sch;*.brd;*.fb2" mimetype="text/xml;text/book;text/daml;text/rdf;application/rss+xml;application/xspf+xml;image/svg+xml;application/x-designer;application/x-xbel;application/xml;application/scxml+xml;application/vnd.oasis.opendocument.text-flat-xml;application/vnd.oasis.opendocument.graphics-flat-xml;application/vnd.oasis.opendocument.presentation-flat-xml;application/vnd.oasis.opendocument.spreadsheet-flat-xml;application/gpx+xml;application/x-fictionbook+xml" casesensitive="1" indenter="xml" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
 
 <highlighting>
 <contexts>
@@ -99,6 +99,7 @@
   </context>
   <context name="Doctype Markupdecl VariableName" attribute="Other Text" lineEndContext="#pop!Doctype Markupdecl" fallthrough="true" fallthroughContext="#pop!Doctype Markupdecl">
     <DetectSpaces />
+    <DetectChar attribute="Doctype Symbols" char="%"/>
     <RegExpr attribute="Doctype Name" context="#pop!Doctype Markupdecl" String="&name;" />
   </context>
   <context name="Doctype Markupdecl" attribute="Other Text" lineEndContext="#stay">
diff --git a/xml/yaml.xml b/xml/yaml.xml
--- a/xml/yaml.xml
+++ b/xml/yaml.xml
@@ -53,8 +53,8 @@
 <!-- Modifications (YAML 1.2), values & support for literal/folded style:
        Nibaldo González S. <nibgonz@gmail.com>
        These modifications are under the MIT license. //-->
-<language name="YAML" alternativeNames="YML" version="12" kateversion="5.0" section="Markup"
-          extensions="*.yaml;*.yml" mimetype="text/yaml" priority="9"
+<language name="YAML" alternativeNames="YML" version="13" kateversion="5.0" section="Markup"
+          extensions="*.yaml;*.yml;.clang-format;.clang-tidy" mimetype="text/yaml" priority="9"
           author="Dr Orlovsky MA (dr.orlovsky@gmail.com), Nibaldo González (nibgonz@gmail.com)" license="LGPL">
   <highlighting>
     <contexts>
diff --git a/xml/zig.xml b/xml/zig.xml
--- a/xml/zig.xml
+++ b/xml/zig.xml
@@ -7,7 +7,7 @@
     <!ENTITY exp_float "(?:[eE][+-]?&dec_int;)">
     <!ENTITY exp_hexfloat "(?:[pP][-+]?&dec_int;)">
 ]>
-<language name="Zig" section="Sources" version="2" kateversion="5.62" indenter="cstyle" extensions="*.zig" mimetype="text/x-zig" priority="1" author="Waqar Ahmed (waqar.17a@gmail.com)" license="MIT">
+<language name="Zig" section="Sources" version="3" kateversion="5.62" indenter="cstyle" extensions="*.zig" mimetype="text/x-zig" priority="1" author="Waqar Ahmed (waqar.17a@gmail.com)" license="MIT">
     <highlighting>
         <list name="keywords">
             <item>addrspace</item>
@@ -268,6 +268,7 @@
                 <DetectChar attribute="Decimal" context="#pop!SuffixNumber" char="0"/>
             </context>
             <context name="SuffixNumber" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
+                <StringDetect attribute="Symbol" String=".." context="#pop"/> <!-- in `[0..a]` -->
                 <AnyChar attribute="Error" String=".0123456789" context="#pop"/>
                 <DetectIdentifier attribute="Error" context="#pop"/>
             </context>
diff --git a/xml/zsh.xml b/xml/zsh.xml
--- a/xml/zsh.xml
+++ b/xml/zsh.xml
@@ -69,16 +69,22 @@
 
         <!ENTITY arithmetic_as_subshell "\(((?:[^`'&quot;()$]++|\$\{[^`'&quot;(){}$]+\}|\$(?=[^{`'&quot;()])|&bq_string;|\((?1)(?:[)]|(?=['&quot;])))++)(?:[)](?=$|[^)])|[&quot;'])">
 
-        <!ENTITY unary_operators  "-[abcdefghknoprstuvwxzLOGNS]&eos;">
-        <!ENTITY binary_operators "(?:-(?:e[fq]|[nolg]t|[nlg]e)|==?|!=)&eos;">
+        <!ENTITY unary_operators  "-[abcdefghknoprstuvwxzLOGNS](?=\\?$|[ &tab;])">
+        <!ENTITY binary_operators "(?:-(?:e[fq]|[nolg]t|[nlg]e)|==?|!=)(?=\\?$|[ &tab;])">
 
         <!ENTITY dblbracket_close "\]\](?=($|[ &tab;;|&amp;)]))">
 
         <!ENTITY int "(?:[0-9]++[_0-9]*+)">
         <!ENTITY exp "(?:[eE][-+]?&int;)">
 ]>
-<language name="Zsh" version="32" kateversion="5.79" section="Scripts" extensions="*.sh;*.zsh;.zshrc;.zprofile;.zlogin;.zlogout;.profile" mimetype="application/x-shellscript" casesensitive="1" author="Jonathan Poelen (jonathan.poelen@gmail.com)" license="MIT">
 
+<!--
+https://zsh.sourceforge.io/releases.html
+current: 5.9
+-->
+
+<language name="Zsh" version="34" kateversion="5.79" section="Scripts" extensions="*.sh;*.zsh;.zshrc;.zprofile;.zlogin;.zlogout;.profile" mimetype="application/x-shellscript" casesensitive="1" author="Jonathan Poelen (jonathan.poelen@gmail.com)" license="MIT">
+
   <highlighting>
     <list name="keywords">
       <item>continue</item>
@@ -1030,7 +1036,7 @@
         <DetectSpaces attribute="String SingleQ"/>
         <DetectIdentifier attribute="String SingleQ"/>
         <DetectChar attribute="String SingleQ" context="#pop" char="'"/>
-        <RegExpr attribute="String Escape" context="#stay" String="\\(?:[abefnrtv\\']|[0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)"/>
+        <RegExpr attribute="String Escape" context="#stay" String="\\(?:[abeEfnrtv\\']|[0-7]{1,3}|x[A-Fa-f0-9]{1,2}|u[A-Fa-f0-9]{1,4}|U[A-Fa-f0-9]{1,8}|c.)?"/>
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="FindWord">
@@ -1546,13 +1552,19 @@
         <DetectChar attribute="Normal Text" context="#pop!ExprBracketValueRecBrace" char="{"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2" fallthroughContext="ExprBracketValue">
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2" fallthroughContext="#pop!ExprBracketParam2_Value">
+        <LineContinue attribute="Escape" context="SkipSpaces"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2_Value" fallthroughContext="ExprBracketValue">
         <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam3"/>
         <AnyChar context="TestMaybeBinary" String="-=!" lookAhead="1"/>
         <IncludeRules context="FindExprBracketEnd"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="ExprBracketFinal" name="ExprBracketParam3" fallthroughContext="ExprBracketValue">
+      <context attribute="Normal Text" lineEndContext="ExprBracketFinal" name="ExprBracketParam3" fallthroughContext="#pop!ExprBracketParam3_Value">
+        <LineContinue attribute="Escape" context="SkipSpaces"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="ExprBracketFinal" name="ExprBracketParam3_Value" fallthroughContext="ExprBracketValue">
         <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketFinal"/>
         <IncludeRules context="FindExprBracketEnd"/>
       </context>
@@ -1576,7 +1588,11 @@
         <RegExpr attribute="Expression" context="#pop" String="&binary_operators;"/>
       </context>
 
+      <context attribute="Normal Text" lineEndContext="#pop" name="SkipSpaces" fallthroughContext="#pop">
+        <DetectSpaces context="#pop"/>
+      </context>
 
+
       <!-- ExprDblBracket consumes an expression till ]] -->
       <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket" fallthroughContext="#pop!ExprDblBracketNot">
         <DetectSpaces attribute="Normal Text" context="#stay"/>
@@ -1672,6 +1688,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2" fallthroughContext="#pop!ExprDblBracketParam2_2">
         <DetectSpaces attribute="Normal Text" context="#stay"/>
         <DetectChar attribute="Comment" context="Comment" char="#"/>
+        <LineContinue attribute="Escape"/>
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2_2" fallthroughContext="ExprDblBracketValuePattern">
         <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/>
@@ -1689,8 +1706,7 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3" fallthroughContext="#pop!ExprDblBracketParam3_2">
-        <DetectSpaces attribute="Normal Text" context="#stay"/>
-        <DetectChar attribute="Comment" context="Comment" char="#"/>
+        <IncludeRules context="ExprDblBracketParam2"/>
       </context>
       <context attribute="Normal Text" lineEndContext="#pop!ExprDblBracketFinal" name="ExprDblBracketParam3_2" fallthroughContext="ExprDblBracketValuePattern">
         <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/>
