diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,25 @@
 # Revision history for skylighting and skylighting-core
 
+## 0.11
+
+  * Skylighting.Regex: Support regex subroutines (#118).  For example,
+    `(?1)` is replaced by the regex in the first capturing group.  So far
+    we only support this simple, absolute form, not the relative
+    form `(?-1)` supported by some engines (but not used, I think, in
+    KDE's syntax highlighters).  This change involves an API change:
+    Regex in Skylighting.Regex has a new Subroutine constructor,
+    and the Recurse constructor has been removed.  Instead of Recurse we use
+    Subroutine 0, which unifies the code.
+
+  * Skylighting.Regex: handle e.g. `[\1]` and `[\123]` (without
+    initial 0) as octal escapes (#118).  These occur in the zsh.xml
+    syntax definition.
+
+  * Pull xml definitions for bash, cmake, python, zsh from upstream.
+
+  * README: Add a note about pulling syntax definitions from upstream (#138).
+    Update build instructions for recent cabal versions (#131).
+
 ## 0.10.5.2
 
   * Added swift grammar definition (Igor Ranieri).
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.10.5.2
+version:             0.11
 synopsis:            syntax highlighting library
 description:         Skylighting is a syntax highlighting library.
                      It derives its tokenizers from XML syntax
diff --git a/src/Regex/KDE/Compile.hs b/src/Regex/KDE/Compile.hs
--- a/src/Regex/KDE/Compile.hs
+++ b/src/Regex/KDE/Compile.hs
@@ -56,7 +56,7 @@
      lift . pSuffix
 
 pParenthesized :: Bool -> RParser Regex
-pParenthesized caseSensitive = (do
+pParenthesized caseSensitive = do
   _ <- lift (satisfy (== 40))
   -- pcrepattern says: A group that starts with (?| resets the capturing
   -- parentheses numbers in each alternative.
@@ -74,8 +74,7 @@
                   then put currentCaptureNumber
                   else return ()) >> pAltPart caseSensitive) <|> pure mempty))
   _ <- lift (satisfy (== 41))
-  return $ modifier contents)
-  <|> Recurse <$ (lift (string "(?R)" <|> string "(?0)"))
+  return $ modifier contents
 
 pGroupModifiers :: Parser (Regex -> Regex)
 pGroupModifiers =
@@ -83,6 +82,12 @@
    <|>
      do dir <- option Forward $ Backward <$ char '<'
         (AssertPositive dir <$ char '=') <|> (AssertNegative dir <$ char '!')
+   <|>
+     do n <- satisfy (\d -> d >= 48 && d <= 57)
+        return (\_ -> Subroutine (fromIntegral n - 48))
+   <|>
+     do _ <- satisfy (== 82) -- R
+        return  (\_ -> Subroutine 0)
 
 pSuffix :: Regex -> Parser Regex
 pSuffix re = option re $ do
@@ -186,6 +191,16 @@
     '0' -> do -- \0ooo matches octal ooo
       ds <- A.take 3
       case readMay ("'\\o" ++ U.toString ds ++ "'") of
+        Just x  -> return x
+        Nothing -> fail "invalid octal character escape"
+    _ | c >= '1' && c <= '7' -> do
+      -- \123 matches octal 123, \1 matches octal 1
+      let octalDigitScanner s w
+            | s < 3, w >= 48 && w <= 55
+                        = Just (s + 1) -- digits 0-7
+            | otherwise = Nothing
+      ds <- A.scan (1 :: Int) octalDigitScanner
+      case readMay ("'\\o" ++ [c] ++ U.toString ds ++ "'") of
         Just x  -> return x
         Nothing -> fail "invalid octal character escape"
     'z' -> do -- \zhhhh matches unicode hex char hhhh
diff --git a/src/Regex/KDE/Match.hs b/src/Regex/KDE/Match.hs
--- a/src/Regex/KDE/Match.hs
+++ b/src/Regex/KDE/Match.hs
@@ -48,30 +48,30 @@
               then Set.take sizeLimit ms
               else ms
 
--- first argument is the "top-level" regex, needed for Recurse.
-exec :: Regex -> Direction -> Regex -> Set Match -> Set Match
+-- first argument is a map of capturing groups, needed for Subroutine.
+exec :: M.IntMap Regex -> Direction -> Regex -> Set Match -> Set Match
 exec _ _ MatchNull = id
-exec top dir (Lazy re) = -- note: the action is below under Concat
-  exec top dir (MatchConcat (Lazy re) MatchNull)
-exec top dir (Possessive re) =
+exec cgs dir (Lazy re) = -- note: the action is below under Concat
+  exec cgs dir (MatchConcat (Lazy re) MatchNull)
+exec cgs dir (Possessive re) =
   foldr
-    (\elt s -> case Set.lookupMin (exec top dir re (Set.singleton elt)) of
+    (\elt s -> case Set.lookupMin (exec cgs dir re (Set.singleton elt)) of
                  Nothing -> s
                  Just m  -> Set.insert m s)
     mempty
-exec top dir (MatchDynamic n) = -- if this hasn't been replaced, match literal
-  exec top dir (MatchChar (== '%') <>
+exec cgs dir (MatchDynamic n) = -- if this hasn't been replaced, match literal
+  exec cgs dir (MatchChar (== '%') <>
             mconcat (map (\c -> MatchChar (== c)) (show n)))
 exec _ _ AssertEnd = Set.filter (\m -> matchOffset m == B.length (matchBytes m))
 exec _ _ AssertBeginning = Set.filter (\m -> matchOffset m == 0)
-exec top _ (AssertPositive dir regex) =
+exec cgs _ (AssertPositive dir regex) =
   Set.unions . Set.map
     (\m -> Set.map (\m' -> -- we keep captures but not matches
                             m'{ matchBytes = matchBytes m,
                                matchOffset = matchOffset m })
-           $ exec top dir regex (Set.singleton m))
-exec top _ (AssertNegative dir regex) =
-  Set.filter (\m -> null (exec top dir regex (Set.singleton m)))
+           $ exec cgs dir regex (Set.singleton m))
+exec cgs _ (AssertNegative dir regex) =
+  Set.filter (\m -> null (exec cgs dir regex (Set.singleton m)))
 exec _ _ AssertWordBoundary = Set.filter atWordBoundary
 exec _ Forward MatchAnyChar = mapMatching $ \m ->
   case U.decode (B.drop (matchOffset m) (matchBytes m)) of
@@ -92,12 +92,12 @@
       case U.decode (B.drop off (matchBytes m)) of
         Just (c,_) | f c -> m{ matchOffset = off }
         _                -> m{ matchOffset = -1 }
-exec top dir (MatchConcat (MatchConcat r1 r2) r3) =
-  exec top dir (MatchConcat r1 (MatchConcat r2 r3))
-exec top Forward (MatchConcat (Lazy r1) r2) =
+exec cgs dir (MatchConcat (MatchConcat r1 r2) r3) =
+  exec cgs dir (MatchConcat r1 (MatchConcat r2 r3))
+exec cgs Forward (MatchConcat (Lazy r1) r2) =
   Set.foldl Set.union mempty . Set.map
     (\m ->
-      let ms1 = exec top Forward r1 (Set.singleton m)
+      let ms1 = exec cgs Forward r1 (Set.singleton m)
        in if Set.null ms1
              then ms1
              else go ms1)
@@ -105,30 +105,30 @@
   go ms = case Set.lookupMax ms of   -- find shortest match
             Nothing -> Set.empty
             Just m' ->
-              let s' = exec top Forward r2 (Set.singleton m')
+              let s' = exec cgs Forward r2 (Set.singleton m')
                in if Set.null s'
                      then go (Set.delete m' ms)
                      else s'
-exec top Forward (MatchConcat r1 r2) = -- TODO longest match first
+exec cgs Forward (MatchConcat r1 r2) = -- TODO longest match first
   \ms ->
-    let ms1 = exec top Forward r1 ms
+    let ms1 = exec cgs Forward r1 ms
      in if Set.null ms1
            then ms1
-           else exec top Forward r2 (prune ms1)
-exec top Backward (MatchConcat r1 r2) =
-  exec top Backward r1 . exec top Backward r2
-exec top dir (MatchAlt r1 r2) = \ms -> exec top dir r1 ms <> exec top dir r2 ms
-exec top dir (MatchSome re) = go
+           else exec cgs Forward r2 (prune ms1)
+exec cgs Backward (MatchConcat r1 r2) =
+  exec cgs Backward r1 . exec cgs Backward r2
+exec cgs dir (MatchAlt r1 r2) = \ms -> exec cgs dir r1 ms <> exec cgs dir r2 ms
+exec cgs dir (MatchSome re) = go
  where
-  go ms = case exec top dir re ms of
+  go ms = case exec cgs dir re ms of
             ms' | Set.null ms' -> Set.empty
                 | ms' == ms    -> ms
                 | otherwise    -> let ms'' = prune ms'
                                    in ms'' <> go ms''
-exec top dir (MatchCapture i re) =
+exec cgs dir (MatchCapture i re) =
   Set.foldr Set.union Set.empty .
    Set.map (\m ->
-     Set.map (captureDifference m) (exec top dir re (Set.singleton m)))
+     Set.map (captureDifference m) (exec cgs dir re (Set.singleton m)))
  where
     captureDifference m m' =
       let len = matchOffset m' - matchOffset m
@@ -149,9 +149,10 @@
                         -> m{ matchOffset = matchOffset m - B.length capture }
                      _  -> m{ matchOffset = -1 }
        Nothing -> m{ matchOffset = -1 }
-exec top dir Recurse = \ms -> if Set.null ms
-                                 then ms
-                                 else exec top dir top ms
+exec cgs dir (Subroutine i) =
+  case M.lookup i cgs of
+    Nothing -> id  -- ignore references to nonexistent groups
+    Just re' -> exec cgs dir re'
 
 atWordBoundary :: Match -> Bool
 atWordBoundary m =
@@ -190,8 +191,24 @@
            -> ByteString
            -> Maybe (ByteString, M.IntMap (Int, Int))
 matchRegex re bs =
-  toResult <$> Set.lookupMin
-               (exec re Forward re (Set.singleton (Match bs 0 M.empty)))
+  let capturingGroups = extractCapturingGroups re
+  in  toResult <$> Set.lookupMin
+               (exec capturingGroups Forward re
+                  (Set.singleton (Match bs 0 M.empty)))
  where
    toResult m = (B.take (matchOffset m) (matchBytes m), (matchCaptures m))
 
+extractCapturingGroups :: Regex -> M.IntMap Regex
+extractCapturingGroups regex = M.singleton 0 regex <>
+  case regex of
+    MatchSome re -> extractCapturingGroups re
+    MatchAlt re1 re2 ->
+      extractCapturingGroups re1 <> extractCapturingGroups re2
+    MatchConcat re1 re2 ->
+      extractCapturingGroups re1 <> extractCapturingGroups re2
+    MatchCapture i re -> M.singleton i re
+    AssertPositive _ re -> extractCapturingGroups re
+    AssertNegative _ re -> extractCapturingGroups re
+    Possessive re -> extractCapturingGroups re
+    Lazy re -> extractCapturingGroups re
+    _ -> mempty
diff --git a/src/Regex/KDE/Regex.hs b/src/Regex/KDE/Regex.hs
--- a/src/Regex/KDE/Regex.hs
+++ b/src/Regex/KDE/Regex.hs
@@ -30,7 +30,7 @@
   AssertNegative !Direction !Regex |
   Possessive !Regex |
   Lazy !Regex |
-  Recurse |
+  Subroutine !Int |
   MatchNull
 
 instance Show Regex where
@@ -53,7 +53,7 @@
                   show dir <> " " <> show re <> ")"
   show (Possessive re) = "(Possessive " <> show re <> ")"
   show (Lazy re) = "(Lazy " <> show re <> ")"
-  show Recurse = "Recurse"
+  show (Subroutine i) = "(Subroutine " <> show i <> ")"
   show MatchNull = "MatchNull"
 
 instance Semigroup Regex where
diff --git a/src/Skylighting/Format/HTML.hs b/src/Skylighting/Format/HTML.hs
--- a/src/Skylighting/Format/HTML.hs
+++ b/src/Skylighting/Format/HTML.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE NoOverloadedStrings #-}
 module Skylighting.Format.HTML (
       formatHtmlInline
     , formatHtmlBlock
diff --git a/test/expected/abc.julia.native b/test/expected/abc.julia.native
--- a/test/expected/abc.julia.native
+++ b/test/expected/abc.julia.native
@@ -3,31 +3,38 @@
   , ( OperatorTok , "," )
   , ( NormalTok , " list)" )
   ]
-, [ ( NormalTok , "  isempty(str) " )
+, [ ( NormalTok , "  " )
+  , ( FunctionTok , "isempty" )
+  , ( NormalTok , "(str) " )
   , ( OperatorTok , "&&" )
   , ( NormalTok , " " )
-  , ( KeywordTok , "return" )
+  , ( ControlFlowTok , "return" )
   , ( NormalTok , " " )
-  , ( ExtensionTok , "true" )
+  , ( ConstantTok , "true" )
   ]
 , [ ( NormalTok , "  " )
-  , ( KeywordTok , "for" )
+  , ( ControlFlowTok , "for" )
   , ( NormalTok , " i " )
   , ( OperatorTok , "=" )
   , ( NormalTok , " " )
   , ( FloatTok , "1" )
   , ( OperatorTok , ":" )
-  , ( NormalTok , "length(list)" )
+  , ( FunctionTok , "length" )
+  , ( NormalTok , "(list)" )
   ]
 , [ ( NormalTok , "    str[" )
-  , ( KeywordTok , "end" )
+  , ( ControlFlowTok , "end" )
   , ( NormalTok , "] " )
   , ( KeywordTok , "in" )
   , ( NormalTok , " list[i] " )
   , ( OperatorTok , "&&" )
   , ( NormalTok , " " )
   ]
-, [ ( NormalTok , "    any([abc(str[" )
+, [ ( NormalTok , "    " )
+  , ( FunctionTok , "any" )
+  , ( NormalTok , "([" )
+  , ( FunctionTok , "abc" )
+  , ( NormalTok , "(str[" )
   , ( FloatTok , "1" )
   , ( OperatorTok , ":" )
   , ( KeywordTok , "end" )
@@ -35,19 +42,21 @@
   , ( FloatTok , "1" )
   , ( NormalTok , "]" )
   , ( OperatorTok , "," )
-  , ( NormalTok , " deleteat" )
-  , ( OperatorTok , "!" )
-  , ( NormalTok , "(copy(list)" )
+  , ( NormalTok , " " )
+  , ( FunctionTok , "deleteat!" )
+  , ( NormalTok , "(" )
+  , ( FunctionTok , "copy" )
+  , ( NormalTok , "(list)" )
   , ( OperatorTok , "," )
   , ( NormalTok , " i))]) " )
   , ( OperatorTok , "&&" )
   ]
 , [ ( NormalTok , "    " )
-  , ( KeywordTok , "return" )
+  , ( ControlFlowTok , "return" )
   , ( NormalTok , " " )
-  , ( ExtensionTok , "true" )
+  , ( ConstantTok , "true" )
   ]
 , [ ( NormalTok , "  " ) , ( KeywordTok , "end" ) ]
-, [ ( NormalTok , "  " ) , ( ExtensionTok , "false" ) ]
+, [ ( NormalTok , "  " ) , ( ConstantTok , "false" ) ]
 , [ ( KeywordTok , "end" ) ]
 ]
diff --git a/test/expected/archive.rhtml.native b/test/expected/archive.rhtml.native
--- a/test/expected/archive.rhtml.native
+++ b/test/expected/archive.rhtml.native
@@ -32,7 +32,9 @@
   ]
 , [ ( NormalTok , "  " )
   , ( KeywordTok , "<p><label" )
-  , ( OtherTok , " for=" )
+  , ( NormalTok , " " )
+  , ( ErrorTok , "for" )
+  , ( OtherTok , "=" )
   , ( StringTok , "\"start_date\"" )
   , ( KeywordTok , ">" )
   , ( NormalTok , "From" )
@@ -55,7 +57,9 @@
   ]
 , [ ( NormalTok , "  " )
   , ( KeywordTok , "<label" )
-  , ( OtherTok , " for=" )
+  , ( NormalTok , " " )
+  , ( ErrorTok , "for" )
+  , ( OtherTok , "=" )
   , ( StringTok , "\"end_date\"" )
   , ( KeywordTok , ">" )
   , ( NormalTok , "To" )
@@ -85,7 +89,9 @@
   ]
 , [ ( NormalTok , "  " )
   , ( KeywordTok , "<p><label" )
-  , ( OtherTok , " for=" )
+  , ( NormalTok , " " )
+  , ( ErrorTok , "for" )
+  , ( OtherTok , "=" )
   , ( StringTok , "\"event_series\"" )
   , ( KeywordTok , ">" )
   , ( NormalTok , "Series" )
diff --git a/test/test-skylighting.hs b/test/test-skylighting.hs
--- a/test/test-skylighting.hs
+++ b/test/test-skylighting.hs
@@ -103,10 +103,10 @@
                 testCase ("regex " <>
                            (Text.unpack $ TE.decodeUtf8 regex) <> " in "
                            <> sFilename syn)
-             $ assertBool "regex does not compile"
-               $ case compileRegex True regex of
-                         Right _ -> True
-                         Left _  -> False) $ getRegexesFromSyntax syn))
+             $ case compileRegex True regex of
+                 Right _ -> assertBool "regex does not compile" True
+                 Left e -> assertFailure ("regex does not compile: " <> show e))
+                         $ getRegexesFromSyntax syn))
         syntaxes
     , testGroup "Regex module" $ map regexTest regexTests
     , testGroup "Regression tests" $
@@ -318,6 +318,12 @@
   , ("(?|(abc)|(def))", "def", Just ("def", [(1,"def")]))
   , ("(?:(abc)|(def))", "def", Just ("def", [(2,"def")]))
   , ("d(?=(bc)|(ef))", "def", Just ("d", [(2,"ef")]))
+  , ("([bcd])([efg])(?2)(?1)", "befd", Just ("befd", [(1,"b"),(2,"e")]))
+  , ("([abc](?1)*)", "abcd", Just ("abc", [(1,"abc")]))
+  , ("(x(?1)*)", "xxxxy", Just ("xxxx", [(1,"xxxx")]))
+  , ("a|\\((?0)\\)", "(((a)))", Just ("(((a)))", []))
+  , ("([abc](x(?1))*)", "axbxcc", Just ("axbxc", [(1,"axbxc"),(2,"xc")]))
+    -- note: pcre gives insetad (2, "xbxc") -- I don't understand why
   ]
 
 
diff --git a/xml/agda.xml b/xml/agda.xml
--- a/xml/agda.xml
+++ b/xml/agda.xml
@@ -3,7 +3,7 @@
   <!ENTITY charsdelim "_;.&#34;(){}@">
   <!ENTITY wordsep "(?=[&charsdelim;]|\s|$)">
 ]>
-<language name="Agda" version="8" kateversion="5.0" section="Sources" extensions="*.agda" mimetype="text/x-agda" author="Matthias C. M. Troffaes" license="LGPL">
+<language name="Agda" version="9" kateversion="5.0" section="Sources" extensions="*.agda" mimetype="text/x-agda" author="Matthias C. M. Troffaes" license="LGPL">
   <highlighting>
     <list name="reserved keywords">
       <item>abstract</item>
@@ -23,6 +23,7 @@
       <item>infixl</item>
       <item>infixr</item>
       <item>instance</item>
+      <item>interleaved</item>
       <item>let</item>
       <item>macro</item>
       <item>module</item>
@@ -36,13 +37,12 @@
       <item>private</item>
       <item>public</item>
       <item>quote</item>
-      <item>quoteGoal</item>
       <item>quoteTerm</item>
       <item>record</item>
       <item>renaming</item>
       <item>rewrite</item>
-      <item>tactic</item>
       <item>syntax</item>
+      <item>tactic</item>
       <item>to</item>
       <item>unquote</item>
       <item>unquoteDecl</item>
diff --git a/xml/bash.xml b/xml/bash.xml
--- a/xml/bash.xml
+++ b/xml/bash.xml
@@ -5,7 +5,7 @@
         <!ENTITY funcname "([^&_fragpathseps;}=#$]|[+!@](?!\())([^&_fragpathseps;}=$]*+([+!@](?!\())?+)*+">
         <!ENTITY varname  "[A-Za-z_][A-Za-z0-9_]*">
         <!ENTITY eos      "(?=$|[ &tab;])">                 <!-- eol or space following -->
-        <!ENTITY eoexpr   "(?=$|[ &tab;&lt;>|&amp;;])">
+        <!ENTITY eoexpr   "(?=$|[ &tab;&lt;>|&amp;;)])">
 
         <!ENTITY substseps  "${'&quot;`\\">
         <!ENTITY symbolseps "&lt;>|&amp;;()"> <!-- see man bash -->
@@ -18,6 +18,13 @@
         <!ENTITY opt        "(?:[^&_fragpathseps;=/]*+&_fragpathnosep;)*+">
         <!ENTITY pathpart   "(?:~|\.\.?|&fragpath;)(?:/&path;|(?=[*?]|[+!@]\(|&fragpath;(?:[/*?]|[+!@]\()))|(?:~|\.\.?)(?=[&wordseps;]|$)">
 
+        <!ENTITY _fragpathseps_alt  "*?+!@&substseps;}">
+        <!ENTITY _fragpathnosep_alt "(?:[+!@](?!\()|\\.)?+">
+        <!ENTITY path_alt       "(?:[^&_fragpathseps_alt;]*+&_fragpathnosep_alt;)*+">
+        <!ENTITY fragpath_alt   "(?:[^&_fragpathseps_alt;/]*+&_fragpathnosep_alt;)*+">
+        <!ENTITY opt_alt        "(?:[^&_fragpathseps_alt;=/]*+&_fragpathnosep_alt;)*+">
+        <!ENTITY pathpart_alt   "(?:~|\.\.?|&fragpath_alt;)(?:/&path_alt;|(?=[*?]|[+!@]\(|&fragpath_alt;(?:[/*?]|[+!@]\()))|(?:~|\.\.?)(?=\}|$)">
+
         <!ENTITY _braceexpansion_spe     " &tab;&lt;>|&amp;;{}\\`'&quot;$">
         <!ENTITY _brace_noexpansion       "\{[^&_braceexpansion_spe;,]*+\}">
         <!ENTITY _braceexpansion_var     "\$(?:\{[^\[\]&_braceexpansion_spe;]*+(?:\[[*@a-zA-Z0-9]\])\})?">
@@ -28,9 +35,11 @@
         <!ENTITY braceexpansion "{&_braceexpansion;">
 
         <!ENTITY heredocq "(?|&quot;([^&quot;]+)&quot;|'([^']+)'|\\(.[^&wordseps;&substseps;]*))">
+
+        <!ENTITY arithmetic_as_subshell "\(((?:[^`'&quot;()$]++|\$\{[^`'&quot;(){}$]+\}|\$(?=[^{`'&quot;()])|`[^`]*+`|\((?1)(?:[)]|(?=['&quot;])))++)(?:[)](?=$|[^)])|[&quot;'])">
 ]>
 
-<language name="Bash" version="27" kateversion="5.79" section="Scripts" extensions="*.sh;*.bash;*.ebuild;*.eclass;*.nix;.bashrc;.bash_profile;.bash_login;.profile;PKGBUILD;APKBUILD" mimetype="application/x-shellscript" casesensitive="1" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
+<language name="Bash" version="30" kateversion="5.79" section="Scripts" extensions="*.sh;*.bash;*.ebuild;*.eclass;*.nix;.bashrc;.bash_profile;.bash_login;.profile;PKGBUILD;APKBUILD" mimetype="application/x-shellscript" casesensitive="1" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
 
 <!-- (c) 2004 by Wilbert Berendsen (wilbert@kde.nl)
     Changes by Matthew Woehlke (mw_triad@users.sourceforge.net)
@@ -40,6 +49,7 @@
 
   <highlighting>
     <list name="keywords">
+      <item>break</item>
       <item>case</item>
       <item>continue</item>
       <item>do</item>
@@ -66,7 +76,6 @@
       <item>alias</item>
       <item>bg</item>
       <item>bind</item>
-      <item>break</item>
       <item>builtin</item>
       <item>cd</item>
       <item>caller</item>
@@ -458,7 +467,7 @@
         <DetectSpaces attribute="Normal Text" context="#stay"/>
         <DetectChar attribute="Comment" context="Comment" char="#"/>
         <!-- start expression in double parentheses -->
-        <Detect2Chars attribute="Keyword" context="ExprDblParen" char="(" char1="(" beginRegion="expression"/>
+        <Detect2Chars context="ExprDblParenOrSubShell" char="(" char1="(" lookAhead="1"/>
         <!-- start a subshell -->
         <DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell"/>
         <!-- start expression in single/double brackets -->
@@ -554,8 +563,8 @@
       </context>
       <context attribute="Command" lineEndContext="#pop#pop" name="DispatchSubstVariables">
         <Detect2Chars attribute="Parameter Expansion" context="#pop!VarBraceStart" char="$" char1="{"/>
-        <StringDetect attribute="Parameter Expansion" context="#pop!ExprDblParenSubst" String="$((" beginRegion="expression"/>
-        <Detect2Chars attribute="Parameter Expansion" context="#pop!SubstCommand" char="$" char1="("/>
+        <StringDetect context="#pop!ExprDblParenSubstOrSubstCommand" String="$((" lookAhead="1"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop!SubstCommand" char="$" char1="(" beginRegion="subshell"/>
       </context>
       <context attribute="Command" lineEndContext="#pop#pop" name="DispatchStringVariables">
         <Detect2Chars attribute="String SingleQ" context="#pop!StringEsc" char="$" char1="'"/>
@@ -695,27 +704,30 @@
       </context>
       <context attribute="Path" lineEndContext="#stay" name="ExtGlobAndPop">
         <DetectChar attribute="Glob" context="#pop!PathThenPop" char=")"/>
-        <IncludeRules context="IncExtGlob"/>
-      </context>
-      <context attribute="Path" lineEndContext="#stay" name="RecursiveExtGlob">
-        <DetectChar attribute="Glob" context="#pop" char=")"/>
+        <IncludeRules context="FindWord"/>
         <IncludeRules context="IncExtGlob"/>
       </context>
-      <context attribute="Path" lineEndContext="#stay" name="IncExtGlob">
+      <context attribute="Path" lineEndContext="#stay" name="FindExtGlob">
         <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="?" char1="("/>
         <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="*" char1="("/>
         <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="+" char1="("/>
         <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="@" char1="("/>
         <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="!" char1="("/>
         <AnyChar attribute="Glob" context="#stay" String="|?*"/>
+      </context>
+      <context attribute="Path" lineEndContext="#stay" name="RecursiveExtGlob">
+        <DetectChar attribute="Glob" context="#pop" char=")"/>
         <IncludeRules context="FindWord"/>
+        <IncludeRules context="IncExtGlob"/>
+      </context>
+      <context attribute="Path" lineEndContext="#stay" name="IncExtGlob">
+        <IncludeRules context="FindExtGlob"/>
         <DetectChar context="PathMaybeBraceExpansion" char="{" lookAhead="1"/>
       </context>
       <context attribute="Path" lineEndContext="#pop#pop" name="PathThenPop">
         <AnyChar context="#pop#pop" String="&wordseps;`" lookAhead="1"/>
         <IncludeRules context="FindWord"/>
-        <IncludeRules context="FindExtGlobAndPop"/>
-        <AnyChar attribute="Glob" context="#stay" String="?*"/>
+        <IncludeRules context="FindExtGlob"/>
         <DetectChar context="PathMaybeBraceExpansion" char="{" lookAhead="1"/>
         <RegExpr attribute="Path" context="#stay" String="&path;"/>
       </context>
@@ -724,6 +736,47 @@
         <DetectChar attribute="Path" context="#pop" char="{"/>
       </context>
 
+      <!-- FindPathThenPopInAlternateValue consumes path in ${xx:here}-->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindPathThenPopInAlternateValue">
+        <IncludeRules context="FindExtGlobAndPopInAlternateValue"/>
+        <AnyChar attribute="Glob" context="PathThenPopInAlternateValue" String="?*"/>
+        <RegExpr attribute="Path" context="PathThenPopInAlternateValue" String="&pathpart_alt;"/>
+      </context>
+      <context attribute="Path" lineEndContext="#stay" name="FindExtGlobAndPopInAlternateValue">
+        <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="?" char1="("/>
+        <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="*" char1="("/>
+        <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="+" char1="("/>
+        <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="@" char1="("/>
+        <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="!" char1="("/>
+      </context>
+      <context attribute="Path" lineEndContext="#stay" name="FindExtGlobInAlternateValue">
+        <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="?" char1="("/>
+        <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="*" char1="("/>
+        <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="+" char1="("/>
+        <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="@" char1="("/>
+        <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="!" char1="("/>
+        <AnyChar attribute="Glob" context="#stay" String="|?*"/>
+      </context>
+      <context attribute="Path" lineEndContext="#stay" name="RecursiveExtGlobInAlternateValue">
+        <DetectChar attribute="Glob" context="#pop" char=")"/>
+        <DetectChar context="#pop" char="}" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindExtGlobInAlternateValue"/>
+      </context>
+      <context attribute="Path" lineEndContext="#stay" name="ExtGlobAndPopInAlternateValue">
+        <DetectChar attribute="Glob" context="#pop!PathThenPopInAlternateValue" char=")"/>
+        <DetectChar attribute="Error" context="#pop#pop" char="}"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindExtGlobInAlternateValue"/>
+      </context>
+      <context attribute="Path" lineEndContext="#pop#pop" name="PathThenPopInAlternateValue">
+        <DetectChar attribute="Parameter Expansion" context="#pop#pop" char="}"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindExtGlobAndPopInAlternateValue"/>
+        <AnyChar attribute="Glob" context="#stay" String="?*"/>
+        <RegExpr attribute="Path" context="#stay" String="&path_alt;"/>
+      </context>
+
       <context attribute="Pattern" lineEndContext="#stay" name="FindPattern">
         <Detect2Chars attribute="Glob" context="ExtPattern" char="?" char1="("/>
         <Detect2Chars attribute="Glob" context="ExtPattern" char="*" char1="("/>
@@ -1038,7 +1091,7 @@
 
       <!-- SubstCommand is called after a $( is encountered -->
       <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand" fallthroughContext="Command">
-        <DetectChar attribute="Parameter Expansion" context="#pop" char=")"/>
+        <DetectChar attribute="Parameter Expansion" context="#pop" char=")" endRegion="subshell"/>
         <IncludeRules context="Start"/>
       </context>
 
@@ -1084,7 +1137,7 @@
         <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="," char1=","/>
         <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarSub" char=":"/>
         <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarSubst" char="/"/>
-        <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" String="%#"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" String="-+=?#%"/>
         <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" String="^,"/>
         <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarTransformation" char="@"/>
       </context>
@@ -1109,7 +1162,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="AlternateValue">
         <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
         <IncludeRules context="FindWord"/>
-        <IncludeRules context="FindPattern"/>
+        <IncludeRules context="FindPathThenPopInAlternateValue"/>
       </context>
 
       <!-- called as soon as ${xxx^ are ${xxx, are encoutered -->
@@ -1125,7 +1178,7 @@
       </context>
       <context attribute="Pattern" lineEndContext="#stay" name="VarSubstPat">
         <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="/"/>
-        <IncludeRules context="AlternateValue"/>
+        <IncludeRules context="AlternatePatternValue"/>
       </context>
 
       <!-- called as soon as ${xxx@ is encoutered -->
@@ -1164,19 +1217,26 @@
 
 <!-- ====== These are the contexts that can be branched to ======= -->
 
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenOrSubShell">
+        <RegExpr attribute="Keyword" context="#pop!SubShell" String="\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/>
+        <Detect2Chars attribute="Keyword" context="#pop!ExprDblParen" char="(" char1="(" beginRegion="expression"/>
+      </context>
       <!-- ExprDblParen consumes an expression started in command mode till )) -->
       <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
         <DetectSpaces attribute="Normal Text" context="#stay"/>
         <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression"/>
         <IncludeRules context="FindExprDblParen"/>
+        <!-- ((cmd
+              ) # jump to SubShell context -->
+        <DetectChar attribute="Keyword" context="#pop!SubShell" char=")" endRegion="expression" beginRegion="subshell"/>
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="FindExprDblParen">
         <Detect2Chars attribute="Control" context="#stay" char="&amp;" char1="&amp;"/>
         <Detect2Chars attribute="Control" context="#stay" char="|" char1="|"/>
         <AnyChar attribute="Operator" context="#stay" String="+-!~*/%&lt;>=&amp;^|?:"/>
+        <AnyChar context="Number" String="0123456789" lookAhead="1"/>
         <DetectChar attribute="Control" context="#stay" char=","/>
         <DetectChar attribute="Normal Text" context="ExprSubDblParen" char="("/>
-        <AnyChar context="Number" String="0123456789" lookAhead="1"/>
         <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
         <IncludeRules context="FindWord"/>
         <DetectChar attribute="Error" context="#stay" char="#"/>
@@ -1184,8 +1244,9 @@
         <DetectIdentifier attribute="Variable" context="#stay"/>
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubDblParen">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
         <DetectChar attribute="Normal Text" context="#pop" char=")"/>
-        <IncludeRules context="ExprDblParen"/>
+        <IncludeRules context="FindExprDblParen"/>
       </context>
       <context attribute="Normal Text" lineEndContext="#pop" name="MaybeArithmeticBrace">
         <IncludeRules context="DispatchBraceExpansion"/>
@@ -1216,11 +1277,18 @@
         <AnyChar attribute="Error" context="#stay" String="8901234567"/>
       </context>
 
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubstOrSubstCommand">
+        <RegExpr attribute="Parameter Expansion" context="#pop!SubstCommand" String="\$\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/>
+        <StringDetect attribute="Parameter Expansion" context="#pop!ExprDblParenSubst" String="$((" beginRegion="expression"/>
+      </context>
       <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
       <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
         <DetectSpaces attribute="Normal Text" context="#stay"/>
         <Detect2Chars attribute="Variable" context="#pop" char=")" char1=")" endRegion="expression"/>
         <IncludeRules context="FindExprDblParen"/>
+        <!-- $((cmd
+              ) # jump to SubstCommand context -->
+        <DetectChar attribute="Parameter Expansion" context="#pop!SubstCommand" char=")" endRegion="expression" beginRegion="subshell"/>
       </context>
 
       <!-- ExprBracket consumes an expression till ] -->
@@ -1305,7 +1373,7 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValue">
-        <Detect2Chars attribute="Keyword" context="ExprDblParen" char="(" char1="(" beginRegion="expression"/>
+        <Detect2Chars context="ExprDblBracketDblParentOrSubValue" char="(" char1="(" lookAhead="1"/>
         <DetectChar context="ExprDblBracketSubValue" char="(" lookAhead="1"/>
         <DetectChar attribute="Operator" context="#pop#pop" char=")"/>
         <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="&amp;" char1="&amp;"/>
@@ -1320,6 +1388,18 @@
       <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketSubValue" fallthroughContext="#pop">
         <DetectChar attribute="Operator" context="ExprDblBracketNot" char="("/>
         <Detect2Chars context="#pop#pop" char="]" char1="]" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketDblParentOrSubValue">
+        <RegExpr context="#pop!ExprDblBracketSubValue" String="\((?=&arithmetic_as_subshell;)|" lookAhead="1"/>
+        <Detect2Chars attribute="Keyword" context="#pop!ExprDblBracketExprDblParen" char="(" char1="(" beginRegion="expression"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketExprDblParen">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression"/>
+        <IncludeRules context="FindExprDblParen"/>
+        <!-- ((cmd
+              ) # jump to ExprDblBracketValue context -->
+        <DetectChar attribute="Operator" context="ExprDblBracketValue" char=")" endRegion="expression" beginRegion="subshell"/>
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2" fallthroughContext="ExprDblBracketValue">
diff --git a/xml/bibtex.xml b/xml/bibtex.xml
--- a/xml/bibtex.xml
+++ b/xml/bibtex.xml
@@ -6,7 +6,7 @@
 	  <!ENTITY latexCmd	  	"\\([a-zA-Z@]+|[^ ])">
 	  <!ENTITY refKeyFormat  	"[a-zA-Z0-9_@\\-\\:]+"> <!--taken from kile 2.0.3-->
 	  ]>
-<language name="BibTeX" version="4" kateversion="5.0" extensions="*.bib" section="Markup" mimetype="text/x-bib" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Thomas Braun (thomas.braun@virtuell-zuhause.de)" license="LGPL">
+<language name="BibTeX" version="5" kateversion="5.0" extensions="*.bib" section="Markup" mimetype="text/x-bib" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Thomas Braun (thomas.braun@virtuell-zuhause.de)" license="LGPL">
   <highlighting>
     <list name="kw_entry">
       <item>@article</item> 
@@ -76,7 +76,7 @@
       <context name="CurlyBracket" attribute="Normal Text" lineEndContext="#stay">
 	      <DetectChar char="{" context="CurlyBracket"/>
 	      <RegExpr String="&latexCmd;" attribute="LatexCommand" context="#stay"/>
-	      <RegExpr String="}$" context="#pop#pop"/>
+	      <LineContinue char="}" context="#pop#pop"/>
 	      <DetectChar char="}" context="#pop"/>
       </context>
 
diff --git a/xml/cmake.xml b/xml/cmake.xml
--- a/xml/cmake.xml
+++ b/xml/cmake.xml
@@ -22,7 +22,7 @@
 
 <language
     name="CMake"
-    version="31"
+    version="33"
     kateversion="5.0"
     section="Other"
     extensions="CMakeLists.txt;*.cmake;*.cmake.in"
@@ -39,6 +39,7 @@
         <item>cmake_language</item>
         <item>cmake_minimum_required</item>
         <item>cmake_parse_arguments</item>
+        <item>cmake_path</item>
         <item>cmake_policy</item>
         <item>configure_file</item>
         <item>continue</item>
@@ -196,6 +197,47 @@
     <list name="cmake_parse_arguments_nargs">
       <item>PARSE_ARGV</item>
     </list>
+    <list name="cmake_path_nargs">
+      <item>ABSOLUTE_PATH</item>
+      <item>APPEND</item>
+      <item>APPEND_STRING</item>
+      <item>BASE_DIRECTORY</item>
+      <item>CONVERT</item>
+      <item>EXTENSION</item>
+      <item>FILENAME</item>
+      <item>GET</item>
+      <item>HASH</item>
+      <item>HAS_EXTENSION</item>
+      <item>HAS_FILENAME</item>
+      <item>HAS_PARENT_PATH</item>
+      <item>HAS_RELATIVE_PART</item>
+      <item>HAS_ROOT_DIRECTORY</item>
+      <item>HAS_ROOT_NAME</item>
+      <item>HAS_ROOT_PATH</item>
+      <item>HAS_STEM</item>
+      <item>IS_ABSOLUTE</item>
+      <item>IS_PREFIX</item>
+      <item>IS_RELATIVE</item>
+      <item>LAST_ONLY</item>
+      <item>NATIVE_PATH</item>
+      <item>NORMALIZE</item>
+      <item>NORMAL_PATH</item>
+      <item>OUTPUT_VARIABLE</item>
+      <item>PARENT_PATH</item>
+      <item>RELATIVE_PART</item>
+      <item>RELATIVE_PATH</item>
+      <item>REMOVE_EXTENSION</item>
+      <item>REMOVE_FILENAME</item>
+      <item>REPLACE_EXTENSION</item>
+      <item>REPLACE_FILENAME</item>
+      <item>ROOT_DIRECTORY</item>
+      <item>ROOT_NAME</item>
+      <item>ROOT_PATH</item>
+      <item>SET</item>
+      <item>STEM</item>
+      <item>TO_CMAKE_PATH_LIST</item>
+      <item>TO_NATIVE_PATH_LIST</item>
+    </list>
     <list name="cmake_policy_nargs">
       <item>GET</item>
       <item>POP</item>
@@ -211,8 +253,10 @@
       <item>@ONLY</item>
       <item>COPYONLY</item>
       <item>ESCAPE_QUOTES</item>
+      <item>FILE_PERMISSIONS</item>
       <item>NEWLINE_STYLE</item>
       <item>NO_SOURCE_PERMISSIONS</item>
+      <item>USE_SOURCE_PERMISSIONS</item>
     </list>
     <list name="configure_file_sargs">
       <item>CRLF</item>
@@ -291,6 +335,7 @@
       <item>ARCHIVE_CREATE</item>
       <item>ARCHIVE_EXTRACT</item>
       <item>BASE_DIRECTORY</item>
+      <item>BUNDLE_EXECUTABLE</item>
       <item>CHMOD</item>
       <item>CHMOD_RECURSE</item>
       <item>COMPRESSION</item>
@@ -300,13 +345,17 @@
       <item>CONFIGURE_DEPENDS</item>
       <item>CONTENT</item>
       <item>COPY</item>
+      <item>COPY_FILE</item>
       <item>DESTINATION</item>
+      <item>DIRECTORIES</item>
       <item>DIRECTORY</item>
       <item>DIRECTORY_PERMISSIONS</item>
       <item>DOWNLOAD</item>
       <item>ENCODING</item>
       <item>ESCAPE_QUOTES</item>
       <item>EXCLUDE</item>
+      <item>EXECUTABLES</item>
+      <item>EXPAND_TILDE</item>
       <item>EXPECTED_HASH</item>
       <item>EXPECTED_MD5</item>
       <item>FILES</item>
@@ -327,6 +376,7 @@
       <item>INSTALL</item>
       <item>LENGTH_MAXIMUM</item>
       <item>LENGTH_MINIMUM</item>
+      <item>LIBRARIES</item>
       <item>LIMIT</item>
       <item>LIMIT_COUNT</item>
       <item>LIMIT_INPUT</item>
@@ -337,17 +387,26 @@
       <item>LOG</item>
       <item>MAKE_DIRECTORY</item>
       <item>MD5</item>
+      <item>MODULES</item>
       <item>MTIME</item>
       <item>NETRC</item>
       <item>NETRC_FILE</item>
       <item>NEWLINE_CONSUME</item>
       <item>NEWLINE_STYLE</item>
       <item>NO_HEX_CONVERSION</item>
+      <item>NO_REPLACE</item>
       <item>NO_SOURCE_PERMISSIONS</item>
       <item>OFFSET</item>
+      <item>ONLY_IF_DIFFERENT</item>
       <item>OUTPUT</item>
       <item>PATTERN</item>
       <item>PERMISSIONS</item>
+      <item>POST_EXCLUDE_FILES</item>
+      <item>POST_EXCLUDE_REGEXES</item>
+      <item>POST_INCLUDE_FILES</item>
+      <item>POST_INCLUDE_REGEXES</item>
+      <item>PRE_EXCLUDE_REGEXES</item>
+      <item>PRE_INCLUDE_REGEXES</item>
       <item>READ</item>
       <item>READ_SYMLINK</item>
       <item>REAL_PATH</item>
@@ -358,6 +417,8 @@
       <item>REMOVE</item>
       <item>REMOVE_RECURSE</item>
       <item>RENAME</item>
+      <item>RESOLVED_DEPENDENCIES_VAR</item>
+      <item>RESULT</item>
       <item>RESULT_VARIABLE</item>
       <item>SHA1</item>
       <item>SHA224</item>
@@ -381,6 +442,7 @@
       <item>TOUCH_NOCREATE</item>
       <item>TO_CMAKE_PATH</item>
       <item>TO_NATIVE_PATH</item>
+      <item>UNRESOLVED_DEPENDENCIES_VAR</item>
       <item>UPLOAD</item>
       <item>USERPWD</item>
       <item>USE_SOURCE_PERMISSIONS</item>
@@ -433,6 +495,7 @@
       <item>DOC</item>
       <item>HINTS</item>
       <item>NAMES</item>
+      <item>NO_CACHE</item>
       <item>NO_CMAKE_ENVIRONMENT_PATH</item>
       <item>NO_CMAKE_FIND_ROOT_PATH</item>
       <item>NO_CMAKE_PATH</item>
@@ -451,6 +514,7 @@
       <item>HINTS</item>
       <item>NAMES</item>
       <item>NAMES_PER_DIR</item>
+      <item>NO_CACHE</item>
       <item>NO_CMAKE_ENVIRONMENT_PATH</item>
       <item>NO_CMAKE_FIND_ROOT_PATH</item>
       <item>NO_CMAKE_PATH</item>
@@ -495,6 +559,7 @@
       <item>DOC</item>
       <item>HINTS</item>
       <item>NAMES</item>
+      <item>NO_CACHE</item>
       <item>NO_CMAKE_ENVIRONMENT_PATH</item>
       <item>NO_CMAKE_FIND_ROOT_PATH</item>
       <item>NO_CMAKE_PATH</item>
@@ -513,6 +578,7 @@
       <item>HINTS</item>
       <item>NAMES</item>
       <item>NAMES_PER_DIR</item>
+      <item>NO_CACHE</item>
       <item>NO_CMAKE_ENVIRONMENT_PATH</item>
       <item>NO_CMAKE_FIND_ROOT_PATH</item>
       <item>NO_CMAKE_PATH</item>
@@ -883,6 +949,7 @@
     </list>
     <list name="build_command_nargs">
       <item>CONFIGURATION</item>
+      <item>PARALLEL_LEVEL</item>
       <item>TARGET</item>
     </list>
     <list name="create_test_sourcelist_nargs">
@@ -914,6 +981,7 @@
       <item>CUDA</item>
       <item>CXX</item>
       <item>Fortran</item>
+      <item>HIP</item>
       <item>ISPC</item>
       <item>Java</item>
       <item>OBJC</item>
@@ -951,6 +1019,7 @@
       <item>COMPONENT</item>
       <item>CONFIGURATIONS</item>
       <item>DESTINATION</item>
+      <item>DIRECTORIES</item>
       <item>DIRECTORY</item>
       <item>DIRECTORY_PERMISSIONS</item>
       <item>EXCLUDE</item>
@@ -963,6 +1032,7 @@
       <item>FILES_MATCHING</item>
       <item>FILE_PERMISSIONS</item>
       <item>FRAMEWORK</item>
+      <item>IMPORTED_RUNTIME_ARTIFACTS</item>
       <item>INCLUDES</item>
       <item>LIBRARY</item>
       <item>MESSAGE_NEVER</item>
@@ -974,6 +1044,12 @@
       <item>OPTIONAL</item>
       <item>PATTERN</item>
       <item>PERMISSIONS</item>
+      <item>POST_EXCLUDE_FILES</item>
+      <item>POST_EXCLUDE_REGEXES</item>
+      <item>POST_INCLUDE_FILES</item>
+      <item>POST_INCLUDE_REGEXES</item>
+      <item>PRE_EXCLUDE_REGEXES</item>
+      <item>PRE_INCLUDE_REGEXES</item>
       <item>PRIVATE_HEADER</item>
       <item>PROGRAMS</item>
       <item>PUBLIC_HEADER</item>
@@ -981,8 +1057,11 @@
       <item>RENAME</item>
       <item>RESOURCE</item>
       <item>RUNTIME</item>
+      <item>RUNTIME_DEPENDENCIES</item>
+      <item>RUNTIME_DEPENDENCY_SET</item>
       <item>SCRIPT</item>
       <item>TARGETS</item>
+      <item>TYPE</item>
       <item>USE_SOURCE_PERMISSIONS</item>
     </list>
     <list name="install_sargs">
@@ -1028,6 +1107,7 @@
       <item>CUDA</item>
       <item>CXX</item>
       <item>Fortran</item>
+      <item>HIP</item>
       <item>ISPC</item>
       <item>Java</item>
       <item>NONE</item>
@@ -1068,6 +1148,8 @@
       <item>c_restrict</item>
       <item>c_static_assert</item>
       <item>c_std_11</item>
+      <item>c_std_17</item>
+      <item>c_std_23</item>
       <item>c_std_90</item>
       <item>c_std_99</item>
       <item>c_variadic_macros</item>
@@ -1076,6 +1158,7 @@
       <item>cuda_std_14</item>
       <item>cuda_std_17</item>
       <item>cuda_std_20</item>
+      <item>cuda_std_23</item>
       <item>cxx_aggregate_default_initializers</item>
       <item>cxx_alias_templates</item>
       <item>cxx_alignas</item>
@@ -1126,6 +1209,7 @@
       <item>cxx_std_14</item>
       <item>cxx_std_17</item>
       <item>cxx_std_20</item>
+      <item>cxx_std_23</item>
       <item>cxx_std_98</item>
       <item>cxx_strong_enums</item>
       <item>cxx_template_template_parameters</item>
@@ -1146,6 +1230,7 @@
       <item>PUBLIC</item>
     </list>
     <list name="target_include_directories_nargs">
+      <item>AFTER</item>
       <item>BEFORE</item>
       <item>INTERFACE</item>
       <item>PRIVATE</item>
@@ -1201,6 +1286,7 @@
       <item>OUTPUT_VARIABLE</item>
       <item>RUN_OUTPUT_VARIABLE</item>
       <item>RUN_RESULT_VAR</item>
+      <item>WORKING_DIRECTORY</item>
     </list>
     <list name="ctest_build_nargs">
       <item>APPEND</item>
@@ -1342,6 +1428,7 @@
       <item>CMAKE_ANDROID_NDK_DEPRECATED_HEADERS</item>
       <item>CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG</item>
       <item>CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION</item>
+      <item>CMAKE_ANDROID_NDK_VERSION</item>
       <item>CMAKE_ANDROID_PROCESS_MAX</item>
       <item>CMAKE_ANDROID_PROGUARD</item>
       <item>CMAKE_ANDROID_PROGUARD_CONFIG_PATH</item>
@@ -1497,6 +1584,9 @@
       <item>CMAKE_GENERATOR_NO_COMPILER_ENV</item>
       <item>CMAKE_GENERATOR_PLATFORM</item>
       <item>CMAKE_GENERATOR_TOOLSET</item>
+      <item>CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND</item>
+      <item>CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM</item>
+      <item>CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL</item>
       <item>CMAKE_GLOBAL_AUTOGEN_TARGET</item>
       <item>CMAKE_GLOBAL_AUTOGEN_TARGET_NAME</item>
       <item>CMAKE_GLOBAL_AUTORCC_TARGET</item>
@@ -1576,6 +1666,10 @@
       <item>CMAKE_ISPC_HEADER_DIRECTORY</item>
       <item>CMAKE_ISPC_HEADER_SUFFIX</item>
       <item>CMAKE_ISPC_INSTRUCTION_SETS</item>
+      <item>CMAKE_JAR_CLASSES_PREFIX</item>
+      <item>CMAKE_JAVA_COMPILE_FLAGS</item>
+      <item>CMAKE_JAVA_INCLUDE_PATH</item>
+      <item>CMAKE_JNI_TARGET</item>
       <item>CMAKE_JOB_POOLS</item>
       <item>CMAKE_JOB_POOL_COMPILE</item>
       <item>CMAKE_JOB_POOL_LINK</item>
@@ -1787,6 +1881,7 @@
       <item>CPACK_COMPONENTS_GROUPING</item>
       <item>CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY</item>
       <item>CPACK_CREATE_DESKTOP_LINKS</item>
+      <item>CPACK_CUSTOM_INSTALL_VARIABLES</item>
       <item>CPACK_CYGWIN_BUILD_SCRIPT</item>
       <item>CPACK_CYGWIN_PATCH_FILE</item>
       <item>CPACK_CYGWIN_PATCH_NUMBER</item>
@@ -1818,6 +1913,7 @@
       <item>CPACK_DEBIAN_PACKAGE_REPLACES</item>
       <item>CPACK_DEBIAN_PACKAGE_SECTION</item>
       <item>CPACK_DEBIAN_PACKAGE_SHLIBDEPS</item>
+      <item>CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS</item>
       <item>CPACK_DEBIAN_PACKAGE_SOURCE</item>
       <item>CPACK_DEBIAN_PACKAGE_SUGGESTS</item>
       <item>CPACK_DEBIAN_PACKAGE_VERSION</item>
@@ -1826,6 +1922,7 @@
       <item>CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK</item>
       <item>CPACK_DMG_DS_STORE</item>
       <item>CPACK_DMG_DS_STORE_SETUP_SCRIPT</item>
+      <item>CPACK_DMG_FILESYSTEM</item>
       <item>CPACK_DMG_FORMAT</item>
       <item>CPACK_DMG_SLA_DIR</item>
       <item>CPACK_DMG_SLA_LANGUAGES</item>
@@ -1865,6 +1962,7 @@
       <item>CPACK_IFW_PACKAGE_WINDOW_ICON</item>
       <item>CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT</item>
       <item>CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH</item>
+      <item>CPACK_IFW_PACKAGE_WIZARD_SHOW_PAGE_LIST</item>
       <item>CPACK_IFW_PACKAGE_WIZARD_STYLE</item>
       <item>CPACK_IFW_PRODUCT_URL</item>
       <item>CPACK_IFW_REPOGEN_EXECUTABLE</item>
@@ -1880,12 +1978,15 @@
       <item>CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS</item>
       <item>CPACK_INSTALL_SCRIPTS</item>
       <item>CPACK_MONOLITHIC_INSTALL</item>
+      <item>CPACK_NSIS_BRANDING_TEXT</item>
+      <item>CPACK_NSIS_BRANDING_TEXT_TRIM_POSITION</item>
       <item>CPACK_NSIS_COMPRESSOR</item>
       <item>CPACK_NSIS_CONTACT</item>
       <item>CPACK_NSIS_CREATE_ICONS_EXTRA</item>
       <item>CPACK_NSIS_DELETE_ICONS_EXTRA</item>
       <item>CPACK_NSIS_DISPLAY_NAME</item>
       <item>CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL</item>
+      <item>CPACK_NSIS_EXECUTABLE</item>
       <item>CPACK_NSIS_EXECUTABLES_DIRECTORY</item>
       <item>CPACK_NSIS_EXTRA_INSTALL_COMMANDS</item>
       <item>CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS</item>
@@ -1918,8 +2019,12 @@
       <item>CPACK_NUGET_PACKAGE_DESCRIPTION</item>
       <item>CPACK_NUGET_PACKAGE_DESCRIPTION_SUMMARY</item>
       <item>CPACK_NUGET_PACKAGE_HOMEPAGE_URL</item>
+      <item>CPACK_NUGET_PACKAGE_ICON</item>
       <item>CPACK_NUGET_PACKAGE_ICONURL</item>
+      <item>CPACK_NUGET_PACKAGE_LANGUAGE</item>
       <item>CPACK_NUGET_PACKAGE_LICENSEURL</item>
+      <item>CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION</item>
+      <item>CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME</item>
       <item>CPACK_NUGET_PACKAGE_NAME</item>
       <item>CPACK_NUGET_PACKAGE_OWNERS</item>
       <item>CPACK_NUGET_PACKAGE_RELEASE_NOTES</item>
@@ -2037,6 +2142,7 @@
       <item>CPACK_SOURCE_STRIP_FILES</item>
       <item>CPACK_STRIP_FILES</item>
       <item>CPACK_SYSTEM_NAME</item>
+      <item>CPACK_THREADS</item>
       <item>CPACK_TOPLEVEL_TAG</item>
       <item>CPACK_VERBATIM_VARIABLES</item>
       <item>CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION</item>
@@ -2196,6 +2302,7 @@
       <item>PROJECT_BINARY_DIR</item>
       <item>PROJECT_DESCRIPTION</item>
       <item>PROJECT_HOMEPAGE_URL</item>
+      <item>PROJECT_IS_TOP_LEVEL</item>
       <item>PROJECT_NAME</item>
       <item>PROJECT_SOURCE_DIR</item>
       <item>PROJECT_VERSION</item>
@@ -2206,8 +2313,10 @@
       <item>QTIFWDIR</item>
       <item>SWIG_OUTFILE_DIR</item>
       <item>SWIG_SOURCE_FILE_EXTENSIONS</item>
+      <item>SWIG_USE_SWIG_DEPENDENCIES</item>
       <item>THREADS_PREFER_PTHREAD_FLAG</item>
       <item>UNIX</item>
+      <item>UseSWIG_MODULE_VERSION</item>
       <item>WIN32</item>
       <item>WINCE</item>
       <item>WINDOWS_PHONE</item>
@@ -2220,8 +2329,10 @@
       <item>CMAKE_HOME_DIRECTORY</item>
       <item>CMAKE_INTERNAL_PLATFORM_ABI</item>
       <item>CMAKE_NOT_USING_CONFIG_FLAGS</item>
+      <item>CMAKE_OBJDUMP</item>
       <item>CMAKE_SUPPRESS_DEVELOPER_ERRORS</item>
       <item>CMAKE_SUPPRESS_DEVELOPER_WARNINGS</item>
+      <item>CMAKE_SYSTEM_ARCH</item>
       <item>CMAKE_VS_INTEL_Fortran_PROJECT_VERSION</item>
       <item>CPACK_INSTALL_PREFIX</item>
       <item>CPACK_INSTALL_SCRIPT</item>
@@ -2248,12 +2359,14 @@
       <item>CMAKE_NO_VERBOSE</item>
       <item>CMAKE_OSX_ARCHITECTURES</item>
       <item>CMAKE_PREFIX_PATH</item>
+      <item>CMAKE_TOOLCHAIN_FILE</item>
       <item>CSFLAGS</item>
       <item>CTEST_INTERACTIVE_DEBUG_MODE</item>
       <item>CTEST_OUTPUT_ON_FAILURE</item>
       <item>CTEST_PARALLEL_LEVEL</item>
       <item>CTEST_PROGRESS_OUTPUT</item>
       <item>CTEST_USE_LAUNCHERS_DEFAULT</item>
+      <item>CUDAARCHS</item>
       <item>CUDACXX</item>
       <item>CUDAFLAGS</item>
       <item>CUDAHOSTCXX</item>
@@ -2326,6 +2439,7 @@
       <item>DEFINITIONS</item>
       <item>EXCLUDE_FROM_ALL</item>
       <item>IMPLICIT_DEPENDS_INCLUDE_TRANSFORM</item>
+      <item>IMPORTED_TARGETS</item>
       <item>INCLUDE_DIRECTORIES</item>
       <item>INCLUDE_REGULAR_EXPRESSION</item>
       <item>INTERPROCEDURAL_OPTIMIZATION</item>
@@ -2429,6 +2543,7 @@
       <item>ENABLE_EXPORTS</item>
       <item>EXCLUDE_FROM_ALL</item>
       <item>EXCLUDE_FROM_DEFAULT_BUILD</item>
+      <item>EXPORT_COMPILE_COMMANDS</item>
       <item>EXPORT_NAME</item>
       <item>EXPORT_PROPERTIES</item>
       <item>EchoString</item>
@@ -2554,6 +2669,7 @@
       <item>UNITY_BUILD_CODE_AFTER_INCLUDE</item>
       <item>UNITY_BUILD_CODE_BEFORE_INCLUDE</item>
       <item>UNITY_BUILD_MODE</item>
+      <item>UNITY_BUILD_UNIQUE_ID</item>
       <item>VERSION</item>
       <item>VISIBILITY_INLINES_HIDDEN</item>
       <item>VS_CONFIGURATION_TYPE</item>
@@ -2782,6 +2898,7 @@
       <item>TARGET_BUNDLE_DIR</item>
       <item>TARGET_BUNDLE_CONTENT_DIR</item>
       <item>TARGET_PROPERTY</item>
+      <item>TARGET_RUNTIME_DLLS</item>
       <item>INSTALL_PREFIX</item>
       <item>TARGET_NAME</item>
       <item>LINK_ONLY</item>
@@ -2790,6 +2907,8 @@
       <item>MAKE_C_IDENTIFIER</item>
       <item>TARGET_OBJECTS</item>
       <item>SHELL_PATH</item>
+      <item>OUTPUT_CONFIG</item>
+      <item>COMMAND_CONFIG</item>
     </list>
 
     <contexts>
@@ -2801,6 +2920,7 @@
         <WordDetect String="cmake_language" insensitive="true" attribute="Command" context="cmake_language_ctx" />
         <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_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="Command" context="continue_ctx" />
@@ -2950,6 +3070,14 @@
         <keyword attribute="Named Args" context="#stay" String="cmake_parse_arguments_nargs" />
         <IncludeRules context="User Function Args" />
       </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="cmake_path_ctx">
+        <DetectChar attribute="Normal Text" context="cmake_path_ctx_op" char="(" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="cmake_path_ctx_op">
+        <IncludeRules context="EndCmdPop2" />
+        <keyword attribute="Named Args" context="#stay" String="cmake_path_nargs" />
+        <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="(" />
       </context>
@@ -3860,7 +3988,7 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect More target-properties">
-        <RegExpr attribute="Property" context="#stay" String="\b(?:XCODE_ATTRIBUTE_&id_re;|VS_SOURCE_SETTINGS_&id_re;|VS_GLOBAL_&id_re;|VS_DOTNET_REFERENCE_&id_re;|VS_DOTNET_REFERENCEPROP_&id_re;_TAG_&id_re;|STATIC_LIBRARY_FLAGS_&id_re;|RUNTIME_OUTPUT_NAME_&id_re;|RUNTIME_OUTPUT_DIRECTORY_&id_re;|PDB_OUTPUT_DIRECTORY_&id_re;|PDB_NAME_&id_re;|OUTPUT_NAME_&id_re;|OSX_ARCHITECTURES_&id_re;|MAP_IMPORTED_CONFIG_&id_re;|LOCATION_&id_re;|LINK_INTERFACE_MULTIPLICITY_&id_re;|LINK_INTERFACE_LIBRARIES_&id_re;|LINK_FLAGS_&id_re;|LIBRARY_OUTPUT_NAME_&id_re;|LIBRARY_OUTPUT_DIRECTORY_&id_re;|INTERPROCEDURAL_OPTIMIZATION_&id_re;|IMPORTED_SONAME_&id_re;|IMPORTED_OBJECTS_&id_re;|IMPORTED_NO_SONAME_&id_re;|IMPORTED_LOCATION_&id_re;|IMPORTED_LINK_INTERFACE_MULTIPLICITY_&id_re;|IMPORTED_LINK_INTERFACE_LIBRARIES_&id_re;|IMPORTED_LINK_INTERFACE_LANGUAGES_&id_re;|IMPORTED_LINK_DEPENDENT_LIBRARIES_&id_re;|IMPORTED_LIBNAME_&id_re;|IMPORTED_IMPLIB_&id_re;|FRAMEWORK_MULTI_CONFIG_POSTFIX_&id_re;|EXCLUDE_FROM_DEFAULT_BUILD_&id_re;|COMPILE_PDB_OUTPUT_DIRECTORY_&id_re;|COMPILE_PDB_NAME_&id_re;|ARCHIVE_OUTPUT_NAME_&id_re;|ARCHIVE_OUTPUT_DIRECTORY_&id_re;|&id_re;_VISIBILITY_PRESET|&id_re;_POSTFIX|&id_re;_OUTPUT_NAME|&id_re;_INCLUDE_WHAT_YOU_USE|&id_re;_CPPLINT|&id_re;_CPPCHECK|&id_re;_COMPILER_LAUNCHER|&id_re;_CLANG_TIDY)\b" />
+        <RegExpr attribute="Property" context="#stay" String="\b(?:XCODE_EMBED_&id_re;_REMOVE_HEADERS_ON_COPY|XCODE_EMBED_&id_re;_PATH|XCODE_EMBED_&id_re;_CODE_SIGN_ON_COPY|XCODE_EMBED_&id_re;|XCODE_ATTRIBUTE_&id_re;|VS_SOURCE_SETTINGS_&id_re;|VS_GLOBAL_&id_re;|VS_DOTNET_REFERENCE_&id_re;|VS_DOTNET_REFERENCEPROP_&id_re;_TAG_&id_re;|STATIC_LIBRARY_FLAGS_&id_re;|RUNTIME_OUTPUT_NAME_&id_re;|RUNTIME_OUTPUT_DIRECTORY_&id_re;|PDB_OUTPUT_DIRECTORY_&id_re;|PDB_NAME_&id_re;|OUTPUT_NAME_&id_re;|OSX_ARCHITECTURES_&id_re;|MAP_IMPORTED_CONFIG_&id_re;|LOCATION_&id_re;|LINK_INTERFACE_MULTIPLICITY_&id_re;|LINK_INTERFACE_LIBRARIES_&id_re;|LINK_FLAGS_&id_re;|LIBRARY_OUTPUT_NAME_&id_re;|LIBRARY_OUTPUT_DIRECTORY_&id_re;|INTERPROCEDURAL_OPTIMIZATION_&id_re;|IMPORTED_SONAME_&id_re;|IMPORTED_OBJECTS_&id_re;|IMPORTED_NO_SONAME_&id_re;|IMPORTED_LOCATION_&id_re;|IMPORTED_LINK_INTERFACE_MULTIPLICITY_&id_re;|IMPORTED_LINK_INTERFACE_LIBRARIES_&id_re;|IMPORTED_LINK_INTERFACE_LANGUAGES_&id_re;|IMPORTED_LINK_DEPENDENT_LIBRARIES_&id_re;|IMPORTED_LIBNAME_&id_re;|IMPORTED_IMPLIB_&id_re;|FRAMEWORK_MULTI_CONFIG_POSTFIX_&id_re;|EXCLUDE_FROM_DEFAULT_BUILD_&id_re;|COMPILE_PDB_OUTPUT_DIRECTORY_&id_re;|COMPILE_PDB_NAME_&id_re;|ARCHIVE_OUTPUT_NAME_&id_re;|ARCHIVE_OUTPUT_DIRECTORY_&id_re;|&id_re;_VISIBILITY_PRESET|&id_re;_POSTFIX|&id_re;_OUTPUT_NAME|&id_re;_LINKER_LAUNCHER|&id_re;_INCLUDE_WHAT_YOU_USE|&id_re;_CPPLINT|&id_re;_CPPCHECK|&id_re;_COMPILER_LAUNCHER|&id_re;_CLANG_TIDY)\b" />
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect More source-properties">
@@ -3894,7 +4022,7 @@
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect More Builtin Variables">
         <RegExpr attribute="CMake Internal Variable" context="#stay" String="\b(?:CMAKE_&id_re;_PLATFORM_ID|CMAKE_&id_re;_COMPILER_VERSION_INTERNAL|CMAKE_&id_re;_COMPILER_ARCHITECTURE_ID|CMAKE_&id_re;_COMPILER_ABI)\b" />
-        <RegExpr attribute="Builtin Variable" context="#stay" String="\b(?:SWIG_MODULE_&id_re;_EXTRA_DEPS|ExternalData_URL_ALGO_&id_re;_&id_re;|ExternalData_CUSTOM_SCRIPT_&id_re;|DOXYGEN_&id_re;|CPACK_WIX_PROPERTY_&id_re;|CPACK_WIX_&id_re;_EXTRA_FLAGS|CPACK_WIX_&id_re;_EXTENSIONS|CPACK_RPM_NO_&id_re;_INSTALL_PREFIX_RELOCATION|CPACK_RPM_&id_re;_USER_FILELIST|CPACK_RPM_&id_re;_USER_BINARY_SPECFILE|CPACK_RPM_&id_re;_PACKAGE_URL|CPACK_RPM_&id_re;_PACKAGE_SUMMARY|CPACK_RPM_&id_re;_PACKAGE_SUGGESTS|CPACK_RPM_&id_re;_PACKAGE_REQUIRES_PREUN|CPACK_RPM_&id_re;_PACKAGE_REQUIRES_PRE|CPACK_RPM_&id_re;_PACKAGE_REQUIRES_POSTUN|CPACK_RPM_&id_re;_PACKAGE_REQUIRES_POST|CPACK_RPM_&id_re;_PACKAGE_REQUIRES|CPACK_RPM_&id_re;_PACKAGE_PROVIDES|CPACK_RPM_&id_re;_PACKAGE_PREFIX|CPACK_RPM_&id_re;_PACKAGE_OBSOLETES|CPACK_RPM_&id_re;_PACKAGE_NAME|CPACK_RPM_&id_re;_PACKAGE_GROUP|CPACK_RPM_&id_re;_PACKAGE_DESCRIPTION|CPACK_RPM_&id_re;_PACKAGE_CONFLICTS|CPACK_RPM_&id_re;_PACKAGE_AUTOREQPROV|CPACK_RPM_&id_re;_PACKAGE_AUTOREQ|CPACK_RPM_&id_re;_PACKAGE_AUTOPROV|CPACK_RPM_&id_re;_PACKAGE_ARCHITECTURE|CPACK_RPM_&id_re;_FILE_NAME|CPACK_RPM_&id_re;_DEFAULT_USER|CPACK_RPM_&id_re;_DEFAULT_GROUP|CPACK_RPM_&id_re;_DEFAULT_FILE_PERMISSIONS|CPACK_RPM_&id_re;_DEFAULT_DIR_PERMISSIONS|CPACK_RPM_&id_re;_DEBUGINFO_PACKAGE|CPACK_RPM_&id_re;_DEBUGINFO_FILE_NAME|CPACK_RPM_&id_re;_BUILD_SOURCE_DIRS_PREFIX|CPACK_PREFLIGHT_&id_re;_SCRIPT|CPACK_POSTFLIGHT_&id_re;_SCRIPT|CPACK_NUGET_PACKAGE_DEPENDENCIES_&id_re;_VERSION|CPACK_NUGET_&id_re;_PACKAGE_VERSION|CPACK_NUGET_&id_re;_PACKAGE_TITLE|CPACK_NUGET_&id_re;_PACKAGE_TAGS|CPACK_NUGET_&id_re;_PACKAGE_RELEASE_NOTES|CPACK_NUGET_&id_re;_PACKAGE_OWNERS|CPACK_NUGET_&id_re;_PACKAGE_NAME|CPACK_NUGET_&id_re;_PACKAGE_LICENSEURL|CPACK_NUGET_&id_re;_PACKAGE_ICONURL|CPACK_NUGET_&id_re;_PACKAGE_HOMEPAGE_URL|CPACK_NUGET_&id_re;_PACKAGE_DESCRIPTION_SUMMARY|CPACK_NUGET_&id_re;_PACKAGE_DESCRIPTION|CPACK_NUGET_&id_re;_PACKAGE_DEPENDENCIES_&id_re;_VERSION|CPACK_NUGET_&id_re;_PACKAGE_DEPENDENCIES|CPACK_NUGET_&id_re;_PACKAGE_COPYRIGHT|CPACK_NUGET_&id_re;_PACKAGE_AUTHORS|CPACK_NSIS_&id_re;_INSTALL_DIRECTORY|CPACK_DMG_&id_re;_FILE_NAME|CPACK_DEBIAN_&id_re;_PACKAGE_SUGGESTS|CPACK_DEBIAN_&id_re;_PACKAGE_SOURCE|CPACK_DEBIAN_&id_re;_PACKAGE_SHLIBDEPS|CPACK_DEBIAN_&id_re;_PACKAGE_SECTION|CPACK_DEBIAN_&id_re;_PACKAGE_REPLACES|CPACK_DEBIAN_&id_re;_PACKAGE_RECOMMENDS|CPACK_DEBIAN_&id_re;_PACKAGE_PROVIDES|CPACK_DEBIAN_&id_re;_PACKAGE_PRIORITY|CPACK_DEBIAN_&id_re;_PACKAGE_PREDEPENDS|CPACK_DEBIAN_&id_re;_PACKAGE_NAME|CPACK_DEBIAN_&id_re;_PACKAGE_ENHANCES|CPACK_DEBIAN_&id_re;_PACKAGE_DEPENDS|CPACK_DEBIAN_&id_re;_PACKAGE_CONTROL_STRICT_PERMISSION|CPACK_DEBIAN_&id_re;_PACKAGE_CONTROL_EXTRA|CPACK_DEBIAN_&id_re;_PACKAGE_CONFLICTS|CPACK_DEBIAN_&id_re;_PACKAGE_BREAKS|CPACK_DEBIAN_&id_re;_PACKAGE_ARCHITECTURE|CPACK_DEBIAN_&id_re;_FILE_NAME|CPACK_DEBIAN_&id_re;_DESCRIPTION|CPACK_DEBIAN_&id_re;_DEBUGINFO_PACKAGE|CPACK_COMPONENT_&id_re;_REQUIRED|CPACK_COMPONENT_&id_re;_HIDDEN|CPACK_COMPONENT_&id_re;_GROUP|CPACK_COMPONENT_&id_re;_DISPLAY_NAME|CPACK_COMPONENT_&id_re;_DISABLED|CPACK_COMPONENT_&id_re;_DESCRIPTION|CPACK_COMPONENT_&id_re;_DEPENDS|CPACK_BINARY_&id_re;|CPACK_ARCHIVE_&id_re;_FILE_NAME|CPACK_&id_re;_COMPONENT_INSTALL|CMAKE_XCODE_ATTRIBUTE_&id_re;|CMAKE_USER_MAKE_RULES_OVERRIDE_&id_re;|CMAKE_STATIC_LINKER_FLAGS_&id_re;_INIT|CMAKE_STATIC_LINKER_FLAGS_&id_re;|CMAKE_SHARED_LINKER_FLAGS_&id_re;_INIT|CMAKE_SHARED_LINKER_FLAGS_&id_re;|CMAKE_RUNTIME_OUTPUT_DIRECTORY_&id_re;|CMAKE_PROJECT_&id_re;_INCLUDE|CMAKE_POLICY_WARNING_CMP[0-9]{4}|CMAKE_POLICY_DEFAULT_CMP[0-9]{4}|CMAKE_PDB_OUTPUT_DIRECTORY_&id_re;|CMAKE_MODULE_LINKER_FLAGS_&id_re;_INIT|CMAKE_MODULE_LINKER_FLAGS_&id_re;|CMAKE_MATCH_[0-9]+|CMAKE_MAP_IMPORTED_CONFIG_&id_re;|CMAKE_LIBRARY_OUTPUT_DIRECTORY_&id_re;|CMAKE_INTERPROCEDURAL_OPTIMIZATION_&id_re;|CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_&id_re;|CMAKE_EXE_LINKER_FLAGS_&id_re;_INIT|CMAKE_EXE_LINKER_FLAGS_&id_re;|CMAKE_DISABLE_FIND_PACKAGE_&id_re;|CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_&id_re;|CMAKE_ARGV[0-9]+|CMAKE_ARCHIVE_OUTPUT_DIRECTORY_&id_re;|CMAKE_&id_re;_VISIBILITY_PRESET|CMAKE_&id_re;_STANDARD_LIBRARIES|CMAKE_&id_re;_STANDARD_INCLUDE_DIRECTORIES|CMAKE_&id_re;_SOURCE_FILE_EXTENSIONS|CMAKE_&id_re;_SIZEOF_DATA_PTR|CMAKE_&id_re;_SIMULATE_VERSION|CMAKE_&id_re;_SIMULATE_ID|CMAKE_&id_re;_POSTFIX|CMAKE_&id_re;_OUTPUT_EXTENSION|CMAKE_&id_re;_LINK_EXECUTABLE|CMAKE_&id_re;_LINKER_WRAPPER_FLAG_SEP|CMAKE_&id_re;_LINKER_WRAPPER_FLAG|CMAKE_&id_re;_LINKER_PREFERENCE_PROPAGATES|CMAKE_&id_re;_LINKER_PREFERENCE|CMAKE_&id_re;_LIBRARY_ARCHITECTURE|CMAKE_&id_re;_INCLUDE_WHAT_YOU_USE|CMAKE_&id_re;_IMPLICIT_LINK_LIBRARIES|CMAKE_&id_re;_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES|CMAKE_&id_re;_IMPLICIT_LINK_DIRECTORIES|CMAKE_&id_re;_IMPLICIT_INCLUDE_DIRECTORIES|CMAKE_&id_re;_IGNORE_EXTENSIONS|CMAKE_&id_re;_GHS_KERNEL_FLAGS_RELWITHDEBINFO|CMAKE_&id_re;_GHS_KERNEL_FLAGS_RELEASE|CMAKE_&id_re;_GHS_KERNEL_FLAGS_MINSIZEREL|CMAKE_&id_re;_GHS_KERNEL_FLAGS_DEBUG|CMAKE_&id_re;_FLAGS_RELWITHDEBINFO_INIT|CMAKE_&id_re;_FLAGS_RELWITHDEBINFO|CMAKE_&id_re;_FLAGS_RELEASE_INIT|CMAKE_&id_re;_FLAGS_RELEASE|CMAKE_&id_re;_FLAGS_MINSIZEREL_INIT|CMAKE_&id_re;_FLAGS_MINSIZEREL|CMAKE_&id_re;_FLAGS_INIT|CMAKE_&id_re;_FLAGS_DEBUG_INIT|CMAKE_&id_re;_FLAGS_DEBUG|CMAKE_&id_re;_FLAGS|CMAKE_&id_re;_CREATE_STATIC_LIBRARY|CMAKE_&id_re;_CREATE_SHARED_MODULE|CMAKE_&id_re;_CREATE_SHARED_LIBRARY|CMAKE_&id_re;_CPPLINT|CMAKE_&id_re;_CPPCHECK|CMAKE_&id_re;_COMPILE_OBJECT|CMAKE_&id_re;_COMPILER_VERSION|CMAKE_&id_re;_COMPILER_TARGET|CMAKE_&id_re;_COMPILER_RANLIB|CMAKE_&id_re;_COMPILER_LOADED|CMAKE_&id_re;_COMPILER_LAUNCHER|CMAKE_&id_re;_COMPILER_ID|CMAKE_&id_re;_COMPILER_EXTERNAL_TOOLCHAIN|CMAKE_&id_re;_COMPILER_AR|CMAKE_&id_re;_COMPILER|CMAKE_&id_re;_CLANG_TIDY|CMAKE_&id_re;_ARCHIVE_FINISH|CMAKE_&id_re;_ARCHIVE_CREATE|CMAKE_&id_re;_ARCHIVE_APPEND|CMAKE_&id_re;_ANDROID_TOOLCHAIN_SUFFIX|CMAKE_&id_re;_ANDROID_TOOLCHAIN_PREFIX|CMAKE_&id_re;_ANDROID_TOOLCHAIN_MACHINE|ARGV[0-9]+|&id_re;__TRYRUN_OUTPUT|&id_re;_VERSION_TWEAK|&id_re;_VERSION_STRING|&id_re;_VERSION_PATCH|&id_re;_VERSION_MINOR|&id_re;_VERSION_MAJOR|&id_re;_VERSION_COUNT|&id_re;_VERSION|&id_re;_UNPARSED_ARGUMENTS|&id_re;_SOURCE_DIR|&id_re;_ROOT|&id_re;_MODULE_NAME|&id_re;_LIBRARY_DIRS|&id_re;_LIBRARIES|&id_re;_KEYWORDS_MISSING_VALUES|&id_re;_INCLUDE_DIRS|&id_re;_HOMEPAGE_URL|&id_re;_FOUND|&id_re;_FIND_VERSION_TWEAK|&id_re;_FIND_VERSION_PATCH|&id_re;_FIND_VERSION_MINOR|&id_re;_FIND_VERSION_MAJOR|&id_re;_FIND_VERSION_EXACT|&id_re;_FIND_VERSION_COUNT|&id_re;_FIND_VERSION|&id_re;_FIND_REQUIRED_&id_re;|&id_re;_FIND_REQUIRED|&id_re;_FIND_QUIETLY|&id_re;_FIND_COMPONENTS|&id_re;_DESCRIPTION|&id_re;_CONSIDERED_VERSIONS|&id_re;_CONSIDERED_CONFIGS|&id_re;_BINARY_DIR)\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\b(?:SWIG_MODULE_&id_re;_EXTRA_DEPS|ExternalData_URL_ALGO_&id_re;_&id_re;|ExternalData_CUSTOM_SCRIPT_&id_re;|DOXYGEN_&id_re;|CPACK_WIX_PROPERTY_&id_re;|CPACK_WIX_&id_re;_EXTRA_FLAGS|CPACK_WIX_&id_re;_EXTENSIONS|CPACK_RPM_NO_&id_re;_INSTALL_PREFIX_RELOCATION|CPACK_RPM_&id_re;_USER_FILELIST|CPACK_RPM_&id_re;_USER_BINARY_SPECFILE|CPACK_RPM_&id_re;_PACKAGE_URL|CPACK_RPM_&id_re;_PACKAGE_SUMMARY|CPACK_RPM_&id_re;_PACKAGE_SUGGESTS|CPACK_RPM_&id_re;_PACKAGE_REQUIRES_PREUN|CPACK_RPM_&id_re;_PACKAGE_REQUIRES_PRE|CPACK_RPM_&id_re;_PACKAGE_REQUIRES_POSTUN|CPACK_RPM_&id_re;_PACKAGE_REQUIRES_POST|CPACK_RPM_&id_re;_PACKAGE_REQUIRES|CPACK_RPM_&id_re;_PACKAGE_PROVIDES|CPACK_RPM_&id_re;_PACKAGE_PREFIX|CPACK_RPM_&id_re;_PACKAGE_OBSOLETES|CPACK_RPM_&id_re;_PACKAGE_NAME|CPACK_RPM_&id_re;_PACKAGE_GROUP|CPACK_RPM_&id_re;_PACKAGE_DESCRIPTION|CPACK_RPM_&id_re;_PACKAGE_CONFLICTS|CPACK_RPM_&id_re;_PACKAGE_AUTOREQPROV|CPACK_RPM_&id_re;_PACKAGE_AUTOREQ|CPACK_RPM_&id_re;_PACKAGE_AUTOPROV|CPACK_RPM_&id_re;_PACKAGE_ARCHITECTURE|CPACK_RPM_&id_re;_FILE_NAME|CPACK_RPM_&id_re;_DEFAULT_USER|CPACK_RPM_&id_re;_DEFAULT_GROUP|CPACK_RPM_&id_re;_DEFAULT_FILE_PERMISSIONS|CPACK_RPM_&id_re;_DEFAULT_DIR_PERMISSIONS|CPACK_RPM_&id_re;_DEBUGINFO_PACKAGE|CPACK_RPM_&id_re;_DEBUGINFO_FILE_NAME|CPACK_RPM_&id_re;_BUILD_SOURCE_DIRS_PREFIX|CPACK_PREFLIGHT_&id_re;_SCRIPT|CPACK_POSTFLIGHT_&id_re;_SCRIPT|CPACK_NUGET_PACKAGE_DEPENDENCIES_&id_re;_VERSION|CPACK_NUGET_&id_re;_PACKAGE_VERSION|CPACK_NUGET_&id_re;_PACKAGE_TITLE|CPACK_NUGET_&id_re;_PACKAGE_TAGS|CPACK_NUGET_&id_re;_PACKAGE_RELEASE_NOTES|CPACK_NUGET_&id_re;_PACKAGE_OWNERS|CPACK_NUGET_&id_re;_PACKAGE_NAME|CPACK_NUGET_&id_re;_PACKAGE_LICENSE_FILE_NAME|CPACK_NUGET_&id_re;_PACKAGE_LICENSE_EXPRESSION|CPACK_NUGET_&id_re;_PACKAGE_LICENSEURL|CPACK_NUGET_&id_re;_PACKAGE_LANGUAGE|CPACK_NUGET_&id_re;_PACKAGE_ICONURL|CPACK_NUGET_&id_re;_PACKAGE_ICON|CPACK_NUGET_&id_re;_PACKAGE_HOMEPAGE_URL|CPACK_NUGET_&id_re;_PACKAGE_DESCRIPTION_SUMMARY|CPACK_NUGET_&id_re;_PACKAGE_DESCRIPTION|CPACK_NUGET_&id_re;_PACKAGE_DEPENDENCIES_&id_re;_VERSION|CPACK_NUGET_&id_re;_PACKAGE_DEPENDENCIES|CPACK_NUGET_&id_re;_PACKAGE_COPYRIGHT|CPACK_NUGET_&id_re;_PACKAGE_AUTHORS|CPACK_NSIS_&id_re;_INSTALL_DIRECTORY|CPACK_DMG_&id_re;_FILE_NAME|CPACK_DEBIAN_&id_re;_PACKAGE_SUGGESTS|CPACK_DEBIAN_&id_re;_PACKAGE_SOURCE|CPACK_DEBIAN_&id_re;_PACKAGE_SHLIBDEPS|CPACK_DEBIAN_&id_re;_PACKAGE_SECTION|CPACK_DEBIAN_&id_re;_PACKAGE_REPLACES|CPACK_DEBIAN_&id_re;_PACKAGE_RECOMMENDS|CPACK_DEBIAN_&id_re;_PACKAGE_PROVIDES|CPACK_DEBIAN_&id_re;_PACKAGE_PRIORITY|CPACK_DEBIAN_&id_re;_PACKAGE_PREDEPENDS|CPACK_DEBIAN_&id_re;_PACKAGE_NAME|CPACK_DEBIAN_&id_re;_PACKAGE_ENHANCES|CPACK_DEBIAN_&id_re;_PACKAGE_DEPENDS|CPACK_DEBIAN_&id_re;_PACKAGE_CONTROL_STRICT_PERMISSION|CPACK_DEBIAN_&id_re;_PACKAGE_CONTROL_EXTRA|CPACK_DEBIAN_&id_re;_PACKAGE_CONFLICTS|CPACK_DEBIAN_&id_re;_PACKAGE_BREAKS|CPACK_DEBIAN_&id_re;_PACKAGE_ARCHITECTURE|CPACK_DEBIAN_&id_re;_FILE_NAME|CPACK_DEBIAN_&id_re;_DESCRIPTION|CPACK_DEBIAN_&id_re;_DEBUGINFO_PACKAGE|CPACK_COMPONENT_&id_re;_REQUIRED|CPACK_COMPONENT_&id_re;_HIDDEN|CPACK_COMPONENT_&id_re;_GROUP|CPACK_COMPONENT_&id_re;_DISPLAY_NAME|CPACK_COMPONENT_&id_re;_DISABLED|CPACK_COMPONENT_&id_re;_DESCRIPTION|CPACK_COMPONENT_&id_re;_DEPENDS|CPACK_BINARY_&id_re;|CPACK_ARCHIVE_&id_re;_FILE_NAME|CPACK_&id_re;_COMPONENT_INSTALL|CMAKE_XCODE_ATTRIBUTE_&id_re;|CMAKE_USER_MAKE_RULES_OVERRIDE_&id_re;|CMAKE_STATIC_LINKER_FLAGS_&id_re;_INIT|CMAKE_STATIC_LINKER_FLAGS_&id_re;|CMAKE_SHARED_LINKER_FLAGS_&id_re;_INIT|CMAKE_SHARED_LINKER_FLAGS_&id_re;|CMAKE_RUNTIME_OUTPUT_DIRECTORY_&id_re;|CMAKE_PROJECT_&id_re;_INCLUDE|CMAKE_POLICY_WARNING_CMP[0-9]{4}|CMAKE_POLICY_DEFAULT_CMP[0-9]{4}|CMAKE_PDB_OUTPUT_DIRECTORY_&id_re;|CMAKE_MODULE_LINKER_FLAGS_&id_re;_INIT|CMAKE_MODULE_LINKER_FLAGS_&id_re;|CMAKE_MATCH_[0-9]+|CMAKE_MAP_IMPORTED_CONFIG_&id_re;|CMAKE_LIBRARY_OUTPUT_DIRECTORY_&id_re;|CMAKE_INTERPROCEDURAL_OPTIMIZATION_&id_re;|CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_&id_re;|CMAKE_EXE_LINKER_FLAGS_&id_re;_INIT|CMAKE_EXE_LINKER_FLAGS_&id_re;|CMAKE_DISABLE_FIND_PACKAGE_&id_re;|CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_&id_re;|CMAKE_ARGV[0-9]+|CMAKE_ARCHIVE_OUTPUT_DIRECTORY_&id_re;|CMAKE_&id_re;_VISIBILITY_PRESET|CMAKE_&id_re;_STANDARD_LIBRARIES|CMAKE_&id_re;_STANDARD_INCLUDE_DIRECTORIES|CMAKE_&id_re;_SOURCE_FILE_EXTENSIONS|CMAKE_&id_re;_SIZEOF_DATA_PTR|CMAKE_&id_re;_SIMULATE_VERSION|CMAKE_&id_re;_SIMULATE_ID|CMAKE_&id_re;_POSTFIX|CMAKE_&id_re;_OUTPUT_EXTENSION|CMAKE_&id_re;_LINK_LIBRARY_FLAG|CMAKE_&id_re;_LINK_LIBRARY_FILE_FLAG|CMAKE_&id_re;_LINK_EXECUTABLE|CMAKE_&id_re;_LINKER_WRAPPER_FLAG_SEP|CMAKE_&id_re;_LINKER_WRAPPER_FLAG|CMAKE_&id_re;_LINKER_PREFERENCE_PROPAGATES|CMAKE_&id_re;_LINKER_PREFERENCE|CMAKE_&id_re;_LINKER_LAUNCHER|CMAKE_&id_re;_LIBRARY_ARCHITECTURE|CMAKE_&id_re;_INCLUDE_WHAT_YOU_USE|CMAKE_&id_re;_IMPLICIT_LINK_LIBRARIES|CMAKE_&id_re;_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES|CMAKE_&id_re;_IMPLICIT_LINK_DIRECTORIES|CMAKE_&id_re;_IMPLICIT_INCLUDE_DIRECTORIES|CMAKE_&id_re;_IGNORE_EXTENSIONS|CMAKE_&id_re;_GHS_KERNEL_FLAGS_RELWITHDEBINFO|CMAKE_&id_re;_GHS_KERNEL_FLAGS_RELEASE|CMAKE_&id_re;_GHS_KERNEL_FLAGS_MINSIZEREL|CMAKE_&id_re;_GHS_KERNEL_FLAGS_DEBUG|CMAKE_&id_re;_FLAGS_RELWITHDEBINFO_INIT|CMAKE_&id_re;_FLAGS_RELWITHDEBINFO|CMAKE_&id_re;_FLAGS_RELEASE_INIT|CMAKE_&id_re;_FLAGS_RELEASE|CMAKE_&id_re;_FLAGS_MINSIZEREL_INIT|CMAKE_&id_re;_FLAGS_MINSIZEREL|CMAKE_&id_re;_FLAGS_INIT|CMAKE_&id_re;_FLAGS_DEBUG_INIT|CMAKE_&id_re;_FLAGS_DEBUG|CMAKE_&id_re;_FLAGS|CMAKE_&id_re;_CREATE_STATIC_LIBRARY|CMAKE_&id_re;_CREATE_SHARED_MODULE|CMAKE_&id_re;_CREATE_SHARED_LIBRARY|CMAKE_&id_re;_CPPLINT|CMAKE_&id_re;_CPPCHECK|CMAKE_&id_re;_COMPILE_OBJECT|CMAKE_&id_re;_COMPILER_VERSION|CMAKE_&id_re;_COMPILER_TARGET|CMAKE_&id_re;_COMPILER_RANLIB|CMAKE_&id_re;_COMPILER_LOADED|CMAKE_&id_re;_COMPILER_LAUNCHER|CMAKE_&id_re;_COMPILER_ID|CMAKE_&id_re;_COMPILER_EXTERNAL_TOOLCHAIN|CMAKE_&id_re;_COMPILER_AR|CMAKE_&id_re;_COMPILER|CMAKE_&id_re;_CLANG_TIDY|CMAKE_&id_re;_BYTE_ORDER|CMAKE_&id_re;_ARCHIVE_FINISH|CMAKE_&id_re;_ARCHIVE_CREATE|CMAKE_&id_re;_ARCHIVE_APPEND|CMAKE_&id_re;_ANDROID_TOOLCHAIN_SUFFIX|CMAKE_&id_re;_ANDROID_TOOLCHAIN_PREFIX|CMAKE_&id_re;_ANDROID_TOOLCHAIN_MACHINE|ARGV[0-9]+|&id_re;__TRYRUN_OUTPUT|&id_re;_VERSION_TWEAK|&id_re;_VERSION_STRING|&id_re;_VERSION_PATCH|&id_re;_VERSION_MINOR|&id_re;_VERSION_MAJOR|&id_re;_VERSION_COUNT|&id_re;_VERSION|&id_re;_UNPARSED_ARGUMENTS|&id_re;_SOURCE_DIR|&id_re;_ROOT|&id_re;_MODULE_NAME|&id_re;_LIBRARY_DIRS|&id_re;_LIBRARIES|&id_re;_KEYWORDS_MISSING_VALUES|&id_re;_IS_TOP_LEVEL|&id_re;_INCLUDE_DIRS|&id_re;_HOMEPAGE_URL|&id_re;_FOUND|&id_re;_FIND_VERSION_TWEAK|&id_re;_FIND_VERSION_PATCH|&id_re;_FIND_VERSION_MINOR|&id_re;_FIND_VERSION_MAJOR|&id_re;_FIND_VERSION_EXACT|&id_re;_FIND_VERSION_COUNT|&id_re;_FIND_VERSION|&id_re;_FIND_REQUIRED_&id_re;|&id_re;_FIND_REQUIRED|&id_re;_FIND_QUIETLY|&id_re;_FIND_COMPONENTS|&id_re;_DESCRIPTION|&id_re;_CONSIDERED_VERSIONS|&id_re;_CONSIDERED_CONFIGS|&id_re;_BINARY_DIR)\b" />
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Variable Substitutions">
diff --git a/xml/d.xml b/xml/d.xml
--- a/xml/d.xml
+++ b/xml/d.xml
@@ -105,7 +105,7 @@
    ========================================================================
 -->
 
-<language name="D" version="11" kateversion="5.0" section="Sources" extensions="*.d;*.D;*.di;*.DI;" mimetype="text/x-dsrc" casesensitive="true" author="Diggory Hardy (diggory.hardy@gmail.com), Aziz Köksal (aziz.koeksal@gmail.com), Jari-Matti Mäkelä (jmjm@iki.fi), Simon J Mackenzie (project.katedxml@smackoz.fastmail.fm)" license="LGPL">
+<language name="D" version="12" kateversion="5.0" section="Sources" extensions="*.d;*.D;*.di;*.DI;" mimetype="text/x-dsrc" casesensitive="true" author="Diggory Hardy (diggory.hardy@gmail.com), Aziz Köksal (aziz.koeksal@gmail.com), Jari-Matti Mäkelä (jmjm@iki.fi), Simon J Mackenzie (project.katedxml@smackoz.fastmail.fm)" license="LGPL">
   <highlighting>
     <!-- User-defined keywords (add identifiers you'd like highlighted here) -->
     <list name="userkeywords">
@@ -496,7 +496,7 @@
         <DetectSpaces/>
         <!-- Match an Integer -->
         <RegExpr attribute="Integer" context="#stay" String="(?:(?:0(?:[0-7_]+|[bB]_*[01][01_]*|[xX]_*[\da-fA-F][\da-fA-F_]*))|\d+[\d_]*)(?:L[uU]?|[uU]L?)?"/>
-        <RegExpr attribute="String" context="#stay" String="&quot;[^&quot;]*&quot;"/>
+        <RangeDetect attribute="String" context="#stay" char="&quot;" char1="&quot;"/>
         <keyword attribute="SpecialTokens"  context="#stay"      String="specialtokens"/>
         <IncludeRules context="CommentRules" />
         <RegExpr attribute="Error" context="#pop" String=".+"/>
diff --git a/xml/doxygen.xml b/xml/doxygen.xml
--- a/xml/doxygen.xml
+++ b/xml/doxygen.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-    <!ENTITY wordsep "(?:[][,?;()]|\.$|\.?\s)">   <!-- things that end a TagWord -->
+    <!ENTITY wordsep "(?:[][,?;()]|\.$|\.?\s|$)">   <!-- things that end a TagWord -->
     <!ENTITY sl_word ".*?(?=&wordsep;)">
     <!ENTITY ml_word ".*?(?=&wordsep;|\*/)">
 ]>
 <language name="Doxygen"
-          version="13"
+          version="14"
           kateversion="5.0"
           section="Markup"
           extensions="*.dox;*.doxygen"
diff --git a/xml/glsl.xml b/xml/glsl.xml
--- a/xml/glsl.xml
+++ b/xml/glsl.xml
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="GLSL" section="3D" extensions="*.glsl;*.vert;*.vs;*.frag;*.fs;*.geom;*.gs;*.tcs;*.tes" mimetype="text/x-glslsrc" version="8" kateversion="5.0" author="Oliver Richers (o.richers@tu-bs.de)" license="LGPL">
+<language name="GLSL" section="3D" extensions="*.glsl;*.vert;*.vs;*.frag;*.fs;*.geom;*.gs;*.tcs;*.tes" mimetype="text/x-glslsrc" version="10" kateversion="5.0" author="Oliver Richers (o.richers@tu-bs.de)" license="LGPL">
+	<!--
+		Based on GLSLangSpec.4.60.pdf
+		https://www.khronos.org/registry/OpenGL/specs/gl/
+	-->
 	<highlighting>
 		<list name="keywords">
 			<item>break</item>
@@ -26,86 +30,204 @@
 			<item>invariant</item>
 		</list>
 		<list name="types">
-			<item>float</item>
+			<item>bool</item>
 			<item>int</item>
+			<item>uint</item>
+			<item>float</item>
+			<item>double</item>
 			<item>void</item>
-			<item>bool</item>
 
 			<item>mat2</item>
 			<item>mat3</item>
 			<item>mat4</item>
-			
-			<item>vec2</item>
-			<item>vec3</item>
-			<item>vec4</item>
-			<item>ivec2</item>
-			<item>ivec3</item>
-			<item>ivec4</item>
+			<item>mat2x2</item>
+			<item>mat2x3</item>
+			<item>mat2x4</item>
+			<item>mat3x2</item>
+			<item>mat3x3</item>
+			<item>mat3x4</item>
+			<item>mat4x2</item>
+			<item>mat4x3</item>
+			<item>mat4x4</item>
+
+			<item>dmat2</item>
+			<item>dmat3</item>
+			<item>dmat4</item>
+			<item>dmat2x2</item>
+			<item>dmat2x3</item>
+			<item>dmat2x4</item>
+			<item>dmat3x2</item>
+			<item>dmat3x3</item>
+			<item>dmat3x4</item>
+			<item>dmat4x2</item>
+			<item>dmat4x3</item>
+			<item>dmat4x4</item>
+
 			<item>bvec2</item>
 			<item>bvec3</item>
 			<item>bvec4</item>
-			
+			<item>dvec2</item>
+			<item>dvec3</item>
+			<item>dvec4</item>
+			<item>ivec2</item>
+			<item>ivec3</item>
+			<item>ivec4</item>
+			<item>uvec2</item>
+			<item>uvec3</item>
+			<item>uvec4</item>
+			<item>vec2</item>
+			<item>vec3</item>
+			<item>vec4</item>
+
 			<item>sampler1D</item>
-			<item>sampler2D</item>
-			<item>sampler3D</item>
-			<item>samplerCube</item>
-			<item>sampler2DRect</item>
+			<item>texture1D</item>
+			<item>image1D</item>
+			<item>sampler1DShadow</item>
+
 			<item>sampler1DArray</item>
+			<item>texture1DArray</item>
+			<item>image1DArray</item>
+			<item>sampler1DArrayShadow</item>
+
+			<item>sampler2D</item>
+			<item>texture2D</item>
+			<item>image2D</item>
+			<item>sampler2DShadow</item>
+
 			<item>sampler2DArray</item>
-			<item>samplerCubeArray</item>
-			<item>samplerBuffer</item>
+			<item>texture2DArray</item>
+			<item>image2DArray</item>
+			<item>sampler2DArrayShadow</item>
+
 			<item>sampler2DMS</item>
+			<item>texture2DMS</item>
+			<item>image2DMS</item>
 			<item>sampler2DMSArray</item>
+			<item>texture2DMSArray</item>
+			<item>image2DMSArray</item>
+			<item>sampler2DRect</item>
+			<item>texture2DRect</item>
+			<item>image2DRect</item>
 
-			<item>sampler1DShadow</item>
-			<item>sampler2DShadow</item>
-			<item>samplerCubeShadow</item>
 			<item>sampler2DRectShadow</item>
-			<item>sampler1DArrayShadow</item>
-			<item>sampler2DArrayShadow</item>
+			<item>sampler3D</item>
+			<item>texture3D</item>
+			<item>image3D</item>
+			<item>samplerCube</item>
+			<item>textureCube</item>
+			<item>imageCube</item>
+			<item>samplerCubeShadow</item>
+
+			<item>samplerCubeArray</item>
+			<item>textureCubeArray</item>
+			<item>imageCubeArray</item>
 			<item>samplerCubeArrayShadow</item>
 
+			<item>samplerBuffer</item>
+			<item>textureBuffer</item>
+			<item>imageBuffer</item>
+			<item>subpassInput</item>
+			<item>subpassInputMS</item>
+
 			<item>isampler1D</item>
+			<item>itexture1D</item>
+			<item>iimage1D</item>
+
+			<item>isampler1DArray</item>
+			<item>itexture1DArray</item>
+			<item>iimage1DArray</item>
+
 			<item>isampler2D</item>
+			<item>itexture2D</item>
+			<item>iimage2D</item>
+
+			<item>isampler2DArray</item>
+			<item>itexture2DArray</item>
+			<item>iimage2DArray</item>
+
+			<item>isampler2DMS</item>
+			<item>itexture2DMS</item>
+			<item>iimage2DMS</item>
+
+			<item>isampler2DMSArray</item>
+			<item>itexture2DMSArray</item>
+			<item>iimage2DMSArray</item>
+
+			<item>isampler2DRect</item>
+			<item>itexture2DRect</item>
+			<item>iimage2DRect</item>
+
 			<item>isampler3D</item>
+			<item>itexture3D</item>
+			<item>iimage3D</item>
+
 			<item>isamplerCube</item>
-			<item>isampler2DRect</item>
-			<item>isampler1DArray</item>
-			<item>isampler2DArray</item>
+			<item>itextureCube</item>
+			<item>iimageCube</item>
+
 			<item>isamplerCubeArray</item>
+			<item>itextureCubeArray</item>
+			<item>iimageCubeArray</item>
+
 			<item>isamplerBuffer</item>
-			<item>isampler2DMS</item>
-			<item>isampler2DMSArray</item>
+			<item>itextureBuffer</item>
+			<item>iimageBuffer</item>
 
-			<item>isampler1DShadow</item>
-			<item>isampler2DShadow</item>
-			<item>isamplerCubeShadow</item>
-			<item>isampler2DRectShadow</item>
-			<item>isampler1DArrayShadow</item>
-			<item>isampler2DArrayShadow</item>
-			<item>isamplerCubeArrayShadow</item>
+			<item>isubpassInput</item>
+			<item>isubpassInputMS</item>
 
 			<item>usampler1D</item>
-			<item>usampler2D</item>
-			<item>usampler3D</item>
-			<item>usamplerCube</item>
-			<item>usampler2DRect</item>
+			<item>utexture1D</item>
+			<item>uimage1D</item>
+
 			<item>usampler1DArray</item>
+			<item>utexture1DArray</item>
+			<item>uimage1DArray</item>
+
+			<item>usampler2D</item>
+			<item>utexture2D</item>
+			<item>uimage2D</item>
+
 			<item>usampler2DArray</item>
-			<item>usamplerCubeArray</item>
-			<item>usamplerBuffer</item>
+			<item>utexture1DArray</item>
+			<item>uimage2DArray</item>
+
 			<item>usampler2DMS</item>
+			<item>utexture2DMS</item>
+			<item>uimage2DMS</item>
+
 			<item>usampler2DMSArray</item>
+			<item>utexture2DMSArray</item>
+			<item>uimage2DMSArray</item>
 
-			<item>usampler1DShadow</item>
-			<item>usampler2DShadow</item>
-			<item>usamplerCubeShadow</item>
-			<item>usampler2DRectShadow</item>
-			<item>usampler1DArrayShadow</item>
-			<item>usampler2DArrayShadow</item>
-			<item>usamplerCubeArrayShadow</item>
+			<item>usampler2DRect</item>
+			<item>utexture2DRect</item>
+			<item>uimage2DRect</item>
 
+			<item>usampler3D</item>
+			<item>utexture3D</item>
+			<item>uimage3D</item>
+
+			<item>usamplerCube</item>
+			<item>utextureCube</item>
+			<item>uimageCube</item>
+
+			<item>usamplerCubeArray</item>
+			<item>utextureCubeArray</item>
+			<item>uimageCubeArray</item>
+
+			<item>usamplerBuffer</item>
+			<item>utextureBuffer</item>
+			<item>uimageBuffer</item>
+
 			<item>atomic_uint</item>
+
+			<item>usubpassInput</item>
+			<item>usubpassInputMS</item>
+
+			<item>sampler</item>
+
+			<item>samplerShadow</item>
 		</list>
 		<list name="typequal">
 			<item>attribute</item>
@@ -116,10 +238,21 @@
 			<item>out</item>
 			<item>inout</item>
 
+			<item>patch</item>
+
+			<!-- precision qualifiers -->
+			<item>lowp</item>
+			<item>mediump</item>
+			<item>highp</item>
+			<item>precise</item>
+			<item>precision</item>
+
 			<!-- interpolation qualifiers -->
 			<item>flat</item>
 			<item>noperspective</item>
 			<item>smooth</item>
+			<item>centroid</item>
+			<item>sample</item>
 
 			<!-- layout qualifiers -->
 			<item>location</item>
@@ -189,12 +322,22 @@
 			<item>asinh</item>
 			<item>atan</item>
 			<item>atanh</item>
-			<item>atomicAdd</item>
-			<item>atomicAnd</item>
 			<item>atomicCompSwap</item>
 			<item>atomicCounter</item>
+			<item>atomicCounterAdd</item>
+			<item>atomicCounterAnd</item>
+			<item>atomicCounterCompSwap</item>
 			<item>atomicCounterDecrement</item>
+			<item>atomicCounterExchange</item>
 			<item>atomicCounterIncrement</item>
+			<item>atomicCounterMax</item>
+			<item>atomicCounterMin</item>
+			<item>atomicCounterOr</item>
+			<item>atomicCounterSubtract</item>
+			<item>atomicCounterXor</item>
+			<item>atomicAdd</item>
+			<item>atomicAnd</item>
+			<item>atomicCompSwap</item>
 			<item>atomicExchange</item>
 			<item>atomicMax</item>
 			<item>atomicMin</item>
@@ -1075,18 +1218,90 @@
 			<item>gl_out</item>
 
 			<!-- Built-in Constants -->
-			<item>gl_MaxLights</item>
+			<item>gl_MaxAtomicCounterBindings</item>
+			<item>gl_MaxAtomicCounterBufferSize</item>
+			<item>gl_MaxClipDistances</item>
 			<item>gl_MaxClipPlanes</item>
-			<item>gl_MaxTextureUnits</item>
+			<item>gl_MaxCombinedAtomicCounterBuffers</item>
+			<item>gl_MaxCombinedAtomicCounters</item>
+			<item>gl_MaxCombinedClipAndCullDistances</item>
+			<item>gl_MaxCombinedImageUniforms</item>
+			<item>gl_MaxCombinedImageUnitsAndFragmentOutputs</item>
+			<item>gl_MaxCombinedShaderOutputResources</item>
+			<item>gl_MaxCombinedTextureImageUnits</item>
+			<item>gl_MaxComputeAtomicCounterBuffers</item>
+			<item>gl_MaxComputeAtomicCounters</item>
+			<item>gl_MaxComputeImageUniforms</item>
+			<item>gl_MaxComputeTextureImageUnits</item>
+			<item>gl_MaxComputeUniformComponents</item>
+			<item>gl_MaxComputeWorkGroupCount</item>
+			<item>gl_MaxComputeWorkGroupSize</item>
+			<item>gl_MaxCullDistances</item>
+			<item>gl_MaxDrawBuffers</item>
+			<item>gl_MaxFragmentAtomicCounterBuffers</item>
+			<item>gl_MaxFragmentAtomicCounters</item>
+			<item>gl_MaxFragmentImageUniforms</item>
+			<item>gl_MaxFragmentInputComponents</item>
+			<item>gl_MaxFragmentUniformComponents</item>
+			<item>gl_MaxFragmentUniformVectors</item>
+			<item>gl_MaxGeometryAtomicCounterBuffers</item>
+			<item>gl_MaxGeometryAtomicCounters</item>
+			<item>gl_MaxGeometryImageUniforms</item>
+			<item>gl_MaxGeometryInputComponents</item>
+			<item>gl_MaxGeometryOutputComponents</item>
+			<item>gl_MaxGeometryOutputVertices</item>
+			<item>gl_MaxGeometryTextureImageUnits</item>
+			<item>gl_MaxGeometryTotalOutputComponents</item>
+			<item>gl_MaxGeometryUniformComponents</item>
+			<item>gl_MaxImageSamples</item>
+			<item>gl_MaxImageUnits</item>
+			<item>gl_MaxInputAttachments</item>
+			<item>gl_MaxLights</item>
+			<item>gl_MaxPatchVertices</item>
+			<item>gl_MaxProgramTexelOffset</item>
+			<item>gl_MaxSamples</item>
+			<item>gl_MaxTessControlAtomicCounterBuffers</item>
+			<item>gl_MaxTessControlAtomicCounters</item>
+			<item>gl_MaxTessControlImageUniforms</item>
+			<item>gl_MaxTessControlInputComponents</item>
+			<item>gl_MaxTessControlOutputComponents</item>
+			<item>gl_MaxTessControlTextureImageUnits</item>
+			<item>gl_MaxTessControlTotalOutputComponents</item>
+			<item>gl_MaxTessControlUniformComponents</item>
+			<item>gl_MaxTessEvaluationAtomicCounterBuffers</item>
+			<item>gl_MaxTessEvaluationAtomicCounters</item>
+			<item>gl_MaxTessEvaluationImageUniforms</item>
+			<item>gl_MaxTessEvaluationInputComponents</item>
+			<item>gl_MaxTessEvaluationOutputComponents</item>
+			<item>gl_MaxTessEvaluationTextureImageUnits</item>
+			<item>gl_MaxTessEvaluationUniformComponents</item>
+			<item>gl_MaxTessGenLevel</item>
+			<item>gl_MaxTessPatchComponents</item>
 			<item>gl_MaxTextureCoords</item>
+			<item>gl_MaxTextureImageUnits</item>
+			<item>gl_MaxTextureUnits</item>
+			<item>gl_MaxTransformFeedbackBuffers</item>
+			<item>gl_MaxTransformFeedbackInterleavedComponents</item>
+			<item>gl_MaxVaryingComponents</item>
+			<item>gl_MaxVaryingFloats</item>
+			<item>gl_MaxVaryingVectors</item>
+			<item>gl_MaxVertexAtomicCounterBuffers</item>
+			<item>gl_MaxVertexAtomicCounters</item>
+			<item>gl_MaxVertexAttribs</item>
 			<item>gl_MaxVertexAttributes</item>
+			<item>gl_MaxVertexImageUniforms</item>
+			<item>gl_MaxVertexOutputComponents</item>
+			<item>gl_MaxVertexTextureImageUnits</item>
 			<item>gl_MaxVertexUniformComponents</item>
+			<item>gl_MaxVertexUniformVectors</item>
+			<item>gl_MaxViewports</item>
+			<item>gl_MinProgramTexelOffset</item>
+
+			<!-- Compatibility Profile Built-In Constants -->
+			<item>gl_MaxTextureUnits</item>
+			<item>gl_MaxTextureCoords</item>
+			<item>gl_MaxClipPlanes</item>
 			<item>gl_MaxVaryingFloats</item>
-			<item>gl_MaxVertexTextureImageUnits</item>
-			<item>gl_MaxCombinedTextureImageUnits</item>
-			<item>gl_MaxTextureImageUnits</item>
-			<item>gl_MaxFragmentUniformComponents</item>
-			<item>gl_MaxDrawBuffers</item>
 
 			<!-- Built-in Uniform State -->
 			<item>gl_ModelViewMatrix</item>
@@ -1154,20 +1369,20 @@
 				<keyword attribute="Type Qualifier" String="typequal" context="#stay" />
 				<keyword attribute="StdFunction" String="stdlib" context="#stay" />
 				<keyword attribute="StdVariable" String="stdvar" context="#stay" />
-				
+
 				<Float attribute="Float" context="#stay" />
 				<HlCOct attribute="Octal" context="#stay"/>
 				<HlCHex attribute="Hex" context="#stay"/>
 				<Int attribute="Decimal" context="#stay" />
-				
+
 				<Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
 				<Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
 				<DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
 				<DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
-				
+
 				<DetectChar attribute="Preprocessor" context="Preprocessor" char="#" firstNonSpace="true"/>
 				<RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*[(])" />
-				
+
 				<DetectChar attribute="Symbol" context="Member" char="." />
 				<AnyChar attribute="Symbol" context="#stay" String="+-/*%&lt;&gt;[]()^|&amp;~=!:;,?&#59;" />
 			</context>
@@ -1185,7 +1400,7 @@
 			</context>
 			<context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop">
 			</context>
-	        </contexts>
+		</contexts>
 		<itemDatas>
 			<itemData name="Normal Text"    defStyleNum="dsNormal"/>
 			<itemData name="Keyword"        defStyleNum="dsKeyword"/>
diff --git a/xml/gnuassembler.xml b/xml/gnuassembler.xml
--- a/xml/gnuassembler.xml
+++ b/xml/gnuassembler.xml
@@ -6,279 +6,2299 @@
 *                                                                       *
 *               Syntax highlighting for the GNU Assembler               *
 *                   Copyright (C) 2002, John Zaitseff                   *
-*                                                                       *
-*************************************************************************
-
-Updated:  Miquel Sabaté <mikisabate@gmail.com>
-Date:     14th September, 2010
-Version:  1.02
-
-Updated:  Roland Pabel <roland@pabel.name>
-Date:     15th August, 2002
-Version:  1.01
-
-Author:   John Zaitseff <J.Zaitseff@zap.org.au>
-Date:     15th April, 2002
-Version:  1.0
-
-This file contains the XML syntax highlighting description for the GNU
-Assembler, for KATE, the KDE Advanced Editor.  Keywords have been taken
-directly from the GNU Assembler source code (read.c).
-
-Known problems: Floating point highlighting does not work correctly.
-
-This program, including associated files, is free software.  You may
-distribute it and/or modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either Version 2 of
-the license, or (at your option) any later version.
-
-This program 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 General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
--->
-
-<language name="GNU Assembler" version="7" kateversion="5.0" section="Assembler" extensions="*.s;*.S" mimetype="text/x-asm" author="John Zaitseff (J.Zaitseff@zap.org.au), Roland Pabel (roland@pabel.name), Miquel Sabaté (mikisabate@gmail.com)" license="GPLv2+">
-  <highlighting>
-    <list name="keywords">
-      <item>.abort</item>
-      <item>.align</item>
-      <item>.app-file</item>
-      <item>.appline</item>
-      <item>.ascii</item>
-      <item>.asciz</item>
-      <item>.att_syntax</item>
-      <item>.balign</item>
-      <item>.balignl</item>
-      <item>.balignw</item>
-      <item>.byte</item>
-      <item>.code16</item>
-      <item>.code32</item>
-      <item>.comm</item>
-      <item>.common.s</item>
-      <item>.common</item>
-      <item>.data</item>
-      <item>.dc.b</item>
-      <item>.dc.d</item>
-      <item>.dc.l</item>
-      <item>.dc.s</item>
-      <item>.dc.w</item>
-      <item>.dc.x</item>
-      <item>.dc</item>
-      <item>.dcb.b</item>
-      <item>.dcb.d</item>
-      <item>.dcb.l</item>
-      <item>.dcb.s</item>
-      <item>.dcb.w</item>
-      <item>.dcb.x</item>
-      <item>.dcb</item>
-      <item>.debug</item>
-      <item>.def</item>
-      <item>.desc</item>
-      <item>.dim</item>
-      <item>.double</item>
-      <item>.ds.b</item>
-      <item>.ds.d</item>
-      <item>.ds.l</item>
-      <item>.ds.p</item>
-      <item>.ds.s</item>
-      <item>.ds.w</item>
-      <item>.ds.x</item>
-      <item>.ds</item>
-      <item>.dsect</item>
-      <item>.eject</item>
-      <item>.else</item>
-      <item>.elsec</item>
-      <item>.elseif</item>
-      <item>.end</item>
-      <item>.endc</item>
-      <item>.endef</item>
-      <item>.endfunc</item>
-      <item>.endif</item>
-      <item>.endm</item>
-      <item>.endr</item>
-      <item>.equ</item>
-      <item>.equiv</item>
-      <item>.err</item>
-      <item>.exitm</item>
-      <item>.extend</item>
-      <item>.extern</item>
-      <item>.fail</item>
-      <item>.file</item>
-      <item>.fill</item>
-      <item>.float</item>
-      <item>.format</item>
-      <item>.func</item>
-      <item>.global</item>
-      <item>.globl</item>
-      <item>.hidden</item>
-      <item>.hword</item>
-      <item>.ident</item>
-      <item>.if</item>
-      <item>.ifc</item>
-      <item>.ifdef</item>
-      <item>.ifeq</item>
-      <item>.ifeqs</item>
-      <item>.ifge</item>
-      <item>.ifgt</item>
-      <item>.ifle</item>
-      <item>.iflt</item>
-      <item>.ifnc</item>
-      <item>.ifndef</item>
-      <item>.ifne</item>
-      <item>.ifnes</item>
-      <item>.ifnotdef</item>
-      <item>.include</item>
-      <item>.int</item>
-      <item>.intel_syntax</item>
-      <item>.internal</item>
-      <item>.irep</item>
-      <item>.irepc</item>
-      <item>.irp</item>
-      <item>.irpc</item>
-      <item>.lcomm</item>
-      <item>.lflags</item>
-      <item>.line</item>
-      <item>.linkonce</item>
-      <item>.list</item>
-      <item>.llen</item>
-      <item>.ln</item>
-      <item>.long</item>
-      <item>.lsym</item>
-      <item>.macro</item>
-      <item>.mexit</item>
-      <item>.name</item>
-      <item>.noformat</item>
-      <item>.nolist</item>
-      <item>.nopage</item>
-      <item>noprefix</item>
-      <item>.octa</item>
-      <item>.offset</item>
-      <item>.org</item>
-      <item>.p2align</item>
-      <item>.p2alignl</item>
-      <item>.p2alignw</item>
-      <item>.page</item>
-      <item>.plen</item>
-      <item>.popsection</item>
-      <item>.previous</item>
-      <item>.print</item>
-      <item>.protected</item>
-      <item>.psize</item>
-      <item>.purgem</item>
-      <item>.pushsection</item>
-      <item>.quad</item>
-      <item>.rodata</item>
-      <item>.rep</item>
-      <item>.rept</item>
-      <item>.rva</item>
-      <item>.sbttl</item>
-      <item>.scl</item>
-      <item>.sect.s</item>
-      <item>.sect</item>
-      <item>.section.s</item>
-      <item>.section</item>
-      <item>.set</item>
-      <item>.short</item>
-      <item>.single</item>
-      <item>.size</item>
-      <item>.skip</item>
-      <item>.sleb128</item>
-      <item>.space</item>
-      <item>.spc</item>
-      <item>.stabd</item>
-      <item>.stabn</item>
-      <item>.stabs</item>
-      <item>.string</item>
-      <item>.struct</item>
-      <item>.subsection</item>
-      <item>.symver</item>
-      <item>.tag</item>
-      <item>.text</item>
-      <item>.title</item>
-      <item>.ttl</item>
-      <item>.type</item>
-      <item>.uleb128</item>
-      <item>.use</item>
-      <item>.val</item>
-      <item>.version</item>
-      <item>.vtable_entry</item>
-      <item>.vtable_inherit</item>
-      <item>.weak</item>
-      <item>.word</item>
-      <item>.xcom</item>
-      <item>.xdef</item>
-      <item>.xref</item>
-      <item>.xstabs</item>
-      <item>.zero</item>
-      <!-- Directives specific to ARM -->
-      <item>.arm</item>
-      <item>.bss</item>
-      <item>.code</item>
-      <item>.even</item>
-      <item>.force_thumb</item>
-      <item>.ldouble</item>
-      <item>.loc</item>
-      <item>.ltorg</item>
-      <item>.packed</item>
-      <item>.pool</item>
-      <item>.req</item>
-      <item>.thumb</item>
-      <item>.thumb_func</item>
-      <item>.thumb_set</item>
-    </list>
-
-    <contexts>
-      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
-        <RegExpr      attribute="Label" context="#stay" String="[\.]?[_\w\d-]*\s*:" />
-        <keyword      attribute="Keyword" context="#stay" String="keywords"/>
-        <HlCOct       attribute="Octal" context="#stay" />
-        <HlCHex       attribute="Hex" context="#stay" />
-        <RegExpr      attribute="Binary" context="#stay" String="0[bB][01]+" />
-        <Int          attribute="Decimal" context="#stay" />
-        <RegExpr      attribute="Float" context="#stay" String="0[fFeEdD][-+]?[0-9]*\.?[0-9]*[eE]?[-+]?[0-9]+" />
-        <RegExpr      attribute="Normal Text" context="#stay" String="[A-Za-z_.$][A-Za-z0-9_.$]*" />
-        <HlCChar      attribute="Char" context="#stay" />
-        <RegExpr      attribute="Char" context="#stay" String="'(\\x[0-9a-fA-F][0-9a-fA-F]?|\\[0-7]?[0-7]?[0-7]?|\\.|.)" />
-        <DetectChar   attribute="String" context="String" char="&quot;" />
-        <RegExpr      attribute="Preprocessor" context="Preprocessor" String="#\s*if(?:def|ndef)?(?=\s+\S)" insensitive="true" beginRegion="PP" firstNonSpace="true" />
-        <RegExpr      attribute="Preprocessor" context="Preprocessor" String="#\s*endif" insensitive="true" endRegion="PP" firstNonSpace="true" />
-        <RegExpr      attribute="Preprocessor" context="Define" String="#\s*define.*((?=\\))" insensitive="true" firstNonSpace="true" />
-        <RegExpr      attribute="Preprocessor" context="Preprocessor" String="#\s*(?:el(?:se|if)|include(?:_next)?|define|undef|line|error|warning|pragma)" firstNonSpace="true" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="*" beginRegion="BlockComment" />
-        <AnyChar      attribute="Comment" context="Commentar 2" String="@;#" />
-        <AnyChar      attribute="Symbol" context="#stay" String="!#%&amp;*()+,-&lt;=&gt;?/:[]^{|}~" />
-      </context>
-      <context attribute="Comment" lineEndContext="#stay" name="Commentar 1">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="BlockComment" />
-        <DetectSpaces />
-        <IncludeRules context="##Comments" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" name="Commentar 2" >
-        <DetectSpaces />
-        <IncludeRules context="##Comments" />
-      </context>
-      <context attribute="String" lineEndContext="#pop" name="String">
-        <LineContinue  attribute="String" context="Some Context" />
-        <HlCStringChar attribute="String Char" context="#stay" />
-        <DetectChar    attribute="String" context="#pop" char="&quot;" />
-      </context>
-      <context attribute="Preprocessor" lineEndContext="#pop" name="Preprocessor" />
-      <context attribute="Preprocessor" lineEndContext="#pop" name="Define">
-        <LineContinue attribute="Preprocessor" context="#stay"/>
-      </context>
-      <context attribute="Normal Text" lineEndContext="#pop" name="Some Context" />
-    </contexts>
-
-    <itemDatas>
-      <itemData name="Normal Text"  defStyleNum="dsNormal"   />
-      <itemData name="Label"        defStyleNum="dsKeyword"  />
-      <itemData name="Keyword"      defStyleNum="dsKeyword"  />
+*                   Copyright (C) 2021, Waqar Ahmed                     *
+*                                                                       *
+*************************************************************************
+
+Updated:  Waqar Ahmed <waqar.17a@gmail.com>
+Date:     30 April, 2021
+Version:  2.0
+
+Updated:  Miquel Sabaté <mikisabate@gmail.com>
+Date:     14th September, 2010
+Version:  1.02
+
+Updated:  Roland Pabel <roland@pabel.name>
+Date:     15th August, 2002
+Version:  1.01
+
+Author:   John Zaitseff <J.Zaitseff@zap.org.au>
+Date:     15th April, 2002
+Version:  1.0
+
+This file contains the XML syntax highlighting description for the GNU
+Assembler, for KATE, the KDE Advanced Editor.  Keywords have been taken
+directly from the GNU Assembler source code (read.c).
+
+Known problems: Floating point highlighting does not work correctly.
+
+This program, including associated files, is free software.  You may
+distribute it and/or modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either Version 2 of
+the license, or (at your option) any later version.
+
+This program 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 General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+-->
+
+<language name="GNU Assembler" version="8" kateversion="5.0" section="Assembler" extensions="*.s;*.S" mimetype="text/x-asm" author="John Zaitseff (J.Zaitseff@zap.org.au), Roland Pabel (roland@pabel.name), Miquel Sabaté (mikisabate@gmail.com) Waqar Ahmed (waqar.17a@gmail.com)" license="GPLv2+">
+  <highlighting>
+    <list name="registers">
+      <!-- General purpose registers -->
+      <item>rax</item>
+      <item>eax</item>
+      <item>ax</item>
+      <item>ah</item>
+      <item>al</item>
+      <item>rbx</item>
+      <item>ebx</item>
+      <item>bx</item>
+      <item>bh</item>
+      <item>bl</item>
+      <item>rcx</item>
+      <item>ecx</item>
+      <item>cx</item>
+      <item>ch</item>
+      <item>cl</item>
+      <item>rdx</item>
+      <item>edx</item>
+      <item>dx</item>
+      <item>dh</item>
+      <item>dl</item>
+      <item>rbp</item>
+      <item>ebp</item>
+      <item>bp</item>
+      <item>bpl</item>
+      <item>rsi</item>
+      <item>esi</item>
+      <item>si</item>
+      <item>sil</item>
+      <item>rdi</item>
+      <item>edi</item>
+      <item>di</item>
+      <item>dil</item>
+
+      <item>rip</item>
+      <item>eip</item>
+      <item>ip</item>
+
+      <item>rsp</item>
+      <item>esp</item>
+      <item>sp</item>
+      <item>spl</item>
+      <item>r8</item>
+      <item>r8d</item>
+      <item>r8w</item>
+      <item>r8b</item>
+      <item>r9</item>
+      <item>r9d</item>
+      <item>r9w</item>
+      <item>r9b</item>
+      <item>r10</item>
+      <item>r10d</item>
+      <item>r10w</item>
+      <item>r10b</item>
+      <item>r11</item>
+      <item>r11d</item>
+      <item>r11w</item>
+      <item>r11b</item>
+      <item>r12</item>
+      <item>r12d</item>
+      <item>r12w</item>
+      <item>r12b</item>
+      <item>r13</item>
+      <item>r13d</item>
+      <item>r13w</item>
+      <item>r13b</item>
+      <item>r14</item>
+      <item>r14d</item>
+      <item>r14w</item>
+      <item>r14b</item>
+      <item>r15</item>
+      <item>r15d</item>
+      <item>r15w</item>
+      <item>r15b</item>
+      <!-- Segmentation registers -->
+      <item>cs</item>
+      <item>ds</item>
+      <item>es</item>
+      <item>fs</item>
+      <item>gs</item>
+      <item>ss</item>
+      <!-- Control registers -->
+      <item>cr0</item>
+      <!--<item>cr1</item>-->
+      <item>cr2</item>
+      <item>cr3</item>
+      <item>cr4</item>
+      <!-- Debug registers -->
+      <item>dr0</item>
+      <item>dr1</item>
+      <item>dr2</item>
+      <item>dr3</item>
+      <item>dr6</item>
+      <item>dr7</item>
+      <!-- x87 FPU Registers -->
+      <item>st</item>
+      <!-- MMX registers -->
+      <item>mm0</item>
+      <item>mm1</item>
+      <item>mm2</item>
+      <item>mm3</item>
+      <item>mm4</item>
+      <item>mm5</item>
+      <item>mm6</item>
+      <item>mm7</item>
+      <!-- XMM registers -->
+      <item>xmm0</item>
+      <item>xmm1</item>
+      <item>xmm2</item>
+      <item>xmm3</item>
+      <item>xmm4</item>
+      <item>xmm5</item>
+      <item>xmm6</item>
+      <item>xmm7</item>
+      <item>xmm8</item>
+      <item>xmm9</item>
+      <item>xmm10</item>
+      <item>xmm11</item>
+      <item>xmm12</item>
+      <item>xmm13</item>
+      <item>xmm14</item>
+      <item>xmm15</item>
+      <item>xmm16</item>
+      <item>xmm17</item>
+      <item>xmm18</item>
+      <item>xmm19</item>
+      <item>xmm20</item>
+      <item>xmm21</item>
+      <item>xmm22</item>
+      <item>xmm23</item>
+      <item>xmm24</item>
+      <item>xmm25</item>
+      <item>xmm26</item>
+      <item>xmm27</item>
+      <item>xmm28</item>
+      <item>xmm29</item>
+      <item>xmm30</item>
+      <item>xmm31</item>
+      <!-- YMM registers -->
+      <item>ymm0</item>
+      <item>ymm1</item>
+      <item>ymm2</item>
+      <item>ymm3</item>
+      <item>ymm4</item>
+      <item>ymm5</item>
+      <item>ymm6</item>
+      <item>ymm7</item>
+      <item>ymm8</item>
+      <item>ymm9</item>
+      <item>ymm10</item>
+      <item>ymm11</item>
+      <item>ymm12</item>
+      <item>ymm13</item>
+      <item>ymm14</item>
+      <item>ymm15</item>
+      <item>ymm16</item>
+      <item>ymm17</item>
+      <item>ymm18</item>
+      <item>ymm19</item>
+      <item>ymm20</item>
+      <item>ymm21</item>
+      <item>ymm22</item>
+      <item>ymm23</item>
+      <item>ymm24</item>
+      <item>ymm25</item>
+      <item>ymm26</item>
+      <item>ymm27</item>
+      <item>ymm28</item>
+      <item>ymm29</item>
+      <item>ymm30</item>
+      <item>ymm31</item>
+      <!-- ZMM registers -->
+      <item>zmm0</item>
+      <item>zmm1</item>
+      <item>zmm2</item>
+      <item>zmm3</item>
+      <item>zmm4</item>
+      <item>zmm5</item>
+      <item>zmm6</item>
+      <item>zmm7</item>
+      <item>zmm8</item>
+      <item>zmm9</item>
+      <item>zmm10</item>
+      <item>zmm11</item>
+      <item>zmm12</item>
+      <item>zmm13</item>
+      <item>zmm14</item>
+      <item>zmm15</item>
+      <item>zmm16</item>
+      <item>zmm17</item>
+      <item>zmm18</item>
+      <item>zmm19</item>
+      <item>zmm20</item>
+      <item>zmm21</item>
+      <item>zmm22</item>
+      <item>zmm23</item>
+      <item>zmm24</item>
+      <item>zmm25</item>
+      <item>zmm26</item>
+      <item>zmm27</item>
+      <item>zmm28</item>
+      <item>zmm29</item>
+      <item>zmm30</item>
+      <item>zmm31</item>
+    </list>
+
+    <list name="instructions">
+      <item>lock</item>
+      <item>rep</item>
+      <item>repe</item>
+      <item>repz</item>
+      <item>repne</item>
+      <item>repnz</item>
+      <item>xaquire</item>
+      <item>xrelease</item>
+      <item>bnd</item>
+      <item>nobnd</item>
+      <item>aaa</item>
+      <item>aad</item>
+      <item>aam</item>
+      <item>aas</item>
+      <item>adc</item>
+      <item>addb</item>
+      <item>addw</item>
+      <item>addl</item>
+      <item>addq</item>
+      <item>and</item>
+      <item>arpl</item>
+      <item>bb0_reset</item>
+      <item>bb1_reset</item>
+      <item>bound</item>
+      <item>bsf</item>
+      <item>bsr</item>
+      <item>bswap</item>
+      <item>bt</item>
+      <item>btc</item>
+      <item>btr</item>
+      <item>bts</item>
+      <item>cbw</item>
+      <item>cdq</item>
+      <item>cdqe</item>
+      <item>clc</item>
+      <item>cld</item>
+      <item>cli</item>
+      <item>clts</item>
+      <item>cltd</item>
+      <item>cmc</item>
+      <item>cmpb</item>
+      <item>cmpw</item>
+      <item>cmpl</item>
+      <item>cmpq</item>
+      <item>cmpsb</item>
+      <item>cmpsd</item>
+      <item>cmpsq</item>
+      <item>cmpsw</item>
+      <item>cmpxchg</item>
+      <item>cmpxchg486</item>
+      <item>cmpxchg8b</item>
+      <item>cmpxchg16b</item>
+      <item>cpuid</item>
+      <item>cpu_read</item>
+      <item>cpu_write</item>
+      <item>cqo</item>
+      <item>cwd</item>
+      <item>cwde</item>
+      <item>daa</item>
+      <item>das</item>
+      <item>dec</item>
+      <item>div</item>
+      <item>divb</item>
+      <item>divw</item>
+      <item>divl</item>
+      <item>divq</item>
+      <item>dmint</item>
+      <item>emms</item>
+      <item>enter</item>
+      <item>equ</item>
+      <item>f2xm1</item>
+      <item>fabs</item>
+      <item>fadd</item>
+      <item>faddp</item>
+      <item>fbld</item>
+      <item>fbstp</item>
+      <item>fchs</item>
+      <item>fclex</item>
+      <item>fcmovb</item>
+      <item>fcmovbe</item>
+      <item>fcmove</item>
+      <item>fcmovnb</item>
+      <item>fcmovnbe</item>
+      <item>fcmovne</item>
+      <item>fcmovnu</item>
+      <item>fcmovu</item>
+      <item>fcom</item>
+      <item>fcomi</item>
+      <item>fcomip</item>
+      <item>fcomp</item>
+      <item>fcompp</item>
+      <item>fcos</item>
+      <item>fdecstp</item>
+      <item>fdisi</item>
+      <item>fdiv</item>
+      <item>fdivp</item>
+      <item>fdivr</item>
+      <item>fdivrp</item>
+      <item>femms</item>
+      <item>feni</item>
+      <item>ffree</item>
+      <item>ffreep</item>
+      <item>fiadd</item>
+      <item>ficom</item>
+      <item>ficomp</item>
+      <item>fidiv</item>
+      <item>fidivr</item>
+      <item>fild</item>
+      <item>fimul</item>
+      <item>fincstp</item>
+      <item>finit</item>
+      <item>fist</item>
+      <item>fistp</item>
+      <item>fisttp</item>
+      <item>fisub</item>
+      <item>fisubr</item>
+      <item>fld</item>
+      <item>fld1</item>
+      <item>fldcw</item>
+      <item>fldenv</item>
+      <item>fldl2e</item>
+      <item>fldl2t</item>
+      <item>fldlg2</item>
+      <item>fldln2</item>
+      <item>fldpi</item>
+      <item>fldz</item>
+      <item>fmul</item>
+      <item>fmulp</item>
+      <item>fnclex</item>
+      <item>fndisi</item>
+      <item>fneni</item>
+      <item>fninit</item>
+      <item>fnop</item>
+      <item>fnsave</item>
+      <item>fnstcw</item>
+      <item>fnstenv</item>
+      <item>fnstsw</item>
+      <item>fpatan</item>
+      <item>fprem</item>
+      <item>fprem1</item>
+      <item>fptan</item>
+      <item>frndint</item>
+      <item>frstor</item>
+      <item>fsave</item>
+      <item>fscale</item>
+      <item>fsetpm</item>
+      <item>fsin</item>
+      <item>fsincos</item>
+      <item>fsqrt</item>
+      <item>fst</item>
+      <item>fstcw</item>
+      <item>fstenv</item>
+      <item>fstp</item>
+      <item>fstsw</item>
+      <item>fsub</item>
+      <item>fsubp</item>
+      <item>fsubr</item>
+      <item>fsubrp</item>
+      <item>ftst</item>
+      <item>fucom</item>
+      <item>fucomi</item>
+      <item>fucomip</item>
+      <item>fucomp</item>
+      <item>fucompp</item>
+      <item>fxam</item>
+      <item>fxch</item>
+      <item>fxtract</item>
+      <item>fyl2x</item>
+      <item>fyl2xp1</item>
+      <item>global</item>
+      <item>globl</item>
+      <item>hlt</item>
+      <item>ibts</item>
+      <item>icebp</item>
+      <item>idiv</item>
+      <item>idivb</item>
+      <item>idivw</item>
+      <item>idivl</item>
+      <item>idivq</item>
+      <item>imul</item>
+      <item>imulb</item>
+      <item>imulw</item>
+      <item>imull</item>
+      <item>imulq</item>
+      <item>in</item>
+      <item>inc</item>
+      <item>incbin</item>
+      <item>insb</item>
+      <item>insd</item>
+      <item>insw</item>
+      <item>int</item>
+      <item>int01</item>
+      <item>int1</item>
+      <item>int03</item>
+      <item>int3</item>
+      <item>into</item>
+      <item>invd</item>
+      <item>invpcid</item>
+      <item>invlpg</item>
+      <item>invlpga</item>
+      <item>iret</item>
+      <item>iretd</item>
+      <item>iretq</item>
+      <item>iretw</item>
+      <item>jcxz</item>
+      <item>jecxz</item>
+      <item>jrcxz</item>
+      <item>lahf</item>
+      <item>lar</item>
+      <item>lds</item>
+      <item>leal</item>
+      <item>leaq</item>
+      <item>leave</item>
+      <item>les</item>
+      <item>lfence</item>
+      <item>lfs</item>
+      <item>lgdt</item>
+      <item>lgs</item>
+      <item>lidt</item>
+      <item>lldt</item>
+      <item>lmsw</item>
+      <item>loadall</item>
+      <item>loadall286</item>
+      <item>lodsb</item>
+      <item>lodsd</item>
+      <item>lodsq</item>
+      <item>lodsw</item>
+      <item>loop</item>
+      <item>loope</item>
+      <item>loopne</item>
+      <item>loopnz</item>
+      <item>loopz</item>
+      <item>lsl</item>
+      <item>lss</item>
+      <item>ltr</item>
+      <item>mfence</item>
+      <item>monitor</item>
+      <item>movb</item>
+      <item>movw</item>
+      <item>movl</item>
+      <item>movq</item>
+      <item>movsb</item>
+      <item>movsd</item>
+      <item>movsq</item>
+      <item>movsw</item>
+      <item>movsx</item>
+      <item>movsxd</item>
+      <item>movzx</item>
+      <item>mul</item>
+      <item>mulb</item>
+      <item>mulw</item>
+      <item>mull</item>
+      <item>mulq</item>
+      <item>mwait</item>
+      <item>neg</item>
+      <item>nop</item>
+      <item>not</item>
+      <item>or</item>
+      <item>out</item>
+      <item>outsb</item>
+      <item>outsd</item>
+      <item>outsw</item>
+      <item>packssdw</item>
+      <item>packsswb</item>
+      <item>packuswb</item>
+      <item>paddb</item>
+      <item>paddd</item>
+      <item>paddsb</item>
+      <item>paddsiw</item>
+      <item>paddsw</item>
+      <item>paddusb</item>
+      <item>paddusw</item>
+      <item>paddw</item>
+      <item>pand</item>
+      <item>pandn</item>
+      <item>pause</item>
+      <item>paveb</item>
+      <item>pavgusb</item>
+      <item>pcmpeqb</item>
+      <item>pcmpeqd</item>
+      <item>pcmpeqw</item>
+      <item>pcmpgtb</item>
+      <item>pcmpgtd</item>
+      <item>pcmpgtw</item>
+      <item>pdistib</item>
+      <item>pf2id</item>
+      <item>pfacc</item>
+      <item>pfadd</item>
+      <item>pfcmpeq</item>
+      <item>pfcmpge</item>
+      <item>pfcmpgt</item>
+      <item>pfmax</item>
+      <item>pfmin</item>
+      <item>pfmul</item>
+      <item>pfrcp</item>
+      <item>pfrcpit1</item>
+      <item>pfrcpit2</item>
+      <item>pfrsqit1</item>
+      <item>pfrsqrt</item>
+      <item>pfsub</item>
+      <item>pfsubr</item>
+      <item>pi2fd</item>
+      <item>pmachriw</item>
+      <item>pmaddwd</item>
+      <item>pmagw</item>
+      <item>pmulhriw</item>
+      <item>pmulhrwa</item>
+      <item>pmulhrwc</item>
+      <item>pmulhw</item>
+      <item>pmullw</item>
+      <item>pmvgezb</item>
+      <item>pmvlzb</item>
+      <item>pmvnzb</item>
+      <item>pmvzb</item>
+      <item>pop</item>
+      <item>popl</item>
+      <item>popq</item>
+      <item>popa</item>
+      <item>popad</item>
+      <item>popaw</item>
+      <item>popf</item>
+      <item>popfd</item>
+      <item>popfq</item>
+      <item>popfw</item>
+      <item>por</item>
+      <item>prefetch</item>
+      <item>prefetchw</item>
+      <item>pslld</item>
+      <item>psllq</item>
+      <item>psllw</item>
+      <item>psrad</item>
+      <item>psraw</item>
+      <item>psrld</item>
+      <item>psrlq</item>
+      <item>psrlw</item>
+      <item>psubb</item>
+      <item>psubd</item>
+      <item>psubsb</item>
+      <item>psubsiw</item>
+      <item>psubsw</item>
+      <item>psubusb</item>
+      <item>psubusw</item>
+      <item>psubw</item>
+      <item>punpckhbw</item>
+      <item>punpckhdq</item>
+      <item>punpckhwd</item>
+      <item>punpcklbw</item>
+      <item>punpckldq</item>
+      <item>punpcklwd</item>
+      <item>push</item>
+      <item>pusha</item>
+      <item>pushl</item>
+      <item>pushq</item>
+      <item>pushad</item>
+      <item>pushaw</item>
+      <item>pushf</item>
+      <item>pushfd</item>
+      <item>pushfq</item>
+      <item>pushfw</item>
+      <item>pxor</item>
+      <item>rcl</item>
+      <item>rcr</item>
+      <item>rdshr</item>
+      <item>rdmsr</item>
+      <item>rdpmc</item>
+      <item>rdtsc</item>
+      <item>rdtscp</item>
+      <item>ret</item>
+      <item>retf</item>
+      <item>retn</item>
+      <item>retq</item>
+      <item>rol</item>
+      <item>ror</item>
+      <item>rdm</item>
+      <item>rsdc</item>
+      <item>rsldt</item>
+      <item>rsm</item>
+      <item>rsts</item>
+      <item>sahf</item>
+      <item>sal</item>
+      <item>sall</item>
+      <item>salq</item>
+      <item>salc</item>
+      <item>sar</item>
+      <item>sarl</item>
+      <item>sarq</item>
+      <item>sbb</item>
+      <item>scasb</item>
+      <item>scasd</item>
+      <item>scasq</item>
+      <item>scasw</item>
+      <item>sfence</item>
+      <item>sgdt</item>
+      <item>shl</item>
+      <item>shll</item>
+      <item>shllq</item>
+      <item>shld</item>
+      <item>shr</item>
+      <item>shrd</item>
+      <item>sidt</item>
+      <item>sldt</item>
+      <item>skinit</item>
+      <item>smi</item>
+      <item>smint</item>
+      <item>smintold</item>
+      <item>smsw</item>
+      <item>stc</item>
+      <item>std</item>
+      <item>sti</item>
+      <item>stosb</item>
+      <item>stosd</item>
+      <item>stosq</item>
+      <item>stosw</item>
+      <item>str</item>
+      <item>sub</item>
+      <item>subw</item>
+      <item>subl</item>
+      <item>subq</item>
+      <item>svdc</item>
+      <item>svldt</item>
+      <item>svts</item>
+      <item>swapgs</item>
+      <item>syscall</item>
+      <item>sysenter</item>
+      <item>sysexit</item>
+      <item>sysret</item>
+      <item>test</item>
+      <item>testl</item>
+      <item>testq</item>
+      <item>ud0</item>
+      <item>ud1</item>
+      <item>ud2b</item>
+      <item>ud2</item>
+      <item>ud2a</item>
+      <item>umov</item>
+      <item>verr</item>
+      <item>verw</item>
+      <item>fwait</item>
+      <item>wbinvd</item>
+      <item>wrshr</item>
+      <item>wrmsr</item>
+      <item>xadd</item>
+      <item>xbts</item>
+      <item>xchg</item>
+      <item>xlatb</item>
+      <item>xlat</item>
+      <item>xor</item>
+      <item>cmove</item>
+      <item>cmovz</item>
+      <item>cmovne</item>
+      <item>cmovnz</item>
+      <item>cmova</item>
+      <item>cmovnbe</item>
+      <item>cmovae</item>
+      <item>cmovnb</item>
+      <item>cmovb</item>
+      <item>cmovnae</item>
+      <item>cmovbe</item>
+      <item>cmovna</item>
+      <item>cmovg</item>
+      <item>cmovnle</item>
+      <item>cmovge</item>
+      <item>cmovnl</item>
+      <item>cmovl</item>
+      <item>cmovnge</item>
+      <item>cmovle</item>
+      <item>cmovng</item>
+      <item>cmovc</item>
+      <item>cmovnc</item>
+      <item>cmovo</item>
+      <item>cmovno</item>
+      <item>cmovs</item>
+      <item>cmovns</item>
+      <item>cmovp</item>
+      <item>cmovpe</item>
+      <item>cmovnp</item>
+      <item>cmovpo</item>
+      <item>sete</item>
+      <item>setz</item>
+      <item>setne</item>
+      <item>setnz</item>
+      <item>seta</item>
+      <item>setnbe</item>
+      <item>setae</item>
+      <item>setnb</item>
+      <item>setnc</item>
+      <item>setb</item>
+      <item>setnae</item>
+      <item>setcset</item>
+      <item>setbe</item>
+      <item>setna</item>
+      <item>setg</item>
+      <item>setnle</item>
+      <item>setge</item>
+      <item>setnl</item>
+      <item>setl</item>
+      <item>setnge</item>
+      <item>setle</item>
+      <item>setng</item>
+      <item>sets</item>
+      <item>setns</item>
+      <item>seto</item>
+      <item>setno</item>
+      <item>setpe</item>
+      <item>setp</item>
+      <item>setpo</item>
+      <item>setnp</item>
+      <item>addps</item>
+      <item>addss</item>
+      <item>andnps</item>
+      <item>andps</item>
+      <item>cmpeqps</item>
+      <item>cmpeqss</item>
+      <item>cmpleps</item>
+      <item>cmpless</item>
+      <item>cmpltps</item>
+      <item>cmpltss</item>
+      <item>cmpneqps</item>
+      <item>cmpneqss</item>
+      <item>cmpnleps</item>
+      <item>cmpnless</item>
+      <item>cmpnltps</item>
+      <item>cmpnltss</item>
+      <item>cmpordps</item>
+      <item>cmpordss</item>
+      <item>cmpunordps</item>
+      <item>cmpunordss</item>
+      <item>cmpps</item>
+      <item>cmpss</item>
+      <item>comiss</item>
+      <item>cvtpi2ps</item>
+      <item>cvtps2pi</item>
+      <item>cvtsi2ss</item>
+      <item>cvtss2si</item>
+      <item>cvttps2pi</item>
+      <item>cvttss2si</item>
+      <item>divps</item>
+      <item>divss</item>
+      <item>ldmxcsr</item>
+      <item>maxps</item>
+      <item>maxss</item>
+      <item>minps</item>
+      <item>minss</item>
+      <item>movaps</item>
+      <item>movhps</item>
+      <item>movlhps</item>
+      <item>movlps</item>
+      <item>movhlps</item>
+      <item>movmskps</item>
+      <item>movntps</item>
+      <item>movss</item>
+      <item>movups</item>
+      <item>mulps</item>
+      <item>mulss</item>
+      <item>orps</item>
+      <item>rcpps</item>
+      <item>rcpss</item>
+      <item>rsqrtps</item>
+      <item>rsqrtss</item>
+      <item>shufps</item>
+      <item>sqrtps</item>
+      <item>sqrtss</item>
+      <item>stmxcsr</item>
+      <item>subps</item>
+      <item>subss</item>
+      <item>ucomiss</item>
+      <item>unpckhps</item>
+      <item>unpcklps</item>
+      <item>xorps</item>
+      <item>fxrstor</item>
+      <item>fxrstor64</item>
+      <item>fxsave</item>
+      <item>fxsave64</item>
+      <item>xgetbv</item>
+      <item>xsetbv</item>
+      <item>xsave</item>
+      <item>xsave64</item>
+      <item>xsaveopt</item>
+      <item>xsaveopt64</item>
+      <item>xrstor</item>
+      <item>xrstor64</item>
+      <item>prefetchnta</item>
+      <item>prefetcht0</item>
+      <item>prefetcht1</item>
+      <item>prefetcht2</item>
+      <item>maskmovq</item>
+      <item>movntq</item>
+      <item>pavgb</item>
+      <item>pavgw</item>
+      <item>pextrw</item>
+      <item>pinsrw</item>
+      <item>pmaxsw</item>
+      <item>pmaxub</item>
+      <item>pminsw</item>
+      <item>pminub</item>
+      <item>pmovmskb</item>
+      <item>pmulhuw</item>
+      <item>psadbw</item>
+      <item>pshufw</item>
+      <item>pf2iw</item>
+      <item>pfnacc</item>
+      <item>pfpnacc</item>
+      <item>pi2fw</item>
+      <item>pswapd</item>
+      <item>maskmovdqu</item>
+      <item>clflush</item>
+      <item>movntdq</item>
+      <item>movnti</item>
+      <item>movntpd</item>
+      <item>movdqa</item>
+      <item>movdqu</item>
+      <item>movdq2q</item>
+      <item>movq2dq</item>
+      <item>paddq</item>
+      <item>pmuludq</item>
+      <item>pshufd</item>
+      <item>pshufhw</item>
+      <item>pshuflw</item>
+      <item>pslldq</item>
+      <item>psrldq</item>
+      <item>psubq</item>
+      <item>punpckhqdq</item>
+      <item>punpcklqdq</item>
+      <item>addpd</item>
+      <item>addsd</item>
+      <item>andnpd</item>
+      <item>andpd</item>
+      <item>cmpeqpd</item>
+      <item>cmpeqsd</item>
+      <item>cmplepd</item>
+      <item>cmplesd</item>
+      <item>cmpltpd</item>
+      <item>cmpltsd</item>
+      <item>cmpneqpd</item>
+      <item>cmpneqsd</item>
+      <item>cmpnlepd</item>
+      <item>cmpnlesd</item>
+      <item>cmpnltpd</item>
+      <item>cmpnltsd</item>
+      <item>cmpordpd</item>
+      <item>cmpordsd</item>
+      <item>cmpunordpd</item>
+      <item>cmpunordsd</item>
+      <item>cmppd</item>
+      <item>comisd</item>
+      <item>cvtdq2pd</item>
+      <item>cvtdq2ps</item>
+      <item>cvtpd2dq</item>
+      <item>cvtpd2pi</item>
+      <item>cvtpd2ps</item>
+      <item>cvtpi2pd</item>
+      <item>cvtps2dq</item>
+      <item>cvtps2pd</item>
+      <item>cvtsd2si</item>
+      <item>cvtsd2ss</item>
+      <item>cvtsi2sd</item>
+      <item>cvtss2sd</item>
+      <item>cvttpd2pi</item>
+      <item>cvttpd2dq</item>
+      <item>cvttps2dq</item>
+      <item>cvttsd2si</item>
+      <item>divpd</item>
+      <item>divsd</item>
+      <item>maxpd</item>
+      <item>maxsd</item>
+      <item>minpd</item>
+      <item>minsd</item>
+      <item>movapd</item>
+      <item>movhpd</item>
+      <item>movlpd</item>
+      <item>movmskpd</item>
+      <item>movupd</item>
+      <item>mulpd</item>
+      <item>mulsd</item>
+      <item>orpd</item>
+      <item>shufpd</item>
+      <item>sqrtpd</item>
+      <item>sqrtsd</item>
+      <item>subpd</item>
+      <item>subsd</item>
+      <item>ucomisd</item>
+      <item>unpckhpd</item>
+      <item>unpcklpd</item>
+      <item>xorpd</item>
+      <item>addsubpd</item>
+      <item>addsubps</item>
+      <item>haddpd</item>
+      <item>haddps</item>
+      <item>hsubpd</item>
+      <item>hsubps</item>
+      <item>lddqu</item>
+      <item>movddup</item>
+      <item>movshdup</item>
+      <item>movsldup</item>
+      <item>clgi</item>
+      <item>stgi</item>
+      <item>vmcall</item>
+      <item>vmclear</item>
+      <item>vmfunc</item>
+      <item>vmlaunch</item>
+      <item>vmload</item>
+      <item>vmmcall</item>
+      <item>vmptrld</item>
+      <item>vmptrst</item>
+      <item>vmread</item>
+      <item>vmresume</item>
+      <item>vmrun</item>
+      <item>vmsave</item>
+      <item>vmwrite</item>
+      <item>vmxoff</item>
+      <item>vmxon</item>
+      <item>invept</item>
+      <item>invvpid</item>
+      <item>pabsb</item>
+      <item>pabsw</item>
+      <item>pabsd</item>
+      <item>palignr</item>
+      <item>phaddw</item>
+      <item>phaddd</item>
+      <item>phaddsw</item>
+      <item>phsubw</item>
+      <item>phsubd</item>
+      <item>phsubsw</item>
+      <item>pmaddubsw</item>
+      <item>pmulhrsw</item>
+      <item>pshufb</item>
+      <item>psignb</item>
+      <item>psignw</item>
+      <item>psignd</item>
+      <item>extrq</item>
+      <item>insertq</item>
+      <item>movntsd</item>
+      <item>movntss</item>
+      <item>lzcnt</item>
+      <item>blendpd</item>
+      <item>blendps</item>
+      <item>blendvpd</item>
+      <item>blendvps</item>
+      <item>dppd</item>
+      <item>dpps</item>
+      <item>extractps</item>
+      <item>insertps</item>
+      <item>movntdqa</item>
+      <item>mpsadbw</item>
+      <item>packusdw</item>
+      <item>pblendvb</item>
+      <item>pblendw</item>
+      <item>pcmpeqq</item>
+      <item>pextrb</item>
+      <item>pextrd</item>
+      <item>pextrq</item>
+      <item>phminposuw</item>
+      <item>pinsrb</item>
+      <item>pinsrd</item>
+      <item>pinsrq</item>
+      <item>pmaxsb</item>
+      <item>pmaxsd</item>
+      <item>pmaxud</item>
+      <item>pmaxuw</item>
+      <item>pminsb</item>
+      <item>pminsd</item>
+      <item>pminud</item>
+      <item>pminuw</item>
+      <item>pmovsxbw</item>
+      <item>pmovsxbd</item>
+      <item>pmovsxbq</item>
+      <item>pmovsxwd</item>
+      <item>pmovsxwq</item>
+      <item>pmovsxdq</item>
+      <item>pmovzxbw</item>
+      <item>pmovzxbd</item>
+      <item>pmovzxbq</item>
+      <item>pmovzxwd</item>
+      <item>pmovzxwq</item>
+      <item>pmovzxdq</item>
+      <item>pmuldq</item>
+      <item>pmulld</item>
+      <item>ptest</item>
+      <item>roundpd</item>
+      <item>roundps</item>
+      <item>roundsd</item>
+      <item>roundss</item>
+      <item>crc32</item>
+      <item>pcmpestri</item>
+      <item>pcmpestrm</item>
+      <item>pcmpistri</item>
+      <item>pcmpistrm</item>
+      <item>pcmpgtq</item>
+      <item>popcnt</item>
+      <item>getsec</item>
+      <item>pfrcpv</item>
+      <item>pfrsqrtv</item>
+      <item>movbe</item>
+      <item>aesenc</item>
+      <item>aesenclast</item>
+      <item>aesdec</item>
+      <item>aesdeclast</item>
+      <item>aesimc</item>
+      <item>aeskeygenassist</item>
+      <item>vaesenc</item>
+      <item>vaesenclast</item>
+      <item>vaesdec</item>
+      <item>vaesdeclast</item>
+      <item>vaesimc</item>
+      <item>vaeskeygenassist</item>
+      <item>vaddpd</item>
+      <item>vaddps</item>
+      <item>vaddsd</item>
+      <item>vaddss</item>
+      <item>vaddsubpd</item>
+      <item>vaddsubps</item>
+      <item>vandpd</item>
+      <item>vandps</item>
+      <item>vandnpd</item>
+      <item>vandnps</item>
+      <item>vblendpd</item>
+      <item>vblendps</item>
+      <item>vblendvpd</item>
+      <item>vblendvps</item>
+      <item>vbroadcastss</item>
+      <item>vbroadcastsd</item>
+      <item>vbroadcastf128</item>
+      <item>vcmpeq_ospd</item>
+      <item>vcmpeqpd</item>
+      <item>vcmplt_ospd</item>
+      <item>vcmpltpd</item>
+      <item>vcmple_ospd</item>
+      <item>vcmplepd</item>
+      <item>vcmpunord_qpd</item>
+      <item>vcmpunordpd</item>
+      <item>vcmpneq_uqpd</item>
+      <item>vcmpneqpd</item>
+      <item>vcmpnlt_uspd</item>
+      <item>vcmpnltpd</item>
+      <item>vcmpnle_uspd</item>
+      <item>vcmpnlepd</item>
+      <item>vcmpord_qpd</item>
+      <item>vcmpordpd</item>
+      <item>vcmpeq_uqpd</item>
+      <item>vcmpnge_uspd</item>
+      <item>vcmpngepd</item>
+      <item>vcmpngt_uspd</item>
+      <item>vcmpngtpd</item>
+      <item>vcmpfalse_oqpd</item>
+      <item>vcmpfalsepd</item>
+      <item>vcmpneq_oqpd</item>
+      <item>vcmpge_ospd</item>
+      <item>vcmpgepd</item>
+      <item>vcmpgt_ospd</item>
+      <item>vcmpgtpd</item>
+      <item>vcmptrue_uqpd</item>
+      <item>vcmptruepd</item>
+      <item>vcmplt_oqpd</item>
+      <item>vcmple_oqpd</item>
+      <item>vcmpunord_spd</item>
+      <item>vcmpneq_uspd</item>
+      <item>vcmpnlt_uqpd</item>
+      <item>vcmpnle_uqpd</item>
+      <item>vcmpord_spd</item>
+      <item>vcmpeq_uspd</item>
+      <item>vcmpnge_uqpd</item>
+      <item>vcmpngt_uqpd</item>
+      <item>vcmpfalse_ospd</item>
+      <item>vcmpneq_ospd</item>
+      <item>vcmpge_oqpd</item>
+      <item>vcmpgt_oqpd</item>
+      <item>vcmptrue_uspd</item>
+      <item>vcmppd</item>
+      <item>vcmpeq_osps</item>
+      <item>vcmpeqps</item>
+      <item>vcmplt_osps</item>
+      <item>vcmpltps</item>
+      <item>vcmple_osps</item>
+      <item>vcmpleps</item>
+      <item>vcmpunord_qps</item>
+      <item>vcmpunordps</item>
+      <item>vcmpneq_uqps</item>
+      <item>vcmpneqps</item>
+      <item>vcmpnlt_usps</item>
+      <item>vcmpnltps</item>
+      <item>vcmpnle_usps</item>
+      <item>vcmpnleps</item>
+      <item>vcmpord_qps</item>
+      <item>vcmpordps</item>
+      <item>vcmpeq_uqps</item>
+      <item>vcmpnge_usps</item>
+      <item>vcmpngeps</item>
+      <item>vcmpngt_usps</item>
+      <item>vcmpngtps</item>
+      <item>vcmpfalse_oqps</item>
+      <item>vcmpfalseps</item>
+      <item>vcmpneq_oqps</item>
+      <item>vcmpge_osps</item>
+      <item>vcmpgeps</item>
+      <item>vcmpgt_osps</item>
+      <item>vcmpgtps</item>
+      <item>vcmptrue_uqps</item>
+      <item>vcmptrueps</item>
+      <item>vcmplt_oqps</item>
+      <item>vcmple_oqps</item>
+      <item>vcmpunord_sps</item>
+      <item>vcmpneq_usps</item>
+      <item>vcmpnlt_uqps</item>
+      <item>vcmpnle_uqps</item>
+      <item>vcmpord_sps</item>
+      <item>vcmpeq_usps</item>
+      <item>vcmpnge_uqps</item>
+      <item>vcmpngt_uqps</item>
+      <item>vcmpfalse_osps</item>
+      <item>vcmpneq_osps</item>
+      <item>vcmpge_oqps</item>
+      <item>vcmpgt_oqps</item>
+      <item>vcmptrue_usps</item>
+      <item>vcmpps</item>
+      <item>vcmpeq_ossd</item>
+      <item>vcmpeqsd</item>
+      <item>vcmplt_ossd</item>
+      <item>vcmpltsd</item>
+      <item>vcmple_ossd</item>
+      <item>vcmplesd</item>
+      <item>vcmpunord_qsd</item>
+      <item>vcmpunordsd</item>
+      <item>vcmpneq_uqsd</item>
+      <item>vcmpneqsd</item>
+      <item>vcmpnlt_ussd</item>
+      <item>vcmpnltsd</item>
+      <item>vcmpnle_ussd</item>
+      <item>vcmpnlesd</item>
+      <item>vcmpord_qsd</item>
+      <item>vcmpordsd</item>
+      <item>vcmpeq_uqsd</item>
+      <item>vcmpnge_ussd</item>
+      <item>vcmpngesd</item>
+      <item>vcmpngt_ussd</item>
+      <item>vcmpngtsd</item>
+      <item>vcmpfalse_oqsd</item>
+      <item>vcmpfalsesd</item>
+      <item>vcmpneq_oqsd</item>
+      <item>vcmpge_ossd</item>
+      <item>vcmpgesd</item>
+      <item>vcmpgt_ossd</item>
+      <item>vcmpgtsd</item>
+      <item>vcmptrue_uqsd</item>
+      <item>vcmptruesd</item>
+      <item>vcmplt_oqsd</item>
+      <item>vcmple_oqsd</item>
+      <item>vcmpunord_ssd</item>
+      <item>vcmpneq_ussd</item>
+      <item>vcmpnlt_uqsd</item>
+      <item>vcmpnle_uqsd</item>
+      <item>vcmpord_ssd</item>
+      <item>vcmpeq_ussd</item>
+      <item>vcmpnge_uqsd</item>
+      <item>vcmpngt_uqsd</item>
+      <item>vcmpfalse_ossd</item>
+      <item>vcmpneq_ossd</item>
+      <item>vcmpge_oqsd</item>
+      <item>vcmpgt_oqsd</item>
+      <item>vcmptrue_ussd</item>
+      <item>vcmpsd</item>
+      <item>vcmpeq_osss</item>
+      <item>vcmpeqss</item>
+      <item>vcmplt_osss</item>
+      <item>vcmpltss</item>
+      <item>vcmple_osss</item>
+      <item>vcmpless</item>
+      <item>vcmpunord_qss</item>
+      <item>vcmpunordss</item>
+      <item>vcmpneq_uqss</item>
+      <item>vcmpneqss</item>
+      <item>vcmpnlt_usss</item>
+      <item>vcmpnltss</item>
+      <item>vcmpnle_usss</item>
+      <item>vcmpnless</item>
+      <item>vcmpord_qss</item>
+      <item>vcmpordss</item>
+      <item>vcmpeq_uqss</item>
+      <item>vcmpnge_usss</item>
+      <item>vcmpngess</item>
+      <item>vcmpngt_usss</item>
+      <item>vcmpngtss</item>
+      <item>vcmpfalse_oqss</item>
+      <item>vcmpfalsess</item>
+      <item>vcmpneq_oqss</item>
+      <item>vcmpge_osss</item>
+      <item>vcmpgess</item>
+      <item>vcmpgt_osss</item>
+      <item>vcmpgtss</item>
+      <item>vcmptrue_uqss</item>
+      <item>vcmptruess</item>
+      <item>vcmplt_oqss</item>
+      <item>vcmple_oqss</item>
+      <item>vcmpunord_sss</item>
+      <item>vcmpneq_usss</item>
+      <item>vcmpnlt_uqss</item>
+      <item>vcmpnle_uqss</item>
+      <item>vcmpord_sss</item>
+      <item>vcmpeq_usss</item>
+      <item>vcmpnge_uqss</item>
+      <item>vcmpngt_uqss</item>
+      <item>vcmpfalse_osss</item>
+      <item>vcmpneq_osss</item>
+      <item>vcmpge_oqss</item>
+      <item>vcmpgt_oqss</item>
+      <item>vcmptrue_usss</item>
+      <item>vcmpss</item>
+      <item>vcomisd</item>
+      <item>vcomiss</item>
+      <item>vcvtdq2pd</item>
+      <item>vcvtdq2ps</item>
+      <item>vcvtpd2dq</item>
+      <item>vcvtpd2ps</item>
+      <item>vcvtps2dq</item>
+      <item>vcvtps2pd</item>
+      <item>vcvtsd2si</item>
+      <item>vcvtsd2ss</item>
+      <item>vcvtsi2sd</item>
+      <item>vcvtsi2ss</item>
+      <item>vcvtss2sd</item>
+      <item>vcvtss2si</item>
+      <item>vcvttpd2dq</item>
+      <item>vcvttps2dq</item>
+      <item>vcvttsd2si</item>
+      <item>vcvttss2si</item>
+      <item>vdivpd</item>
+      <item>vdivps</item>
+      <item>vdivsd</item>
+      <item>vdivss</item>
+      <item>vdppd</item>
+      <item>vdpps</item>
+      <item>vextractf128</item>
+      <item>vextractps</item>
+      <item>vhaddpd</item>
+      <item>vhaddps</item>
+      <item>vhsubpd</item>
+      <item>vhsubps</item>
+      <item>vinsertf128</item>
+      <item>vinsertps</item>
+      <item>vlddqu</item>
+      <item>vldqqu</item>
+      <item>vldmxcsr</item>
+      <item>vmaskmovdqu</item>
+      <item>vmaskmovps</item>
+      <item>vmaskmovpd</item>
+      <item>vmaxpd</item>
+      <item>vmaxps</item>
+      <item>vmaxsd</item>
+      <item>vmaxss</item>
+      <item>vminpd</item>
+      <item>vminps</item>
+      <item>vminsd</item>
+      <item>vminss</item>
+      <item>vmovapd</item>
+      <item>vmovaps</item>
+      <item>vmovd</item>
+      <item>vmovq</item>
+      <item>vmovddup</item>
+      <item>vmovdqa</item>
+      <item>vmovqqa</item>
+      <item>vmovdqu</item>
+      <item>vmovqqu</item>
+      <item>vmovhlps</item>
+      <item>vmovhpd</item>
+      <item>vmovhps</item>
+      <item>vmovlhps</item>
+      <item>vmovlpd</item>
+      <item>vmovlps</item>
+      <item>vmovmskpd</item>
+      <item>vmovmskps</item>
+      <item>vmovntdq</item>
+      <item>vmovntqq</item>
+      <item>vmovntdqa</item>
+      <item>vmovntpd</item>
+      <item>vmovntps</item>
+      <item>vmovsd</item>
+      <item>vmovshdup</item>
+      <item>vmovsldup</item>
+      <item>vmovss</item>
+      <item>vmovupd</item>
+      <item>vmovups</item>
+      <item>vmpsadbw</item>
+      <item>vmulpd</item>
+      <item>vmulps</item>
+      <item>vmulsd</item>
+      <item>vmulss</item>
+      <item>vorpd</item>
+      <item>vorps</item>
+      <item>vpabsb</item>
+      <item>vpabsw</item>
+      <item>vpabsd</item>
+      <item>vpacksswb</item>
+      <item>vpackssdw</item>
+      <item>vpackuswb</item>
+      <item>vpackusdw</item>
+      <item>vpaddb</item>
+      <item>vpaddw</item>
+      <item>vpaddd</item>
+      <item>vpaddq</item>
+      <item>vpaddsb</item>
+      <item>vpaddsw</item>
+      <item>vpaddusb</item>
+      <item>vpaddusw</item>
+      <item>vpalignr</item>
+      <item>vpand</item>
+      <item>vpandn</item>
+      <item>vpavgb</item>
+      <item>vpavgw</item>
+      <item>vpblendvb</item>
+      <item>vpblendw</item>
+      <item>vpcmpestri</item>
+      <item>vpcmpestrm</item>
+      <item>vpcmpistri</item>
+      <item>vpcmpistrm</item>
+      <item>vpcmpeqb</item>
+      <item>vpcmpeqw</item>
+      <item>vpcmpeqd</item>
+      <item>vpcmpeqq</item>
+      <item>vpcmpgtb</item>
+      <item>vpcmpgtw</item>
+      <item>vpcmpgtd</item>
+      <item>vpcmpgtq</item>
+      <item>vpermilpd</item>
+      <item>vpermilps</item>
+      <item>vperm2f128</item>
+      <item>vpextrb</item>
+      <item>vpextrw</item>
+      <item>vpextrd</item>
+      <item>vpextrq</item>
+      <item>vphaddw</item>
+      <item>vphaddd</item>
+      <item>vphaddsw</item>
+      <item>vphminposuw</item>
+      <item>vphsubw</item>
+      <item>vphsubd</item>
+      <item>vphsubsw</item>
+      <item>vpinsrb</item>
+      <item>vpinsrw</item>
+      <item>vpinsrd</item>
+      <item>vpinsrq</item>
+      <item>vpmaddwd</item>
+      <item>vpmaddubsw</item>
+      <item>vpmaxsb</item>
+      <item>vpmaxsw</item>
+      <item>vpmaxsd</item>
+      <item>vpmaxub</item>
+      <item>vpmaxuw</item>
+      <item>vpmaxud</item>
+      <item>vpminsb</item>
+      <item>vpminsw</item>
+      <item>vpminsd</item>
+      <item>vpminub</item>
+      <item>vpminuw</item>
+      <item>vpminud</item>
+      <item>vpmovmskb</item>
+      <item>vpmovsxbw</item>
+      <item>vpmovsxbd</item>
+      <item>vpmovsxbq</item>
+      <item>vpmovsxwd</item>
+      <item>vpmovsxwq</item>
+      <item>vpmovsxdq</item>
+      <item>vpmovzxbw</item>
+      <item>vpmovzxbd</item>
+      <item>vpmovzxbq</item>
+      <item>vpmovzxwd</item>
+      <item>vpmovzxwq</item>
+      <item>vpmovzxdq</item>
+      <item>vpmulhuw</item>
+      <item>vpmulhrsw</item>
+      <item>vpmulhw</item>
+      <item>vpmullw</item>
+      <item>vpmulld</item>
+      <item>vpmuludq</item>
+      <item>vpmuldq</item>
+      <item>vpor</item>
+      <item>vpsadbw</item>
+      <item>vpshufb</item>
+      <item>vpshufd</item>
+      <item>vpshufhw</item>
+      <item>vpshuflw</item>
+      <item>vpsignb</item>
+      <item>vpsignw</item>
+      <item>vpsignd</item>
+      <item>vpslldq</item>
+      <item>vpsrldq</item>
+      <item>vpsllw</item>
+      <item>vpslld</item>
+      <item>vpsllq</item>
+      <item>vpsraw</item>
+      <item>vpsrad</item>
+      <item>vpsrlw</item>
+      <item>vpsrld</item>
+      <item>vpsrlq</item>
+      <item>vptest</item>
+      <item>vpsubb</item>
+      <item>vpsubw</item>
+      <item>vpsubd</item>
+      <item>vpsubq</item>
+      <item>vpsubsb</item>
+      <item>vpsubsw</item>
+      <item>vpsubusb</item>
+      <item>vpsubusw</item>
+      <item>vpunpckhbw</item>
+      <item>vpunpckhwd</item>
+      <item>vpunpckhdq</item>
+      <item>vpunpckhqdq</item>
+      <item>vpunpcklbw</item>
+      <item>vpunpcklwd</item>
+      <item>vpunpckldq</item>
+      <item>vpunpcklqdq</item>
+      <item>vpxor</item>
+      <item>vrcpps</item>
+      <item>vrcpss</item>
+      <item>vrsqrtps</item>
+      <item>vrsqrtss</item>
+      <item>vroundpd</item>
+      <item>vroundps</item>
+      <item>vroundsd</item>
+      <item>vroundss</item>
+      <item>vshufpd</item>
+      <item>vshufps</item>
+      <item>vsqrtpd</item>
+      <item>vsqrtps</item>
+      <item>vsqrtsd</item>
+      <item>vsqrtss</item>
+      <item>vstmxcsr</item>
+      <item>vsubpd</item>
+      <item>vsubps</item>
+      <item>vsubsd</item>
+      <item>vsubss</item>
+      <item>vtestps</item>
+      <item>vtestpd</item>
+      <item>vucomisd</item>
+      <item>vucomiss</item>
+      <item>vunpckhpd</item>
+      <item>vunpckhps</item>
+      <item>vunpcklpd</item>
+      <item>vunpcklps</item>
+      <item>vxorpd</item>
+      <item>vxorps</item>
+      <item>vzeroall</item>
+      <item>vzeroupper</item>
+      <item>pclmullqlqdq</item>
+      <item>pclmulhqlqdq</item>
+      <item>pclmullqhqdq</item>
+      <item>pclmulhqhqdq</item>
+      <item>pclmulqdq</item>
+      <item>vpclmullqlqdq</item>
+      <item>vpclmulhqlqdq</item>
+      <item>vpclmullqhqdq</item>
+      <item>vpclmulhqhqdq</item>
+      <item>vpclmulqdq</item>
+      <item>vfmadd132ps</item>
+      <item>vfmadd132pd</item>
+      <item>vfmadd312ps</item>
+      <item>vfmadd312pd</item>
+      <item>vfmadd213ps</item>
+      <item>vfmadd213pd</item>
+      <item>vfmadd123ps</item>
+      <item>vfmadd123pd</item>
+      <item>vfmadd231ps</item>
+      <item>vfmadd231pd</item>
+      <item>vfmadd321ps</item>
+      <item>vfmadd321pd</item>
+      <item>vfmaddsub132ps</item>
+      <item>vfmaddsub132pd</item>
+      <item>vfmaddsub312ps</item>
+      <item>vfmaddsub312pd</item>
+      <item>vfmaddsub213ps</item>
+      <item>vfmaddsub213pd</item>
+      <item>vfmaddsub123ps</item>
+      <item>vfmaddsub123pd</item>
+      <item>vfmaddsub231ps</item>
+      <item>vfmaddsub231pd</item>
+      <item>vfmaddsub321ps</item>
+      <item>vfmaddsub321pd</item>
+      <item>vfmsub132ps</item>
+      <item>vfmsub132pd</item>
+      <item>vfmsub312ps</item>
+      <item>vfmsub312pd</item>
+      <item>vfmsub213ps</item>
+      <item>vfmsub213pd</item>
+      <item>vfmsub123ps</item>
+      <item>vfmsub123pd</item>
+      <item>vfmsub231ps</item>
+      <item>vfmsub231pd</item>
+      <item>vfmsub321ps</item>
+      <item>vfmsub321pd</item>
+      <item>vfmsubadd132ps</item>
+      <item>vfmsubadd132pd</item>
+      <item>vfmsubadd312ps</item>
+      <item>vfmsubadd312pd</item>
+      <item>vfmsubadd213ps</item>
+      <item>vfmsubadd213pd</item>
+      <item>vfmsubadd123ps</item>
+      <item>vfmsubadd123pd</item>
+      <item>vfmsubadd231ps</item>
+      <item>vfmsubadd231pd</item>
+      <item>vfmsubadd321ps</item>
+      <item>vfmsubadd321pd</item>
+      <item>vfnmadd132ps</item>
+      <item>vfnmadd132pd</item>
+      <item>vfnmadd312ps</item>
+      <item>vfnmadd312pd</item>
+      <item>vfnmadd213ps</item>
+      <item>vfnmadd213pd</item>
+      <item>vfnmadd123ps</item>
+      <item>vfnmadd123pd</item>
+      <item>vfnmadd231ps</item>
+      <item>vfnmadd231pd</item>
+      <item>vfnmadd321ps</item>
+      <item>vfnmadd321pd</item>
+      <item>vfnmsub132ps</item>
+      <item>vfnmsub132pd</item>
+      <item>vfnmsub312ps</item>
+      <item>vfnmsub312pd</item>
+      <item>vfnmsub213ps</item>
+      <item>vfnmsub213pd</item>
+      <item>vfnmsub123ps</item>
+      <item>vfnmsub123pd</item>
+      <item>vfnmsub231ps</item>
+      <item>vfnmsub231pd</item>
+      <item>vfnmsub321ps</item>
+      <item>vfnmsub321pd</item>
+      <item>vfmadd132ss</item>
+      <item>vfmadd132sd</item>
+      <item>vfmadd312ss</item>
+      <item>vfmadd312sd</item>
+      <item>vfmadd213ss</item>
+      <item>vfmadd213sd</item>
+      <item>vfmadd123ss</item>
+      <item>vfmadd123sd</item>
+      <item>vfmadd231ss</item>
+      <item>vfmadd231sd</item>
+      <item>vfmadd321ss</item>
+      <item>vfmadd321sd</item>
+      <item>vfmsub132ss</item>
+      <item>vfmsub132sd</item>
+      <item>vfmsub312ss</item>
+      <item>vfmsub312sd</item>
+      <item>vfmsub213ss</item>
+      <item>vfmsub213sd</item>
+      <item>vfmsub123ss</item>
+      <item>vfmsub123sd</item>
+      <item>vfmsub231ss</item>
+      <item>vfmsub231sd</item>
+      <item>vfmsub321ss</item>
+      <item>vfmsub321sd</item>
+      <item>vfnmadd132ss</item>
+      <item>vfnmadd132sd</item>
+      <item>vfnmadd312ss</item>
+      <item>vfnmadd312sd</item>
+      <item>vfnmadd213ss</item>
+      <item>vfnmadd213sd</item>
+      <item>vfnmadd123ss</item>
+      <item>vfnmadd123sd</item>
+      <item>vfnmadd231ss</item>
+      <item>vfnmadd231sd</item>
+      <item>vfnmadd321ss</item>
+      <item>vfnmadd321sd</item>
+      <item>vfnmsub132ss</item>
+      <item>vfnmsub132sd</item>
+      <item>vfnmsub312ss</item>
+      <item>vfnmsub312sd</item>
+      <item>vfnmsub213ss</item>
+      <item>vfnmsub213sd</item>
+      <item>vfnmsub123ss</item>
+      <item>vfnmsub123sd</item>
+      <item>vfnmsub231ss</item>
+      <item>vfnmsub231sd</item>
+      <item>vfnmsub321ss</item>
+      <item>vfnmsub321sd</item>
+      <item>rdfsbase</item>
+      <item>rdgsbase</item>
+      <item>rdrand</item>
+      <item>wrfsbase</item>
+      <item>wrgsbase</item>
+      <item>vcvtph2ps</item>
+      <item>vcvtps2ph</item>
+      <item>adcx</item>
+      <item>adox</item>
+      <item>rdseed</item>
+      <item>clac</item>
+      <item>stac</item>
+      <item>xstore</item>
+      <item>xcryptecb</item>
+      <item>xcryptcbc</item>
+      <item>xcryptctr</item>
+      <item>xcryptcfb</item>
+      <item>xcryptofb</item>
+      <item>montmul</item>
+      <item>xsha1</item>
+      <item>xsha256</item>
+      <item>llwpcb</item>
+      <item>slwpcb</item>
+      <item>lwpval</item>
+      <item>lwpins</item>
+      <item>vfmaddpd</item>
+      <item>vfmaddps</item>
+      <item>vfmaddsd</item>
+      <item>vfmaddss</item>
+      <item>vfmaddsubpd</item>
+      <item>vfmaddsubps</item>
+      <item>vfmsubaddpd</item>
+      <item>vfmsubaddps</item>
+      <item>vfmsubpd</item>
+      <item>vfmsubps</item>
+      <item>vfmsubsd</item>
+      <item>vfmsubss</item>
+      <item>vfnmaddpd</item>
+      <item>vfnmaddps</item>
+      <item>vfnmaddsd</item>
+      <item>vfnmaddss</item>
+      <item>vfnmsubpd</item>
+      <item>vfnmsubps</item>
+      <item>vfnmsubsd</item>
+      <item>vfnmsubss</item>
+      <item>vfrczpd</item>
+      <item>vfrczps</item>
+      <item>vfrczsd</item>
+      <item>vfrczss</item>
+      <item>vpcmov</item>
+      <item>vpcomb</item>
+      <item>vpcomd</item>
+      <item>vpcomq</item>
+      <item>vpcomub</item>
+      <item>vpcomud</item>
+      <item>vpcomuq</item>
+      <item>vpcomuw</item>
+      <item>vpcomw</item>
+      <item>vphaddbd</item>
+      <item>vphaddbq</item>
+      <item>vphaddbw</item>
+      <item>vphadddq</item>
+      <item>vphaddubd</item>
+      <item>vphaddubq</item>
+      <item>vphaddubw</item>
+      <item>vphaddudq</item>
+      <item>vphadduwd</item>
+      <item>vphadduwq</item>
+      <item>vphaddwd</item>
+      <item>vphaddwq</item>
+      <item>vphsubbw</item>
+      <item>vphsubdq</item>
+      <item>vphsubwd</item>
+      <item>vpmacsdd</item>
+      <item>vpmacsdqh</item>
+      <item>vpmacsdql</item>
+      <item>vpmacssdd</item>
+      <item>vpmacssdqh</item>
+      <item>vpmacssdql</item>
+      <item>vpmacsswd</item>
+      <item>vpmacssww</item>
+      <item>vpmacswd</item>
+      <item>vpmacsww</item>
+      <item>vpmadcsswd</item>
+      <item>vpmadcswd</item>
+      <item>vpperm</item>
+      <item>vprotb</item>
+      <item>vprotd</item>
+      <item>vprotq</item>
+      <item>vprotw</item>
+      <item>vpshab</item>
+      <item>vpshad</item>
+      <item>vpshaq</item>
+      <item>vpshaw</item>
+      <item>vpshlb</item>
+      <item>vpshld</item>
+      <item>vpshlq</item>
+      <item>vpshlw</item>
+      <item>vbroadcasti128</item>
+      <item>vpblendd</item>
+      <item>vpbroadcastb</item>
+      <item>vpbroadcastw</item>
+      <item>vpbroadcastd</item>
+      <item>vpbroadcastq</item>
+      <item>vpermd</item>
+      <item>vpermpd</item>
+      <item>vpermps</item>
+      <item>vpermq</item>
+      <item>vperm2i128</item>
+      <item>vextracti128</item>
+      <item>vinserti128</item>
+      <item>vpmaskmovd</item>
+      <item>vpmaskmovq</item>
+      <item>vpsllvd</item>
+      <item>vpsllvq</item>
+      <item>vpsravd</item>
+      <item>vpsrlvd</item>
+      <item>vpsrlvq</item>
+      <item>vgatherdpd</item>
+      <item>vgatherqpd</item>
+      <item>vgatherdps</item>
+      <item>vgatherqps</item>
+      <item>vpgatherdd</item>
+      <item>vpgatherqd</item>
+      <item>vpgatherdq</item>
+      <item>vpgatherqq</item>
+      <item>xabort</item>
+      <item>xbegin</item>
+      <item>xend</item>
+      <item>xtest</item>
+      <item>andn</item>
+      <item>bextr</item>
+      <item>blci</item>
+      <item>blcic</item>
+      <item>blsi</item>
+      <item>blsic</item>
+      <item>blcfill</item>
+      <item>blsfill</item>
+      <item>blcmsk</item>
+      <item>blsmsk</item>
+      <item>blsr</item>
+      <item>blcs</item>
+      <item>bzhi</item>
+      <item>mulx</item>
+      <item>pdep</item>
+      <item>pext</item>
+      <item>rorx</item>
+      <item>sarx</item>
+      <item>shlx</item>
+      <item>shrx</item>
+      <item>tzcnt</item>
+      <item>tzmsk</item>
+      <item>t1mskc</item>
+      <item>valignd</item>
+      <item>valignq</item>
+      <item>vblendmpd</item>
+      <item>vblendmps</item>
+      <item>vbroadcastf32x4</item>
+      <item>vbroadcastf64x4</item>
+      <item>vbroadcasti32x4</item>
+      <item>vbroadcasti64x4</item>
+      <item>vcompresspd</item>
+      <item>vcompressps</item>
+      <item>vcvtpd2udq</item>
+      <item>vcvtps2udq</item>
+      <item>vcvtsd2usi</item>
+      <item>vcvtss2usi</item>
+      <item>vcvttpd2udq</item>
+      <item>vcvttps2udq</item>
+      <item>vcvttsd2usi</item>
+      <item>vcvttss2usi</item>
+      <item>vcvtudq2pd</item>
+      <item>vcvtudq2ps</item>
+      <item>vcvtusi2sd</item>
+      <item>vcvtusi2ss</item>
+      <item>vexpandpd</item>
+      <item>vexpandps</item>
+      <item>vextractf32x4</item>
+      <item>vextractf64x4</item>
+      <item>vextracti32x4</item>
+      <item>vextracti64x4</item>
+      <item>vfixupimmpd</item>
+      <item>vfixupimmps</item>
+      <item>vfixupimmsd</item>
+      <item>vfixupimmss</item>
+      <item>vgetexppd</item>
+      <item>vgetexpps</item>
+      <item>vgetexpsd</item>
+      <item>vgetexpss</item>
+      <item>vgetmantpd</item>
+      <item>vgetmantps</item>
+      <item>vgetmantsd</item>
+      <item>vgetmantss</item>
+      <item>vinsertf32x4</item>
+      <item>vinsertf64x4</item>
+      <item>vinserti32x4</item>
+      <item>vinserti64x4</item>
+      <item>vmovdqa32</item>
+      <item>vmovdqa64</item>
+      <item>vmovdqu32</item>
+      <item>vmovdqu64</item>
+      <item>vpabsq</item>
+      <item>vpandd</item>
+      <item>vpandnd</item>
+      <item>vpandnq</item>
+      <item>vpandq</item>
+      <item>vpblendmd</item>
+      <item>vpblendmq</item>
+      <item>vpcmpltd</item>
+      <item>vpcmpled</item>
+      <item>vpcmpneqd</item>
+      <item>vpcmpnltd</item>
+      <item>vpcmpnled</item>
+      <item>vpcmpd</item>
+      <item>vpcmpltq</item>
+      <item>vpcmpleq</item>
+      <item>vpcmpneqq</item>
+      <item>vpcmpnltq</item>
+      <item>vpcmpnleq</item>
+      <item>vpcmpq</item>
+      <item>vpcmpequd</item>
+      <item>vpcmpltud</item>
+      <item>vpcmpleud</item>
+      <item>vpcmpnequd</item>
+      <item>vpcmpnltud</item>
+      <item>vpcmpnleud</item>
+      <item>vpcmpud</item>
+      <item>vpcmpequq</item>
+      <item>vpcmpltuq</item>
+      <item>vpcmpleuq</item>
+      <item>vpcmpnequq</item>
+      <item>vpcmpnltuq</item>
+      <item>vpcmpnleuq</item>
+      <item>vpcmpuq</item>
+      <item>vpcompressd</item>
+      <item>vpcompressq</item>
+      <item>vpermi2d</item>
+      <item>vpermi2pd</item>
+      <item>vpermi2ps</item>
+      <item>vpermi2q</item>
+      <item>vpermt2d</item>
+      <item>vpermt2pd</item>
+      <item>vpermt2ps</item>
+      <item>vpermt2q</item>
+      <item>vpexpandd</item>
+      <item>vpexpandq</item>
+      <item>vpmaxsq</item>
+      <item>vpmaxuq</item>
+      <item>vpminsq</item>
+      <item>vpminuq</item>
+      <item>vpmovdb</item>
+      <item>vpmovdw</item>
+      <item>vpmovqb</item>
+      <item>vpmovqd</item>
+      <item>vpmovqw</item>
+      <item>vpmovsdb</item>
+      <item>vpmovsdw</item>
+      <item>vpmovsqb</item>
+      <item>vpmovsqd</item>
+      <item>vpmovsqw</item>
+      <item>vpmovusdb</item>
+      <item>vpmovusdw</item>
+      <item>vpmovusqb</item>
+      <item>vpmovusqd</item>
+      <item>vpmovusqw</item>
+      <item>vpord</item>
+      <item>vporq</item>
+      <item>vprold</item>
+      <item>vprolq</item>
+      <item>vprolvd</item>
+      <item>vprolvq</item>
+      <item>vprord</item>
+      <item>vprorq</item>
+      <item>vprorvd</item>
+      <item>vprorvq</item>
+      <item>vpscatterdd</item>
+      <item>vpscatterdq</item>
+      <item>vpscatterqd</item>
+      <item>vpscatterqq</item>
+      <item>vpsraq</item>
+      <item>vpsravq</item>
+      <item>vpternlogd</item>
+      <item>vpternlogq</item>
+      <item>vptestmd</item>
+      <item>vptestmq</item>
+      <item>vptestnmd</item>
+      <item>vptestnmq</item>
+      <item>vpxord</item>
+      <item>vpxorq</item>
+      <item>vrcp14pd</item>
+      <item>vrcp14ps</item>
+      <item>vrcp14sd</item>
+      <item>vrcp14ss</item>
+      <item>vrndscalepd</item>
+      <item>vrndscaleps</item>
+      <item>vrndscalesd</item>
+      <item>vrndscaless</item>
+      <item>vrsqrt14pd</item>
+      <item>vrsqrt14ps</item>
+      <item>vrsqrt14sd</item>
+      <item>vrsqrt14ss</item>
+      <item>vscalefpd</item>
+      <item>vscalefps</item>
+      <item>vscalefsd</item>
+      <item>vscalefss</item>
+      <item>vscatterdpd</item>
+      <item>vscatterdps</item>
+      <item>vscatterqpd</item>
+      <item>vscatterqps</item>
+      <item>vshuff32x4</item>
+      <item>vshuff64x2</item>
+      <item>vshufi32x4</item>
+      <item>vshufi64x2</item>
+      <item>kandnw</item>
+      <item>kandw</item>
+      <item>kmovw</item>
+      <item>knotw</item>
+      <item>kortestw</item>
+      <item>korw</item>
+      <item>kshiftlw</item>
+      <item>kshiftrw</item>
+      <item>kunpckbw</item>
+      <item>kxnorw</item>
+      <item>kxorw</item>
+      <item>vpbroadcastmb2q</item>
+      <item>vpbroadcastmw2d</item>
+      <item>vpconflictd</item>
+      <item>vpconflictq</item>
+      <item>vplzcntd</item>
+      <item>vplzcntq</item>
+      <item>vexp2pd</item>
+      <item>vexp2ps</item>
+      <item>vrcp28pd</item>
+      <item>vrcp28ps</item>
+      <item>vrcp28sd</item>
+      <item>vrcp28ss</item>
+      <item>vrsqrt28pd</item>
+      <item>vrsqrt28ps</item>
+      <item>vrsqrt28sd</item>
+      <item>vrsqrt28ss</item>
+      <item>vgatherpf0dpd</item>
+      <item>vgatherpf0dps</item>
+      <item>vgatherpf0qpd</item>
+      <item>vgatherpf0qps</item>
+      <item>vgatherpf1dpd</item>
+      <item>vgatherpf1dps</item>
+      <item>vgatherpf1qpd</item>
+      <item>vgatherpf1qps</item>
+      <item>vscatterpf0dpd</item>
+      <item>vscatterpf0dps</item>
+      <item>vscatterpf0qpd</item>
+      <item>vscatterpf0qps</item>
+      <item>vscatterpf1dpd</item>
+      <item>vscatterpf1dps</item>
+      <item>vscatterpf1qpd</item>
+      <item>vscatterpf1qps</item>
+      <item>prefetchwt1</item>
+      <item>bndmk</item>
+      <item>bndcl</item>
+      <item>bndcu</item>
+      <item>bndcn</item>
+      <item>bndmov</item>
+      <item>bndldx</item>
+      <item>bndstx</item>
+      <item>sha1rnds4</item>
+      <item>sha1nexte</item>
+      <item>sha1msg1</item>
+      <item>sha1msg2</item>
+      <item>sha256rnds2</item>
+      <item>sha256msg1</item>
+      <item>sha256msg2</item>
+      <item>hint_nop</item>
+    </list>
+
+    <list name="branch instructions">
+      <item>call</item>
+      <item>callq</item>
+      <item>iret</item>
+      <item>iretd</item>
+      <item>iretq</item>
+      <item>iretw</item>
+      <item>ja</item>
+      <item>jae</item>
+      <item>jb</item>
+      <item>jbe</item>
+      <item>jc</item>
+      <item>jcxz</item>
+      <item>je</item>
+      <item>jecxz</item>
+      <item>jg</item>
+      <item>jge</item>
+      <item>jl</item>
+      <item>jle</item>
+      <item>jmp</item>
+      <item>jmpe</item>
+      <item>jna</item>
+      <item>jnae</item>
+      <item>jnb</item>
+      <item>jnbe</item>
+      <item>jnc</item>
+      <item>jne</item>
+      <item>jng</item>
+      <item>jnge</item>
+      <item>jnl</item>
+      <item>jnle</item>
+      <item>jno</item>
+      <item>jnp</item>
+      <item>jns</item>
+      <item>jnz</item>
+      <item>jo</item>
+      <item>jp</item>
+      <item>jpe</item>
+      <item>jpo</item>
+      <item>jrcxz</item>
+      <item>js</item>
+      <item>jz</item>
+      <item>ret</item>
+      <item>retd</item>
+      <item>retf</item>
+      <item>retfd</item>
+      <item>retfq</item>
+      <item>retfw</item>
+      <item>retn</item>
+      <item>retnd</item>
+      <item>retnq</item>
+      <item>retnw</item>
+      <item>retq</item>
+      <item>retw</item>
+    </list>
+
+    <list name="keywords">
+      <item>.abort</item>
+      <item>.align</item>
+      <item>.app-file</item>
+      <item>.appline</item>
+      <item>.ascii</item>
+      <item>.asciz</item>
+      <item>.att_syntax</item>
+      <item>.balign</item>
+      <item>.balignl</item>
+      <item>.balignw</item>
+      <item>.byte</item>
+      <item>.code16</item>
+      <item>.code32</item>
+      <item>.comm</item>
+      <item>.common.s</item>
+      <item>.common</item>
+      <item>.data</item>
+      <item>.dc.b</item>
+      <item>.dc.d</item>
+      <item>.dc.l</item>
+      <item>.dc.s</item>
+      <item>.dc.w</item>
+      <item>.dc.x</item>
+      <item>.dc</item>
+      <item>.dcb.b</item>
+      <item>.dcb.d</item>
+      <item>.dcb.l</item>
+      <item>.dcb.s</item>
+      <item>.dcb.w</item>
+      <item>.dcb.x</item>
+      <item>.dcb</item>
+      <item>.debug</item>
+      <item>.def</item>
+      <item>.desc</item>
+      <item>.dim</item>
+      <item>.double</item>
+      <item>.ds.b</item>
+      <item>.ds.d</item>
+      <item>.ds.l</item>
+      <item>.ds.p</item>
+      <item>.ds.s</item>
+      <item>.ds.w</item>
+      <item>.ds.x</item>
+      <item>.ds</item>
+      <item>.dsect</item>
+      <item>.eject</item>
+      <item>.else</item>
+      <item>.elsec</item>
+      <item>.elseif</item>
+      <item>.end</item>
+      <item>.endc</item>
+      <item>.endef</item>
+      <item>.endfunc</item>
+      <item>.endif</item>
+      <item>.endm</item>
+      <item>.endr</item>
+      <item>.equ</item>
+      <item>.equiv</item>
+      <item>.err</item>
+      <item>.exitm</item>
+      <item>.extend</item>
+      <item>.extern</item>
+      <item>.fail</item>
+      <item>.file</item>
+      <item>.fill</item>
+      <item>.float</item>
+      <item>.format</item>
+      <item>.func</item>
+      <item>.global</item>
+      <item>.globl</item>
+      <item>.hidden</item>
+      <item>.hword</item>
+      <item>.ident</item>
+      <item>.if</item>
+      <item>.ifc</item>
+      <item>.ifdef</item>
+      <item>.ifeq</item>
+      <item>.ifeqs</item>
+      <item>.ifge</item>
+      <item>.ifgt</item>
+      <item>.ifle</item>
+      <item>.iflt</item>
+      <item>.ifnc</item>
+      <item>.ifndef</item>
+      <item>.ifne</item>
+      <item>.ifnes</item>
+      <item>.ifnotdef</item>
+      <item>.include</item>
+      <item>.int</item>
+      <item>.intel_syntax</item>
+      <item>.internal</item>
+      <item>.irep</item>
+      <item>.irepc</item>
+      <item>.irp</item>
+      <item>.irpc</item>
+      <item>.lcomm</item>
+      <item>.lflags</item>
+      <item>.line</item>
+      <item>.linkonce</item>
+      <item>.list</item>
+      <item>.llen</item>
+      <item>.ln</item>
+      <item>.long</item>
+      <item>.lsym</item>
+      <item>.macro</item>
+      <item>.mexit</item>
+      <item>.name</item>
+      <item>.noformat</item>
+      <item>.nolist</item>
+      <item>.nopage</item>
+      <item>noprefix</item>
+      <item>.octa</item>
+      <item>.offset</item>
+      <item>.org</item>
+      <item>.p2align</item>
+      <item>.p2alignl</item>
+      <item>.p2alignw</item>
+      <item>.page</item>
+      <item>.plen</item>
+      <item>.popsection</item>
+      <item>.previous</item>
+      <item>.print</item>
+      <item>.protected</item>
+      <item>.psize</item>
+      <item>.purgem</item>
+      <item>.pushsection</item>
+      <item>.quad</item>
+      <item>.rodata</item>
+      <item>.rep</item>
+      <item>.rept</item>
+      <item>.rva</item>
+      <item>.sbttl</item>
+      <item>.scl</item>
+      <item>.sect.s</item>
+      <item>.sect</item>
+      <item>.section.s</item>
+      <item>.section</item>
+      <item>.set</item>
+      <item>.short</item>
+      <item>.single</item>
+      <item>.size</item>
+      <item>.skip</item>
+      <item>.sleb128</item>
+      <item>.space</item>
+      <item>.spc</item>
+      <item>.stabd</item>
+      <item>.stabn</item>
+      <item>.stabs</item>
+      <item>.string</item>
+      <item>.struct</item>
+      <item>.subsection</item>
+      <item>.symver</item>
+      <item>.tag</item>
+      <item>.text</item>
+      <item>.title</item>
+      <item>.ttl</item>
+      <item>.type</item>
+      <item>.uleb128</item>
+      <item>.use</item>
+      <item>.val</item>
+      <item>.version</item>
+      <item>.vtable_entry</item>
+      <item>.vtable_inherit</item>
+      <item>.weak</item>
+      <item>.word</item>
+      <item>.xcom</item>
+      <item>.xdef</item>
+      <item>.xref</item>
+      <item>.xstabs</item>
+      <item>.zero</item>
+      <!-- Directives specific to ARM -->
+      <item>.arm</item>
+      <item>.bss</item>
+      <item>.code</item>
+      <item>.even</item>
+      <item>.force_thumb</item>
+      <item>.ldouble</item>
+      <item>.loc</item>
+      <item>.ltorg</item>
+      <item>.packed</item>
+      <item>.pool</item>
+      <item>.req</item>
+      <item>.thumb</item>
+      <item>.thumb_func</item>
+      <item>.thumb_set</item>
+    </list>
+
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
+        <RegExpr      attribute="Label" context="#stay" String="[\.]?[_\w\d-]*\s*:" />
+        <keyword      attribute="Keyword" context="#stay" String="keywords"/>
+        <keyword      attribute="Registers" context="#stay" String="registers"/>
+        <keyword      attribute="Instructions" context="#stay" String="instructions"/>
+        <keyword      attribute="Branch Instructions" context="#stay" String="branch instructions"/>
+        <HlCOct       attribute="Octal" context="#stay" />
+        <HlCHex       attribute="Hex" context="#stay" />
+        <RegExpr      attribute="Binary" context="#stay" String="0[bB][01]+" />
+        <Int          attribute="Decimal" context="#stay" />
+        <RegExpr      attribute="Float" context="#stay" String="0[fFeEdD][-+]?[0-9]*\.?[0-9]*[eE]?[-+]?[0-9]+" />
+        <RegExpr      attribute="Normal Text" context="#stay" String="[A-Za-z_.$][A-Za-z0-9_.$]*" />
+        <HlCChar      attribute="Char" context="#stay" />
+        <RegExpr      attribute="Char" context="#stay" String="'(\\x[0-9a-fA-F][0-9a-fA-F]?|\\[0-7]?[0-7]?[0-7]?|\\.|.)" />
+        <DetectChar   attribute="String" context="String" char="&quot;" />
+        <RegExpr      attribute="Preprocessor" context="Preprocessor" String="#\s*if(?:def|ndef)?(?=\s+\S)" insensitive="true" beginRegion="PP" firstNonSpace="true" />
+        <RegExpr      attribute="Preprocessor" context="Preprocessor" String="#\s*endif" insensitive="true" endRegion="PP" firstNonSpace="true" />
+        <RegExpr      attribute="Preprocessor" context="Define" String="#\s*define.*((?=\\))" insensitive="true" firstNonSpace="true" />
+        <RegExpr      attribute="Preprocessor" context="Preprocessor" String="#\s*(?:el(?:se|if)|include(?:_next)?|define|undef|line|error|warning|pragma)" firstNonSpace="true" />
+        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="*" beginRegion="BlockComment" />
+        <AnyChar      attribute="Comment" context="Commentar 2" String="@;#" />
+        <AnyChar      attribute="Symbol" context="#stay" String="!#%&amp;*()+,-&lt;=&gt;?/:[]^{|}~" />
+      </context>
+      <context attribute="Comment" lineEndContext="#stay" name="Commentar 1">
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="BlockComment" />
+        <DetectSpaces />
+        <IncludeRules context="##Comments" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="Commentar 2" >
+        <DetectSpaces />
+        <IncludeRules context="##Comments" />
+      </context>
+      <context attribute="String" lineEndContext="#pop" name="String">
+        <LineContinue  attribute="String" context="Some Context" />
+        <HlCStringChar attribute="String Char" context="#stay" />
+        <DetectChar    attribute="String" context="#pop" char="&quot;" />
+      </context>
+      <context attribute="Preprocessor" lineEndContext="#pop" name="Preprocessor" />
+      <context attribute="Preprocessor" lineEndContext="#pop" name="Define">
+        <LineContinue attribute="Preprocessor" context="#stay"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="Some Context" />
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal Text"  defStyleNum="dsNormal"   />
+      <itemData name="Label"        defStyleNum="dsFunction"  />
+      <itemData name="Keyword"      defStyleNum="dsKeyword"  />
+      <itemData name="Registers"    defStyleNum="dsKeyword"  />
+      <itemData name="Instructions" defStyleNum="dsKeyword"  />
+      <itemData name="Branch Instructions" defStyleNum="dsControlFlow"  />
       <itemData name="Decimal"      defStyleNum="dsDecVal"   />
       <itemData name="Octal"        defStyleNum="dsBaseN"    />
       <itemData name="Hex"          defStyleNum="dsBaseN"    />
diff --git a/xml/haskell.xml b/xml/haskell.xml
--- a/xml/haskell.xml
+++ b/xml/haskell.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE language SYSTEM "language.dtd" [
   <!ENTITY symbolops "\-!#\$&#37;&amp;\*\+/&lt;=&gt;\?&#92;@\^\|~\.:">
 ]>
-<language name="Haskell" version="19" kateversion="5.53" section="Sources" extensions="*.hs;*.chs;*.hs-boot" mimetype="text/x-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL" indenter="haskell" style="haskell">
+<language name="Haskell" version="20" kateversion="5.53" section="Sources" extensions="*.hs;*.chs;*.hs-boot" mimetype="text/x-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL" indenter="haskell" style="haskell">
   <highlighting>
   <list name="keywords">
     <item>case</item>
@@ -459,11 +459,8 @@
   </list>
   <contexts>
     <context attribute="Normal" lineEndContext="#stay" name="code">
-      <StringDetect attribute="Pragma"  context="pragma" String="{-#"/>
-      <StringDetect attribute="Comment" context="#stay" String="{--}"/>
-      <RegExpr attribute="Comment" context="comments" String="\{-(?=[^#]|$)" beginRegion="BlockComment"/>
-      <RegExpr attribute="Comment" context="comment"  String="--[\-]*(?=[^!#\$%&amp;\*\+\./&lt;=&gt;\?@&#92;\^\|\-~:]|$)" />
-      <WordDetect attribute="Keyword" context="import"   String="import" />
+      <IncludeRules context="FindComment"/>
+      <WordDetect attribute="Keyword" context="import" String="import"/>
       <Detect2Chars attribute="C2HS Directive" context="c2hs directive" char="{" char1="#"/>
       <DetectChar attribute="C Preprocessor" context="C Preprocessor" char="#" column="0"/>
 
@@ -473,10 +470,10 @@
       <keyword attribute="Data Prelude"     context="#stay" String="prelude data" />
       <keyword attribute="Class Prelude"    context="#stay" String="prelude class" />
 
-      <RegExpr attribute="Special"          context="#stay" String="(::|=&gt;|\-&gt;|&lt;\-|=)(?![&symbolops;])|∷⇒→←∀∃" />
+      <RegExpr attribute="Special"          context="#stay" String="(::|=&gt;|-&gt;|&lt;-|=)(?![&symbolops;])" />
       <RegExpr attribute="Signature"        context="#stay" String="\s*[a-z_][a-zA-Z0-9_']*\s*(?=::([^&symbolops;]|$))|\s*(\([&symbolops;]*\))*\s*(?=::[^&symbolops;])" />
       <RegExpr attribute="Function"         context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[a-z_][a-zA-Z0-9_']*" />
-      <RegExpr attribute="Operator"         context="#stay" String="([A-Z][a-zA-Z0-0_']*\.)*[&symbolops;]+" />
+      <RegExpr attribute="Operator"         context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[&symbolops;]+" />
       <RegExpr attribute="Type"             context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[A-Z][a-zA-Z0-9_']*|'(?![A-Z]')([A-Z][a-zA-Z0-9_']*\.)*[A-Z][a-zA-Z0-9_']*" />
 
       <RegExpr    attribute="Float"   context="#stay" String ="\d+\.\d+([Ee][+-]?\d+)?|\d+[Ee][+-]?\d+"/>
@@ -494,6 +491,11 @@
       <StringDetect attribute="Normal" context="Julius" String="[julius|" />
       <RegExpr attribute="Normal" context="QuasiQuote" String="\[[a-zA-Z_'](\w|[_'])*\|" />
     </context>
+    <context attribute="Normal" lineEndContext="#pop" name="FindComment">
+      <StringDetect attribute="Pragma"  context="pragma" String="{-#"/>
+      <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" beginRegion="BlockComment"/>
+      <RegExpr attribute="Comment" context="comment" String="--+(?![&symbolops;])"/>
+    </context>
     <context attribute="Normal" lineEndContext="#stay" name="QuasiQuote">
       <Detect2Chars attribute="Normal" context="#pop" char="|" char1="]"/>
     </context>
@@ -506,38 +508,44 @@
       <IncludeRules context="##Hamlet" />
     </context>
     <context attribute="Pragma" lineEndContext="#stay" name="pragma">
+      <DetectSpaces attribute="Pragma" />
       <keyword attribute="Pragma" context="#stay" String="language_pragmas" />
+      <DetectIdentifier attribute="Pragma" />
       <StringDetect attribute="Pragma"  context="#pop" String="#-}"/>
     </context>
     <context attribute="Comment" lineEndContext="#pop" name="comment">
+      <DetectSpaces attribute="Comment" />
       <IncludeRules context="Haddock" />
       <IncludeRules context="##Comments" />
+      <DetectIdentifier attribute="Comment" />
     </context>
     <context attribute="Comment" lineEndContext="#stay" name="comments">
+      <DetectSpaces attribute="Comment" />
       <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" beginRegion="BlockComment" />
       <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" endRegion="BlockComment" />
       <IncludeRules context="Haddock" />
       <IncludeRules context="##Comments" />
+      <DetectIdentifier attribute="Comment" />
     </context>
     <context attribute="Char" lineEndContext="#pop" name="char">
-      <RegExpr attribute="Char" context="#stay" String="\\." />
       <DetectChar attribute="Char" context="#pop" char="'" />
+      <RegExpr attribute="Char" context="#stay" String="\\." />
     </context>
     <context attribute="String" lineEndContext="#stay" name="string">
-      <RegExpr attribute="String" context="#stay" String="\\." />
       <DetectChar attribute="String" context="#pop" char="&quot;" />
+      <RegExpr attribute="String" context="#stay" String="\\." />
     </context>
     <context attribute="Function Infix" lineEndContext="#stay" name="infix">
       <DetectChar attribute="Function Infix" context="#pop" char="`"/>
+      <DetectIdentifier attribute="Function Infix"/>
     </context>
     <context attribute="Normal" lineEndContext="#pop" name="import">
+      <DetectSpaces attribute="Normal" />
       <keyword attribute="Keyword"          context="#stay" String="import_keywords" />
       <RegExpr attribute="Function"         context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[a-z][a-zA-Z0-9_']*" />
       <RegExpr attribute="Type"             context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[A-Z][a-zA-Z0-9_']*" />
 
-      <RegExpr attribute="Pragma"  context="#stay" String="\{-#.*#-\}"/>
-      <RegExpr attribute="Comment" context="comments" String="\{-(?=[^#]|$)" beginRegion="BlockComment" />
-      <RegExpr attribute="Comment" context="comment"  String="--(?=[^&symbolops;]|$)" />
+      <IncludeRules context="FindComment" />
     </context>
 
     <!-- Haddock -->
@@ -551,8 +559,10 @@
       <DetectChar attribute="Haddock Emphasis" context="Haddock Emphasis" char="/" />
     </context>
     <context attribute="Haddock Emphasis" lineEndContext="#pop" name="Haddock Emphasis">
+      <DetectSpaces attribute="Haddock Emphasis" />
       <DetectChar attribute="Haddock Emphasis" context="#pop#pop" char="/" />
       <IncludeRules context="Haddock"/>
+      <DetectIdentifier attribute="Haddock Emphasis" />
     </context>
     <context attribute="Haddock Bold" lineEndContext="#pop" name="Start Haddock Bold">
       <Detect2Chars attribute="Haddock Bold" context="Haddock Bold" char="_" char1="_" />
@@ -570,6 +580,7 @@
 
     <!-- C2Hs -->
     <context attribute="C2HS Directive" lineEndContext="#stay" name="c2hs directive">
+      <DetectSpaces attribute="C2HS Directive" />
       <Detect2Chars attribute="C2HS Directive" context="#pop" char="#" char1="}" />
       <keyword attribute="Keyword" context="#stay"          String="c2hs_keywords" />
       <StringDetect attribute="Keyword" context="#stay"          String="context" />
@@ -579,26 +590,28 @@
       <StringDetect attribute="Keyword" context="c2hs fun"       String="fun" />
       <StringDetect attribute="Keyword" context="c2hs pointer"   String="pointer" />
       <StringDetect attribute="Keyword" context="c2hs enum"      String="enum" />
-      <StringDetect attribute="Keyword" context="c2hs import"    String="import" />
+      <StringDetect attribute="Keyword" context="c2hs enum"      String="import" />
     </context>
-    <context attribute="C2HS Directive" lineEndContext="#stay" name="c2hs import">
+    <context attribute="C2HS Directive" lineEndContext="#stay" name="c2hs enum">
+      <DetectSpaces attribute="C2HS Directive" />
       <RegExpr attribute="Type"    context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[A-Z][a-zA-Z0-9_']*" />
       <Detect2Chars attribute="C2HS Directive" context="#pop#pop" char="#" char1="}" />
+      <DetectIdentifier attribute="C2HS Directive" />
     </context>
     <context attribute="C2HS Directive" lineEndContext="#stay" name="c2hs pointer">
+      <DetectSpaces attribute="C2HS Directive" />
       <keyword attribute="Keyword" context="#stay" String="c2hs_keywords" />
       <StringDetect attribute="Keyword" context="#stay" String="newtype" />
       <RegExpr attribute="Type"    context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[A-Z][a-zA-Z0-9_']*" />
       <Detect2Chars attribute="C2HS Directive" context="#pop#pop" char="#" char1="}" />
+      <DetectIdentifier attribute="C2HS Directive" />
     </context>
     <context attribute="C2HS Directive" lineEndContext="#stay" name="c2hs fun">
+      <DetectSpaces attribute="C2HS Directive" />
       <keyword attribute="Keyword" context="#stay" String="c2hs_keywords" />
-      <RegExpr attribute="Type" context="#stay" String="`[^']*'" />
-      <Detect2Chars attribute="C2HS Directive" context="#pop#pop" char="#" char1="}" />
-    </context>
-    <context attribute="C2HS Directive" lineEndContext="#stay" name="c2hs enum">
-      <RegExpr attribute="Type"             context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[A-Z][a-zA-Z0-9_']*" />
+      <RangeDetect attribute="Type" context="#stay" char="`" char1="'" />
       <Detect2Chars attribute="C2HS Directive" context="#pop#pop" char="#" char1="}" />
+      <DetectIdentifier attribute="C2HS Directive" />
     </context>
   </contexts>
   <itemDatas>
diff --git a/xml/ini.xml b/xml/ini.xml
--- a/xml/ini.xml
+++ b/xml/ini.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="INI Files" section="Configuration" extensions="*.ini;*.pls;*.kcfgc" mimetype="" version="8" kateversion="5.0" author="Jan Janssen (medhefgo@web.de)" license="LGPL">
+<language name="INI Files" section="Configuration" extensions="*.ini;*.pls;*.kcfgc" mimetype="" version="10" kateversion="5.0" author="Jan Janssen (medhefgo@web.de)" license="LGPL">
 
 <highlighting>
 <list name="keywords">
@@ -34,15 +34,26 @@
 
 <contexts>
  <context name="ini" attribute="Normal Text" lineEndContext="#stay">
-  <RangeDetect attribute="Section" context="#stay" char="["  char1="]" beginRegion="Section" endRegion="Section" />
+  <RangeDetect attribute="Section" context="#stay" char="[" char1="]" beginRegion="Section" endRegion="Section" />
   <DetectChar attribute="Assignment" context="Value" char="=" />
   <AnyChar String=";#" attribute="Comment" context="Comment" firstNonSpace="true" />
+  <DetectIdentifier />
+  <DetectSpaces />
  </context>
 
- <context name="Value" attribute="Value" lineEndContext="#pop" >
+ <context name="Value" attribute="Value" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop!NormalValue">
+  <RegExpr context="#pop!SpecialValue" String="\s*((-?(\d+(\.\d*)?|\.d+)(e\d+)?|On|Off|Defaults?|Localhost|Null|True|False|Yes|No|Normal)\s*$|~?(E_ALL|E_ERROR|E_WARNING|E_PARSE|E_NOTICE|E_STRICT|E_CORE_ERROR|E_CORE_WARNING|E_COMPILE_ERROR|E_COMPILE_WARNING|E_USER_ERROR|E_USER_WARNING|E_USER_NOTICE)\b)" lookAhead="1" insensitive="1"/>
+ </context>
+
+ <context name="SpecialValue" attribute="Value" lineEndContext="#pop">
   <Float attribute="Float" />
   <Int attribute="Int" />
-  <keyword attribute="Keyword" String="keywords" />
+  <keyword attribute="Keyword" String="keywords"/>
+  <DetectChar attribute="Int" char="-" />
+  <DetectSpaces />
+ </context>
+
+ <context name="NormalValue" attribute="Value" lineEndContext="#pop">
  </context>
 
  <context name="Comment" attribute="Comment" lineEndContext="#pop">
diff --git a/xml/isocpp.xml b/xml/isocpp.xml
--- a/xml/isocpp.xml
+++ b/xml/isocpp.xml
@@ -24,7 +24,7 @@
 <language
     name="ISO C++"
     section="Sources"
-    version="23"
+    version="24"
     kateversion="5.0"
     indenter="cstyle"
     style="C++"
@@ -57,6 +57,10 @@
       <item>throw</item>
       <item>try</item>
       <item>while</item>
+      <!-- coroutine -->
+      <item>co_await</item>
+      <item>co_return</item>
+      <item>co_yield</item>
     </list>
 
     <!-- https://en.cppreference.com/w/cpp/keyword -->
@@ -128,20 +132,9 @@
       <item>import</item>
       <item>module</item>
       <item>export</item> <!-- Unused but reserved, keyword since c++20 -->
-      <!-- coroutine -->
-      <item>co_await</item>
-      <item>co_return</item>
-      <item>co_yield</item>
       <!-- reflexion TS -->
       <!-- <item>reflexpr</item> -->
     </list>
-    <!-- This keyword may appear in InternalsNS context. For example in code:
-      details::some_class::template some_templated_static();
-      and it should be displayed as keyword, not like part of details namespace...
-      -->
-    <list name="template">
-      <item>template</item>
-    </list>
 
     <!-- 7.6 Attributes -->
     <!-- http://en.cppreference.com/w/cpp/language/attributes -->
@@ -162,13 +155,6 @@
       <!-- TM TS -->
       <!-- <item>optimize_for_synchronized</item> -->
     </list>
-    <!-- This keyword may appear in Attribute context. For example in code:
-    [[using CC: opt(1), debug]]
-    and it should be displayed as keyword, not like part of attribute...
-    -->
-    <list name="using">
-      <item>using</item>
-    </list>
 
     <!-- https://en.cppreference.com/w/cpp/keyword -->
     <!-- https://en.cppreference.com/w/cpp/types/integer -->
@@ -261,30 +247,32 @@
       <item>__VA_ARGS__</item>
       <item>__VA_OPT__</item>
     </list>
-    <list name="preprocessorIf">
+    <list name="preprocessor">
       <item>if</item>
-    </list>
-    <list name="preprocessorIfDef">
       <item>ifdef</item>
       <item>ifndef</item>
-    </list>
-    <list name="preprocessorElseIf">
       <item>elif</item>
-    </list>
-    <list name="preprocessorElse">
       <item>else</item>
-    </list>
-    <list name="preprocessorEndIf">
       <item>endif</item>
+      <item>cmakedefine01</item>
+      <item>cmakedefine</item>
+      <item>define</item>
+      <item>include</item>
+      <item>error</item>
+      <item>line</item>
+      <item>pragma</item>
+      <item>undef</item>
+      <item>warning</item>
     </list>
+    <list name="preprocessorIfDef">
+      <item>ifdef</item>
+      <item>ifndef</item>
+    </list>
     <list name="preprocessorDefine">
       <item>cmakedefine01</item>
       <item>cmakedefine</item>
       <item>define</item>
     </list>
-    <list name="preprocessorInclude">
-      <item>include</item>
-    </list>
     <list name="preprocessorOther">
       <item>error</item>
       <item>line</item>
@@ -528,7 +516,11 @@
         <!-- Attributes may contain some text: [[deprecated("Reason text")]] -->
         <DetectChar attribute="String" context="String" char="&quot;" />
         <AnyChar attribute="Decimal" context="Integer" String="0123456789" lookAhead="true" />
-        <keyword attribute="Keyword" context="AttributeNamespace" String="using" />
+        <!-- This keyword may appear in Attribute context. For example in code:
+        [[using CC: opt(1), debug]]
+        and it should be displayed as keyword, not like part of attribute...
+        -->
+        <WordDetect attribute="Keyword" context="AttributeNamespace" String="using" />
         <IncludeRules context="DetectGccAttributes##GCCExtensions" />
         <RegExpr attribute="CONSTS/MACROS" context="#stay" String="[A-Z][A-Z0-9_]{2,}\b" />
         <DetectIdentifier />
@@ -559,7 +551,11 @@
       <context name="Region Marker" attribute="Region Marker" lineEndContext="#pop" />
 
       <context name="DetectNSEnd" attribute="Normal Text" lineEndContext="#stay">
-        <keyword attribute="Keyword" context="#stay" String="template" />
+        <!-- This keyword may appear in InternalsNS context. For example in code:
+          details::some_class::template some_templated_static();
+          and it should be displayed as keyword, not like part of details namespace...
+          -->
+        <WordDetect attribute="Keyword" context="#stay" String="template" />
         <DetectIdentifier context="#stay" />
         <AnyChar attribute="Separator Symbol" context="#pop" String="&separators;" />
         <AnyChar attribute="Symbol" context="#pop" String="&ns_punctuators; &#9;" />
@@ -614,15 +610,6 @@
       <context name="AfterHashLineError" attribute="Region Marker" lineEndContext="#pop">
         <LineContinue attribute="Error" context="#stay" />
         <RegExpr attribute="Error" context="#pop!LineError" String="[^\\]+" />
-        <!-- for auto-completion in Kate editor -->
-        <keyword attribute="Preprocessor" context="#pop!LineError" String="preprocessorInclude" />
-        <keyword attribute="Preprocessor" context="#pop!LineError" String="preprocessorIfDef" />
-        <keyword attribute="Preprocessor" context="#pop!LineError" String="preprocessorIf" />
-        <keyword attribute="Preprocessor" context="#pop!LineError" String="preprocessorElseIf" />
-        <keyword attribute="Preprocessor" context="#pop!LineError" String="preprocessorElse" />
-        <keyword attribute="Preprocessor" context="#pop!LineError" String="preprocessorEndIf" />
-        <keyword attribute="Preprocessor" context="#pop!LineError" String="preprocessorOther" />
-        <keyword attribute="Preprocessor" context="#pop!LineError" String="preprocessorDefine" />
       </context>
 
       <context name="LineError" attribute="Error" lineEndContext="#pop">
@@ -630,17 +617,17 @@
       </context>
 
       <context name="PreprocessorCmd" attribute="Error" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!AfterHashLineError">
-        <keyword attribute="Preprocessor" context="#pop!Include" String="preprocessorInclude" />
+        <WordDetect attribute="Preprocessor" context="#pop!Include" String="include" />
         <keyword attribute="Preprocessor" context="#pop!PreprocessorIfDef" String="preprocessorIfDef" beginRegion="PP" lookAhead="true" />
-        <keyword attribute="Preprocessor" context="#pop!PreprocessorIf" String="preprocessorIf" beginRegion="PP" lookAhead="true" />
-        <keyword attribute="Preprocessor" context="#pop!PreprocessorIf" String="preprocessorElseIf" endRegion="PP" beginRegion="PP" lookAhead="true" />
-        <keyword attribute="Preprocessor" context="PreprocessorEndOfLineSpace" String="preprocessorElse" endRegion="PP" beginRegion="PP" />
-        <keyword attribute="Preprocessor" context="PreprocessorEndOfLineSpace" String="preprocessorEndIf" endRegion="PP" />
+        <WordDetect attribute="Preprocessor" context="#pop!PreprocessorIf" String="if" beginRegion="PP" lookAhead="true" />
+        <WordDetect attribute="Preprocessor" context="#pop!PreprocessorIf" String="elif" endRegion="PP" beginRegion="PP" lookAhead="true" />
+        <WordDetect attribute="Preprocessor" context="PreprocessorEndOfLineSpace" String="else" endRegion="PP" beginRegion="PP" />
+        <WordDetect attribute="Preprocessor" context="PreprocessorEndOfLineSpace" String="endif" endRegion="PP" />
         <keyword attribute="Preprocessor" context="#pop!Preprocessor" String="preprocessorOther" />
         <keyword attribute="Preprocessor" context="#pop!Define" String="preprocessorDefine" />
         <!-- GCC extension -->
         <WordDetect attribute="Preprocessor" context="#pop!Include" String="include_next" />
-        <RegExpr attribute="Preprocessor" context="#pop!Preprocessor" String="[0-9]+" />
+        <Int attribute="Preprocessor" context="#pop!Preprocessor"/>
       </context>
 
       <context name="Include" attribute="Preprocessor" lineEndContext="#pop" >
diff --git a/xml/j.xml b/xml/j.xml
--- a/xml/j.xml
+++ b/xml/j.xml
@@ -62,7 +62,7 @@
 -->
 <language name="J"
           section="Scripts"
-          version="4"
+          version="5"
           kateversion="5.0"
           extensions="*.ijs;*.ijt;*.IJS;*.IJT"
           mimetype="text/x-j;text/x-jsrc"
@@ -74,7 +74,7 @@
       <context attribute="Sentence" lineEndContext="#pop" name="sentence">
         <DetectSpaces/>
         <RegExpr      attribute="Foldable"       context="#stay"        String=":\s*0|\bdefine\b" beginRegion="Fold"/>
-        <RegExpr      attribute="Foldable"       context="#stay"        String="^\)$" endRegion="Fold" column="0"/>
+        <LineContinue attribute="Foldable"       context="#stay"        char=")" endRegion="Fold" column="0"/>
         <StringDetect attribute="Comment"        context="#stay"        String="NB.(" beginRegion="Fold"/>
         <StringDetect attribute="Comment"        context="#stay"        String="NB.)" endRegion="Fold"/>
         <StringDetect attribute="Comment"        context="comment line" String="NB."/>
diff --git a/xml/java.xml b/xml/java.xml
--- a/xml/java.xml
+++ b/xml/java.xml
@@ -7,7 +7,7 @@
 	<!ENTITY float "(\b&int;(\.((&int;&exp;?+|&exp;)[fFdD]?\b|[fFdD]\b)?|&exp;[fFdD]?\b|[fFdD]\b)|\.&int;&exp;?[fFdD]?\b)">
 	<!ENTITY hexfloat "\b0[xX](&hex;\.?+&hex;?+|\.&hex;?)[pP][-+]?&int;[fFdD]?\b">
 ]>
-<language name="Java" version="9" kateversion="5.62" section="Sources" extensions="*.java" mimetype="text/x-java" license="LGPL" author="Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)">
+<language name="Java" version="10" kateversion="5.62" section="Sources" extensions="*.java" mimetype="text/x-java" license="LGPL" author="Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)">
 	<highlighting>
 		<list name="java15">
 			<item>ACTIVE</item>
@@ -3732,6 +3732,7 @@
 			<item>volatile</item>
 		</list>
 		<list name="control flow">
+			<item>assert</item>
 			<item>break</item>
 			<item>case</item>
 			<item>catch</item>
@@ -3760,6 +3761,7 @@
 			<item>long</item>
 			<item>short</item>
 			<item>static</item>
+			<item>var</item>
 			<item>void</item>
 		</list>
 		<contexts>
diff --git a/xml/javascript.xml b/xml/javascript.xml
--- a/xml/javascript.xml
+++ b/xml/javascript.xml
@@ -2,6 +2,12 @@
 <!DOCTYPE language SYSTEM "language.dtd"
 [
   <!ENTITY identifier "[a-zA-Z_$[:^ascii:]][\w$[:^ascii:]]*">
+
+  <!-- https://tc39.es/ecma262/#sec-literals-numeric-literals -->
+  <!ENTITY DecimalIntegerLiteral "(0|[1-9][0-9]*+(_[0-9]++)*+)">
+  <!ENTITY DecimalDigits "([0-9]++(_[0-9]++)*+)">
+  <!ENTITY ExponentPart "([eE][+-]?&DecimalDigits;)">
+  <!ENTITY float "&DecimalIntegerLiteral;(\.&DecimalDigits;?&ExponentPart;?|&ExponentPart;)|\.&DecimalDigits;&ExponentPart;?">
 ]>
 
 <!--
@@ -17,7 +23,7 @@
    * QML
    * CoffeeScript (embedded)
 -->
-<language name="JavaScript" version="19" kateversion="5.53" section="Scripts" extensions="*.js;*.kwinscript;*.julius"
+<language name="JavaScript" version="20" kateversion="5.53" section="Scripts" extensions="*.js;*.kwinscript;*.julius"
           mimetype="text/x-javascript;application/x-javascript;application/javascript;text/javascript" indenter="cstyle"
           author="Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net)" license="">
 
@@ -102,6 +108,7 @@
       <item>BigUint64Array</item>
       <item>DataView</item>
       <item>Date</item>
+      <item>FinalizationRegistry</item>
       <item>Float32Array</item>
       <item>Float64Array</item>
       <item>Function</item>
@@ -127,6 +134,7 @@
       <item>Uint32Array</item>
       <item>Uint8ClampedArray</item>
       <item>WeakMap</item>
+      <item>WeakRef</item>
       <item>WeakSet</item>
       <!-- Class: Error -->
       <item>Error</item>
@@ -1740,14 +1748,16 @@
 
       <!-- Numbers -->
       <context attribute="Normal Text" lineEndContext="#stay" name="FindNumbers">
-        <Float attribute="Float" context="NoRegExp" />
-        <!-- Invalid Binary, Octal or Hex. IMPORTANT: Allow Bigint. -->
-        <RegExpr attribute="Error" context="NoRegExp" String="\b0(?:b[01]*[2-9]\d*|o[0-7]*[89]\d*|x[0-9a-f]*[g-mo-z][a-mo-z0-9]*)" insensitive="true" />
-        <HlCHex attribute="Hex" context="NoRegExp" />
-        <RegExpr attribute="Octal" context="NoRegExp" String="\b0[oO][0-7]+" />
-        <RegExpr attribute="Binary" context="NoRegExp" String="\b0[bB][01]+" />
-        <RegExpr attribute="Float" context="NoRegExp" String="\b\d+[eE][\+\-]?\d+" />
-        <Int attribute="Decimal" context="NoRegExp" />
+        <RegExpr attribute="Float" context="NoRegExp" String="\b&float;" />
+        <RegExpr attribute="Hex" context="NumericSufix" String="\b0[xX][0-9a-fA-F]++(_[0-9a-fA-F]++)*+"/>
+        <!-- 07 is octal, 08 is decimal -->
+        <RegExpr attribute="Octal" context="NumericSufix" String="\b0([oO][0-7]++(_[0-7]++)*+|0*+[1-7][0-7]*+(_[0-7]++)*+(?!_?[89]))" />
+        <RegExpr attribute="Binary" context="NumericSufix" String="\b0[bB][01]++(_[01]++)*+" />
+        <RegExpr attribute="Decimal" context="NumericSufix" String="\b0*+([1-9][0-9]*+(_[0-9]++)*+)?"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="NumericSufix" fallthrough="true" fallthroughContext="#pop!NoRegExp">
+        <DetectChar attribute="Normal Text" context="#pop!NoRegExp" char="n" />
+        <RegExpr attribute="Error" context="#pop!NoRegExp" String="[0-9]*(&identifier;)?"/>
       </context>
 
       <!-- Find Objects Member and Functions -->
diff --git a/xml/julia.xml b/xml/julia.xml
--- a/xml/julia.xml
+++ b/xml/julia.xml
@@ -31,28 +31,42 @@
 [
   <!ENTITY int "[0-9]([0-9_]*[0-9])?">
   <!ENTITY hex "[0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?">
+  <!ENTITY function_disallowed_chars "\s.,(){}\[\];:&#37;'&quot;&amp;$=/?\|^#@">
+  <!ENTITY function_disallowed_first_char "0-9!&function_disallowed_chars;">
+  <!ENTITY function_begin_boundary "(?:(?&lt;=[&function_disallowed_chars;!]|^)(?=[^&function_disallowed_first_char;]))">
 ]>
 
-<language name="Julia" section="Sources" version="11" kateversion="5.0" extensions="*.jl" casesensitive="1" priority="5" license="MIT">
+<language name="Julia" section="Sources" version="12" kateversion="5.0" extensions="*.jl" casesensitive="1" priority="5" license="MIT">
 
   <highlighting>
-    <list name="block_begin">
+    <list name="cflow_begin">
+      <item>for</item>
+      <item>while</item>
+      <item>if</item>
       <item>begin</item>
       <item>do</item>
-      <item>for</item>
+    </list>
+    <list name="cflow_eb">
+      <item>else</item>
+      <item>elseif</item>
+      <item>try</item>
+      <item>catch</item>
+      <item>finally</item>
+    </list>
+    <list name="cflow">
+      <item>break</item>
+      <item>return</item>
+      <item>continue</item>
+    </list>
+    <list name="block_begin">
       <item>function</item>
-      <item>if</item>
       <item>let</item>
       <item>quote</item>
-      <item>try</item>
       <item>type</item>
-      <item>while</item>
-    </list>
-    <list name="block_eb">
-      <item>catch</item>
-      <item>finally</item>
-      <item>else</item>
-      <item>elseif</item>
+      <item>struct</item>
+      <item>module</item>
+      <item>baremodule</item>
+      <item>macro</item>
     </list>
     <list name="block_end">
       <item>end</item>
@@ -60,10 +74,8 @@
     <list name="keywords">
       <item>abstract</item>
       <item>bitstype</item>
-      <item>break</item>
       <item>ccall</item>
       <item>const</item>
-      <item>continue</item>
       <item>export</item>
       <item>global</item>
       <item>import</item>
@@ -71,7 +83,6 @@
       <item>local</item>
       <item>macro</item>
       <item>module</item>
-      <item>return</item>
       <item>typealias</item>
       <item>importall</item>
       <item>baremodule</item>
@@ -372,20 +383,18 @@
       <item>stdout</item>
       <item>stderr</item>
       <item>stdin</item>
-      <item>open</item>
-      <item>read</item>
-      <item>write</item>
-      <item>create</item>
-      <item>truncate</item>
-      <item>append</item>
       <item>ENDIAN_BOM</item>
       <!-- Numbers -->
       <item>im</item>
       <item>pi</item>
+      <item>&#960;</item>
       <item>e</item>
+      <item>&#8495;</item>
       <item>catalan</item>
       <item>eulergamma</item>
+      <item>&#611;</item>
       <item>golden</item>
+      <item>&#966;</item>
       <item>Inf</item>
       <item>Inf64</item>
       <item>Inf32</item>
@@ -441,13 +450,37 @@
       <item>Math</item>
       <item>Unicode</item>
       <item>Sort</item>
+      <item>Artifacts</item>
       <item>Base64</item>
+      <item>CRC32c</item>
       <item>Dates</item>
+      <item>DelimitedFiles</item>
+      <item>Distributed</item>
+      <item>Downloads</item>
+      <item>FileWatching</item>
+      <item>Future</item>
+      <item>InteractiveUtils</item>
+      <item>LibGit2</item>
+      <item>Libc</item>
+      <item>Libdl</item>
+      <item>LinearAlgebra</item>
+      <item>Logging</item>
       <item>Mmap</item>
+      <item>Pkg</item>
+      <item>Printf</item>
+      <item>Profile</item>
+      <item>REPL</item>
       <item>Random</item>
+      <item>SHA</item>
+      <item>Serialization</item>
       <item>SharedArrays</item>
       <item>Sockets</item>
       <item>SparseArrays</item>
+      <item>Statistics</item>
+      <item>SuiteSparse</item>
+      <item>TOML</item>
+      <item>Test</item>
+      <item>UUIDs</item>
       <item>CoreLogging</item>
     </list>
     <contexts>
@@ -459,15 +492,20 @@
         <!-- Blocks -->
         <keyword context="#stay" attribute="Keyword" String="block_begin"
                  beginRegion="block" />
-        <keyword context="#stay" attribute="Keyword" String="block_eb"
-                 endRegion="block" beginRegion="block" />
+        <keyword context="controlflow-block" attribute="Control Flow" String="cflow_begin"
+                 beginRegion="block" />
+        <keyword context="#stay" attribute="Control Flow" String="cflow"/>
         <keyword context="#stay" attribute="Keyword" String="block_end"
                  endRegion="block" />
         <StringDetect String="#BEGIN" context="region_marker" attribute="FoldingComment" beginRegion="user_region" />
         <StringDetect String="#END" context="region_marker" attribute="FoldingComment" endRegion="user_region" />
 
+        <!-- functions have to be before built-in types to properly match constructors -->
+        <RegExpr context="#stay" attribute="Function" String="&function_begin_boundary;[^&function_disallowed_first_char;][^&function_disallowed_chars;]*!?(?=\.?\()" />
+        <RegExpr context="parametric-constructor" attribute="Function" String="&function_begin_boundary;[^&function_disallowed_first_char;][^&function_disallowed_chars;]*(?=\{.+\}.?\()" />
+
         <!-- Keywords, types, and comments -->
-        <RegExpr context="#stay" attribute="Keyword" String="\b(abstract|primitive)\s+type\b|\bmutable\s+struct\b" />
+        <RegExpr context="#stay" attribute="Keyword" String="\b(abstract|primitive)\s+type\b|\bmutable\s+struct\b" beginRegion="block"/>
         <keyword context="#stay" attribute="Keyword" String="keywords" />
         <keyword context="#stay" attribute="Data Type" String="types" />
         <keyword context="#stay" attribute="Boolean" String="booleans" />
@@ -505,31 +543,71 @@
 
         <!-- Multi-character operators -->
         <StringDetect context="#stay" attribute="Operator" String="..."/>
-        <Detect2Chars context="#stay" attribute="Operator" char=":" char1=":"/>
+        <Detect2Chars context="type-annotation" attribute="Operator" char=":" char1=":"/>
+        <StringDetect context="#stay" attribute="Operator" String=".&gt;&gt;&gt;="/>
         <StringDetect context="#stay" attribute="Operator" String="&gt;&gt;&gt;="/>
+        <StringDetect context="#stay" attribute="Operator" String=".&gt;&gt;="/>
         <StringDetect context="#stay" attribute="Operator" String="&gt;&gt;="/>
+        <StringDetect context="#stay" attribute="Operator" String=".&lt;&lt;="/>
         <StringDetect context="#stay" attribute="Operator" String="&lt;&lt;="/>
+        <StringDetect context="#stay" attribute="Operator" String=".&gt;&gt;&gt;"/>
         <StringDetect context="#stay" attribute="Operator" String="&gt;&gt;&gt;"/>
+        <StringDetect context="#stay" attribute="Operator" String=".&gt;&gt;"/>
         <Detect2Chars context="#stay" attribute="Operator" char="&gt;" char1="&gt;"/>
         <Detect2Chars context="#stay" attribute="Operator" char="&lt;" char1="&lt;"/>
+        <StringDetect context="#stay" attribute="Operator" String=".=="/>
         <Detect2Chars context="#stay" attribute="Operator" char="=" char1="="/>
+        <StringDetect context="#stay" attribute="Operator" String=".!="/>
         <Detect2Chars context="#stay" attribute="Operator" char="!" char1="="/>
+        <StringDetect context="#stay" attribute="Operator" String=".&lt;="/>
         <Detect2Chars context="#stay" attribute="Operator" char="&lt;" char1="="/>
+        <StringDetect context="#stay" attribute="Operator" String=".&gt;="/>
         <Detect2Chars context="#stay" attribute="Operator" char="&gt;" char1="="/>
         <Detect2Chars context="#stay" attribute="Operator" char="&amp;" char1="&amp;"/>
         <Detect2Chars context="#stay" attribute="Operator" char="|" char1="|"/>
+        <StringDetect context="#stay" attribute="Operator" String=".*="/>
         <Detect2Chars context="#stay" attribute="Operator" char="." char1="*"/>
+        <StringDetect context="#stay" attribute="Operator" String=".^="/>
         <Detect2Chars context="#stay" attribute="Operator" char="." char1="^"/>
+        <StringDetect context="#stay" attribute="Operator" String="./="/>
         <Detect2Chars context="#stay" attribute="Operator" char="." char1="/"/>
         <Detect2Chars context="#stay" attribute="Operator" char="." char1="'"/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="~"/>
+        <StringDetect context="#stay" attribute="Operator" String=".&#8891;="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="&#8891;"/>
+        <StringDetect context="#stay" attribute="Operator" String=".&amp;="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="&amp;"/>
+        <StringDetect context="#stay" attribute="Operator" String=".|="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="|"/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="!"/>
+        <StringDetect context="#stay" attribute="Operator" String=".+="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="+"/>
+        <StringDetect context="#stay" attribute="Operator" String=".-="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="-"/>
+        <StringDetect context="#stay" attribute="Operator" String=".%="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="%"/>
+        <StringDetect context="#stay" attribute="Operator" String=".&#247;="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="&#247;"/>
+        <StringDetect context="#stay" attribute="Operator" String=".&#92;="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="&#92;"/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="&#8800;"/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="&#8804;"/>
+        <Detect2Chars context="#stay" attribute="Operator" char="." char1="&#8805;"/>
         <Detect2Chars context="#stay" attribute="Operator" char="+" char1="="/>
         <Detect2Chars context="#stay" attribute="Operator" char="-" char1="="/>
         <Detect2Chars context="#stay" attribute="Operator" char="*" char1="="/>
         <Detect2Chars context="#stay" attribute="Operator" char="/" char1="="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="&#92;" char1="="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="&#247;" char1="="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="%" char1="="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="^" char1="="/>
         <Detect2Chars context="#stay" attribute="Operator" char="&amp;" char1="="/>
         <Detect2Chars context="#stay" attribute="Operator" char="|" char1="="/>
-        <Detect2Chars context="#stay" attribute="Operator" char="$" char1="="/>
+        <Detect2Chars context="#stay" attribute="Operator" char="&#8891;" char1="="/>
 
+        <!-- subtype operator -->
+        <Detect2Chars context="type-annotation" attribute="Operator" char="&lt;" char1=":"/>
+
         <!-- Look-ahead for adjoint ' after variable, number literal, closing braces and .' -->
         <RegExpr context="_adjoint" attribute="Variable" String="[a-zA-Z]\w*(?=')" />
         <RegExpr context="_adjoint" attribute="Float" String="(&int;(\.&int;)?|\.&int;)([eEfF][+-]?\d+)?(im)?(?=')" />
@@ -541,7 +619,6 @@
         <RegExpr context="#stay" attribute="Incomplete Char" String="'[^']*(''[^']*)*" />
 
         <RegExpr context="#stay" attribute="Macro" String="@[a-zA-Z_]\w*" />
-        <RegExpr context="#stay" attribute="Function" String="\b[A-Za-z_]\w*(?=\!?\()" />
 
         <!-- Identifiers, numbers and braces -->
         <!-- We can't use HlCHex, Int, and Float because we need to allow the "im" at the end of complex numbers -->
@@ -554,7 +631,7 @@
         <AnyChar context="#stay" attribute="Delimiter" String="()[]{}"/>
 
         <!-- Single-character operators -->
-        <AnyChar context="#stay" attribute="Operator" String="*+-/\&amp;|&lt;&gt;~$!^=,;:@"/>
+        <AnyChar context="#stay" attribute="Operator" String="*+-/\&amp;|&lt;&gt;~$!^=,;:@&#8891;%&#247;&#92;&#8800;&#8804;&#8805;"/>
 
       </context>
 
@@ -660,7 +737,30 @@
         <Detect2Chars char="=" char1="#" context="#pop" attribute="Comment" endRegion="block-comment"/>
         <IncludeRules context="##Comments" />
       </context>
+      <context name="controlflow-block" lineEndContext="#stay" attribute="Normal Text">
+        <keyword context="#stay" attribute="Control Flow" String="cflow_eb" endRegion="block" beginRegion="block" />
+        <keyword context="#pop" attribute="Control Flow" String="block_end" endRegion="block" />
+        <IncludeRules context="_normal" />
+      </context>
+      <context name="parametric-type" lineEndContext="#stay" attribute="Data Type">
+        <DetectChar char="{" context="parametric-type"/>
+        <DetectChar char="}" context="#pop"/>
+      </context>
+      <context name="parametric-constructor" lineEndContext="#stay" attribute="Data Type">
+        <DetectChar char="{" context="parametric-type"/>
+        <AnyChar String=",;()=:&gt;&lt;&amp;%*?[]^" context="#pop"/>
+      </context>
 
+      <!-- we have to allow spaces before the type, but switch to the parent context after the type -->
+      <context name="type-annotation-internal" lineEndContext="#pop#pop" attribute="Data Type">
+        <DetectChar char="{" context="parametric-type"/>
+        <AnyChar String=",;()=:&gt;&lt;&amp;%*?[]^" context="#pop#pop"/>
+        <DetectSpaces context="#pop#pop"/>
+        <DetectChar char="}" lookAhead="true" context="#pop#pop"/>
+      </context>
+      <context name="type-annotation" lineEndContext="#pop" attribute="Data Type">
+        <DetectIdentifier context="type-annotation-internal" attribute="Data Type"/>
+      </context>
     </contexts>
 
     <itemDatas>
@@ -677,12 +777,13 @@
       <itemData name="Char" defStyleNum="dsChar"/>
       <itemData name="Incomplete Char" defStyleNum="dsChar"/>
       <itemData name="Keyword" defStyleNum="dsKeyword"/>
+      <itemData name="Control Flow" defStyleNum="dsControlFlow" />
       <itemData name="Data Type" defStyleNum="dsDataType"/>
       <itemData name="Constant" defStyleNum="dsConstant"/>
-      <itemData name="Boolean" defStyleNum="dsExtension"/>
+      <itemData name="Boolean" defStyleNum="dsConstant"/>
       <itemData name="Macro" defStyleNum="dsPreprocessor"/>
       <itemData name="Module" defStyleNum="dsBuiltIn"/>
-      <itemData name="Function" defStyleNum="dsNormal"/>
+      <itemData name="Function" defStyleNum="dsFunction"/>
       <itemData name="Command String" defStyleNum="dsSpecialString"/>
       <itemData name="Comment" defStyleNum="dsComment"/>
       <itemData name="FoldingComment" defStyleNum="dsRegionMarker" />
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="18" section="Markup" kateversion="5.0" 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="19" section="Markup" kateversion="5.0" 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
@@ -771,7 +771,7 @@
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
       </context>
       <context name="BackslashMathModeEnv" attribute="Math" lineEndContext="#pop">
-        <keyword String="beginEnv" attribute="Structure" context="#pop!FindBeginEnvironmentInMathMode" beginRegion="block"/>
+        <keyword String="beginEnv" attribute="Structure" context="#pop!FindBeginEnvironment" beginRegion="block"/>
         <keyword String="endEnv" attribute="Structure" context="#pop!MathFindEnd"/>
         <keyword String="MathModeText" attribute="Macro Mathmode" context="#pop!MathModeText"/>
         <Detect2Chars char="\" char1="(" attribute="Error" context="#pop"/>
@@ -779,25 +779,6 @@
         <Detect2Chars char="\" char1="[" attribute="Error" context="#pop"/>
         <Detect2Chars char="\" char1="]" attribute="Error" context="#pop"/>
         <DetectChar char="\" attribute="Macro Mathmode" context="#pop!MathContrSeq"/>
-      </context>
-
-      <!-- start of an environment in math mode -->
-      <context name="FindBeginEnvironmentInMathMode" attribute="Normal Text" lineEndContext="#stay">
-        <DetectSpaces/>
-        <DetectChar char="{" attribute="Normal Text" context="BeginEnvironmentInMathMode"/>
-        <RegExpr String="." attribute="Normal Text" context="#pop"/>
-      </context>
-
-      <!-- filter the environment name and check the type in math mode -->
-      <context name="BeginEnvironmentInMathMode" attribute="Environment" lineEndContext="#stay">
-        <keyword String="ListingsEnv" attribute="Environment" context="ListingsEnv"/>
-        <keyword String="MintedEnv" attribute="Environment" context="MintedEnv"/>
-        <keyword String="VerbatimEnv" attribute="Environment" context="VerbatimEnv" lookAhead="true"/>
-        <keyword String="CommentEnv" attribute="Environment" context="CommentEnv"/>
-        <keyword String="TabEnv" attribute="Environment" context="TabEnv"/>
-        <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
-        <RegExpr String="&envname;" attribute="Environment" context="LatexEnv"/>
-        <RegExpr String="." attribute="Error" context="#pop"/>
       </context>
 
       <!-- end of math environment -->
diff --git a/xml/lex.xml b/xml/lex.xml
--- a/xml/lex.xml
+++ b/xml/lex.xml
@@ -20,7 +20,7 @@
   
   ========================================================================
 -->
-<language name="Lex/Flex" version="6" kateversion="5.0" section="Sources" extensions="*.l;*.lex;*.flex" author="Jan Villat (jan.villat@net2000.ch)" license="LGPL">
+<language name="Lex/Flex" version="7" kateversion="5.0" section="Sources" extensions="*.l;*.lex;*.flex" author="Jan Villat (jan.villat@net2000.ch)" license="LGPL">
 
 <highlighting>
 <contexts>
@@ -56,7 +56,7 @@
     <RegExpr attribute="Alert" context="#stay" String=".*" />  
   </context>
   <context name="Rule RegExpr" attribute="RegExpr" lineEndContext="#pop">
-    <RegExpr attribute="Content-Type Delimiter" context="Start Conditions Scope" String="\{$" beginRegion="SCscope" />  
+    <LineContinue attribute="Content-Type Delimiter" context="Start Conditions Scope" char="{" beginRegion="SCscope" />  
     <IncludeRules context="RegExpr Base" />
     <RegExpr attribute="RegExpr" context="#stay" String="\S" />  
     <DetectSpaces attribute="Normal Text" context="Action" />  
diff --git a/xml/markdown.xml b/xml/markdown.xml
--- a/xml/markdown.xml
+++ b/xml/markdown.xml
@@ -90,7 +90,7 @@
 <!ENTITY checkbox "\[[ x]\](?=\s)">
 ]>
 
-<language name="Markdown" version="17" kateversion="5.79" section="Markup" extensions="*.md;*.mmd;*.markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
+<language name="Markdown" version="18" kateversion="5.79" section="Markup" extensions="*.md;*.mmd;*.markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
   <highlighting>
     <contexts>
       <!-- Start of the Markdown document: find metadata or code block -->
@@ -149,12 +149,12 @@
       </context>
 
       <context name="find-header" attribute="Normal Text" lineEndContext="#pop">
-        <RegExpr attribute="Header H1" context="#pop" String="^#\s.*[#]?$" column="0"/>
-        <RegExpr attribute="Header H2" context="#pop" String="^##\s.*[#]?$" column="0"/>
-        <RegExpr attribute="Header H3" context="#pop" String="^###\s.*[#]?$" column="0"/>
-        <RegExpr attribute="Header H4" context="#pop" String="^####\s.*[#]?$" column="0"/>
-        <RegExpr attribute="Header H5" context="#pop" String="^#####\s.*[#]?$" column="0"/>
-        <RegExpr attribute="Header H6" context="#pop" String="^######\s.*[#]?$" column="0"/>
+        <RegExpr attribute="Header H1" context="#pop" String="^#\s.*[#]?$" column="0" endRegion="H1" beginRegion="H1"/>
+        <RegExpr attribute="Header H2" context="#pop" String="^##\s.*[#]?$" column="0" endRegion="H2" beginRegion="H2"/>
+        <RegExpr attribute="Header H3" context="#pop" String="^###\s.*[#]?$" column="0" endRegion="H3" beginRegion="H3"/>
+        <RegExpr attribute="Header H4" context="#pop" String="^####\s.*[#]?$" column="0" endRegion="H4" beginRegion="H4"/>
+        <RegExpr attribute="Header H5" context="#pop" String="^#####\s.*[#]?$" column="0" endRegion="H5" beginRegion="H5"/>
+        <RegExpr attribute="Header H6" context="#pop" String="^######\s.*[#]?$" column="0" endRegion="H6" beginRegion="H6"/>
         <DetectChar attribute="Normal Text" context="#pop" char="#"/>
       </context>
       <context name="find-strong-normal" attribute="Normal Text" lineEndContext="#pop">
diff --git a/xml/perl.xml b/xml/perl.xml
--- a/xml/perl.xml
+++ b/xml/perl.xml
@@ -39,7 +39,7 @@
 
    Enhance tr/// and y/// support.
 -->
-<language name="Perl" version="17" kateversion="5.0" section="Scripts" extensions="*.pl;*.PL;*.pm" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPLv2">
+<language name="Perl" version="18" kateversion="5.0" section="Scripts" extensions="*.pl;*.PL;*.pm" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPLv2">
   <highlighting>
     <list name="keywords">
       <item>if</item>
@@ -92,7 +92,7 @@
       <item>+</item>
       <item>-</item>
       <item>*</item>
-     <!-- <item>/</item>//-->
+      <!-- <item>/</item>//-->
       <item>%</item>
       <item>||</item>
       <item>//</item>
@@ -420,7 +420,8 @@
         <DetectChar attribute="Operator" context="quote_word_paren" char="(" beginRegion="Wordlist" />
         <DetectChar attribute="Operator" context="quote_word_brace" char="{" beginRegion="Wordlist" />
         <DetectChar attribute="Operator" context="quote_word_bracket" char="[" beginRegion="Wordlist" />
-        <RegExpr attribute="Operator" context="quote_word" String="([^a-zA-Z0-9_\s[\]{}()])" beginRegion="Wordlist" />
+        <DetectChar attribute="Operator" context="quote_word_angular" char="&lt;" beginRegion="Wordlist" />
+        <RegExpr attribute="Operator" context="quote_word" String="([^a-zA-Z0-9_\s[\]{}()\&lt;&gt;])" beginRegion="Wordlist" />
         <RegExpr attribute="Comment" context="#stay" String="\s+#.*" /><!-- q[qwx] # == comment, look for the delim on the next line -->
       </context>
 
@@ -755,6 +756,12 @@
         <DetectIdentifier />
         <Detect2Chars attribute="Normal Text" context="#stay" char="\" char1="]" />
         <DetectChar attribute="Operator" context="#pop#pop#pop" char="]" endRegion="Wordlist" />
+      </context>
+      <context name="quote_word_angular" attribute="Normal Text" lineEndContext="#stay">
+        <DetectSpaces />
+        <DetectIdentifier />
+        <Detect2Chars attribute="Normal Text" context="#stay" char="\" char1="&gt;" />
+        <DetectChar attribute="Operator" context="#pop#pop#pop" char="&gt;" endRegion="Wordlist" />
       </context>
 
       <!-- ====== Here Documents ====== -->
diff --git a/xml/php.xml b/xml/php.xml
--- a/xml/php.xml
+++ b/xml/php.xml
@@ -77,8 +77,9 @@
   <!ENTITY float "\b&LNUM;(\.(&LNUM;)?(&EXPONENT;)?|&EXPONENT;)|\.&LNUM;(&EXPONENT;)?">
 ]>
 
-<language name="PHP/PHP" indenter="cstyle" version="19" kateversion="5.53" section="Scripts" extensions="" priority="5" mimetype="" hidden="true">
+<language name="PHP/PHP" indenter="cstyle" version="21" kateversion="5.53" section="Scripts" extensions="" priority="5" mimetype="" hidden="true">
   <highlighting>
+    <!-- https://php.watch/versions -->
 
     <!-- https://secure.php.net/manual/en/reserved.keywords.php -->
     <list name="control structures">
@@ -137,6 +138,7 @@
       <item>echo</item>
       <item>empty</item>
       <item>enddeclare</item>
+      <item>enum</item>
       <item>eval</item>
       <item>extends</item>
       <item>final</item>
@@ -859,6 +861,7 @@
       <item>CURLOPT_CUSTOMREQUEST</item>
       <item>CURLOPT_DEFAULT_PROTOCOL</item>
       <item>CURLOPT_DISALLOW_USERNAME_IN_URL</item>
+      <item>CURLOPT_DOH_URL</item>
       <item>CURLOPT_DNS_CACHE_TIMEOUT</item>
       <item>CURLOPT_DNS_INTERFACE</item>
       <item>CURLOPT_DNS_LOCAL_IP4</item>
@@ -2412,6 +2415,7 @@
       <item>MYSQLI_REFRESH_HOSTS</item>
       <item>MYSQLI_REFRESH_LOG</item>
       <item>MYSQLI_REFRESH_MASTER</item>
+      <item>MYSQLI_REFRESH_REPLICA</item>
       <item>MYSQLI_REFRESH_SLAVE</item>
       <item>MYSQLI_REFRESH_STATUS</item>
       <item>MYSQLI_REFRESH_TABLES</item>
@@ -5386,6 +5390,7 @@
       <item>array_intersect_key</item>
       <item>array_intersect_uassoc</item>
       <item>array_intersect_ukey</item>
+      <item>array_is_list</item>
       <item>array_keys</item>
       <item>array_key_exists</item>
       <item>array_key_first</item>
@@ -6461,6 +6466,7 @@
       <item>fbsql_username</item>
       <item>fbsql_warnings</item>
       <item>fclose</item>
+      <item>fdatasync</item>
       <item>fdf_add_doc_javascript</item>
       <item>fdf_add_template</item>
       <item>fdf_close</item>
@@ -6496,6 +6502,7 @@
       <item>fdf_set_target_frame</item>
       <item>fdf_set_value</item>
       <item>fdf_set_version</item>
+      <item>fdiv</item>
       <item>feof</item>
       <item>fflush</item>
       <item>fgetc</item>
@@ -6554,6 +6561,7 @@
       <item>fseek</item>
       <item>fsockopen</item>
       <item>fstat</item>
+      <item>fsync</item>
       <item>ftell</item>
       <item>ftok</item>
       <item>ftp_alloc</item>
@@ -6656,6 +6664,7 @@
       <item>get_class_methods</item>
       <item>get_class_vars</item>
       <item>get_current_user</item>
+      <item>get_debug_type</item>
       <item>get_declared_classes</item>
       <item>get_declared_interfaces</item>
       <item>get_declared_traits</item>
@@ -6675,6 +6684,7 @@
       <item>get_parent_class</item>
       <item>get_required_files</item>
       <item>get_resources</item>
+      <item>get_resource_id</item>
       <item>get_resource_type</item>
       <item>glob</item>
       <item>gmdate</item>
@@ -8742,6 +8752,7 @@
       <item>preg_filter</item>
       <item>preg_grep</item>
       <item>preg_last_error</item>
+      <item>preg_last_error_msg</item>
       <item>preg_match</item>
       <item>preg_match_all</item>
       <item>preg_quote</item>
@@ -9518,6 +9529,8 @@
       <item>strtoupper</item>
       <item>strtr</item>
       <item>strval</item>
+      <item>str_contains</item>
+      <item>str_ends_with</item>
       <item>str_getcsv</item>
       <item>str_ireplace</item>
       <item>str_pad</item>
@@ -9526,6 +9539,7 @@
       <item>str_rot13</item>
       <item>str_shuffle</item>
       <item>str_split</item>
+      <item>str_starts_with</item>
       <item>str_word_count</item>
       <item>substr</item>
       <item>substr_compare</item>
@@ -10238,6 +10252,7 @@
     </list>
 
     <list name="predefined-classes">
+        <item>AddressInfo</item>
         <item>APCIterator</item>
         <item>APCUIterator</item>
         <item>AppendIterator</item>
@@ -10299,6 +10314,10 @@
         <item>Cond</item>
         <item>Countable</item>
         <item>CURLFile</item>
+        <item>CurlHandle</item>
+        <item>CurlMultiHandle</item>
+        <item>CurlShareHandle</item>
+        <item>CURLStringFile</item>
         <item>DateInterval</item>
         <item>DatePeriod</item>
         <item>DateTime</item>
@@ -10312,6 +10331,7 @@
         <item>DOMAttr</item>
         <item>DOMCdataSection</item>
         <item>DomCharacterData</item>
+        <item>DOMChildNode</item>
         <item>DOMComment</item>
         <item>DOMDocument</item>
         <item>DOMDocumentFragment</item>
@@ -10325,6 +10345,7 @@
         <item>DOMNode</item>
         <item>DOMNodeList</item>
         <item>DOMNotation</item>
+        <item>DOMParentNode</item>
         <item>DOMProcessingInstruction</item>
         <item>DOMText</item>
         <item>DomXPath</item>
@@ -10351,6 +10372,7 @@
         <item>FilesystemIterator</item>
         <item>FilterIterator</item>
         <item>finfo</item>
+        <item>GdImage</item>
         <item>GearmanClient</item>
         <item>GearmanException</item>
         <item>GearmanJob</item>
@@ -10462,6 +10484,9 @@
         <item>OAuthProvider</item>
         <item>OCI-Collection</item>
         <item>OCI-Lob</item>
+        <item>OpenSSLAsymmetricKey</item>
+        <item>OpenSSLCertificate</item>
+        <item>OpenSSLCertificateSigningRequest</item>
         <item>OuterIterator</item>
         <item>OutOfBoundsException</item>
         <item>OutOfRangeException</item>
@@ -10476,6 +10501,7 @@
         <item>PharException</item>
         <item>PharFileInfo</item>
         <item>phdfs</item>
+        <item>PhpToken</item>
         <item>php_user_filter</item>
         <item>QuickHashIntHash</item>
         <item>QuickHashIntSet</item>
@@ -10551,6 +10577,7 @@
         <item>SoapParam</item>
         <item>SoapServer</item>
         <item>SoapVar</item>
+        <item>Socket</item>
         <item>SodiumException</item>
         <item>SolrClientException</item>
         <item>SolrCollapseFunction</item>
@@ -10598,6 +10625,7 @@
         <item>StompException</item>
         <item>StompFrame</item>
         <item>streamWrapper</item>
+        <item>Stringable</item>
         <item>SVM</item>
         <item>SVMException</item>
         <item>SVMModel</item>
@@ -10643,6 +10671,8 @@
         <item>TypeError</item>
         <item>UnderflowException</item>
         <item>UnexpectedValueException</item>
+        <item>UnhandledMatchError</item>
+        <item>ValueError</item>
         <item>V8Js</item>
         <item>V8JsException</item>
         <item>VarnishAdmin</item>
@@ -10653,6 +10683,7 @@
         <item>WeakMap</item>
         <item>WeakRef</item>
         <item>Worker</item>
+        <item>XMLParser</item>
         <item>XMLReader</item>
         <item>XMLWriter</item>
         <item>XSLTProcessor</item>
@@ -10927,6 +10958,7 @@
         <Detect2Chars attribute="Keyword" context="#pop" char="?" char1="&gt;" lookAhead="true" />
         <AnyChar attribute="Other" context="#stay" String=";,?:" />
 
+        <Detect2Chars attribute="Attribute" context="Attribute" char="#" char1="["/>
         <IncludeRules context="FindComment"/>
 
         <StringDetect attribute="Operator" context="#stay" String="&lt;=>" />
@@ -11142,7 +11174,7 @@
         <IncludeRules context="findfloat"/>
         <RegExpr attribute="Hex" context="#pop" String="\b0[xX][0-9a-fA-F]++(_[0-9a-fA-F]++)*+\b"/>
         <RegExpr attribute="Binary" context="#pop" String="\b0[bB][01]++(_[01]++)*+\b"/>
-        <RegExpr attribute="Octal" context="#pop" String="\b0_*+[0-7]++(_[0-7]++)*+\b"/>
+        <RegExpr attribute="Octal" context="#pop" String="\b0[oO_]?[0-7]++(_[0-7]++)*+\b"/>
         <RegExpr attribute="Decimal" context="#pop" String="\b(0|[1-9][0-9]*+(_[0-9]++)*+)\b"/>
         <AnyChar attribute="Error" context="#pop" String="0123456789"/>
       </context>
@@ -11198,6 +11230,16 @@
         <DetectSpaces attribute="PHP Text"/>
       </context>
 
+      <context name="Attribute" attribute="Attribute" lineEndContext="#stay">
+        <DetectChar attribute="Attribute" context="#pop" char="]"/>
+        <DetectChar attribute="Symbol" context="ArrayInAttribute" char="["/>
+        <IncludeRules context="phpsource"/>
+      </context>
+      <context name="ArrayInAttribute" attribute="Attribute" lineEndContext="#stay">
+        <DetectChar attribute="Symbol" context="#pop" char="]"/>
+        <IncludeRules context="phpsource"/>
+      </context>
+
     </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false" />
@@ -11206,6 +11248,7 @@
       <itemData name="Classes" defStyleNum="dsBuiltIn" spellChecking="false" />
       <itemData name="Function" defStyleNum="dsFunction" spellChecking="false" />
       <itemData name="Special method" defStyleNum="dsBuiltIn" spellChecking="false" />
+      <itemData name="Attribute" defStyleNum="dsAttribute" spellChecking="false" />
       <itemData name="Decimal" defStyleNum="dsDecVal" spellChecking="false" />
       <itemData name="Binary" defStyleNum="dsBaseN" spellChecking="false" />
       <itemData name="Octal" defStyleNum="dsBaseN" spellChecking="false" />
diff --git a/xml/prolog.xml b/xml/prolog.xml
--- a/xml/prolog.xml
+++ b/xml/prolog.xml
@@ -105,7 +105,7 @@
     <!ENTITY bs         "\">
 ]>
 <language name="Prolog" section="Sources"
-	  version="15" kateversion="5.62"
+	  version="16" kateversion="5.62"
 	  mimetype="text/x-prolog"
 	  extensions="*.prolog;*.dcg;*.pro"
 	  author="Torsten Eichstädt (torsten.eichstaedt@web.de)"
@@ -868,7 +868,6 @@
 	    <context name="arith_expr_common" lineEndContext="#stay" attribute="Syntax Error" >
 		<IncludeRules context="layout" />
 		<IncludeRules context="number" />
-		<keyword String="arith eval ISO" context="#pop" attribute="Syntax Error" />
 		<keyword String="bogus ISO" context="#stay" attribute="ISO Bogus" />
 		<keyword String="arith expr mixed ISO" context="#stay" attribute="Arithmetics" />
 		<keyword String="arith expr int ISO" context="#stay" attribute="Integer Arithmetics" />
diff --git a/xml/python.xml b/xml/python.xml
--- a/xml/python.xml
+++ b/xml/python.xml
@@ -33,6 +33,10 @@
 	     type              ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
 	-->
 	<!ENTITY strsubstitution_py3 "\{(?:(?:[a-zA-Z0-9_]+|[0-9]+)(?:\.[a-zA-Z0-9_]+|\[[^ \]]+\])*)?(?:![rs])?(?::(?:[^}]?[&lt;&gt;=^])?[ +-]?#?0?[0-9]*(?:\.[0-9]+)?[bcdeEfFgGnosxX&#37;]?)?\}">
+
+	<!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) -->
@@ -48,7 +52,7 @@
 <!-- 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" version="14" style="python" indenter="python" kateversion="5.0" section="Scripts" extensions="*.py;*.pyw;SConstruct;SConscript;*.FCMacro" mimetype="application/x-python;text/x-python;text/x-python3" casesensitive="1" author="Michael Bueker" license="">
+<language name="Python" version="18" style="python" indenter="python" kateversion="5.0" section="Scripts" extensions="*.py;*.pyw;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>
@@ -90,6 +94,10 @@
 			<item>async</item>
 			<item>await</item>
 		</list>
+		<list name="patternmatching">
+			<item>match</item>
+			<item>case</item>
+		</list>
 		<list name="builtinfuncs">
 			<item>__import__</item>
 			<item>abs</item>
@@ -366,90 +374,132 @@
 		</list>
 		<contexts>
 			<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
+				<DetectSpaces attribute="Normal Text"/>
+
 				<keyword attribute="Import" String="import" context="#stay"/>
 				<keyword attribute="Definition Keyword" String="defs" context="#stay"/>
 				<keyword attribute="Operator Keyword" String="operators" context="#stay"/>
 				<keyword attribute="Flow Control Keyword" String="flow" context="#stay"/>
+				<keyword attribute="Flow Control Keyword" String="patternmatching" context="Pattern Matching" lookAhead="1" firstNonSpace="1"/>
 				<keyword attribute="Builtin Function" String="builtinfuncs" context="#stay"/>
 				<keyword attribute="Special Variable" String="specialvars" context="#stay"/>
 				<keyword attribute="Extensions" String="bindings" context="#stay"/>
 				<keyword attribute="Exceptions" String="exceptions" context="#stay"/>
 				<keyword attribute="Overloaders" String="overloaders" context="#stay"/>
-				<RegExpr attribute="Normal Text" String="[a-zA-Z_][a-zA-Z_0-9]{2,}" context="#stay"/>
 
-				<!-- Complex: 1j ; 1.1j ; 1.j ; .1j ; 1e3j ; 1.1e3j ; 1.e3j ; .1e3j -->
-				<RegExpr attribute="Complex" String="(?:&beforeDigit;&digitPart;(?:\.(?:&digitPart;)?)?|&beforePointFloat;\.&digitPart;)(?:[eE][\+\-]?&digitPart;)?[jJ]\b" context="#stay"/>
-				<!-- Hexadecimal: 0xA1, Binary: 0b01, Octal: 0o71 -->
-				<RegExpr attribute="Hex" String="&beforeDigit;0[xX](?:_?[\da-fA-F])+\b" context="#stay"/>
-				<RegExpr attribute="Binary" String="&beforeDigit;0[bB](?:_?[01])+\b" context="#stay"/>
-				<RegExpr attribute="Octal" String="&beforeDigit;0[oO](?:_?[0-7])+\b" context="#stay"/>
-				<!-- Float: 1.1 ; 1. ; .1 ; 1e3 ; 1.1e3 ; 1.e3 ; .1e3 -->
-				<RegExpr attribute="Float" String="(?:&beforeDigit;&digitPart;(?:\.(?:&digitPart;)?)?|&beforePointFloat;\.&digitPart;)[eE][\+\-]?&digitPart;\b|(?:&beforeDigit;&digitPart;\.(?:&digitPart;\b)?|&beforePointFloat;\.&digitPart;\b)" context="#stay"/>
-				<!-- Decimal: 123 ; 000 -->
-				<RegExpr attribute="Int" String="&beforeDigit;(?:[1-9](?:_?\d)*|0(?:_?0)*)[lL]?\b" context="#stay"/>
-
 				<DetectChar attribute="Normal Text" char="{" context="Dictionary" beginRegion="Dictionary"/>
 				<DetectChar attribute="Normal Text" char="[" context="List" beginRegion="List"/>
 				<DetectChar attribute="Normal Text" char="(" context="Tuple" beginRegion="Tuple"/>
 
-				<IncludeRules context="CommentVariants" />
-
 				<DetectChar attribute="Comment" char="#" context="Hash comment"/>
 
+				<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"/>
-				<AnyChar attribute="Operator" String="+*/%\|=;\!&lt;&gt;!^&amp;~-@" context="#stay"/>
+				<AnyChar attribute="Operator" String="+*/%\|=;&lt;&gt;!^&amp;~-@" context="#stay"/>
+
+				<Int attribute="Error"/>
 			</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="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="CheckForStringNext"/>
+				<LineContinue attribute="Normal Text" context="#pop!CheckForStringNext"/>
 			</context>
 
-			<context name="CheckForStringNext" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+			<context name="CheckForStringNext" attribute="Normal Text" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="#pop#pop">
 				<DetectSpaces/>
-				<LineContinue attribute="Normal Text" context="CheckForStringNext"/>
+				<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">
-				<DetectSpaces/>
+				<!-- 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"/>
 
-				<RegExpr attribute="String" String="u?'''"                insensitive="true" context="Triple A-string" beginRegion="Triple A-region"/>
-				<RegExpr attribute="String" String="u?&quot;&quot;&quot;" insensitive="true" context="Triple Q-string" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="String" String="u?'"                  insensitive="true" context="Single A-string"/>
-				<RegExpr attribute="String" String="u?&quot;"             insensitive="true" context="Single Q-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 String" String="(?:u?r|ru)'''"                insensitive="true" context="Raw Triple A-string" beginRegion="Triple A-region"/>
-				<RegExpr attribute="Raw String" String="(?:u?r|ru)&quot;&quot;&quot;" insensitive="true" context="Raw Triple Q-string" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="Raw String" String="(?:u?r|ru)'"                  insensitive="true" context="Raw A-string"/>
-				<RegExpr attribute="Raw String" String="(?:u?r|ru)&quot;"             insensitive="true" context="Raw 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"/>
 
-				<StringDetect attribute="F-String" String="f'''"                insensitive="true" context="Triple A-F-String" beginRegion="Triple A-region"/>
-				<StringDetect attribute="F-String" String="f&quot;&quot;&quot;" insensitive="true" context="Triple Q-F-String" beginRegion="Triple Q-region"/>
-				<StringDetect attribute="F-String" String="f'"                  insensitive="true" context="Single A-F-String"/>
-				<StringDetect attribute="F-String" String="f&quot;"             insensitive="true" context="Single Q-F-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"/>
 
-				<RegExpr attribute="Raw F-String" String="(?:fr|rf)'''"                insensitive="true" context="Raw Triple A-F-String" beginRegion="Triple A-region"/>
-				<RegExpr attribute="Raw F-String" String="(?:fr|rf)&quot;&quot;&quot;" insensitive="true" context="Raw Triple Q-F-String" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="Raw F-String" String="(?:fr|rf)'"                  insensitive="true" context="Raw A-F-String"/>
-				<RegExpr attribute="Raw F-String" String="(?:fr|rf)&quot;"             insensitive="true" context="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">
-				<DetectSpaces/>
-
-				<RegExpr attribute="Comment" String="u?'''"                insensitive="true" firstNonSpace="true" context="Triple A-comment" beginRegion="Triple A-region"/>
-				<RegExpr attribute="Comment" String="u?&quot;&quot;&quot;" insensitive="true" firstNonSpace="true" context="Triple Q-comment" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="Comment" String="u?'"                  insensitive="true" firstNonSpace="true" context="Single A-comment"/>
-				<RegExpr attribute="Comment" String="u?&quot;"             insensitive="true" firstNonSpace="true" context="Single Q-comment"/>
-
-				<RegExpr attribute="Comment" String="(?:u?r|ru)'''"                insensitive="true" firstNonSpace="true" context="Triple A-comment" beginRegion="Triple A-region"/>
-				<RegExpr attribute="Comment" String="(?:u?r|ru)&quot;&quot;&quot;" insensitive="true" firstNonSpace="true" context="Triple Q-comment" beginRegion="Triple Q-region"/>
-				<RegExpr attribute="Comment" String="(?:u?r|ru)'"                  insensitive="true" firstNonSpace="true" context="Single A-comment"/>
-				<RegExpr attribute="Comment" String="(?:u?r|ru)&quot;"             insensitive="true" firstNonSpace="true" context="Single Q-comment"/>
+				<!-- 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/>
@@ -477,30 +527,39 @@
 			<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">
-				<IncludeRules context="stringescape"/>
+				<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">
-				<IncludeRules context="stringescape"/>
+				<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="#stay">
-				<IncludeRules context="stringescape"/>
+				<DetectSpaces/>
 				<DetectChar attribute="Comment" char="'" context="#pop"/>
 				<IncludeRules context="##Comments" />
+				<DetectIdentifier/>
+				<IncludeRules context="stringescape"/>
 			</context>
 
 			<context name="Single Q-comment" attribute="Comment" lineEndContext="#stay">
-				<IncludeRules context="stringescape"/>
+				<DetectSpaces/>
 				<DetectChar attribute="Comment" char="&quot;" context="#pop"/>
 				<IncludeRules context="##Comments" />
+				<DetectIdentifier/>
+				<IncludeRules context="stringescape"/>
 			</context>
 
 			<!-- Strings -->
@@ -517,17 +576,28 @@
 				<!-- 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"/>
+				<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="(?:![rs])?(?::(?:[^}]?[&lt;&gt;=^])?[ +-]?#?0?[0-9]*(?:\.[0-9]+)?[bcdeEfFgGnosxX%]?)?\}" context="#pop"/>
+				<!-- format specifiers: [[fill]align][sign][#][0][minimumwidth][.precision][type] -->
+				<RegExpr attribute="String Substitution" String="(?:![rsa])?(?::(?:[^}]?[&lt;&gt;=^])?[ +-]?#?0?[0-9]*(?:\.[0-9]+)?[bcdeEfFgGnosxX%]?)?\}" context="#pop"/>
 				<IncludeRules context="Normal"/> <!-- TODO: create expression context instead -->
 			</context>
 
@@ -542,107 +612,191 @@
 			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"/>
 			</context>
 
 			<context name="Raw Triple A-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<HlCStringChar attribute="Raw String" context="#stay"/>
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<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"/>
 			</context>
 
 			<context name="Raw Triple A-F-String" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<HlCStringChar attribute="Raw F-String" context="#stay"/>
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<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"/>
+				<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"/>
 			</context>
 
 			<context name="Raw Triple Q-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<HlCStringChar attribute="Raw String" context="#stay"/>
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="&quot;"/>
 				<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"/>
 			</context>
 
 			<context name="Raw Triple Q-F-String" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<HlCStringChar attribute="Raw F-String" context="#stay"/>
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="&quot;"/>
 				<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"/>
+				<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="#stay">
+				<DetectSpaces attribute="String"/>
+				<DetectIdentifier attribute="String"/>
 				<IncludeRules context="stringescape"/>
 				<IncludeRules context="stringformat"/>
 				<DetectChar attribute="String" char="'" context="#pop!#CheckForString"/>
 			</context>
 
 			<context name="Raw A-string" attribute="Raw String" lineEndContext="#stay">
-				<HlCStringChar attribute="Raw String" context="#stay"/>
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="'"/>
 				<IncludeRules context="stringformat"/>
 				<DetectChar attribute="Raw String" char="'" context="#pop!#CheckForString"/>
 			</context>
 
 			<context name="Single A-F-String" attribute="F-String" lineEndContext="#stay">
+				<DetectSpaces attribute="F-String"/>
+				<DetectIdentifier attribute="F-String"/>
 				<IncludeRules context="stringescape"/>
 				<IncludeRules context="stringinterpolation"/>
 				<DetectChar attribute="F-String" char="'" context="#pop!#CheckForString"/>
 			</context>
 
 			<context name="Raw A-F-String" attribute="Raw F-String" lineEndContext="#stay">
-				<HlCStringChar attribute="Raw F-String" context="#stay"/>
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="'"/>
 				<IncludeRules context="stringinterpolation"/>
 				<DetectChar attribute="Raw F-String" char="'" context="#pop!#CheckForString"/>
 			</context>
 
+			<context name="Single A-B-String" attribute="B-String" lineEndContext="#stay">
+				<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"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<context name="Raw A-B-String" attribute="Raw B-String" lineEndContext="#stay">
+				<RegExpr attribute="Raw B-String" String="([\x20-\x26\x28-\x5B\x5D-\x7E]++|\\.?)++"/>
+				<DetectChar attribute="Raw B-String" char="'" context="#pop!#CheckForString"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
 			<!-- Single-quoted Q-strings -->
 			<context name="Single Q-string" attribute="String" lineEndContext="#stay">
+				<DetectSpaces attribute="String"/>
+				<DetectIdentifier attribute="String"/>
 				<IncludeRules context="stringescape"/>
 				<IncludeRules context="stringformat"/>
 				<DetectChar attribute="String" char="&quot;" context="#pop!#CheckForString"/>
 			</context>
 
 			<context name="Raw Q-string" attribute="Raw String" lineEndContext="#stay">
-				<HlCStringChar attribute="Raw String" context="#stay"/>
+				<DetectSpaces attribute="Raw String"/>
+				<DetectIdentifier attribute="Raw String"/>
+				<Detect2Chars attribute="Raw String" char="\" char1="&quot;"/>
 				<IncludeRules context="stringformat"/>
 				<DetectChar attribute="Raw String" char="&quot;" context="#pop!#CheckForString"/>
 			</context>
 
 			<context name="Single Q-F-String" attribute="F-String" lineEndContext="#stay">
+				<DetectSpaces attribute="F-String"/>
+				<DetectIdentifier attribute="F-String"/>
 				<IncludeRules context="stringescape"/>
 				<IncludeRules context="stringinterpolation"/>
 				<DetectChar attribute="F-String" char="&quot;" context="#pop!#CheckForString"/>
 			</context>
 
 			<context name="Raw Q-F-String" attribute="Raw F-String" lineEndContext="#stay">
-				<HlCStringChar attribute="Raw F-String" context="#stay"/>
+				<DetectSpaces attribute="Raw F-String"/>
+				<DetectIdentifier attribute="Raw F-String"/>
+				<Detect2Chars attribute="Raw F-String" char="\" char1="&quot;"/>
 				<IncludeRules context="stringinterpolation"/>
 				<DetectChar attribute="Raw F-String" char="&quot;" context="#pop!#CheckForString"/>
 			</context>
+
+			<context name="Single Q-B-String" attribute="B-String" lineEndContext="#stay">
+				<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="&quot;" context="#pop!#CheckForString"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
+			<context name="Raw Q-B-String" attribute="Raw B-String" lineEndContext="#stay">
+				<RegExpr attribute="Raw B-String" String="([\x20-\x26\x28-\x5B\x5D-\x7E]++|\\.?)++"/>
+				<DetectChar attribute="Raw B-String" char="&quot;" context="#pop!#CheckForString"/>
+				<RegExpr attribute="Error" String="."/>
+			</context>
+
 		</contexts>
 
 		<itemDatas>
@@ -668,6 +822,8 @@
 			<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"/>
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="13" kateversion="5.63" section="Markup" extensions="*.rhtml;*.RHTML;*.html.erb" mimetype="" author="Richard Dale rdale@foton.es" license="LGPLv2+">
+<language name="Ruby/Rails/RHTML" version="14" kateversion="5.63" section="Markup" extensions="*.rhtml;*.RHTML;*.html.erb" mimetype="" author="Richard Dale rdale@foton.es" license="LGPLv2+">
 	
 	<highlighting>
 	
@@ -359,8 +359,7 @@
 			</context>
 			
 			<context name="FindAttributes" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Attribute" context="#stay" String="&name;" column="0"/>
-				<RegExpr attribute="Attribute" context="#stay" String="\s+&name;" />
+				<RegExpr attribute="Attribute" context="#stay" String="^&name;|\s+&name;" />
 				<DetectChar attribute="Attribute" context="Value" char="=" />
 			</context>
 			
@@ -501,8 +500,7 @@
 				<IncludeRules context="find-rubysource" />
 				
 				<IncludeRules context="FindEntityRefs" />
-				<RegExpr attribute="Value" context="#stay" String="/(?!&gt;)" />
-				<RegExpr attribute="Value" context="#stay" String="[^/&gt;&lt;&quot;&apos;\s]" />
+				<RegExpr attribute="Value" context="#stay" String="/(?!&gt;)|[^/&gt;&lt;&quot;&apos;\s]" />
 			</context>
 			
 			<context name="Value DQ" attribute="Value" lineEndContext="#stay">
@@ -544,10 +542,10 @@
 				<LineContinue attribute="Ruby Normal Text" context="Line Continue"/>
 
 				<!-- __END__ token on own line. -->
-				<RegExpr attribute="Keyword" String="__END__$" context="DATA" column="0"/>
+				<RegExpr attribute="Keyword" String="^__END__$" context="DATA" column="0"/>
 				
 				<!-- "shebang" line -->
-				<StringDetect attribute="Keyword" String="#!/" context="ShebangLine" column="0"/>
+				<StringDetect attribute="Keyword" String="^#!/" context="ShebangLine" column="0"/>
 				
 				<!-- "def" - "end" blocks -->
 				<!-- check for statement modifiers with regexes -->
@@ -619,11 +617,8 @@
 				<DetectChar attribute="Operator" char="." context="#stay"/>
 				<Detect2Chars attribute="Operator" char="&amp;" char1="&amp;" context="#stay"/>
 				<Detect2Chars attribute="Operator" char="|" char1="|" context="#stay"/>
-				<RegExpr attribute="Operator" String="\s[\?\:\%/]\s" context="#stay"/>
-				<RegExpr attribute="Operator" String="[|&amp;&lt;&gt;\^\+*~\-=]+" context="#stay"/>
-				<!-- regexp hack -->
-				<RegExpr attribute="Operator" String="\s!" context="#stay"/>
-				<RegExpr attribute="Operator" String="/=\s" context="#stay" insensitive="0"/>
+				<!-- \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"/>
 				
@@ -635,8 +630,8 @@
 				
 				<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"/>
+				<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="Comment Line" firstNonSpace="true"/>
 				<RegExpr attribute="Comment" String="\s#"  context="General Comment"/>
 				
@@ -772,12 +767,12 @@
 			
 			<context name="normal_heredoc" attribute="Ruby Normal Text" lineEndContext="#stay" dynamic="true">
 				<!--				<RegExpr attribute="Keyword" context="#pop#pop" String="^%1$" dynamic="true" endRegion="HereDocument"/>-->
-				<RegExpr attribute="Keyword" context="#pop#pop" String="%1$" dynamic="true" endRegion="HereDocument" column="0"/>
+				<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="Ruby Normal Text" lineEndContext="#stay" dynamic="true">
 				<!--				<RegExpr attribute="Keyword" context="#pop#pop" String="^%1$" dynamic="true" endRegion="HereDocument"/>-->
-				<RegExpr attribute="Keyword" context="#pop#pop" String="%1$" dynamic="true" endRegion="HereDocument" column="0"/>
+				<RegExpr attribute="Keyword" context="#pop#pop" String="^%1$" dynamic="true" endRegion="HereDocument" column="0"/>
 			</context>
 			
 			<!-- rules for heredoc types -->
diff --git a/xml/roff.xml b/xml/roff.xml
--- a/xml/roff.xml
+++ b/xml/roff.xml
@@ -15,7 +15,7 @@
   <!ENTITY escape2 "\\[gkmMVYz]&roffid;">
   <!ENTITY escape3 "\\O([0-4]|\[5[lrci][^]]\])">
 ]>
-<language name="Roff" section="Markup" version="7" kateversion="5.0" extensions="" author="Matthew Woehlke (mw_triad@users.sourceforge.net)" license="GPL">
+<language name="Roff" section="Markup" version="8" kateversion="5.0" extensions="" author="Matthew Woehlke (mw_triad@users.sourceforge.net)" license="GPL">
 
   <highlighting>
 
@@ -63,7 +63,7 @@
         <RegExpr attribute="Escape" context="Argument" String="\\R&argsep1;"/> <!-- TODO - &roffid; (register), measurement -->
         <RegExpr attribute="Glyph" context="GlyphArgument" String="\\C&argsep1;"/>
         <RegExpr attribute="Glyph" context="#pop" String="\\N&argsep2;[0-9]+\1|\\&roffid;"/>
-        <RegExpr attribute="Escape" context="#pop" String="\\$"/>
+        <LineContinue attribute="Escape" context="#pop" char="\"/>
         <DetectChar attribute="Error" context="#pop" char="\"/>
       </context>
 
diff --git a/xml/rust.xml b/xml/rust.xml
--- a/xml/rust.xml
+++ b/xml/rust.xml
@@ -40,7 +40,7 @@
 	<!ENTITY scope2 "::(?=[^\s\:])"> <!-- Points after keyword or group { } -->
 
 ]>
-<language name="Rust" version="11" kateversion="5.0" section="Sources" extensions="*.rs" mimetype="text/rust" priority="15" license="MIT" author="The Rust Project Developers">
+<language name="Rust" version="13" kateversion="5.0" section="Sources" extensions="*.rs" mimetype="text/rust" priority="15" license="MIT" author="The Rust Project Developers">
 <highlighting>
 	<list name="fn">
 		<item>fn</item>
@@ -56,25 +56,18 @@
 		<item>await</item>
 		<item>become</item>
 		<item>box</item>
-		<item>break</item>
 		<item>const</item>
-		<item>continue</item>
 		<item>crate</item>
 		<item>default</item>
 		<item>do</item>
 		<item>dyn</item>
-		<item>else</item>
 		<item>enum</item>
 		<item>extern</item>
 		<item>final</item>
-		<item>for</item>
-		<item>if</item>
 		<item>impl</item>
 		<item>in</item>
 		<item>let</item>
-		<item>loop</item>
 		<item>macro</item>
-		<item>match</item>
 		<item>mod</item>
 		<item>move</item>
 		<item>mut</item>
@@ -85,7 +78,6 @@
 		<item>pub</item>
 		<item>pure</item>
 		<item>ref</item>
-		<item>return</item>
 		<item>sizeof</item>
 		<item>static</item>
 		<item>struct</item>
@@ -99,11 +91,21 @@
 		<item>use</item>
 		<item>virtual</item>
 		<item>where</item>
-		<item>while</item>
 		<item>yield</item>
 		<!-- Also (these keywords are in other lists):
 		     type, Self, self. -->
 	</list>
+	<list name="controlflow">
+		<item>break</item>
+		<item>continue</item>
+		<item>else</item>
+		<item>for</item>
+		<item>if</item>
+		<item>loop</item>
+		<item>match</item>
+		<item>return</item>
+		<item>while</item>
+	</list>
 	<list name="traits">
 		<!-- Core Traits -->
 		<item>Add</item>
@@ -372,6 +374,7 @@
 			<keyword String="type" attribute="Keyword" context="Type"/>
 			<keyword String="self" attribute="Self" context="#stay"/>
 			<keyword String="keywords" attribute="Keyword" context="#stay"/>
+			<keyword String="controlflow" attribute="Control Flow" context="#stay"/>
 			<keyword String="types" attribute="Type" context="#stay"/>
 			<keyword String="ctypes" attribute="CType" context="#stay"/>
 			<keyword String="constants" attribute="Constant" context="#stay"/>
@@ -462,27 +465,28 @@
 		</context>
 	</contexts>
 	<itemDatas>
-		<itemData name="Normal Text"  defStyleNum="dsNormal"/>
+		<itemData name="Normal Text"  defStyleNum="dsNormal" spellChecking="0"/>
 		<itemData name="Keyword"      defStyleNum="dsKeyword" spellChecking="0"/>
+		<itemData name="Control Flow" defStyleNum="dsControlFlow" spellChecking="0"/>
 		<itemData name="Self"         defStyleNum="dsKeyword" spellChecking="0"/>
 		<itemData name="Type"         defStyleNum="dsDataType" spellChecking="0"/>
 		<itemData name="Trait"        defStyleNum="dsBuiltIn" spellChecking="0"/>
 		<itemData name="CType"        defStyleNum="dsDataType" spellChecking="0"/>
 		<itemData name="Constant"     defStyleNum="dsConstant" spellChecking="0"/>
 		<itemData name="CConstant"    defStyleNum="dsConstant" spellChecking="0"/>
-		<itemData name="Definition"   defStyleNum="dsNormal"/>
+		<itemData name="Definition"   defStyleNum="dsNormal" spellChecking="0"/>
 		<itemData name="Comment"      defStyleNum="dsComment"/>
-		<itemData name="Scope"        defStyleNum="dsPreprocessor"/>
-		<itemData name="Number"       defStyleNum="dsDecVal"/>
+		<itemData name="Scope"        defStyleNum="dsPreprocessor" spellChecking="0"/>
+		<itemData name="Number"       defStyleNum="dsDecVal" spellChecking="0"/>
 		<itemData name="String"       defStyleNum="dsString"/>
-		<itemData name="CharEscape"   defStyleNum="dsSpecialChar"/>
-		<itemData name="Character"    defStyleNum="dsChar"/>
-		<itemData name="Macro"        defStyleNum="dsPreprocessor"/>
-		<itemData name="Symbol"       defStyleNum="dsOperator"/>
-		<itemData name="Attribute"    defStyleNum="dsAttribute"/>
+		<itemData name="CharEscape"   defStyleNum="dsSpecialChar" spellChecking="0"/>
+		<itemData name="Character"    defStyleNum="dsChar" spellChecking="0"/>
+		<itemData name="Macro"        defStyleNum="dsPreprocessor" spellChecking="0"/>
+		<itemData name="Symbol"       defStyleNum="dsOperator" spellChecking="0"/>
+		<itemData name="Attribute"    defStyleNum="dsAttribute" spellChecking="0"/>
 		<itemData name="Lifetime"     defStyleNum="dsOthers" spellChecking="0"/>
 		<itemData name="Raw Identifier" defStyleNum="dsAnnotation" spellChecking="0"/>
-		<itemData name="Error"        defStyleNum="dsError"/>
+		<itemData name="Error"        defStyleNum="dsError" spellChecking="0"/>
 	</itemDatas>
 </highlighting>
 <general>
diff --git a/xml/sed.xml b/xml/sed.xml
--- a/xml/sed.xml
+++ b/xml/sed.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="sed" section="Scripts" version="7" kateversion="5.0" extensions="*.sed" mimetype="text/x-sed" author="Bart Sas (bart.sas@gmail.com)" license="GPL">
+<language name="sed" section="Scripts" version="8" kateversion="5.0" extensions="*.sed" mimetype="text/x-sed" author="Bart Sas (bart.sas@gmail.com)" license="GPL">
         <highlighting>
                 <contexts>
                         <context name="BeginningOfLine" attribute="Normal" lineEndContext="#stay">
@@ -29,7 +29,6 @@
                         </context>
 
                         <context name="AfterFirstAddress2" attribute="Normal" lineEndContext="BeginningOfLine">
-                                <DetectSpaces/>
                                 <DetectChar char="," attribute="Normal" context="SecondAddress"/>
                                 <DetectChar char="~" attribute="Normal" context="Step"/>
                                 <IncludeRules                           context="Command"/>
diff --git a/xml/swift.xml b/xml/swift.xml
--- a/xml/swift.xml
+++ b/xml/swift.xml
@@ -138,7 +138,6 @@
                 <DetectChar attribute="Symbol" context="Dot" char="." lookAhead="1"/>
                 <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1"/>
                 <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1"/>
-                <DetectChar attribute="Annotation" context="Annotation" char="@" />
 
                 <Detect2Chars attribute="Comment" context="CommentSingleLine" char="/" char1="/"/>
                 <Detect2Chars attribute="Comment" context="CommentMultiline" char="/" char1="*" beginRegion="Comment"/>
@@ -158,6 +157,8 @@
                 <WordDetect attribute="Keyword" context="Imports" String="@testable"/>
                 <WordDetect attribute="Keyword" context="Imports" String="import"/>
 
+                <DetectChar attribute="Annotation" context="Annotation" char="@" />
+
                 <WordDetect attribute="Keyword" context="TypeDeclaration" String="struct"/>
                 <WordDetect attribute="Keyword" context="TypeDeclaration" String="class"/>
                 <WordDetect attribute="Keyword" context="TypeDeclaration" String="protocol"/>
@@ -252,17 +253,31 @@
 
             <context name="TypeDeclaration" lineEndContext="#stay" attribute="Normal Text">
                 <keyword attribute="Keyword" context="#stay" String="keywords"/>
-                <RegExpr attribute="Type" context="#stay" String="([A-Z])+?[A-Za-z0-9]+" />
+
                 <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" />
             </context>
 
+            <context name="SuperTypes" lineEndContext="#stay" attribute="Normal Text">
+                <keyword attribute="Keyword" context="#pop#pop" String="keywords" lookAhead="true" />
+
+                <DetectChar attribute="Symbol" context="#stay" char="," />
+                <DetectChar attribute="Symbol" context="#pop" char="{" lookAhead="true" />
+                <DetectChar attribute="Symbol" context="Parameters" char="(" />
+                <DetectChar attribute="Symbol" context="TypeParameters" char="&lt;" />
+
+                <DetectIdentifier attribute="Data Type" context="#stay"/>
+            </context>
+
             <context name="FunctionDeclaration" lineEndContext="#stay" attribute="Normal Text">
-                <keyword attribute="Keyword" context="#stay" String="func"/>
+                <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" />
 
                 <DetectIdentifier attribute="Function" context="#stay"/>
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="12" kateversion="5.0" section="Markup" extensions="*.docbook;*.xml;*.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" casesensitive="1" indenter="xml" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
+<language name="XML" version="14" kateversion="5.0" section="Markup" extensions="*.docbook;*.xml;*.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" casesensitive="1" indenter="xml" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
 
 <highlighting>
 <contexts>
@@ -16,13 +16,13 @@
 
   <context name="FindXML" attribute="Normal Text" lineEndContext="#stay">
     <DetectSpaces />
+    <DetectIdentifier />
+    <RegExpr attribute="Element Symbols" context="ElementTagName" String="&lt;(?=(&name;))" beginRegion="element" />
     <StringDetect attribute="Comment" context="Comment" String="&lt;!--" beginRegion="comment" />
     <StringDetect attribute="CDATA" context="CDATAStart" String="&lt;![CDATA[" lookAhead="true" />
-    <RegExpr attribute="Doctype Symbols" context="DoctypeTagName" String="&lt;!(?=DOCTYPE\s+)" beginRegion="doctype" />
+    <RegExpr attribute="Doctype Symbols" context="DoctypeTagName" String="&lt;!(?=DOCTYPE(\s|$))" beginRegion="doctype" />
     <IncludeRules context="FindProcessingInstruction" />
-    <RegExpr attribute="Element Symbols" context="ElementTagName" String="&lt;(?=(&name;))" beginRegion="element" />
     <IncludeRules context="FindEntityRefs" />
-    <DetectIdentifier />
   </context>
 
   <context name="FindEntityRefs" attribute="Other Text" lineEndContext="#stay">
@@ -70,13 +70,13 @@
   <context name="PI-XML" attribute="Other Text" lineEndContext="#stay">
     <IncludeRules context="PI" />
     <RegExpr attribute="Attribute" context="#stay" String="(?:^|\s+)&name;" />
-    <DetectChar attribute="Attribute" context="Value" char="=" />
+    <DetectChar attribute="Attribute Separator" context="Value" char="=" />
   </context>
 
   <context name="DoctypeTagName" attribute="Other Text" lineEndContext="#pop">
     <StringDetect attribute="Doctype" context="#pop!DoctypeVariableName" String="DOCTYPE" />
   </context>
-  <context name="DoctypeVariableName" attribute="Other Text" lineEndContext="#pop!Doctype" fallthrough="true" fallthroughContext="#pop!Doctype">
+  <context name="DoctypeVariableName" attribute="Other Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop!Doctype">
     <DetectSpaces />
     <RegExpr attribute="Doctype Name" context="#pop!Doctype" String="&name;" />
   </context>
@@ -116,7 +116,7 @@
     <IncludeRules context="FindPEntityRefs" />
   </context>
 
-  <context name="ElementTagName" attribute="Other Text" lineEndContext="#pop!Element" fallthrough="true" fallthroughContext="#pop!Element">
+  <context name="ElementTagName" attribute="Other Text" lineEndContext="#pop!Element">
     <StringDetect attribute="Element" context="#pop!Element" String="%1" dynamic="true" />
   </context>
   <context name="Element" attribute="Other Text" lineEndContext="#stay">
@@ -131,7 +131,7 @@
     <IncludeRules context="FindXML" />
   </context>
 
-  <context name="El End TagName" attribute="Other Text" lineEndContext="#pop!El End" fallthrough="true" fallthroughContext="#pop!El End">
+  <context name="El End TagName" attribute="Other Text" lineEndContext="#pop!El End">
     <StringDetect attribute="Element" context="#pop!El End" String="%1" dynamic="true" />
   </context>
   <context name="El End" attribute="Other Text" lineEndContext="#stay">
@@ -140,7 +140,7 @@
   </context>
 
   <context name="Attribute" attribute="Other Text" lineEndContext="#stay">
-    <DetectChar attribute="Attribute" context="#pop!Value" char="=" />
+    <DetectChar attribute="Attribute Separator" context="#pop!Value" char="=" />
     <RegExpr attribute="Error" context="#stay" String="\S" />
   </context>
 
@@ -175,6 +175,7 @@
   <itemData name="Element"         defStyleNum="dsKeyword" spellChecking="false" />
   <itemData name="Element Symbols" defStyleNum="dsNormal" spellChecking="false" />
   <itemData name="Attribute"       defStyleNum="dsOthers" spellChecking="false" />
+  <itemData name="Attribute Separator" defStyleNum="dsOthers" spellChecking="false" />
   <itemData name="Value"           defStyleNum="dsString" spellChecking="false" />
   <itemData name="EntityRef"       defStyleNum="dsDecVal" spellChecking="false" />
   <itemData name="PEntityRef"      defStyleNum="dsDecVal" spellChecking="false" />
diff --git a/xml/xslt.xml b/xml/xslt.xml
--- a/xml/xslt.xml
+++ b/xml/xslt.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-  <!ENTITY qname    "[A-Za-z_:][\w.:_-]*">
+  <!ENTITY qname   "[A-Za-z_:][\w.:_-]*">
+	<!ENTITY name    "(?![0-9])[\w_:][\w.:_-]*">
   <!ENTITY entref  "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&qname;);">
   <!ENTITY axisname  "ancestor|ancestor-or-self|attribute|child|descendant|descendant-or-self|following|following-sibling|namespace|parent|preceding|preceding-sibling|self">
 ]>
@@ -52,7 +53,7 @@
 
 -->
 
-<language version="9" kateversion="5.0" name="xslt" section="Markup" extensions="*.xsl;*.xslt" license="LGPL" author="Peter Lammich (views@gmx.de)">
+<language version="10" kateversion="5.0" name="xslt" section="Markup" extensions="*.xsl;*.xslt" license="LGPL" author="Peter Lammich (views@gmx.de)">
   <highlighting>
     <list name="keytags">
       <item>xsl:value-of</item>
@@ -245,167 +246,249 @@
       <item>document-uri</item>
       <item>adjust-time-to-timezone</item>
     </list>
+
+    <list name="xsl-attributes">
+      <item>select</item>
+      <item>test</item>
+      <item>match</item>
+    </list>
     
     <contexts>
 
-       <context name="normalText" attribute="Normal Text" lineEndContext="#stay">
-         <StringDetect attribute="Comment" context="comment" String="&lt;!--" beginRegion="comment"/>
-         
-         <StringDetect attribute="CDATA" context="CDATA" String="&lt;![CDATA[" beginRegion="cdata" />
-         <RegExpr attribute="Doctype" context="Doctype" String="&lt;!DOCTYPE\s+" beginRegion="doctype" />
-         <RegExpr attribute="Processing Instruction" context="PI" String="&lt;\?[\w:_-]*" beginRegion="pi" />
+      <context name="normalText" attribute="Normal Text" lineEndContext="#stay">
+        <DetectSpaces />
+        <DetectIdentifier />
 
-         <DetectChar attribute="Tag" context="tagname" char="&lt;" />
-         <RegExpr attribute="Entity Reference" context="#stay" String="&entref;" />
-       </context>
+        <Detect2Chars context="specialtag" char="&lt;" char1="!" lookAhead="1"/>
+        <Detect2Chars context="pitag" char="&lt;" char1="?" lookAhead="1"/>
+        <Detect2Chars attribute="Tag Symbols" context="ElementEndTagName" char="&lt;" char1="/" endRegion="element" />
+        <DetectChar attribute="Tag Symbols" context="ElementTagName" char="&lt;" beginRegion="element" />
 
+        <IncludeRules context="FindEntityRefs" />
+      </context>
 
-       
-       <context name="CDATA" attribute="Normal Text" lineEndContext="#stay">
-         <DetectSpaces />
-         <DetectIdentifier />
-         <StringDetect attribute="CDATA" context="#pop" String="]]&gt;" endRegion="cdata" />
-         <StringDetect attribute="Entity Reference" context="#stay" String="]]&amp;gt;" />
-       </context>
-       
-       <context name="PI" attribute="Normal Text" lineEndContext="#stay">
-         <Detect2Chars attribute="Processing Instruction" context="#pop" char="?" char1="&gt;" endRegion="pi" />
-       </context>
-       
-       <context name="Doctype" attribute="Normal Text" lineEndContext="#stay">
-         <DetectChar attribute="Doctype" context="#pop" char="&gt;" endRegion="doctype" />
-         <DetectChar attribute="Doctype" context="Doctype Internal Subset" char="[" beginRegion="int_subset" />
-       </context>
-       
-       <context name="Doctype Internal Subset" attribute="Normal Text" lineEndContext="#stay">
-         <DetectChar attribute="Doctype" context="#pop" char="]" endRegion="int_subset" />
-         <RegExpr attribute="Doctype" context="Doctype Markupdecl" String="&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\b" />
-         <StringDetect attribute="Comment" context="comment" String="&lt;!--" beginRegion="comment" />
-         <RegExpr attribute="Processing Instruction" context="PI" String="&lt;\?[\w:_-]*" beginRegion="pi" />
-         <IncludeRules context="FindPEntityRefs" />
-       </context>
-       
-       <context name="Doctype Markupdecl" attribute="Normal Text" lineEndContext="#stay">
-         <DetectChar attribute="Doctype" context="#pop" char="&gt;" />
-         <DetectChar attribute="Value" context="Doctype Markupdecl DQ" char="&quot;" />
-         <DetectChar attribute="Value" context="Doctype Markupdecl SQ" char="&apos;" />
-       </context>
-       
-       <context name="Doctype Markupdecl DQ" attribute="Value" lineEndContext="#stay">
-         <DetectChar attribute="Value" context="#pop" char="&quot;" />
-         <IncludeRules context="FindPEntityRefs" />
-       </context>
-       
-       <context name="Doctype Markupdecl SQ" attribute="Value" lineEndContext="#stay">
-         <DetectChar attribute="Value" context="#pop" char="&apos;" />
-         <IncludeRules context="FindPEntityRefs" />
-       </context>
-       
-       <context name="detectEntRef" attribute="Normal Text" lineEndContext="#stay">
-         <RegExpr attribute="Entity Reference" context="#stay" String="&entref;" />
-       </context>
-       <context name="FindPEntityRefs" attribute="Normal Text" lineEndContext="#stay">
-         <RegExpr attribute="Entity Reference" context="#stay" String="&entref;" />
-         <RegExpr attribute="PEntity Reference" context="#stay" String="%&qname;;" />
-         <AnyChar attribute="Invalid" context="#stay" String="&amp;%" />
-       </context>
-       
-       <context name="tagname" attribute="Tag" lineEndContext="#stay">
-         <keyword attribute="XSLT Tag" context="xattributes" String="keytags" />
-         <keyword attribute="XSLT 2.0 Tag" context="xattributes" String="keytags_2.0" />
-         <DetectSpaces attribute="Attribute" context="attributes" />
-         <DetectChar attribute="Tag" context="#pop" char="&gt;" />
-       </context>
-       
-       <context name="attributes" attribute="Attribute" lineEndContext="#stay">
-         <Detect2Chars attribute="Tag" context="#pop#pop" char="/" char1="&gt;" />
-         <DetectChar attribute="Tag" context="#pop#pop" char="&gt;" />
-         <RegExpr attribute="Normal Text" context="attrValue" String="\s*=\s*" />
-       </context>
+      <context name="pitag" attribute="Normal Text" lineEndContext="#stay">
+        <RegExpr attribute="PI Symbols" context="#pop!PI TagName" String="&lt;\?(?=([\w:_-]*))" beginRegion="pi" />
+        <DetectChar attribute="Invalid" context="#pop" char="&lt;"/>
+      </context>
 
-       <context name="attrValue" attribute="Invalid" lineEndContext="#stay">
-         <Detect2Chars attribute="Invalid" context="#pop#pop#pop" char="/" char1="&gt;" />
-         <DetectChar attribute="Invalid" context="#pop#pop#pop" char="&gt;" />
-         <DetectChar attribute="Attribute Value" context="string" char="&quot;" />
-         <DetectChar attribute="Attribute Value" context="sqstring" char="'" />
-       </context>
+      <context name="specialtag" attribute="Normal Text" lineEndContext="#stay">
+        <StringDetect attribute="Comment" context="#pop!comment" String="&lt;!--" beginRegion="comment"/>
+        <StringDetect attribute="CDATA" context="#pop!CDATAStart" String="&lt;![CDATA[" lookAhead="1" />
+        <RegExpr attribute="Doctype Symbols" context="#pop!DoctypeTagName" String="&lt;!(?=DOCTYPE(\s|$))" beginRegion="doctype" />
+        <DetectChar attribute="Invalid" context="#pop" char="&lt;"/>
+      </context>
 
-       <context name="xattributes" attribute="Attribute" lineEndContext="#stay">
-          <Detect2Chars attribute="Tag" context="#pop#pop" char="/" char1="&gt;" />
-          <DetectChar attribute="Tag" context="#pop#pop" char="&gt;" />
-          <RegExpr attribute="Attribute" context="xattrValue" String="select\s*=\s*|test\s*=\s*|match\s*=\s*" />
-          <RegExpr attribute="Attribute" context="attrValue" String="\s*=\s*" />
-       </context>
+      <context name="FindEntityRefs" attribute="Normal Text" lineEndContext="#stay">
+        <RegExpr attribute="Entity Reference" context="#stay" String="&entref;" />
+        <AnyChar attribute="Invalid" context="#stay" String="&amp;&lt;" />
+      </context>
 
-       <context name="xattrValue" attribute="Invalid" lineEndContext="#stay">
-         <Detect2Chars attribute="Invalid" context="#pop#pop#pop" char="/" char1="&gt;" />
-         <DetectChar attribute="Invalid" context="#pop#pop#pop" char="&gt;" />
-         <DetectChar attribute="XPath" context="xpath" char="&quot;" />
-         <DetectChar attribute="XPath" context="sqxpath" char="'" />
-       </context>
-       
-       
-       <context name="string" attribute="Attribute Value" lineEndContext="#stay">
-         <DetectChar attribute="XPath" context="xpath" char="{" />
-         <DetectChar attribute="Attribute Value" context="#pop#pop" char="&quot;" />
-         <IncludeRules context="detectEntRef" />
-       </context>
+      <context name="CDATAStart" attribute="Normal Text" lineEndContext="#pop">
+        <StringDetect attribute="CDATA Symbols" context="#stay" String="&lt;![" beginRegion="cdata" />
+        <StringDetect attribute="CDATA" context="#stay" String="CDATA" />
+        <DetectChar attribute="CDATA Symbols" context="#pop!CDATA" char="[" />
+      </context>
+      <context name="CDATA" attribute="Other Text" lineEndContext="#stay">
+        <DetectSpaces />
+        <DetectIdentifier />
+        <StringDetect attribute="CDATA Symbols" context="#pop" String="]]&gt;" endRegion="cdata" />
+        <StringDetect attribute="Entity Reference" context="#stay" String="]]&amp;gt;" />
+      </context>
 
-       <context name="sqstring" attribute="Attribute Value" lineEndContext="#stay">
-         <DetectChar attribute="XPath" context="sqxpath" char="{" />
-         <DetectChar attribute="Attribute Value" context="#pop#pop" char="'" />
-         <IncludeRules context="detectEntRef" />
-       </context>
-       
-       <context name="comment" attribute="Comment" lineEndContext="#stay">
-         <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
-         <RegExpr attribute="Invalid" context="#stay" String="-(-(?!-&gt;))+" />
-         <IncludeRules context="##Comments" />
-       </context>
+      <context name="PI TagName" attribute="Other Text" lineEndContext="#pop!PI" fallthrough="true" fallthroughContext="#pop!PI">
+        <RegExpr attribute="Processing Instruction" context="#pop!PI-XML" String="xml(?=\s|$)" insensitive="true" />
+        <StringDetect attribute="Processing Instruction" context="#pop!PI" String="%1" dynamic="true" />
+      </context>
+      <context name="PI" attribute="Other Text" lineEndContext="#stay">
+        <Detect2Chars attribute="PI Symbols" context="#pop" char="?" char1="&gt;" endRegion="pi" />
+      </context>
+      <context name="PI-XML" attribute="Other Text" lineEndContext="#stay">
+        <IncludeRules context="PI" />
+        <RegExpr attribute="Attribute" context="#stay" String="(?:^|\s+)&name;" />
+        <DetectChar attribute="Attribute Separator" context="SpaceBeforeAttrValue" char="=" />
+      </context>
 
-       <context name="xpath" attribute="XPath" lineEndContext="#stay">
-         <keyword attribute="XPath/ XSLT Function" context="#stay" String="functions" />
-         <keyword attribute="XPath 2.0/ XSLT 2.0 Function" context="#stay" String="functions_2.0" />
-         <RegExpr attribute="XPath Axis" context="#stay" String="(&axisname;)::" />
-         <DetectChar attribute="XPath" context="#pop" char="}" />
-         <DetectChar attribute="XPath String" context="sqxpathstring" char="'" />
-         <DetectChar attribute="XPath" context="#pop#pop" char="&quot;" />
-         <RegExpr attribute="XPath Attribute" context="#stay" String="@&qname;" />
-         <RegExpr attribute="Variable" context="#stay" String="\$&qname;" />
-         <RegExpr attribute="XPath" context="#stay" String="&qname;" />
-         <DetectChar attribute="Invalid" context="#stay" char="$" />
-         <IncludeRules context="detectEntRef" />
-       </context>
-       
-       <context name="sqxpath" attribute="XPath" lineEndContext="#stay">
-         <keyword attribute="XPath/ XSLT Function" context="#stay" String="functions" />
-         <keyword attribute="XPath 2.0/ XSLT 2.0 Function" context="#stay" String="functions_2.0" />
-         <RegExpr attribute="XPath Axis" context="#stay" String="(&axisname;)::" />
-         <DetectChar attribute="XPath" context="#pop" char="}" />
-         <DetectChar attribute="XPath String" context="xpathstring" char="&quot;" />
-         <DetectChar attribute="XPath" context="#pop#pop" char="'" />
-         <RegExpr attribute="XPath Attribute" context="#stay" String="@&qname;" />
-         <RegExpr attribute="Variable" context="#stay" String="\$&qname;" />
-         <RegExpr attribute="XPath" context="#stay" String="&qname;" />
-         <DetectChar attribute="Invalid" context="#stay" char="$" />
-         <IncludeRules context="detectEntRef" />
-       </context>
-       
-       <context name="sqxpathstring" attribute="XPath String" lineEndContext="#stay">
-         <DetectChar attribute="XPath String" context="#pop" char="'" />
-         <IncludeRules context="detectEntRef" />
-       </context>
-       
-       <context name="xpathstring" attribute="XPath String" lineEndContext="#stay">
-         <DetectChar attribute="XPath String" context="#pop" char="&quot;" />
-         <IncludeRules context="detectEntRef" />
-       </context>
+      <context name="DoctypeTagName" attribute="Other Text" lineEndContext="#pop">
+        <StringDetect attribute="Doctype" context="#pop!DoctypeVariableName" String="DOCTYPE" />
+      </context>
+      <context name="DoctypeVariableName" attribute="Other Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop!Doctype">
+        <DetectSpaces />
+        <RegExpr attribute="Doctype Name" context="#pop!Doctype" String="&name;" />
+      </context>
+      <context name="Doctype" attribute="Other Text" lineEndContext="#stay">
+        <DetectChar attribute="Doctype Symbols" context="#pop" char="&gt;" endRegion="doctype" />
+        <DetectChar attribute="Doctype Symbols" context="Doctype Internal Subset" char="[" beginRegion="int_subset" />
+      </context>
+
+      <context name="Doctype Internal Subset" attribute="Other Text" lineEndContext="#stay">
+        <DetectChar attribute="Doctype Symbols" context="#pop" char="]" endRegion="int_subset" />
+        <RegExpr attribute="Doctype Symbols" context="Doctype Markupdecl TagName" String="&lt;!(?=(ELEMENT|ENTITY|ATTLIST|NOTATION)\b)" />
+        <StringDetect attribute="Comment" context="comment" String="&lt;!--" beginRegion="comment" />
+        <RegExpr attribute="PI Symbols" context="PI TagName" String="&lt;\?(?=([\w:_-]*))" beginRegion="pi" />
+        <IncludeRules context="FindPEntityRefs" />
+      </context>
+
+      <context name="Doctype Markupdecl TagName" attribute="Other Text" lineEndContext="#pop">
+        <StringDetect attribute="Doctype" context="#pop!Doctype Markupdecl VariableName" String="%1" dynamic="true" />
+      </context>
+      <context name="Doctype Markupdecl VariableName" attribute="Other Text" lineEndContext="#pop!Doctype Markupdecl" fallthrough="true" fallthroughContext="#pop!Doctype Markupdecl">
+        <DetectSpaces />
+        <RegExpr attribute="Doctype Name" context="#pop!Doctype Markupdecl" String="&name;" />
+      </context>
+      <context name="Doctype Markupdecl" attribute="Other Text" lineEndContext="#stay">
+        <DetectChar attribute="Doctype Symbols" context="#pop" char="&gt;" />
+        <DetectChar attribute="Value" context="Doctype Markupdecl DQ" char="&quot;" />
+        <DetectChar attribute="Value" context="Doctype Markupdecl SQ" char="&apos;" />
+      </context>
+
+      <context name="Doctype Markupdecl DQ" attribute="Value" lineEndContext="#stay">
+        <DetectChar attribute="Value" context="#pop" char="&quot;" />
+        <IncludeRules context="FindPEntityRefs" />
+      </context>
+
+      <context name="Doctype Markupdecl SQ" attribute="Value" lineEndContext="#stay">
+        <DetectChar attribute="Value" context="#pop" char="&apos;" />
+        <IncludeRules context="FindPEntityRefs" />
+      </context>
+
+      <context name="FindPEntityRefs" attribute="Normal Text" lineEndContext="#stay">
+        <RegExpr attribute="Entity Reference" context="#stay" String="&entref;" />
+        <RegExpr attribute="PEntity Reference" context="#stay" String="%&qname;;" />
+        <AnyChar attribute="Invalid" context="#stay" String="&amp;%" />
+      </context>
+
+      <context name="ElementTagName" attribute="Other Text" lineEndContext="#pop!attributes" fallthrough="true" fallthroughContext="#pop">
+        <keyword attribute="XSLT Tag" context="#pop!xattributes" String="keytags" />
+        <keyword attribute="XSLT 2.0 Tag" context="#pop!xattributes" String="keytags_2.0" />
+        <DetectIdentifier context="#pop!attributes" attribute="Tag" />
+      </context>
+
+      <context name="ElementEndTagName" attribute="Other Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <keyword attribute="XSLT Tag" context="#pop!endtag" String="keytags" />
+        <keyword attribute="XSLT 2.0 Tag" context="#pop!endtag" String="keytags_2.0" />
+        <DetectIdentifier context="#pop!endtag" attribute="Tag" />
+      </context>
+      <context name="endtag" attribute="Other Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <DetectChar attribute="Tag Symbols" context="#pop" char="&gt;" />
+        <DetectSpaces/>
+      </context>
+
+      <context name="attributes" attribute="Attribute" lineEndContext="#stay">
+        <DetectSpaces attribute="Attribute" />
+        <Detect2Chars attribute="Tag Symbols" context="#pop" char="/" char1="&gt;" endRegion="element" />
+        <DetectChar attribute="Tag Symbols" context="#pop" char="&gt;" />
+        <DetectChar attribute="Attribute Separator" context="SpaceBeforeAttrValue" char="=" />
+        <DetectIdentifier attribute="Attribute" />
+      </context>
+
+      <context name="SpaceBeforeAttrValue" attribute="Attribute" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!attrValue">
+        <DetectSpaces attribute="Attribute" />
+      </context>
+      <context name="attrValue" attribute="Invalid" lineEndContext="#stay">
+        <Detect2Chars attribute="Invalid" context="#pop#pop#pop" char="/" char1="&gt;" />
+        <DetectChar attribute="Invalid" context="#pop#pop#pop" char="&gt;" />
+        <DetectChar attribute="Attribute Value" context="string" char="&quot;" />
+        <DetectChar attribute="Attribute Value" context="sqstring" char="'" />
+      </context>
+
+      <context name="xattributes" attribute="Attribute" lineEndContext="#stay">
+        <DetectSpaces attribute="Attribute" />
+        <Detect2Chars attribute="Tag Symbols" context="#pop#pop" char="/" char1="&gt;" endRegion="element" />
+        <DetectChar attribute="Tag Symbols" context="#pop#pop" char="&gt;" />
+        <keyword attribute="XSLT XPath Attribute" context="xattributesSep" String="xsl-attributes" />
+        <DetectChar attribute="Attribute Separator" context="SpaceBeforeAttrValue" char="=" />
+        <DetectIdentifier attribute="Attribute" />
+      </context>
+
+      <context name="xattributesSep" attribute="Attribute" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop">
+        <DetectSpaces attribute="Attribute" />
+        <DetectChar attribute="Attribute Separator" context="SpaceBeforeXAttrValue" char="=" />
+      </context>
+      <context name="SpaceBeforeXAttrValue" attribute="Attribute" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!xattrValue">
+        <DetectSpaces attribute="Attribute" />
+      </context>
+      <context name="xattrValue" attribute="Invalid" lineEndContext="#stay">
+        <Detect2Chars attribute="Invalid" context="#pop#pop#pop" char="/" char1="&gt;" />
+        <DetectChar attribute="Invalid" context="#pop#pop#pop" char="&gt;" />
+        <DetectChar attribute="XPath" context="xpath" char="&quot;" />
+        <DetectChar attribute="XPath" context="sqxpath" char="'" />
+      </context>
+
+
+      <context name="string" attribute="Attribute Value" lineEndContext="#stay">
+        <DetectIdentifier />
+        <DetectChar attribute="XPath" context="xpath" char="{" />
+        <DetectChar attribute="Attribute Value" context="#pop#pop" char="&quot;" />
+        <IncludeRules context="FindEntityRefs" />
+      </context>
+
+      <context name="sqstring" attribute="Attribute Value" lineEndContext="#stay">
+        <DetectIdentifier />
+        <DetectChar attribute="XPath" context="sqxpath" char="{" />
+        <DetectChar attribute="Attribute Value" context="#pop#pop" char="'" />
+        <IncludeRules context="FindEntityRefs" />
+      </context>
+
+      <context name="comment" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces />
+        <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
+        <RegExpr attribute="Invalid" context="#stay" String="-(-(?!-&gt;))+" />
+        <IncludeRules context="##Comments" />
+        <DetectIdentifier />
+      </context>
+
+      <context name="xpath" attribute="XPath" lineEndContext="#stay">
+        <keyword attribute="XPath/ XSLT Function" context="#stay" String="functions" />
+        <keyword attribute="XPath 2.0/ XSLT 2.0 Function" context="#stay" String="functions_2.0" />
+        <RegExpr attribute="XPath Axis" context="#stay" String="(&axisname;)::" />
+        <DetectChar attribute="XPath" context="#pop" char="}" />
+        <DetectChar attribute="XPath String" context="sqxpathstring" char="'" />
+        <DetectChar attribute="XPath" context="#pop#pop" char="&quot;" />
+        <RegExpr attribute="XPath Attribute" context="#stay" String="@&qname;" />
+        <RegExpr attribute="Variable" context="#stay" String="\$&qname;" />
+        <RegExpr attribute="XPath" context="#stay" String="&qname;" />
+        <DetectChar attribute="Invalid" context="#stay" char="$" />
+        <DetectIdentifier />
+        <IncludeRules context="FindEntityRefs" />
+      </context>
+
+      <context name="sqxpath" attribute="XPath" lineEndContext="#stay">
+        <keyword attribute="XPath/ XSLT Function" context="#stay" String="functions" />
+        <keyword attribute="XPath 2.0/ XSLT 2.0 Function" context="#stay" String="functions_2.0" />
+        <RegExpr attribute="XPath Axis" context="#stay" String="(&axisname;)::" />
+        <DetectChar attribute="XPath" context="#pop" char="}" />
+        <DetectChar attribute="XPath String" context="xpathstring" char="&quot;" />
+        <DetectChar attribute="XPath" context="#pop#pop" char="'" />
+        <RegExpr attribute="XPath Attribute" context="#stay" String="@&qname;" />
+        <RegExpr attribute="Variable" context="#stay" String="\$&qname;" />
+        <RegExpr attribute="XPath" context="#stay" String="&qname;" />
+        <DetectChar attribute="Invalid" context="#stay" char="$" />
+        <DetectIdentifier />
+        <IncludeRules context="FindEntityRefs" />
+      </context>
+
+      <context name="sqxpathstring" attribute="XPath String" lineEndContext="#stay">
+        <DetectChar attribute="XPath String" context="#pop" char="'" />
+        <DetectIdentifier />
+        <IncludeRules context="FindEntityRefs" />
+      </context>
+
+      <context name="xpathstring" attribute="XPath String" lineEndContext="#stay">
+        <DetectChar attribute="XPath String" context="#pop" char="&quot;" />
+        <DetectIdentifier />
+        <IncludeRules context="FindEntityRefs" />
+      </context>
        
     </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Other Text" defStyleNum="dsNormal" />
       <itemData name="Tag" defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="Tag Symbols" defStyleNum="dsKeyword" spellChecking="false" />
       <itemData name="Attribute" defStyleNum="dsOthers" spellChecking="false"/>
+      <itemData name="XSLT XPath Attribute" defStyleNum="dsOthers" spellChecking="false"/>
+      <itemData name="Attribute Separator" defStyleNum="dsOthers" spellChecking="false"/>
       <itemData name="Value" defStyleNum="dsAttribute"/>
       <itemData name="Invalid" defStyleNum="dsError" spellChecking="false"/>
       <itemData name="Attribute Value" defStyleNum="dsString"/>
@@ -422,8 +505,12 @@
       <itemData name="Entity Reference" defStyleNum="dsDecVal" spellChecking="false"/>
 
       <itemData name="CDATA" defStyleNum="dsBaseN" bold="1" spellChecking="false"/>
+      <itemData name="CDATA Symbols"   defStyleNum="dsBaseN"    bold="0" italic="0" spellChecking="false" />
       <itemData name="Processing Instruction" defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="PI Symbols" defStyleNum="dsFunction" bold="0" italic="0" spellChecking="false" />
       <itemData name="Doctype" defStyleNum="dsDataType" bold="1" spellChecking="false"/>
+      <itemData name="Doctype Name" defStyleNum="dsDataType" bold="0" italic="0" spellChecking="false" />
+      <itemData name="Doctype Symbols" defStyleNum="dsDataType" bold="0" italic="0" spellChecking="false" />
       <itemData name="PEntity Reference" defStyleNum="dsDecVal" spellChecking="false"/>
 
     </itemDatas>
diff --git a/xml/zsh.xml b/xml/zsh.xml
--- a/xml/zsh.xml
+++ b/xml/zsh.xml
@@ -1,611 +1,2020 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-        <!ENTITY funcname "[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*">
-        <!ENTITY varname  "[A-Za-z_][A-Za-z0-9_]*">
-        <!ENTITY word     "[^|&amp;;()&lt;&gt;\s]+">    <!-- see man bash -->
-        <!ENTITY eos      "(?=($|\s))">                 <!-- eol or space following -->
-        <!ENTITY noword   "(?![\w$+-])">                <!-- no word, $, + or - following -->
-        <!ENTITY pathpart "([\w_@.&#37;*?+-]|\\ )">     <!-- valid character in a file name -->
-]>
-<language name="Zsh" version="8" kateversion="5.53" section="Scripts" extensions="*.sh;*.zsh;.zshrc;.zprofile;.zlogin;.zlogout;.profile" mimetype="application/x-shellscript" casesensitive="1" author="Jonathan Kolberg (bulldog98@kubuntu-de.org)" license="LGPL">
-
-<!-- (c) 2011 by Jonathan Kolberg (bulldog98@kubuntu-de.org)
-  modified for zsh -->
-<!-- (c) 2004 by Wilbert Berendsen (wilbert@kde.nl)
-    Changes by Matthew Woehlke (mw_triad@users.sourceforge.net)
-    Changes by Sebastian Pipping (webmaster@hartwork.org)
-    Released under the LGPL, part of kdelibs/kate -->
-
-  <highlighting>
-    <list name="keywords">
-      <item>else</item>
-      <item>for</item>
-      <item>function</item>
-      <item>in</item>
-      <item>select</item>
-      <item>until</item>
-      <item>while</item>
-      <item>elif</item>
-      <item>then</item>
-      <item>set</item>
-    </list>
-
-<list name="builtins"><!-- see man zshbuiltins -->
-	<item>-</item>
-	<item>.</item>
-	<item>:</item>
-	<item>alias</item>
-	<item>autoload</item>
-	<item>bg</item>
-	<item>bindkey</item>
-	<item>break</item>
-	<item>builtin</item>
-	<item>bye</item>
-	<item>cap</item>
-	<item>cd</item>
-	<item>chdir</item>
-	<item>clone</item>
-	<item>command</item>
-	<item>comparguments</item>
-	<item>compcall</item>
-	<item>compctl</item>
-	<item>compdescribe</item>
-	<item>compfiles</item>
-	<item>compgroups</item>
-	<item>compquote</item>
-	<item>comptags</item>
-	<item>comptry</item>
-	<item>compvalues</item>
-	<item>continue</item>
-	<item>dirs</item>
-	<item>disable</item>
-	<item>disown</item>
-	<item>echo</item>
-	<item>echotc</item>
-	<item>echoti</item>
-	<item>emulate</item>
-	<item>enable</item>
-	<item>eval</item>
-	<item>exec</item>
-	<item>exit</item>
-	<item>false</item>
-	<item>fc</item>
-	<item>fg</item>
-	<item>functions</item>
-	<item>getcap</item>
-	<item>getopts</item>
-	<item>hash</item>
-	<item>history</item>
-	<item>jobs</item>
-	<item>kill</item>
-	<item>let</item>
-	<item>limit</item>
-	<item>log</item>
-	<item>logout</item>
-	<item>noglob</item>
-	<item>popd</item>
-	<item>print</item>
-	<item>printf</item>
-	<item>pushd</item>
-	<item>pushln</item>
-	<item>pwd</item>
-	<item>r</item>
-	<item>rehash</item>
-	<item>return</item>
-	<item>sched</item>
-	<item>set</item>
-	<item>setcap</item>
-	<item>setopt</item>
-	<item>shift</item>
-	<item>source</item>
-	<item>stat</item>
-	<item>suspend</item>
-	<item>test</item>
-	<item>times</item>
-	<item>trap</item>
-	<item>true</item>
-	<item>ttyctl</item>
-	<item>type</item>
-	<item>ulimit</item>
-	<item>umask</item>
-	<item>unalias</item>
-	<item>unfunction</item>
-	<item>unhash</item>
-	<item>unlimit</item>
-	<item>unset</item>
-	<item>unsetopt</item>
-	<item>vared</item>
-	<item>wait</item>
-	<item>whence</item>
-	<item>where</item>
-	<item>which</item>
-	<item>zcompile</item>
-	<item>zformat</item>
-	<item>zftp</item>
-	<item>zle</item>
-	<item>zmodload</item>
-	<item>zparseopts</item>
-	<item>zprof</item>
-	<item>zpty</item>
-	<item>zregexparse</item>
-	<item>zsocket</item>
-	<item>zstyle</item>
-	<item>ztcp</item>
-    </list>
-
-    <list name="builtins_var">
-	<item>declare</item>
-	<item>export</item>
-	<item>float</item>
-	<item>getln</item>
-	<item>integer</item>
-	<item>unset</item>
-	<item>declare</item>
-	<item>typeset</item>
-	<item>local</item>
-	<item>read</item>
-	<item>readonly</item>
-    </list>
-
-    <list name="unixcommands">
-      <include>unixcommands##Bash</include>
-    </list>
-
-
-    <contexts>
-      <context attribute="Normal Text" lineEndContext="#stay" name="Start">
-        <IncludeRules context="FindAll" />
-      </context>
-
-<!-- ====== The following rulessets are meant to be included ======== -->
-      <!-- FindAll tries to interpret everything -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindAll">
-        <IncludeRules context="FindComments" />
-        <IncludeRules context="FindCommands" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- FindMost tries to interpret anything except commands -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindMost">
-        <IncludeRules context="FindComments" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-
-      <!-- FindComments consumes shell comments till EOL -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="FindComments">
-        <DetectChar attribute="Comment" context="Comment" char="#" firstNonSpace="true"/>
-        <RegExpr attribute="Normal Text" context="Comment" String="[\s;](?=#)" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" name="Comment">
-        <DetectSpaces />
-        <IncludeRules context="##Comments" />
-      </context>
-
-      <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsParen">
-        <DetectChar attribute="Comment" context="CommentParen" char="#" firstNonSpace="true"/>
-        <RegExpr attribute="Normal Text" context="CommentParen" String="[\s;](?=#)" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" name="CommentParen">
-        <RegExpr attribute="Comment" context="#pop" String="[^)](?=\))" />
-        <IncludeRules context="##Comments" />
-      </context>
-
-      <!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsBackq">
-        <DetectChar attribute="Comment" context="CommentBackq" char="#" firstNonSpace="true"/>
-        <RegExpr attribute="Normal Text" context="CommentBackq" String="[\s;](?=#)" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" name="CommentBackq">
-        <RegExpr attribute="Comment" context="#pop" String="[^`](?=`)" />
-        <IncludeRules context="##Comments" />
-      </context>
-
-
-      <!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindCommands">
-        <!-- start expression in double parentheses -->
-        <Detect2Chars attribute="Keyword" context="ExprDblParen" char="(" char1="(" beginRegion="expression" />
-        <!-- start expression in double brackets -->
-        <RegExpr attribute="Keyword" context="ExprDblBracket" String="\[\[&eos;" beginRegion="expression" column="0"/>
-        <RegExpr attribute="Keyword" context="ExprDblBracket" String="\s\[\[&eos;" beginRegion="expression" />
-        <!-- start expression in single brackets -->
-        <RegExpr attribute="Builtin" context="ExprBracket" String="\[&eos;" beginRegion="expression" column="0"/>
-        <RegExpr attribute="Builtin" context="ExprBracket" String="\s\[&eos;" beginRegion="expression" />
-        <!-- start a group command with { -->
-        <RegExpr attribute="Keyword" context="Group" String="\{&eos;" beginRegion="group" />
-        <!-- start a subshell -->
-        <DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell" />
-        <!-- match do and if blocks -->
-        <RegExpr attribute="Keyword" context="#stay" String="\bdo&noword;" beginRegion="do" />
-        <RegExpr attribute="Keyword" context="#stay" String="\bdone&noword;" endRegion="do" />
-        <RegExpr attribute="Keyword" context="#stay" String="\bif&eos;" beginRegion="if" />
-        <RegExpr attribute="Keyword" context="#stay" String="\bfi&noword;" endRegion="if" />
-        <!-- handle case as a special case -->
-        <RegExpr attribute="Keyword" context="Case" String="\bcase&noword;" beginRegion="case" />
-        <!-- handle command line options -->
-        <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9][A-Za-z0-9_]*" />
-        <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
-        <!-- handle variable assignments -->
-        <RegExpr attribute="Variable" context="Assign" String="\b&varname;\+?=" />
-        <RegExpr attribute="Variable" context="AssignSubscr" String="\b&varname;(?=\[.+\]\+?=)" />
-        <!-- handle functions with function keyword before keywords -->
-        <StringDetect attribute="Function" context="#stay" String=":()" />
-        <RegExpr attribute="Keyword" context="FunctionDef" String="\bfunction\b" />
-        <!-- handle keywords -->
-        <keyword attribute="Keyword" context="#stay" String="keywords" />
-        <RegExpr attribute="Builtin" context="#stay" String="\.(?=\s)" />
-        <keyword attribute="Builtin" context="#stay" String="builtins" />
-        <keyword attribute="Command" context="#stay" String="unixcommands" />
-        <!-- handle commands that have variable names as argument -->
-        <keyword attribute="Builtin" context="VarName" String="builtins_var" />
-        <!-- handle here-string -->
-        <RegExpr attribute="Redirection" context="#stay" String="\d*&lt;&lt;&lt;" />
-        <!-- handle here document -->
-        <Detect2Chars attribute="Redirection" context="HereDoc" char="&lt;" char1="&lt;" lookAhead="true" />
-        <!-- handle process subst -->
-        <Detect2Chars attribute="Redirection" context="ProcessSubst" char="&lt;" char1="(" />
-        <Detect2Chars attribute="Redirection" context="ProcessSubst" char="&gt;" char1="(" />
-        <!-- handle redirection -->
-        <RegExpr attribute="Redirection" context="#stay" String="([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)" />
-        <!-- handle &, &&, | and || -->
-        <RegExpr attribute="Control" context="#stay" String="([|&amp;])\1?" />
-        <!-- mark function definitions without function keyword -->
-        <RegExpr attribute="Function" context="#stay" String="&funcname;\s*\(\)" />
-      </context>
-
-      <!-- FindOthers contains various rules to mark different shell input -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindOthers">
-        <RegExpr attribute="Escape" context="#stay" String="\\[][;\\$`{}()|&amp;&lt;&gt;* ]" />
-        <RegExpr attribute="Keyword" context="#stay" String="\\$" />
-        <RegExpr attribute="Escape" context="#stay" String="\{(?!(\s|$))\S*\}" />
-        <RegExpr attribute="Path" context="#stay" String="&pathpart;*(?=/)" />
-        <RegExpr attribute="Path" context="#stay" String="~\w*" />
-        <RegExpr attribute="Path" context="#stay" String="/&pathpart;*(?=([\s/):;$`'&quot;]|$))" />
-        <!-- TODO: shell globs beside * and ? (in Path's) -->
-      </context>
-
-      <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindStrings">
-        <Detect2Chars attribute="Escape" context="#stay" char="\" char1="'" />
-        <Detect2Chars attribute="Escape" context="#stay" char="\" char1="&quot;" />
-        <DetectChar attribute="String SingleQ" context="StringSQ" char="'" />
-        <DetectChar attribute="String DoubleQ" context="StringDQ" char="&quot;" />
-        <Detect2Chars attribute="String SingleQ" context="StringEsc" char="$" char1="'" />
-        <Detect2Chars attribute="String Transl." context="StringDQ" char="$" char1="&quot;" />
-      </context>
-
-      <!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindSubstitutions">
-        <RegExpr attribute="Variable" context="Subscript" String="\$&varname;\[" />
-        <RegExpr attribute="Variable" context="#stay" String="\$&varname;" />
-        <RegExpr attribute="Variable" context="#stay" String="\$[*@#?$!_0-9-]" />
-        <RegExpr attribute="Variable" context="#stay" String="\$\{[*@#?$!_0-9-]\}" />
-        <RegExpr attribute="Variable" context="#stay" String="\$\{#&varname;(\[[*@]\])?\}" />
-        <RegExpr attribute="Variable" context="#stay" String="\$\{!&varname;(\[[*@]\]|[*@])?\}" />
-        <RegExpr attribute="Variable" context="VarBrace" String="\$\{#?&varname;" />
-        <RegExpr attribute="Variable" context="VarBrace" String="\$\{[*@#?$!_0-9-](?=[:#%/=?+-])" />
-        <StringDetect attribute="Variable" context="ExprDblParenSubst" String="$((" beginRegion="expression" />
-        <StringDetect attribute="Redirection" context="SubstFile" String="$(&lt;" />
-        <Detect2Chars attribute="Variable" context="SubstCommand" char="$" char1="(" />
-        <DetectChar attribute="Backquote" context="SubstBackq" char="`" />
-        <RegExpr attribute="Escape" context="#stay" String="\\[`$\\]" />
-      </context>
-
-      <!-- FindTests finds operators valid in tests -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindTests">
-        <RegExpr attribute="Expression" context="#stay" String="-[abcdefghkprstuwxOGLSNozn](?=\s)"/>
-        <RegExpr attribute="Expression" context="#stay" String="-([no]t|ef)(?=\s)"/>
-        <RegExpr attribute="Expression" context="#stay" String="([!=]=?|[&gt;&lt;])(?=\s)"/>
-        <RegExpr attribute="Expression" context="#stay" String="-(eq|ne|[gl][te])(?=\s)"/>
-      </context>
-
-
-<!-- ====== These are the contexts that can be branched to ======= -->
-
-      <!-- ExprDblParen consumes an expression started in command mode till )) -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
-        <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression" />
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
-        <Detect2Chars attribute="Variable" context="#pop" char=")" char1=")" endRegion="expression" />
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- ExprSubParen consumes an expression till ) -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubParen">
-        <DetectChar attribute="Normal Text" context="#pop" char=")" />
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- ExprBracket consumes an expression till ] -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket">
-        <RegExpr attribute="Builtin" context="#pop" String="\s\](?=($|[\s;|&amp;]))" endRegion="expression" />
-        <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindTests" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- ExprDblBracket consumes an expression till ]] -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket">
-        <RegExpr attribute="Keyword" context="#pop" String="\s\]\](?=($|[\s;|&amp;]))" endRegion="expression" />
-        <RegExpr attribute="Keyword" context="#pop" String="\]\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindTests" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- Group consumes shell input till } -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="Group">
-        <DetectChar attribute="Keyword" context="#pop" char="}" endRegion="group" />
-        <IncludeRules context="FindAll" />
-      </context>
-
-      <!-- SubShell consumes shell input till ) -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="SubShell">
-        <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell" />
-        <IncludeRules context="FindAll" />
-      </context>
-
-      <!-- Assign consumes an expression till EOL or whitespace -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthrough="true" fallthroughContext="#pop">
-        <DetectChar attribute="Variable" context="AssignArray" char="(" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-        <RegExpr attribute="Normal Text" context="#stay" String="[\w:,+_./-]" />
-      </context>
-
-      <!-- AssignArray consumes everything till ), marking assignments -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="AssignArray">
-        <DetectChar attribute="Variable" context="#pop" char=")" />
-        <DetectChar attribute="Variable" context="Subscript" char="[" />
-        <DetectChar attribute="Variable" context="Assign" char="=" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- AssignSubscr first expects a [ then parses subscript and continues with '=value' -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="AssignSubscr" fallthrough="true" fallthroughContext="#pop">
-        <DetectChar attribute="Variable" context="Subscript" char="[" />
-        <Detect2Chars attribute="Variable" context="Assign" char="+" char1="=" />
-        <DetectChar attribute="Variable" context="Assign" char="=" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- Subscript consumes anything till ], marks as Variable -->
-      <context attribute="Variable" lineEndContext="#stay" name="Subscript">
-        <DetectChar attribute="Variable" context="#pop" char="]" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- FunctionDef consumes a name, possibly with (), marks as Function -->
-      <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Function" context="#pop" String="\s+&funcname;(\s*\(\))?" />
-      </context>
-
-      <!-- VarName consumes spare variable names and assignments -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="VarName" fallthrough="true" fallthroughContext="#pop">
-        <!-- handle command line options -->
-        <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9]+" />
-        <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
-        <RegExpr attribute="Variable" context="#stay" String="\b&varname;" />
-        <DetectChar attribute="Variable" context="Subscript" char="[" />
-        <DetectChar attribute="Variable" context="Assign" char="=" />
-        <IncludeRules context="FindMost" />
-        <!-- stay here in spaces and other safe characters -->
-        <RegExpr attribute="Normal Text" context="#stay" String="[^]})|;`&amp;&gt;&lt;]" />
-      </context>
-
-      <!-- ProcessSubst handles <(command) and >(command) -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst">
-        <DetectChar attribute="Redirection" context="#pop" char=")" />
-        <IncludeRules context="FindCommentsParen" />
-        <IncludeRules context="FindCommands" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- StringSQ consumes anything till ' -->
-      <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ">
-        <DetectChar attribute="String SingleQ" context="#pop" char="'" />
-      </context>
-
-      <!-- StringDQ consumes anything till ", substitutes vars and expressions -->
-      <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ">
-        <DetectChar attribute="String DoubleQ" context="#pop" char="&quot;" />
-        <RegExpr attribute="String Escape" context="#stay" String="\\[`&quot;\\$\n]" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-      <!-- StringEsc eats till ', but escaping many characters -->
-      <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
-        <DetectChar attribute="String SingleQ" context="#pop" char="'" />
-        <RegExpr attribute="String Escape" context="#stay" String="\\[abefnrtv\\']" />
-        <RegExpr attribute="String Escape" context="#stay" String="\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)" />
-      </context>
-
-      <!-- VarBrace is called as soon as ${xxx is encoutered -->
-      <context attribute="Error" lineEndContext="#stay" name="VarBrace">
-        <DetectChar attribute="Variable" context="#pop" char="}" />
-        <DetectChar attribute="Variable" context="Subscript" char="[" />
-        <RegExpr attribute="Variable" context="VarAlt" String="(:?[-=?+]|##?|%%?)" />
-        <RegExpr attribute="Variable" context="VarSubst" String="//?" />
-        <DetectChar attribute="Variable" context="VarSub" char=":" />
-      </context>
-
-      <!-- VarAlt is to handle default/alternate/etc values of variables -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="VarAlt">
-        <DetectChar attribute="Variable" context="#pop#pop" char="}" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-      <!-- VarSubst is to handle substitutions on variables -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="VarSubst">
-        <DetectChar attribute="Variable" context="#pop#pop" char="}" />
-        <DetectChar attribute="Variable" context="VarSubst2" char="/" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-      <context attribute="Normal Text" lineEndContext="#stay" name="VarSubst2">
-        <DetectChar attribute="Variable" context="#pop#pop#pop" char="}" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-      <!-- VarSub is to substrings of variables -->
-      <context attribute="Error" lineEndContext="#stay" name="VarSub">
-        <DetectChar attribute="Variable" context="VarSub2" char=":" />
-        <DetectChar attribute="Variable" context="#pop#pop" char="}" />
-        <RegExpr attribute="Variable" context="#stay" String="&varname;" />
-        <RegExpr attribute="Variable" context="#stay" String="[0-9]+(?=[:}])" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-      <context attribute="Error" lineEndContext="#stay" name="VarSub2">
-        <DetectChar attribute="Variable" context="#pop#pop#pop" char="}" />
-        <RegExpr attribute="Variable" context="#stay" String="&varname;" />
-        <RegExpr attribute="Variable" context="#stay" String="[0-9](?=[:}])" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-
-      <!-- SubstFile is called after a <( or >( is encoutered -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="SubstFile">
-        <DetectChar attribute="Redirection" context="#pop" char=")" />
-        <IncludeRules context="FindCommentsParen" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- SubstCommand is called after a $( is encountered -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand">
-        <DetectChar attribute="Variable" context="#pop" char=")" />
-        <IncludeRules context="FindCommentsParen" />
-        <IncludeRules context="FindCommands" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- SubstBackq is called when a backquote is encountered -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="SubstBackq">
-        <DetectChar attribute="Backquote" context="#pop" char="`" />
-        <IncludeRules context="FindCommentsBackq" />
-        <IncludeRules context="FindCommands" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- Case is called after the case keyword is encoutered. We handle this because of
-           the lonely closing parentheses that would otherwise disturb the expr matching -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="Case">
-        <RegExpr attribute="Keyword" context="CaseIn" String="\sin\b" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- CaseIn is called when the construct 'case ... in' has been found. -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="CaseIn">
-        <RegExpr attribute="Keyword" context="#pop#pop" String="\besac(?=$|[\s;)])" endRegion="case" />
-        <DetectChar attribute="Keyword" context="CaseExpr" char=")" beginRegion="caseexpr" />
-        <AnyChar attribute="Keyword" context="#stay" String="(|" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- CaseExpr eats shell input till ;; -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr">
-        <Detect2Chars attribute="Keyword" context="#pop" char=";" char1=";" endRegion="caseexpr" />
-        <RegExpr attribute="Keyword" context="#pop" String="esac(?=$|[\s;)])" lookAhead="true" firstNonSpace="true" endRegion="caseexpr"/>
-        <IncludeRules context="FindAll" />
-      </context>
-
-      <!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDoc">
-        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*&quot;(&word;)&quot;)" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*'(&word;)')" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*\\(&word;))" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocINQ" String="(&lt;&lt;-\s*(&word;))" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*&quot;(&word;)&quot;)" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*'(&word;)')" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*\\(&word;))" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocNQ"  String="(&lt;&lt;\s*(&word;))" lookAhead="true" />
-        <Detect2Chars attribute="Redirection" context="#pop"  char="&lt;" char1="&lt;" /><!-- always met -->
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder">
-        <IncludeRules context="FindAll" />
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocQ" dynamic="true">
-        <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
-        <RegExpr attribute="Redirection" context="#pop#pop" String="^%2\b" dynamic="true" column="0"/>
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocNQ" dynamic="true">
-        <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
-        <RegExpr attribute="Redirection" context="#pop#pop" String="^%2\b" dynamic="true" column="0"/>
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocIQ" dynamic="true">
-        <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
-        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2\b" dynamic="true" column="0"/>
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocINQ" dynamic="true">
-        <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
-        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2\b" dynamic="true" column="0"/>
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-    </contexts>
-
-    <itemDatas>
-      <itemData name="Normal Text"	defStyleNum="dsNormal" />
-      <itemData name="Comment"		defStyleNum="dsComment" />
-      <itemData name="Keyword" 		defStyleNum="dsKeyword" />
-      <itemData name="Control" 		defStyleNum="dsKeyword" />
-      <itemData name="Builtin" 		defStyleNum="dsKeyword" color="#808" />
-      <itemData name="Command" 		defStyleNum="dsKeyword" color="#c0c" />
-      <itemData name="Redirection" 	defStyleNum="dsKeyword" color="#238" />
-      <itemData name="Escape" 		defStyleNum="dsDataType" />
-      <itemData name="String SingleQ" 	defStyleNum="dsString" />
-      <itemData name="String DoubleQ" 	defStyleNum="dsString" />
-      <itemData name="Backquote" 	defStyleNum="dsKeyword" />
-      <itemData name="String Transl." 	defStyleNum="dsString" />
-      <itemData name="String Escape" 	defStyleNum="dsDataType" />
-      <itemData name="Variable" 	defStyleNum="dsOthers" />
-      <itemData name="Expression" 	defStyleNum="dsOthers" />
-      <itemData name="Function" 	defStyleNum="dsFunction" />
-      <itemData name="Path" 		defStyleNum="dsNormal" />
-      <itemData name="Option" 		defStyleNum="dsNormal" />
-      <itemData name="Error"            defStyleNum="dsError" />
-    </itemDatas>
-  </highlighting>
-  <general>
-    <comments>
-      <comment name="singleLine" start="#"/>
-    </comments>
-    <keywords casesensitive="1" weakDeliminator="^%#[]$._{}:-/" additionalDeliminator="`"/>
+        <!ENTITY tab      "&#009;">
+        <!ENTITY funcname "[^&_fragpathseps;=]*+">
+        <!ENTITY varname  "[A-Za-z_][A-Za-z0-9_]*">
+        <!ENTITY eos      "(?=$|[ &tab;])">                 <!-- eol or space following -->
+        <!ENTITY eoexpr   "(?=$|[ &tab;&lt;>|&amp;;)])">
+
+        <!ENTITY substseps  "${}'&quot;`\\">
+        <!ENTITY symbolseps "&lt;>|&amp;;()">
+        <!ENTITY wordseps   " &tab;&symbolseps;">
+        <!ENTITY wordseps_or_extglog " &tab;>|&amp;;)`"> <!-- wordseps without < and ( -->
+
+        <!ENTITY _fragpathseps  "*?#^~[&wordseps;&substseps;">
+        <!ENTITY _fragpathnosep "(?:&_brace_noexpansion;)?+">
+        <!ENTITY path        "(?:[^&_fragpathseps;]*+&_fragpathnosep;)*+">
+        <!ENTITY fragpath    "(?:[^&_fragpathseps;/]*+&_fragpathnosep;)*+">
+        <!ENTITY fragpathesc "\\.(?:[^&_fragpathseps;/]*+(?:\\.|&_brace_noexpansion;)?+)*+">
+        <!ENTITY opt         "(?:[^&_fragpathseps;=/]*+&_fragpathnosep;)*+">
+        <!ENTITY assumepath  "/&path;|(?=[*?#^~([]|&lt;[0-9]*-[0-9]*>)">
+        <!ENTITY pathpart    "(?:~(?:/&path;|(?=[&wordseps;]|$))|&fragpath;(?:&assumepath;|(?=&fragpathesc;&assumepath;))|\.\.?(?=[&wordseps;]|$))">
+
+        <!ENTITY _braceexpansion_spe     " &tab;&lt;>|&amp;;{}\\`'&quot;$">
+        <!ENTITY _brace_noexpansion      "\{[^&_braceexpansion_spe;,]*+\}">
+        <!ENTITY _braceexpansion_var     "\$(?:\{[^\[\]&_braceexpansion_spe;]*+(?:\[[*@a-zA-Z0-9]\])\})?">
+        <!ENTITY _braceexpansion_string  "'[^']*'|&quot;([^&quot;\`]*+|`[^`]*`)*+&quot;">
+        <!ENTITY _braceexpansion_elems   "\\.|`[^`]*`|&_braceexpansion_string;|&_braceexpansion_var;|&_brace_noexpansion;">
+        <!ENTITY _braceexpansion_consume "&_braceexpansion_elems;|{(?:[^&_braceexpansion_spe;,]++|&_braceexpansion_elems;)*?}|(?R)?+">
+        <!ENTITY _braceexpansion "(?:[^&_braceexpansion_spe;,]++|&_braceexpansion_consume;)*?,(?:[^&_braceexpansion_spe;]++|&_braceexpansion_consume;)*?}">
+        <!ENTITY braceexpansion "{&_braceexpansion;">
+
+        <!ENTITY _bracerangevar "\$([#+^=~]*([_a-zA-Z0-9]+|[*@#])(\[((\$[#+^=~]*)?([-+_a-zA-Z0-9]+|[*@])|$#)\])?|#|'(\\.|[^'\\])')">
+        <!ENTITY _bracerangeoperand "-?([0-9]+|[a-zA-Z!#$&#37;*+,-./:=?@^_~]|&_bracerangevar;|\\.|'[^'\\]'|&quot;(\\.|[^&quot;\\`])&quot;|`[^`]*`)">
+        <!ENTITY bracerangeexpansion "{(?=&_bracerangeoperand;\.\.&_bracerangeoperand;(\.\.-?([0-9]+|&_bracerangevar;))?})">
+
+        <!ENTITY nobraceexpansion "(?:{([^&_braceexpansion_spe;/{},]++|(?R))+?})+">
+        <!ENTITY nogroupend "(?:}+(?:[^&_fragpathseps;]|(?=[}$'&quot;`\\])))">
+
+        <!-- glob with |, ( or spaces is a pattern -->
+        <!ENTITY _ispattern_ugN "[ug][0123456789]+">
+        <!ENTITY _ispattern_ugeP "[ugeP](?:&_ispattern_ugeP_0;|&_ispattern_ugeP_1;|&_ispattern_ugeP_2;|&_ispattern_ugeP_3;|&_ispattern_ugeP_4;|(?=\|))">
+        <!ENTITY _ispattern_ugeP_0    ":(?:[^:'`&quot;\\|()]*+(?:&_ispattern_q;)?)*(?::|(?=[|()]))">
+        <!ENTITY _ispattern_ugeP_1   "\[(?:[^]'`&quot;\\|()]*+(?:&_ispattern_q;)?)*(?:\](?=[|()]))">
+        <!ENTITY _ispattern_ugeP_2    "{(?:[^}'`&quot;\\|()]*+(?:&_ispattern_q;)?)*(?:}(?=[|()]))">
+        <!ENTITY _ispattern_ugeP_3 "&lt;(?:[^>'`&quot;\\|()]*+(?:&_ispattern_q;)?)*(?:>|(?=[|()]))">
+        <!ENTITY _ispattern_ugeP_4  "([^&wordseps;{}'&quot;`\\])(?:(?:(?!\1)[^'`&quot;\\\1|()])*+(?:&_ispattern_q;)?)*(?:\1|(?=[|()]))">
+        <!ENTITY _ispattern_dq "&quot;(?:[^&quot;\\`]*+(?:`[^`]`|\\.)?)*&quot;">
+        <!ENTITY _ispattern_q "\\.|'[^']*'|`[^`]`|&_ispattern_dq;">
+        <!ENTITY _ispattern_check "(?:\)(?:[^ &tab;}&lt;>|&amp;;)]|&nogroupend;)|[ &tab;|(]|$)">
+        <!ENTITY ispattern "(?:[^ &tab;\\'&quot;|()`ugeP]*+(?:&_ispattern_ugN;|&_ispattern_ugeP;|&_ispattern_q;)?)*&_ispattern_check;">
+
+        <!ENTITY heredocq "(?|&quot;([^&quot;]+)&quot;|'([^']+)'|\\(.[^&wordseps;&substseps;]*))">
+
+        <!ENTITY arithmetic_as_subshell "\(((?:[^`'&quot;()$]++|\$\{[^`'&quot;(){}$]+\}|\$(?=[^{`'&quot;()])|`[^`]*+`|\((?1)(?:[)]|(?=['&quot;])))++)(?:[)](?=$|[^)])|[&quot;'])">
+
+        <!ENTITY int "(?:[0-9]++[_0-9]*+)">
+        <!ENTITY exp "(?:[eE][-+]?&int;)">
+]>
+<language name="Zsh" version="22" 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>
+      <item>break</item>
+      <item>case</item>
+      <item>do</item>
+      <item>done</item>
+      <item>elif</item>
+      <item>else</item>
+      <item>end</item>
+      <item>esac</item>
+      <item>fi</item>
+      <item>for</item>
+      <item>foreach</item>
+      <item>function</item>
+      <item>if</item>
+      <item>in</item>
+      <item>repeat</item>
+      <item>return</item>
+      <item>select</item>
+      <item>then</item>
+      <item>until</item>
+      <item>while</item>
+    </list>
+
+<list name="builtins"><!-- see man zshbuiltins -->
+	<item>-</item>
+	<item>.</item>
+	<item>:</item>
+	<item>alias</item>
+	<item>autoload</item>
+	<item>bg</item>
+	<item>bindkey</item>
+	<item>builtin</item>
+	<item>bye</item>
+	<item>cap</item>
+	<item>cd</item>
+	<item>chdir</item>
+	<item>clone</item>
+	<item>command</item>
+	<item>comparguments</item>
+	<item>compcall</item>
+	<item>compctl</item>
+	<item>compdescribe</item>
+	<item>compfiles</item>
+	<item>compgroups</item>
+	<item>compquote</item>
+	<item>comptags</item>
+	<item>comptry</item>
+	<item>compvalues</item>
+	<item>coproc</item>
+	<item>dirs</item>
+	<item>disable</item>
+	<item>disown</item>
+	<item>echo</item>
+	<item>echotc</item>
+	<item>echoti</item>
+	<item>emulate</item>
+	<item>enable</item>
+	<item>eval</item>
+	<item>exec</item>
+	<item>exit</item>
+	<item>false</item>
+	<item>fc</item>
+	<item>fg</item>
+	<item>functions</item>
+	<item>getcap</item>
+	<item>hash</item>
+	<item>history</item>
+	<item>jobs</item>
+	<item>kill</item>
+	<item>limit</item>
+	<item>log</item>
+	<item>logout</item>
+	<item>nocorrect</item>
+	<item>noglob</item>
+	<item>popd</item>
+	<item>print</item>
+	<item>printf</item>
+	<item>pushd</item>
+	<item>pushln</item>
+	<item>pwd</item>
+	<item>r</item>
+	<item>rehash</item>
+	<item>sched</item>
+	<item>set</item>
+	<item>setcap</item>
+	<item>setopt</item>
+	<item>shift</item>
+	<item>source</item>
+	<item>stat</item>
+	<item>suspend</item>
+	<item>test</item>
+	<item>times</item>
+	<item>trap</item>
+	<item>true</item>
+	<item>ttyctl</item>
+	<item>type</item>
+	<item>ulimit</item>
+	<item>umask</item>
+	<item>unalias</item>
+	<item>unfunction</item>
+	<item>unhash</item>
+	<item>unlimit</item>
+	<item>unset</item>
+	<item>unsetopt</item>
+	<item>vared</item>
+	<item>wait</item>
+	<item>whence</item>
+	<item>where</item>
+	<item>which</item>
+	<item>zcompile</item>
+	<item>zformat</item>
+	<item>zftp</item>
+	<item>zle</item>
+	<item>zmodload</item>
+	<item>zparseopts</item>
+	<item>zprof</item>
+	<item>zpty</item>
+	<item>zregexparse</item>
+	<item>zsocket</item>
+	<item>zstyle</item>
+	<item>ztcp</item>
+    </list>
+
+    <list name="builtins_var">
+	<item>declare</item>
+	<item>export</item>
+	<item>float</item>
+	<item>getln</item>
+	<item>getopts</item>
+	<item>integer</item>
+	<item>let</item>
+	<item>local</item>
+	<item>read</item>
+	<item>readonly</item>
+	<item>typeset</item>
+	<item>unset</item>
+    </list>
+
+    <list name="unixcommands">
+      <include>unixcommands##Bash</include>
+    </list>
+
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Start" fallthroughContext="Command">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Comment" context="Comment" char="#"/>
+        <!-- start expression in double parentheses -->
+        <Detect2Chars context="ExprDblParenOrSubShell" char="(" char1="(" lookAhead="1"/>
+        <!-- start a subshell -->
+        <DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell"/>
+        <!-- start expression in single/double brackets -->
+        <DetectChar context="MaybeBracketExpression" char="[" lookAhead="1"/>
+        <!-- start a group command or BraceExpansion with { -->
+        <DetectChar attribute="Keyword" context="Group" char="{"/>
+
+        <!-- handle ` -->
+        <DetectChar attribute="Backquote" context="CommandBackq" char="`"/>
+
+        <!-- &> redirections -->
+        <Detect2Chars attribute="Redirection" context="Prefix&amp;>" char="&amp;" char1=">"/>
+        <Detect2Chars attribute="Control" context="#stay" char="&amp;" char1="!"/>
+
+        <!-- handle branche conditions -->
+        <Detect2Chars attribute="Control" context="#stay" char="&amp;" char1="&amp;"/>
+        <Detect2Chars attribute="Control" context="#stay" char="|" char1="|"/>
+
+        <!-- handle &, |, ; -->
+        <AnyChar attribute="Control" context="#stay" String="&amp;|;"/>
+
+        <!-- handle variable assignments -->
+        <RegExpr attribute="Variable" context="VarAssign" String="&varname;(?=\+?=|\[(?:$|[^]]))|[0-9]+(?=\+?=)"/>
+        <!-- handle keywords -->
+        <keyword context="DispatchKeyword" String="keywords" lookAhead="1"/>
+        <!-- handle commands that have variable names as argument -->
+        <keyword attribute="Builtin" context="VarName" String="builtins_var" lookAhead="1"/>
+        <WordDetect attribute="Builtin" context="#stay" String="noglob"/>
+        <!-- mark function definitions without function keyword -->
+        <RegExpr attribute="Function" context="#stay" String="&funcname;[ &tab;]*\(\)"/>
+        <keyword attribute="Builtin" context="CommandArgs" String="builtins"/>
+        <keyword attribute="Command" context="CommandArgs" String="unixcommands"/>
+
+        <!-- handle redirection -->
+        <AnyChar context="CommandMaybeRedirection" String="&lt;&gt;0123456789" lookAhead="1"/>
+
+        <DetectChar attribute="Error" context="#stay" char=")"/>
+        <DetectChar context="MaybeGroupEnd" char="}" lookAhead="1"/>
+
+        <LineContinue attribute="Escape" context="#stay"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="MaybeGroupEnd">
+        <RegExpr context="#pop!Command" String="&nogroupend;" lookAhead="1"/>
+        <DetectChar attribute="Error" context="#pop" char="}"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="MaybeBracketExpression" fallthroughContext="#pop!Command">
+        <!-- start expression in double brackets -->
+        <RegExpr attribute="Keyword" context="#pop!ExprDblBracket" String="\[\[(?=$|[ &tab;(])" beginRegion="expression"/>
+        <!-- start expression in single brackets -->
+        <RegExpr attribute="Builtin" context="#pop!ExprBracket" String="\[&eos;" beginRegion="expression"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="CommandMaybeRedirection" fallthroughContext="#pop!Command">
+        <IncludeRules context="FindRedirection"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="Return" fallthroughContext="#pop">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <Int attribute="Number" context="#stay"/>
+      </context>
+      <!-- Comment consumes shell comments till EOL -->
+      <context attribute="Comment" lineEndContext="#pop" name="Comment">
+        <DetectSpaces attribute="Comment"/>
+        <IncludeRules context="##Comments"/>
+        <DetectIdentifier attribute="Comment" context="#stay"/>
+      </context>
+
+      <!-- Group is called after a { is encountered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="Group" fallthroughContext="Command">
+        <DetectChar attribute="Keyword" context="#pop!GroupEnd" char="}"/>
+        <IncludeRules context="Start"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="GroupEnd" fallthroughContext="#pop!CommandArgs">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <WordDetect attribute="Control Flow" context="#pop" String="always"/>
+      </context>
+
+      <context attribute="OtherCommand" lineEndContext="#pop" name="Command">
+        <DetectSpaces attribute="Normal Text" context="#pop!CommandArgs"/>
+        <DetectIdentifier attribute="OtherCommand" context="#stay"/>
+        <DetectChar context="CommandVariables" char="$" lookAhead="1"/>
+        <IncludeRules context="FindStrings"/>
+        <Detect2Chars attribute="Control" context="#pop" char="&amp;" char1="&amp;"/>
+        <Detect2Chars attribute="Control" context="#pop" char="|" char1="|"/>
+        <DetectChar attribute="Control" context="#pop" char="|"/>
+        <AnyChar context="#pop" String=";)`" lookAhead="1"/>
+        <AnyChar context="#pop!CommandArgs" String="&amp;&lt;>" lookAhead="1"/>
+        <!-- start expression in double parentheses -->
+        <Detect2Chars attribute="Error" context="#pop!ExprDblParen" char="(" char1="(" beginRegion="expression"/>
+        <!-- start a subshell -->
+        <DetectChar attribute="Error" context="#pop!SubShell" char="(" beginRegion="subshell"/>
+        <DetectChar context="CommandAssumeEscape" char="\" lookAhead="1"/>
+        <DetectChar context="CommandMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar context="CommandMaybeGroupEnd" char="}" lookAhead="1"/>
+      </context>
+      <context attribute="Command" lineEndContext="#pop" name="CommandVariables">
+        <IncludeRules context="DispatchVariables"/>
+        <DetectChar attribute="OtherCommand" context="#pop" char="$"/>
+      </context>
+      <context attribute="OtherCommand" lineEndContext="#pop" name="CommandAssumeEscape">
+        <LineContinue attribute="Escape" context="#pop"/>
+        <RegExpr attribute="OtherCommand" context="#pop" String="\\."/>
+      </context>
+      <context attribute="OtherCommand" lineEndContext="#pop" name="CommandMaybeBraceExpansion">
+        <IncludeRules context="DispatchBraceExpansion"/>
+        <DetectChar attribute="OtherCommand" context="#pop" char="{"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="CommandMaybeGroupEnd">
+        <RegExpr attribute="OtherCommand" context="#pop" String="&nogroupend;+"/>
+        <DetectChar context="#pop#pop" char="}" lookAhead="1"/>
+      </context>
+
+      <context attribute="Variable" lineEndContext="#pop" name="DispatchVariables">
+        <IncludeRules context="DispatchSubstVariables"/>
+        <IncludeRules context="DispatchStringVariables"/>
+        <IncludeRules context="DispatchVarNameVariables"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#pop" name="DispatchSubstVariables">
+        <Detect2Chars attribute="Parameter Expansion" context="#pop!VarBraceStart" char="$" char1="{"/>
+        <StringDetect context="#pop!ExprDblParenSubstOrSubstCommand" String="$((" lookAhead="1"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop!SubstCommand" char="$" char1="(" beginRegion="subshell"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#pop" name="DispatchStringVariables">
+        <Detect2Chars attribute="String SingleQ" context="#pop!StringEsc" char="$" char1="'"/>
+        <Detect2Chars attribute="String Transl." context="#pop!StringDQ" char="$" char1="&quot;"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#pop" name="DispatchVarNameVariables">
+        <Detect2Chars context="#pop!VarNameSpe" char="$" char1="#" lookAhead="1"/>
+        <RegExpr attribute="Variable" context="#pop!AfterVarName" String="\$(?:&varname;|[0-9]+|[-*@?$!])"/>
+        <Detect2Chars context="#pop!VarNameSpe" char="$" char1="~" lookAhead="1"/>
+        <Detect2Chars context="#pop!VarNameSpe" char="$" char1="=" lookAhead="1"/>
+        <Detect2Chars context="#pop!VarNameSpe" char="$" char1="^" lookAhead="1"/>
+        <Detect2Chars context="#pop!VarNameSpe" char="$" char1="+" lookAhead="1"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#pop" name="VarNameSpe">
+        <DetectChar attribute="Variable" context="#pop!VarNameSpeParam" char="$"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#pop" name="VarNameSpeParam">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameSubstLen" char="#"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameParam+" char="+"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="#pop!VarNameParam" String="~=^"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#pop" name="VarNameSubstLen" fallthroughContext="#pop!AfterVarName">
+        <DetectIdentifier attribute="Variable" context="#pop!AfterVarName"/>
+        <AnyChar attribute="Variable" context="#pop!AfterVarName" String="-*@?$!"/>
+        <Int attribute="Variable" context="#pop!AfterVarName" additionalDeliminator="#~=^+{}[]:-/$"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#pop" name="VarNameParam" fallthroughContext="#pop!AfterVarName">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameSubstLen" char="#"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameParam+" char="+"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="^=~"/>
+        <IncludeRules context="VarNameSubstLen"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#pop" name="VarNameParam+" fallthroughContext="#pop">
+        <IncludeRules context="VarNameSubstLen"/>
+      </context>
+
+      <!-- called as soon as $xxx is encoutered -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="AfterVarName" fallthroughContext="#pop">
+        <DetectChar context="VarNameDispatchModifiers" char=":" lookAhead="1"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop#pop" name="VarNameDispatchModifiers" fallthroughContext="#pop#pop">
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="a"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="A"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="c"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="e"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop!VarNameModifier_h" char=":" char1="h"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="l"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="p"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="P"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="q"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="Q"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="r"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop!VarNameModifier_s" char=":" char1="s"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop!VarNameModifier_h" char=":" char1="t"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="u"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="x"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="&amp;"/>
+        <StringDetect attribute="Parameter Expansion" context="#pop!VarNameModifier_s" String=":gs"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop#pop" name="VarNameModifier_h" fallthroughContext="#pop">
+        <AnyChar attribute="Number" context="#stay" String="0123456789"/>
+      </context>
+      <context attribute="Parameter Expansion Operator" lineEndContext="#pop#pop" name="VarNameModifier_s" fallthroughContext="#pop#pop">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameModifier_s_Str" char="/"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#pop#pop" name="VarNameModifier_s_Str">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameModifier_s_Rep" char="/"/>
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <DetectChar attribute="String DoubleQ" context="#pop" char="&quot;"/>
+        <DetectChar attribute="String SingleQ" context="#pop" char="'"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#pop#pop" name="VarNameModifier_s_Rep">
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="/"/>
+        <AnyChar context="#pop#pop" String=" &tab;&lt;>|&amp;;()" lookAhead="1"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="CommandBackq" fallthroughContext="Command">
+        <DetectChar attribute="Backquote" context="#pop!CommandArgs" char="`"/>
+        <DetectChar attribute="Comment" context="CommentBackq" char="#"/>
+        <IncludeRules context="Start"/>
+      </context>
+      <!-- CommentBackq consumes shell comments till EOL or a backquote -->
+      <context attribute="Comment" lineEndContext="#pop" name="CommentBackq">
+        <DetectChar context="#pop" char="`" lookAhead="1"/>
+        <IncludeRules context="Comment"/>
+      </context>
+
+      <!-- CommandArgs matches the items after a command -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="CommandArgs" fallthroughContext="CommandArg">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+
+        <!-- &> redirections -->
+        <Detect2Chars attribute="Redirection" context="Prefix&amp;>" char="&amp;" char1=">"/>
+
+        <!-- handle &, |, ;, ` -->
+        <AnyChar context="#pop" String="&amp;|;`" lookAhead="1"/>
+
+        <!-- handle process subst -->
+        <Detect2Chars attribute="Redirection" context="ProcessSubst" char="=" char1="("/>
+        <!-- handle redirection -->
+        <AnyChar context="CommandArgMaybeRedirection" String="&gt;&lt;0123456789" lookAhead="1"/>
+
+        <DetectChar context="#pop" char=")" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop#pop" name="CommandArg" fallthroughContext="#pop!NormalOption">
+        <!-- In command arguments, do not allow comments after escaped characters.
+             This avoids highlighting comments within paths or other text. Ex: pathtext\ #no\ comment -->
+        <DetectChar context="#pop#pop" char="#" lookAhead="1"/>
+        <Detect2Chars attribute="Option" context="#pop!LongOption" char="-" char1="-"/>
+        <DetectChar attribute="Option" context="#pop!ShortOption" char="-"/>
+        <DetectChar attribute="Keyword" context="#pop!NormalOption" char="="/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="CommandArgMaybeRedirection" fallthroughContext="#pop!NormalOption">
+        <IncludeRules context="FindRedirection"/>
+      </context>
+
+      <context attribute="Option" lineEndContext="#pop" name="ShortOption" fallthroughContext="#pop">
+        <DetectChar attribute="Path" context="PathThenPop" char="/"/>
+        <IncludeRules context="LongOption"/>
+      </context>
+      <context attribute="Option" lineEndContext="#pop" name="LongOption" fallthroughContext="#pop">
+        <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
+        <DetectChar attribute="Operator" context="#pop!NormalOption" char="="/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindSingleGlob"/>
+        <IncludeRules context="FindGlobAny"/>
+        <AnyChar context="#pop!NormalOption" String="({}&lt;" lookAhead="1"/>
+        <RegExpr attribute="Option" context="#stay" String="&opt;"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="NormalOption" fallthroughContext="#pop">
+        <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+        <DetectChar attribute="Glob" context="PathThenPop" char="[" lookAhead="1"/>
+        <DetectChar context="ExprGlobParenThenPath" char="(" lookAhead="1"/>
+        <IncludeRules context="FindPathThenPop"/>
+        <DetectChar context="NormalOptionMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
+        <IncludeRules context="FindNormalTextOption"/>
+        <DetectChar context="MaybeGlobRangeOrPop" char="&lt;" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop#pop" name="NormalOptionRecBrace">
+        <AnyChar context="#pop#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindSingleGlob"/>
+        <IncludeRules context="FindGlobAny"/>
+        <DetectChar context="ExprGlobParen" char="(" lookAhead="1"/>
+        <DetectChar context="NormalOptionMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar attribute="Normal Text" context="#pop" char="}"/>
+        <DetectChar context="MaybeGlobRangeOrPop" char="&lt;" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="NormalOptionMaybeGroupEnd">
+        <IncludeRules context="FindNoGroupEndThenPop"/>
+        <DetectChar context="#pop#pop#pop" char="}" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindNoGroupEndThenPop">
+        <RegExpr context="#pop" String="&nogroupend;"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindNormalTextOption">
+        <RegExpr attribute="Normal Text" context="#stay" String="([^[&wordseps;&substseps;]+|&nogroupend;)+"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="NormalOptionMaybeBraceExpansion">
+        <IncludeRules context="DispatchBraceExpansion"/>
+        <DetectChar attribute="Normal Text" context="#pop!NormalOptionRecBrace" char="{"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="AssumeEscape">
+        <LineContinue attribute="Escape" context="#pop"/>
+        <RegExpr attribute="Escape" context="#pop" String="\\."/>
+      </context>
+
+<!-- ====== The following rulessets are meant to be included ======== -->
+
+      <!-- FindRedirection consumes shell redirection -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindRedirection">
+        <RegExpr attribute="File Descriptor" context="#pop!AssumeRedirection" String="[0-9]++(?=[&lt;>])"/>
+        <IncludeRules context="AssumeRedirection"/>
+      </context>
+
+      <!-- DispatchBraceExpansion consumes brace expansions -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="DispatchBraceExpansion">
+        <RegExpr context="#pop!BraceExpansion" String="&braceexpansion;" lookAhead="1"/>
+        <IncludeRules context="IncBraceExpansion"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="DispatchPathBraceExpansion">
+        <RegExpr context="#pop!PathBraceExpansion" String="&braceexpansion;" lookAhead="1"/>
+        <IncludeRules context="IncBraceExpansion"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="IncBraceExpansion">
+        <RegExpr attribute="Escape" context="#pop!SequenceExpression" String="&bracerangeexpansion;"/>
+        <RegExpr context="#pop" String="&nobraceexpansion;"/>
+      </context>
+
+      <!-- FindPathThenPop consumes path -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindPathThenPop">
+        <AnyChar attribute="Glob" context="PathThenPop" String="?*#^"/>
+        <RegExpr attribute="Path" context="PathThenPop" String="&pathpart;"/>
+        <DetectChar attribute="Glob" context="PathThenPop" char="~"/>
+      </context>
+      <context attribute="Path" lineEndContext="#pop#pop" name="IncPath">
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindSingleGlob"/>
+        <IncludeRules context="FindGlobAny"/>
+        <DetectChar context="ExprGlobParen" char="(" lookAhead="1"/>
+        <RegExpr attribute="Path" context="#stay" String="&path;"/>
+        <DetectChar context="MaybeGlobRangeOrPop" char="&lt;" lookAhead="1"/>
+        <DetectChar context="PathMaybeBraceExpansion" char="{" lookAhead="1"/>
+      </context>
+      <context attribute="Path" lineEndContext="#pop#pop" name="PathThenPop">
+        <AnyChar context="#pop#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
+        <IncludeRules context="IncPath"/>
+        <DetectChar context="PathMaybeGroupEnd" char="}" lookAhead="1"/>
+      </context>
+      <context attribute="Path" lineEndContext="#pop" name="PathRecBrace">
+        <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
+        <IncludeRules context="IncPath"/>
+        <DetectChar attribute="Path" context="#pop" char="}"/>
+      </context>
+      <context attribute="Glob" lineEndContext="#stay" name="MaybeGlobRangeOrPop" fallthroughContext="#pop#pop">
+        <IncludeRules context="FindGlobRangeThenPop"/>
+      </context>
+      <context attribute="Path" lineEndContext="#pop" name="PathMaybeBraceExpansion">
+        <IncludeRules context="DispatchPathBraceExpansion"/>
+        <DetectChar attribute="Path" context="#pop!PathRecBrace" char="{"/>
+      </context>
+      <context attribute="Path" lineEndContext="#pop" name="PathMaybeGroupEnd">
+        <IncludeRules context="FindNoGroupEndThenPop"/>
+        <DetectChar context="#pop#pop#pop" char="}" lookAhead="1"/>
+      </context>
+      <context attribute="Glob" lineEndContext="#stay" name="FindGlobRangeThenPop">
+        <RegExpr attribute="Glob" context="#pop!InGlobRange" String="&lt;(?=[0-9]*-[0-9]*>)"/>
+      </context>
+      <context attribute="Number" lineEndContext="#stay" name="InGlobRange">
+        <AnyChar attribute="Number" context="#stay" String="0123456789"/>
+        <DetectChar attribute="Glob" context="#stay" char="-"/>
+        <DetectChar attribute="Glob" context="#pop" char=">"/>
+      </context>
+
+      <!-- FindPathThenPopInAlternateValue consumes path in ${xx:here}-->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindPathThenPopInAlternateValue">
+        <AnyChar attribute="Glob" context="PathThenPopInAlternateValue" String="?*#^~|"/>
+        <Detect2Chars context="PathThenPopInAlternateValue" char="(" char1="#" lookAhead="1"/>
+        <AnyChar context="PathThenPopInAlternateValue" String="[(" lookAhead="1"/>
+        <RegExpr attribute="Path" context="PathThenPopInAlternateValue" String="&pathpart;"/>
+      </context>
+      <context attribute="Path" lineEndContext="#pop" name="PathThenPopInAlternateValue">
+        <AnyChar context="#pop" String="&wordseps_or_extglog;}" lookAhead="1"/>
+        <IncludeRules context="IncPath"/>
+      </context>
+
+      <context attribute="Glob" lineEndContext="#stay" name="FindGlobAny">
+        <DetectChar attribute="Glob" context="GlobAnyFlag" char="["/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#pop" name="GlobAnyFlag" fallthroughContext="#pop!GlobAny">
+        <DetectChar attribute="Glob Flag" context="#pop!GlobAny" char="^"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#pop" name="GlobAny">
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <DetectChar attribute="Glob Flag" context="#stay" char="-"/>
+        <Detect2Chars attribute="Glob" context="GlobClass" char="[" char1=":"/>
+        <DetectChar attribute="Glob" context="#pop" char="]"/>
+      </context>
+      <context attribute="Glob" lineEndContext="#pop#pop" name="GlobClass">
+        <Detect2Chars attribute="Glob" context="#pop" char=":" char1="]"/>
+        <DetectChar attribute="Error" context="#pop" char="]"/>
+      </context>
+
+      <context attribute="Pattern" lineEndContext="#stay" name="FindSingleGlob">
+        <AnyChar attribute="Glob" context="#stay" String="?*#^~"/>
+      </context>
+
+      <context attribute="Pattern" lineEndContext="#stay" name="FindGlobPattern">
+        <AnyChar attribute="Glob" context="#stay" String="?*#^~|"/>
+        <IncludeRules context="FindGlobAny"/>
+        <IncludeRules context="FindGroupPattern"/>
+      </context>
+
+      <context attribute="Pattern" lineEndContext="#stay" name="FindPattern">
+        <IncludeRules context="FindGlobPattern"/>
+        <DetectChar context="GlobRangeOrError" char="&lt;" lookAhead="1"/>
+      </context>
+      <context attribute="Glob" lineEndContext="#stay" name="GlobRangeOrError">
+        <IncludeRules context="FindGlobRangeThenPop"/>
+        <DetectChar attribute="Error" context="#pop" char="&lt;"/>
+      </context>
+
+      <context attribute="Pattern" lineEndContext="#stay" name="FindSubPattern">
+        <IncludeRules context="FindGlobPattern"/>
+        <DetectChar context="GlobRangeOrPattern" char="&lt;" lookAhead="1"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="GlobRangeOrPattern">
+        <IncludeRules context="FindGlobRangeThenPop"/>
+        <DetectChar attribute="Pattern" context="#pop" char="&lt;"/>
+      </context>
+
+      <context attribute="Pattern" lineEndContext="#stay" name="FindStringDQPattern">
+        <IncludeRules context="FindGlobPattern"/>
+        <DetectChar context="GlobRangeOrStringDQ" char="&lt;" lookAhead="1"/>
+      </context>
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="GlobRangeOrStringDQ">
+        <IncludeRules context="FindGlobRangeThenPop"/>
+        <DetectChar attribute="String DoubleQ" context="#pop" char="&lt;"/>
+      </context>
+
+      <context attribute="Glob Flag" lineEndContext="#stay" name="FindGroupPattern">
+        <Detect2Chars attribute="Glob Flag" context="GlobPatFlag" char="(" char1="#"/>
+        <DetectChar attribute="Glob" context="ExtGlobPattern" char="("/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="ExtGlobPattern">
+        <DetectChar attribute="Glob" context="#pop" char=")"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindSubPattern"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="ExtGlobPatternThenPath">
+        <DetectChar attribute="Glob" context="#pop!PathThenPop" char=")"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindSubPattern"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="VarAssign" fallthroughContext="#pop">
+        <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
+        <DetectChar attribute="Operator" context="#pop!Assign" char="="/>
+        <Detect2Chars attribute="Operator" context="#pop!Assign" char="+" char1="="/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="DispatchKeyword">
+        <!-- match do and if blocks -->
+        <Detect2Chars attribute="Control Flow" context="#pop!NotCond" char="i" char1="f" beginRegion="if"/>
+        <Detect2Chars attribute="Control Flow" context="#pop" char="f" char1="i" endRegion="if"/>
+        <StringDetect attribute="Control Flow" context="#pop" String="done" endRegion="do"/>
+        <Detect2Chars attribute="Control Flow" context="#pop" char="d" char1="o" beginRegion="do"/>
+        <!-- handle while/until as a special case -->
+        <StringDetect attribute="Control Flow" context="#pop!NotCond" String="while"/>
+        <StringDetect attribute="Control Flow" context="#pop!NotCond" String="until"/>
+        <!-- handle for as a special case -->
+        <StringDetect attribute="Control Flow" context="#pop!Foreach" String="foreach"/>
+        <StringDetect attribute="Control Flow" context="#pop!For" String="for"/>
+        <!-- handle select as a special case -->
+        <StringDetect attribute="Control Flow" context="#pop!Select" String="select"/>
+        <StringDetect attribute="Control Flow" context="#pop!Repeat" String="repeat"/>
+        <!-- handle case as a special case -->
+        <StringDetect attribute="Control Flow" context="#pop!Case" String="case" beginRegion="case"/>
+        <!-- handle functions with function keyword before keywords -->
+        <StringDetect attribute="Keyword" context="#pop!FunctionDef" String="function"/>
+        <StringDetect attribute="Control Flow" context="#pop!Return" String="return"/>
+        <!-- not a keyword in this context -->
+        <Detect2Chars attribute="Error" context="#pop" char="i" char1="n"/>
+        <StringDetect attribute="Error" context="#pop" String="esac"/>
+        <!-- handle keywords -->
+        <DetectIdentifier attribute="Control Flow" context="#pop"/>
+      </context>
+
+      <!-- if ! ... and while ! ... -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="NotCond" fallthroughContext="#pop">
+        <DetectSpaces attribute="Normal Text" context="#pop!NotCond2"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="NotCond2" fallthroughContext="#pop">
+        <Detect2Chars attribute="Expression" context="#pop" char="!" char1="&tab;"/>
+        <Detect2Chars attribute="Expression" context="#pop" char="!" char1=" "/>
+        <LineContinue attribute="Expression" context="#pop" char="!"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="Foreach" fallthroughContext="#pop">
+        <LineContinue attribute="Escape" context="#stay"/>
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectIdentifier attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Keyword" context="#pop!ForeachWord" char="("/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="ForeachWord" fallthroughContext="NormalOption">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Control" context="#stay" char=";"/>
+        <DetectChar attribute="Keyword" context="#pop" char=")"/>
+        <DetectChar attribute="Backquote" context="CommandBackq" char="`"/>
+        <AnyChar attribute="Control" context="#stay" String="&symbolseps;"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="For" fallthroughContext="#pop">
+        <LineContinue attribute="Escape" context="#stay"/>
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <WordDetect attribute="Keyword" context="#pop!CommandArgs" String="in"/>
+        <DetectIdentifier attribute="Normal Text" context="#stay"/>
+        <Detect2Chars attribute="Keyword" context="#pop!ForArithmeticExpr" char="(" char1="("/>
+        <DetectChar attribute="Keyword" context="#pop!ForeachWord" char="("/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="ForArithmeticExpr">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Control" context="#stay" char=";"/>
+        <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="Select" fallthroughContext="#pop">
+        <LineContinue attribute="Escape" context="#stay"/>
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectIdentifier attribute="Normal Text" context="#pop!SelectIn"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="SelectIn" fallthroughContext="#pop">
+        <LineContinue attribute="Escape" context="#stay"/>
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <WordDetect attribute="Keyword" context="#pop!CommandArgs" String="in"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="Repeat" fallthroughContext="#pop!RepeatArithmeticExpr">
+        <LineContinue attribute="Escape" context="#stay"/>
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="RepeatArithmeticExpr">
+        <DetectSpaces attribute="Normal Text" context="#pop"/>
+        <DetectChar attribute="Control" context="#pop" char=";"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+
+      <!-- &> and &>> redirection -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="Prefix&amp;>" fallthroughContext="#pop!FdRedirection">
+        <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1="|"/>
+        <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1="!"/>
+        <AnyChar attribute="Redirection" context="#pop!WordRedirection" String=">|!"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="AssumeRedirection">
+        <!-- handle output redirection -->
+        <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">>|"/>
+        <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">>!"/>
+        <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">>&amp;|"/>
+        <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">>&amp;!"/>
+        <StringDetect attribute="Redirection" context="#pop!ProcessSubst" String=">>("/>
+        <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1=">"/>
+        <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1="|"/>
+        <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1="!"/>
+        <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">&amp;|"/>
+        <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">&amp;!"/>
+        <Detect2Chars attribute="Redirection" context="#pop!FdRedirection" char=">" char1="&amp;"/>
+        <Detect2Chars attribute="Redirection" context="#pop!ProcessSubst" char=">" char1="("/>
+        <DetectChar attribute="Redirection" context="#pop!WordRedirection" char=">"/>
+        <!-- handle input redirection -->
+        <Detect2Chars attribute="Redirection" context="#pop!ProcessSubst" char="&lt;" char1="("/>
+        <StringDetect attribute="Redirection" context="#pop!ProcessSubst" String="&lt;&lt;("/>
+        <StringDetect attribute="Redirection" context="#pop!StringRedirection" String="&lt;&lt;&lt;"/>
+        <!-- handle here document -->
+        <Detect2Chars context="#pop!HereDoc" char="&lt;" char1="&lt;" lookAhead="1"/>
+        <Detect2Chars attribute="Redirection" context="#pop!FdRedirection" char="&lt;" char1="&amp;"/>
+        <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char="&lt;" char1=">"/>
+        <IncludeRules context="FindGlobRangeThenPop"/>
+        <DetectChar attribute="Redirection" context="#pop!WordRedirection" char="&lt;"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="FdRedirection" fallthroughContext="#pop!FdRedirection2">
+        <DetectSpaces attribute="Normal Text" context="#pop!FdRedirection2"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="FdRedirection2" fallthroughContext="#pop!WordRedirection2">
+        <RegExpr attribute="File Descriptor" context="#pop!CloseFile" String="[0-9]+(?=-?&eoexpr;)"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="WordRedirection" fallthroughContext="#pop!WordRedirection2">
+        <DetectSpaces attribute="Normal Text" context="#pop!WordRedirection2"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="WordRedirection2" fallthroughContext="#pop">
+        <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+        <RegExpr attribute="Path" context="PathThenPop" String="&path;"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="StringRedirection" fallthroughContext="#pop!StringRedirection2">
+        <DetectSpaces attribute="Normal Text" context="#pop!StringRedirection2"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="StringRedirection2">
+        <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="CloseFile" fallthroughContext="#pop">
+        <DetectChar attribute="Keyword" context="#pop" char="-"/>
+      </context>
+
+      <!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDoc">
+        <RegExpr attribute="Redirection" context="HereDocIQ"  String="&lt;&lt;-[ &tab;]*&heredocq;(?=[ &tab;]*$)"/>
+        <RegExpr attribute="Redirection" context="HereDocINQ" String="&lt;&lt;-[ &tab;]*([^&wordseps;]+)(?=[ &tab;]*$)"/>
+        <RegExpr attribute="Redirection" context="HereDocQ"   String="&lt;&lt;[ &tab;]*&heredocq;(?=[ &tab;]*$)"/>
+        <RegExpr attribute="Redirection" context="HereDocNQ"  String="&lt;&lt;[ &tab;]*([^&wordseps;]+)(?=[ &tab;]*$)"/>
+
+        <RegExpr context="HereDocIQCmd"  String="(&lt;&lt;-[ &tab;]*&heredocq;)" lookAhead="1"/>
+        <RegExpr context="HereDocINQCmd" String="(&lt;&lt;-[ &tab;]*([^&wordseps;]+))" lookAhead="1"/>
+        <RegExpr context="HereDocQCmd"   String="(&lt;&lt;[ &tab;]*&heredocq;)" lookAhead="1"/>
+        <RegExpr context="HereDocNQCmd"  String="(&lt;&lt;[ &tab;]*([^&wordseps;]+))" lookAhead="1"/>
+
+        <Detect2Chars attribute="Redirection" context="#pop"  char="&lt;" char1="&lt;"/><!-- always met -->
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder" fallthroughContext="Command">
+        <IncludeRules context="Start"/>
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#stay" name="HereDocQ" dynamic="1" fallthroughContext="HereDocText">
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^%1$" dynamic="1" column="0"/>
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#stay" name="HereDocNQ" dynamic="1" fallthroughContext="HereDocSubstitutions">
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^%1$" dynamic="1" column="0"/>
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#stay" name="HereDocIQ" dynamic="1" fallthroughContext="HereDocText">
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%1$" dynamic="1" column="0"/>
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#stay" name="HereDocINQ" dynamic="1" fallthroughContext="HereDocSubstitutions">
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%1$" dynamic="1" column="0"/>
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#stay" name="HereDocQCmd" dynamic="1" fallthroughContext="HereDocText">
+        <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="1"/>
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^%2$" dynamic="1" column="0"/>
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#stay" name="HereDocNQCmd" dynamic="1" fallthroughContext="HereDocSubstitutions">
+        <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="1"/>
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^%2$" dynamic="1" column="0"/>
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#stay" name="HereDocIQCmd" dynamic="1" fallthroughContext="HereDocText">
+        <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="1"/>
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2$" dynamic="1" column="0"/>
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#stay" name="HereDocINQCmd" dynamic="1" fallthroughContext="HereDocSubstitutions">
+        <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="1"/>
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2$" dynamic="1" column="0"/>
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#pop" name="HereDocText">
+      </context>
+
+      <context attribute="Here Doc" lineEndContext="#pop" name="HereDocSubstitutions">
+        <DetectChar context="HereDocVariables" char="$" lookAhead="1"/>
+        <DetectChar attribute="Backquote" context="CommandBackq" char="`"/>
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+      </context>
+      <context attribute="Here Doc" lineEndContext="#pop" name="HereDocVariables">
+        <IncludeRules context="DispatchSubstVariables"/>
+        <IncludeRules context="DispatchVarNameVariables"/>
+        <DetectChar attribute="Here Doc" context="#pop" char="$"/>
+      </context>
+
+      <!-- VarName consumes spare variable names and assignments -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="VarName">
+        <StringDetect attribute="Builtin" context="#pop!BuiltinGetopts" String="getopts"/>
+        <StringDetect attribute="Builtin" context="#pop!BuiltinLet" String="let"/>
+        <DetectIdentifier attribute="Builtin" context="#pop!VarNameArgs"/>
+        <AnyChar attribute="Builtin" context="#pop!VarNameArgs" String=".:-"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="VarNameArgs" fallthroughContext="#pop!CommandArgs">
+        <DetectSpaces attribute="Normal Text" context="VarNameArg"/>
+        <LineContinue attribute="Escape" context="#stay"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop#pop" name="VarNameArg" fallthroughContext="#pop!VarNameArg2">
+        <!-- In command arguments, do not allow comments after escaped characters.
+             This avoids highlighting comments within paths or other text. Ex: pathtext\ #no\ comment -->
+        <DetectChar context="#pop#pop" char="#" lookAhead="1"/>
+        <AnyChar attribute="Option" context="#pop!ShortOption" String="-+"/>
+        <DetectChar attribute="Keyword" context="#pop!VarNameArg2" char="="/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="VarNameArg2" fallthroughContext="#pop!NormalOption">
+        <DetectChar attribute="Variable" context="Subscript" char="["/>
+        <DetectChar attribute="Operator" context="Assign" char="="/>
+        <DetectChar attribute="Variable" context="AssignArray" char="("/>
+        <DetectIdentifier attribute="Variable" context="#stay"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetopts" fallthroughContext="#pop!CommandArgs">
+        <DetectSpaces attribute="Normal Text" context="#pop!BuiltinGetoptsOpt"/>
+        <LineContinue attribute="Escape" context="#stay"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop#pop" name="BuiltinGetoptsOpt" fallthroughContext="#pop!BuiltinGetoptsOpt2">
+        <DetectChar context="#pop#pop" char="#" lookAhead="1"/>
+        <DetectChar attribute="Keyword" context="#pop!NormalOption" char="="/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetoptsOpt2" fallthroughContext="#pop!NormalOption">
+        <DetectChar attribute="Operator" context="#stay" char=":"/>
+        <DetectIdentifier attribute="Normal Text" context="#stay" />
+        <DetectSpaces attribute="Normal Text" context="#pop!BuiltinGetoptsVar"/>
+        <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+        <DetectChar context="NormalOptionMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
+        <AnyChar attribute="Normal Text" context="#stay" String="/%.0123456789"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetoptsVar" fallthroughContext="#pop!CommandArgs">
+        <DetectIdentifier attribute="Variable" context="#pop!CommandArgs"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLet" fallthroughContext="#pop!CommandArgs">
+        <DetectSpaces attribute="Normal Text" context="#pop!BuiltinLetArgs"/>
+        <LineContinue attribute="Escape" context="#stay"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetArgs" fallthroughContext="BuiltinLetArg">
+        <AnyChar context="BuiltinLetArgsNumber" String="0123456789" lookAhead="1"/>
+        <IncludeRules context="CommandArgs"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetArgsNumber" fallthroughContext="#pop!BuiltinLetArg">
+        <IncludeRules context="FindRedirection"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop#pop" name="BuiltinLetArg" fallthroughContext="#pop!BuiltinLetExpr">
+        <DetectChar context="#pop#pop" char="#" lookAhead="1"/>
+        <DetectChar attribute="Keyword" context="#pop!NormalOption" char="="/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetExpr" fallthroughContext="#pop!NormalOption">
+        <DetectIdentifier attribute="Variable" context="#stay" />
+        <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
+        <AnyChar attribute="Operator" context="#stay" String="+-!%=^:"/>
+        <AnyChar context="Number" String="0123456789." lookAhead="1"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
+        <IncludeRules context="FindWord"/>
+        <Detect2Chars attribute="BaseN" context="NoPrefix" char="#" char1="#"/>
+        <DetectChar attribute="Error" context="#stay" char="#"/>
+        <DetectChar context="NormalOptionMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
+      </context>
+
+      <!-- ProcessSubst handles <(command) and >(command) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst" fallthroughContext="Command">
+        <DetectChar attribute="Redirection" context="#pop" char=")"/>
+        <IncludeRules context="Start"/>
+      </context>
+
+      <!-- StringSQ consumes anything till ' -->
+      <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ">
+        <DetectChar attribute="String SingleQ" context="#pop" char="'"/>
+      </context>
+
+      <!-- StringDQ consumes anything till ", substitutes vars and expressions -->
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ">
+        <DetectChar attribute="String DoubleQ" context="#pop" char="&quot;"/>
+        <DetectChar context="StringDQEscape" char="\" lookAhead="1"/>
+        <DetectChar context="StringDQDispatchVariables" char="$" lookAhead="1"/>
+        <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
+      </context>
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQDispatchVariables">
+        <IncludeRules context="DispatchSubstVariables"/>
+        <IncludeRules context="DispatchVarNameVariables"/>
+        <DetectChar attribute="String DoubleQ" context="#pop" char="$"/>
+      </context>
+      <context attribute="String DoubleQ" lineEndContext="#pop" name="StringDQEscape">
+        <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="&quot;"/>
+        <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="\"/>
+        <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="`"/>
+        <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="$"/>
+        <LineContinue attribute="String Escape" context="#pop"/>
+        <DetectChar attribute="String DoubleQ" context="#pop" char="\"/>
+      </context>
+
+      <!-- RegularBackq consumes anything till ` -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="RegularBackq" fallthroughContext="Command">
+        <DetectChar attribute="Backquote" context="#pop" char="`"/>
+        <DetectChar attribute="Comment" context="CommentBackq" char="#"/>
+        <IncludeRules context="Start"/>
+      </context>
+
+      <!-- StringEsc eats till ', but escaping many characters -->
+      <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
+        <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.)"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindWord">
+        <IncludeRules context="FindStrings"/>
+        <DetectChar context="RegularVariable" char="$" lookAhead="1"/>
+        <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="RegularVariable">
+        <IncludeRules context="DispatchVariables"/>
+        <DetectChar attribute="Normal Text" context="#pop" char="$"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindStrings">
+        <DetectChar attribute="String SingleQ" context="StringSQ" char="'"/>
+        <DetectChar attribute="String DoubleQ" context="StringDQ" char="&quot;"/>
+      </context>
+
+      <!-- SubstCommand is called after a $( is encountered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand" fallthroughContext="Command">
+        <DetectChar attribute="Parameter Expansion" context="#pop" char=")" endRegion="subshell"/>
+        <IncludeRules context="Start"/>
+      </context>
+
+      <!-- VarBraceStart is called as soon as ${ is encoutered -->
+      <context attribute="Variable" lineEndContext="#pop" name="VarBraceStart" fallthroughContext="#pop!CheckVarAlt">
+        <DetectChar attribute="Parameter Expansion" context="#pop!VarFlags" char="("/>
+        <IncludeRules context="VarFlagsVar"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#stay" name="VarBraceStartRecursive" fallthroughContext="#pop#pop!CheckVarAlt">
+        <Detect2Chars attribute="Parameter Expansion" context="VarBraceStart" char="$" char1="{"/>
+        <StringDetect context="#pop!ExprDblParenSubstOrSubstCommand" String="$((" lookAhead="1"/>
+        <Detect2Chars attribute="Parameter Expansion" context="#pop!SubstCommand" char="$" char1="(" beginRegion="subshell"/>
+        <DetectChar attribute="Error" context="#pop" char="$"/>
+      </context>
+      <context attribute="Error" lineEndContext="#stay" name="VarError">
+        <DetectChar attribute="Variable" context="#pop" char="}"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="CheckVarAlt" fallthroughContext="#pop!VarError">
+        <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
+        <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[@]"/>
+        <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[*]"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="%" char1="%"/>
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="#" char1="#"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" String="#%"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" String="-+=?"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternateValuePrefix" char=":"/>
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarBraceSubst" char="/" char1="/"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBraceSubst" char="/"/>
+      </context>
+      <context attribute="Parameter Expansion" lineEndContext="#stay" name="AlternateValuePrefix" fallthroughContext="#pop!VarSub">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="^" char1="^"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="#"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" String="-+=?|*^"/>
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="="/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBraceSubst" char="/"/>
+
+        <!-- Modifiers -->
+        <AnyChar attribute="Parameter Expansion" context="#pop!VarBraceModifiers" String="aAcehlpPqQrsg&amp;tux" lookAhead="1"/>
+      </context>
+
+      <!-- called as soon as ${xxx:y (with y a modifier) is encoutered -->
+      <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarBraceModifiers">
+        <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=":"/>
+        <AnyChar attribute="Parameter Expansion" context="VarBraceModifier_h" String="ht"/>
+        <DetectChar attribute="Parameter Expansion" context="VarBraceModifier_s" char="s"/>
+        <Detect2Chars attribute="Parameter Expansion" context="VarBraceModifier_s" char="g" char1="s"/>
+      </context>
+      <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarBraceModifier_h" fallthroughContext="#pop">
+        <AnyChar attribute="Number" context="#stay" String="0123456789"/>
+      </context>
+
+      <!-- called as soon as ${xxx:s and ${xxx:gs is encoutered -->
+      <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarBraceModifier_s">
+        <DetectChar attribute="Error" context="#pop#pop" char="}"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBraceModifier_s_Str" char="/"/>
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarBraceModifier_s_Str">
+        <DetectChar attribute="Parameter Expansion" context="#pop#pop" char="}"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBraceModifier_s_Rep" char="/"/>
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <DetectChar attribute="String SingleQ" context="RecursiveVarBraceModifier_s" char="{"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="RecursiveVarBraceModifier_s">
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <DetectChar attribute="String SingleQ" context="#pop" char="}"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarBraceModifier_s_Rep">
+        <DetectChar attribute="Parameter Expansion" context="#pop#pop" char="}"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="/"/>
+        <DetectChar attribute="String SingleQ" context="RecursiveVarBraceModifier_s" char="{"/>
+      </context>
+
+      <!-- called as soon as ${xxx: is encoutered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarSub">
+        <DetectChar attribute="Variable" context="#pop" char="}"/>
+        <AnyChar context="VarOffset" String="0123456789" lookAhead="1"/>
+        <AnyChar attribute="Operator" context="#stay" String="+-!~*/%&lt;>=&amp;^|"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=":"/>
+        <DetectChar context="VarVariables" char="$" lookAhead="1"/>
+        <IncludeRules context="FindStrings"/>
+        <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+      </context>
+      <context attribute="Command" lineEndContext="#pop" name="VarVariables">
+        <IncludeRules context="DispatchVariables"/>
+        <DetectChar attribute="Error" context="#pop" char="$"/>
+      </context>
+      <context attribute="Number" lineEndContext="#pop" name="VarOffset" fallthroughContext="#pop">
+        <Detect2Chars attribute="Hex" context="#pop!Hex" char="0" char1="x"/>
+        <Detect2Chars attribute="Hex" context="#pop!Hex" char="0" char1="X"/>
+        <AnyChar attribute="Number" context="#stay" String="0123456789_"/>
+        <DetectChar attribute="Base" context="#stay" char="#"/>
+      </context>
+
+      <!-- called as soon as ${xxx:-, etc are encoutered -->
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="AlternateValue">
+        <DetectChar attribute="String DoubleQ" context="RecursiveAlternateValue" char="{"/>
+        <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindPathThenPopInAlternateValue"/>
+      </context>
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="RecursiveAlternateValue">
+        <DetectChar attribute="String DoubleQ" context="RecursiveAlternateValue" char="{"/>
+        <DetectChar attribute="String DoubleQ" context="#pop" char="}"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindPathThenPopInAlternateValue"/>
+      </context>
+
+      <!-- called as soon as ${xxx%, etc are encoutered -->
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="AlternatePatternValue">
+        <DetectChar attribute="String DoubleQ" context="RecursiveAlternatePatternValue" char="{"/>
+        <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindStringDQPattern"/>
+      </context>
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="RecursiveAlternatePatternValue">
+        <DetectChar attribute="String DoubleQ" context="RecursiveAlternateValue" char="{"/>
+        <DetectChar attribute="String DoubleQ" context="#pop" char="}"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindStringDQPattern"/>
+      </context>
+
+      <!-- called as soon as ${xxx/ ${xxx// ${xxx:/ are encoutered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarBraceSubst" fallthroughContext="#pop!VarBraceSubstPat">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarBraceSubstPat" char="#" char1="%"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="#pop!VarBraceSubstPat" String="#%"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="VarBraceSubstPat">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="/"/>
+        <DetectChar attribute="String DoubleQ" context="RecursiveAlternateValue" char="{"/>
+        <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindSubPattern"/>
+        <DetectIdentifier attribute="Pattern" context="#stay"/>
+      </context>
+
+      <!-- called as soon as ${( is encoutered -->
+      <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarFlags">
+        <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="#q@AabcCDefFikLnoOPqQ+-tuUvVwWXz0~mSBEMNR"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_s" String="sjgZ_"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_l" String="lrI"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlagsSubs" char="p"/>
+
+        <DetectChar attribute="Parameter Expansion" context="#pop!VarFlagsVar" char=")"/>
+        <DetectChar attribute="Error" context="#pop" char="}"/>
+      </context>
+      <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarFlagsSubs">
+        <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="#q@AabcCDefFikLnoOPqQ+-tuUvVwWXz0~mSBEMNRp"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_s" String="gZ"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_ps" String="sj_"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_pl" String="lrI"/>
+
+        <DetectChar attribute="Parameter Expansion" context="#pop!VarFlagsVar" char=")"/>
+        <DetectChar attribute="Error" context="#pop" char="}"/>
+      </context>
+      <context attribute="Variable" lineEndContext="#stay" name="VarFlagsVar" fallthroughContext="#pop!CheckVarAlt">
+        <DetectChar context="VarBraceStartRecursive" char="$" lookAhead="1"/>
+        <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
+        <DetectChar attribute="String DoubleQ" context="StringDQ" char="&quot;"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="#+^=~"/>
+        <DetectIdentifier attribute="Variable" context="#pop!CheckVarAlt"/>
+        <AnyChar attribute="Variable" context="#pop!CheckVarAlt" String="*@?$!-"/>
+        <Int attribute="Variable" context="#pop!CheckVarAlt" additionalDeliminator="#~=^+{}[]:-/$"/>
+      </context>
+
+      <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarFlag_s">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_s[" char="["/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_s&lt;" char="&lt;"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_s{" char="{"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_s(" char="("/>
+        <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_sx" String="(.)"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_s[">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_s&lt;">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_s{">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_s(">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_sx">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_l[" char="["/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_l&lt;" char="&lt;"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_l{" char="{"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_l(" char="("/>
+        <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_lx" String="(.)"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l[">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_l[s" char="]" char1="["/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l&lt;">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_l&lt;s" char=">" char1="&lt;"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l{">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_l{s" char="}" char1="{"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l(">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_l(s" char=")" char1="("/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_lx">
+        <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_lxs" String="(%1)%1" dynamic="1"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_l[s">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char="]" char1="["/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_l&lt;s">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char=">" char1="&lt;"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_l{s">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char="}" char1="{"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_l(s">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char=")" char1="("/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_lxs">
+        <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="%1%1" dynamic="1"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
+      </context>
+
+      <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarFlag_ps">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_ps[" char="["/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_ps&lt;" char="&lt;"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_ps{" char="{"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_ps(" char="("/>
+        <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_psx" String="(.)"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_ps[">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
+        <RegExpr attribute="Variable" context="#stay" String="\$(&varname;|[0-9]+)(?=\])"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_ps&lt;">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
+        <RegExpr attribute="Variable" context="#stay" String="\$(&varname;|[0-9]+)(?=>)"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_ps{">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
+        <RegExpr attribute="Variable" context="#stay" String="\$(&varname;|[0-9]+)(?=})"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_ps(">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
+        <RegExpr attribute="Variable" context="#stay" String="\$(&varname;|[0-9]+)(?=\))"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_psx">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
+        <RegExpr attribute="Variable" context="#stay" String="\$(?!%1)(?:[A-Za-z_](?:(?!%1)[A-Za-z0-9_])*+|(?:(?!%1)[0-9])++)(?=%1)" dynamic="1"/>
+        <RegExpr attribute="String SingleQ" context="#stay" String="[^%1]+" dynamic="1"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl[" char="["/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl&lt;" char="&lt;"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl{" char="{"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl(" char="("/>
+        <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_plx" String="(.)"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl[">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl[s" char="]" char1="["/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl&lt;">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl&lt;s" char=">" char1="&lt;"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl{">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl{s" char="}" char1="{"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl(">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl(s" char=")" char1="("/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_plx">
+        <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_plxs" String="(%1)%1" dynamic="1"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_pl[s">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char="]" char1="["/>
+        <IncludeRules context="VarFlag_ps["/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_pl&lt;s">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char=">" char1="&lt;"/>
+        <IncludeRules context="VarFlag_ps&lt;"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_pl{s">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char="}" char1="{"/>
+        <IncludeRules context="VarFlag_ps{"/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_pl(s">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char=")" char1="("/>
+        <IncludeRules context="VarFlag_ps("/>
+      </context>
+      <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_plxs">
+        <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="%1%1" dynamic="1"/>
+        <IncludeRules context="VarFlag_psx"/>
+      </context>
+
+      <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion">
+        <DetectChar attribute="Escape" context="#pop!BraceExpansion2" char="{"/>
+      </context>
+      <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion2">
+        <DetectChar attribute="Operator" context="#stay" char=","/>
+        <DetectChar attribute="Escape" context="#pop" char="}"/>
+        <DetectChar context="EscapeMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <DetectChar attribute="Backquote" context="CommandBackq" char="`"/>
+        <DetectChar context="BraceExpansionVariables" char="$" lookAhead="1"/>
+        <IncludeRules context="FindStrings"/>
+        <IncludeRules context="FindPattern"/>
+      </context>
+      <context attribute="Escape" lineEndContext="#pop" name="EscapeMaybeBraceExpansion">
+        <IncludeRules context="DispatchBraceExpansion"/>
+        <DetectChar attribute="Escape" context="#pop!BraceExpansion2" char="{"/>
+      </context>
+      <context attribute="Escape" lineEndContext="#pop" name="BraceExpansionVariables">
+        <IncludeRules context="DispatchVariables"/>
+        <DetectChar attribute="Escape" context="#pop" char="$"/>
+      </context>
+
+      <context attribute="Escape" lineEndContext="#pop" name="PathBraceExpansion">
+        <DetectChar attribute="Escape" context="#pop!PathBraceExpansion2" char="{"/>
+      </context>
+      <context attribute="Path" lineEndContext="#pop" name="PathBraceExpansion2">
+        <DetectChar attribute="Operator" context="#stay" char=","/>
+        <DetectChar attribute="Escape" context="#pop" char="}"/>
+        <DetectChar context="PathMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindPattern"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="SequenceExpression">
+        <AnyChar attribute="Number" context="#stay" String="0123456789-"/>
+        <IncludeRules context="FindWord"/>
+        <Detect2Chars attribute="Escape" context="#stay" char="." char1="."/>
+        <DetectChar attribute="Escape" context="#pop" char="}"/>
+      </context>
+
+<!-- ====== These are the contexts that can be branched to ======= -->
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenOrSubShell">
+        <RegExpr attribute="Keyword" context="#pop!SubShell" String="\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/>
+        <Detect2Chars attribute="Keyword" context="#pop!ExprDblParen" char="(" char1="(" beginRegion="expression"/>
+      </context>
+      <!-- ExprDblParen consumes an expression started in command mode till )) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression"/>
+        <IncludeRules context="FindExprDblParen"/>
+        <!-- ((cmd
+              ) # jump to SubShell context -->
+        <DetectChar attribute="Keyword" context="#pop!SubShell" char=")" endRegion="expression" beginRegion="subshell"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindExprDblParen">
+        <Detect2Chars attribute="Control" context="#stay" char="&amp;" char1="&amp;"/>
+        <Detect2Chars attribute="Control" context="#stay" char="|" char1="|"/>
+        <AnyChar attribute="Operator" context="#stay" String="+-!~*/%&lt;>=&amp;^|?:"/>
+        <DetectChar attribute="Control" context="#stay" char=","/>
+        <DetectChar attribute="Normal Text" context="ExprSubDblParen" char="("/>
+        <AnyChar context="Number" String="0123456789." lookAhead="1"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
+        <IncludeRules context="FindWord"/>
+        <DetectChar context="MaybeArithmeticBrace" char="{" lookAhead="1"/>
+        <Detect2Chars attribute="BaseN" context="NoPrefix" char="#" char1="#"/>
+        <DetectChar attribute="Error" context="#stay" char="#"/>
+        <DetectIdentifier attribute="Variable" context="#stay"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubDblParen">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")"/>
+        <IncludeRules context="FindExprDblParen"/>
+      </context>
+      <context attribute="Error" lineEndContext="#pop" name="MaybeArithmeticBrace">
+        <IncludeRules context="DispatchBraceExpansion"/>
+        <DetectChar attribute="Error" context="#pop" char="{"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="NoPrefix" fallthroughContext="#pop">
+        <DetectChar context="AssumeEscape" char="\"/>
+        <RegExpr attribute="Number" context="#pop" String="[^][()]"/>
+      </context>
+
+      <context attribute="Number" lineEndContext="#pop" name="Number">
+        <Detect2Chars attribute="Hex" context="#pop!Hex" char="0" char1="x"/>
+        <Detect2Chars attribute="Hex" context="#pop!Hex" char="0" char1="X"/>
+        <RegExpr attribute="Base" context="#pop!BaseN" String="[1-9][0-9_]*+#"/>
+        <RegExpr attribute="Number" context="#pop" String="&int;(\.(&int;&exp;?+|&exp;)?|&exp;)?|\.&int;&exp;?"/>
+        <DetectChar attribute="Operator" context="#pop" char="."/>
+      </context>
+      <context attribute="Hex" lineEndContext="#pop" name="Hex" fallthroughContext="#pop">
+        <RegExpr attribute="Hex" context="#pop" String="[0-9a-fA-F_]+"/>
+      </context>
+      <context attribute="BaseN" lineEndContext="#pop" name="BaseN" fallthroughContext="#pop">
+        <RegExpr attribute="BaseN" context="#pop" String="[0-9a-zA-Z@_]+"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubstOrSubstCommand">
+        <RegExpr attribute="Parameter Expansion" context="#pop!SubstCommand" String="\$\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/>
+        <StringDetect attribute="Parameter Expansion" context="#pop!ExprDblParenSubst" String="$((" beginRegion="expression"/>
+      </context>
+      <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <Detect2Chars attribute="Variable" context="#pop" char=")" char1=")" endRegion="expression"/>
+        <IncludeRules context="FindExprDblParen"/>
+        <!-- $((cmd
+              ) # jump to SubstCommand context -->
+        <DetectChar attribute="Parameter Expansion" context="#pop!SubstCommand" char=")" endRegion="expression" beginRegion="subshell"/>
+      </context>
+
+      <!-- ExprBracket consumes an expression till ] -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket" fallthroughContext="#pop!ExprBracketNot">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <IncludeRules context="FindExprBracketEnd"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketNot" fallthroughContext="#pop!ExprBracketParam1">
+        <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam1"/>
+        <Detect2Chars attribute="Expression" context="ExprBracketTestMaybeNot" char="!" char1=" " lookAhead="1"/>
+        <Detect2Chars attribute="Expression" context="ExprBracketTestMaybeNot" char="!" char1="&tab;" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketTestMaybeNot">
+        <DetectChar attribute="Expression" context="#pop" char="!"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam1" fallthroughContext="ExprBracketValue">
+        <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam2"/>
+        <DetectChar context="TestMaybeUnary" char="-" lookAhead="1"/>
+        <IncludeRules context="FindExprBracketEnd"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketValue">
+        <AnyChar context="#pop" String=" &tab;" lookAhead="1"/>
+        <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindGlobAny"/>
+        <IncludeRules context="FindPathThenPop"/>
+        <DetectChar context="ExprBracketValueMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketValueRecBrace">
+        <AnyChar context="#pop#pop" String=" &tab;" lookAhead="1"/>
+        <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindGlobAny"/>
+        <DetectChar context="ExprBracketValueMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar attribute="Normal Text" context="#pop" char="}"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketValueMaybeBraceExpansion">
+        <IncludeRules context="DispatchBraceExpansion"/>
+        <DetectChar attribute="Normal Text" context="#pop!ExprBracketValueRecBrace" char="{"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2" 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">
+        <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketFinal"/>
+        <IncludeRules context="FindExprBracketEnd"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketFinal" fallthroughContext="ExprBracketValue">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <IncludeRules context="FindExprBracketEnd"/>
+        <RegExpr attribute="Error" context="#pop" String="(?:[^] &tab;]++|\][^ &tab;])++" endRegion="expression"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindExprBracketEnd">
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[ &tab;;|&amp;&lt;>)]))" endRegion="expression"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeUnary" fallthroughContext="#pop!ExprBracketValue">
+        <RegExpr attribute="Expression" context="#pop" String="-[abcdefghknoprstuvwxzLOGNS](?=[ &tab;])"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeBinary" fallthroughContext="#pop!ExprBracketValue">
+        <RegExpr attribute="Expression" context="#pop" String="(?:-(?:e[fq]|[nolg]t|[nlg]e)|==?|!=)(?=[ &tab;])"/>
+      </context>
+
+
+      <!-- ExprDblBracket consumes an expression till ]] -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket" fallthroughContext="#pop!ExprDblBracketNot">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <IncludeRules context="FindExprDblBracketEnd"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketNot" fallthroughContext="#pop!ExprDblBracketParam1">
+        <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam1"/>
+        <DetectChar context="ExprDblBracketTestMaybeNot" char="!" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketTestMaybeNot" fallthroughContext="#pop#pop!ExprDblBracketParam1">
+        <RegExpr attribute="Expression" context="#pop" String="!(?=$|[ &tab;(])"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam1" fallthroughContext="ExprDblBracketValue">
+        <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam2"/>
+        <DetectChar context="TestMaybeUnary" char="-" lookAhead="1"/>
+        <AnyChar attribute="Expression" context="#pop!ExprDblBracketParam3Spe" String="&lt;>"/>
+        <DetectChar context="ExprDblBracketSubValue" char="(" lookAhead="1"/>
+        <IncludeRules context="FindExprDblBracketEnd"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketSubValue" fallthroughContext="#pop">
+        <DetectChar attribute="Operator" context="ExprDblBracketNot" char="("/>
+        <DetectChar attribute="Operator" context="#pop" char=")"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValue">
+        <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="&amp;" char1="&amp;"/>
+        <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="|" char1="|"/>
+        <AnyChar attribute="Error" context="#stay" String="&amp;;|"/>
+        <AnyChar context="#pop" String=" &tab;)" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindSingleGlob"/>
+        <IncludeRules context="FindGlobAny"/>
+        <IncludeRules context="FindGroupPattern"/>
+        <DetectChar context="MaybeGlobRangeOrPop" char="&lt;" lookAhead="1"/>
+        <DetectChar context="#pop" char="&gt;" lookAhead="1"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2" fallthroughContext="ExprDblBracketValue">
+        <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/>
+        <AnyChar context="TestMaybeBinary2" String="-=!" lookAhead="1"/>
+        <AnyChar attribute="Expression" context="#pop!ExprDblBracketParam3Spe" String="&lt;>"/>
+        <IncludeRules context="FindExprDblBracketEnd"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeBinary2" fallthroughContext="#pop!ExprDblBracketValue">
+        <IncludeRules context="TestMaybeBinary"/>
+        <RegExpr attribute="Expression" context="#pop#pop!ExprDblBracketRegex" String="=~(?=[ &tab;(])"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3Spe" fallthroughContext="#pop!ExprDblBracketParam3">
+        <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="ExprDblBracketFinal" name="ExprDblBracketParam3" fallthroughContext="ExprDblBracketValue">
+        <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/>
+        <IncludeRules context="FindExprDblBracketEnd"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketFinal" fallthroughContext="ExprDblBracketValue">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <IncludeRules context="FindExprDblBracketEnd"/>
+        <RegExpr attribute="Error" context="#pop" String="(?:[^] &tab;]++|\](?:[^]]|\][^ &tab;]))++" endRegion="expression"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindExprDblBracketEnd">
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <DetectChar context="#pop" char=")" lookAhead="1"/>
+        <Detect2Chars attribute="Control" context="#pop!ExprDblBracket" char="&amp;" char1="&amp;"/>
+        <Detect2Chars attribute="Control" context="#pop!ExprDblBracket" char="|" char1="|"/>
+        <RegExpr attribute="Keyword" context="#pop" String="\]\](?=($|[ &tab;;|&amp;)]))" endRegion="expression"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketRegex">
+        <DetectSpaces attribute="Normal Text" context="#pop!Regex"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="Regex">
+        <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/>
+        <DetectChar attribute="Error" context="#stay" char=")"/>
+        <Detect2Chars attribute="Operator" context="RegexChar" char="[" char1="^"/>
+        <DetectChar attribute="Operator" context="RegexChar" char="["/>
+        <IncludeRules context="FindRegex"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="ExprDblBracketSubRegex">
+        <DetectSpaces attribute="Pattern" context="#stay"/>
+        <DetectChar attribute="Operator" context="#pop" char=")"/>
+        <Detect2Chars attribute="Operator" context="RegexSubChar" char="[" char1="^"/>
+        <DetectChar attribute="Operator" context="RegexSubChar" char="["/>
+        <IncludeRules context="FindRegex"/>
+      </context>
+
+      <context attribute="Pattern" lineEndContext="#stay" name="FindRegex">
+        <DetectChar attribute="Operator" context="ExprDblBracketSubRegex" char="("/>
+        <DetectChar attribute="Escape" context="RegexEscape" char="\"/>
+        <DetectChar attribute="Parameter Expansion" context="RegexDup" char="{"/>
+        <AnyChar attribute="Glob" context="#stay" String="^?+*.|"/>
+        <IncludeRules context="FindStrings"/>
+        <DetectChar context="RegexDispatchVariables" char="$" lookAhead="1"/>
+        <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="RegexDispatchVariables">
+        <IncludeRules context="DispatchVariables"/>
+        <DetectChar attribute="Operator" context="#pop" char="$"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="RegexEscape">
+        <RegExpr attribute="Escape" context="#pop" String="x[0-9a-fA-F]{1,2}|[0-7]{1,3}|."/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="RegexDup">
+        <AnyChar attribute="Number" context="#stay" String="0123456789"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=","/>
+        <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
+      </context>
+
+      <context attribute="Pattern" lineEndContext="#pop" name="RegexSubChar" fallthroughContext="#pop!RegexSubInChar">
+        <AnyChar attribute="Pattern" context="#pop!RegexSubInChar" String="-]"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#pop" name="RegexSubInChar">
+        <DetectSpaces attribute="Pattern" context="#stay"/>
+        <IncludeRules context="RegexInChar"/>
+      </context>
+
+      <context attribute="Pattern" lineEndContext="#pop" name="RegexChar" fallthroughContext="#pop!RegexInChar">
+        <AnyChar attribute="Pattern" context="#pop!RegexInChar" String="-]"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#pop" name="RegexInChar">
+        <Detect2Chars context="RegexInCharEnd" char="-" char1="]" lookAhead="1"/>
+        <DetectChar attribute="Operator" context="#stay" char="-"/>
+        <DetectChar attribute="Escape" context="RegexEscape" char="\"/>
+        <DetectChar context="RegexCharClassSelect" char="[" lookAhead="1"/>
+        <DetectChar attribute="Operator" context="#pop" char="]"/>
+        <AnyChar context="#pop" String="() &tab;" lookAhead="1"/>
+      </context>
+      <context attribute="Operator" lineEndContext="#stay" name="RegexInCharEnd">
+        <DetectChar attribute="Pattern" context="#stay" char="-"/>
+        <DetectChar attribute="Operator" context="#pop#pop" char="]"/>
+      </context>
+      <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCharClassSelect">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexCharClass" char="[" char1=":"/>
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexCollatingSymbols" char="[" char1="."/>
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexEquivalenceClass" char="[" char1="="/>
+        <DetectChar attribute="Pattern" context="#pop" char="["/>
+      </context>
+
+      <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCharClass">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char=":" char1="]"/>
+        <DetectChar attribute="Error" context="#pop" char="]"/>
+      </context>
+      <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCollatingSymbols">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char="." char1="]"/>
+        <DetectChar attribute="Error" context="#pop" char="]"/>
+      </context>
+      <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexEquivalenceClass">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char="=" char1="]"/>
+        <DetectChar attribute="Error" context="#pop" char="]"/>
+      </context>
+
+      <!-- SubShell consumes shell input till ) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubShell" fallthroughContext="Command">
+        <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell"/>
+        <IncludeRules context="Start"/>
+      </context>
+
+      <!-- Assign consumes an expression till EOL or whitespace -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthroughContext="#pop!RegularAssign">
+        <DetectChar attribute="Variable" context="#pop!AssignArray" char="("/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="RegularAssign" fallthroughContext="#pop">
+        <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
+        <IncludeRules context="NormalOption"/>
+      </context>
+
+      <!-- AssignArray consumes everything till ), marking assignments -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="AssignArray" fallthroughContext="NormalOption">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Comment" context="Comment" char="#"/>
+        <DetectChar attribute="Variable" context="#pop" char=")"/>
+        <DetectChar context="AssignArrayKey" char="[" lookAhead="1"/>
+        <DetectChar attribute="Backquote" context="AssignArrayBackq" char="`"/>
+        <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="AssignArrayKey" fallthroughContext="#pop">
+        <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
+        <DetectChar attribute="Variable" context="#pop" char="="/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="AssignArrayBackq" fallthroughContext="Command">
+        <DetectChar attribute="Backquote" context="#pop!NormalOption" char="`"/>
+        <DetectChar attribute="Comment" context="CommentBackq" char="#"/>
+        <IncludeRules context="Start"/>
+      </context>
+
+      <!-- Subscript consumes anything till ], marks as Variable -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="Subscript" fallthroughContext="Subscript2">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
+        <AnyChar attribute="Number" context="#stay" String="0123456789-"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Subscript2">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop#pop" char="]"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=","/>
+        <IncludeRules context="FindGroupPattern"/>
+        <IncludeRules context="FindStrings"/>
+        <DetectChar context="VariableOrSubscriptPos" char="$" lookAhead="1"/>
+        <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <AnyChar attribute="Operator" context="#pop" String="@+-!~*/%&lt;>=&amp;^|?:"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="VariableOrSubscriptPos">
+        <IncludeRules context="DispatchVariables"/>
+        <DetectChar attribute="Number" context="#pop" char="$"/>
+      </context>
+
+      <!-- FunctionDef consumes a name, possibly with (), marks as Function -->
+      <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthroughContext="#pop">
+        <Detect2Chars attribute="Operator" context="#pop" char="(" char1=")"/>
+        <DetectSpaces attribute="Normal Text" context="FunctionNameStart"/>
+      </context>
+      <context attribute="Function" lineEndContext="#pop" name="FunctionNameStart" fallthroughContext="#pop!FunctionName">
+        <AnyChar context="#pop#pop" String="&symbolseps;#" lookAhead="1"/>
+        <DetectChar context="FunctionNameStartMaybeBraceExpansion" char="{" lookAhead="1"/>
+      </context>
+      <context attribute="Function" lineEndContext="#pop" name="FunctionName">
+        <AnyChar context="#pop" String=" &tab;(" lookAhead="1"/>
+        <IncludeRules context="FindWord"/>
+        <DetectChar context="FunctionNameMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
+      </context>
+      <context attribute="Function" lineEndContext="#pop" name="FunctionNameRecBrace" fallthroughContext="#pop">
+        <IncludeRules context="FindWord"/>
+        <DetectChar context="FunctionNameMaybeBraceExpansion" char="{" lookAhead="1"/>
+        <DetectChar attribute="Function" context="#pop" char="}"/>
+      </context>
+      <context attribute="Function" lineEndContext="#pop" name="FunctionNameStartMaybeBraceExpansion">
+        <IncludeRules context="DispatchBraceExpansion"/>
+        <DetectChar attribute="Keyword" context="#pop#pop#pop!Group" char="{"/>
+      </context>
+      <context attribute="Function" lineEndContext="#pop" name="FunctionNameMaybeBraceExpansion">
+        <IncludeRules context="DispatchBraceExpansion"/>
+        <DetectChar attribute="Function" context="#pop!FunctionNameRecBrace" char="{"/>
+      </context>
+
+      <!-- Case is called after the case keyword is encoutered. We handle this because of
+           the lonely closing parentheses that would otherwise disturb the expr matching -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="Case">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Keyword" context="#pop!CaseAlt" char="{"/>
+        <WordDetect attribute="Keyword" context="#pop!CaseIn" String="in"/>
+        <IncludeRules context="FindWord"/>
+        <DetectIdentifier attribute="Normal Text" context="#stay"/>
+      </context>
+
+      <!-- CaseIn is called when the construct 'case ... in' has been found. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="CaseIn" fallthroughContext="CasePattern">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Keyword" context="CaseClosedPattern" char="("/>
+        <DetectChar attribute="Comment" context="Comment" char="#"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="CasePattern">
+        <WordDetect attribute="Control Flow" context="#pop#pop" String="esac" endRegion="case"/>
+        <IncludeRules context="CaseClosedPattern"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="CaseClosedPattern">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Keyword" context="#pop!CaseExpr" char=")" beginRegion="caseexpr"/>
+        <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
+        <DetectChar attribute="Keyword" context="#stay" char="|"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindPattern"/>
+        <DetectIdentifier attribute="Pattern" context="#stay"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="CaseAlt" fallthroughContext="CasePattern">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <DetectChar attribute="Keyword" context="CasePattern" char="("/>
+        <DetectChar attribute="Keyword" context="#pop!CaseAltEnd" char="}" endRegion="caseexpr" lookAhead="1"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="CaseAltEnd">
+        <DetectChar attribute="Keyword" context="#pop" char="}" endRegion="case"/>
+      </context>
+
+      <!-- CaseExpr eats shell input till ;; / ;& / ;| -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr" fallthroughContext="Command">
+        <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1="|" endRegion="caseexpr"/>
+        <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1=";" endRegion="caseexpr"/>
+        <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1="&amp;" endRegion="caseexpr"/>
+        <WordDetect context="#pop" String="esac" endRegion="caseexpr" lookAhead="1"/>
+        <DetectChar context="#pop" char="}" lookAhead="1"/>
+        <IncludeRules context="Start"/>
+      </context>
+
+      <!-- ExprGlobParen is called after a ( is encountered in a argument -->
+      <context attribute="Glob Flag" lineEndContext="#pop" name="ExprGlobParen" fallthroughContext="#pop">
+        <Detect2Chars attribute="Glob Flag" context="#pop!GlobPatFlag" char="(" char1="#"/>
+        <RegExpr attribute="Glob" context="#pop!ExtGlobPattern" String="\((?=&ispattern;)"/>
+        <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier" char="("/>
+      </context>
+      <context attribute="Glob Flag" lineEndContext="#pop" name="ExprGlobParenThenPath" fallthroughContext="#pop">
+        <Detect2Chars attribute="Glob Flag" context="#pop!GlobPatFlagThenPath" char="(" char1="#"/>
+        <RegExpr attribute="Glob" context="#pop!ExtGlobPatternThenPath" String="\((?=&ispattern;)"/>
+        <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier" char="("/>
+      </context>
+      <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier">
+        <AnyChar attribute="Glob Flag" context="#stay" String="/F.@=p*%bcrwxAIERWXsStUG^-MTNDn"/>
+        <AnyChar attribute="Glob Flag" context="GlobQualifier_e" String="eP"/>
+        <AnyChar attribute="Glob Flag" context="GlobQualifier_u" String="ug"/>
+        <AnyChar attribute="Glob Flag" context="GlobQualifier_a" String="amc"/>
+        <AnyChar attribute="Glob Flag" context="GlobQualifier_o" String="oO"/>
+        <DetectChar attribute="Glob Flag" context="GlobQualifier_f" char="f"/>
+        <DetectChar attribute="Glob Flag" context="GlobQualifier_+" char="+"/>
+        <DetectChar attribute="Glob Flag" context="GlobQualifier_d" char="d"/>
+        <DetectChar attribute="Glob Flag" context="GlobQualifier_L" char="L"/>
+        <DetectChar attribute="Glob Flag" context="GlobQualifier_Y" char="Y"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
+
+        <DetectChar attribute="Operator" context="#stay" char=","/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!GlobModifier" char=":"/>
+        <DetectChar attribute="Glob Flag" context="#pop" char=")"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="GlobQualifier_o" fallthroughContext="#pop">
+        <AnyChar attribute="Normal Text" context="#stay" String="nLlamcdN"/>
+      </context>
+
+      <context attribute="Number" lineEndContext="#pop" name="GlobQualifier_Y" fallthroughContext="#pop">
+        <AnyChar attribute="Number" context="#stay" String="0123456789"/>
+      </context>
+
+      <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_L" fallthroughContext="#pop">
+        <AnyChar attribute="Normal Text" context="#stay" String="kKmMpPgGtT"/>
+        <AnyChar attribute="Number" context="#pop!GlobQualifier_Y" String="-+0123456789"/>
+      </context>
+
+      <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_a" fallthroughContext="#pop">
+        <AnyChar attribute="Normal Text" context="#stay" String="Mwhmsd"/>
+        <AnyChar attribute="Number" context="#pop!GlobQualifier_Y" String="-+0123456789"/>
+      </context>
+
+      <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_+" fallthroughContext="#pop">
+        <RegExpr attribute="Function" context="#pop" String="[^&_fragpathseps;=,\[]+"/>
+      </context>
+
+      <context attribute="Path" lineEndContext="#pop" name="GlobQualifier_d">
+        <AnyChar context="#pop" String=")," lookAhead="1"/>
+      </context>
+
+      <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_u">
+        <AnyChar attribute="Number" context="#pop!GlobQualifier_Y" String="0123456789"/>
+        <IncludeRules context="GlobQualifier_e"/>
+      </context>
+
+      <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_f" fallthroughContext="#pop">
+        <AnyChar attribute="Number" context="#pop!GlobQualifier_fo" String="0123456789=+-"/>
+        <DetectChar attribute="Glob" context="#pop!GlobQualifier_fo" char="?"/>
+        <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_f[" char="["/>
+        <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_f&lt;" char="&lt;"/>
+        <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_f{" char="{"/>
+        <RegExpr attribute="Glob Flag" context="#pop!GlobQualifier_fx" String="(.)"/>
+      </context>
+      <context attribute="Number" lineEndContext="#pop" name="GlobQualifier_fo" fallthroughContext="#pop">
+        <AnyChar attribute="Number" context="#stay" String="0123456789"/>
+        <DetectChar attribute="Glob" context="#stay" char="?"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_f[">
+        <DetectChar attribute="Operator" context="#stay" char=","/>
+        <DetectChar attribute="Glob Flag" context="#pop" char="]"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_f&lt;">
+        <DetectChar attribute="Operator" context="#stay" char=","/>
+        <DetectChar attribute="Glob Flag" context="#pop" char=">"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_f{">
+        <DetectChar attribute="Operator" context="#stay" char=","/>
+        <DetectChar attribute="Glob Flag" context="#pop" char="}"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_fx">
+        <DetectChar attribute="Operator" context="#stay" char=","/>
+        <DetectChar attribute="Glob Flag" context="#pop" char="1" dynamic="1"/>
+      </context>
+
+      <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_e" fallthroughContext="#pop">
+        <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_e[" char="["/>
+        <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_e&lt;" char="&lt;"/>
+        <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_e{" char="{"/>
+        <RegExpr attribute="Glob Flag" context="#pop!GlobQualifier_ex" String="(.)"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="IncGlobQualifier_e">
+        <IncludeRules context="FindStrings"/>
+        <DetectChar context="RegularVariable" char="$" lookAhead="1"/>
+        <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_e[">
+        <DetectChar attribute="Glob Flag" context="#pop" char="]"/>
+        <IncludeRules context="IncGlobQualifier_e"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_e&lt;">
+        <DetectChar attribute="Glob Flag" context="#pop" char=">"/>
+        <IncludeRules context="IncGlobQualifier_e"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_e{">
+        <DetectChar attribute="Glob Flag" context="#pop" char="}"/>
+        <IncludeRules context="IncGlobQualifier_e"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_ex">
+        <DetectChar attribute="Glob Flag" context="#pop" char="1" dynamic="1"/>
+        <IncludeRules context="IncGlobQualifier_e"/>
+      </context>
+
+      <!-- GlobPatFlag is called after a (# is encountered -->
+      <context attribute="Glob Flag" lineEndContext="#pop" name="GlobPatFlag" fallthroughContext="#pop">
+        <IncludeRules context="IncGlobPatFlag"/>
+        <DetectChar attribute="Glob Flag" context="#pop" char=")"/>
+      </context>
+      <context attribute="Glob Flag" lineEndContext="#pop" name="GlobPatFlagThenPath" fallthroughContext="#pop">
+        <IncludeRules context="IncGlobPatFlag"/>
+        <DetectChar attribute="Glob Flag" context="#pop!PathThenPop" char=")"/>
+      </context>
+      <context attribute="Glob Flag" lineEndContext="#pop" name="IncGlobPatFlag" fallthroughContext="#pop">
+        <AnyChar attribute="Glob Flag" context="#stay" String="ilIbBcmMaseuU,"/>
+        <AnyChar attribute="Number" context="#stay" String="0123456789"/>
+        <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier" char="q"/>
+      </context>
+
+      <!-- GlobModifier is called after a : is encountered in a GlobQualifier -->
+      <context attribute="Parameter Expansion" lineEndContext="#pop" name="GlobModifier">
+        <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=":"/>
+        <AnyChar attribute="Parameter Expansion" context="VarBraceModifier_h" String="ht"/>
+        <DetectChar attribute="Parameter Expansion" context="GlobModifier_s" char="s"/>
+        <Detect2Chars attribute="Parameter Expansion" context="GlobModifier_s" char="g" char1="s"/>
+        <DetectChar attribute="Glob Flag" context="#pop" char=")"/>
+      </context>
+      <context attribute="Parameter Expansion" lineEndContext="#stay" name="GlobModifier_s" fallthroughContext="#pop">
+        <DetectChar attribute="Error" context="#pop#pop" char=")"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!GlobModifier_s_PatPrefix" char="/"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="GlobModifier_s_PatPrefix" fallthroughContext="#pop!GlobModifier_s_Pat">
+        <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!GlobModifier_s_Pat" char="#" char1="%"/>
+        <AnyChar attribute="Parameter Expansion Operator" context="#pop!GlobModifier_s_Pat" String="#%"/>
+      </context>
+      <context attribute="Pattern" lineEndContext="#stay" name="GlobModifier_s_Pat">
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop!GlobModifier_s_Rep" char="/"/>
+        <IncludeRules context="FindWord"/>
+        <IncludeRules context="FindSubPattern"/>
+        <DetectChar attribute="Error" context="#pop#pop" char=")"/>
+      </context>
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="GlobModifier_s_Rep">
+        <DetectChar attribute="Glob Flag" context="#pop#pop" char=")"/>
+        <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="/"/>
+        <DetectChar attribute="String DoubleQ" context="GlobModifier_s_RecursiveRep" char="("/>
+        <IncludeRules context="FindWord"/>
+      </context>
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="GlobModifier_s_RecursiveRep">
+        <DetectChar attribute="String DoubleQ" context="#pop" char=")"/>
+        <DetectChar attribute="String DoubleQ" context="GlobModifier_s_RecursiveRep" char="("/>
+        <IncludeRules context="FindWord"/>
+      </context>
+
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal Text"    defStyleNum="dsNormal"/>
+      <itemData name="Comment"        defStyleNum="dsComment"/>
+      <itemData name="Keyword"        defStyleNum="dsKeyword"/>
+      <itemData name="Control"        defStyleNum="dsKeyword"/>
+      <itemData name="Control Flow"   defStyleNum="dsControlFlow"/>
+      <itemData name="Builtin"        defStyleNum="dsBuiltIn"/>
+      <itemData name="Command"        defStyleNum="dsFunction"/>
+      <itemData name="OtherCommand"   defStyleNum="dsExtension"/>
+      <itemData name="Redirection"    defStyleNum="dsOperator"/>
+      <itemData name="Escape"         defStyleNum="dsDataType"/>
+      <itemData name="String SingleQ" defStyleNum="dsString"/>
+      <itemData name="String DoubleQ" defStyleNum="dsString"/>
+      <itemData name="Here Doc"       defStyleNum="dsString"/>
+      <itemData name="Backquote"      defStyleNum="dsKeyword"/>
+      <itemData name="String Transl." defStyleNum="dsString"/>
+      <itemData name="String Escape"  defStyleNum="dsDataType"/>
+      <itemData name="Variable"       defStyleNum="dsVariable"/>
+      <itemData name="Expression"     defStyleNum="dsOthers"/>
+      <itemData name="Function"       defStyleNum="dsFunction"/>
+      <itemData name="Pattern"        defStyleNum="dsSpecialString"/>
+      <itemData name="Path"           defStyleNum="dsNormal"/>
+      <itemData name="Glob"           defStyleNum="dsPreprocessor"/>
+      <itemData name="Glob Flag"      defStyleNum="dsOperator"/>
+      <itemData name="Option"         defStyleNum="dsAttribute"/>
+      <itemData name="Hex"            defStyleNum="dsBaseN"/>
+      <itemData name="Number"         defStyleNum="dsDecVal"/>
+      <itemData name="Base"           defStyleNum="dsDataType"/>
+      <itemData name="BaseN"          defStyleNum="dsBaseN"/>
+      <itemData name="File Descriptor" defStyleNum="dsDecVal"/>
+      <itemData name="Parameter Expansion" defStyleNum="dsVariable"/>
+      <itemData name="Parameter Expansion Operator" defStyleNum="dsOperator"/>
+      <itemData name="Operator"       defStyleNum="dsOperator"/>
+      <itemData name="Error"          defStyleNum="dsError"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="#"/>
+    </comments>
+    <keywords casesensitive="1" weakDeliminator="^%#[]$._:-/" additionalDeliminator="`"/>
   </general>
 </language>
 <!-- kate: replace-tabs on; indent-width 2; -->
