diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,18 @@
 # Revision history for skylighting-core
 
+## 0.7.4 -- 2018-10-08
+
+  * HTML output: use title instead of data-line-number.
+    data- attributes are not valid HTML 4, and we would like this to
+    work with HTML 4 (e.g. in epub v2).  See jgm/pandoc#4920.
+  * Print FALLTHROUGH in --trace output.
+  * Updated syntax definitions for actionscript, awk, bash, c, clojure, cmake,
+    coffee, cs, css, dockerfile, email, fortran, gcc, haskell, ini, isocpp,
+    java, javadoc, javascript, jsp, kotlin, latex, lua, mediawiki, modelines,
+    modula-2, objectivec, objectivecpp, opencl, perl, powershell, prolog,
+    python, r, rest, rhtml, ruby, rust, scala, sql-mysql, sql-postgresql, sql,
+    tcl, vhdl, xml, xul, yaml, zsh.
+
 ## 0.7.3 -- 2018-08-27
 
   * Add 'default.xml' to syntax descriptions.
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.7.3
+version:             0.7.4
 synopsis:            syntax highlighting library
 description:         Skylighting is a syntax highlighting library.
                      It derives its tokenizers from XML syntax
@@ -180,7 +180,7 @@
                    text,
                    containers,
                    directory,
-                   criterion >= 1.0 && < 1.5
+                   criterion >= 1.0 && < 1.6
   Ghc-Options:   -rtsopts -Wall -fno-warn-unused-do-bind
   Default-Language: Haskell2010
 
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
@@ -93,8 +93,7 @@
          lineNum = toValue prefixedLineNo
          lineRef = toValue ('#':prefixedLineNo)
          prefixedLineNo = Text.unpack (lineIdPrefix opts) <> show (lineNo lno)
-         dataAttrib = H.dataAttribute (fromString "line-number")
-                          (toValue (show (lineNo lno)))
+         dataAttrib = A.title (toValue (show (lineNo lno)))
 
 tokenToHtml :: FormatOptions -> Token -> Html
 tokenToHtml _ (NormalTok, txt)  = toHtml txt
@@ -155,7 +154,7 @@
             "pre.numberSource a.sourceLine"
           , "  { position: relative; left: -4em; }"
           , "pre.numberSource a.sourceLine::before"
-          , "  { content: attr(data-line-number);"
+          , "  { content: attr(title);"
           , "    position: relative; left: -1em; text-align: right; vertical-align: baseline;"
           , "    border: none; pointer-events: all; display: inline-block;"
           , "    -webkit-touch-callout: none; -webkit-user-select: none;"
diff --git a/src/Skylighting/Tokenizer.hs b/src/Skylighting/Tokenizer.hs
--- a/src/Skylighting/Tokenizer.hs
+++ b/src/Skylighting/Tokenizer.hs
@@ -254,7 +254,11 @@
                                         cs -> cs
           doContextSwitches fallthroughContext
           getToken
-        else (\x -> Just (cAttribute context, x)) <$> normalChunk
+        else do
+          t <- normalChunk
+          let mbtok = Just (cAttribute context, t)
+          info $ "FALLTHROUGH " ++ show mbtok
+          return mbtok
 
 takeChars :: Int -> TokenizerM Text
 takeChars 0 = mzero
diff --git a/test/expected/abc.haskell.native b/test/expected/abc.haskell.native
--- a/test/expected/abc.haskell.native
+++ b/test/expected/abc.haskell.native
@@ -101,13 +101,25 @@
   ]
 , [ ( NormalTok , "main " )
   , ( FunctionTok , "=" )
-  , ( NormalTok , " mapM_ (\\w " )
+  , ( NormalTok , " " )
+  , ( FunctionTok , "mapM_" )
+  , ( NormalTok , " (\\w " )
   , ( OtherTok , "->" )
-  , ( NormalTok , " print (w, not " )
+  , ( NormalTok , " " )
+  , ( FunctionTok , "print" )
+  , ( NormalTok , " (w, " )
+  , ( FunctionTok , "not" )
+  , ( NormalTok , " " )
   , ( FunctionTok , "." )
-  , ( NormalTok , " null " )
+  , ( NormalTok , " " )
+  , ( FunctionTok , "null" )
+  , ( NormalTok , " " )
   , ( FunctionTok , "$" )
-  , ( NormalTok , " abc blocks (map toUpper w)))" )
+  , ( NormalTok , " abc blocks (" )
+  , ( FunctionTok , "map" )
+  , ( NormalTok , " " )
+  , ( FunctionTok , "toUpper" )
+  , ( NormalTok , " w)))" )
   ]
 , [ ( NormalTok , "         [" )
   , ( StringTok , "\"\"" )
diff --git a/test/test-skylighting.hs b/test/test-skylighting.hs
--- a/test/test-skylighting.hs
+++ b/test/test-skylighting.hs
@@ -131,19 +131,16 @@
             ] @=? tokenize defConfig perl
                      "my $foo = q/bar/;\nmy $baz = 'quux';\n"
       , testCase "cpp floats" $ Right
-           [ [ ( FloatTok , "0.1f" ) ]
-           , [ ( FloatTok , "1.0f" ) ]
-           , [ ( FloatTok , "-0.1f" ) ]
-           , [ ( FloatTok , "-1.0F" ) ]
-           , [ ( FloatTok , "-1.0L" ) ]
-           , [ ( FloatTok , "1e3" ) ]
-           , [ ( FloatTok , "-15e+3" ) ]
-           , [ ( FloatTok , "0.f" ) ]
-           , [ ( FloatTok , "1.F" ) ]
-           , [ ( DecValTok , "1" )
-             , ( NormalTok ,".E" )
-             , ( DecValTok , "3" )
-             ]
+           [ [ (FloatTok,"0.1") , (BuiltInTok,"f")]
+           , [ (FloatTok,"1.0") , (BuiltInTok,"f")]
+           , [ (NormalTok,"-") , (FloatTok,"0.1") , (BuiltInTok,"f")]
+           , [ (NormalTok,"-") , (FloatTok,"1.0") , (BuiltInTok,"F")]
+           , [ (NormalTok,"-") , (FloatTok,"1.0") , (BuiltInTok,"L")]
+           , [ (FloatTok,"1e3")]
+           , [ (NormalTok,"-") , (FloatTok,"15e+3")]
+           , [ (FloatTok,"0.") , (BuiltInTok,"f")]
+           , [ (FloatTok,"1.") , (BuiltInTok,"F")]
+           , [ (FloatTok,"1.E3")]
            ] @=? tokenize defConfig cpp
                      "0.1f\n1.0f\n-0.1f\n-1.0F\n-1.0L\n1e3\n-15e+3\n0.f\n1.F\n1.E3"
       ]
diff --git a/xml/actionscript.xml b/xml/actionscript.xml
--- a/xml/actionscript.xml
+++ b/xml/actionscript.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="ActionScript 2.0" version="2" kateversion="5.0" section="Sources" extensions="*.as" mimetype="text/x-actionscript" license="LGPL" author="Aaron Miller (armantic101@gmail.com)">
+<language name="ActionScript 2.0" version="3" kateversion="5.0" section="Sources" extensions="*.as" mimetype="text/x-actionscript" license="LGPL" author="Aaron Miller (armantic101@gmail.com)">
   <highlighting>
     
     <list name="properties">
@@ -253,21 +253,10 @@
         <keyword attribute="Keyword" context="#stay" String="keywords"/>
         <keyword attribute="Constants" context="#stay" String="const"/>
         <keyword attribute="Data Type" context="#stay" String="types"/>
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="fF" attribute="Float" context="#stay"/>
-        </Float>
+        <Float attribute="Float" context="Float Suffixes"/>
         <HlCOct attribute="Octal" context="#stay"/>
         <HlCHex attribute="Hex" context="#stay"/>
-        <Int attribute="Decimal" context="#stay">
-          <StringDetect attribute="Decimal" context="#stay" String="ULL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LUL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LLU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="UL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="U" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
-        </Int>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <RegExpr attribute="Decimal" context="#stay" String="//\s*BEGIN.*$" beginRegion="Region1"/>
         <RegExpr attribute="Decimal" context="#stay" String="//\s*END.*$" endRegion="Region1"/>
@@ -282,6 +271,19 @@
         <RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*(/\*\s*\d+\s*\*/\s*)?[(])" />
         <RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" /> 
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+      </context>
+      <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <AnyChar String="fF" attribute="Float" context="#pop"/>
+      </context>
+      <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <StringDetect attribute="Decimal" context="#pop" String="ULL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LUL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LLU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="UL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="U" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
       </context>
       <context attribute="String" lineEndContext="#pop" name="String">
         <LineContinue attribute="String" context="#stay"/>
diff --git a/xml/awk.xml b/xml/awk.xml
--- a/xml/awk.xml
+++ b/xml/awk.xml
@@ -1,94 +1,117 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="AWK" version="2" kateversion="5.0" section="Scripts"
+<language name="AWK" version="3" kateversion="5.0" section="Scripts"
   extensions="*.awk" mimetype="text/x-awk" indenter="cstyle"
   license="LGPL">
 <!-- patched by igli#kate@irc:chat.freenode.net -->
   <highlighting>
-    <list name="keywords">
+    <list name="controlflow">
       <item>if</item>
       <item>else</item>
       <item>while</item>
       <item>do</item>
       <item>for</item>
-      <item>in</item>
-      <item>continue</item>
       <item>break</item>
+      <item>continue</item>
+      <item>return</item>
+      <item>switch</item>
+      <item>case</item>
+      <item>default</item>
+      <item>exit</item>
+    </list>
+    <list name="keywords">
+      <item>in</item>
+      <item>delete</item>
       <item>print</item>
       <item>printf</item>
       <item>getline</item>
       <item>function</item>
-      <item>return</item>
       <item>next</item>
       <item>nextfile</item>
-      <item>exit</item>
-      <item>switch</item>
-      <item>case</item>
-      <item>default</item>
       <item>@include</item>
       <item>@load</item>
     </list>
     <list name="builtins">
       <item>ARGC</item>
+      <item>ARGIND</item>
       <item>ARGV</item>
+      <item>BINMODE</item>
       <item>CONVFMT</item>
       <item>ENVIRON</item>
       <item>ERRNO</item>
+      <item>FIELDWIDTHS</item>
       <item>FILENAME</item>
       <item>FNR</item>
       <item>FPAT</item>
       <item>FS</item>
       <item>FUNCTAB</item>
       <item>IGNORECASE</item>
+      <item>LINT</item>
       <item>NF</item>
       <item>NR</item>
       <item>OFMT</item>
       <item>OFS</item>
       <item>ORS</item>
+      <item>PREC</item>
       <item>PROCINFO</item>
+      <item>ROUNDMODE</item>
       <item>RS</item>
+      <item>RT</item>
       <item>RSTART</item>
       <item>RLENGTH</item>
       <item>SUBSEP</item>
       <item>SYMTAB</item>
+      <item>TEXTDOMAIN</item>
     </list>
     <list name="functions">
+      <!-- I/O -->
+      <item>close</item>
+      <item>fflush</item>
+      <item>system</item>
+      <!-- Arithmetic -->
+      <item>atan2</item>
+      <item>cos</item>
+      <item>exp</item>
+      <item>int</item>
+      <item>log</item>
+      <item>rand</item>
+      <item>sin</item>
+      <item>sqrt</item>
+      <item>srand</item>
+      <!-- String -->
       <item>asort</item>
       <item>asorti</item>
-      <item>gsub</item>
       <item>gensub</item>
+      <item>gsub</item>
       <item>index</item>
-      <item>isarray</item>
       <item>length</item>
-      <item>lshift</item>
       <item>match</item>
-      <item>mktime</item>
       <item>patsplit</item>
-      <item>rshift</item>
       <item>split</item>
       <item>sprintf</item>
-      <item>sround</item>
-      <item>strftime</item>
       <item>strtonum</item>
       <item>sub</item>
       <item>substr</item>
-      <item>systime</item>
       <item>tolower</item>
       <item>toupper</item>
-      <item>typeof</item>
+      <!-- Time -->
+      <item>mktime</item>
+      <item>strftime</item>
+      <item>systime</item>
+      <!-- Bit Manipulationse -->
+      <item>and</item>
+      <item>compl</item>
+      <item>lshift</item>
+      <item>or</item>
+      <item>rshift</item>
       <item>xor</item>
-      <item>atan2</item>
-      <item>cos</item>
-      <item>exp</item>
-      <item>int</item>
-      <item>log</item>
-      <item>rand</item>
-      <item>sin</item>
-      <item>sqrt</item>
-      <item>srand</item>
-      <item>close</item>
-      <item>fflush</item>
-      <item>system</item>
+      <!-- Type -->
+      <item>isarray</item>
+      <item>typeof</item>
+      <!-- Internationalization -->
+      <item>bindtextdomain</item>
+      <item>dcgettext</item>
+      <item>dcngettext</item>
     </list>
     <list name="special">
       <item>BEGIN</item>
@@ -96,122 +119,149 @@
       <item>END</item>
       <item>ENDFILE</item>
     </list>
+    <list name="charclass">
+      <item>alpha</item>
+      <item>alnum</item>
+      <item>blank</item>
+      <item>cntrl</item>
+      <item>digit</item>
+      <item>graph</item>
+      <item>lower</item>
+      <item>print</item>
+      <item>punct</item>
+      <item>space</item>
+      <item>upper</item>
+      <item>xdigit</item>
+    </list>
 
 <contexts>
 <!-- START CONTEXTS -->
 <context name="Pattern" attribute="Normal" lineEndContext="#stay">
-	<DetectChar char="{" context="Block" attribute="Keyword" beginRegion="block" />
+	<DetectSpaces />
+	<DetectChar char="{" attribute="Symbol" context="Block" beginRegion="block" />
 	<DetectChar char="}" attribute="Error" context="#stay"/>
-	<DetectChar char="/" firstNonSpace="true" lookAhead="true" context="MatchPattern"/>
+	<DetectChar char="/" attribute="Regex Op" firstNonSpace="true" context="Regex"/>
 	<IncludeRules context="base" />
 	<keyword String="special" attribute="Special" context="#stay"/>
 </context>
 
 <context name="Block" attribute="Normal" lineEndContext="#stay">
-	<DetectChar char="}" attribute="Keyword" context="#pop" endRegion="block" />
-	<DetectChar char="{" context="Block" attribute="Keyword" beginRegion="block" />
+	<DetectSpaces />
+	<DetectChar char="}" attribute="Symbol" context="#pop" endRegion="block" />
+	<DetectChar char="{" attribute="Symbol" context="Block" beginRegion="block" />
 	<IncludeRules context="base" />
 	<keyword String="special" attribute="Error" context="#stay"/>
 </context>
 
 <context name="base" attribute="Normal" lineEndContext="#stay">
-	<DetectSpaces />
-	<DetectChar char="#" context="Comment" attribute="Comment"/>
-	<DetectChar char="~" context="Match" attribute="Operator"/>
-	<DetectChar char="&quot;" context="String" attribute="String"/>
-	<AnyChar String="!%&amp;*+,-./:;&lt;=&gt;?^|" attribute="Operator" context="#stay"/>
+	<DetectChar char=")" attribute="Symbol" context="#stay"/>
+	<DetectChar char="(" attribute="Symbol" context="Match"/>
+	<AnyChar String="=~" attribute="Operator" context="Match"/>
+	<DetectChar char="," attribute="Separator Symbol" context="ArgSep"/>
+	<DetectChar char="&quot;" attribute="String" context="String"/>
+	<DetectChar char="#" attribute="Comment" context="Comment"/>
+	<AnyChar String="@!%&amp;*+-/:&lt;&gt;?^|" attribute="Operator" context="#stay"/>
+	<keyword String="controlflow" attribute="ControlFlow" context="#stay"/>
 	<keyword String="keywords" attribute="Keyword" context="#stay"/>
 	<keyword String="builtins" attribute="Builtin" context="#stay"/>
 	<keyword String="functions" attribute="Function" context="#stay"/>
 	<Float attribute="Float"   context="#stay"/>
 	<Int   attribute="Decimal" context="#stay"/>
 	<RegExpr String="\$[A-Za-z0-9_]+" attribute="Field" context="#stay"/>
+	<DetectChar char=";" attribute="Separator Symbol" context="#stay"/>
 </context>
 
+<context name="ArgSep" attribute="Normal" lineEndContext="#stay"
+   fallthrough="true" fallthroughContext="#pop">
+	<IncludeRules context="Match" />
+</context>
+
 <context name="String" attribute="String" lineEndContext="#stay">
 	<DetectChar char="&quot;" attribute="String" context="#pop"/>
-	<HlCStringChar attribute="Escape" context="#stay"/>
-	<DetectChar char="\" context="Escape" attribute="Operator"/>
+	<DetectChar char="\" context="Escape" attribute="Escape"/>
 </context>
 
 <context name="Comment" attribute="Comment" lineEndContext="#pop">
 	<IncludeRules context="##Alerts"/>
 </context>
 
-<context name="Escape" attribute="Normal" lineEndContext="#pop">
-	<RegExpr String="." attribute="String" context="#pop"/>
+<context name="Escape" attribute="Error" lineEndContext="#pop">
+	<RegExpr String="[\\abfnrtv]|x[0-9a-fA-F]{1,2}|[0-7]{1,3}" attribute="Escape" context="#pop"/>
+	<RegExpr String="." attribute="Error" context="#pop"/>
 </context>
 
 <context name="Match" attribute="Normal" lineEndContext="#pop"
    fallthrough="true" fallthroughContext="#pop">
 	<DetectSpaces />
-	<Detect2Chars char="/" char1="^" attribute="Regex Op" context="Regex"/>
-	<DetectChar char="/" attribute="Regex Op" context="Regex"/>
+	<DetectChar char="/" attribute="Regex Op" context="#pop!Regex"/>
 </context>
-<context name="Regex" attribute="Regex" lineEndContext="#stay">
+
+<context name="Regex" attribute="Regex" lineEndContext="#pop">
 	<IncludeRules context="regex"/>
-	<DetectChar char="/" context="#pop#pop" attribute="Regex Op"/>
+	<DetectChar char="/" context="#pop" attribute="Regex Op"/>
 </context>
+
 <context name="regex" attribute="Normal" lineEndContext="#stay">
-	<HlCStringChar attribute="Escape" context="#stay"/>
-	<DetectChar char="\" context="Regex Escape" attribute="Regex Op"/>
 	<Detect2Chars char="[" char1="^" context="RegexChar" attribute="Regex Op"/>
 	<DetectChar char="[" context="RegexChar" attribute="Regex Op"/>
-	<AnyChar String="$.+?*()|" context="#stay" attribute="Regex Op"/>
+	<AnyChar String="^$.+?*()|" context="#stay" attribute="Regex Op"/>
+	<DetectChar char="\" context="Regex Escape" attribute="Regex Op"/>
 </context>
+
 <context name="Regex Escape" attribute="Normal" lineEndContext="#pop">
+	<RegExpr String="[&lt;&gt;sSwW`'[\]{}^$.+?*()|/\\abfnrtv]|x[0-9a-fA-F]{1,2}|[0-7]{1,3}" attribute="Escape" context="#pop"/>
 	<RegExpr String="." attribute="Regex" context="#pop"/>
 </context>
 
 <context name="RegexChar" attribute="Regex" lineEndContext="#pop"
    fallthrough="true" fallthroughContext="InChar">
-	<Detect2Chars char="-" char1="]" context="InChar" attribute="Regex"/>
 	<AnyChar String="-]" context="InChar" attribute="Regex"/>
 </context>
-<context name="InChar" attribute="Regex" lineEndContext="#stay">
-	<HlCStringChar attribute="String" context="#stay"/>
+
+<context name="InChar" attribute="Regex" lineEndContext="#pop#pop">
+	<Detect2Chars char="-" char1="]" context="InCharEnd" attribute="Regex" lookAhead="true"/>
+	<DetectChar char="-" context="#stay" attribute="Regex Op"/>
 	<DetectChar char="\" context="Regex Escape" attribute="Regex Op"/>
-	<Detect2Chars char="-" char1="]" context="Regex Escape" lookAhead="true"/>
+	<DetectChar char="[" context="CharClassSelect" attribute="Regex" lookAhead="true"/>
 	<DetectChar char="]" context="#pop#pop" attribute="Regex Op"/>
-	<DetectChar char="-" context="#stay" attribute="Regex Op"/>
-	<RegExpr String="\[:(?=[_\w][_\d\w]*:\])" context="CharClass" attribute="Regex Op"/>
 </context>
-<context name="CharClass" attribute="Custom" lineEndContext="#pop">
-	<RegExpr String="(alpha|alnum|blank|cntrl|digit|graph|lower|punct|space|upper|xdigit)(?=:\])"
-		attribute="CharClass" context="#stay"/>
-	<Detect2Chars char=":" char1="]" attribute="Regex Op" context="#pop"/>
-</context>
 
-<context name="MatchPattern" attribute="Normal" lineEndContext="#pop"
-   fallthrough="true" fallthroughContext="#pop">
-	<Detect2Chars char="/" char1="^" attribute="Regex Op" context="RegexPattern"/>
-	<DetectChar char="/" attribute="Regex Op" context="RegexPattern"/>
+<context name="InCharEnd" attribute="Regex Op" lineEndContext="#stay">
+	<DetectChar char="-" context="#stay" attribute="Regex"/>
+	<DetectChar char="]" context="#pop#pop#pop" attribute="Regex Op"/>
 </context>
-<context name="RegexPattern" attribute="Regex" lineEndContext="#stay">
-	<IncludeRules context="regex"/>
-	<DetectChar char="/" context="CheckRange" attribute="Regex Op"/>
+
+<context name="CharClassSelect" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
+	<Detect2Chars char="[" char1=":" context="#pop!CharClass" attribute="CharClass"/>
+	<Detect2Chars char="[" char1="." context="#pop!CollatingSymbols" attribute="CharClass"/>
+	<Detect2Chars char="[" char1="=" context="#pop!EquivalenceClass" attribute="CharClass"/>
+	<DetectChar char="[" context="#pop" attribute="Regex"/>
 </context>
-<context name="CheckRange" attribute="Normal" lineEndContext="#pop#pop#pop"
-   fallthrough="true" fallthroughContext="#pop#pop#pop">
-	<RegExpr String="\s*,\s*(?=/)" context="RangePattern" attribute="Operator"/>
+
+<context name="CharClass" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
+	<keyword String="charclass" attribute="CharClass" context="#stay"/>
+	<Detect2Chars char=":" char1="]" attribute="CharClass" context="#pop"/>
+	<DetectChar char="]" attribute="Error" context="#pop"/>
 </context>
-<context name="RangePattern" attribute="Normal" lineEndContext="#pop#pop#pop#pop"
-   fallthrough="true" fallthroughContext="#pop#pop#pop#pop">
-	<Detect2Chars char="/" char1="^" attribute="Regex Op" context="Pattern2"/>
-	<DetectChar char="/" attribute="Regex Op" context="Pattern2"/>
+
+<context name="CollatingSymbols" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
+	<Detect2Chars char="." char1="]" attribute="CharClass" context="#pop"/>
+	<DetectChar char="]" attribute="Error" context="#pop"/>
 </context>
-<context name="Pattern2" attribute="Regex" lineEndContext="#stay">
-	<IncludeRules context="regex"/>
-	<DetectChar char="/" context="#pop#pop#pop#pop#pop" attribute="Regex Op"/>
+
+<context name="EquivalenceClass" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
+	<Detect2Chars char="=" char1="]" attribute="CharClass" context="#pop"/>
+	<DetectChar char="]" attribute="Error" context="#pop"/>
 </context>
 
 <!-- END OF CONTEXTS -->
 </contexts>
     <itemDatas>
       <itemData name="Normal"   defStyleNum="dsNormal"/>
-      <itemData name="Keyword"  defStyleNum="dsKeyword"/>
-      <itemData name="Builtin"  defStyleNum="dsBuiltIn"/>
-      <itemData name="Function" defStyleNum="dsFunction"/>
+      <itemData name="ControlFlow" defStyleNum="dsControlFlow" spellChecking="false"/>
+      <itemData name="Keyword"  defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="Builtin"  defStyleNum="dsBuiltIn" spellChecking="false"/>
+      <itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/>
       <itemData name="Decimal"  defStyleNum="dsDecVal"/>
       <itemData name="Float"    defStyleNum="dsFloat"/>
       <itemData name="String"   defStyleNum="dsString"/>
@@ -221,16 +271,18 @@
       <itemData name="Error"    defStyleNum="dsError"/>
       <itemData name="Special"  defStyleNum="dsControlFlow" bold="0"/>
       <itemData name="Operator" defStyleNum="dsOperator"/>
-      <itemData name="Regex"    defStyleNum="dsSpecialString"/>
+      <itemData name="Symbol"   defStyleNum="dsNormal"/>
+      <itemData name="Separator Symbol" defStyleNum="dsNormal"/>
+      <itemData name="Regex"    defStyleNum="dsSpecialString" spellChecking="false"/>
       <itemData name="Regex Op" defStyleNum="dsOthers"/>
-      <itemData name="CharClass" defStyleNum="dsExtension"/>
-      <itemData name="Custom"   defStyleNum="dsOthers" />
+      <itemData name="CharClass" defStyleNum="dsExtension" spellChecking="false"/>
+      <itemData name="Custom"   defStyleNum="dsOthers" spellChecking="false"/>
     </itemDatas>
   </highlighting>
   <general>
     <comments>
       <comment name="singleLine" start="#"/>
     </comments>
-    <keywords casesensitive="1" />
+    <keywords casesensitive="1" weakDeliminator="@"/>
   </general>
 </language>
diff --git a/xml/bash.xml b/xml/bash.xml
--- a/xml/bash.xml
+++ b/xml/bash.xml
@@ -8,7 +8,7 @@
         <!ENTITY noword   "(?![\w$+-])">                <!-- no word, $, + or - following -->
         <!ENTITY pathpart "([\w_@.&#37;*?+-]|\\ )">     <!-- valid character in a file name -->
 ]>
-<language name="Bash" version="8" kateversion="5.0" 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="9" kateversion="5.0" 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)
@@ -615,14 +615,27 @@
 
       <!-- 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;* ]" />
+        <IncludeRules context="Escapes" />
         <RegExpr attribute="Keyword" context="#stay" String="\\$" />
-        <RegExpr attribute="Escape" context="#stay" String="\{(?!(\s|$))\S*\}" />
+        <!-- Only highlighting closed braces. The "BraceExpansion" context corrects
+             the closure of braces and allows recursive braces (bug #387915). -->
+        <RegExpr attribute="Escape" context="BraceExpansion" 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>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Escapes">
+        <RegExpr attribute="Escape" context="#stay" String="\\[][;\\$`{}()|&amp;&lt;&gt;* ]" />
+      </context>
+      <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion">
+        <DetectSpaces context="#pop" lookAhead="true" />
+        <DetectChar attribute="Escape" context="#pop" char="}" />
+        <DetectChar attribute="Escape" context="BraceExpansion" char="{" />
+        <RegExpr attribute="Error" context="#stay" String="[^\s\{\}\\](?=\s|$)" />
+        <IncludeRules context="Escapes" />
+        <IncludeRules context="FindSubstitutions" />
+      </context>
 
       <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->
       <context attribute="Normal Text" lineEndContext="#stay" name="FindStrings">
@@ -800,7 +813,7 @@
       <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="VarAlt" String="(:?[-=?+@]|##?|%%?|\^\^?|,,?)" />
         <RegExpr attribute="Variable" context="VarSubst" String="//?" />
         <DetectChar attribute="Variable" context="VarSub" char=":" />
       </context>
@@ -827,16 +840,18 @@
 
       <!-- VarSub is to substrings of variables -->
       <context attribute="Error" lineEndContext="#stay" name="VarSub">
+        <DetectSpaces attribute="Variable" context="#stay" />
         <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]+(?=[:}])" />
+        <RegExpr attribute="Variable" context="#stay" String="([\-\+]\s*)?[0-9]+\s*(?=[:}])" />
         <IncludeRules context="FindSubstitutions" />
       </context>
       <context attribute="Error" lineEndContext="#stay" name="VarSub2">
+        <DetectSpaces attribute="Variable" context="#stay" />
         <DetectChar attribute="Variable" context="#pop#pop#pop" char="}" />
         <RegExpr attribute="Variable" context="#stay" String="&varname;" />
-        <RegExpr attribute="Variable" context="#stay" String="[0-9](?=[:}])" />
+        <RegExpr attribute="Variable" context="#stay" String="([\-\+]\s*)?[0-9]+\s*(?=[:}])" />
         <IncludeRules context="FindSubstitutions" />
       </context>
 
diff --git a/xml/c.xml b/xml/c.xml
--- a/xml/c.xml
+++ b/xml/c.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <language name="C" section="Sources"
-          version="4" kateversion="5.0"
+          version="5" kateversion="5.0"
           indenter="cstyle"
           extensions="*.c;*.C;*.h"
           mimetype="text/x-csrc;text/x-c++src;text/x-chdr"
@@ -119,28 +119,32 @@
         <DetectIdentifier />
         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="fF" attribute="Float" context="#stay"/>
-        </Float>
+        <Float attribute="Float" context="Float Suffixes"/>
         <HlCOct attribute="Octal" context="#stay"/>
         <HlCHex attribute="Hex" context="#stay"/>
         <RegExpr attribute="Binary" context="#stay" String="0b[01]+[ul]{0,3}" insensitive="true" />
-        <Int attribute="Decimal" context="#stay" >
-          <StringDetect attribute="Decimal" context="#stay" String="ULL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LUL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LLU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="UL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="U" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
-        </Int>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
         <IncludeRules context="##Doxygen" />
         <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
         <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+      </context>
+
+      <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <AnyChar String="fF" attribute="Float" context="#pop"/>
+      </context>
+
+      <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <StringDetect attribute="Decimal" context="#pop" String="ULL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LUL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LLU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="UL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="U" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
       </context>
 
       <context attribute="String" lineEndContext="#pop" name="String">
diff --git a/xml/clojure.xml b/xml/clojure.xml
--- a/xml/clojure.xml
+++ b/xml/clojure.xml
@@ -22,7 +22,7 @@
  * Boston, MA  02110-1301, USA.                                       *
  **********************************************************************
  -->
-<language version="9" kateversion="5.0" name="Clojure" section="Sources" extensions="*.clj;*.cljs;*.cljc" mimetype="" author="Dominik Haumann [lisp] modified for clojure by Caspar Hasenclever" license="LGPLv2+">
+<language version="10" kateversion="5.0" name="Clojure" section="Sources" extensions="*.clj;*.cljs;*.cljc" mimetype="" author="Dominik Haumann [lisp] modified for clojure by Caspar Hasenclever" license="LGPLv2+">
   <highlighting>
     <list name="definitions">
       <item>def</item>
@@ -736,13 +736,15 @@
         <RegExpr attribute="BaseN" context="#stay" String="0[xX][0-9A-Fa-f]+"/>
         <RegExpr attribute="BaseN" context="#stay" String="([12]?[0-9]|3[0-6])[rR][0-9a-zA-Z]+"/>
         <RegExpr attribute="Error" context="#stay" String="(3[7-9]|[0-9]*[4-9][0-9]+)[rR][0-9a-zA-Z]+"/>
-        <Float attribute="Float" context="#stay">
-            <StringDetect attribute="Decimal" context="#stay" String="M" insensitive="false"/>
-        </Float>
-        <Int attribute="Decimal" context="#stay">
-            <StringDetect attribute="Decimal" context="#stay" String="N" insensitive="false"/>
-        </Int>
+        <Float attribute="Float" context="Float Suffixes"/>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <DetectChar attribute="Brackets1" context="Level1" char="("/>
+      </context>
+      <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+            <StringDetect attribute="Float" context="#pop" String="M" insensitive="false"/>
+      </context>
+      <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+            <StringDetect attribute="Decimal" context="#pop" String="N" insensitive="false"/>
       </context>
       <context name="Comment" attribute="Comment" lineEndContext="#pop">
         <RegExpr String="(FIXME|TODO):?" attribute="Alert" context="#stay"/>
diff --git a/xml/cmake.xml b/xml/cmake.xml
--- a/xml/cmake.xml
+++ b/xml/cmake.xml
@@ -31,7 +31,7 @@
 
 <language
     name="CMake"
-    version="6"
+    version="8"
     kateversion="2.4"
     section="Other"
     extensions="CMakeLists.txt;*.cmake;*.cmake.in"
@@ -89,6 +89,7 @@
         <item>unset</item>
         <item>variable_watch</item>
         <item>while</item>
+        <item>add_compile_definitions</item>
         <item>add_compile_options</item>
         <item>add_custom_command</item>
         <item>add_custom_target</item>
@@ -269,6 +270,7 @@
     <list name="file_nargs">
       <item>APPEND</item>
       <item>CONDITION</item>
+      <item>CONFIGURE_DEPENDS</item>
       <item>CONTENT</item>
       <item>COPY</item>
       <item>DESTINATION</item>
@@ -336,6 +338,8 @@
       <item>TIMESTAMP</item>
       <item>TLS_CAINFO</item>
       <item>TLS_VERIFY</item>
+      <item>TOUCH</item>
+      <item>TOUCH_NOCREATE</item>
       <item>TO_CMAKE_PATH</item>
       <item>TO_NATIVE_PATH</item>
       <item>UPLOAD</item>
@@ -541,19 +545,30 @@
     </list>
     <list name="list_nargs">
       <item>APPEND</item>
+      <item>AT</item>
       <item>EXCLUDE</item>
       <item>FILTER</item>
       <item>FIND</item>
+      <item>FOR</item>
+      <item>GENEX_STRIP</item>
       <item>GET</item>
       <item>INCLUDE</item>
       <item>INSERT</item>
+      <item>JOIN</item>
       <item>LENGTH</item>
+      <item>OUTPUT_VARIABLE</item>
+      <item>PREPEND</item>
       <item>REGEX</item>
       <item>REMOVE_AT</item>
       <item>REMOVE_DUPLICATES</item>
       <item>REMOVE_ITEM</item>
+      <item>REPLACE</item>
       <item>REVERSE</item>
       <item>SORT</item>
+      <item>STRIP</item>
+      <item>SUBLIST</item>
+      <item>TOLOWER</item>
+      <item>TRANSFORM</item>
     </list>
     <list name="mark_as_advanced_nargs">
       <item>CLEAR</item>
@@ -618,6 +633,7 @@
       <item>GENEX_STRIP</item>
       <item>GREATER</item>
       <item>GREATER_EQUAL</item>
+      <item>JOIN</item>
       <item>LENGTH</item>
       <item>LESS</item>
       <item>LESS_EQUAL</item>
@@ -822,6 +838,7 @@
       <item>INCLUDES</item>
       <item>LIBRARY</item>
       <item>MESSAGE_NEVER</item>
+      <item>NAMELINK_COMPONENT</item>
       <item>NAMELINK_ONLY</item>
       <item>NAMELINK_SKIP</item>
       <item>NAMESPACE</item>
@@ -865,11 +882,14 @@
     </list>
     <list name="project_nargs">
       <item>DESCRIPTION</item>
+      <item>HOMEPAGE_URL</item>
       <item>LANGUAGES</item>
       <item>VERSION</item>
     </list>
     <list name="project_sargs">
+      <item>ASM</item>
       <item>C</item>
+      <item>CUDA</item>
       <item>CXX</item>
       <item>Fortran</item>
       <item>NONE</item>
@@ -957,6 +977,7 @@
       <item>cxx_std_11</item>
       <item>cxx_std_14</item>
       <item>cxx_std_17</item>
+      <item>cxx_std_20</item>
       <item>cxx_std_98</item>
       <item>cxx_strong_enums</item>
       <item>cxx_template_template_parameters</item>
@@ -1213,6 +1234,7 @@
       <item>CMAKE_DEPENDS_IN_PROJECT_ONLY</item>
       <item>CMAKE_DIRECTORY_LABELS</item>
       <item>CMAKE_DL_LIBS</item>
+      <item>CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION</item>
       <item>CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES</item>
       <item>CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT</item>
       <item>CMAKE_ECLIPSE_MAKE_ARGUMENTS</item>
@@ -1247,6 +1269,7 @@
       <item>CMAKE_FIND_ROOT_PATH_MODE_LIBRARY</item>
       <item>CMAKE_FIND_ROOT_PATH_MODE_PACKAGE</item>
       <item>CMAKE_FIND_ROOT_PATH_MODE_PROGRAM</item>
+      <item>CMAKE_FOLDER</item>
       <item>CMAKE_FRAMEWORK_PATH</item>
       <item>CMAKE_Fortran_FORMAT</item>
       <item>CMAKE_Fortran_MODDIR_DEFAULT</item>
@@ -1379,7 +1402,13 @@
       <item>CMAKE_PREFIX_PATH</item>
       <item>CMAKE_PROGRAM_PATH</item>
       <item>CMAKE_PROJECT_DESCRIPTION</item>
+      <item>CMAKE_PROJECT_HOMEPAGE_URL</item>
       <item>CMAKE_PROJECT_NAME</item>
+      <item>CMAKE_PROJECT_VERSION</item>
+      <item>CMAKE_PROJECT_VERSION_MAJOR</item>
+      <item>CMAKE_PROJECT_VERSION_MINOR</item>
+      <item>CMAKE_PROJECT_VERSION_PATCH</item>
+      <item>CMAKE_PROJECT_VERSION_TWEAK</item>
       <item>CMAKE_RANLIB</item>
       <item>CMAKE_REQUIRED_DEFINITIONS</item>
       <item>CMAKE_REQUIRED_FLAGS</item>
@@ -1411,6 +1440,7 @@
       <item>CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE</item>
       <item>CMAKE_SUPPRESS_DEVELOPER_ERRORS</item>
       <item>CMAKE_SUPPRESS_DEVELOPER_WARNINGS</item>
+      <item>CMAKE_SUPPRESS_REGENERATION</item>
       <item>CMAKE_SWIG_FLAGS</item>
       <item>CMAKE_SWIG_OUTDIR</item>
       <item>CMAKE_SYSROOT</item>
@@ -1453,6 +1483,13 @@
       <item>CMAKE_VS_PLATFORM_TOOLSET</item>
       <item>CMAKE_VS_PLATFORM_TOOLSET_CUDA</item>
       <item>CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE</item>
+      <item>CMAKE_VS_SDK_EXCLUDE_DIRECTORIES</item>
+      <item>CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES</item>
+      <item>CMAKE_VS_SDK_INCLUDE_DIRECTORIES</item>
+      <item>CMAKE_VS_SDK_LIBRARY_DIRECTORIES</item>
+      <item>CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES</item>
+      <item>CMAKE_VS_SDK_REFERENCE_DIRECTORIES</item>
+      <item>CMAKE_VS_SDK_SOURCE_DIRECTORIES</item>
       <item>CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION</item>
       <item>CMAKE_WARN_DEPRECATED</item>
       <item>CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION</item>
@@ -1593,14 +1630,33 @@
       <item>CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP</item>
       <item>CPACK_NSIS_PACKAGE_NAME</item>
       <item>CPACK_NSIS_URL_INFO_ABOUT</item>
+      <item>CPACK_NUGET_COMPONENT_INSTALL</item>
+      <item>CPACK_NUGET_PACKAGE_AUTHORS</item>
+      <item>CPACK_NUGET_PACKAGE_COPYRIGHT</item>
+      <item>CPACK_NUGET_PACKAGE_DEBUG</item>
+      <item>CPACK_NUGET_PACKAGE_DEPENDENCIES</item>
+      <item>CPACK_NUGET_PACKAGE_DESCRIPTION</item>
+      <item>CPACK_NUGET_PACKAGE_DESCRIPTION_SUMMARY</item>
+      <item>CPACK_NUGET_PACKAGE_HOMEPAGE_URL</item>
+      <item>CPACK_NUGET_PACKAGE_ICONURL</item>
+      <item>CPACK_NUGET_PACKAGE_LICENSEURL</item>
+      <item>CPACK_NUGET_PACKAGE_NAME</item>
+      <item>CPACK_NUGET_PACKAGE_OWNERS</item>
+      <item>CPACK_NUGET_PACKAGE_RELEASE_NOTES</item>
+      <item>CPACK_NUGET_PACKAGE_TAGS</item>
+      <item>CPACK_NUGET_PACKAGE_TITLE</item>
+      <item>CPACK_NUGET_PACKAGE_VERSION</item>
       <item>CPACK_OSX_PACKAGE_VERSION</item>
       <item>CPACK_OUTPUT_CONFIG_FILE</item>
       <item>CPACK_PACKAGE_CHECKSUM</item>
+      <item>CPACK_PACKAGE_CONTACT</item>
+      <item>CPACK_PACKAGE_DESCRIPTION</item>
       <item>CPACK_PACKAGE_DESCRIPTION_FILE</item>
       <item>CPACK_PACKAGE_DESCRIPTION_SUMMARY</item>
       <item>CPACK_PACKAGE_DIRECTORY</item>
       <item>CPACK_PACKAGE_EXECUTABLES</item>
       <item>CPACK_PACKAGE_FILE_NAME</item>
+      <item>CPACK_PACKAGE_HOMEPAGE_URL</item>
       <item>CPACK_PACKAGE_ICON</item>
       <item>CPACK_PACKAGE_INSTALL_DIRECTORY</item>
       <item>CPACK_PACKAGE_INSTALL_REGISTRY_KEY</item>
@@ -1823,6 +1879,7 @@
       <item>MSVC80</item>
       <item>MSVC90</item>
       <item>MSVC_IDE</item>
+      <item>MSVC_TOOLSET_VERSION</item>
       <item>MSVC_VERSION</item>
       <item>PACKAGE_FIND_NAME</item>
       <item>PACKAGE_FIND_VERSION</item>
@@ -1835,8 +1892,12 @@
       <item>PACKAGE_VERSION_COMPATIBLE</item>
       <item>PACKAGE_VERSION_EXACT</item>
       <item>PACKAGE_VERSION_UNSUITABLE</item>
+      <item>PKG_CONFIG_EXECUTABLE</item>
+      <item>PKG_CONFIG_USE_CMAKE_PREFIX_PATH</item>
+      <item>PKG_CONFIG_VERSION_STRING</item>
       <item>PROJECT_BINARY_DIR</item>
       <item>PROJECT_DESCRIPTION</item>
+      <item>PROJECT_HOMEPAGE_URL</item>
       <item>PROJECT_NAME</item>
       <item>PROJECT_SOURCE_DIR</item>
       <item>PROJECT_VERSION</item>
@@ -1919,6 +1980,7 @@
       <item>RULE_LAUNCH_LINK</item>
       <item>SOURCE_DIR</item>
       <item>SUBDIRECTORIES</item>
+      <item>TESTS</item>
       <item>TEST_INCLUDE_FILE</item>
       <item>TEST_INCLUDE_FILES</item>
       <item>VARIABLES</item>
@@ -1961,6 +2023,7 @@
       <item>BUILD_WITH_INSTALL_RPATH</item>
       <item>BUNDLE</item>
       <item>BUNDLE_EXTENSION</item>
+      <item>COMMON_LANGUAGE_RUNTIME</item>
       <item>COMPATIBLE_INTERFACE_BOOL</item>
       <item>COMPATIBLE_INTERFACE_NUMBER_MAX</item>
       <item>COMPATIBLE_INTERFACE_NUMBER_MIN</item>
@@ -1986,10 +2049,12 @@
       <item>C_STANDARD_REQUIRED</item>
       <item>DEFINE_SYMBOL</item>
       <item>DEPLOYMENT_REMOTE_DIRECTORY</item>
+      <item>DOTNET_TARGET_FRAMEWORK_VERSION</item>
       <item>ENABLE_EXPORTS</item>
       <item>EXCLUDE_FROM_ALL</item>
       <item>EXCLUDE_FROM_DEFAULT_BUILD</item>
       <item>EXPORT_NAME</item>
+      <item>EXPORT_PROPERTIES</item>
       <item>EchoString</item>
       <item>FOLDER</item>
       <item>FRAMEWORK</item>
@@ -2001,6 +2066,7 @@
       <item>HAS_CXX</item>
       <item>IMPLICIT_DEPENDS_INCLUDE_TRANSFORM</item>
       <item>IMPORTED</item>
+      <item>IMPORTED_COMMON_LANGUAGE_RUNTIME</item>
       <item>IMPORTED_CONFIGURATIONS</item>
       <item>IMPORTED_GLOBAL</item>
       <item>IMPORTED_IMPLIB</item>
@@ -2079,6 +2145,7 @@
       <item>VERSION</item>
       <item>VISIBILITY_INLINES_HIDDEN</item>
       <item>VS_CONFIGURATION_TYPE</item>
+      <item>VS_DEBUGGER_COMMAND</item>
       <item>VS_DEBUGGER_WORKING_DIRECTORY</item>
       <item>VS_DESKTOP_EXTENSIONS_VERSION</item>
       <item>VS_DOTNET_REFERENCES</item>
@@ -2141,6 +2208,7 @@
       <item>VS_SHADER_ENTRYPOINT</item>
       <item>VS_SHADER_FLAGS</item>
       <item>VS_SHADER_MODEL</item>
+      <item>VS_SHADER_OBJECT_FILE_NAME</item>
       <item>VS_SHADER_OUTPUT_HEADER_FILE</item>
       <item>VS_SHADER_TYPE</item>
       <item>VS_SHADER_VARIABLE_NAME</item>
@@ -2166,6 +2234,7 @@
       <item>MEASUREMENT</item>
       <item>PASS_REGULAR_EXPRESSION</item>
       <item>PROCESSORS</item>
+      <item>PROCESSOR_AFFINITY</item>
       <item>REQUIRED_FILES</item>
       <item>RESOURCE_LOCK</item>
       <item>RUN_SERIAL</item>
@@ -2208,9 +2277,11 @@
       <item>C_COMPILER_ID</item>
       <item>C_COMPILER_VERSION</item>
       <item>EQUAL</item>
+      <item>GENEX_EVAL</item>
       <item>IF</item>
       <item>INSTALL_INTERFACE</item>
       <item>INSTALL_PREFIX</item>
+      <item>IN_LIST</item>
       <item>JOIN</item>
       <item>LINK_ONLY</item>
       <item>LOWER_CASE</item>
@@ -2223,13 +2294,16 @@
       <item>STREQUAL</item>
       <item>TARGET_BUNDLE_CONTENT_DIR</item>
       <item>TARGET_BUNDLE_DIR</item>
+      <item>TARGET_EXISTS</item>
       <item>TARGET_FILE</item>
       <item>TARGET_FILE_DIR</item>
       <item>TARGET_FILE_NAME</item>
+      <item>TARGET_GENEX_EVAL</item>
       <item>TARGET_LINKER_FILE</item>
       <item>TARGET_LINKER_FILE_DIR</item>
       <item>TARGET_LINKER_FILE_NAME</item>
       <item>TARGET_NAME</item>
+      <item>TARGET_NAME_IF_EXISTS</item>
       <item>TARGET_OBJECTS</item>
       <item>TARGET_PDB_FILE</item>
       <item>TARGET_PDB_FILE_DIR</item>
@@ -2297,6 +2371,7 @@
         <WordDetect String="unset" insensitive="true" attribute="Command" context="unset_ctx" />
         <WordDetect String="variable_watch" insensitive="true" attribute="Command" context="variable_watch_ctx" />
         <WordDetect String="while" insensitive="true" attribute="Command" context="while_ctx" />
+        <WordDetect String="add_compile_definitions" insensitive="true" attribute="Command" context="add_compile_definitions_ctx" />
         <WordDetect String="add_compile_options" insensitive="true" attribute="Command" context="add_compile_options_ctx" />
         <WordDetect String="add_custom_command" insensitive="true" attribute="Command" context="add_custom_command_ctx" />
         <WordDetect String="add_custom_target" insensitive="true" attribute="Command" context="add_custom_target_ctx" />
@@ -2354,9 +2429,10 @@
         <WordDetect String="ctest_update" insensitive="true" attribute="Command" context="ctest_update_ctx" />
         <WordDetect String="ctest_upload" insensitive="true" attribute="Command" context="ctest_upload_ctx" />
         <RegExpr attribute="Region Marker" context="RST Documentation" String="^#\[(=*)\[\.rst:" column="0" />
-        <RegExpr attribute="Comment" context="Bracketed Comment" String="^#\[(=*)\[" column="0" />
+        <RegExpr attribute="Comment" context="Bracketed Comment" String="#\[(=*)\[" />
         <DetectChar attribute="Comment" context="Comment" char="#" />
         <DetectIdentifier attribute="User Function/Macro" context="User Function" />
+        <RegExpr attribute="@Variable Substitution" context="@VarSubst" String="@&id_re;@" lookAhead="true" />
         <!-- Include keywords matching for language autocompleter work -->
         <keyword attribute="Command" context="#stay" String="commands" />
       </context>
@@ -2768,6 +2844,13 @@
         <keyword attribute="Named Args" context="#stay" String="while_nargs" />
         <IncludeRules context="User Function Args" />
       </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="add_compile_definitions_ctx">
+        <DetectChar attribute="Normal Text" context="add_compile_definitions_ctx_op" char="(" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="add_compile_definitions_ctx_op">
+        <IncludeRules context="EndCmdPop2" />
+        <IncludeRules context="User Function Args" />
+      </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="add_compile_options_ctx">
         <DetectChar attribute="Normal Text" context="add_compile_options_ctx_op" char="(" />
       </context>
@@ -3319,7 +3402,10 @@
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_VERSION_MINOR\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_VERSION_PATCH\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_VERSION_TWEAK\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_ROOT\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;__TRYRUN_OUTPUT\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_CONSIDERED_CONFIGS\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_CONSIDERED_VERSIONS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_FIND_COMPONENTS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_FIND_QUIETLY\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_FIND_REQUIRED\b" />
@@ -3446,6 +3532,22 @@
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_DEBIAN_&id_re;_PACKAGE_SOURCE\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_DEBIAN_&id_re;_PACKAGE_SUGGESTS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NSIS_&id_re;_INSTALL_DIRECTORY\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_AUTHORS\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_COPYRIGHT\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_DEPENDENCIES\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_DEPENDENCIES_&id_re;_VERSION\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_DESCRIPTION\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_DESCRIPTION_SUMMARY\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_HOMEPAGE_URL\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_ICONURL\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_LICENSEURL\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_NAME\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_OWNERS\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_RELEASE_NOTES\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_TAGS\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_TITLE\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_VERSION\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_PACKAGE_DEPENDENCIES_&id_re;_VERSION\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_RPM_&id_re;_DEFAULT_DIR_PERMISSIONS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_RPM_&id_re;_DEFAULT_FILE_PERMISSIONS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_RPM_&id_re;_DEFAULT_GROUP\b" />
@@ -3488,6 +3590,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Variable Substitutions">
         <RegExpr attribute="Environment Variable Substitution" context="#stay" String="\$ENV\{\s*[\w-]+\s*\}" />
         <Detect2Chars attribute="Variable Substitution" context="VarSubst" char="$" char1="{" />
+        <RegExpr attribute="@Variable Substitution" context="@VarSubst" String="@&id_re;@" lookAhead="true" />
       </context>
 
       <context attribute="Variable Substitution" lineEndContext="#pop" name="VarSubst">
@@ -3497,12 +3600,23 @@
         <IncludeRules context="Detect Variable Substitutions" />
       </context>
 
+      <context attribute="@Variable Substitution" lineEndContext="#pop" name="@VarSubst">
+        <DetectChar attribute="@Variable Substitution" context="VarSubst@" char="@" />
+      </context>
+
+      <context attribute="@Variable Substitution" lineEndContext="#pop#pop" name="VarSubst@">
+        <IncludeRules context="Detect Builtin Variables" />
+        <DetectIdentifier />
+        <DetectChar attribute="@Variable Substitution" context="#pop#pop" char="@" />
+      </context>
+
       <context attribute="Normal Text" lineEndContext="#stay" name="User Function Args">
         <Detect2Chars attribute="Normal Text" context="#stay" char="\" char1="(" />
         <Detect2Chars attribute="Normal Text" context="#stay" char="\" char1=")" />
         <RegExpr attribute="Escapes" context="#stay" String="\\[&quot;$n\\]" />
         <DetectChar attribute="Strings" context="String" char="&quot;" />
         <RegExpr attribute="Strings" context="Bracketed String" String="\[(=*)\[" />
+        <RegExpr attribute="Comment" context="Bracketed Comment" String="#\[(=*)\[" />
         <DetectChar attribute="Comment" context="Comment" char="#" />
         <IncludeRules context="Detect Builtin Variables" />
         <IncludeRules context="Detect Variable Substitutions" />
@@ -3533,7 +3647,7 @@
       </context>
 
       <context attribute="Comment" lineEndContext="#stay" name="Bracketed Comment" dynamic="true">
-        <RegExpr attribute="Comment" context="#pop" String="^#?\]%1\]" dynamic="true" column="0" />
+        <RegExpr attribute="Comment" context="#pop" String=".*\]%1\]" dynamic="true" />
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
       </context>
@@ -3578,6 +3692,7 @@
       <itemData name="Escapes" defStyleNum="dsChar" spellChecking="false" />
       <itemData name="Builtin Variable" defStyleNum="dsDecVal" color="#c09050" selColor="#c09050" spellChecking="false" />
       <itemData name="Variable Substitution" defStyleNum="dsDecVal" spellChecking="false" />
+      <itemData name="@Variable Substitution" defStyleNum="dsBaseN" spellChecking="false" />
       <itemData name="Internal Name" defStyleNum="dsDecVal" color="#303030" selColor="#303030" spellChecking="false" />
       <itemData name="Environment Variable Substitution" defStyleNum="dsFloat" spellChecking="false" />
       <itemData name="Generator Expression Keyword" defStyleNum="dsKeyword" color="#b84040" selColor="#b84040" spellChecking="false" />
diff --git a/xml/coffee.xml b/xml/coffee.xml
--- a/xml/coffee.xml
+++ b/xml/coffee.xml
@@ -2,11 +2,11 @@
 <!DOCTYPE language SYSTEM "language.dtd">
 
 <language name="CoffeeScript"
-          version="3"
+          version="8"
           kateversion="3.4"
           section="Scripts"
-          extensions="Cakefile;*.coffee;*.coco"
-          mimetype="text/x-coffeescript;application/x-coffeescript"
+          extensions="Cakefile;*.coffee;*.coco;*.cson"
+          mimetype="text/x-coffeescript;application/x-coffeescript;application/vnd.coffeescript"
           indenter="python"
           casesensitive="1"
           author="Max Shawabkeh (max99x@gmail.com)"
@@ -166,6 +166,7 @@
         <DetectChar attribute="String" context="String" char="'"/>
         <DetectChar attribute="String" context="Rich String" char="&quot;"/>
         <!-- Embedded JavaScript. -->
+        <StringDetect attribute="Javascript" context="Javascript Triple Backticks" String="```" beginRegion="Javascript TB"/>
         <DetectChar attribute="Javascript" context="Javascript" char="`" beginRegion="Javascript"/>
         <!-- Comments. -->
         <StringDetect attribute="Comment" context="Multiline Comment" String="###" beginRegion="Comment"/>
@@ -173,6 +174,8 @@
         <!-- Regular expressions. -->
         <StringDetect attribute="Regex" context="Multiline Regex" String="///" beginRegion="Multiline Regex"/>
         <RegExpr attribute="Regex" context="#stay" String="/([^/\\\r\n]|\\.)*/[mig]{0,3}"/>
+        <!-- Member objects. -->
+        <DetectChar attribute="Symbol" context="Member Object" char="."/>
         <!-- Operators and other non-alphanumeric symbols. -->
         <AnyChar attribute="Symbol" context="#stay" String="():!%&amp;+,-/.*&lt;=&gt;?[]|~^&#59;{}"/>
       </context>
@@ -187,44 +190,107 @@
         <DetectSpaces/>
         <RegExpr attribute="Class" context="#pop" String="[@$:.\w\[\]]+"/>
       </context>
+      <!-- Member objects. -->
+      <context name="Member Object" attribute="Normal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="Identifier" context="#pop" String="\s*[_$a-z][$\w]*" insensitive="true"/>
+      </context>
       <!-- Comments. -->
       <context name="Comment" attribute="Comment" lineEndContext="#pop">
-        <IncludeRules context="##Alerts_indent"/>
+        <IncludeRules context="##Alerts"/>
       </context>
       <context name="Multiline Comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="1">
         <StringDetect attribute="Comment" context="#pop" String="###" endRegion="Comment"/>
-        <IncludeRules context="##Alerts_indent"/>
+        <IncludeRules context="##Alerts"/>
       </context>
       <!-- Single-line strings. -->
       <context name="String" attribute="String" lineEndContext="#stay">
-        <HlCStringChar attribute="String" context="#stay"/>
+        <IncludeRules context="Escape"/>
         <DetectChar attribute="String" context="#pop" char="'"/>
       </context>
       <context name="Rich String" attribute="String" lineEndContext="#stay">
-        <HlCStringChar attribute="String" context="#stay"/>
+        <IncludeRules context="Escape"/>
         <Detect2Chars attribute="Embedding" context="Embedding" char="#" char1="{"/>
         <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
       <!-- Multi-line strings. -->
       <context name="Heredoc" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="1">
-        <HlCStringChar attribute="String" context="#stay"/>
+        <IncludeRules context="Escape"/>
         <StringDetect attribute="String" context="#pop" String="'''" endRegion="Heredoc"/>
       </context>
       <context name="Rich Heredoc" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="1">
-        <HlCStringChar attribute="String" context="#stay"/>
+        <IncludeRules context="Escape"/>
         <Detect2Chars attribute="Embedding" context="Embedding" char="#" char1="{"/>
         <StringDetect attribute="String" context="#pop" String="&quot;&quot;&quot;" endRegion="Rich Heredoc"/>
       </context>
+      <!-- Escaped characters. -->
+      <context name="Escape" attribute="String" lineEndContext="#stay">
+        <!-- Hexadecimal, unicode & reserved character escape sequences. -->
+        <RegExpr attribute="Escape" context="#stay" String="\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u\{[0-9a-fA-F]+\}|[\\0bfnrtv&quot;&apos;])"/>
+        <!-- Invalid escapes. Octal escape sequences are not allowed. -->
+        <RegExpr attribute="Error" context="#stay" String="\\[ux1-7]"/>
+        <!-- Make any character literal. -->
+        <RegExpr attribute="Literal Character Escape" context="#stay" String="\\."/>
+        <LineContinue attribute="Escape" context="#stay"/>
+      </context>
       <!-- Expressions embedded in strings. -->
       <context name="Embedding" attribute="Normal" lineEndContext="#stay">
         <DetectChar attribute="Embedding" context="#pop" char="}"/>
       </context>
-      <!-- Embedded Javascript. -->
-      <context name="Javascript" attribute="Javascript" lineEndContext="#stay" noIndentationBasedFolding="1">
+
+      <!-- Embedded Javascript (one backtick). -->
+      <context name="Javascript" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
         <DetectChar attribute="Javascript" context="#pop" char="`" endRegion="Javascript"/>
-        <!-- NOTE: This hides errors where a backtick is embedded in a JS string. -->
+        <!-- NOTE: This hides errors where a backtick is embedded in a JS string or a comment. -->
+        <IncludeRules context="Overwrite Javascript"/>
         <IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
       </context>
+      <!-- Allow template strings in JavaScript embedded code (with one backtick). -->
+      <context name="Overwrite Javascript" attribute="Javascript" lineEndContext="#stay" noIndentationBasedFolding="1">
+        <!-- JavaScript Template. -->
+        <Detect2Chars attribute="JavaScript Template" context="Javascript Template" char="\" char1="`"/>
+        <RegExpr attribute="Error" context="#stay" String="String\.raw(?=`)"/>
+        <StringDetect attribute="JavaScript Template" context="Javascript RawTemplate" String="String.raw\`"/>
+        <!-- Contexts of javascript.xml. -->
+        <DetectChar attribute="JavaScript Symbol" context="JavaScript Object" char="{" beginRegion="Brace" />
+      </context>
+      <context name="JavaScript Object" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
+        <DetectChar context="#pop" char="`" lookAhead="true"/>
+        <DetectChar attribute="JavaScript Symbol" context="#pop" char="}" endRegion="Brace"/>
+        <IncludeRules context="Overwrite Javascript"/>
+        <IncludeRules context="Object##JavaScript"/>
+      </context>
+      <context name="Javascript Template" attribute="JavaScript Template" lineEndContext="#stay" noIndentationBasedFolding="1">
+        <RegExpr attribute="Escape" context="#stay" String="\\\\\\`"/>
+        <Detect2Chars attribute="JavaScript Template" context="#pop" char="\" char1="`"/> <!-- End template. -->
+        <DetectChar context="#pop" char="`" lookAhead="true"/>
+        <Detect2Chars attribute="JavaScript Substitution" context="Javascript Substitution" char="$" char1="{"/>
+        <IncludeRules context="Template##JavaScript"/>
+        <RegExpr attribute="Error" context="#stay" String="([^\\\s](?=`)|\S(?=\s+`))"/>
+      </context>
+      <context name="Javascript RawTemplate" attribute="JavaScript Template" lineEndContext="#stay">
+        <Detect2Chars attribute="JavaScript Template" context="#stay" char="\" char1="\"/>
+        <Detect2Chars attribute="JavaScript Template" context="#pop" char="\" char1="`"/>
+        <DetectChar context="#pop" char="`" lookAhead="true"/>
+        <RegExpr attribute="Error" context="#stay" String="([^\\\s](?=`)|\S(?=\s+`))"/>
+      </context>
+      <context name="Javascript Substitution" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
+        <DetectChar attribute="Javascript" context="#pop" char="`" lookAhead="true"/>
+        <DetectChar context="#pop" attribute="JavaScript Substitution" char="}"/>
+        <IncludeRules context="Overwrite Javascript"/>
+        <IncludeRules context="Substitution##JavaScript"/>
+      </context>
+      <!-- Embedded Javascript (triple backticks). -->
+      <context name="Javascript Triple Backticks" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
+        <StringDetect attribute="Javascript" context="#pop" String="```" endRegion="Javascript TB"/>
+        <DetectChar attribute="JavaScript Symbol" context="JavaScript-TB Object" char="{" beginRegion="Brace"/>
+        <IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
+      </context>
+      <context name="JavaScript-TB Object" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
+        <StringDetect attribute="Javascript" context="#pop" String="```" lookAhead="true"/>
+        <DetectChar attribute="JavaScript Symbol" context="#pop" char="}" endRegion="Brace"/>
+        <DetectChar attribute="JavaScript Symbol" context="JavaScript-TB Object" char="{" beginRegion="Brace"/>
+        <IncludeRules context="Object##JavaScript"/>
+      </context>
     </contexts>
     <!-- Style mappings. -->
     <itemDatas>
@@ -250,17 +316,23 @@
       <!-- Context-sensitive globals - not styled by default. -->
       <itemData name="Browser Globals" defStyleNum="dsNormal" spellChecking="false"/>
       <itemData name="Node.js Globals" defStyleNum="dsNormal" spellChecking="false"/>
+      <itemData name="Escape" defStyleNum="dsSpecialChar" spellChecking="false" />
+      <itemData name="Literal Character Escape" defStyleNum="dsChar" spellChecking="false" />
+      <itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
+
+      <itemData name="JavaScript Symbol" defStyleNum="dsOperator" spellChecking="false"/>
+      <itemData name="JavaScript Template" defStyleNum="dsVerbatimString"/>
+      <itemData name="JavaScript Substitution" defStyleNum="dsSpecialChar" spellChecking="false"/>
     </itemDatas>
   </highlighting>
   <!-- Global settings. -->
   <general>
-    <indentation mode="python"/>
     <folding indentationsensitive="1"/>
     <comments>
       <comment name="singleLine" start="#"/>
       <comment name="multiLine" start="###" end="###" region="Comment"/>
     </comments>
-    <keywords casesensitive="1" additionalDeliminator="#'"/>
+    <keywords casesensitive="1" additionalDeliminator="#'`"/>
     <emptyLines>
       <emptyLine regexpr="(?:\s+|\s*#.*)"/>
     </emptyLines>
diff --git a/xml/cs.xml b/xml/cs.xml
--- a/xml/cs.xml
+++ b/xml/cs.xml
@@ -1,5 +1,5 @@
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="C#" version="3" kateversion="5.0" section="Sources" extensions="*.cs" mimetype="text/x-csharp-src;text/x-csharp-hde">
+<language name="C#" version="5" kateversion="5.0" section="Sources" extensions="*.cs" mimetype="text/x-csharp-src;text/x-csharp-hde" indenter="cstyle" style="C++">
   <highlighting>
     <list name="keywords">
       <item>abstract</item>
@@ -94,21 +94,10 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
         <keyword attribute="Keyword" context="#stay" String="keywords"/>
         <keyword attribute="Data Type" context="#stay" String="types" />
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="fF" attribute="Float" context="#stay"/>
-        </Float>
+        <Float attribute="Float" context="Float Suffixes"/>
         <HlCOct attribute="Octal" context="#stay"/>
         <HlCHex attribute="Hex" context="#stay"/>
-        <Int attribute="Decimal" context="#stay" >
-          <StringDetect attribute="Decimal" context="#stay" String="ULL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LUL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LLU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="UL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="U" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
-        </Int>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
         <IncludeRules context="##Doxygen" />
@@ -126,6 +115,19 @@
         <RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*[(])" />
         <RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" />
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+      </context>
+      <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <AnyChar String="fF" attribute="Float" context="#pop"/>
+      </context>
+      <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <StringDetect attribute="Decimal" context="#pop" String="ULL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LUL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LLU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="UL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="U" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
       </context>
       <context attribute="String" lineEndContext="#pop" name="String">
         <LineContinue attribute="String" context="#pop"/>
diff --git a/xml/css.xml b/xml/css.xml
--- a/xml/css.xml
+++ b/xml/css.xml
@@ -1,1053 +1,1732 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-  <!-- http://www.w3.org/TR/CSS21/syndata.html#tokenization -->
-  <!ENTITY nmstart "[_a-zA-Z]|(\\[0-9a-fA-F]{1,6})|(\\[^\n\r\f0-9a-fA-F])">
-  <!ENTITY nmchar  "[_a-zA-Z0-9-]|(\\[0-9a-fA-F]{1,6})|(\\[^\n\r\f0-9a-fA-F])">
-]>
-
-<!--
-
-Kate CSS syntax highlighting definition
-
-Changelog:
-
-- Version 4, by Guo Yunhe guoyunhebrave@gmail.com
-- Remake for complex CSS syntax, avoid errors
-
-- Version 2.13, by Guo Yunhe
-- Add all W3C Work Draft properties
-
-- Version 2.06, by Mte90:
-- CSS3 tag
-
-- Version 2.03, by Milian Wolff:
-- Make it spelling aware
-
-- Version 2.08, Joseph Wenninger:
-- CSS3 media queries
-
--->
-
-<language name="CSS" version="6" kateversion="5.0" section="Markup" extensions="*.css" indenter="cstyle" mimetype="text/css" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
-
-    <highlighting>
-        <list name="properties">
-            <!-- W3C > Work Draft, from https://www.w3.org/Style/CSS/all-properties -->
-            <item>azimuth</item>
-            <item>align-content</item>
-            <item>align-items</item>
-            <item>align-self</item>
-            <item>alignment-baseline</item>
-            <item>all</item>
-            <item>animation-name</item>
-            <item>animation-duration</item>
-            <item>animation-iteration-count</item>
-            <item>animation-direction</item>
-            <item>animation-delay</item>
-            <item>animation-play-state</item>
-            <item>animation-fill-mode</item>
-            <item>animation-timing-function</item>
-            <item>backface-visibility</item>
-            <item>background</item>
-            <item>background-attachment</item>
-            <item>background-blend-mode</item>
-            <item>background-break</item>
-            <item>background-clip</item>
-            <item>background-color</item>
-            <item>background-image</item>
-            <item>background-origin</item>
-            <item>background-position</item>
-            <item>background-repeat</item>
-            <item>background-size</item>
-            <item>baseline-shift</item>
-            <item>bookmark-label</item>
-            <item>bookmark-level</item>
-            <item>bookmark-level</item>
-            <item>border</item>
-            <item>border-bottom</item>
-            <item>border-bottom-color</item>
-            <item>border-bottom-image</item>
-            <item>border-bottom-style</item>
-            <item>border-bottom-width</item>
-            <item>border-bottom-left-image</item>
-            <item>border-bottom-left-radius</item>
-            <item>border-bottom-right-image</item>
-            <item>border-bottom-right-radius</item>
-            <item>border-boundary</item>
-            <item>border-collapse</item>
-            <item>border-color</item>
-            <item>border-corner-image</item>
-            <item>border-image</item>
-            <item>border-image-outset</item>
-            <item>border-image-repeat</item>
-            <item>border-image-slice</item>
-            <item>border-image-source</item>
-            <item>border-image-width</item>
-            <item>border-left</item>
-            <item>border-left-color</item>
-            <item>border-left-image</item>
-            <item>border-left-style</item>
-            <item>border-left-width</item>
-            <item>border-radius</item>
-            <item>border-right</item>
-            <item>border-right-color</item>
-            <item>border-right-image</item>
-            <item>border-right-style</item>
-            <item>border-right-width</item>
-            <item>border-spacing</item>
-            <item>border-style</item>
-            <item>border-top</item>
-            <item>border-top-color</item>
-            <item>border-top-image</item>
-            <item>border-top-style</item>
-            <item>border-top-width</item>
-            <item>border-top-left-image</item>
-            <item>border-top-left-radius</item>
-            <item>border-top-right-image</item>
-            <item>border-top-right-radius</item>
-            <item>border-width</item>
-            <item>bottom</item>
-            <item>box-align</item>
-            <item>box-decoration-break</item>
-            <item>box-direction</item>
-            <item>box-flex</item>
-            <item>box-shadow</item>
-            <item>box-sizing</item>
-            <item>box-snap</item>
-            <item>box-suppress</item>
-            <item>break-after</item>
-            <item>break-before</item>
-            <item>break-inside</item>
-            <item>caret-color</item>
-            <item>caption-side</item>
-            <item>chains</item>
-            <item>clear</item>
-            <item>clip</item>
-            <item>clip-path</item>
-            <item>clip-rule</item>
-            <item>color</item>
-            <item>color-interpolation-filters</item>
-            <item>column-count</item>
-            <item>column-fill</item>
-            <item>column-gap</item>
-            <item>column-rule</item>
-            <item>column-rule-color</item>
-            <item>column-rule-style</item>
-            <item>column-rule-width</item>
-            <item>column-span</item>
-            <item>column-width</item>
-            <item>columns</item>
-            <item>content</item>
-            <item>counter-increment</item>
-            <item>counter-reset</item>
-            <item>counter-set</item>
-            <item>cue</item>
-            <item>cue-after</item>
-            <item>cue-before</item>
-            <item>cursor</item>
-            <item>direction</item>
-            <item>display</item>
-            <item>dominant-baseline</item>
-            <item>elevation</item>
-            <item>empty-cells</item>
-            <item>filter</item>
-            <item>flex</item>
-            <item>flex-basis</item>
-            <item>flex-direction</item>
-            <item>flex-flow</item>
-            <item>flex-grow</item>
-            <item>flex-shrink</item>
-            <item>flex-wrap</item>
-            <item>float</item>
-            <item>flood-color</item>
-            <item>flood-opacity</item>
-            <item>flow</item>
-            <item>flow-from</item>
-            <item>flow-into</item>
-            <item>font</item>
-            <item>font-family</item>
-            <item>font-size</item>
-            <item>font-size-adjust</item>
-            <item>font-stretch</item>
-            <item>font-style</item>
-            <item>font-variant</item>
-            <item>font-weight</item>
-            <item>font-stretch</item>
-            <item>font-feature-settings</item>
-            <item>font-kerning</item>
-            <item>font-language-override</item>
-            <item>font-synthesis</item>
-            <item>font-variant-alternates</item>
-            <item>font-variant-caps</item>
-            <item>font-variant-east-asian</item>
-            <item>font-variant-ligatures</item>
-            <item>font-variant-numeric</item>
-            <item>font-variant-position</item>
-            <item>footnote-display</item>
-            <item>footnote-policy</item>
-            <item>glyph-orientation-vertical</item>
-            <item>grid</item>
-            <item>grid-area</item>
-            <item>grid-auto-columns</item>
-            <item>grid-auto-flow</item>
-            <item>grid-auto-rows</item>
-            <item>grid-column</item>
-            <item>grid-column-end</item>
-            <item>grid-column-gap</item>
-            <item>grid-column-start</item>
-            <item>grid-gap</item>
-            <item>grid-row</item>
-            <item>grid-row-end</item>
-            <item>grid-row-gap</item>
-            <item>grid-row-start</item>
-            <item>grid-template</item>
-            <item>grid-template-areas</item>
-            <item>grid-template-columns</item>
-            <item>grid-template-rows</item>
-            <item>hanging-punctuation</item>
-            <item>height</item>
-            <item>hyphens</item>
-            <item>image-orientation</item>
-            <item>image-rendering</item>
-            <item>image-resolution</item>
-            <item>initial-letter</item>
-            <item>initial-letter-align</item>
-            <item>initial-letter-wrap</item>
-            <item>isolation</item>
-            <item>justify-content</item>
-            <item>justify-items</item>
-            <item>justify-self</item>
-            <item>left</item>
-            <item>letter-spacing</item>
-            <item>lighting-color</item>
-            <item>linear-gradient</item>
-            <item>line-grid</item>
-            <item>line-height</item>
-            <item>line-snap</item>
-            <item>list-style</item>
-            <item>list-style-image</item>
-            <item>list-style-keyword</item>
-            <item>list-style-position</item>
-            <item>list-style-type</item>
-            <item>margin</item>
-            <item>margin-bottom</item>
-            <item>margin-left</item>
-            <item>margin-right</item>
-            <item>margin-top</item>
-            <item>marker-offset</item>
-            <item>marker-side</item>
-            <item>marquee-direction</item>
-            <item>marquee-loop</item>
-            <item>marquee-speed</item>
-            <item>marquee-style</item>
-            <item>mask</item>
-            <item>mask-border</item>
-            <item>mask-border-mode</item>
-            <item>mask-border-outset</item>
-            <item>mask-border-repeat</item>
-            <item>mask-border-slice</item>
-            <item>mask-border-source</item>
-            <item>mask-border-width</item>
-            <item>mask-clip</item>
-            <item>mask-composite</item>
-            <item>mask-image</item>
-            <item>mask-mode</item>
-            <item>mask-origin</item>
-            <item>mask-position</item>
-            <item>mask-repeat</item>
-            <item>mask-size</item>
-            <item>mask-type</item>
-            <item>max-height</item>
-            <item>max-lines</item>
-            <item>max-width</item>
-            <item>min-height</item>
-            <item>min-width</item>
-            <item>mix-blend-mode</item>
-            <item>nav-down</item>
-            <item>nav-left</item>
-            <item>nav-right</item>
-            <item>nav-up</item>
-            <item>object-fit</item>
-            <item>object-position</item>
-            <item>offset-after</item>
-            <item>offset-before</item>
-            <item>offset-end</item>
-            <item>offset-start</item>
-            <item>opacity</item>
-            <item>order</item>
-            <item>orphans</item>
-            <item>outline</item>
-            <item>outline-color</item>
-            <item>outline-offset</item>
-            <item>outline-style</item>
-            <item>outline-width</item>
-            <item>overflow</item>
-            <item>overflow-style</item>
-            <item>overflow-wrap</item>
-            <item>overflow-x</item>
-            <item>overflow-y</item>
-            <item>padding</item>
-            <item>padding-bottom</item>
-            <item>padding-left</item>
-            <item>padding-right</item>
-            <item>padding-top</item>
-            <item>page</item>
-            <item>page-break-after</item>
-            <item>page-break-before</item>
-            <item>page-break-inside</item>
-            <item>pause</item>
-            <item>pause-after</item>
-            <item>pause-before</item>
-            <item>perspective</item>
-            <item>perspective-origin</item>
-            <item>pitch</item>
-            <item>pitch-range</item>
-            <item>play-during</item>
-            <item>pointer-events</item>
-            <item>polar-anchor</item>
-            <item>polar-angle</item>
-            <item>polar-distance</item>
-            <item>polar-origin</item>
-            <item>position</item>
-            <item>presentation-level</item>
-            <item>quotes</item>
-            <item>resize</item>
-            <item>rest</item>
-            <item>rest-after</item>
-            <item>rest-before</item>
-            <item>richness</item>
-            <item>right</item>
-            <item>rotation</item>
-            <item>rotation-point</item>
-            <item>ruby-align</item>
-            <item>ruby-merge</item>
-            <item>ruby-position</item>
-            <item>running</item>
-            <item>scroll-behavior</item>
-            <item>scroll-snap-align</item>
-            <item>scroll-snap-margin</item>
-            <item>scroll-snap-margin-block</item>
-            <item>scroll-snap-margin-block-end</item>
-            <item>scroll-snap-margin-block-start</item>
-            <item>scroll-snap-margin-bottom</item>
-            <item>scroll-snap-margin-inline</item>
-            <item>scroll-snap-margin-inline-end</item>
-            <item>scroll-snap-margin-inline-start</item>
-            <item>scroll-snap-margin-left</item>
-            <item>scroll-snap-margin-right</item>
-            <item>scroll-snap-margin-top</item>
-            <item>scroll-snap-padding</item>
-            <item>scroll-snap-padding-block</item>
-            <item>scroll-snap-padding-block-end</item>
-            <item>scroll-snap-padding-block-start</item>
-            <item>scroll-snap-padding-bottom</item>
-            <item>scroll-snap-padding-inline</item>
-            <item>scroll-snap-padding-inline-end</item>
-            <item>scroll-snap-padding-inline-start</item>
-            <item>scroll-snap-padding-left</item>
-            <item>scroll-snap-padding-right</item>
-            <item>scroll-snap-padding-top</item>
-            <item>scroll-snap-stop</item>
-            <item>scroll-snap-type</item>
-            <item>shape-image-threshold</item>
-            <item>shape-inside</item>
-            <item>shape-margin</item>
-            <item>shape-outside</item>
-            <item>size</item>
-            <item>speak</item>
-            <item>speak-as</item>
-            <item>speak-header</item>
-            <item>speak-numeral</item>
-            <item>speak-punctuation</item>
-            <item>speech-rate</item>
-            <item>stress</item>
-            <item>string-set</item>
-            <item>tab-size</item>
-            <item>table-layout</item>
-            <item>text-align</item>
-            <item>text-align-last</item>
-            <item>text-combine-upright</item>
-            <item>text-decoration</item>
-            <item>text-decoration-color</item>
-            <item>text-decoration-line</item>
-            <item>text-decoration-skip</item>
-            <item>text-decoration-style</item>
-            <item>text-emphasis</item>
-            <item>text-emphasis-color</item>
-            <item>text-emphasis-position</item>
-            <item>text-emphasis-style</item>
-            <item>text-indent</item>
-            <item>text-justify</item>
-            <item>text-orientation</item>
-            <item>text-overflow</item>
-            <item>text-shadow</item>
-            <item>text-transform</item>
-            <item>text-underline-position</item>
-            <item>text-wrap</item>
-            <item>top</item>
-            <item>transform</item>
-            <item>transform-origin</item>
-            <item>transform-style</item>
-            <item>transition</item>
-            <item>transition-delay</item>
-            <item>transition-property</item>
-            <item>transition-duration</item>
-            <item>transition-timing-function</item>
-            <item>unicode-bidi</item>
-            <item>vertical-align</item>
-            <item>visibility</item>
-            <item>voice-balance</item>
-            <item>voice-duration</item>
-            <item>voice-family</item>
-            <item>voice-pitch</item>
-            <item>voice-range</item>
-            <item>voice-rate</item>
-            <item>voice-stress</item>
-            <item>voice-volume</item>
-            <item>volume</item>
-            <item>white-space</item>
-            <item>widows</item>
-            <item>width</item>
-            <item>will-change</item>
-            <item>word-break</item>
-            <item>word-spacing</item>
-            <item>word-wrap</item>
-            <item>wrap-flow</item>
-            <item>wrap-through</item>
-            <item>writing-mode</item>
-            <item>z-index</item>
-
-            <!-- Gecko rendering engine CSS property extensions -->
-            <item>-moz-animation-name</item>
-            <item>-moz-animation-duration</item>
-            <item>-moz-animation-iteration</item>
-            <item>-moz-animation-direction</item>
-            <item>-moz-animation-delay</item>
-            <item>-moz-animation-play-state</item>
-            <item>-moz-animation-fill-mode</item>
-            <item>-moz-background-size</item>
-            <item>-moz-border-image</item>
-            <item>-moz-border-bottom-colors</item>
-            <item>-moz-border-left-colors</item>
-            <item>-moz-border-radius</item>
-            <item>-moz-border-radius-topleft</item>
-            <item>-moz-border-radius-topright</item>
-            <item>-moz-border-radius-bottomleft</item>
-            <item>-moz-border-radius-bottomright</item>
-            <item>-moz-border-right-colors</item>
-            <item>-moz-border-top-colors</item>
-            <item>-moz-box</item>
-            <item>-moz-box-flex</item>
-            <item>-moz-box-shadow</item>
-            <item>-moz-box-sizing</item>
-            <item>-moz-column-count</item>
-            <item>-moz-column-gap</item>
-            <item>-moz-hyphens</item>
-            <item>-moz-linear-gradient</item>
-            <item>-moz-opacity</item>
-            <item>-moz-outline-style</item>
-            <item>-moz-perspective</item>
-            <item>-moz-radial-gradient</item>
-            <item>-moz-resize</item>
-            <item>-moz-transform</item>
-            <item>-moz-transform-origin</item>
-            <item>-moz-transform-style</item>
-            <item>-moz-transition</item>
-            <item>-moz-transition-property</item>
-            <item>-moz-transition-duration</item>
-
-            <!-- Opera rendering engine CSS property extensions -->
-            <item>-o-background-size</item>
-            <item>-o-linear-gradient</item>
-            <item>-o-text-overflow</item>
-            <item>-o-transition</item>
-            <item>-o-transform-origin</item>
-
-            <!-- konq specific -->
-            <item>konq_bgpos_x</item>
-            <item>konq_bgpos_y</item>
-            <item>-khtml-background-size</item>
-            <item>-khtml-border-top-left-radius</item>
-            <item>-khtml-border-top-right-radius</item>
-            <item>-khtml-border-bottom-left-radius</item>
-            <item>-khtml-border-bottom-right-radius</item>
-            <item>-khtml-border-radius</item>
-            <item>-khtml-box-shadow</item>
-            <item>-khtml-opacity</item>
-
-            <!-- Webkit rendering engine CSS property extensions -->
-            <item>-webkit-appearance</item>
-            <item>-webkit-animation-name</item>
-            <item>-webkit-animation-duration</item>
-            <item>-webkit-animation-iteration</item>
-            <item>-webkit-animation-direction</item>
-            <item>-webkit-animation-delay</item>
-            <item>-webkit-animation-play-state</item>
-            <item>-webkit-animation-fill-mode</item>
-            <item>-webkit-background-size</item>
-            <item>-webkit-border-image</item>
-            <item>-webkit-border-bottom-colors</item>
-            <item>-webkit-border-left-colors</item>
-            <item>-webkit-border-radius</item>
-            <item>-webkit-border-right-colors</item>
-            <item>-webkit-border-top-colors</item>
-            <item>-webkit-border-top-left-radius</item>
-            <item>-webkit-border-top-right-radius</item>
-            <item>-webkit-border-bottom-left-radius</item>
-            <item>-webkit-border-bottom-right-radius</item>
-            <item>-webkit-border-radius-bottomleft</item>
-            <item>-webkit-border-radius-bottomright</item>
-            <item>-webkit-box-flex</item>
-            <item>-webkit-box-reflect</item>
-            <item>-webkit-box-shadow</item>
-            <item>-webkit-box-sizing</item>
-            <item>-webkit-column-count</item>
-            <item>-webkit-column-gap</item>
-            <item>-webkit-hyphens</item>
-            <item>-webkit-linear-gradient</item>
-            <item>-webkit-gradient</item>
-            <item>-webkit-perspective</item>
-            <item>-webkit-text-fill-color</item>
-            <item>-webkit-text-stroke-color</item>
-            <item>-webkit-text-stroke-width</item>
-            <item>-webkit-text-size-adjust</item>
-            <item>-webkit-transform</item>
-            <item>-webkit-transform-origin</item>
-            <item>-webkit-transform-style</item>
-            <item>-webkit-transition</item>
-            <item>-webkit-transition-property</item>
-            <item>-webkit-transition-duration</item>
-
-            <!-- Trident (a.k.a., MSHTML) CSS property extensions -->
-            <item>zoom</item>
-            <item>-ms-animation-name</item>
-            <item>-ms-animation-duration</item>
-            <item>-ms-animation-iteration</item>
-            <item>-ms-animation-direction</item>
-            <item>-ms-animation-delay</item>
-            <item>-ms-animation-play-state</item>
-            <item>-ms-animation-fill-mode</item>
-            <item>-ms-box-sizing</item>
-            <item>-ms-filter</item>
-            <item>-ms-interpolation-mode</item>
-            <item>-ms-linear-gradient</item>
-            <item>-ms-text-size-adjust</item>
-            <item>-ms-transform</item>
-            <item>-ms-transition</item>
-
-            <!-- font properties in @font-face -->
-            <item>font-family</item>
-            <item>font-size</item>
-            <item>font-stretch</item>
-            <item>font-style</item>
-            <item>font-variant</item>
-            <item>font-weight</item>
-            <item>unicode-range</item>
-            <item>units-per-em</item>
-            <item>src</item>
-            <item>panose-1</item>
-            <item>stemv</item>
-            <item>stemh</item>
-            <item>slope</item>
-            <item>cap-height</item>
-            <item>x-height</item>
-            <item>ascent</item>
-            <item>descent</item>
-            <item>widths</item>
-            <item>bbox</item>
-            <item>definition-src</item>
-            <item>baseline</item>
-            <item>centerline</item>
-            <item>mathline</item>
-            <item>topline</item>
-        </list>
-
-        <list name="values">
-            <item>inherit</item>
-            <item>none</item>
-            <item>hidden</item>
-            <item>dotted</item>
-            <item>dashed</item>
-            <item>solid</item>
-            <item>double</item>
-            <item>groove</item>
-            <item>ridge</item>
-            <item>inset</item>
-            <item>outset</item>
-            <item>xx-small</item>
-            <item>x-small</item>
-            <item>small</item>
-            <item>medium</item>
-            <item>large</item>
-            <item>x-large</item>
-            <item>xx-large</item>
-            <item>smaller</item>
-            <item>larger</item>
-            <item>italic</item>
-            <item>oblique</item>
-            <item>small-caps</item>
-            <item>normal</item>
-            <item>bold</item>
-            <item>bolder</item>
-            <item>lighter</item>
-            <item>light</item>
-            <item>100</item>
-            <item>200</item>
-            <item>300</item>
-            <item>400</item>
-            <item>500</item>
-            <item>600</item>
-            <item>700</item>
-            <item>800</item>
-            <item>900</item>
-            <item>transparent</item>
-            <item>repeat</item>
-            <item>repeat-x</item>
-            <item>repeat-y</item>
-            <item>no-repeat</item>
-            <item>baseline</item>
-            <item>sub</item>
-            <item>super</item>
-            <item>top</item>
-            <item>text-top</item>
-            <item>middle</item>
-            <item>bottom</item>
-            <item>text-bottom</item>
-            <item>left</item>
-            <item>right</item>
-            <item>center</item>
-            <item>justify</item>
-            <item>konq-center</item>
-            <item>disc</item>
-            <item>circle</item>
-            <item>square</item>
-            <item>box</item>
-            <item>decimal</item>
-            <item>decimal-leading-zero</item>
-            <item>lower-roman</item>
-            <item>upper-roman</item>
-            <item>lower-greek</item>
-            <item>lower-alpha</item>
-            <item>lower-latin</item>
-            <item>upper-alpha</item>
-            <item>upper-latin</item>
-            <item>hebrew</item>
-            <item>armenian</item>
-            <item>georgian</item>
-            <item>cjk-ideographic</item>
-            <item>hiragana</item>
-            <item>katakana</item>
-            <item>hiragana-iroha</item>
-            <item>katakana-iroha</item>
-            <item>inline</item>
-            <item>inline-block</item>
-            <item>block</item>
-            <item>list-item</item>
-            <item>run-in</item>
-            <item>compact</item>
-            <item>marker</item>
-            <item>table</item>
-            <item>inline-table</item>
-            <item>table-row-group</item>
-            <item>table-header-group</item>
-            <item>table-footer-group</item>
-            <item>table-row</item>
-            <item>table-column-group</item>
-            <item>table-column</item>
-            <item>table-cell</item>
-            <item>table-caption</item>
-            <item>auto</item>
-            <item>crosshair</item>
-            <item>default</item>
-            <item>pointer</item>
-            <item>move</item>
-            <item>e-resize</item>
-            <item>ne-resize</item>
-            <item>nw-resize</item>
-            <item>n-resize</item>
-            <item>se-resize</item>
-            <item>sw-resize</item>
-            <item>s-resize</item>
-            <item>w-resize</item>
-            <item>text</item>
-            <item>wait</item>
-            <item>help</item>
-            <item>above</item>
-            <item>absolute</item>
-            <item>always</item>
-            <item>avoid</item>
-            <item>below</item>
-            <item>bidi-override</item>
-            <item>blink</item>
-            <item>both</item>
-            <item>capitalize</item>
-            <item>caption</item>
-            <item>clip</item>
-            <item>close-quote</item>
-            <item>collapse</item>
-            <item>condensed</item>
-            <item>crop</item>
-            <item>cross</item>
-            <item>ellipsis</item>
-            <item>ellipsis-word</item>
-            <item>embed</item>
-            <item>expanded</item>
-            <item>extra-condensed</item>
-            <item>extra-expanded</item>
-            <item>fixed</item>
-            <item>hand</item>
-            <item>hide</item>
-            <item>higher</item>
-            <item>icon</item>
-            <item>inside</item>
-            <item>invert</item>
-            <item>landscape</item>
-            <item>level</item>
-            <item>line-through</item>
-            <item>loud</item>
-            <item>lower</item>
-            <item>lowercase</item>
-            <item>ltr</item>
-            <item>menu</item>
-            <item>message-box</item>
-            <item>mix</item>
-            <item>narrower</item>
-            <item>no-close-quote</item>
-            <item>no-open-quote</item>
-            <item>nowrap</item>
-            <item>open-quote</item>
-            <item>outside</item>
-            <item>overline</item>
-            <item>portrait</item>
-            <item>pre</item>
-            <item>pre-line</item>
-            <item>pre-wrap</item>
-            <item>relative</item>
-            <item>rtl</item>
-            <item>scroll</item>
-            <item>semi-condensed</item>
-            <item>semi-expanded</item>
-            <item>separate</item>
-            <item>show</item>
-            <item>small-caption</item>
-            <item>static</item>
-            <item>static-position</item>
-            <item>status-bar</item>
-            <item>thick</item>
-            <item>thin</item>
-            <item>ultra-condensed</item>
-            <item>ultra-expanded</item>
-            <item>underline</item>
-            <item>uppercase</item>
-            <item>visible</item>
-            <item>wider</item>
-            <item>break</item>
-            <item>serif</item>
-            <item>sans-serif</item>
-            <item>cursive</item>
-            <item>fantasy</item>
-            <item>monospace</item>
-            <item>border-box</item>
-            <item>content-box</item>
-            <item>-epub-hyphens</item>
-        </list>
-
-        <list name="colors">
-            <item>aqua</item>
-            <item>black</item>
-            <item>blue</item>
-            <item>cyan</item>
-            <item>fuchsia</item>
-            <item>gray</item>
-            <item>green</item>
-            <item>lime</item>
-            <item>maroon</item>
-            <item>navy</item>
-            <item>olive</item>
-            <item>purple</item>
-            <item>red</item>
-            <item>silver</item>
-            <item>teal</item>
-            <item>white</item>
-            <item>yellow</item>
-            <item>ActiveBorder</item>
-            <item>ActiveCaption</item>
-            <item>AppWorkspace</item>
-            <item>Background</item>
-            <item>ButtonFace</item>
-            <item>ButtonHighlight</item>
-            <item>ButtonShadow</item>
-            <item>ButtonText</item>
-            <item>CaptionText</item>
-            <item>GrayText</item>
-            <item>Highlight</item>
-            <item>HighlightText</item>
-            <item>InactiveBorder</item>
-            <item>InactiveCaption</item>
-            <item>InactiveCaptionText</item>
-            <item>InfoBackground</item>
-            <item>InfoText</item>
-            <item>Menu</item>
-            <item>MenuText</item>
-            <item>Scrollbar</item>
-            <item>ThreeDDarkShadow</item>
-            <item>ThreeDFace</item>
-            <item>ThreeDHighlight</item>
-            <item>ThreeDLightShadow</item>
-            <item>ThreeDShadow</item>
-            <item>Window</item>
-            <item>WindowFrame</item>
-            <item>WindowText</item>
-        </list>
-
-        <list name="functions">
-            <item>url</item>
-            <item>attr</item>
-            <item>rect</item>
-            <item>rgb</item>
-            <item>rgba</item>
-            <item>hsl</item>
-            <item>hsla</item>
-            <item>counter</item>
-            <item>counters</item>
-
-            <!-- in @font-face -->
-            <item>local</item>
-            <item>format</item>
-
-            <!-- Trident (a.k.a., MSHTML) rendering engine functional notation extensions -->
-            <item>expression</item>
-
-        </list>
-
-        <list name="mediatypes">
-            <item>all</item>
-            <item>aural</item>
-            <item>braille</item>
-            <item>embossed</item>
-            <item>handheld</item>
-            <item>print</item>
-            <item>projection</item>
-            <item>screen</item>
-            <item>speech</item>
-            <item>tty</item>
-            <item>tv</item>
-        </list>
-
-        <list name="media_features">
-            <item>width</item>
-            <item>min-width</item>
-            <item>max-width</item>
-            <item>height</item>
-            <item>min-height</item>
-            <item>max-height</item>
-            <item>device-width</item>
-            <item>min-device-width</item>
-            <item>max-device-width</item>
-            <item>device-height</item>
-            <item>min-device-height</item>
-            <item>max-device-height</item>
-            <item>orientation</item>
-            <item>aspect-ratio</item>
-            <item>min-aspect-ratio</item>
-            <item>max-aspect-ratio</item>
-            <item>device-aspect-ratio</item>
-            <item>min-device-aspect-ratio</item>
-            <item>max-device-aspect-ratio</item>
-            <item>color</item>
-            <item>min-color</item>
-            <item>max-color</item>
-            <item>color-index</item>
-            <item>min-color-index</item>
-            <item>max-color-index</item>
-            <item>monochrome</item>
-            <item>min-monochrome</item>
-            <item>max-monochrome</item>
-            <item>resolution</item>
-            <item>min-resolution</item>
-            <item>max-resolution</item>
-            <item>scan</item>
-            <item>grid</item>
-        </list>
-
-        <list name="pseudoclasses">
-            <item>hover</item>
-            <item>link</item>
-            <item>visited</item>
-            <item>active</item>
-            <item>focus</item>
-            <item>first-child</item>
-            <item>last-child</item>
-            <item>only-child</item>
-            <item>first-of-type</item>
-            <item>last-of-type</item>
-            <item>only-of-type</item>
-            <item>first-letter</item>
-            <item>first-line</item>
-            <item>before</item>
-            <item>after</item>
-            <item>selection</item>
-            <item>root</item>
-            <item>empty</item>
-            <item>target</item>
-            <item>enabled</item>
-            <item>disabled</item>
-            <item>checked</item>
-            <item>indeterminate</item>
-            <item>nth-child</item>
-            <item>nth-last-child</item>
-            <item>nth-of-type</item>
-            <item>nth-last-of-type</item>
-            <item>not</item>
-        </list>
-
-        <contexts>
-            <context name="Base" attribute="Normal Text" lineEndContext="#stay">
-                <IncludeRules context="FindComments" />
-                <DetectChar attribute="Normal Text" context="RuleSet" char="{" beginRegion="ruleset" />
-                <RegExpr attribute="At Rule" context="AtRule" String="@[a-zA-Z0-1-]+\b" />
-                <IncludeRules context="FindSelectors" />
-            </context>
-
-            <!-- find selectors // .class #id :hover :nth-child(2n+1) [type="search"] -->
-            <context name="FindSelectors" attribute="Normal Text" lineEndContext="#stay">
-                <DetectChar attribute="Selector Attribute" context="SelectorAttr" char="[" />
-                <RegExpr attribute="Selector Id" context="#stay" String="#(-)?(&nmstart;)(&nmchar;)*" />
-                <RegExpr attribute="Selector Class" context="#stay" String="\.([a-zA-Z0-9\-_]|[\x80-\xFF]|\\[0-9A-Fa-f]{1,6})*" />
-                <RegExpr attribute="Selector Pseudo" context="#stay" String=":lang\([\w_-]+\)" />
-                <DetectChar attribute="Selector Pseudo" context="SelectorPseudo" char=":" />
-            </context>
-
-            <!-- find functions // rgba(255,255,255,0.75) -->
-            <context name="FindFunctions" attribute="Normal Text" lineEndContext="#stay">
-                <RegExpr attribute="Function" context="Function" String="[a-z\-]+\(" lookAhead="true" />
-            </context>
-
-            <!-- find values //  10px 12pt 2.5em 1rem 75% #ffcc99 red solid -->
-            <context name="FindValues" attribute="Normal Text" lineEndContext="#stay">
-                <RegExpr attribute="Annotation" context="#stay" String="!important\b" />
-                <keyword attribute="Value" context="#stay" String="values" />
-                <keyword attribute="Value" context="#stay" String="colors" />
-                <RegExpr attribute="Value" context="#stay" String="#([0-9A-Fa-f]{3}){1,4}\b" />
-                <RegExpr attribute="Value" context="#stay" String="[-+]?[0-9.]+(em|ex|ch|rem|vw|vh|vm|px|in|cm|mm|pt|pc|deg|rad|grad|turn|ms|s|Hz|kHz)\b" />
-                <RegExpr attribute="Value" context="#stay" String="[-+]?[0-9.]+[%]?" />
-                <RegExpr attribute="Normal Text" context="#stay" String="[\w\-]+" />
-            </context>
-
-            <!-- find strings // "some words" 'some words' -->
-            <context name="FindStrings" attribute="Normal Text" lineEndContext="#stay">
-                <DetectChar attribute="String" context="StringDQ" char="&quot;" />
-                <DetectChar attribute="String" context="StringSQ" char="'" />
-            </context>
-
-            <!-- find comments // /* comment */ -->
-            <context name="FindComments" attribute="Normal Text" lineEndContext="#stay">
-                <RegExpr attribute="Region Marker" context="#stay" String="/\*BEGIN.*\*/" beginRegion="UserDefined" />
-                <RegExpr attribute="Region Marker" context="#stay" String="/\*END.*\*/" endRegion="UserDefined" />
-                <Detect2Chars attribute="Comment" context="Comment" char="/" char1="*" beginRegion="comment" />
-            </context>
-
-            <context name="AtRule" attribute="Normal Text" lineEndContext="#pop">
-                <IncludeRules context="FindComments" />
-                <IncludeRules context="FindStrings" />
-                <keyword attribute="Value" context="#stay" String="mediatypes" />
-                <keyword attribute="Property" context="#stay" String="media_features" />
-                <AnyChar attribute="Normal Text" context="#pop" String=";{" lookAhead="true" />
-                <IncludeRules context="FindValues" />
-            </context>
-
-            <context name="SelectorAttr" attribute="Selector Attribute" lineEndContext="#stay">
-                <DetectChar attribute="Selector Attribute" context="#pop" char="]" />
-                <IncludeRules context="FindStrings" />
-            </context>
-
-            <context name="SelectorPseudo" attribute="Selector Pseudo" lineEndContext="#pop"
-                     fallthrough="true" fallthroughContext="#pop">
-                <keyword attribute="Selector Pseudo" context="#pop" String="pseudoclasses" />
-            </context>
-
-            <context name="Comment" attribute="Comment" lineEndContext="#stay">
-                <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="comment" />
-                <IncludeRules context="##Alerts" />
-            </context>
-
-            <context name="RuleSet" attribute="Normal Text" lineEndContext="#stay">
-                <DetectChar attribute="Normal Text" context="RuleSet" char="{" beginRegion="ruleset" />
-                <DetectChar attribute="Normal Text" context="#pop" char="}" endRegion="ruleset" />
-                <RegExpr attribute="Property" context="Rule" String="-?[A-Za-z_-]+(?=\s*:)" lookAhead="true" />
-                <IncludeRules context="Base" />
-            </context>
-
-            <context name="Rule" attribute="Normal Text" lineEndContext="#stay">
-                <DetectChar attribute="Normal Text" context="RuleParameters" char=":" />
-                <keyword attribute="Property" context="#stay" String="properties" />
-                <RegExpr attribute="Unknown Property" context="#stay" String="-?[A-Za-z_-]+(?=\s*:)" />
-                <RegExpr attribute="Error" context="#stay" String="\S" />
-            </context>
-
-            <context name="RuleParameters" attribute="Normal Text" lineEndContext="#stay">
-                <IncludeRules context="FindComments" />
-                <IncludeRules context="FindStrings" />
-                <IncludeRules context="FindFunctions" />
-                <IncludeRules context="FindValues" />
-                <!-- Jump out conditions -->
-                <DetectChar attribute="Normal Text" context="#pop#pop" char=";" />
-                <DetectChar attribute="Normal Text" context="#pop#pop#pop" char="}" endRegion="ruleset" />
-            </context>
-
-            <context name="Function" attribute="Normal Text" lineEndContext="#stay">
-                <DetectChar attribute="Normal Text" context="FunctionParameters" char="(" />
-                <keyword attribute="Function" context="#stay" String="functions" />
-            </context>
-
-            <context name="FunctionParameters" attribute="Normal Text" lineEndContext="#stay">
-                <IncludeRules context="FindComments" />
-                <IncludeRules context="FindStrings" />
-                <IncludeRules context="FindValues" />
-                <!-- Jump out conditions -->
-                <DetectChar attribute="Normal Text" context="#pop#pop" char=")" />
-            </context>
-
-            <!-- string contexts -->
-            <context name="StringDQ" attribute="String" lineEndContext="#stay">
-                <DetectChar attribute="String" context="#pop" char="&quot;" />
-                <IncludeRules context="InsideString" />
-            </context>
-
-            <context name="StringSQ" attribute="String" lineEndContext="#stay">
-                <DetectChar attribute="String" context="#pop" char="'" />
-                <IncludeRules context="InsideString" />
-            </context>
-
-            <context name="InsideString" attribute="String" lineEndContext="#stay">
-                <RegExpr attribute="String" context="#stay" String="\\[&quot;']" />
-                <DetectIdentifier/>
-            </context>
-
-        </contexts>
-
-        <itemDatas>
-            <itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false"/>
-            <itemData name="At Rule" defStyleNum="dsImport" spellChecking="false"/>
-            <itemData name="Property" defStyleNum="dsKeyword" spellChecking="false"/>
-            <itemData name="Unknown Property" defStyleNum="dsNormal" spellChecking="false"/>
-            <itemData name="String" defStyleNum="dsString"/>
-            <itemData name="Value" defStyleNum="dsDecVal" spellChecking="false"/>
-            <itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/>
-            <itemData name="Annotation" defStyleNum="dsAttribute" spellChecking="false"/>
-            <itemData name="Selector Id" defStyleNum="dsPreprocessor" bold="1" spellChecking="false"/>
-            <itemData name="Selector Class" defStyleNum="dsFunction" spellChecking="false"/>
-            <itemData name="Selector Attribute" defStyleNum="dsExtension" spellChecking="false"/>
-            <itemData name="Selector Pseudo" defStyleNum="dsInformation" italic="1" spellChecking="false"/>
-            <itemData name="Comment" defStyleNum="dsComment" />
-            <itemData name="Region Marker" defStyleNum="dsRegionMarker" spellChecking="false"/>
-            <itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
-        </itemDatas>
-    </highlighting>
-
-    <general>
-        <keywords casesensitive="0" weakDeliminator="-%"/>
+  <!-- https://www.w3.org/TR/CSS22/syndata.html#tokenization -->
+  <!ENTITY nmstart "[_a-zA-Z]|(\\[0-9a-fA-F]{1,6})|(\\[^\n\r\f0-9a-fA-F])">
+  <!ENTITY nmchar  "[_a-zA-Z0-9-]|(\\[0-9a-fA-F]{1,6})|(\\[^\n\r\f0-9a-fA-F])">
+]>
+
+<!--
+
+Kate CSS syntax highlighting definition
+
+Changelog:
+
+- Version 8, by Jonathan Poelen
+- fix some Operator and Selector Tag highlighting
+
+- Version 7, by Jonathan Poelen
+- fix tag followed by a pseudo-class in a nested rule (@media, ...)
+- fix constraint in a rule
+- fix Kate auto-completion for properties and rules
+- New highlighting categories: Keyword, Operator, Separator Symbol, SpecialChar, Variable, Value Keyword, Color, Number, Unit, Selector Tag
+
+- Version 4, by Guo Yunhe guoyunhebrave@gmail.com
+- Remake for complex CSS syntax, avoid errors
+
+- Version 2.13, by Guo Yunhe
+- Add all W3C Work Draft properties
+
+- Version 2.06, by Mte90:
+- CSS3 tag
+
+- Version 2.03, by Milian Wolff:
+- Make it spelling aware
+
+- Version 2.08, Joseph Wenninger:
+- CSS3 media queries
+
+-->
+
+<language name="CSS" version="8" kateversion="5.0" section="Markup" extensions="*.css" indenter="cstyle" mimetype="text/css" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
+
+    <highlighting>
+        <list name="properties">
+            <!-- W3C > Work Draft, from https://www.w3.org/Style/CSS/all-properties -->
+            <item>align-content</item>
+            <item>align-items</item>
+            <item>alignment-baseline</item>
+            <item>align-self</item>
+            <item>all</item>
+            <item>animation</item>
+            <item>animation-delay</item>
+            <item>animation-direction</item>
+            <item>animation-duration</item>
+            <item>animation-fill-mode</item>
+            <item>animation-iteration-count</item>
+            <item>animation-name</item>
+            <item>animation-play-state</item>
+            <item>animation-timing-function</item>
+            <item>appearance</item>
+            <item>azimuth</item>
+            <item>backface-visibility</item>
+            <item>background</item>
+            <item>background-attachment</item>
+            <item>background-blend-mode</item>
+            <item>background-clip</item>
+            <item>background-color</item>
+            <item>background-image</item>
+            <item>background-image-transform</item>
+            <item>background-origin</item>
+            <item>background-position</item>
+            <item>background-repeat</item>
+            <item>background-size</item>
+            <item>baseline-shift</item>
+            <item>block-size</item>
+            <item>block-step</item>
+            <item>block-step-align</item>
+            <item>block-step-insert</item>
+            <item>block-step-round</item>
+            <item>block-step-size</item>
+            <item>bookmark-label</item>
+            <item>bookmark-level</item>
+            <item>bookmark-state</item>
+            <item>border</item>
+            <item>border-block</item>
+            <item>border-block-color</item>
+            <item>border-block-end</item>
+            <item>border-block-end-color</item>
+            <item>border-block-end-style</item>
+            <item>border-block-end-width</item>
+            <item>border-block-start</item>
+            <item>border-block-start-color</item>
+            <item>border-block-start-style</item>
+            <item>border-block-start-width</item>
+            <item>border-block-style</item>
+            <item>border-block-width</item>
+            <item>border-bottom</item>
+            <item>border-bottom-color</item>
+            <item>border-bottom-left-radius</item>
+            <item>border-bottom-right-radius</item>
+            <item>border-bottom-style</item>
+            <item>border-bottom-width</item>
+            <item>border-boundary</item>
+            <item>border-collapse</item>
+            <item>border-color</item>
+            <item>border-image</item>
+            <item>border-image-outset</item>
+            <item>border-image-repeat</item>
+            <item>border-image-slice</item>
+            <item>border-image-source</item>
+            <item>border-image-transform</item>
+            <item>border-image-width</item>
+            <item>border-inline</item>
+            <item>border-inline-color</item>
+            <item>border-inline-end</item>
+            <item>border-inline-end-color</item>
+            <item>border-inline-end-style</item>
+            <item>border-inline-end-width</item>
+            <item>border-inline-start</item>
+            <item>border-inline-start-color</item>
+            <item>border-inline-start-style</item>
+            <item>border-inline-start-width</item>
+            <item>border-inline-style</item>
+            <item>border-inline-width</item>
+            <item>border-left</item>
+            <item>border-left-color</item>
+            <item>border-left-style</item>
+            <item>border-left-width</item>
+            <item>border-radius</item>
+            <item>border-right</item>
+            <item>border-right-color</item>
+            <item>border-right-style</item>
+            <item>border-right-width</item>
+            <item>border-spacing</item>
+            <item>border-style</item>
+            <item>border-top</item>
+            <item>border-top-color</item>
+            <item>border-top-left-radius</item>
+            <item>border-top-right-radius</item>
+            <item>border-top-style</item>
+            <item>border-top-width</item>
+            <item>border-width</item>
+            <item>bottom</item>
+            <item>box-decoration-break</item>
+            <item>box-shadow</item>
+            <item>box-sizing</item>
+            <item>box-snap</item>
+            <item>break-after</item>
+            <item>break-before</item>
+            <item>break-inside</item>
+            <item>caption-side</item>
+            <item>caret</item>
+            <item>caret-color</item>
+            <item>caret-shape</item>
+            <item>clear</item>
+            <item>clip</item>
+            <item>clip-path</item>
+            <item>clip-rule</item>
+            <item>color</item>
+            <item>color-adjust</item>
+            <item>color-interpolation-filters</item>
+            <item>columns</item>
+            <item>column-count</item>
+            <item>column-fill</item>
+            <item>column-gap</item>
+            <item>column-rule</item>
+            <item>column-rule-color</item>
+            <item>column-rule-style</item>
+            <item>column-rule-width</item>
+            <item>column-span</item>
+            <item>column-width</item>
+            <item>contain</item>
+            <item>content</item>
+            <item>continue</item>
+            <item>counter-increment</item>
+            <item>counter-reset</item>
+            <item>counter-set</item>
+            <item>cue</item>
+            <item>cue-after</item>
+            <item>cue-before</item>
+            <item>cursor</item>
+            <item>direction</item>
+            <item>display</item>
+            <item>dominant-baseline</item>
+            <item>elevation</item>
+            <item>empty-cells</item>
+            <item>fill</item>
+            <item>fill-break</item>
+            <item>fill-color</item>
+            <item>fill-image</item>
+            <item>fill-opacity</item>
+            <item>fill-origin</item>
+            <item>fill-position</item>
+            <item>fill-repeat</item>
+            <item>fill-rule</item>
+            <item>fill-size</item>
+            <item>filter</item>
+            <item>flex</item>
+            <item>flex-basis</item>
+            <item>flex-direction</item>
+            <item>flex-flow</item>
+            <item>flex-grow</item>
+            <item>flex-shrink</item>
+            <item>flex-wrap</item>
+            <item>float</item>
+            <item>float-defer</item>
+            <item>float-offset</item>
+            <item>float-reference</item>
+            <item>flood-color</item>
+            <item>flood-opacity</item>
+            <item>flow-from</item>
+            <item>flow-into</item>
+            <item>font</item>
+            <item>font-family</item>
+            <item>font-feature-settings</item>
+            <item>font-kerning</item>
+            <item>font-language-override</item>
+            <item>font-max-size</item>
+            <item>font-min-size</item>
+            <item>font-optical-sizing</item>
+            <item>font-palette</item>
+            <item>font-size</item>
+            <item>font-size-adjust</item>
+            <item>font-stretch</item>
+            <item>font-style</item>
+            <item>font-synthesis</item>
+            <item>font-variant</item>
+            <item>font-variant-alternates</item>
+            <item>font-variant-caps</item>
+            <item>font-variant-east-asian</item>
+            <item>font-variant-emoji</item>
+            <item>font-variant-ligatures</item>
+            <item>font-variant-numeric</item>
+            <item>font-variant-position</item>
+            <item>font-variation-settings</item>
+            <item>font-weight</item>
+            <item>footnote-display</item>
+            <item>footnote-policy</item>
+            <item>gap</item>
+            <item>glyph-orientation-vertical</item>
+            <item>grid</item>
+            <item>grid-area</item>
+            <item>grid-auto-columns</item>
+            <item>grid-auto-flow</item>
+            <item>grid-auto-rows</item>
+            <item>grid-column</item>
+            <item>grid-column-end</item>
+            <item>grid-column-gap</item>
+            <item>grid-column-start</item>
+            <item>grid-gap</item>
+            <item>grid-row</item>
+            <item>grid-row-end</item>
+            <item>grid-row-gap</item>
+            <item>grid-row-start</item>
+            <item>grid-template</item>
+            <item>grid-template-areas</item>
+            <item>grid-template-columns</item>
+            <item>grid-template-rows</item>
+            <item>hanging-punctuation</item>
+            <item>height</item>
+            <item>hyphenate-character</item>
+            <item>hyphenate-limit-chars</item>
+            <item>hyphenate-limit-last</item>
+            <item>hyphenate-limit-lines</item>
+            <item>hyphenate-limit-zone</item>
+            <item>hyphens</item>
+            <item>image-orientation</item>
+            <item>image-rendering</item>
+            <item>image-resolution</item>
+            <item>initial-letter</item>
+            <item>initial-letter-align</item>
+            <item>initial-letter-wrap</item>
+            <item>inline-size</item>
+            <item>inset</item>
+            <item>inset-block</item>
+            <item>inset-block-end</item>
+            <item>inset-block-start</item>
+            <item>inset-inline</item>
+            <item>inset-inline-end</item>
+            <item>inset-inline-start</item>
+            <item>isolation</item>
+            <item>justify-content</item>
+            <item>justify-items</item>
+            <item>justify-self</item>
+            <item>left</item>
+            <item>letter-spacing</item>
+            <item>lighting-color</item>
+            <item>line-break</item>
+            <item>line-grid</item>
+            <item>line-height</item>
+            <item>line-height-step</item>
+            <item>line-snap</item>
+            <item>list-style</item>
+            <item>list-style-image</item>
+            <item>list-style-position</item>
+            <item>list-style-type</item>
+            <item>margin</item>
+            <item>margin-block</item>
+            <item>margin-block-end</item>
+            <item>margin-block-start</item>
+            <item>margin-bottom</item>
+            <item>margin-inline</item>
+            <item>margin-inline-end</item>
+            <item>margin-inline-start</item>
+            <item>margin-left</item>
+            <item>margin-right</item>
+            <item>margin-top</item>
+            <item>marker</item>
+            <item>marker-end</item>
+            <item>marker-knockout-left</item>
+            <item>marker-knockout-right</item>
+            <item>marker-mid</item>
+            <item>marker-pattern</item>
+            <item>marker-segment</item>
+            <item>marker-side</item>
+            <item>marker-start</item>
+            <item>marquee-direction</item>
+            <item>marquee-loop</item>
+            <item>marquee-speed</item>
+            <item>marquee-style</item>
+            <item>mask</item>
+            <item>mask-border</item>
+            <item>mask-border-mode</item>
+            <item>mask-border-outset</item>
+            <item>mask-border-repeat</item>
+            <item>mask-border-slice</item>
+            <item>mask-border-source</item>
+            <item>mask-border-width</item>
+            <item>mask-clip</item>
+            <item>mask-composite</item>
+            <item>mask-image</item>
+            <item>mask-mode</item>
+            <item>mask-origin</item>
+            <item>mask-position</item>
+            <item>mask-repeat</item>
+            <item>mask-size</item>
+            <item>mask-type</item>
+            <item>max-block-size</item>
+            <item>max-height</item>
+            <item>max-inline-size</item>
+            <item>max-lines</item>
+            <item>max-width</item>
+            <item>min-block-size</item>
+            <item>min-height</item>
+            <item>min-inline-size</item>
+            <item>min-width</item>
+            <item>mix-blend-mode</item>
+            <item>nav-up</item>
+            <item>nav-down</item>
+            <item>nav-left</item>
+            <item>nav-right</item>
+            <item>object-fit</item>
+            <item>object-position</item>
+            <item>offset</item>
+            <item>offset-after</item>
+            <item>offset-anchor</item>
+            <item>offset-before</item>
+            <item>offset-distance</item>
+            <item>offset-end</item>
+            <item>offset-path</item>
+            <item>offset-position</item>
+            <item>offset-rotate</item>
+            <item>offset-start</item>
+            <item>opacity</item>
+            <item>order</item>
+            <item>orphans</item>
+            <item>outline</item>
+            <item>outline-color</item>
+            <item>outline-offset</item>
+            <item>outline-style</item>
+            <item>outline-width</item>
+            <item>overflow</item>
+            <item>overflow-style</item>
+            <item>overflow-wrap</item>
+            <item>overflow-x</item>
+            <item>overflow-y</item>
+            <item>padding</item>
+            <item>padding-block</item>
+            <item>padding-block-end</item>
+            <item>padding-block-start</item>
+            <item>padding-bottom</item>
+            <item>padding-inline</item>
+            <item>padding-inline-end</item>
+            <item>padding-inline-start</item>
+            <item>padding-left</item>
+            <item>padding-right</item>
+            <item>padding-top</item>
+            <item>page</item>
+            <item>page-break-after</item>
+            <item>page-break-before</item>
+            <item>page-break-inside</item>
+            <item>pause</item>
+            <item>pause-after</item>
+            <item>pause-before</item>
+            <item>perspective</item>
+            <item>perspective-origin</item>
+            <item>pitch</item>
+            <item>pitch-range</item>
+            <item>place-content</item>
+            <item>place-items</item>
+            <item>place-self</item>
+            <item>play-during</item>
+            <item>pointer-events</item>
+            <item>position</item>
+            <item>quotes</item>
+            <item>region-fragment</item>
+            <item>resize</item>
+            <item>richness</item>
+            <item>right</item>
+            <item>rotation</item>
+            <item>rotation-point</item>
+            <item>row-gap</item>
+            <item>ruby-align</item>
+            <item>ruby-merge</item>
+            <item>ruby-position</item>
+            <item>running</item>
+            <item>scrollbar-gutter</item>
+            <item>shape-image-threshold</item>
+            <item>shape-inside</item>
+            <item>shape-margin</item>
+            <item>shape-outside</item>
+            <item>size</item>
+            <item>speak</item>
+            <item>speak-header</item>
+            <item>speak-numeral</item>
+            <item>speak-punctuation</item>
+            <item>speech-rate</item>
+            <item>stress</item>
+            <item>string-set</item>
+            <item>table-layout</item>
+            <item>tab-size</item>
+            <item>text-align-all</item>
+            <item>text-align</item>
+            <item>text-align-last</item>
+            <item>text-combine-upright</item>
+            <item>text-decoration-color</item>
+            <item>text-decoration</item>
+            <item>text-decoration-line</item>
+            <item>text-decoration-skip</item>
+            <item>text-decoration-skip-ink</item>
+            <item>text-decoration-style</item>
+            <item>text-decoration-width</item>
+            <item>text-emphasis</item>
+            <item>text-emphasis-color</item>
+            <item>text-emphasis-position</item>
+            <item>text-emphasis-skip</item>
+            <item>text-emphasis-style</item>
+            <item>text-indent</item>
+            <item>text-justify</item>
+            <item>text-orientation</item>
+            <item>text-overflow</item>
+            <item>text-shadow</item>
+            <item>text-space-collapse</item>
+            <item>text-space-trim</item>
+            <item>text-spacing</item>
+            <item>text-transform</item>
+            <item>text-underline-offset</item>
+            <item>text-underline-position</item>
+            <item>text-wrap</item>
+            <item>top</item>
+            <item>transform</item>
+            <item>transform-box</item>
+            <item>transform-origin</item>
+            <item>transform-style</item>
+            <item>transition</item>
+            <item>transition-delay</item>
+            <item>transition-duration</item>
+            <item>transition-property</item>
+            <item>transition-timing-function</item>
+            <item>unicode-bidi</item>
+            <item>user-select</item>
+            <item>vertical-align</item>
+            <item>visibility</item>
+            <item>voice-family</item>
+            <item>volume</item>
+            <item>white-space</item>
+            <item>widows</item>
+            <item>width</item>
+            <item>will-change</item>
+            <item>word-break</item>
+            <item>word-spacing</item>
+            <item>word-wrap</item>
+            <item>wrap-after</item>
+            <item>wrap-before</item>
+            <item>wrap-flow</item>
+            <item>wrap-inside</item>
+            <item>wrap-through</item>
+            <item>writing-mode</item>
+            <item>z-index</item>
+
+            <!-- Gecko rendering engine CSS property extensions -->
+            <item>-moz-animation</item>
+            <item>-moz-animation-delay</item>
+            <item>-moz-animation-direction</item>
+            <item>-moz-animation-duration</item>
+            <item>-moz-animation-fill-mode</item>
+            <item>-moz-animation-iteration-count</item>
+            <item>-moz-animation-name</item>
+            <item>-moz-animation-play-state</item>
+            <item>-moz-animation-timing-function</item>
+            <item>-moz-appearance</item>
+            <item>-moz-background-clip</item>
+            <item>-moz-background-origin</item>
+            <item>-moz-background-size</item>
+            <item>-moz-border-image</item>
+            <item>-moz-border-radius</item>
+            <item>-moz-border-radius-bottomleft</item>
+            <item>-moz-border-radius-bottomright</item>
+            <item>-moz-border-radius-topleft</item>
+            <item>-moz-border-radius-topright</item>
+            <item>-moz-box-align</item>
+            <item>-moz-box-direction</item>
+            <item>-moz-box-flex</item>
+            <item>-moz-box-flex-group</item>
+            <item>-moz-box-ordinal-group</item>
+            <item>-moz-box-orient</item>
+            <item>-moz-box-pack</item>
+            <item>-moz-box-shadow</item>
+            <item>-moz-box-sizing</item>
+            <item>-moz-box</item>
+            <item>-moz-column-count</item>
+            <item>-moz-column-fill</item>
+            <item>-moz-column-gap</item>
+            <item>-moz-column-rule</item>
+            <item>-moz-column-rule-color</item>
+            <item>-moz-column-rule-style</item>
+            <item>-moz-column-rule-width</item>
+            <item>-moz-columns</item>
+            <item>-moz-column-width</item>
+            <item>-moz-hyphens</item>
+            <item>-moz-opacity</item>
+            <item>-moz-outline-style</item>
+            <item>-moz-perspective</item>
+            <item>-moz-resize</item>
+            <item>-moz-text-align-last</item>
+            <item>-moz-text-decoration-color</item>
+            <item>-moz-text-decoration-line</item>
+            <item>-moz-text-decoration-style</item>
+            <item>-moz-transform</item>
+            <item>-moz-transform-origin</item>
+            <item>-moz-transform-style</item>
+            <item>-moz-transition</item>
+            <item>-moz-transition-delay</item>
+            <item>-moz-transition-duration</item>
+            <item>-moz-transition-property</item>
+            <item>-moz-transition-timing-function</item>
+            <item>-moz-user-select</item>
+
+            <!-- Opera rendering engine CSS property extensions -->
+            <item>-o-background-size</item>
+            <item>-o-linear-gradient</item>
+            <item>-o-text-overflow</item>
+            <item>-o-transition</item>
+            <item>-o-transform-origin</item>
+
+            <!-- konq specific -->
+            <item>konq_bgpos_x</item>
+            <item>konq_bgpos_y</item>
+            <item>-khtml-background-size</item>
+            <item>-khtml-border-top-left-radius</item>
+            <item>-khtml-border-top-right-radius</item>
+            <item>-khtml-border-bottom-left-radius</item>
+            <item>-khtml-border-bottom-right-radius</item>
+            <item>-khtml-border-radius</item>
+            <item>-khtml-box-shadow</item>
+            <item>-khtml-opacity</item>
+
+            <!-- Webkit rendering engine CSS property extensions -->
+            <item>-webkit-appearance</item>
+            <item>-webkit-animation</item>
+            <item>-webkit-animation-name</item>
+            <item>-webkit-animation-duration</item>
+            <item>-webkit-animation-iteration</item>
+            <item>-webkit-animation-direction</item>
+            <item>-webkit-animation-delay</item>
+            <item>-webkit-animation-play-state</item>
+            <item>-webkit-animation-fill-mode</item>
+            <item>-webkit-background-size</item>
+            <item>-webkit-backface-visibility</item>
+            <item>-webkit-border-image</item>
+            <item>-webkit-border-bottom-colors</item>
+            <item>-webkit-border-left-colors</item>
+            <item>-webkit-border-radius</item>
+            <item>-webkit-border-right-colors</item>
+            <item>-webkit-border-top-colors</item>
+            <item>-webkit-border-top-left-radius</item>
+            <item>-webkit-border-top-right-radius</item>
+            <item>-webkit-border-bottom-left-radius</item>
+            <item>-webkit-border-bottom-right-radius</item>
+            <item>-webkit-border-radius-bottomleft</item>
+            <item>-webkit-border-radius-bottomright</item>
+            <item>-webkit-box-align</item>
+            <item>-webkit-box-direction</item>
+            <item>-webkit-box-flex</item>
+            <item>-webkit-box-ordinal-group</item>
+            <item>-webkit-box-orient</item>
+            <item>-webkit-box-pack</item>
+            <item>-webkit-box-reflect</item>
+            <item>-webkit-box-shadow</item>
+            <item>-webkit-box-sizing</item>
+            <item>-webkit-column-count</item>
+            <item>-webkit-column-gap</item>
+            <item>-webkit-hyphens</item>
+            <item>-webkit-linear-gradient</item>
+            <item>-webkit-gradient</item>
+            <item>-webkit-overflow-scrolling</item>
+            <item>-webkit-perspective</item>
+            <item>-webkit-text-decoration</item>
+            <item>-webkit-text-decoration-skip</item>
+            <item>-webkit-text-fill-color</item>
+            <item>-webkit-text-stroke-color</item>
+            <item>-webkit-text-stroke-width</item>
+            <item>-webkit-text-size-adjust</item>
+            <item>-webkit-tap-highlight-color</item>
+            <item>-webkit-transform</item>
+            <item>-webkit-transform-origin</item>
+            <item>-webkit-transform-style</item>
+            <item>-webkit-transition</item>
+            <item>-webkit-transition-property</item>
+            <item>-webkit-transition-delay</item>
+            <item>-webkit-transition-duration</item>
+            <item>-webkit-user-select</item>
+
+            <!-- Trident (a.k.a., MSHTML) CSS property extensions -->
+            <item>zoom</item>
+            <item>-ms-animation-name</item>
+            <item>-ms-animation-duration</item>
+            <item>-ms-animation-iteration</item>
+            <item>-ms-animation-direction</item>
+            <item>-ms-animation-delay</item>
+            <item>-ms-animation-play-state</item>
+            <item>-ms-animation-fill-mode</item>
+            <item>-ms-box-sizing</item>
+            <item>-ms-filter</item>
+            <item>-ms-flex</item>
+            <item>-ms-flex-align</item>
+            <item>-ms-flex-direction</item>
+            <item>-ms-flex-flow</item>
+            <item>-ms-flex-item-align</item>
+            <item>-ms-flex-line-pack</item>
+            <item>-ms-flex-negative</item>
+            <item>-ms-flex-order</item>
+            <item>-ms-flex-pack</item>
+            <item>-ms-flex-positive</item>
+            <item>-ms-flex-position</item>
+            <item>-ms-flex-preferred-size</item>
+            <item>-ms-flex-wrap</item>
+            <item>-ms-interpolation-mode</item>
+            <item>-ms-linear-gradient</item>
+            <item>-ms-overflow-style</item>
+            <item>-ms-text-size-adjust</item>
+            <item>-ms-transform</item>
+            <item>-ms-transition</item>
+            <item>-ms-user-select</item>
+        </list>
+
+        <list name="value keywords">
+            <item>inherit</item>
+            <item>unset</item>
+            <item>auto</item>
+            <!-- <item>revert</item> -->
+        </list>
+
+        <list name="values">
+            <item>none</item>
+            <item>hidden</item>
+            <item>dotted</item>
+            <item>dashed</item>
+            <item>solid</item>
+            <item>double</item>
+            <item>groove</item>
+            <item>ridge</item>
+            <item>inset</item>
+            <item>outset</item>
+            <item>xx-small</item>
+            <item>x-small</item>
+            <item>small</item>
+            <item>medium</item>
+            <item>large</item>
+            <item>x-large</item>
+            <item>xx-large</item>
+            <item>smaller</item>
+            <item>larger</item>
+            <item>italic</item>
+            <item>oblique</item>
+            <item>small-caps</item>
+            <item>normal</item>
+            <item>bold</item>
+            <item>bolder</item>
+            <item>lighter</item>
+            <item>light</item>
+            <item>transparent</item>
+            <item>repeat</item>
+            <item>repeat-x</item>
+            <item>repeat-y</item>
+            <item>no-repeat</item>
+            <item>baseline</item>
+            <item>sub</item>
+            <item>super</item>
+            <item>top</item>
+            <item>text-top</item>
+            <item>middle</item>
+            <item>bottom</item>
+            <item>text-bottom</item>
+            <item>left</item>
+            <item>right</item>
+            <item>center</item>
+            <item>justify</item>
+            <item>konq-center</item>
+            <item>disc</item>
+            <item>circle</item>
+            <item>square</item>
+            <item>box</item>
+            <item>decimal</item>
+            <item>decimal-leading-zero</item>
+            <item>lower-roman</item>
+            <item>upper-roman</item>
+            <item>lower-greek</item>
+            <item>lower-alpha</item>
+            <item>lower-latin</item>
+            <item>upper-alpha</item>
+            <item>upper-latin</item>
+            <item>hebrew</item>
+            <item>armenian</item>
+            <item>georgian</item>
+            <item>cjk-ideographic</item>
+            <item>hiragana</item>
+            <item>katakana</item>
+            <item>hiragana-iroha</item>
+            <item>katakana-iroha</item>
+            <item>inline</item>
+            <item>inline-block</item>
+            <item>block</item>
+            <item>list-item</item>
+            <item>run-in</item>
+            <item>compact</item>
+            <item>marker</item>
+            <item>table</item>
+            <item>inline-table</item>
+            <item>table-row-group</item>
+            <item>table-header-group</item>
+            <item>table-footer-group</item>
+            <item>table-row</item>
+            <item>table-column-group</item>
+            <item>table-column</item>
+            <item>table-cell</item>
+            <item>table-caption</item>
+            <item>crosshair</item>
+            <item>default</item>
+            <item>pointer</item>
+            <item>move</item>
+            <item>e-resize</item>
+            <item>ne-resize</item>
+            <item>nw-resize</item>
+            <item>n-resize</item>
+            <item>se-resize</item>
+            <item>sw-resize</item>
+            <item>s-resize</item>
+            <item>w-resize</item>
+            <item>text</item>
+            <item>wait</item>
+            <item>help</item>
+            <item>above</item>
+            <item>absolute</item>
+            <item>always</item>
+            <item>avoid</item>
+            <item>below</item>
+            <item>bidi-override</item>
+            <item>blink</item>
+            <item>both</item>
+            <item>capitalize</item>
+            <item>caption</item>
+            <item>clip</item>
+            <item>close-quote</item>
+            <item>collapse</item>
+            <item>condensed</item>
+            <item>crop</item>
+            <item>cross</item>
+            <item>ellipsis</item>
+            <item>ellipsis-word</item>
+            <item>embed</item>
+            <item>expanded</item>
+            <item>extra-condensed</item>
+            <item>extra-expanded</item>
+            <item>fixed</item>
+            <item>hand</item>
+            <item>hide</item>
+            <item>higher</item>
+            <item>icon</item>
+            <item>inside</item>
+            <item>invert</item>
+            <item>landscape</item>
+            <item>level</item>
+            <item>line-through</item>
+            <item>loud</item>
+            <item>lower</item>
+            <item>lowercase</item>
+            <item>ltr</item>
+            <item>menu</item>
+            <item>message-box</item>
+            <item>mix</item>
+            <item>narrower</item>
+            <item>no-close-quote</item>
+            <item>no-open-quote</item>
+            <item>nowrap</item>
+            <item>open-quote</item>
+            <item>outside</item>
+            <item>overline</item>
+            <item>portrait</item>
+            <item>pre</item>
+            <item>pre-line</item>
+            <item>pre-wrap</item>
+            <item>relative</item>
+            <item>rtl</item>
+            <item>scroll</item>
+            <item>semi-condensed</item>
+            <item>semi-expanded</item>
+            <item>separate</item>
+            <item>show</item>
+            <item>small-caption</item>
+            <item>static</item>
+            <item>static-position</item>
+            <item>status-bar</item>
+            <item>thick</item>
+            <item>thin</item>
+            <item>ultra-condensed</item>
+            <item>ultra-expanded</item>
+            <item>underline</item>
+            <item>uppercase</item>
+            <item>visible</item>
+            <item>wider</item>
+            <item>break</item>
+            <item>serif</item>
+            <item>sans-serif</item>
+            <item>cursive</item>
+            <item>fantasy</item>
+            <item>monospace</item>
+            <item>border-box</item>
+            <item>content-box</item>
+            <item>-epub-hyphens</item>
+            <item>contain</item>
+            <item>cover</item>
+
+            <!-- transition and animation -->
+            <item>all</item>
+            <item>ease</item>
+            <item>ease-in</item>
+            <item>ease-out</item>
+            <item>ease-in-out</item>
+            <item>step-start</item>
+            <item>step-end</item>
+            <item>linear</item>
+
+            <!-- animation -->
+            <item>infinite</item>
+            <item>reverse</item>
+            <item>alternate</item>
+            <item>alternate-reverse</item>
+            <item>forwards</item>
+            <item>backwards</item>
+            <item>running</item>
+            <item>paused</item>
+        </list>
+
+        <list name="colors">
+            <item>black</item>
+            <item>silver</item>
+            <item>gray</item>
+            <item>white</item>
+            <item>maroon</item>
+            <item>red</item>
+            <item>purple</item>
+            <item>fuchsia</item>
+            <item>green</item>
+            <item>lime</item>
+            <item>olive</item>
+            <item>yellow</item>
+            <item>navy</item>
+            <item>blue</item>
+            <item>teal</item>
+            <item>aqua</item>
+            <item>orange</item>
+            <item>aliceblue</item>
+            <item>antiquewhite</item>
+            <item>aquamarine</item>
+            <item>azure</item>
+            <item>beige</item>
+            <item>bisque</item>
+            <item>blanchedalmond</item>
+            <item>blueviolet</item>
+            <item>brown</item>
+            <item>burlywood</item>
+            <item>cadetblue</item>
+            <item>chartreuse</item>
+            <item>chocolate</item>
+            <item>coral</item>
+            <item>cornflowerblue</item>
+            <item>cornsilk</item>
+            <item>crimson</item>
+            <item>cyan</item>
+            <item>aqua</item>
+            <item>darkblue</item>
+            <item>darkcyan</item>
+            <item>darkgoldenrod</item>
+            <item>darkgray</item>
+            <item>darkgreen</item>
+            <item>darkgrey</item>
+            <item>darkkhaki</item>
+            <item>darkmagenta</item>
+            <item>darkolivegreen</item>
+            <item>darkorange</item>
+            <item>darkorchid</item>
+            <item>darkred</item>
+            <item>darksalmon</item>
+            <item>darkseagreen</item>
+            <item>darkslateblue</item>
+            <item>darkslategray</item>
+            <item>darkslategrey</item>
+            <item>darkturquoise</item>
+            <item>darkviolet</item>
+            <item>deeppink</item>
+            <item>deepskyblue</item>
+            <item>dimgray</item>
+            <item>dimgrey</item>
+            <item>dodgerblue</item>
+            <item>firebrick</item>
+            <item>floralwhite</item>
+            <item>forestgreen</item>
+            <item>gainsboro</item>
+            <item>ghostwhite</item>
+            <item>gold</item>
+            <item>goldenrod</item>
+            <item>greenyellow</item>
+            <item>grey</item>
+            <item>honeydew</item>
+            <item>hotpink</item>
+            <item>indianred</item>
+            <item>indigo</item>
+            <item>ivory</item>
+            <item>khaki</item>
+            <item>lavender</item>
+            <item>lavenderblush</item>
+            <item>lawngreen</item>
+            <item>lemonchiffon</item>
+            <item>lightblue</item>
+            <item>lightcoral</item>
+            <item>lightcyan</item>
+            <item>lightgoldenrodyellow</item>
+            <item>lightgray</item>
+            <item>lightgreen</item>
+            <item>lightgrey</item>
+            <item>lightpink</item>
+            <item>lightsalmon</item>
+            <item>lightseagreen</item>
+            <item>lightskyblue</item>
+            <item>lightslategray</item>
+            <item>lightslategrey</item>
+            <item>lightsteelblue</item>
+            <item>lightyellow</item>
+            <item>limegreen</item>
+            <item>linen</item>
+            <item>magenta</item>
+            <item>fuchsia</item>
+            <item>mediumaquamarine</item>
+            <item>mediumblue</item>
+            <item>mediumorchid</item>
+            <item>mediumpurple</item>
+            <item>mediumseagreen</item>
+            <item>mediumslateblue</item>
+            <item>mediumspringgreen</item>
+            <item>mediumturquoise</item>
+            <item>mediumvioletred</item>
+            <item>midnightblue</item>
+            <item>mintcream</item>
+            <item>mistyrose</item>
+            <item>moccasin</item>
+            <item>navajowhite</item>
+            <item>oldlace</item>
+            <item>olivedrab</item>
+            <item>orangered</item>
+            <item>orchid</item>
+            <item>palegoldenrod</item>
+            <item>palegreen</item>
+            <item>paleturquoise</item>
+            <item>palevioletred</item>
+            <item>papayawhip</item>
+            <item>peachpuff</item>
+            <item>peru</item>
+            <item>pink</item>
+            <item>plum</item>
+            <item>powderblue</item>
+            <item>rosybrown</item>
+            <item>royalblue</item>
+            <item>saddlebrown</item>
+            <item>salmon</item>
+            <item>sandybrown</item>
+            <item>seagreen</item>
+            <item>seashell</item>
+            <item>sienna</item>
+            <item>skyblue</item>
+            <item>slateblue</item>
+            <item>slategray</item>
+            <item>slategrey</item>
+            <item>snow</item>
+            <item>springgreen</item>
+            <item>steelblue</item>
+            <item>tan</item>
+            <item>thistle</item>
+            <item>tomato</item>
+            <item>turquoise</item>
+            <item>violet</item>
+            <item>wheat</item>
+            <item>whitesmoke</item>
+            <item>yellowgreen</item>
+            <item>rebeccapurple</item>
+
+            <item>ActiveBorder</item>
+            <item>ActiveCaption</item>
+            <item>AppWorkspace</item>
+            <item>Background</item>
+            <item>ButtonFace</item>
+            <item>ButtonHighlight</item>
+            <item>ButtonShadow</item>
+            <item>ButtonText</item>
+            <item>CaptionText</item>
+            <item>GrayText</item>
+            <item>Highlight</item>
+            <item>HighlightText</item>
+            <item>InactiveBorder</item>
+            <item>InactiveCaption</item>
+            <item>InactiveCaptionText</item>
+            <item>InfoBackground</item>
+            <item>InfoText</item>
+            <item>Menu</item>
+            <item>MenuText</item>
+            <item>Scrollbar</item>
+            <item>ThreeDDarkShadow</item>
+            <item>ThreeDFace</item>
+            <item>ThreeDHighlight</item>
+            <item>ThreeDLightShadow</item>
+            <item>ThreeDShadow</item>
+            <item>Window</item>
+            <item>WindowFrame</item>
+            <item>WindowText</item>
+        </list>
+
+        <list name="functions">
+            <item>attr</item>
+            <item>calc</item>
+            <item>hsl</item>
+            <item>hsla</item>
+            <item>linear-gradient</item>
+            <item>radial-gradient</item>
+            <item>repeating-linear-gradient</item>
+            <item>repeating-radial-gradient</item>
+            <item>rgb</item>
+            <item>rgba</item>
+            <item>var</item>
+            <item>url</item>
+
+            <!-- clip -->
+            <item>rect</item>
+
+            <!-- shape-outside and clip-path -->
+            <item>inset</item>
+            <item>circle</item>
+            <item>ellipse</item>
+            <item>polygon</item>
+
+            <!-- filter and backdrop-filter -->
+            <item>blur</item>
+            <item>brightness</item>
+            <item>contrast</item>
+            <item>drop-shadow</item>
+            <item>grayscale</item>
+            <item>hue-rotate</item>
+            <item>invert</item>
+            <item>opacity</item>
+            <item>saturate</item>
+            <item>sepia</item>
+
+            <!-- grid-template-columns and grid-template-rows -->
+            <item>max-content</item>
+            <item>min-content</item>
+            <item>minmax</item>
+            <item>fix-content</item>
+            <item>repeat</item>
+
+            <!-- transition and animation -->
+            <item>cubic-bezier</item>
+            <item>frames</item>
+            <item>steps</item>
+
+            <!-- transform -->
+            <item>matrix</item>
+            <item>matrix3d</item>
+            <item>perspective</item>
+            <item>rotate</item>
+            <item>rotate3d</item>
+            <item>rotateX</item>
+            <item>rotateY</item>
+            <item>rotateZ</item>
+            <item>scale</item>
+            <item>scale3d</item>
+            <item>scaleX</item>
+            <item>scaleY</item>
+            <item>scaleZ</item>
+            <item>skew</item>
+            <item>skewX</item>
+            <item>skewY</item>
+            <item>translate</item>
+            <item>translate3d</item>
+            <item>translateX</item>
+            <item>translateY</item>
+            <item>translateZ</item>
+
+            <!-- inner @font-face -->
+            <item>local</item>
+            <item>format</item>
+        </list>
+
+        <list name="medias">
+            <!-- types -->
+            <item>all</item>
+            <item>print</item>
+            <item>screen</item>
+            <item>speech</item>
+
+            <!-- features -->
+            <item>any-pointer</item>
+            <item>any-hover</item>
+            <item>aspect-ratio</item>
+            <item>color</item>
+            <item>color-gamut</item>
+            <item>color-index</item>
+            <item>display-mode</item>
+            <item>grid</item>
+            <item>height</item>
+            <item>hover</item>
+            <item>max-aspect-ratio</item>
+            <item>max-color</item>
+            <item>max-color-index</item>
+            <item>max-device-aspect-ratio</item>
+            <item>max-device-height</item>
+            <item>max-device-width</item>
+            <item>max-height</item>
+            <item>max-monochrome</item>
+            <item>max-resolution</item>
+            <item>max-width</item>
+            <item>min-aspect-ratio</item>
+            <item>min-color</item>
+            <item>min-color-index</item>
+            <item>min-device-aspect-ratio</item>
+            <item>min-device-height</item>
+            <item>min-device-width</item>
+            <item>min-height</item>
+            <item>min-monochrome</item>
+            <item>min-resolution</item>
+            <item>min-width</item>
+            <item>monochrome</item>
+            <item>orientation</item>
+            <item>pointer</item>
+            <item>resolution</item>
+            <item>scan</item>
+            <item>update</item>
+            <item>width</item>
+        </list>
+
+        <!-- prefixed by :: -->
+        <list name="pseudoelements">
+            <item>after</item>
+            <item>before</item>
+            <item>cue</item>
+            <item>first-letter</item>
+            <item>first-line</item>
+            <item>selection</item>
+
+            <!-- experimental -->
+            <item>backdrop</item>
+            <item>placeholder</item>
+            <!-- <item>marker</item> -->
+            <item>slotted</item>
+            <!-- <item>spelling-error</item> -->
+            <!-- <item>grammar-error</item> -->
+
+            <!-- UI pseudo-classes -->
+            <item>value</item>
+            <item>choices</item>
+            <item>repeat-item</item>
+            <item>repeat-index</item>
+
+            <item>-moz-progress-bar</item>
+            <item>-moz-range-progress</item>
+            <item>-moz-range-thumb</item>
+            <item>-moz-range-track</item>
+            <item>-moz-selection</item>
+            <item>-ms-fill</item>
+            <item>-ms-fill-lower</item>
+            <item>-ms-fill-upper</item>
+            <item>-ms-thumb</item>
+            <item>-ms-track</item>
+            <item>-webkit-progress-bar</item>
+            <item>-webkit-progress-value</item>
+            <item>-webkit-slider-runnable-track</item>
+            <item>-webkit-slider-thumb</item>
+        </list>
+
+        <!-- prefixed by : -->
+        <list name="pseudoclasses">
+            <item>active</item>
+            <item>any-link</item>
+            <item>checked</item>
+            <item>default</item>
+            <item>defined</item>
+            <!-- <item>dir</item> -->
+            <item>disabled</item>
+            <item>empty</item>
+            <item>enabled</item>
+            <item>first-child</item>
+            <item>first-of-type</item>
+            <item>fullscreen</item>
+            <item>focus</item>
+            <item>focus-within</item>
+            <item>host</item>
+            <item>hover</item>
+            <item>in-range</item>
+            <item>indeterminate</item>
+            <item>invalid</item>
+            <item>lang</item>
+            <item>last-child</item>
+            <item>last-of-type</item>
+            <item>link</item>
+            <item>not</item>
+            <item>nth-child</item>
+            <item>nth-last-child</item>
+            <item>nth-last-of-type</item>
+            <item>nth-of-type</item>
+            <item>only-child</item>
+            <item>only-of-type</item>
+            <item>optional</item>
+            <item>out-of-range</item>
+            <item>placeholder-shown</item>
+            <item>read-only</item>
+            <item>read-write</item>
+            <item>required</item>
+            <item>root</item>
+            <item>scope</item>
+            <item>target</item>
+            <item>valid</item>
+            <item>visited</item>
+
+            <!-- pseudo-elements -->
+            <item>after</item>
+            <item>before</item>
+            <item>cue</item>
+            <item>first-letter</item>
+            <item>first-line</item>
+            <item>selection</item>
+        </list>
+
+        <list name="pseudoclass-not">
+            <item>not</item>
+        </list>
+
+        <list name="pseudoclasses-@page">
+            <item>blank</item>
+            <item>first</item>
+            <item>left</item>
+            <item>recto</item>
+            <item>right</item>
+            <item>verso</item>
+        </list>
+
+        <list name="at-rules">
+            <item>@character</item>
+            <item>@charset</item>
+            <item>@import</item>
+            <item>@namespace</item>
+        </list>
+
+        <list name="nested at-rules">
+            <item>@document</item>
+            <item>@media</item>
+            <item>@supports</item>
+        </list>
+
+        <list name="@viewport">
+            <item>@viewport</item>
+        </list>
+
+        <list name="within-@viewport">
+            <item>min-width</item>
+            <item>max-width</item>
+            <item>width</item>
+            <item>min-height</item>
+            <item>max-height</item>
+            <item>height</item>
+            <item>zoom</item>
+            <item>min-zoom</item>
+            <item>max-zoom</item>
+            <item>user-zoom</item>
+            <item>orientation</item>
+            <item>viewport-fit</item>
+        </list>
+
+        <list name="@page">
+            <item>@page</item>
+        </list>
+
+        <list name="within-@page">
+            <item>size</item>
+            <item>marks</item>
+            <item>bleed</item>
+        </list>
+
+        <list name="@font-face">
+            <item>@font-face</item>
+        </list>
+
+        <list name="within-@font-face">
+            <item>font-display</item>
+            <item>font-family</item>
+            <item>font-stretch</item>
+            <item>font-style</item>
+            <item>font-weight</item>
+            <item>font-variant</item>
+            <item>font-feature-settings</item>
+            <item>font-variation-settings</item>
+            <item>src</item>
+            <item>unicode-range</item>
+        </list>
+
+        <list name="@keyframes">
+            <item>@keyframes</item>
+        </list>
+
+        <list name="within-@keyframes">
+            <item>from</item>
+            <item>to</item>
+        </list>
+
+        <list name="media operators">
+            <item>and</item>
+            <item>only</item>
+            <item>not</item>
+        </list>
+
+        <contexts>
+            <context name="Base" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <IncludeRules context="FindComments" />
+                <DetectChar attribute="Normal Text" context="RuleSet" char="{" beginRegion="ruleset" />
+                <DetectChar attribute="At Rule" context="SelectAtRule" char="@" lookAhead="true" />
+                <!-- find selectors // .class #id :hover :nth-child(2n+1) [type="search"] -->
+                <DetectChar attribute="Selector Pseudo" context="SelectorPseudo" char=":" />
+                <DetectChar attribute="Selector Attribute" context="SelectorAttr" char="[" />
+                <DetectChar attribute="Separator Symbol" context="#stay" char="," />
+                <AnyChar attribute="Operator" context="#stay" String="*>+~|" />
+                <RegExpr attribute="Selector Id" context="#stay" String="#[-]?(&nmstart;)(&nmchar;)*" />
+                <RegExpr attribute="Selector Class" context="#stay" String="\.([a-zA-Z0-9\-_]|[\x80-\xFF]|\\[0-9A-Fa-f]{1,6})*" />
+                <RegExpr attribute="Selector Tag" context="#stay" String="[-]?(&nmstart;)(&nmchar;)*" />
+            </context>
+
+            <context name="FindSelector" attribute="Normal Text" lineEndContext="#stay">
+                <IncludeRules context="FindComments" />
+                <!-- find selectors // .class #id :hover :nth-child(2n+1) [type="search"] -->
+                <DetectChar attribute="Selector Attribute" context="SelectorAttr" char="[" />
+                <DetectChar attribute="Separator Symbol" context="#stay" char="," />
+                <AnyChar attribute="Operator" context="#stay" String="*>+~|" />
+                <RegExpr attribute="Selector Id" context="#stay" String="#[-]?(&nmstart;)(&nmchar;)*" />
+                <RegExpr attribute="Selector Class" context="#stay" String="\.([a-zA-Z0-9\-_]|[\x80-\xFF]|\\[0-9A-Fa-f]{1,6})*" />
+                <RegExpr attribute="Selector Tag" context="#stay" String="[-]?(&nmstart;)(&nmchar;)*" />
+            </context>
+
+            <!-- find functions // rgba(255,255,255,0.75) -->
+            <context name="FindFunctions" attribute="Normal Text" lineEndContext="#stay">
+                <RegExpr attribute="Function" context="Function" String="[a-z\-]{2,}\(" lookAhead="true" />
+            </context>
+
+            <!-- find values //  10px 12pt 2.5em 1rem 75% #ffcc99 red solid -->
+            <context name="FindValues" attribute="Normal Text" lineEndContext="#stay">
+                <DetectChar attribute="Annotation" context="Annotation" char="!" />
+                <keyword attribute="Value Keyword" context="#stay" String="value keywords" />
+                <keyword attribute="Value" context="#stay" String="values" />
+                <keyword attribute="Color" context="#stay" String="colors" />
+                <RegExpr attribute="Color" context="#stay" String="#([0-9A-Fa-f]{3}){1,2}\b" />
+                <RegExpr attribute="Number" context="FindUnits" String="[-+]?[0-9.]+(?![-+])" />
+                <RegExpr attribute="Normal Text" context="#stay" String="[-]?(&nmstart;)(&nmchar;)*" />
+            </context>
+
+            <context name="Annotation" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+                <WordDetect attribute="Annotation" context="#pop" String="important" />
+            </context>
+
+            <context name="FindUnits" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+                <RegExpr attribute="Unit" context="#stay" String="(%|(em|ex|ch|rem|vw|vh|vm|px|in|cm|mm|pt|pc|deg|rad|grad|turn|ms|s|Hz|kHz)\b)(?![-+])" />
+            </context>
+
+            <!-- find strings // "some words" 'some words' -->
+            <context name="FindStrings" attribute="Normal Text" lineEndContext="#stay">
+                <DetectChar attribute="String" context="StringDQ" char="&quot;" />
+                <DetectChar attribute="String" context="StringSQ" char="'" />
+            </context>
+
+            <!-- find comments // /* comment */ -->
+            <context name="FindComments" attribute="Normal Text" lineEndContext="#stay">
+                <Detect2Chars attribute="Comment" context="IsComments" char="/" char1="*" lookAhead="true"/>
+                <Detect2Chars attribute="Error" context="Error" char="/" char1="/" />
+            </context>
+
+            <context name="Error" attribute="Error" lineEndContext="#pop">
+                <RegExpr attribute="Error" context="#pop" String=".*" />
+            </context>
+
+            <context name="IsComments" attribute="Normal Text" lineEndContext="#stay">
+                <RegExpr attribute="Region Marker" context="#pop" String="/\*\s*BEGIN\b.*\*/" beginRegion="UserDefined" />
+                <RegExpr attribute="Region Marker" context="#pop" String="/\*\s*END\b.*\*/" endRegion="UserDefined" />
+                <Detect2Chars attribute="Comment" context="Comment" char="/" char1="*" beginRegion="comment" />
+            </context>
+
+            <context name="SelectAtRule" attribute="At Rule" lineEndContext="#pop">
+                <keyword attribute="At Rule" context="#pop!NestedAtRule" String="nested at-rules" />
+                <keyword attribute="At Rule" context="#pop!AtRule" String="at-rules" />
+                <keyword attribute="At Rule" context="#pop!@keyframes" String="@keyframes" />
+                <keyword attribute="At Rule" context="#pop!@viewport" String="@viewport" />
+                <keyword attribute="At Rule" context="#pop!@font-face" String="@font-face" />
+                <keyword attribute="At Rule" context="#pop!@page" String="@page" />
+                <RegExpr attribute="At Rule" context="#pop!UnknownAtRule" String="@[a-zA-Z0-9\-_]+\b" />
+            </context>
+
+            <context name="@keyframes" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <IncludeRules context="FindComments" />
+                <DetectChar attribute="Normal Text" context="Within-@keyframes" char="{" beginRegion="ruleset" />
+            </context>
+
+            <context name="Within-@keyframes" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <IncludeRules context="FindComments" />
+                <DetectChar attribute="Normal Text" context="#pop#pop" char="}" endRegion="ruleset" />
+                <DetectChar attribute="Normal Text" context="RuleSet" char="{" beginRegion="ruleset" />
+                <keyword attribute="Value" context="#stay" String="within-@keyframes" />
+                <RegExpr attribute="Value" context="#stay" String="[-+]?[0-9.]+%" />
+            </context>
+
+            <context name="@viewport" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <IncludeRules context="FindComments" />
+                <DetectChar attribute="Selector Pseudo" context="SelectorPseudo" char=":" />
+                <DetectChar attribute="Normal Text" context="#pop!Within-@viewport" char="{" beginRegion="ruleset" />
+            </context>
+
+            <context name="Within-@viewport" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <keyword attribute="Property" context="IsProperty" String="within-@viewport" />
+                <IncludeRules context="RuleSet" />
+            </context>
+
+            <context name="@font-face" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <IncludeRules context="FindComments" />
+                <DetectChar attribute="Normal Text" context="#pop!Within-@font-face" char="{" beginRegion="ruleset" />
+            </context>
+
+            <context name="Within-@font-face" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <IncludeRules context="FindComments" />
+                <keyword attribute="Property" context="IsProperty" String="within-@font-face" />
+                <RegExpr attribute="Unknown Property" context="IsProperty" String="[A-Za-z_-]+\b" />
+                <DetectChar attribute="Normal Text" context="#pop" char="}" endRegion="ruleset" />
+            </context>
+
+            <context name="@page" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <IncludeRules context="FindComments" />
+                <DetectChar attribute="Selector Pseudo" context="SelectorPseudo-@page" char=":" />
+                <DetectChar attribute="Normal Text" context="#pop!Within-@page" char="{" beginRegion="ruleset" />
+            </context>
+
+            <context name="SelectorPseudo-@page" attribute="Selector Pseudo" lineEndContext="#pop">
+                <keyword attribute="Selector Pseudo" context="#pop" String="pseudoclasses-@page" />
+                <RegExpr attribute="Selector Pseudo" context="#pop" String="[-a-zA-Z][-a-zA-Z0-9]*" />
+            </context>
+
+            <context name="Within-@page" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <keyword attribute="Property" context="IsProperty" String="within-@page" />
+                <IncludeRules context="RuleSet" />
+            </context>
+
+            <context name="IsProperty" attribute="Error" lineEndContext="#stay">
+                <DetectSpaces attribute="Normal Text" />
+                <DetectChar attribute="Normal Text" context="RuleParameters" char=":" />
+            </context>
+
+            <context name="NestedAtRule" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <DetectChar attribute="Normal Text" context="NestedBase" char="{" beginRegion="ruleset" />
+                <IncludeRules context="AtRuleValue" />
+            </context>
+
+            <context name="NestedBase" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <DetectChar attribute="Normal Text" context="#pop#pop" char="}" endRegion="ruleset" />
+                <IncludeRules context="Base" />
+            </context>
+
+            <context name="AtRule" attribute="Normal Text" lineEndContext="#pop">
+                <DetectSpaces />
+                <DetectChar attribute="Separator Symbol" context="#pop" char=";" />
+                <IncludeRules context="AtRuleValue" />
+            </context>
+
+            <context name="UnknownAtRule" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <DetectChar attribute="Separator Symbol" context="#pop" char=";" />
+                <DetectChar attribute="Normal Text" context="#pop!RuleSet" char="{" beginRegion="ruleset" />
+                <DetectChar attribute="Normal Text" context="#pop" char="}" endRegion="ruleset" />
+                <IncludeRules context="AtRuleValue" />
+            </context>
+
+            <context name="AtRuleValue" attribute="Normal Text" lineEndContext="#stay">
+                <IncludeRules context="FindComments" />
+                <IncludeRules context="FindStrings" />
+                <IncludeRules context="FindFunctions" />
+                <keyword attribute="Keyword" context="#stay" String="media operators" />
+                <RegExpr attribute="Property" context="#stay" String="[A-Za-z_-]+(?=\s*:)" />
+                <keyword attribute="Value" context="#stay" String="medias" />
+                <IncludeRules context="FindValues" />
+            </context>
+
+            <context name="SelectorAttr" attribute="Selector Attribute" lineEndContext="#stay">
+                <DetectChar attribute="Selector Attribute" context="#pop" char="]" />
+                <IncludeRules context="FindStrings" />
+                <DetectChar   attribute="Operator" context="SelectorAttrValue" char="=" />
+                <Detect2Chars attribute="Operator" context="SelectorAttrValue" char="~" char1="=" />
+                <Detect2Chars attribute="Operator" context="SelectorAttrValue" char="^" char1="=" />
+                <Detect2Chars attribute="Operator" context="SelectorAttrValue" char="$" char1="=" />
+                <Detect2Chars attribute="Operator" context="SelectorAttrValue" char="*" char1="=" />
+                <Detect2Chars attribute="Operator" context="SelectorAttrValue" char="|" char1="=" />
+                <DetectIdentifier />
+            </context>
+
+            <context name="SelectorAttrValue" attribute="String" lineEndContext="#stay">
+                <DetectChar attribute="Selector Attribute" context="#pop#pop" char="]" />
+                <DetectIdentifier />
+            </context>
+
+            <context name="SelectorPseudo" attribute="Selector Pseudo" lineEndContext="#pop">
+                <DetectChar attribute="Selector Pseudo" context="SelectorPseudoElements" char=":" />
+                <keyword attribute="Selector Pseudo" context="SelectorPseudoValueSelector" String="pseudoclass-not" />
+                <keyword attribute="Selector Pseudo" context="SelectorPseudoValue" String="pseudoclasses" />
+                <RegExpr attribute="Selector Pseudo" context="SelectorPseudoValue" String="[-a-zA-Z][-a-zA-Z0-9]*" />
+            </context>
+
+            <context name="SelectorPseudoElements" attribute="Selector Pseudo" lineEndContext="#pop#pop">
+                <keyword attribute="Selector Pseudo" context="#pop!SelectorPseudoValue" String="pseudoelements" />
+                <RegExpr attribute="Selector Pseudo" context="#pop!SelectorPseudoValue" String="[-a-zA-Z][-a-zA-Z0-9]*" />
+            </context>
+
+            <context name="SelectorPseudoValueSelector" attribute="Selector Pseudo" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="#pop#pop">
+                <DetectChar attribute="Selector Pseudo" context="SelectorPseudoValueCloseSelector" char="(" />
+            </context>
+
+            <context name="SelectorPseudoValueCloseSelector" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <DetectChar attribute="Selector Pseudo" context="#pop#pop#pop" char=")" />
+                <DetectChar attribute="Error" context="#pop#pop#pop!RuleSet" char="{" beginRegion="ruleset" />
+                <IncludeRules context="FindSelector" />
+            </context>
+
+            <context name="SelectorPseudoValue" attribute="Selector Pseudo" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="#pop#pop">
+                <DetectChar attribute="Selector Pseudo" context="SelectorPseudoValueClose" char="(" />
+            </context>
+
+            <context name="SelectorPseudoValueClose" attribute="Selector Pseudo" lineEndContext="#pop#pop#pop">
+                <DetectChar attribute="Selector Pseudo" context="#pop#pop#pop" char=")" />
+                <DetectIdentifier />
+            </context>
+
+            <context name="Comment" attribute="Comment" lineEndContext="#stay">
+                <DetectSpaces />
+                <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="comment" />
+                <IncludeRules context="##Alerts" />
+                <DetectIdentifier />
+            </context>
+
+            <context name="RuleSet" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <DetectChar attribute="Normal Text" context="#pop" char="}" endRegion="ruleset" />
+                <RegExpr attribute="Property" context="Rule" String="[A-Za-z_-]+(?=\s*:)" lookAhead="true" />
+                <IncludeRules context="Base" />
+                <RegExpr attribute="Normal Text" context="#stay" String="[A-Za-z_-]+" />
+                <!-- auto-completion only, includes by previous rule -->
+                <keyword attribute="Normal Text" context="#stay" String="properties" />
+            </context>
+
+            <context name="Rule" attribute="Normal Text" lineEndContext="#stay">
+                <DetectChar attribute="Normal Text" context="RuleParameters" char=":" />
+                <Detect2Chars attribute="Variable" context="IsVariable" char="-" char1="-" />
+                <keyword attribute="Property" context="#stay" String="properties" />
+                <RegExpr attribute="Unknown Property" context="#stay" String="[^:]+" />
+            </context>
+
+            <context name="IsVariable" attribute="Normal Text" lineEndContext="#pop">
+                <DetectChar attribute="Normal Text" context="#pop!RuleParameters" char=":" />
+                <RegExpr attribute="Variable" context="#stay" String="[^:]+" />
+            </context>
+
+            <context name="RuleParameters" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <IncludeRules context="FindComments" />
+                <IncludeRules context="FindStrings" />
+                <IncludeRules context="FindFunctions" />
+                <IncludeRules context="FindValues" />
+                <!-- Jump out conditions -->
+                <DetectChar attribute="Separator Symbol" context="#pop#pop" char=";" />
+                <DetectChar attribute="Separator Symbol" context="#stay" char="," />
+                <DetectChar attribute="Normal Text" context="#pop#pop#pop" char="}" endRegion="ruleset" />
+                <!-- auto-completion only -->
+                <keyword attribute="Normal Text" context="#stay" String="functions" />
+            </context>
+
+            <context name="Function" attribute="Normal Text" lineEndContext="#stay">
+                <DetectChar attribute="Function" context="FunctionParameters" char="(" />
+                <StringDetect attribute="Function" context="FunctionVar" String="var(" />
+                <StringDetect attribute="Function" context="FunctionUrl" String="url(" />
+                <StringDetect attribute="Function" context="FunctionCalc" String="calc(" />
+                <keyword attribute="Function" context="#stay" String="functions" />
+                <RegExpr attribute="Normal Text" context="#stay" String="[-a-zA-Z][-a-zA-Z0-9]*" />
+            </context>
+
+            <context name="FunctionVar" attribute="Variable" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop!FunctionParameters">
+                <DetectSpaces />
+                <RegExpr attribute="Variable" context="#pop!FunctionParameters" String="--[^ \t\),]+" />
+            </context>
+
+            <context name="FunctionCalc" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <DetectChar attribute="Function" context="#pop#pop" char=")" />
+                <IncludeRules context="Calc" />
+            </context>
+
+            <context name="NestedCalc" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <DetectChar attribute="Normal Text" context="#pop" char=")" />
+                <IncludeRules context="Calc" />
+            </context>
+
+            <context name="Calc" attribute="Normal Text" lineEndContext="#stay">
+                <DetectChar attribute="Separator Symbol" context="#stay" char="," />
+                <DetectChar attribute="Normal Text" context="NestedCalc" char="(" />
+                <IncludeRules context="FindComments" />
+                <IncludeRules context="FindStrings" />
+                <IncludeRules context="FindFunctions" />
+                <IncludeRules context="FindValues" />
+                <RegExpr attribute="Operator" context="#stay" String="[-](?=$|[ \t(,;])|[+](?=$|[^0-9)])|[/*]" />
+                <!-- auto-completion only -->
+                <keyword attribute="Normal Text" context="#stay" String="functions" />
+            </context>
+
+            <context name="FunctionUrl" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="UrlValue">
+                <DetectSpaces />
+                <IncludeRules context="FindStrings" />
+                <DetectChar attribute="Function" context="#pop#pop" char=")" />
+            </context>
+
+            <context name="UrlValue" attribute="String" lineEndContext="#stay">
+                <DetectChar attribute="Function" context="#pop#pop#pop" char=")" />
+            </context>
+
+            <context name="FunctionParameters" attribute="Normal Text" lineEndContext="#stay">
+                <DetectSpaces />
+                <DetectChar attribute="Function" context="#pop#pop" char=")" />
+                <IncludeRules context="FindComments" />
+                <IncludeRules context="FindStrings" />
+                <IncludeRules context="FindValues" />
+                <DetectChar attribute="Separator Symbol" context="#stay" char="," />
+            </context>
+
+            <!-- string contexts -->
+            <context name="StringDQ" attribute="String" lineEndContext="#stay">
+                <DetectChar attribute="String" context="#pop" char="&quot;" />
+                <IncludeRules context="InsideString" />
+            </context>
+
+            <context name="StringSQ" attribute="String" lineEndContext="#stay">
+                <DetectChar attribute="String" context="#pop" char="'" />
+                <IncludeRules context="InsideString" />
+            </context>
+
+            <context name="InsideString" attribute="String" lineEndContext="#stay">
+                <RegExpr attribute="SpecialChar" context="#stay" String="\\([0-9A-Fa-f]{1,6}|.?)" />
+                <RegExpr attribute="String" context="#stay" String="\\?[^&quot;'\\]+" />
+            </context>
+
+        </contexts>
+
+        <itemDatas>
+            <itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false"/>
+            <itemData name="At Rule" defStyleNum="dsImport" spellChecking="false"/>
+            <itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
+            <itemData name="Property" defStyleNum="dsKeyword" spellChecking="false"/>
+            <itemData name="Unknown Property" defStyleNum="dsNormal" spellChecking="false"/>
+            <itemData name="String" defStyleNum="dsString"/>
+            <itemData name="SpecialChar" defStyleNum="dsSpecialChar" spellChecking="false"/>
+            <itemData name="Operator" defStyleNum="dsOperator" spellChecking="false"/>
+            <itemData name="Separator Symbol" defStyleNum="dsOperator" spellChecking="false"/>
+            <itemData name="Value" defStyleNum="dsDecVal" spellChecking="false"/>
+            <itemData name="Number" defStyleNum="dsDecVal" spellChecking="false"/>
+            <itemData name="Value Keyword" defStyleNum="dsBuiltIn" spellChecking="false"/>
+            <itemData name="Color" defStyleNum="dsConstant" spellChecking="false"/>
+            <itemData name="Unit" defStyleNum="dsDataType" spellChecking="false"/>
+            <itemData name="Variable" defStyleNum="dsVariable" spellChecking="false"/>
+            <itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/>
+            <itemData name="Annotation" defStyleNum="dsAttribute" spellChecking="false"/>
+            <itemData name="Selector Id" defStyleNum="dsPreprocessor" bold="1" spellChecking="false"/>
+            <itemData name="Selector Class" defStyleNum="dsFunction" spellChecking="false"/>
+            <itemData name="Selector Attribute" defStyleNum="dsExtension" spellChecking="false"/>
+            <itemData name="Selector Pseudo" defStyleNum="dsInformation" italic="1" spellChecking="false"/>
+            <itemData name="Selector Tag" defStyleNum="dsNormal" spellChecking="false"/>
+            <itemData name="Comment" defStyleNum="dsComment" />
+            <itemData name="Region Marker" defStyleNum="dsRegionMarker" spellChecking="false"/>
+            <itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
+        </itemDatas>
+    </highlighting>
+
+    <general>
+        <keywords casesensitive="0" weakDeliminator="-%@" />
         <comments>
             <comment name="multiLine" start="/*" end="*/" />
         </comments>
diff --git a/xml/dockerfile.xml b/xml/dockerfile.xml
--- a/xml/dockerfile.xml
+++ b/xml/dockerfile.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <!-- Dockerfile syntaxfile v1.0 by James Turnbull <james@lovedthanlost.net> -->
-<language name="Dockerfile" section="Other" version="6" kateversion="3.4" extensions="Dockerfile" author="James Turnbull (james@lovedthanlost.net)" license="LGPLv2+">
+<language name="Dockerfile" section="Other" version="7" kateversion="3.4" extensions="Dockerfile" author="James Turnbull (james@lovedthanlost.net)" license="MIT">
   <highlighting>
     <list name="keywords">
       <item>ADD</item>
diff --git a/xml/email.xml b/xml/email.xml
--- a/xml/email.xml
+++ b/xml/email.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Email" version="4" kateversion="5.0" extensions="*.eml;*.email;*.emlx;*.mbox;*.mbx" section="Other" mimetype="message/rfc822" casesensitive="0" author="Volker Krause (vkrause@kde.org)" license="MIT">
+<language name="Email" version="5" kateversion="5.0" extensions="*.eml;*.email;*.emlx;*.mbox;*.mbx" section="Other" mimetype="message/rfc822" casesensitive="0" author="Volker Krause (vkrause@kde.org)" license="MIT">
     <highlighting>
         <list name="header-names">
             <item>Authentication-Results:</item>
@@ -51,8 +51,14 @@
 
         <contexts>
             <context name="header" attribute="Normal Text" lineEndContext="#stay" lineEmptyContext="#pop!body-context">
+                <WordDetect attribute="Common Header" context="header-subject" String="Subject:" column="0"/>
                 <keyword attribute="Common Header" context="header-structured-content" String="header-names" column="0"/>
                 <RegExpr attribute="Other Header" context="header-content" String="[0-9a-zA-Z-]+:\s" column="0"/>
+            </context>
+
+            <context name="header-subject" attribute="Normal Text" lineEndContext="#stay" lineEmptyContext="#pop#pop!body-context">
+                <RegExpr context="#pop" String="\S" column="0" lookAhead="true"/>
+                <DetectChar attribute="String" context="string-context" char="&quot;"/>
             </context>
 
             <context name="header-structured-content" attribute="Normal Text" lineEndContext="#stay" lineEmptyContext="#pop#pop!body-context">
diff --git a/xml/fortran.xml b/xml/fortran.xml
--- a/xml/fortran.xml
+++ b/xml/fortran.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Fortran" version="2" kateversion="5.0" section="Sources" extensions="*.f;*.F;*.for;*.FOR;*.f90;*.F90;*.fpp;*.FPP;*.f95;*.F95;" mimetype="text/x-fortran-src" casesensitive="0" author="Franchin Matteo (fnch@libero.it)" license="LGPL" priority="9">
+<language name="Fortran" version="3" kateversion="5.0" section="Sources" extensions="*.f;*.F;*.for;*.FOR;*.f90;*.F90;*.fpp;*.FPP;*.f95;*.F95;" mimetype="text/x-fortran-src" casesensitive="0" author="Franchin Matteo (fnch@libero.it)" license="LGPL" priority="9">
 <!-- by Franchin Matteo, fnch@libero.it -->
   <highlighting>
 
@@ -402,8 +402,12 @@
 
 <!-- This context highlights comments -->
       <context attribute="Normal Text" lineEndContext="#stay" name="find_comments">
-        <RegExpr attribute="Comment" context="#stay" String="[cC\*].*$" column="0"/>
-        <RegExpr attribute="Comment" context="#stay" String="!.*$"/>
+        <AnyChar attribute="Comment" context="comment" String="cC*" column="0"/>
+        <DetectChar attribute="Comment" context="comment" char="!"/>
+      </context>
+
+      <context attribute="Comment" lineEndContext="#pop" name="comment">
+        <IncludeRules context="##Alerts"/>
       </context>
 
 <!-- This context highlights symbols -->
diff --git a/xml/gcc.xml b/xml/gcc.xml
--- a/xml/gcc.xml
+++ b/xml/gcc.xml
@@ -13,7 +13,7 @@
   -->
 <language
     name="GCCExtensions"
-    version="3"
+    version="4"
     kateversion="5.0"
     section="Sources"
     extensions="*.c++;*.cxx;*.cpp;*.cc;*.C;*.h;*.hh;*.H;*.h++;*.hxx;*.hpp;*.hcc;"
@@ -421,7 +421,6 @@
     <item>__UINT_LEAST8_TYPE__</item>
     <item>__USER_LABEL_PREFIX__</item>
     <item>__USING_SJLJ_EXCEPTIONS__</item>
-    <item>__VA_ARGS__</item>
     <item>__VERSION__</item>
     <item>__WCHAR_MAX__</item>
     <item>__WCHAR_MIN__</item>
@@ -532,14 +531,22 @@
       <keyword attribute="GNU Macros" context="#stay" String="GNUMacros" />
       <keyword attribute="GNU Functions" context="#stay" String="GNUFunctions" />
       <keyword attribute="GNU Types" context="#stay" String="GNUTypes" />
-      <StringDetect attribute="GNU Extensions" context="AttrArgs" String="__attribute__" />
-      <StringDetect attribute="GNU Extensions" context="AttrArgs" String="__declspec" />
+      <WordDetect attribute="GNU Extensions" context="AttrArgs" String="__attribute__" />
+      <WordDetect attribute="GNU Extensions" context="AttrArgs" String="__declspec" />
       <keyword attribute="GNU Extensions" context="#stay" String="GNUKeywords" />
       <RegExpr attribute="GNU Functions" context="#stay" String="__builtin_[a-zA-Z0-9_]+" />
-      <!-- (gcc info 6.57) Binary constants using the `0b' prefix -->
-      <RegExpr attribute="GNU Extensions" context="#stay" String="0[Bb][01]+([Uu][Ll]{0,2}|[Ll]{0,2}[Uu]?|_[_0-9A-Za-z]*)?\b" />
     </context>
 
+    <context name="DetectGccExtensionsInPP" attribute="Normal Text" lineEndContext="#stay">
+      <keyword attribute="GNU Macros" context="#stay" String="GNUMacros" />
+      <keyword attribute="GNU Functions" context="#stay" String="GNUFunctions" />
+      <keyword attribute="GNU Types" context="#stay" String="GNUTypes" />
+      <WordDetect attribute="GNU Extensions" context="AttrArgsInPP" String="__attribute__" />
+      <WordDetect attribute="GNU Extensions" context="AttrArgsInPP" String="__declspec" />
+      <keyword attribute="GNU Extensions" context="#stay" String="GNUKeywords" />
+      <RegExpr attribute="GNU Functions" context="#stay" String="__builtin_[a-zA-Z0-9_]+" />
+    </context>
+
     <context name="GNUMacros" attribute="Normal Text" lineEndContext="#stay">
       <keyword attribute="GNU Macros" context="#stay" String="GNUMacros" />
     </context>
@@ -550,6 +557,11 @@
       <DetectChar attribute="GNU Extensions" context="Close" char="(" />
     </context>
 
+    <context name="AttrArgsInPP" attribute="GNU Extensions" lineEndContext="#pop">
+      <DetectChar attribute="Error" context="#pop" char="\" lookAhead="true" />
+      <IncludeRules context="AttrArgs" />
+    </context>
+
     <context name="Close" attribute="GNU Extensions" lineEndContext="#stay">
       <DetectChar attribute="GNU Extensions" context="#pop" char=")" />
       <DetectChar attribute="String" context="AttrStringArg" char="&quot;" />
@@ -559,15 +571,32 @@
       <DetectChar attribute="String" context="#pop" char="&quot;" />
     </context>
 
+
+    <context name="DetectGccAttributes" attribute="Normal Text" lineEndContext="#stay">
+      <StringDetect attribute="GNU Extensions" context="CppAttr" String="gnu::" />
+      <StringDetect attribute="GNU Extensions" context="CppAttr" String="clang::" />
+    </context>
+
+    <context name="DetectNamespaceGccAttributes" attribute="Normal Text" lineEndContext="#stay">
+      <WordDetect attribute="GNU Extensions" context="#pop" String="gnu" />
+      <WordDetect attribute="GNU Extensions" context="#pop" String="clang" />
+    </context>
+
+    <context name="CppAttr" attribute="Error" lineEndContext="#stay">
+      <DetectSpaces/>
+      <DetectIdentifier attribute="GNU Extensions" context="#pop" />
+    </context>
+
   </contexts>
 
   <itemDatas>
-    <itemData name="Normal Text"    defStyleNum="dsNormal" spellChecking="false" />
+    <itemData name="Normal Text"    defStyleNum="dsNormal"    spellChecking="false" />
     <itemData name="GNU Extensions" defStyleNum="dsExtension" spellChecking="false" italic="1" />
-    <itemData name="GNU Functions"  defStyleNum="dsFunction" spellChecking="false" />
-    <itemData name="GNU Macros"     defStyleNum="dsOthers" spellChecking="false" />
-    <itemData name="GNU Types"      defStyleNum="dsDataType" spellChecking="false" />
-    <itemData name="String"         defStyleNum="dsString" spellChecking="false" />
+    <itemData name="GNU Functions"  defStyleNum="dsFunction"  spellChecking="false" />
+    <itemData name="GNU Macros"     defStyleNum="dsOthers"    spellChecking="false" />
+    <itemData name="GNU Types"      defStyleNum="dsDataType"  spellChecking="false" />
+    <itemData name="String"         defStyleNum="dsString"    spellChecking="false" />
+    <itemData name="Error"          defStyleNum="dsError"     spellChecking="false" />
   </itemDatas>
 </highlighting>
 
diff --git a/xml/haskell.xml b/xml/haskell.xml
--- a/xml/haskell.xml
+++ b/xml/haskell.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Haskell" version="9" kateversion="3.4" 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="10" kateversion="3.4" 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>
@@ -9,6 +9,8 @@
     <item>deriving</item>
     <item>do</item>
     <item>else</item>
+    <item>family</item>
+    <item>forall</item>
     <item>if</item>
     <item>in</item>
     <item>infixl</item>
@@ -18,14 +20,13 @@
     <item>module</item>
     <item>newtype</item>
     <item>of</item>
+    <item>pattern</item>
     <item>primitive</item>
     <item>then</item>
     <item>type</item>
     <item>where</item>
   </list>
   <list name="prelude function">
-    <item>FilePath</item>
-    <item>IOError</item>
     <item>abs</item>
     <item>acos</item>
     <item>acosh</item>
@@ -477,6 +478,7 @@
       <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_']*\.)*[\-!#\$%&amp;\*\+/&lt;=&gt;\?&#92;@\^\|~\.:]+" />
       <RegExpr attribute="Type"             context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[A-Z][a-zA-Z0-9_']*" />
+      <RegExpr attribute="Type"             context="#stay" String="'(?![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+"/>
       <RegExpr    attribute="Octal"   context="#stay" String="0[Oo][0-7]+"/>
@@ -605,7 +607,7 @@
 
     <itemData name="Keyword"          defStyleNum="dsKeyword"  spellChecking="false" />
     <itemData name="Type Prelude"     defStyleNum="dsDataType" spellChecking="false" />
-    <itemData name="Function Prelude" defStyleNum="dsNormal"   spellChecking="false" />
+    <itemData name="Function Prelude" defStyleNum="dsFunction" spellChecking="false" />
     <itemData name="Data Prelude"     defStyleNum="dsDataType" spellChecking="false" />
     <itemData name="Class Prelude"    defStyleNum="dsDataType" spellChecking="false" />
 
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="3" kateversion="2.4" author="Jan Janssen (medhefgo@web.de)" license="LGPL">
+<language name="INI Files" section="Configuration" extensions="*.ini;*.pls;*.kcfgc;*.conf" mimetype="" version="4" kateversion="2.4" author="Jan Janssen (medhefgo@web.de)" license="LGPL">
 
 <highlighting>
 <list name="keywords">
diff --git a/xml/isocpp.xml b/xml/isocpp.xml
--- a/xml/isocpp.xml
+++ b/xml/isocpp.xml
@@ -1,17 +1,28 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-    <!ENTITY space " ">
-    <!ENTITY separators ",&#59;">
-    <!ENTITY ns_punctuators "!&#37;&space;&amp;()+-/.*&lt;=&gt;?[]{|}~^&separators;">
+    <!ENTITY int "(?:[0-9](?:'?[0-9]+)*)">
+    <!ENTITY hex_int "(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f]+)*)">
+    <!ENTITY exp_float "(?:[eE][+-]?&int;)">
+    <!ENTITY exp_hexfloat "(?:[pP][-+]?&int;)">
+
+    <!ENTITY separators ",;">
+    <!ENTITY ns_punctuators "(){}[].+-/*&#37;=&lt;&gt;!|&amp;?~^">
     <!ENTITY punctuators ":&ns_punctuators;">
+
     <!-- printf-like format strings conversion specifiers -->
-    <!ENTITY convspec "diouxXeEfFgGaAcspn&#37;">
+    <!ENTITY printf_like "&#37;(?:ll?|[zjtL]|hh?)?[diouxXeEfFgGaAcspn&#37;]">
+
+    <!ENTITY ispphash "(?:#|&#37;\:|\?\?=)">
+    <!ENTITY pphash "&ispphash;\s*">
+    <!ENTITY ppemptypp "($|(?=(/\*([^*]|\*[^/])*\*/\s*)?(//.*)?$))">
+    <!ENTITY ppcond0 "\s+(?:0|false)\s*&ppemptypp;">
+    <!ENTITY ppcond1 "\s+(?:1|true)\s*(\|\|([^/]|/[^*/])+)?&ppemptypp;">
 ]>
 <language
     name="ISO C++"
     section="Sources"
-    version="12"
+    version="14"
     kateversion="5.0"
     indenter="cstyle"
     style="C++"
@@ -50,6 +61,8 @@
       <item>asm</item>
       <item>auto</item>
       <item>class</item>
+      <item>concept</item> <!-- C++20 -->
+      <item>requires</item> <!-- C++20 -->
       <item>constexpr</item>
       <item>const_cast</item>
       <item>decltype</item>
@@ -97,6 +110,20 @@
       <item>or_eq</item>
       <item>xor</item>
       <item>xor_eq</item>
+      <!-- TM TS -->
+      <!-- <list>atomic_cancel</list>
+      <list>atomic_commit</list>
+      <list>atomic_noexcept</list>
+      <list>synchronized</list>
+      <list>transaction_safe</list>
+      <list>transaction_safe_dynamic</list> -->
+      <!-- module TS -->
+      <!-- <list>import</list>
+      <list>module</list> -->
+      <!-- coroutine TS -->
+      <!-- <list>co_await</list>
+      <list>co_return</list>
+      <list>co_yield</list> -->
     </list>
     <!-- This keyword may appear in InternalsNS context. For example in code:
       details::some_class::template some_templated_static();
@@ -107,13 +134,31 @@
     </list>
 
     <!-- 7.6 Attributes -->
+    <!-- http://en.cppreference.com/w/cpp/language/attributes -->
     <list name="attributes">
       <!-- C++11 -->
       <item>noreturn</item>
       <item>carries_dependency</item>
-      <!-- C++1y -->
+      <!-- C++14 -->
       <item>deprecated</item>
+      <!-- C++17 -->
+      <item>fallthrough</item>
+      <item>nodiscard</item>
+      <item>maybe_unused</item>
+      <!-- C++20 -->
+      <item>likely</item>
+      <item>unlikely</item>
+      <item>no_unique_address</item>
+      <!-- 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>
 
     <list name="types">
       <item>bool</item>
@@ -176,71 +221,81 @@
       <item>thread_local</item>
       <item>volatile</item>
     </list>
+    <!-- http://en.cppreference.com/w/cpp/preprocessor/replace -->
     <list name="StdMacros">
+      <item>__DATE__</item>
       <item>__FILE__</item>
       <item>__LINE__</item>
-      <item>__DATE__</item>
-      <item>__TIME__</item>
-      <item>__STDC__</item>
-      <item>__STDC_VERSION__</item>
+      <item>__STDCPP_DEFAULT_NEW_ALIGNMENT__</item>
+      <item>__STDCPP_STRICT_POINTER_SAFETY__</item>
+      <item>__STDCPP_THREADS__</item>
       <item>__STDC_HOSTED__</item>
       <item>__STDC_ISO_10646__</item>
       <item>__STDC_MB_MIGHT_NEQ_WC__</item>
+      <item>__STDC_VERSION__</item>
+      <item>__STDC__</item>
+      <item>__TIME__</item>
       <item>__cplusplus</item>
       <item>__func__</item>
+      <item>assert</item>
+      <item>_Pragma</item>
+      <item>__has_include</item>
     </list>
+    <list name="InMacro">
+      <item>__VA_ARGS__</item>
+      <item>__VA_OPT__</item>
+    </list>
+    <list name="preprocessorIf">
+      <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>
+    </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>
+      <item>pragma</item>
+      <item>undef</item>
+      <item>warning</item>
+    </list>
 
     <contexts>
-      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
-        <DetectSpaces />
-        <RegExpr attribute="Preprocessor" context="Outscoped" String="(#|%\:|\?\?=)\s*if\s+(0|false)\s*" beginRegion="PP" firstNonSpace="true" insensitive="false" />
-        <RegExpr attribute="Preprocessor" context="Inscoped" String="(#|%\:|\?\?=)\s*if\s+(1|true)\s*" beginRegion="PP" firstNonSpace="true" insensitive="false" />
-        <IncludeRules context="Main" />
-      </context>
-
       <context name="Main" attribute="Normal Text" lineEndContext="#stay">
-        <!-- Match preprocessor directives -->
-        <DetectChar context="AfterHash" char="#" firstNonSpace="true" lookAhead="true" />
-        <Detect2Chars context="AfterHash" char="%" char1=":" firstNonSpace="true" lookAhead="true" />
-        <StringDetect context="AfterHash" String="??=" firstNonSpace="true" lookAhead="true" />
-        <Detect2Chars attribute="Error" context="#stay" char="%" char1=":" />
-        <StringDetect attribute="Error" String="??=" context="#stay" />
-        <!-- Match special comments for region markers -->
-        <StringDetect attribute="Region Marker" context="Region Marker" String="//BEGIN" beginRegion="Region1" firstNonSpace="true" />
-        <StringDetect attribute="Region Marker" context="Region Marker" String="//END" endRegion="Region1" firstNonSpace="true" />
-        <!-- ATTENTION Special case `operator""` cuz Kate doesn't recognize
-                       `operator` joined w/ quotes as a keyword here. BUG??
-          -->
-        <RegExpr attribute="Normal Text" context="UDLOperator" String="operator\s*&quot;&quot; _[_0-9A-Za-z]*\b" lookAhead="true" />
-        <RegExpr attribute="Error" context="#stay" String="operator\s*&quot;&quot; [_0-9A-Za-z]*\b" />
-        <!-- Match keywords -->
-        <keyword attribute="Control Flow" context="#stay" String="controlflow" />
-        <keyword attribute="Keyword" context="#stay" String="keywords" />
+        <DetectSpaces/>
+        <!-- Match scope regions -->
+        <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
+        <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
         <!-- Detect attributes -->
         <Detect2Chars attribute="Symbol" context="Attribute" char="[" char1="[" />
         <!-- Match numbers -->
-        <!-- ATTENTION Builtin number detectors have strange behaviour and definitely lack of required features -->
-        <!-- NOTE Order is important! -->
-        <RegExpr attribute="Hex" context="#stay" String="[\+\-]?0x[0-9A-Fa-f]('?[0-9A-Fa-f]+)*([Uu][Ll]{0,2}|[Ll]{0,2}[Uu]?|_[_0-9A-Za-z]*)?\b" />
-        <RegExpr attribute="Binary" context="#stay" String="0[Bb][01]('?[01]+)*([Uu][Ll]{0,2}|[Ll]{0,2}[Uu]?|_[_0-9A-Za-z]*)?\b" />
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="FfLl" attribute="Float" context="#stay"/>
-        </Float>
-        <RegExpr attribute="Octal" context="#stay" String="[\+\-]?0'?[0-7]('?[0-7]+)*([Uu][Ll]{0,2}|[Ll]{0,2}[Uu]?|_[_0-9A-Za-z]*)?\b" />
-        <RegExpr attribute="Decimal" context="#stay" String="[\+\-]?(0|[1-9]('?[0-9]+)*)([Uu][Ll]{0,2}|[Ll]{0,2}[Uu]?|_[_0-9A-Za-z]*)?\b" />
-        <RegExpr attribute="Error" context="#stay" String="[\+\-]?(0x?|[1-9][0-9]*)[0-9A-Za-z][_0-9A-Za-z]*\b" />
+        <RegExpr attribute="Decimal" context="Number" String="\.?[0-9]" lookAhead="true" />
+        <!-- Match comments -->
+        <IncludeRules context="match comments and region markers" />
+        <!-- Match punctuators -->
+        <AnyChar attribute="Separator Symbol" context="#stay" String="&separators;" />
+        <AnyChar attribute="Symbol" context="#stay" String="&punctuators;" />
+        <!-- Match keywords -->
+        <IncludeRules context="match keywords" />
         <!-- Match string literals -->
-        <DetectChar attribute="String" context="String" char="&quot;" />
-        <Detect2Chars attribute="String" context="String" char="U" char1="&quot;" />
-        <Detect2Chars attribute="String" context="String" char="u" char1="&quot;" />
-        <Detect2Chars attribute="String" context="String" char="L" char1="&quot;" />
-        <StringDetect attribute="String" context="String" String="u8&quot;" />
-        <RegExpr attribute="String" context="RawString" String="(u|u8|U|L)?R&quot;([^\(]{0,16})\(" lookAhead="true" />
-        <RegExpr attribute="Error" context="#stay" String="(u|u8|U|L)?R&quot;([^\(]{16,})\(" />
-        <DetectChar attribute="Char" context="Char Literal" char="'" />
-        <Detect2Chars attribute="Char" context="Char Literal" char="L" char1="'" />
-        <Detect2Chars attribute="Char" context="U-Char Literal" char="u" char1="'" />
-        <Detect2Chars attribute="Char" context="U-Char Literal" char="U" char1="'" />
+        <IncludeRules context="match string" />
         <!-- Match GCC extensions -->
         <IncludeRules context="DetectGccExtensions##GCCExtensions" />
         <!-- Match most used namespaces and styles -->
@@ -251,120 +306,278 @@
         <StringDetect attribute="Internals" context="InternalsNS" String="details::" />
         <StringDetect attribute="Internals" context="InternalsNS" String="aux::" />
         <StringDetect attribute="Internals" context="InternalsNS" String="internals::" />
+        <IncludeRules context="match identifier" />
+        <!-- Match preprocessor directives -->
+        <RegExpr attribute="Preprocessor" context="AfterHash" String="&ispphash;" lookAhead="true" />
+        <!-- Match invalid symbols -->
+        <AnyChar attribute="Error" context="#stay" String="$@`" />
+      </context>
+
+      <context name="match comments" attribute="Normal Text" lineEndContext="#pop">
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="/" lookAhead="true"/>
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
+      </context>
+
+      <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <IncludeRules context="##Doxygen" />
+        <Detect2Chars attribute="Comment" context="#pop!Comment 1" char="/" char1="/" />
+        <Detect2Chars attribute="Comment" context="#pop!Comment 2" char="/" char1="*" beginRegion="Comment" />
+      </context>
+
+      <context name="match comments and region markers" attribute="Normal Text" lineEndContext="#pop">
+        <Detect2Chars attribute="Comment" context="MatchCommentAndRegionMarkers" char="/" char1="/" lookAhead="true"/>
+        <Detect2Chars attribute="Comment" context="MatchCommentAndRegionMarkers" char="/" char1="*" lookAhead="true" />
+      </context>
+
+      <context name="MatchCommentAndRegionMarkers" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//BEGIN" beginRegion="Region1" firstNonSpace="true" />
+        <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//END" endRegion="Region1" firstNonSpace="true" />
+        <IncludeRules context="MatchComment" />
+      </context>
+
+      <context name="match keywords" attribute="Normal Text" lineEndContext="#pop">
+        <WordDetect attribute="Keyword" context="CheckUDLOperator" String="operator" />
+        <keyword attribute="Control Flow" context="#stay" String="controlflow" />
+        <keyword attribute="Keyword" context="#stay" String="keywords" />
+      </context>
+
+      <context name="match string" attribute="Normal Text" lineEndContext="#pop">
+        <DetectChar attribute="String" context="String" char="&quot;" />
+        <Detect2Chars attribute="String" context="String32" char="U" char1="&quot;" />
+        <Detect2Chars attribute="String" context="String16" char="u" char1="&quot;" />
+        <Detect2Chars attribute="String" context="String16" char="L" char1="&quot;" />
+        <StringDetect attribute="String" context="String8" String="u8&quot;" />
+        <Detect2Chars attribute="String" context="RawString" char="R" char1="&quot;" />
+        <StringDetect attribute="String" context="RawString" String="uR&quot;" />
+        <StringDetect attribute="String" context="RawString" String="UR&quot;" />
+        <StringDetect attribute="String" context="RawString" String="LR&quot;" />
+        <StringDetect attribute="String" context="RawString" String="u8R&quot;" />
+        <DetectChar attribute="Char" context="Char8 Literal" char="'" />
+        <Detect2Chars attribute="Char" context="Char16 Literal" char="L" char1="'" />
+        <Detect2Chars attribute="Char" context="Char16 Literal" char="u" char1="'" />
+        <Detect2Chars attribute="Char" context="Char32 Literal" char="U" char1="'" />
+        <StringDetect attribute="Char" context="Char8 Literal" String="u8'" />
+      </context>
+
+      <context name="match identifier" attribute="Normal Text" lineEndContext="#pop">
         <keyword attribute="Data Type" context="#stay" String="types" />
         <keyword attribute="Type Modifiers" context="#stay" String="modifiers" />
         <keyword attribute="Standard Macros" context="#stay" String="StdMacros" />
-        <RegExpr attribute="Internals" context="#stay" String="_[a-zA-Z0-9_]+" />
-        <RegExpr attribute="Internals" context="#stay" String="[a-zA-Z][a-zA-Z0-9_]*__\b" />
-        <RegExpr attribute="Data Members (m_*)" context="#stay" String="[a-z][a-zA-Z0-9_]*_\b" />
-        <RegExpr attribute="Data Members (m_*)" context="#stay" String="m_[a-zA-Z0-9_]+" />
+        <RegExpr attribute="Internals" context="#stay" String="_[a-zA-Z0-9_]+|[a-zA-Z][a-zA-Z0-9_]*__\b" />
+        <RegExpr attribute="Data Members (m_*)" context="#stay" String="m_[a-zA-Z0-9_]+|[a-z][a-zA-Z0-9_]*_\b" />
         <RegExpr attribute="Globals (g_*)" context="#stay" String="g_[a-zA-Z0-9_]+" />
         <RegExpr attribute="Statics (s_*)" context="#stay" String="s_[a-zA-Z0-9_]+" />
         <RegExpr attribute="CONSTS/MACROS" context="#stay" String="[A-Z][A-Z0-9_]{2,}\b" />
         <RegExpr attribute="Types (*_t/*_type)" context="#stay" String="[a-zA-Z][a-zA-Z0-9_]*_t(ype)?\b" />
         <DetectIdentifier />
-        <!-- Match comments -->
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Comment 1" char="/" char1="/" />
-        <Detect2Chars attribute="Comment" context="Comment 2" char="/" char1="*" beginRegion="Comment" />
-        <!-- Match scope regions -->
-        <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
-        <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
-        <!-- Match punctuators -->
-        <AnyChar attribute="Separator Symbol" context="#stay" String="&separators;" />
-        <AnyChar attribute="Symbol" context="#stay" String="&punctuators;" />
-        <!-- Match invalid symbols -->
-        <DetectChar attribute="Error" context="#stay" char="#" />
-        <DetectChar attribute="Error" context="#stay" char="$" />
-        <DetectChar attribute="Error" context="#stay" char="@" />
-        <DetectChar attribute="Error" context="#stay" char="`" />
       </context>
 
-      <context name="UDLOperator" attribute="Normal Text" lineEndContext="#pop">
-        <StringDetect attribute="Keyword" context="#stay" String="operator" />
-        <StringDetect attribute="String" context="#stay" String="&quot;&quot;" />
-        <DetectIdentifier context="#pop" />
+      <context name="Number" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="Float" context="FloatSuffix" String="\.&int;&exp_float;?|&int;(?:&exp_float;|\.&int;?&exp_float;?)|0[xX](?:\.&hex_int;&exp_hexfloat;?|&hex_int;(?:&exp_hexfloat;|\.&hex_int;?&exp_hexfloat;?))" />
+        <IncludeRules context="Integer" />
       </context>
 
-      <context name="Char Literal" attribute="Char" lineEndContext="#pop">
-        <IncludeRules context="Universal Char" />
-        <DetectChar attribute="String Char" context="Simple Esc" char="\" />
-        <DetectChar attribute="Char" context="#pop" char="'" />
+      <context name="Integer" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="Hex" context="IntSuffix" String="0[xX]&hex_int;" />
+        <RegExpr attribute="Binary" context="IntSuffix" String="0[Bb][01](?:'?[01]+)*" />
+        <RegExpr attribute="Octal" context="IntSuffix" String="0(?:'?[0-7]+)+" />
+        <RegExpr attribute="Decimal" context="IntSuffix" String="0(?![xXbB0-9])|[1-9](?:'?[0-9]+)*" />
+        <RegExpr attribute="Error" context="#pop" String="[._0-9A-Za-z']+" />
       </context>
 
-      <context name="U-Char Literal" attribute="Char" lineEndContext="#pop">
-        <IncludeRules context="Universal Char" />
-        <DetectChar attribute="String Char" context="Simple Esc" char="\" />
-        <DetectChar attribute="Char" context="#pop" char="'" />
-        <RegExpr attribute="Error" context="#stay" String="[^']{2,}" />
-        <RegExpr attribute="Char" context="#stay" String=".{1}" />
+      <context name="IntSuffix" attribute="Error" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="NumericSuffixError">
+        <DetectChar attribute="Error" context="#stay" char="'" />
+        <AnyChar attribute="Error" context="#pop!IntSuffixPattern" String="uUlLimunshyd_" lookAhead="true" />
       </context>
 
-      <context  name="Simple Esc" attribute="String Char" lineEndContext="#pop">
-        <AnyChar attribute="String Char" context="#pop" String="tnvbrfa'&quot;\" />
-        <RegExpr attribute="String Char" context="#pop" String="[0-7]{1,3}" />
-        <RegExpr attribute="String Char" context="#pop" String="x[0-9A-Fa-f]{1,}" />
-        <RegExpr attribute="String" context="#pop" String="." />
+      <context name="IntSuffixPattern" attribute="Error" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="NumericSuffixError">
+        <RegExpr attribute="Standard Suffix" context="NumericSuffixError" String="[Uu][Ll]{0,2}|[Ll]{0,2}[Uu]?" />
+        <!-- https://en.cppreference.com/w/cpp/language/user_literal#Standard_library -->
+        <RegExpr attribute="Standard Classes" context="NumericSuffixError" String="(?:i[fl]?|min|[mun]?s|[hyd])\b" />
+        <DetectChar attribute="Error" context="#pop!NumericUserSuffixPattern" char="_" lookAhead="true" />
       </context>
 
-      <context name="Universal Char" attribute="String Char" lineEndContext="#pop">
-        <RegExpr attribute="String Char" context="#stay" String="\\u[0-9A-Fa-f]{4}" />
-        <RegExpr attribute="Error" context="#stay" String="\\u.{0,3}" />
-        <RegExpr attribute="String Char" context="#stay" String="\\U[0-9A-Fa-f]{8}" />
-        <RegExpr attribute="Error" context="#stay" String="\\U.{0,7}" />
+      <context name="FloatSuffix" attribute="Error" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="NumericSuffixError">
+        <AnyChar attribute="Standard Suffix" context="NumericSuffixError" String="fFlL" />
+        <!-- https://en.cppreference.com/w/cpp/language/user_literal#Standard_library -->
+        <RegExpr attribute="Standard Classes" context="NumericSuffixError" String="(?:i[fl]?|min|[mun]?s|h)\b" />
+        <DetectChar attribute="Error" context="#pop!NumericUserSuffixPattern" char="_" lookAhead="true" />
       </context>
 
+      <context name="NumericUserSuffixPattern" attribute="Error" lineEndContext="#pop#pop">
+        <!--
+        http://en.cppreference.com/w/cpp/language/user_literal#Notes
+        Due to maximal munch, user-defined integer and floating point literals ending in
+        p, P, (since C++17) e and E, when followed by the operators + or -,
+        must be separated from the operator with whitespace or parentheses in the source
+        -->
+        <RegExpr attribute="Error" context="#pop#pop" String="_[eEpP][+-]" />
+        <RegExpr attribute="UDL Numeric Suffix" context="NumericSuffixError" String="_[_[:alnum:]]*" />
+      </context>
+
+      <context name="NumericSuffixError" attribute="Error" lineEndContext="#pop#pop#pop" fallthrough="true" fallthroughContext="#pop#pop#pop">
+        <RegExpr attribute="Error" context="#pop#pop#pop" String="\.[_0-9A-Za-z]*|[_0-9A-Za-z]+" />
+      </context>
+
+      <context name="CheckUDLOperator" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces />
+        <Detect2Chars attribute="String" context="UDLOperatorName" char="&quot;" char1="&quot;" />
+      </context>
+
+      <context name="UDLOperatorName" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop!IdentifierError">
+        <DetectSpaces />
+        <RegExpr attribute="Normal Text" context="#pop#pop" String="_[_[:alnum:]]*\b" />
+      </context>
+
+      <context name="IdentifierError" attribute="Error" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop#pop">
+        <RegExpr attribute="Error" context="#pop#pop" String=".[^\s()]*" />
+      </context>
+
+
+      <context name="Char8 Literal" attribute="Char" lineEndContext="#pop" fallthrough="true" fallthroughContext="Char Literal Close">
+        <RegExpr attribute="String Char" context="Char Literal Close" String="\\(?:[tnvbrfa'&quot;\\?]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})" />
+        <DetectChar attribute="Error" context="#pop" char="'" />
+        <RegExpr attribute="Char" context="Char Literal Close" String="." />
+      </context>
+
+      <context name="Char16 Literal" attribute="Char" lineEndContext="#pop" fallthrough="true" fallthroughContext="Char Literal Close">
+        <RegExpr attribute="String Char" context="Char Literal Close" String="\\(?:[tnvbrfa'&quot;\\?]|[0-7]{1,3}|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4})" />
+        <DetectChar attribute="Error" context="#pop" char="'" />
+        <RegExpr attribute="Char" context="Char Literal Close" String="." />
+      </context>
+
+      <context name="Char32 Literal" attribute="Char" lineEndContext="#pop" fallthrough="true" fallthroughContext="Char Literal Close">
+        <RegExpr attribute="String Char" context="Char Literal Close" String="\\(?:[tnvbrfa'&quot;\\?]|[0-7]{1,3}|x[0-9A-Fa-f]{1,8}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})" />
+        <DetectChar attribute="Error" context="#pop" char="'" />
+        <RegExpr attribute="Char" context="Char Literal Close" String="." />
+      </context>
+
+      <context name="Char Literal Close" attribute="Error" lineEndContext="#pop#pop">
+        <DetectChar attribute="Char" context="#pop#pop" char="'" />
+      </context>
+
+
       <context name="String" attribute="String" lineEndContext="#pop">
+        <IncludeRules context="string normal char" />
+        <RegExpr attribute="String Char" context="StringNoHex" String="\\x[0-9A-Fa-f]{1,8}" />
+        <IncludeRules context="string special char" />
+      </context>
+
+      <context name="String8" attribute="String" lineEndContext="#pop">
+        <IncludeRules context="string normal char" />
+        <RegExpr attribute="String Char" context="StringNoHex" String="\\x[0-9A-Fa-f]{1,2}" />
+        <IncludeRules context="string special char" />
+      </context>
+
+      <context name="String16" attribute="String" lineEndContext="#pop">
+        <IncludeRules context="string normal char" />
+        <RegExpr attribute="String Char" context="StringNoHex" String="\\x[0-9A-Fa-f]{1,4}" />
+        <IncludeRules context="string special char" />
+      </context>
+
+      <context name="String32" attribute="String" lineEndContext="#pop">
+        <IncludeRules context="string normal char" />
+        <RegExpr attribute="String Char" context="StringNoHex" String="\\x[0-9A-Fa-f]{1,8}" />
+        <IncludeRules context="string special char" />
+      </context>
+
+      <context name="StringNoHex" attribute="Error" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="Error" context="#pop" String="[0-9A-Fa-f]{1,}" />
+      </context>
+
+      <context name="string special char" attribute="String" lineEndContext="#pop">
+        <RegExpr attribute="String Char" context="#stay" String="\\(?:[tnvbrfa'&quot;\\?]|[0-7]{1,3}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})|&printf_like;" />
+        <RegExpr attribute="Error" context="#stay" String="\\(?:u[^&quot;]{0,3}|U[^&quot;]{0,7}|.)" />
         <LineContinue attribute="String" context="#stay" />
-        <HlCStringChar attribute="String Char" context="#stay" />
-        <IncludeRules context="Universal Char" />
-        <RegExpr attribute="String Char" context="#stay" String="%[^&quot;&convspec;\s]*[&convspec;]" />
+      </context>
+
+      <context name="string normal char" attribute="String" lineEndContext="#pop">
+        <!-- fast way, can be replaced by a `UntilChars` rule if it exists -->
+        <RegExpr attribute="String" context="#stay" String="[^%\\&quot;]+" />
         <DetectChar attribute="String" context="UDLStringSuffix" char="&quot;" />
       </context>
 
       <context name="UDLStringSuffix" attribute="String" fallthrough="true" fallthroughContext="#pop#pop" lineEndContext="#pop#pop">
-        <!-- Standard UDL is not matched. BUG?? -->
-        <RegExpr attribute="String" context="#pop#pop" String="_[_0-9A-Za-z]*\b" />
+        <WordDetect attribute="Standard Classes" context="#pop#pop" String="sv" />
+        <WordDetect attribute="Standard Classes" context="#pop#pop" String="s" />
+        <RegExpr attribute="UDL String Suffix" context="#pop#pop" String="_[_0-9A-Za-z]*\b" />
       </context>
 
+
       <context name="Attribute" attribute="Attribute" lineEndContext="#stay">
         <keyword attribute="Standard Attribute" context="#stay" String="attributes" />
         <Detect2Chars attribute="Symbol" context="#pop" char="]" char1="]" />
-        <AnyChar context="#stay" String="&ns_punctuators;" attribute="Symbol" />
+        <DetectChar attribute="Separator Symbol" context="#stay" char="," />
+        <AnyChar attribute="Symbol" context="#stay" String="&punctuators;" />
         <!-- 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" />
+        <IncludeRules context="DetectGccAttributes##GCCExtensions" />
+        <RegExpr attribute="CONSTS/MACROS" context="#stay" String="[A-Z][A-Z0-9_]{2,}\b" />
+        <DetectIdentifier />
       </context>
 
-      <context name="RawString" attribute="String" lineEndContext="#stay" dynamic="true">
-        <LineContinue attribute="String" context="#stay" />
-        <RegExpr attribute="String Char" context="#stay" String="%[^&quot;&convspec;\s]*[&convspec;]" />
-        <RegExpr attribute="String" context="#pop" String="\)%2&quot;" dynamic="true"/>
+      <context name="Attribute In PP" attribute="Attribute" lineEndContext="#pop">
+        <IncludeRules context="InPreprocessor" />
+        <IncludeRules context="Attribute" />
       </context>
 
+      <context name="AttributeNamespace" attribute="Attribute" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="DetectNamespaceGccAttributes##GCCExtensions" />
+        <DetectIdentifier />
+      </context>
+
+      <context name="RawString" attribute="String" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop!LineError">
+        <RegExpr attribute="String" context="#pop!InRawString" String="([^\(]{0,16})\(" />
+      </context>
+
+      <context name="InRawString" attribute="String" lineEndContext="#stay" dynamic="true">
+        <!-- fast way, can be replaced by a `UntilChars` rule if it exists -->
+        <RegExpr attribute="String" context="#stay" String="[^%)]+" />
+        <RegExpr attribute="String Char" context="#stay" String="&printf_like;" />
+        <StringDetect attribute="String" context="#pop" String=")%1&quot;" dynamic="true"/>
+      </context>
+
       <context name="Region Marker" attribute="Region Marker" lineEndContext="#pop" />
 
-      <context name="DetectNSEnd" attribute="Normal Text" lineEndContext="#pop">
+      <context name="DetectNSEnd" attribute="Normal Text" lineEndContext="#stay">
         <keyword attribute="Keyword" context="#stay" String="template" />
         <DetectIdentifier context="#stay" />
-        <AnyChar context="#pop" String="&separators;" attribute="Separator Symbol" />
-        <AnyChar context="#pop" String="&ns_punctuators;" attribute="Symbol" />
-        <AnyChar context="#stay" String="&space;" attribute="Normal Text" />
+        <AnyChar attribute="Separator Symbol" context="#pop" String="&separators;" />
+        <AnyChar attribute="Symbol" context="#pop" String="&ns_punctuators; &#9;" />
       </context>
 
-      <context name="Standard Classes" attribute="Standard Classes" lineEndContext="#pop">
+      <context name="Standard Classes" attribute="Standard Classes" lineEndContext="#stay">
         <IncludeRules context="DetectNSEnd" />
       </context>
 
-      <context name="Boost Stuff" attribute="Boost Stuff" lineEndContext="#pop">
+      <context name="Boost Stuff" attribute="Boost Stuff" lineEndContext="#stay">
         <IncludeRules context="DetectNSEnd" />
       </context>
 
-      <context name="InternalsNS" attribute="Internals" lineEndContext="#pop">
+      <context name="InternalsNS" attribute="Internals" lineEndContext="#stay">
         <IncludeRules context="DetectNSEnd" />
       </context>
 
+      <context name="Standard Classes In PP" attribute="Standard Classes" lineEndContext="#pop">
+        <IncludeRules context="InPreprocessor" />
+        <IncludeRules context="DetectNSEnd" />
+      </context>
+
+      <context name="Boost Stuff In PP" attribute="Boost Stuff" lineEndContext="#pop">
+        <IncludeRules context="InPreprocessor" />
+        <IncludeRules context="DetectNSEnd" />
+      </context>
+
+      <context name="InternalsNS In PP" attribute="Internals" lineEndContext="#pop">
+        <IncludeRules context="InPreprocessor" />
+        <IncludeRules context="DetectNSEnd" />
+      </context>
+
       <context name="Comment 1" attribute="Comment" lineEndContext="#pop">
-        <LineContinue attribute="Comment" context="#stay" />
+        <LineContinue attribute="Error" context="#stay" />
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
@@ -380,128 +593,225 @@
         <DetectIdentifier />
       </context>
 
-      <context name="AfterHash" attribute="Error" lineEndContext="#pop">
-        <RegExpr attribute="Preprocessor" context="Include" String="#\s*(?:include|include_next)" insensitive="true" firstNonSpace="true" />
+      <context name="AfterHash" attribute="Error" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!AfterHashLineError">
+        <RegExpr attribute="Preprocessor" context="#pop!PreprocessorCmd" String="&pphash;(?=.)" firstNonSpace="true" />
+      </context>
 
-        <!-- define, elif, else, endif, error, if, ifdef, ifndef, line, pragma, undef, warning -->
-        <RegExpr attribute="Preprocessor" context="Preprocessor" String="(#|%\:|\?\?=)\s*if(?:def|ndef)?(?=(?:\(|\s+)\S)" beginRegion="PP" firstNonSpace="true" insensitive="false" />
-        <RegExpr attribute="Preprocessor" context="Preprocessor" String="(#|%\:|\?\?=)\s*endif" endRegion="PP" firstNonSpace="true" insensitive="false" />
-        <!-- Switch to seperate context for multiline #defines -->
-        <RegExpr attribute="Preprocessor" context="Define" String="(#|%\:|\?\?=)\s*(cmake)?define.*((?=\\))" firstNonSpace="true" lookAhead="true" insensitive="false" />
-        <RegExpr attribute="Preprocessor" context="Preprocessor" String="(#|%\:|\?\?=)\s*(?:el(?:se|if)|(cmake)?define|undef|line|error|warning|pragma)" insensitive="false" firstNonSpace="true" />
-        <RegExpr attribute="Preprocessor" context="Preprocessor" String="(#|%\:|\?\?=)\s+[0-9]+" firstNonSpace="true" insensitive="false" />
+      <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 attribute="Preprocessor" lineEndContext="#pop" name="Include">
-        <LineContinue attribute="Preprocessor" context="#stay"/>
-        <RangeDetect attribute="Prep. Lib" context="#stay" char="&quot;" char1="&quot;"/>
-        <RangeDetect attribute="Prep. Lib" context="#stay" char="&lt;" char1="&gt;"/>
+      <context name="LineError" attribute="Error" lineEndContext="#pop">
+        <LineContinue attribute="Error" context="#stay" />
+      </context>
+
+      <context name="PreprocessorCmd" attribute="Error" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!AfterHashLineError">
+        <keyword attribute="Preprocessor" context="#pop!Include" String="preprocessorInclude" />
+        <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" />
+        <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]+" />
+      </context>
+
+      <context name="Include" attribute="Preprocessor" lineEndContext="#pop" >
+        <LineContinue attribute="Preprocessor" context="#stay" />
+        <RangeDetect attribute="Prep. Lib" context="PreprocessorEndOfLineSpace" char="&quot;" char1="&quot;" />
+        <RangeDetect attribute="Prep. Lib" context="PreprocessorEndOfLineSpace" char="&lt;" char1="&gt;" />
         <IncludeRules context="Preprocessor" />
       </context>
 
+      <context name="PreprocessorIfDef" attribute="Preprocessor" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!LineError">
+        <RegExpr attribute="Preprocessor" context="#pop!Preprocessor" String="\w+\s+([_A-Za-z][A-Za-z0-9]*\s*|(?=//|/\*))" />
+      </context>
+
+      <context name="PreprocessorIf" attribute="Preprocessor" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!LineError">
+        <RegExpr attribute="Preprocessor" context="#pop!Inscoped" String="\w+&ppcond1;" />
+        <RegExpr attribute="Preprocessor" context="#pop!Outscoped" String="\w+&ppcond0;" />
+        <RegExpr attribute="Preprocessor" context="#pop!Preprocessor" String="\w+\s+(?=[^\s])" />
+      </context>
+
+      <context name="PreprocessorEndOfLineSpace" attribute="Preprocessor" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="#pop#pop!LineError">
+        <DetectSpaces />
+        <IncludeRules context="match comments" />
+      </context>
+
       <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop">
         <LineContinue attribute="Preprocessor" context="#stay" />
         <keyword attribute="Standard Macros" context="#stay" String="StdMacros" />
         <IncludeRules context="GNUMacros##GCCExtensions" />
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Comment/Preprocessor" char="/" char1="*" beginRegion="Comment2" />
-        <Detect2Chars attribute="Comment" context="Comment 1" char="/" char1="/" />
+        <IncludeRules context="match comments" />
       </context>
 
       <context name="Define" attribute="Preprocessor" lineEndContext="#pop">
-        <LineContinue attribute="Separator Symbol" context="#stay" />
-        <DetectChar attribute="Error" context="#stay" char="\" />
+        <DetectSpaces/>
+        <!--
+        Old version: non-contextual macro
+        <IncludeRules context="InPreprocessor" />
         <keyword attribute="Standard Macros" context="#stay" String="StdMacros" />
+        <keyword attribute="Standard Macros" context="#stay" String="InMacro" />
         <IncludeRules context="GNUMacros##GCCExtensions" />
+        <IncludeRules context="match comments" />
+        -->
+
+        <IncludeRules context="InPreprocessor" />
+        <Detect2Chars attribute="Error" context="#pop!LineError" char="/" char1="/" />
+        <IncludeRules context="##Doxygen" />
+        <Detect2Chars attribute="Comment" context="Comment 2" char="/" char1="*" beginRegion="Comment" />
+        <IncludeRules context="GNUMacros##GCCExtensions" />
+        <DetectIdentifier attribute="Preprocessor" context="#pop!In Define"/>
       </context>
 
-      <context name="Comment/Preprocessor" attribute="Comment" lineEndContext="#stay">
-        <DetectSpaces />
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment2" />
-        <DetectIdentifier />
+      <context name="In Define" attribute="Preprocessor" lineEndContext="#pop">
+        <DetectSpaces/>
+        <IncludeRules context="InPreprocessor" />
+        <!-- Match scope regions -->
+        <AnyChar attribute="Symbol" context="#stay" String="{}" />
+        <!-- Detect attributes -->
+        <Detect2Chars attribute="Symbol" context="Attribute In PP" char="[" char1="[" />
+        <!-- Match numbers -->
+        <RegExpr attribute="Decimal" context="Number" String="\.?[0-9]" lookAhead="true" />
+        <!-- Match comments -->
+        <IncludeRules context="match comments" />
+        <!-- Match punctuators -->
+        <AnyChar attribute="Separator Symbol" context="#stay" String="&separators;" />
+        <AnyChar attribute="Symbol" context="#stay" String="&punctuators;" />
+        <!-- Match keywords -->
+        <IncludeRules context="match keywords" />
+        <!-- Match string literals -->
+        <IncludeRules context="match string" />
+        <!-- Match GCC extensions -->
+        <IncludeRules context="DetectGccExtensionsInPP##GCCExtensions" />
+        <!-- Match most used namespaces and styles -->
+        <StringDetect attribute="Standard Classes" context="Standard Classes In PP" String="std::" />
+        <StringDetect attribute="Boost Stuff" context="Boost Stuff In PP" String="boost::" />
+        <StringDetect attribute="Boost Stuff" context="Boost Stuff In PP" String="BOOST_" />
+        <StringDetect attribute="Internals" context="InternalsNS In PP" String="detail::" />
+        <StringDetect attribute="Internals" context="InternalsNS In PP" String="details::" />
+        <StringDetect attribute="Internals" context="InternalsNS In PP" String="aux::" />
+        <StringDetect attribute="Internals" context="InternalsNS In PP" String="internals::" />
+        <keyword attribute="Standard Macros" context="#stay" String="InMacro" />
+        <IncludeRules context="match identifier" />
+        <!-- Match preprocessor directives -->
+        <DetectChar attribute="Preprocessor" context="#stay" char="#" />
+        <!-- Match invalid symbols -->
+        <AnyChar attribute="Error" context="#stay" String="$@`" />
       </context>
 
+      <context name="InPreprocessor" attribute="Normal Text" lineEndContext="#pop">
+        <LineContinue attribute="Separator Symbol" context="#stay" />
+        <DetectChar attribute="Error" context="#stay" char="\" />
+      </context>
+
       <context name="Outscoped Common" attribute="Comment" lineEndContext="#stay">
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
         <DetectIdentifier />
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Comment 1" char="/" char1="/" />
-        <!-- Do not try to detect "C" style comments inside outscoped text
-             to prevent incorrect highlighting in case of overlapped (or not closed properly)
-             comment block...
-
-             <Detect2Chars attribute="Comment" context="Comment 2" char="/" char1="*" beginRegion="Comment" />
-        -->
-        <RegExpr attribute="Comment" context="Outscoped intern" String="(#|%\:|\?\?=)\s*if" beginRegion="PP" firstNonSpace="true" insensitive="false" />
+        <!-- prevent incorrect highlighting in case of not closed properly comment block -->
+        <Detect2Chars attribute="Comment" context="#stay" char="*" char1="/" />
+        <IncludeRules context="match comments" />
+        <RegExpr attribute="Comment" context="Outscoped intern" String="&pphash;if" beginRegion="PP" firstNonSpace="true" />
         <LineContinue context="#stay" />
       </context>
 
       <context name="Outscoped" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces />
+        <RegExpr attribute="Preprocessor" context="Outscoped AfterHash" String="&ispphash;" firstNonSpace="true" lookAhead="true" />
         <IncludeRules context="Outscoped Common" />
-        <RegExpr attribute="Preprocessor" context="#pop" String="(#|%\:|\?\?=)\s*el(?:se|if)" firstNonSpace="true" insensitive="false" />
-        <RegExpr attribute="Preprocessor" context="#pop" String="(#|%\:|\?\?=)\s*endif" endRegion="PP" firstNonSpace="true" insensitive="false" />
       </context>
 
+      <context name="Outscoped AfterHash" attribute="Comment" lineEndContext="#pop">
+        <RegExpr attribute="Preprocessor" context="#pop#pop!PreprocessorEndOfLineSpace" String="&pphash;endif\b" endRegion="PP" />
+        <RegExpr attribute="Preprocessor" context="#pop#pop!Inscoped"          String="&pphash;else\b" endRegion="PP" beginRegion="PP" />
+        <RegExpr attribute="Comment" context="#pop!Outscoped intern"           String="&pphash;if" beginRegion="PP" />
+        <RegExpr attribute="Preprocessor" context="#pop#pop!Inscoped"          String="&pphash;elif&ppcond1;" endRegion="PP" beginRegion="PP" />
+        <RegExpr attribute="Preprocessor" context="#pop"                       String="&pphash;elif&ppcond0;" endRegion="PP" beginRegion="PP" />
+        <RegExpr attribute="Preprocessor" context="#pop#pop!Preprocessor"      String="&pphash;elif\b" endRegion="PP" beginRegion="PP" />
+        <RegExpr attribute="Comment" context="#pop"                            String="&pphash;" />
+      </context>
+
       <context name="Outscoped 2" attribute="Comment" lineEndContext="#stay">
         <IncludeRules context="Outscoped Common" />
-        <RegExpr attribute="Preprocessor" context="#pop#pop" String="(#|%\:|\?\?=)\s*endif" endRegion="PP" firstNonSpace="true" insensitive="false" />
+        <RegExpr attribute="Preprocessor" context="#pop!PreprocessorEndOfLineSpace" String="&pphash;endif" endRegion="PP" firstNonSpace="true" />
       </context>
 
       <context name="Inscoped" attribute="Normal Text" lineEndContext="#stay">
         <DetectSpaces />
-        <RegExpr attribute="Preprocessor" context="Outscoped" String="(#|%\:|\?\?=)\s*if\s+(0|false)\s*" beginRegion="PP" firstNonSpace="true" insensitive="false" />
-        <RegExpr attribute="Preprocessor" context="Outscoped 2" String="(#|%\:|\?\?=)\s*el(?:se|if)" firstNonSpace="true" insensitive="false" />
-        <RegExpr attribute="Preprocessor" context="#pop" String="(#|%\:|\?\?=)\s*endif" endRegion="PP" firstNonSpace="true" insensitive="false" />
+        <RegExpr attribute="Preprocessor" context="Inscoped AfterHash" String="&ispphash;" firstNonSpace="true" lookAhead="true" />
         <IncludeRules context="Main" />
       </context>
 
+      <context name="Inscoped AfterHash" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!AfterHash">
+        <DetectSpaces />
+        <RegExpr attribute="Preprocessor" context="#pop!Outscoped 2" String="&pphash;el(?:se|if)" endRegion="PP" beginRegion="PP"/>
+        <RegExpr attribute="Preprocessor" context="#pop#pop!PreprocessorEndOfLineSpace" String="&pphash;endif\b" endRegion="PP" />
+      </context>
+
       <context name="Outscoped intern" attribute="Comment" lineEndContext="#stay">
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
         <DetectIdentifier />
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Comment 1" char="/" char1="/" />
-        <Detect2Chars attribute="Comment" context="Comment 2" char="/" char1="*" beginRegion="Comment" />
-        <RegExpr attribute="Comment" context="Outscoped intern" String="(#|%\:|\?\?=)\s*if" beginRegion="PP" firstNonSpace="true" insensitive="false" />
-        <RegExpr attribute="Comment" context="#pop" String="(#|%\:|\?\?=)\s*endif" endRegion="PP" firstNonSpace="true" insensitive="false" />
+        <!-- prevent incorrect highlighting in case of not closed properly comment block -->
+        <Detect2Chars attribute="Comment" context="#stay" char="*" char1="/" />
+        <IncludeRules context="match comments" />
+        <RegExpr attribute="Comment" context="Outscoped intern" String="&pphash;if" beginRegion="PP" firstNonSpace="true" />
+        <RegExpr attribute="Comment" context="#stay" String="&pphash;el(se|if)" beginRegion="PP" endRegion="PP" firstNonSpace="true" />
+        <RegExpr attribute="Comment" context="PreprocessorEndOfLineSpace" String="&pphash;endif" endRegion="PP" firstNonSpace="true" />
       </context>
     </contexts>
 
     <itemDatas>
-      <itemData name="Normal Text"        defStyleNum="dsNormal"   spellChecking="false" />
+      <itemData name="Normal Text"        defStyleNum="dsNormal"    spellChecking="false" />
       <itemData name="Control Flow"       defStyleNum="dsControlFlow" spellChecking="false" />
-      <itemData name="Keyword"            defStyleNum="dsKeyword"  spellChecking="false" />
-      <itemData name="Data Type"          defStyleNum="dsDataType" spellChecking="false" />
+      <itemData name="Keyword"            defStyleNum="dsKeyword"   spellChecking="false" />
+      <itemData name="Data Type"          defStyleNum="dsDataType"  spellChecking="false" />
       <itemData name="Type Modifiers"     defStyleNum="dsAttribute" spellChecking="false" />
       <itemData name="Attribute"          defStyleNum="dsAttribute" spellChecking="false" bold="false" italic="true" />
       <itemData name="Standard Attribute" defStyleNum="dsAttribute" spellChecking="false" bold="false" italic="true" />
-      <itemData name="Decimal"            defStyleNum="dsDecVal"   spellChecking="false" />
-      <itemData name="Octal"              defStyleNum="dsBaseN"    spellChecking="false" />
-      <itemData name="Hex"                defStyleNum="dsBaseN"    spellChecking="false" />
-      <itemData name="Binary"             defStyleNum="dsBaseN"    spellChecking="false" />
-      <itemData name="Float"              defStyleNum="dsFloat"    spellChecking="false" />
-      <itemData name="Char"               defStyleNum="dsChar"     spellChecking="false" />
-      <itemData name="String"             defStyleNum="dsString"   spellChecking="true"  />
+      <itemData name="Decimal"            defStyleNum="dsDecVal"    spellChecking="false" />
+      <itemData name="Octal"              defStyleNum="dsBaseN"     spellChecking="false" />
+      <itemData name="Hex"                defStyleNum="dsBaseN"     spellChecking="false" />
+      <itemData name="Binary"             defStyleNum="dsBaseN"     spellChecking="false" />
+      <itemData name="Float"              defStyleNum="dsFloat"     spellChecking="false" />
+      <itemData name="Char"               defStyleNum="dsChar"      spellChecking="false" />
+      <itemData name="String"             defStyleNum="dsString"    spellChecking="true"  />
       <itemData name="String Char"        defStyleNum="dsSpecialChar" spellChecking="false" />
-      <itemData name="Comment"            defStyleNum="dsComment"  spellChecking="true"  />
-      <itemData name="Symbol"             defStyleNum="dsNormal"   spellChecking="false" />
-      <itemData name="Separator Symbol"   defStyleNum="dsNormal"   spellChecking="false" />
-      <itemData name="Data Members (m_*)" defStyleNum="dsVariable" spellChecking="false" />
-      <itemData name="Globals (g_*)"      defStyleNum="dsVariable" spellChecking="false" />
-      <itemData name="Statics (s_*)"      defStyleNum="dsVariable" spellChecking="false" />
-      <itemData name="Types (*_t/*_type)" defStyleNum="dsDataType" spellChecking="false" />
-      <itemData name="CONSTS/MACROS"      defStyleNum="dsNormal"   spellChecking="false" />
+      <itemData name="Comment"            defStyleNum="dsComment"   spellChecking="true"  />
+      <itemData name="Symbol"             defStyleNum="dsNormal"    spellChecking="false" />
+      <itemData name="Separator Symbol"   defStyleNum="dsNormal"    spellChecking="false" />
+      <itemData name="Data Members (m_*)" defStyleNum="dsVariable"  spellChecking="false" />
+      <itemData name="Globals (g_*)"      defStyleNum="dsVariable"  spellChecking="false" />
+      <itemData name="Statics (s_*)"      defStyleNum="dsVariable"  spellChecking="false" />
+      <itemData name="Types (*_t/*_type)" defStyleNum="dsDataType"  spellChecking="false" />
+      <itemData name="CONSTS/MACROS"      defStyleNum="dsNormal"    spellChecking="false" />
       <itemData name="Preprocessor"       defStyleNum="dsPreprocessor" spellChecking="false" />
-      <itemData name="Prep. Lib"          defStyleNum="dsImport"   spellChecking="false" />
-      <itemData name="Standard Macros"    defStyleNum="dsOthers"   spellChecking="false" />
-      <itemData name="Standard Classes"   defStyleNum="dsBuiltIn"  spellChecking="false" />
+      <itemData name="Prep. Lib"          defStyleNum="dsImport"    spellChecking="false" />
+      <itemData name="Standard Macros"    defStyleNum="dsOthers"    spellChecking="false" />
+      <itemData name="Standard Classes"   defStyleNum="dsBuiltIn"   spellChecking="false" />
       <itemData name="Boost Stuff"        defStyleNum="dsExtension" spellChecking="false" />
-      <itemData name="Internals"          defStyleNum="dsNormal"   spellChecking="false" color="#808080" selColor="#808080" />
+      <itemData name="Internals"          defStyleNum="dsNormal"    spellChecking="false" color="#808080" selColor="#808080" />
       <itemData name="Region Marker"      defStyleNum="dsRegionMarker" spellChecking="false" />
-      <itemData name="Error"              defStyleNum="dsError"    spellChecking="false" />
+      <itemData name="UDL Numeric Suffix" defStyleNum="dsDecVal"    spellChecking="false" />
+      <itemData name="UDL String Suffix"  defStyleNum="dsString"    spellChecking="false" />
+      <itemData name="Standard Suffix"    defStyleNum="dsBuiltIn"   spellChecking="false" />
+      <itemData name="Error"              defStyleNum="dsError"     spellChecking="false" />
     </itemDatas>
   </highlighting>
   <general>
@@ -509,7 +819,7 @@
       <comment name="singleLine" start="//" />
       <comment name="multiLine" start="/*" end="*/" region="Comment" />
     </comments>
-    <keywords casesensitive="1" />
+    <keywords casesensitive="1" additionalDeliminator="#&quot;" />
   </general>
 </language>
 <!-- kate: indent-width 2; tab-width 2; -->
diff --git a/xml/java.xml b/xml/java.xml
--- a/xml/java.xml
+++ b/xml/java.xml
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
-<language name="Java" version="3" kateversion="5.0" section="Sources" extensions="*.java" mimetype="text/x-java" license="LGPL" author="Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)">
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+	<!ENTITY int "[0-9]([0-9_]*[0-9])?">
+	<!ENTITY hex "[0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?">
+]>
+<language name="Java" version="5" kateversion="5.0" 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>
@@ -3760,14 +3764,13 @@
 				<keyword attribute="Keyword" context="#stay" String="keywords"/>
 				<keyword attribute="Data Type" context="#stay" String="types"/>
 				<keyword attribute="Java15" context="#stay" String="java15"/>
-				<Float attribute="Float" context="#stay">
-					<AnyChar String="fF" attribute="Float" context="#stay"/>
-				</Float>
-				<HlCOct attribute="Octal" context="#stay"/>
-				<HlCHex attribute="Hex" context="#stay"/>
-				<Int attribute="Decimal" context="#stay">
-					<StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
-				</Int>
+				<RegExpr attribute="Float" context="#stay" String="(\b&int;\.?|(\b&int;)?\.&int;)([eE][\-\+]?&int;[fFdD]?|[fFdD])\b"/>
+				<RegExpr attribute="Float" context="#stay" String="(\b&int;\.|(\b&int;)?\.&int;\b)"/>
+				<RegExpr attribute="Float" context="#stay" String="\b0[xX](&hex;\.?|(&hex;)?\.&hex;)[pP][\-\+]?&int;[fFdD]?\b"/>
+				<RegExpr attribute="Hex" context="#stay" String="\b0[xX]&hex;[lL]?\b"/>
+				<RegExpr attribute="Binary" context="#stay" String="\b0[bB][01]([01_]*[01])?[lL]?\b"/>
+				<RegExpr attribute="Octal" context="#stay" String="\b0[0-7]([0-7_]*[0-7])?[lL]?\b"/>
+				<RegExpr attribute="Decimal" context="#stay" String="\b(0|[1-9]([0-9_]*[0-9])?)[lL]?\b"/>
 				<HlCChar attribute="Char" context="#stay"/>
 				<RegExpr attribute="Char" context="#stay" String="'\\u[0-9a-fA-F]{4}'"/>
 				<RegExpr attribute="Decimal" context="#stay" String="//\s*BEGIN.*$" beginRegion="Region1"/>
@@ -3822,9 +3825,12 @@
 			<context attribute="Normal Text" lineEndContext="#pop" name="Imports">
 				<RegExpr attribute="Imports" context="#pop" String="\s*.*;" />
 			</context>
-			<context attribute="Comment" lineEndContext="#pop" name="Commentar 1"/>
+			<context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+				<IncludeRules context="##Alerts"/>
+			</context>
 			<context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
 				<Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+				<IncludeRules context="##Alerts"/>
 			</context>
 		</contexts>
 		<itemDatas>
@@ -3838,6 +3844,7 @@
 			<itemData name="Decimal"      defStyleNum="dsDecVal" spellChecking="false"/>
 			<itemData name="Octal"        defStyleNum="dsBaseN" spellChecking="false"/>
 			<itemData name="Hex"          defStyleNum="dsBaseN" spellChecking="false"/>
+			<itemData name="Binary"       defStyleNum="dsBaseN" spellChecking="false"/>
 			<itemData name="Float"        defStyleNum="dsFloat" spellChecking="false"/>
 			<itemData name="Char"         defStyleNum="dsChar" spellChecking="false"/>
 			<itemData name="String"       defStyleNum="dsString"/>
diff --git a/xml/javadoc.xml b/xml/javadoc.xml
--- a/xml/javadoc.xml
+++ b/xml/javadoc.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Javadoc" version="2" kateversion="2.4" section="Markup" extensions="" license="LGPL" author="Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)">
+<language name="Javadoc" version="3" kateversion="5.0" section="Markup" extensions="" license="LGPL" author="Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)">
 	<highlighting>
 		<contexts>
 			<context name="Start" attribute="Normal Text" lineEndContext="#stay">
@@ -29,6 +29,7 @@
 				<StringDetect attribute="InlineTag" context="#stay" String="{@value}" />
 				<StringDetect attribute="InlineTag" context="InlineTagar" String="{@value " />
 				<StringDetect attribute="InlineTag" context="InlineTagar" String="{@value&#009;" />
+				<IncludeRules context="##Alerts"/>
 				<IncludeRules context="##HTML"/>
 			</context>
 			<context attribute="Javadoc" lineEndContext="#stay" name="Javadocar">
@@ -71,12 +72,14 @@
 				<StringDetect attribute="InlineTag" context="#stay" String="{@value}" />
 				<StringDetect attribute="InlineTag" context="InlineTagar" String="{@value " />
 				<StringDetect attribute="InlineTag" context="InlineTagar" String="{@value&#009;" />
+				<IncludeRules context="##Alerts"/>
 				<IncludeRules context="##HTML"/>
 			</context>
 			<context attribute="Javadoc" lineEndContext="#pop" name="JavadocParam">
 				<DetectSpaces />
 				<RegExpr attribute="JavadocParam" context="#pop#pop" String="\S*(?=\*/)" />
 				<RegExpr attribute="JavadocParam" context="#pop" String="\S*(\s|$)" />
+				<IncludeRules context="##Alerts"/>
 			</context>
 			<context attribute="InlineTag" name="InlineTagar" lineEndContext="#stay">
 				<DetectChar attribute="InlineTag" context="#pop" char="}" />
@@ -94,12 +97,12 @@
 		</contexts>
 		<itemDatas>
 			<itemData name="Normal Text"  defStyleNum="dsNormal"/>
-			<itemData name="BlockTag"     defStyleNum="dsKeyword" color="#808080" selColor="#FFFFFF" bold="1" italic="0"/>
-			<itemData name="InlineTag"    defStyleNum="dsKeyword" color="#808080" selColor="#FFFFFF" bold="0" italic="0"/>
-			<itemData name="JavadocParam" defStyleNum="dsKeyword" color="#008080" selColor="#FFFFFF" bold="0" italic="1"/>
-			<itemData name="SeeTag"       defStyleNum="dsKeyword" color="#008080" selColor="#FFFFFF" bold="0" italic="1"/>
-			<itemData name="JavadocFS"    defStyleNum="dsComment" color="#008000" selColor="#FFFFFF" bold="1" italic="0"/>
-			<itemData name="Javadoc"      defStyleNum="dsComment" color="#008000" selColor="#FFFFFF"/>
+			<itemData name="BlockTag"     defStyleNum="dsAnnotation" bold="1" italic="0" spellChecking="false"/>
+			<itemData name="InlineTag"    defStyleNum="dsAnnotation" bold="0" italic="0" spellChecking="false"/>
+			<itemData name="JavadocParam" defStyleNum="dsAnnotation" bold="0" italic="1" spellChecking="false"/>
+			<itemData name="SeeTag"       defStyleNum="dsAnnotation" bold="0" italic="1" spellChecking="false"/>
+			<itemData name="JavadocFS"    defStyleNum="dsComment" bold="1" italic="0" spellChecking="false"/>
+			<itemData name="Javadoc"      defStyleNum="dsComment"/>
 		</itemDatas>
 	</highlighting>
 	<general>
diff --git a/xml/javascript.xml b/xml/javascript.xml
--- a/xml/javascript.xml
+++ b/xml/javascript.xml
@@ -1,9 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+  <!ENTITY identifier "([a-zA-Z_$]|[^[:ascii:]])([\w$]|[^[:ascii:]])*">
+]>
 <!-- Author: Anders Lund <anders@alweb.dk> //-->
 <!-- Minor changes: Joseph Wenninger <jowenn@kde.org> //-->
 <!-- Full JavaScript 1.0 support by Whitehawk Stormchaser //-->
-<language name="JavaScript" version="7" kateversion="5.0" section="Scripts" extensions="*.js;*.kwinscript;*.julius"
+<!-- NOTE: This highlighter does not offer full support for TypeScript. The .ts files
+     are temporarily included, since a syntax highlighting file for TypeScript is required! -->
+<language name="JavaScript" version="9" kateversion="5.0" section="Scripts" extensions="*.js;*.kwinscript;*.julius;*.ts"
           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="">
   <highlighting>
@@ -78,8 +83,10 @@
         the very first line.
       -->
       <context name="Shebang" lineEndContext="Normal" attribute="Normal Text" fallthrough="true" fallthroughContext="Normal" >
-        <Detect2Chars column="0" char="#" char1="!" context="Comment" attribute="Comment" />
+        <Detect2Chars column="0" char="#" char1="!" context="Shebang Line" attribute="Comment" />
       </context>
+      <context name="Shebang Line" attribute="Comment" lineEndContext="#pop!Normal">
+      </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
         <DetectSpaces/>
@@ -87,8 +94,11 @@
         <StringDetect attribute="Region Marker" context="region_marker" String="//END" endRegion="Region1" />
 
         <Float attribute="Float" context="NoRegExp" />
-        <HlCOct attribute="Octal" context="NoRegExp" />
+        <!-- Invalid Binary, Octal or Hex -->
+        <RegExpr attribute="Error" context="NoRegExp" String="\b0(b[01]*[2-9a-z]|o[0-7]*[89a-z]|x[0-9a-f]*[g-z])\w*\b" 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]+" />
         <Int attribute="Decimal" context="NoRegExp" />
         <AnyChar context="NoRegExp" String="])" />
 
@@ -102,11 +112,13 @@
         <StringDetect attribute="Template" context="RawTemplate" String="String.raw`" />
 
         <!--DetectIdentifier-->
-        <RegExpr attribute="Objects" context="Object Member" String="[a-zA-Z_$][\w$]*(?=\s*\.)" />
+        <RegExpr attribute="Objects" context="Object Member" String="&identifier;(?=\s*\.)" />
         <!--DetectIdentifier-->
-        <RegExpr attribute="Object Member" context="NoRegExp" String="[a-zA-Z_$][\w$]*(?=\s*\()" />
+        <RegExpr attribute="Object Member" context="NoRegExp" String="&identifier;(?=\s*\()" />
         <DetectChar context="Object Member" char="." />
         <!--DetectIdentifier-->
+        <!-- Do not start RegExp after non-ASCII characters (see bug #393633) -->
+        <RegExpr context="NoRegExp" String="&identifier;" />
         <RegExpr context="NoRegExp" String="[a-zA-Z_$][\w$]*" />
 
         <DetectChar attribute="String" context="String" char="&quot;" />
@@ -128,11 +140,11 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop" name="Object Member">
-        <DetectChar char="." />
+        <DetectChar context="#stay" char="." />
         <!--DetectIdentifier-->
-        <RegExpr attribute="Objects" context="Object Member" String="[a-zA-Z_$][\w$]*(?=\s*\.)" />
+        <RegExpr attribute="Objects" context="#stay" String="&identifier;(?=\s*\.)" />
         <!--DetectIdentifier-->
-        <RegExpr attribute="Object Member" String="[a-zA-Z_$][\w$]*" />
+        <RegExpr attribute="Object Member" context="#pop!NoRegExp" String="&identifier;" />
         <IncludeRules context="NoRegExp" />
       </context>
 
@@ -152,27 +164,35 @@
         <!-- Mostly required for define: in switch blocks -->
         <keyword attribute="Keyword" String="keywords" />
         <!--DetectIdentifier-->
-        <RegExpr attribute="JSON" String="[a-zA-Z_$][\w$]*\s*(?=:)" />
+        <RegExpr attribute="JSON" String="&identifier;\s*(?=:)" />
         <DetectChar attribute="Symbol" char="}" endRegion="Brace" context="#pop" />
         <IncludeRules context="Normal" />
       </context>
 
       <context attribute="String" lineEndContext="#pop" name="String">
-        <HlCStringChar attribute="Escape" />
-        <RegExpr attribute="Escape" String="\\u[0-9a-fA-F]{4}" />
-        <LineContinue/>
+        <IncludeRules context="Escape" />
         <DetectChar attribute="String" context="#pop" char="&quot;" />
       </context>
       <context attribute="String" lineEndContext="#pop" name="String SQ">
-        <HlCStringChar attribute="Escape" />
-        <RegExpr attribute="Escape" String="\\u[0-9a-fA-F]{4}" />
-        <LineContinue/>
+        <IncludeRules context="Escape" />
         <DetectChar attribute="String" context="#pop" char="'" />
       </context>
 
+      <context attribute="Normal Text" lineEndContext="#stay" name="Escape">
+        <LineContinue attribute="Escape" context="#stay" />
+        <!-- Hexadecimal, unicode & octal -->
+        <RegExpr attribute="Escape" context="#stay" String="\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u\{[0-9a-fA-F]+\}|[0-3][0-7]{1,2}|[4-7][0-7]|[1-7])" />
+        <Detect2Chars attribute="Error" context="#stay" char="\" char1="x" />
+        <Detect2Chars attribute="Error" context="#stay" char="\" char1="u" />
+        <DetectChar attribute="Escape" context="Character Escape" char="\" />
+      </context>
+      <context attribute="Escape" lineEndContext="#pop" name="Character Escape">
+        <AnyChar attribute="Reserved Char. Escape" context="#pop" String="0bfnrtv" /> <!-- Reserved Char. Escape. Also: "'/ -->
+        <RegExpr attribute="Escape" context="#pop" String="." /> <!-- Literal Char. Escape -->
+      </context>
+
       <context attribute="Template" lineEndContext="#stay" name="Template">
-        <HlCStringChar attribute="Escape" />
-        <Detect2Chars attribute="Escape" char="\" char1="`" />
+        <IncludeRules context="Escape" />
         <Detect2Chars attribute="Substitution" context="Substitution" char="$" char1="{" />
         <DetectChar attribute="Template" context="#pop" char="`" />
       </context>
@@ -233,8 +253,10 @@
       <itemData name="Decimal"      defStyleNum="dsDecVal" spellChecking="false" />
       <itemData name="Octal"        defStyleNum="dsBaseN" spellChecking="false" />
       <itemData name="Hex"          defStyleNum="dsBaseN" spellChecking="false" />
+      <itemData name="Binary"       defStyleNum="dsBaseN" spellChecking="false" />
       <itemData name="Float"        defStyleNum="dsFloat" spellChecking="false" />
       <itemData name="Escape"       defStyleNum="dsSpecialChar" spellChecking="false" />
+      <itemData name="Reserved Char. Escape" defStyleNum="dsSpecialChar" bold="1" spellChecking="false" />
       <itemData name="String"       defStyleNum="dsString" />
       <itemData name="Template"     defStyleNum="dsVerbatimString" />
       <itemData name="Substitution" defStyleNum="dsSpecialChar" spellChecking="false" />
@@ -246,6 +268,7 @@
       <itemData name="Pattern Character Class" defStyleNum="dsSpecialChar" spellChecking="false" />
       <itemData name="Region Marker" defStyleNum="dsRegionMarker" spellChecking="false" />
       <itemData name="JSON"         defStyleNum="dsDataType" spellChecking="false" />
+      <itemData name="Error"        defStyleNum="dsError" spellChecking="false"/>
     </itemDatas>
   </highlighting>
   <general>
diff --git a/xml/jsp.xml b/xml/jsp.xml
--- a/xml/jsp.xml
+++ b/xml/jsp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language version="3" kateversion="2.4" name="JSP" section="Markup" extensions="*.jsp;*.JSP" mimetype="text/html" casesensitive="false" author="Rob Martin (rob@gamepimp.com)" license="LGPL">
+<language version="4" kateversion="2.4" name="JSP" section="Markup" extensions="*.jsp;*.JSP" mimetype="text/html" casesensitive="false" author="Rob Martin (rob@gamepimp.com)" license="LGPL">
   <highlighting>
 
     <list name="java-1.4.2-classes">
@@ -2912,21 +2912,10 @@
         <keyword String="jsp-reserved-words" attribute="Keyword" context="#stay"/>
         <keyword String="java-1.4.2-types" attribute="Types" context="#stay"/>
         <keyword String="java-1.4.2-classes" attribute="Java 1.4.2 Classes" context="#stay"/>
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="fF" attribute="Float" context="#stay"/>
-        </Float>
+        <Float attribute="Float" context="Float Suffixes"/>
         <HlCOct attribute="Octal" context="#stay"/>
         <HlCHex attribute="Hex" context="#stay"/>
-        <Int attribute="Decimal" context="#stay">
-          <StringDetect String="ULL" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="LUL" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="LLU" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="UL" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="LU" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="LL" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="U" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="L" attribute="Decimal" context="#stay" insensitive="true"/>
-        </Int>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <RegExpr String="//\s*BEGIN.*$" attribute="Decimal" context="#stay" beginRegion="Region1" firstNonSpace="true"/>
         <RegExpr String="//\s*END.*$" attribute="Decimal" context="#stay" endRegion="Region1" firstNonSpace="true"/>
@@ -2938,6 +2927,21 @@
         <Detect2Chars char="/" char1="*" attribute="Java Comment" context="Java Multi-Line Comment"/>
       </context>
 
+      <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <AnyChar String="fF" attribute="Float" context="#pop"/>
+      </context>
+
+      <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <StringDetect attribute="Decimal" context="#pop" String="ULL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LUL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LLU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="UL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="U" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
+      </context>
+
       <context name="Jsp Expression" attribute="Normal Text" lineEndContext="#stay">
         <StringDetect String="'${'" attribute="Normal Text" context="#stay"/>
         <DetectChar char="}" attribute="Jsp Scriptlet" context="#pop"/>
@@ -2945,21 +2949,10 @@
         <keyword String="jsp-reserved-words" attribute="Keyword" context="#stay"/>
         <keyword String="java-1.4.2-types" attribute="Types" context="#stay"/>
         <keyword String="java-1.4.2-classes" attribute="Java 1.4.2 Classes" context="#stay"/>
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="fF" attribute="Float" context="#stay"/>
-        </Float>
+        <Float attribute="Float" context="Float Suffixes"/>
         <HlCOct attribute="Octal" context="#stay"/>
         <HlCHex attribute="Hex" context="#stay"/>
-        <Int attribute="Decimal" context="#stay">
-          <StringDetect String="ULL" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="LUL" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="LLU" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="UL" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="LU" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="LL" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="U" attribute="Decimal" context="#stay" insensitive="true"/>
-          <StringDetect String="L" attribute="Decimal" context="#stay" insensitive="true"/>
-        </Int>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar char="&quot;" attribute="String" context="Java String"/>
         <AnyChar String="!%&amp;()+,-&lt;=&gt;?[]^{|}~" attribute="Symbol" context="#stay"/>
diff --git a/xml/kotlin.xml b/xml/kotlin.xml
--- a/xml/kotlin.xml
+++ b/xml/kotlin.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <!-- kotlin language syntax http://kotlinlang.org -->
-<language name="Kotlin" version="4" kateversion="5.0" section="Sources" extensions="*.kt;*.kts" license="LGPLv2+" author="Sergey Mashkov (sergey.mashkov@jetbrains.com)" style="cstyle" indenter="cstyle">
+<language name="Kotlin" version="5" kateversion="5.0" section="Sources" extensions="*.kt;*.kts" license="LGPLv2+" author="Sergey Mashkov (sergey.mashkov@jetbrains.com)" style="cstyle" indenter="cstyle">
     <highlighting>
         <list name="keywords">
             <item>package</item>
@@ -114,18 +114,22 @@
                 <Detect2Chars attribute="Comment" context="CommentSingleLine" char="/" char1="/"/>
                 <Detect2Chars attribute="Comment" context="CommentMultiline" char="/" char1="*" beginRegion="Comment"/>
 
-                <Float attribute="Float" context="#stay">
-                    <AnyChar String="fF" attribute="Float" context="#stay"/>
-                </Float>
-                <Int attribute="Decimal" context="#stay">
-                    <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
-                </Int>
+                <Float attribute="Float" context="Float Suffixes"/>
+                <Int attribute="Decimal" context="Int Suffixes"/>
 
                 <RegExpr attribute="Annotation" context="#stay" String="@[_\w][_\w\d]*"/>
                 <RegExpr attribute="TODO" context="#stay" String="TODO\s*\([^)]*\)" />
                 <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
                 <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
                 <Detect2Chars attribute="Comment" context="CommentSingleLine" char="#" char1="!" />
+            </context>
+
+            <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+                <AnyChar String="fF" attribute="Float" context="#pop"/>
+            </context>
+
+            <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+                <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
             </context>
 
             <context attribute="Normal Text" lineEndContext="#pop" name="Imports">
diff --git a/xml/latex.xml b/xml/latex.xml
--- a/xml/latex.xml
+++ b/xml/latex.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="LaTeX" version="7" 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="8" 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>
     <contexts>
       <!-- Normal text -->
@@ -578,7 +578,6 @@
   </general>
 
   <spellchecking>
-    <configuration encodingReplacementPolicy="EncodeWhenPresent"/>
     <encodings>
       <encoding char="&#192;" string="\`{A}" />
       <encoding char="&#192;" string="\`A" />
diff --git a/xml/lua.xml b/xml/lua.xml
--- a/xml/lua.xml
+++ b/xml/lua.xml
@@ -43,7 +43,7 @@
     - NOTE, FIXME, TODO alerts added on comments
     - improved highlighting
 -->
-<language name="Lua" version="3" indenter="lua" kateversion="5.0" section="Scripts" extensions="*.lua" mimetype="text/x-lua">
+<language name="Lua" version="4" indenter="lua" kateversion="5.0" section="Scripts" extensions="*.lua" mimetype="text/x-lua">
   <highlighting>
     <list name="keywords">
       <item>and</item>
@@ -490,8 +490,15 @@
       </context>
 
       <context name="Special_char"  attribute="Error"       lineEndContext="#pop">
-        <RegExpr      attribute="Special Char"  context="#pop"  String="\\(?:[abfnrtvz'&quot;\\\[\]]|x&HEX;&HEX;|\d{1,3}|u\{&HEX;{1,6}\})" />
-        <DetectChar   attribute="Error"    context="#pop"  char="\"/>
+        <LineContinue attribute="Special Char" context="#pop" />
+        <Detect2Chars attribute="Special Char" context="Special_char_\z" char="\" char1="z" lookAhead="true"/>
+        <RegExpr      attribute="Special Char" context="#pop" String="\\(?:[abfnrtv'&quot;\\\[\]]|x&HEX;&HEX;|\d{1,3}|u\{&HEX;{1,6}\})"/>
+        <DetectChar   attribute="Error"        context="#pop" char="\"/>
+      </context>
+
+      <context name="Special_char_\z" attribute="Special Char" lineEndContext="#stay">
+        <LineContinue attribute="Special Char" context="#pop#pop" char="z"/>
+        <DetectChar   attribute="Special Char" context="#pop#pop" char="z"/>
       </context>
 
       <context name="String_block"  attribute="RawStrings"  lineEndContext="#stay" dynamic="true">
diff --git a/xml/mediawiki.xml b/xml/mediawiki.xml
--- a/xml/mediawiki.xml
+++ b/xml/mediawiki.xml
@@ -6,7 +6,7 @@
   <!ENTITY wikiLinkWithDescription "\[\[[^]|]*\|[^]]*\]\]">
   <!ENTITY wikiLinkWithoutDescription "\[\[[^]|]*\]\]">
 ]>
-<language name="MediaWiki" section="Markup" version="4" kateversion="3.4" extensions="*.mediawiki" mimetype="" license="FDL" >
+<language name="MediaWiki" section="Markup" version="5" kateversion="3.4" extensions="*.mediawiki" mimetype="" license="FDL" >
   <highlighting>
     <contexts>
       <context attribute="Normal" lineEndContext="#stay" name="normal" >
@@ -618,6 +618,5 @@
       <comment end="//-->" start="&lt;!--" name="multiLine" />
     </comments>
     <keywords casesensitive="0" />
-    <indentation mode="normal" />
   </general>
 </language>
diff --git a/xml/modelines.xml b/xml/modelines.xml
--- a/xml/modelines.xml
+++ b/xml/modelines.xml
@@ -8,15 +8,15 @@
   Copyright (c) 2012-2014 by Alex Turbov (i.zaufi@gmail.com)
   -->
 <language name="Modelines"
-          version="3"
+          version="4"
           kateversion="5.0"
           section="Other"
           extensions=""
           mimetype=""
           author="Alex Turbov (i.zaufi@gmail.com)"
-          license="LGPL"
+          license="MIT"
           hidden="true"
-          priority="5">
+          priority="6">
 <!--
   The main purpose of this file is to be included into other syntax files.
 
@@ -40,6 +40,7 @@
     <item>bookmark-sorting</item>
     <item>bom</item>
     <item>byte-order-marker</item>
+    <item>byte-order-mark</item>
     <item>dynamic-word-wrap</item>
     <item>folding-markers</item>
     <item>folding-preview</item>                          <!-- Since KTextEditor 5.24 -->
@@ -130,7 +131,6 @@
       <DetectSpaces />
       <keyword String="ModelineStartKeyword" context="Modeline" attribute="Keyword" />
       <RegExpr String="kate-(mimetype|wildcard)\(.*\):" context="Modeline" attribute="Keyword" />
-      <LineContinue context="#pop" />
     </context>
 
     <context name="Modeline" attribute="Comment" lineEndContext="#pop">
@@ -166,10 +166,13 @@
 
     <context name="RemoveSpaces" attribute="Comment" lineEndContext="#pop">
       <DetectSpaces />
-      <keyword String="RemoveSpacesOptions" attribute="Value" context="#pop" />
+      <keyword String="RemoveSpacesOptions" attribute="Value" context="#pop!RemoveSpacesEnd" />
       <DetectChar char="&end;" context="#pop" attribute="Variable" />
       <LineContinue context="#pop" />
     </context>
+    <context name="RemoveSpacesEnd" attribute="Comment" lineEndContext="#pop">
+      <DetectChar char="&end;" context="#pop" attribute="Variable" />
+    </context>
 
   </contexts>
 
@@ -187,7 +190,7 @@
 </highlighting>
 
 <general>
-  <keywords casesensitive="1" weakDeliminator=":-" />
+  <keywords casesensitive="1" weakDeliminator=":-+*" />
 </general>
 
 </language>
diff --git a/xml/modula-2.xml b/xml/modula-2.xml
--- a/xml/modula-2.xml
+++ b/xml/modula-2.xml
@@ -1,187 +1,1191 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Modula-2" version="3" kateversion="2.2" section="Sources" extensions="*.mod;*.def;*.mi;*.md" mimetype="text/x-modula-2">
-  <highlighting>
-    <list name="directives">
-      <item>ASSEMBLER</item>
-      <item>ALLOCATE</item>
-      <item>DEALLOCATE</item>
-      <item>SIZE</item>
-      <item>Write</item>
-      <item>WriteString</item>
-      <item>WriteCard</item>
-      <item>WriteLn</item>
-      <item>WriteBf</item>
-      <item>WriteInt</item>
-      <item>WriteReal</item>
-      <item>WriteLongReal</item>
-      <item>Read</item>
-      <item>ReadString</item>
-      <item>ReadCard</item>
-      <item>ReadInt</item>
-      <item>ReadReal</item>
-      <item>ReadLongReal</item>
-      <item>Open</item>
-      <item>Close</item>
-      <item>OpenInput</item>
-      <item>OpenOutput</item>
-      <item>Accessible</item>
-      <item>Erase</item>
-      <item>EOF</item>
-      <item>Done</item>
-      <item>EmptyString</item>
-      <item>Assign</item>
-      <item>Append</item>
-      <item>Length</item>
-      <item>StrEq</item>
-      <item>Copy</item>
-      <item>Concat</item>
-      <item>pos</item>
-      <item>Delete</item>
-      <item>Insert</item>
-      <item>compare</item>
-      <item>CAPS</item>
-      <item>PutBf</item>
-      <item>GetArgs</item>
-      <item>GetEnv</item>
-      <item>ResetClock</item>
-      <item>UserTime</item>
-      <item>SystemTime</item>
-      <item>GetChar</item>
-      <item>GetInt</item>
-      <item>GetCard</item>
-      <item>GetString</item>
-      <item>GetReal</item>
-      <item>GetLongReal</item>
-      <item>PutChar</item>
-      <item>PutInt</item>
-      <item>PutCard</item>
-      <item>PutString</item>
-      <item>PutReal</item>
-      <item>PutLongReal</item>
-      <item>PutLn</item>
-    </list>
-    <list name="keywords">
-      <item>AND</item>
-      <item>ARRAY</item>
-      <item>ASM</item>
-      <item>BEGIN</item>
-      <item>CASE</item>
-      <item>CONST</item>
-      <item>DIV</item>
-      <item>DO</item>
-      <item>ELSE</item>
-      <item>ELSIF</item>
-      <item>END</item>
-      <item>FOR</item>
-      <item>IF</item>
-      <item>IMPLEMENTATION</item>
-      <item>IN</item>
-      <item>SET</item>
-      <item>INCL</item>
-      <item>EXCL</item>
-      <item>ABS</item>
-      <item>BITSET</item>
-      <item>CAP</item>
-      <item>CHR</item>
-      <item>DEC</item>
-      <item>HALT</item>
-      <item>HIGH</item>
-      <item>INC</item>
-      <item>MAX</item>
-      <item>MIN</item>
-      <item>ODD</item>
-      <item>ORD</item>
-      <item>PROC</item>
-      <item>TRUNC</item>
-      <item>VAL</item>
-      <item>MOD</item>
-      <item>NIL</item>
-      <item>NOT</item>
-      <item>OF</item>
-      <item>OR</item>
-      <item>PROCEDURE</item>
-      <item>MODULE</item>
-      <item>DEFINITION</item>
-      <item>RECORD</item>
-      <item>REPEAT</item>
-      <item>THEN</item>
-      <item>TO</item>
-      <item>TYPE</item>
-      <item>UNTIL</item>
-      <item>LOOP</item>
-      <item>VAR</item>
-      <item>WHILE</item>
-      <item>WITH</item>
-      <item>EXIT</item>
-      <item>FALSE</item>
-      <item>TRUE</item>
-      <item>BY</item>
-      <item>FROM</item>
-      <item>IMPORT</item>
-      <item>EXPORT</item>
-      <item>QUALIFIED</item>
-      <item>RETURN</item>
-      <item>NEWPROCESS</item>
-      <item>TRANSFER</item>
-      <item>IOTRANSFER</item>
-      <item>FOREIGN</item>
-    </list>
-    <list name="types">
-      <item>INTEGER</item>
-      <item>CARDINAL</item>
-      <item>SHORTINT</item>
-      <item>SHORTCARD</item>
-      <item>LONGINT</item>
-      <item>LONGREAL</item>
-      <item>CHAR</item>
-      <item>BOOLEAN</item>
-      <item>POINTER</item>
-      <item>ADDRESS</item>
-      <item>ADR</item>
-      <item>REAL</item>
-      <item>File</item>
-    </list>
-    <contexts>
-      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
-        <keyword attribute="Keyword" context="#stay" String="keywords"/>
-        <keyword attribute="Directive" context="#stay" String="directives"/>
-        <keyword attribute="Type" context="#stay" String="types"/>
-        <Float attribute="Number" context="#stay"/>
-        <Int attribute="Number" context="#stay"/>
-        <DetectChar attribute="String" context="String1" char="&quot;" />
-        <DetectChar attribute="String" context="String2" char="'" />
-        <StringDetect attribute="Directive" context="Prep1" String="(*$"/>
-        <Detect2Chars attribute="Comment" context="Comment2" char="(" char1="*"/>
-      </context>
-      <context attribute="String" lineEndContext="#pop" name="String1">
-        <DetectChar attribute="String" context="#pop" char="&quot;"/>
-      </context>
-      <context attribute="String" lineEndContext="#pop" name="String2">
-        <DetectChar attribute="String" context="#pop" char="'" />
-      </context>
-      <context attribute="Comment" lineEndContext="#stay" name="Comment2">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1=")"/>
-      </context>
-      <context attribute="Directive" lineEndContext="#stay" name="Prep1">
-        <StringDetect attribute="Directive" context="Prep1" String="$*)"/>
-      </context>
-
-    </contexts>
-    <itemDatas>
-      <itemData name="Normal Text" defStyleNum="dsNormal" />
-      <itemData name="Keyword"     defStyleNum="dsKeyword" />
-      <itemData name="Type"        defStyleNum="dsDataType"/>
-      <itemData name="Number"      defStyleNum="dsDecVal" />
-      <itemData name="String"      defStyleNum="dsString" />
-      <itemData name="Directive"   defStyleNum="dsOthers" />
-      <itemData name="Comment"     defStyleNum="dsComment" />
-    </itemDatas>
-  </highlighting>
-  <general>
-    <keywords casesensitive="1" />
-    <comments>
-      <comment name="multiLine" start="(*" end="*)" />
-    </comments>
-  </general>
-</language>
+<language name="Modula-2" mimetype="text/x-modula2" version="5"
+  kateversion="2.2" section="Sources" priority="5" extensions="*.mod;*.def"
+  casesensitive="1"  author="B. Kowarsch (trijezdci@github)"  license="MIT">
+<!--
+  *****************************************************************************
+  Multi-Dialect Modula-2 syntax highlighting profile for Kate
+
+  Copyright (C) 2018 Modula-2 Software Foundation
+
+  Licensed under the MIT license <https://opensource.org/licenses/MIT>
+
+  This file should be placed in /usr/share.org.kde.syntax-highlighting/syntax/.
+
+  1. Dialect Support
+
+  This profile covers the following Modula-2 dialects:
+
+  (1) PIM Modula-2 (Wirth, 1985)
+  (2) ISO Modula-2 (ISO 10514-1)
+  (3) Modula-2 R10 (Kowarsch & Sutcliffe, 2010)
+
+  The default context  recognises reserved words and built-in identifiers that
+  are common to all dialects and tags them accordingly for highlighting.
+
+  1.2 Dialect Disambiguation
+
+  In order to disambiguate dialects, the profile also recognises entities that
+  are indicative of a specific dialect, tags them accordingly for highlighting
+  and switches the context to the dialect of which the entity is indicative.
+
+  However, this approach does NOT prevent  mis-identification  as it is always
+  possible  that a  user or library defined identifier  matches an entity that
+  is a reserved word or built-in identifier in another dialect.
+
+  It is therefore  advisable  to place  dialect tags  into the top of Modula-2
+  source files.
+
+  1.3 Dialect Tags
+
+  A dialect tag is a specially formatted comment that specifies the dialect in
+  use.  The profile recognises the following dialect tags:
+
+  (*!m2pim*) specifies the PIM dialect
+  (*!m2iso*) specifies the ISO dialect
+  (*!m2r10*) specifies the R10 dialect
+
+  Dialect tags  may  also include a  compiler extension suffix  following  the
+  dialect identifier  and preceded by '+'  to indicate  the  use  of  compiler
+  specific language extensions.  Such suffixes are recognised but ignored.
+
+  Using a dialect tag  guarantees  that the profile identifies the source file
+  correctly.  Attention: No whitespace is permitted within a dialect tag.
+
+  These dialect tags are also  recognised  by  Emacs, Vim/vi  and the Pygments
+  source code rendering framework.  Support in other editors and frameworks is
+  being added over time.
+
+  2. Classification
+
+  2.1 Reserved Words
+
+  In Modula-2 terminology, keywords are called reserved words.  Reserved words
+  are tagged "Keyword" regardless of their kind or purpose.
+
+  2.2 Built-in Identifiers
+
+  Modula-2 distinguishes two kinds of built-in identifiers: so called standard
+  identifiers, also called  pervasive identifiers  or simply  pervasives;  and
+  identifiers  provided by a  built-in module  for  unsafe facilities,  called
+  SYSTEM in PIM and ISO Modula-2, and UNSAFE in Modula-2 R10.
+
+  Pervasive Identifiers are tagged according to their kind as follows:
+
+  (1) Constants are tagged "Const"
+  (2) Types are tagged "Type"
+  (3) Functions, procedures and macros are tagged "Builtin"
+  (4) Identifiers provided by SYSTEM/UNSAFE are tagged "Unsafe"
+
+  The tagging of the  latter group  regardless of kind or purpose  follows the
+  Modula-2 philosophy of  making the  use of  unsafe facilities  explicit  and
+  easily identifiable within the source code in order to sensitise programmers
+  and thereby discourage and minimise their use.
+
+  2.3 Numeric Literals
+
+  There  are  three kinds of  numeric  literals: whole number  literals,  real
+  number literals  and  character code literals.  Numeric literals  are tagged
+  "Number" regardless of their kind.
+
+  2.4 Quoted Literals
+
+  There are  two ways to quote  a character or string: using single quotes, or
+  using double quotes.  Quoted literals  are  tagged  "String"  regardless  of
+  their type or kind.
+
+  2.5 Comments and Pragmas
+
+  Dialect tags, although comments, are tagged "DialectTag",  any other comments
+  are tagged "Comment",  and pragmas are tagged "Pragma".
+
+  2.6 Any Other Entities
+
+  Any other entities are tagged "Plain Source".
+
+  3. Rendering Styles
+
+  By default, the above tags/attributes are assigned styles as follows:
+
+  Keyword => dsKeyword, bold
+  Const => dsBuiltin, bold
+  Type => dsDataType, bold
+  Builtin => dsBuiltin, bold
+  Unsafe => dsWarning, bold
+  Number => dsDecVal
+  String => dsString
+  DialectTag => dsComment, bold
+  Comment => dsComment, italic
+  Pragma => dsPreprocessor, bold
+  Plain Source => dsNormal
+
+  These styles can be customised in Kate via Settings->Configure Kate...
+  *****************************************************************************
+-->
+  <highlighting>
+    <list name="workaround">
+      <!-- BUG: Kate ignores first entry in first context -->
+      <!-- WORKAROUND: Use the name of this dummy list as first entry -->
+      <item>???</item> <!-- use '???' in source to test/verify this bug -->
+    </list>
+
+<!--
+  ============================================================================
+  Common Entities - Lowest Common Denominator
+  ============================================================================
+-->
+    <!-- Common Reserved Words -->
+    <list name="common-keywords">
+      <item>AND</item>
+      <item>ARRAY</item>
+      <item>BEGIN</item>
+      <item>BY</item>
+      <item>CASE</item>
+      <item>CONST</item>
+      <item>DEFINITION</item>
+      <item>DIV</item>
+      <item>DO</item>
+      <item>ELSE</item>
+      <item>ELSIF</item>
+      <item>END</item>
+      <item>EXIT</item>
+      <item>FOR</item>
+      <item>FROM</item>
+      <item>IF</item>
+      <item>IMPLEMENTATION</item>
+      <item>IMPORT</item>
+      <item>IN</item>
+      <item>LOOP</item>
+      <item>MOD</item>
+      <item>MODULE</item>
+      <item>NOT</item>
+      <item>OF</item>
+      <item>OR</item>
+      <item>POINTER</item>
+      <item>PROCEDURE</item>
+      <item>RECORD</item>
+      <item>REPEAT</item>
+      <item>RETURN</item>
+      <item>SET</item>
+      <item>THEN</item>
+      <item>TO</item>
+      <item>TYPE</item>
+      <item>UNTIL</item>
+      <item>VAR</item>
+      <item>WHILE</item>
+    </list>
+
+    <!-- Common Pervasive Constants -->
+    <list name="common-constants">
+      <item>FALSE</item>
+      <item>NIL</item>
+      <item>TRUE</item>
+    </list>
+
+    <!-- Common Pervasive Types -->
+    <list name="common-types">
+      <item>BOOLEAN</item>
+      <item>CARDINAL</item>
+      <item>CHAR</item>
+      <item>INTEGER</item>
+      <item>LONGREAL</item>
+      <item>REAL</item>
+    </list>
+
+    <!-- Common Pervasive Procedures -->
+    <list name="common-procedures">
+      <item>ABS</item>
+      <item>CHR</item>
+      <item>MAX</item>
+      <item>MIN</item>
+      <item>ODD</item>
+      <item>ORD</item>
+    </list>
+
+    <!-- Common Unsafe Facilities -->
+    <list name="common-unsafe">
+      <!-- Types -->
+      <item>ADDRESS</item>
+      <item>WORD</item>
+      <!-- Procedures -->
+      <item>ADR</item>
+    </list>
+
+<!--
+  ============================================================================
+  Dialect Indicative Entities
+  ============================================================================
+-->
+<!--
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  PIM Indicators - Entities indicative of PIM Modula-2
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-->
+    <!-- There are no reswords, pervasives or builtins indicative of PIM -->
+
+    <!-- PIM-only Libraries -->
+    <list name="pim-only-libraries">
+      <item>InOut</item>
+      <item>MathLib0</item>
+    </list>
+
+<!--
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ISO Indicators - Entities indicative of ISO Modula-2
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-->
+    <!-- ISO-only Reserved Words -->
+    <list name="iso-only-keywords">
+      <!--NB: FORWARD is not indicative of ISO,
+          PIM single-pass compilers also use it.-->
+      <item>EXCEPT</item>
+      <item>FINALLY</item>
+      <item>PACKEDSET</item>
+      <item>REM</item>
+      <item>RETRY</item>
+    </list>
+
+    <!-- ISO-only Pervasive Constants -->
+    <list name="iso-only-constants">
+      <item>INTERRUPTIBLE</item>
+      <item>UNINTERRUPTIBLE</item>
+    </list>
+
+    <!-- ISO-only Pervasive Types -->
+    <list name="iso-only-types">
+      <!--NB: COMPLEX and LONGCOMPLEX are not indicative of ISO,
+          they are also part of the R10 standard library.-->
+      <item>PROTECTION</item>
+    </list>
+
+    <!-- ISO-only Pervasive Procedures -->
+    <list name="iso-only-procedures">
+      <item>CMPLX</item>
+      <item>IM</item>
+      <item>LFLOAT</item>
+      <item>RE</item>
+    </list>
+
+    <!-- ISO-only Unsafe Facilities -->
+    <list name="iso-only-unsafe">
+      <!-- Constants -->
+      <item>BITSPERLOC</item>
+      <item>BITSPERWORD</item>
+      <!-- Types -->
+      <item>LOC</item>
+      <!-- Procedures -->
+      <item>ADDADR</item>
+      <item>DIFADR</item>
+      <item>MAKEADR</item>
+      <item>ROTATE</item>
+      <item>SHIFT</item>
+      <item>SUBADR</item>
+    </list>
+
+    <!-- ISO-only Libraries -->
+    <list name="iso-only-libraries">
+      <item>IOConsts</item>
+      <item>IOLink</item>
+      <item>IOResult</item>
+      <item>LongIO</item>
+      <item>WholeIO</item>
+      <item>RawIO</item>
+      <item>SIOResult</item>
+      <item>SLongIO</item>
+      <item>SWholeIO</item>
+      <item>SRealIO</item>
+      <item>SRawIO</item>
+      <item>ConvTypes</item>
+      <item>RealStr</item>
+      <item>WholeStr</item>
+      <item>WholeConv</item>
+    </list>
+
+<!--
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  R10 Indicators - Entities indicative of Modula-2 R10
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-->
+    <!-- R10-only Reserved Words -->
+    <list name="r10-only-keywords">
+      <item>ALIAS</item>
+      <item>ARGLIST</item>
+      <item>BLUEPRINT</item>
+      <item>COPY</item>
+      <item>GENLIB</item>
+      <item>OPAQUE</item>
+      <item>READ</item>
+      <item>REFERENTIAL</item>
+      <item>RELEASE</item>
+      <item>RETAIN</item>
+      <item>WRITE</item>
+      <item>YIELD</item>
+    </list>
+
+    <!-- R10-only Pervasive Types -->
+    <list name="r10-only-types">
+      <!--NB: LONGCARD is not indicative of R10,
+          some PIM and ISO compilers also use it.-->
+      <item>OCTET</item>
+      <item>UNICHAR</item>
+    </list>
+
+    <!-- R10-only Pervasive Procedures -->
+    <list name="r10-only-procedures">
+      <item>APPEND</item>
+      <item>CAPACITY</item>
+      <item>COUNT</item>
+      <item>INSERT</item>
+      <item>LOG2</item>
+      <item>POW2</item>
+      <item>PRED</item>
+      <item>PTR</item>
+      <item>REMOVE</item>
+      <item>SGN</item>
+      <item>SUCC</item>
+    </list>
+
+    <!-- R10-only Pervasive Macros -->
+    <list name="r10-only-macros">
+      <item>TLIMIT</item>
+      <item>TMAX</item>
+      <item>TMIN</item>
+    </list>
+
+    <!-- R10-only Unsafe Facilities -->
+    <list name="r10-only-unsafe">
+      <!-- Module -->
+      <item>UNSAFE</item>
+      <!-- Types -->
+      <item>LONGWORD</item>
+      <item>OCTETSEQ</item>
+      <!-- Procedures -->
+      <item>BIT</item>
+      <item>BWAND</item>
+      <item>BWNOT</item>
+      <item>BWOR</item>
+      <item>SETBIT</item>
+      <item>SHL</item>
+      <item>SHR</item>
+    </list>
+
+    <!-- R10-only Libraries -->
+    <list name="r10-only-libraries">
+      <item>PervasiveIO</item>
+      <item>UnsafeIO</item>
+    </list>
+
+<!--
+  ============================================================================
+  Entities for PIM Context
+  ============================================================================
+-->
+    <!-- All PIM Reserved Words -->
+    <list name="pim-keywords">
+      <item>AND</item>
+      <item>ARRAY</item>
+      <item>BEGIN</item>
+      <item>BY</item>
+      <item>CASE</item>
+      <item>CONST</item>
+      <item>DEFINITION</item>
+      <item>DIV</item>
+      <item>DO</item>
+      <item>ELSE</item>
+      <item>ELSIF</item>
+      <item>END</item>
+      <item>EXIT</item>
+      <item>EXPORT</item>
+      <item>FOR</item>
+      <item>FROM</item>
+      <item>IF</item>
+      <item>IMPLEMENTATION</item>
+      <item>IMPORT</item>
+      <item>IN</item>
+      <item>LOOP</item>
+      <item>MOD</item>
+      <item>MODULE</item>
+      <item>NOT</item>
+      <item>OF</item>
+      <item>OR</item>
+      <item>POINTER</item>
+      <item>PROCEDURE</item>
+      <item>QUALIFIED</item>
+      <item>RECORD</item>
+      <item>REPEAT</item>
+      <item>RETURN</item>
+      <item>SET</item>
+      <item>THEN</item>
+      <item>TO</item>
+      <item>TYPE</item>
+      <item>UNTIL</item>
+      <item>VAR</item>
+      <item>WHILE</item>
+      <item>WITH</item>
+    </list>
+
+    <!-- All PIM Pervasive Constants -->
+    <list name="pim-constants">
+      <item>FALSE</item>
+      <item>NIL</item>
+      <item>TRUE</item>
+    </list>
+
+    <!-- All PIM Pervasive Types -->
+    <list name="pim-types">
+      <item>BOOLEAN</item>
+      <item>BITSET</item>
+      <item>CARDINAL</item>
+      <item>CHAR</item>
+      <item>INTEGER</item>
+      <item>LONGINT</item>
+      <item>LONGREAL</item>
+      <item>PROC</item>
+      <item>REAL</item>
+    </list>
+
+    <!-- All PIM Pervasive Procedures -->
+    <list name="pim-procedures">
+      <item>ABS</item>
+      <item>CAP</item>
+      <item>CHR</item>
+      <item>DEC</item>
+      <item>EXCL</item>
+      <item>FLOAT</item>
+      <item>HALT</item>
+      <item>HIGH</item>
+      <item>INC</item>
+      <item>INCL</item>
+      <item>MAX</item>
+      <item>MIN</item>
+      <item>ODD</item>
+      <item>ORD</item>
+      <item>SIZE</item>
+      <item>TRUNC</item>
+      <item>VAL</item>
+    </list>
+
+    <!-- All PIM Pervasive Macros and their translations -->
+    <list name="pim-macros">
+      <item>NEW</item>
+      <!--resolves to-->
+      <item>ALLOCATE</item>
+      <item>DISPOSE</item>
+      <!--resolves to-->
+      <item>DEALLOCATE</item>
+    </list>
+
+    <!-- All PIM Unsafe Facilities -->
+    <list name="pim-unsafe">
+      <!-- Module -->
+      <item>SYSTEM</item>
+      <!-- Types -->
+      <item>ADDRESS</item>
+      <item>PROCESS</item>
+      <item>WORD</item>
+      <!-- Procedures -->
+      <item>ADR</item>
+      <item>NEWPROCESS</item>
+      <item>TRANSFER</item>
+      <item>TSIZE</item>
+    </list>
+
+<!--
+  ============================================================================
+  Entities for ISO Context
+  ============================================================================
+-->
+    <!-- All ISO Reserved Words -->
+    <list name="iso-keywords">
+      <item>AND</item>
+      <item>ARRAY</item>
+      <item>BEGIN</item>
+      <item>BY</item>
+      <item>CASE</item>
+      <item>CONST</item>
+      <item>DEFINITION</item>
+      <item>DIV</item>
+      <item>DO</item>
+      <item>ELSE</item>
+      <item>ELSIF</item>
+      <item>END</item>
+      <item>EXIT</item>
+      <item>EXCEPT</item>
+      <item>EXPORT</item>
+      <item>FINALLY</item>
+      <item>FOR</item>
+      <item>FORWARD</item>
+      <item>FROM</item>
+      <item>IF</item>
+      <item>IMPLEMENTATION</item>
+      <item>IMPORT</item>
+      <item>IN</item>
+      <item>LOOP</item>
+      <item>MOD</item>
+      <item>MODULE</item>
+      <item>NOT</item>
+      <item>OF</item>
+      <item>OR</item>
+      <item>PACKEDSET</item>
+      <item>POINTER</item>
+      <item>PROCEDURE</item>
+      <item>QUALIFIED</item>
+      <item>RECORD</item>
+      <item>REM</item>
+      <item>REPEAT</item>
+      <item>RETRY</item>
+      <item>RETURN</item>
+      <item>SET</item>
+      <item>THEN</item>
+      <item>TO</item>
+      <item>TYPE</item>
+      <item>UNTIL</item>
+      <item>VAR</item>
+      <item>WHILE</item>
+      <item>WITH</item>
+    </list>
+
+    <!-- All ISO Pervasive Constants -->
+    <list name="iso-constants">
+      <item>FALSE</item>
+      <item>INTERRUPTIBLE</item>
+      <item>NIL</item>
+      <item>TRUE</item>
+      <item>UNINTERRUPTIBLE</item>
+    </list>
+
+    <!-- All ISO Pervasive Types -->
+    <list name="iso-types">
+      <item>BOOLEAN</item>
+      <item>BITSET</item>
+      <item>CARDINAL</item>
+      <item>COMPLEX</item>
+      <item>CHAR</item>
+      <item>INTEGER</item>
+      <item>LONGCOMPLEX</item>
+      <item>LONGREAL</item>
+      <item>PROC</item>
+      <item>PROTECTION</item>
+      <item>REAL</item>
+    </list>
+
+    <!-- All ISO Pervasive Procedures -->
+    <list name="iso-procedures">
+      <item>ABS</item>
+      <item>CAP</item>
+      <item>CHR</item>
+      <item>CMPLX</item>
+      <item>DEC</item>
+      <item>EXCL</item>
+      <item>FLOAT</item>
+      <item>HALT</item>
+      <item>HIGH</item>
+      <item>IM</item>
+      <item>INC</item>
+      <item>INCL</item>
+      <item>INT</item>
+      <item>LENGTH</item>
+      <item>LFLOAT</item>
+      <item>MAX</item>
+      <item>MIN</item>
+      <item>ODD</item>
+      <item>ORD</item>
+      <item>RE</item>
+      <item>SIZE</item>
+      <item>TRUNC</item>
+      <item>VAL</item>
+    </list>
+
+    <!-- All ISO Pervasive Macros and teir translations -->
+    <list name="iso-macros">
+      <item>NEW</item>
+      <!--resolves to-->
+      <item>ALLOCATE</item>
+      <item>DISPOSE</item>
+      <!--resolves to-->
+      <item>DEALLOCATE</item>
+    </list>
+
+    <!-- All ISO Unsafe Facilities -->
+    <list name="iso-unsafe">
+      <!-- Module -->
+      <item>SYSTEM</item>
+      <!-- Constants -->
+      <item>BITSPERLOC</item>
+      <item>BITSPERWORD</item>
+      <!-- Types -->
+      <item>ADDRESS</item>
+      <item>LOC</item>
+      <item>WORD</item>
+      <!-- Procedures -->
+      <item>ADDADR</item>
+      <item>ADR</item>
+      <item>CAST</item>
+      <item>DIFADR</item>
+      <item>MAKEADR</item>
+      <item>ROTATE</item>
+      <item>SHIFT</item>
+      <item>SUBADR</item>
+      <item>TSIZE</item>
+    </list>
+
+<!--
+  ============================================================================
+  Entities for R10 Context
+  ============================================================================
+-->
+    <!-- All R10 Reserved Words -->
+    <list name="r10-keywords">
+      <item>ALIAS</item>
+      <item>AND</item>
+      <item>ARGLIST</item>
+      <item>ARRAY</item>
+      <item>BEGIN</item>
+      <item>BLUEPRINT</item>
+      <item>BY</item>
+      <item>CASE</item>
+      <item>CONST</item>
+      <item>COPY</item>
+      <item>DEFINITION</item>
+      <item>DIV</item>
+      <item>DO</item>
+      <item>ELSE</item>
+      <item>ELSIF</item>
+      <item>END</item>
+      <item>EXIT</item>
+      <item>FOR</item>
+      <item>FROM</item>
+      <item>GENLIB</item>
+      <item>IF</item>
+      <item>IMPLEMENTATION</item>
+      <item>IMPORT</item>
+      <item>IN</item>
+      <item>LOOP</item>
+      <item>MOD</item>
+      <item>MODULE</item>
+      <item>NEW</item>
+      <item>NOT</item>
+      <item>OF</item>
+      <item>OPAQUE</item>
+      <item>OR</item>
+      <item>POINTER</item>
+      <item>PROCEDURE</item>
+      <item>READ</item>
+      <item>RECORD</item>
+      <item>REFERENTIAL</item>
+      <item>RELEASE</item>
+      <item>REPEAT</item>
+      <item>RETAIN</item>
+      <item>RETURN</item>
+      <item>SET</item>
+      <item>THEN</item>
+      <item>TO</item>
+      <item>TYPE</item>
+      <item>UNTIL</item>
+      <item>VAR</item>
+      <item>WHILE</item>
+      <item>WRITE</item>
+      <item>YIELD</item>
+    </list>
+
+    <!-- All R10 Pervasive Constants -->
+    <list name="r10-constants">
+      <item>FALSE</item>
+      <item>NIL</item>
+      <item>TRUE</item>
+    </list>
+
+    <!-- All R10 Pervasive Types -->
+    <list name="r10-types">
+      <item>BOOLEAN</item>
+      <item>CARDINAL</item>
+      <item>CHAR</item>
+      <item>INTEGER</item>
+      <item>LONGCARD</item>
+      <item>LONGINT</item>
+      <item>LONGREAL</item>
+      <item>OCTET</item>
+      <item>REAL</item>
+      <item>UNICHAR</item>
+    </list>
+
+    <!-- All R10 Pervasive Procedures -->
+    <list name="r10-procedures">
+      <item>ABS</item>
+      <item>APPEND</item>
+      <item>CAPACITY</item>
+      <item>CHR</item>
+      <item>COUNT</item>
+      <item>ENTIER</item>
+      <item>INSERT</item>
+      <item>LENGTH</item>
+      <item>LOG2</item>
+      <item>MAX</item>
+      <item>MIN</item>
+      <item>ODD</item>
+      <item>ORD</item>
+      <item>POW2</item>
+      <item>PRED</item>
+      <item>PTR</item>
+      <item>REMOVE</item>
+      <item>SGN</item>
+      <item>SUCC</item>
+    </list>
+
+    <!-- All R10 Pervasive Macros -->
+    <list name="r10-macros">
+      <item>TLIMIT</item>
+      <item>TMAX</item>
+      <item>TMIN</item>
+      <item>TSIZE</item>
+    </list>
+
+    <!-- All R10 Unsafe Facilities -->
+    <list name="r10-unsafe">
+      <!-- Reserved Words -->
+      <item>CAST</item>
+      <!-- Module -->
+      <item>UNSAFE</item>
+      <!-- Constants -->
+      <item>BitsPerAddress</item>
+      <item>BitsPerByte</item>
+      <item>BytesPerWord</item>
+      <item>BytesPerLongWord</item>
+      <!-- Types -->
+      <item>ADDRESS</item>
+      <item>BYTE</item>
+      <item>LONGWORD</item>
+      <item>OCTETSEQ</item>
+      <item>WORD</item>
+      <!-- Procedures -->
+      <item>ADD</item>
+      <item>ADR</item>
+      <item>BIT</item>
+      <item>BWAND</item>
+      <item>BWNOT</item>
+      <item>BWOR</item>
+      <item>HALT</item>
+      <item>SETBIT</item>
+      <item>SHL</item>
+      <item>SHR</item>
+      <item>SUB</item>
+      <!-- Macros -->
+      <item>NOP</item>
+    </list>
+
+    <contexts>
+<!--
+  ============================================================================
+  Common Context
+  ============================================================================
+  This context is selected by default, prior to any dialect disambiguation.
+  ============================================================================
+-->
+      <context name="Common" attribute="Plain Source" lineEndContext="#stay">
+        <!-- BUG: first entry is ignored, leave Dummy at first position -->
+        <keyword attribute="Dummy" context="#stay" String="workaround"/>
+<!--
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  Dialect tags
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  Occurence selects specified dialect. Compiler extension suffix is ignored.
+
+  EBNF:
+
+  dialectTag :=
+    '(*!' dialectIdent ( '+' compilerExtension )? '*)'
+    ;
+
+  dialectIdent :=
+    'm2pim' | 'm2iso' | 'm2r10'
+    ;
+
+  compilerExtension :=
+    LowerCaseLetter ( LowerCaseLetter | Digit )*
+    ;
+
+  LowerCaseLetter := 'a' .. 'z';
+
+  Digit := '0' .. '9' ;
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-->
+        <!-- PIM Dialect Tag (*!m2pim*) -->
+        <RegExpr attribute="DialectTag" context="PIM"
+          String="\(\*\!m2pim(\+[a-z][a-z0-9]*)?\*\)"/>
+
+        <!-- ISO Dialect Tag (*!m2iso*) -->
+        <RegExpr attribute="DialectTag" context="ISO"
+          String="\(\*\!m2iso(\+[a-z][a-z0-9]*)?\*\)"/>
+
+        <!-- R10 Dialect Tag (*!m2r10*) -->
+        <RegExpr attribute="DialectTag" context="R10"
+          String="\(\*\!m2r10(\+[a-z][a-z0-9]*)?\*\)"/>
+<!--
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  Entities common to all dialects, occurrence does not select any dialect
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-->
+        <!-- Common Reserved Words -->
+        <keyword attribute="Keyword"
+          context="#stay" String="common-keywords"/>
+
+        <!-- Common Pervasive Constants -->
+        <keyword attribute="Const"
+          context="#stay" String="common-constants"/>
+
+        <!-- Common Pervasive Types -->
+        <keyword attribute="Const"
+          context="#stay" String="common-types"/>
+
+        <!-- Common Pervasive Procedures -->
+        <keyword attribute="Builtin"
+          context="#stay" String="common-procedures"/>
+
+        <!-- Common Unsafe Facilities -->
+        <keyword attribute="Unsafe"
+          context="#stay" String="common-unsafe"/>
+<!--
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  Entities indicative of a dialect, occurrence selects indicated dialect
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-->
+        <!-- Dialect Indicative Reserved Words -->
+        <keyword attribute="Keyword"
+          context="ISO" String="iso-only-keywords"/>
+        <keyword attribute="Keyword"
+          context="R10" String="r10-only-keywords"/>
+
+        <!-- Dialect Indicative Constants -->
+        <keyword attribute="Const"
+          context="ISO" String="iso-only-constants"/>
+
+         <!-- Dialect Indicative Types -->
+        <keyword attribute="Type"
+          context="ISO" String="iso-only-types"/>
+        <keyword attribute="Type"
+          context="R10" String="r10-only-types"/>
+
+        <!-- Dialect Indicative Procedures -->
+        <keyword attribute="Builtin"
+          context="ISO" String="iso-only-procedures"/>
+        <keyword attribute="Builtin"
+          context="R10" String="r10-only-procedures"/>
+
+        <!-- Dialect Indicative Macros -->
+        <keyword attribute="Builtin"
+          context="R10" String="r10-only-macros"/>
+
+        <!-- Dialect Indicative Unsafe Facilities -->
+        <keyword attribute="Unsafe" context="ISO" String="iso-only-unsafe"/>
+        <keyword attribute="Unsafe" context="R10" String="r10-only-unsafe"/>
+
+        <!-- Dialect Indicative Libraries -->
+        <keyword attribute="Plain Source"
+          context="PIM" String="pim-only-libraries"/>
+        <keyword attribute="Plain Source"
+          context="ISO" String="iso-only-libraries"/>
+        <keyword attribute="Plain Source"
+          context="R10" String="r10-only-libraries"/>
+<!--
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  Literals common to all dialects, occurrence does not select any dialect
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-->
+        <!-- Real Number Literals -->
+        <Float attribute="Number" context="#stay"/>
+
+        <!-- Decimal Whole Number Literals -->
+        <Int attribute="Number" context="#stay"/>
+
+        <!-- Double-Quoted Character and String Literals -->
+        <DetectChar attribute="String" context="DoubleQuoted" char="&quot;"/>
+
+        <!-- Single-Quoted Character and String Literals -->
+        <DetectChar attribute="String" context="SingleQuoted" char="'"/>
+
+        <!-- Opening Block Comment Delimiter -->
+        <Detect2Chars attribute="Comment" context="BlockComment"
+          char="(" char1="*" beginRegion="FoldableComment"/>
+      </context><!--Common-->
+
+<!--
+  ============================================================================
+  PIM Context
+  ============================================================================
+  This context is selected when either the PIM dialect tag (*!m2pim*) or an
+  entity indicative of the PIM dialect is found within the source file.
+  ============================================================================
+-->
+      <context name="PIM" attribute="Plain Source" lineEndContext="#stay">
+        <!-- Reserved Words -->
+        <keyword attribute="Keyword" context="#stay" String="pim-keywords"/>
+
+        <!-- Pervasive Constant Identifiers -->
+        <keyword attribute="Const" context="#stay" String="pim-constants"/>
+
+        <!-- Pervasive Type Identifiers -->
+        <keyword attribute="Type" context="#stay" String="pim-types"/>
+
+        <!-- Pervasive Procedure Identifiers -->
+        <keyword attribute="Builtin" context="#stay" String="pim-procedures"/>
+
+        <!-- Pervasive Macro Identifiers and Translations -->
+        <keyword attribute="Builtin" context="#stay" String="pim-macros"/>
+
+        <!-- Built-in Unsafe Facilities -->
+        <keyword attribute="Unsafe" context="#stay" String="pim-unsafe"/>
+
+        <!-- Base-16 Whole Number Literals -->
+        <RegExpr attribute="Number" context="#stay" String="0[0-9A-F]*H"/>
+
+        <!-- Base-8 Whole Number and Character Code Literals -->
+        <RegExpr attribute="Number" context="#stay" String="[0-7]+[BC]"/>
+
+        <!-- Real Number Literals -->
+        <Float attribute="Number" context="#stay"/>
+
+        <!-- Decimal Whole Number Literals -->
+        <Int attribute="Number" context="#stay"/>
+
+        <!-- Double-Quoted Character and String Literals -->
+        <DetectChar attribute="String" context="DoubleQuoted" char="&quot;"/>
+
+        <!-- Single-Quoted Character and String Literals -->
+        <DetectChar attribute="String" context="SingleQuoted" char="'"/>
+
+        <!-- Opening Pragma Delimiter -->
+        <StringDetect attribute="Pragma" context="PIM-Pragma" String="(*$"/>
+
+        <!-- Opening Block Comment Delimiter -->
+        <Detect2Chars attribute="Comment" context="BlockComment"
+          char="(" char1="*" beginRegion="FoldableComment"/>
+      </context><!--PIM-->
+
+<!--
+  ============================================================================
+  ISO Context
+  ============================================================================
+  This context is selected when either the ISO dialect tag (*!m2iso*) or an
+  entity indicative of the ISO dialect is found within the source file.
+  ============================================================================
+-->
+      <context name="ISO" attribute="Plain Source" lineEndContext="#stay">
+        <!-- Reserved Words -->
+        <keyword attribute="Keyword" context="#stay" String="iso-keywords"/>
+
+        <!-- Pervasive Constant Identifiers -->
+        <keyword attribute="Const" context="#stay" String="iso-constants"/>
+
+        <!-- Pervasive Type Identifiers -->
+        <keyword attribute="Type" context="#stay" String="iso-types"/>
+
+        <!-- Pervasive Procedure Identifiers -->
+        <keyword attribute="Builtin" context="#stay" String="iso-procedures"/>
+
+        <!-- Pervasive Macro Identifiers and Translations -->
+        <keyword attribute="Builtin" context="#stay" String="iso-macros"/>
+
+        <!-- Built-in Unsafe Facilities -->
+        <keyword attribute="Unsafe" context="#stay" String="iso-unsafe"/>
+
+        <!-- Base-16 Whole Number Literals -->
+        <RegExpr attribute="Number" context="#stay" String="0[0-9A-F]*H"/>
+
+        <!-- Base-8 Whole Number and Character Code Literals -->
+        <RegExpr attribute="Number" context="#stay" String="[0-7]+[BC]"/>
+
+        <!-- Real Number Literals -->
+        <Float attribute="Number" context="#stay"/>
+
+        <!-- Decimal Whole Number Literals -->
+        <Int attribute="Number" context="#stay"/>
+
+        <!-- Double-Quoted Character and String Literals -->
+        <DetectChar attribute="String" context="DoubleQuoted" char="&quot;"/>
+
+        <!-- Single-Quoted Character and String Literals -->
+        <DetectChar attribute="String" context="SingleQuoted" char="'"/>
+
+        <!-- Opening Pragma Delimiter -->
+        <Detect2Chars attribute="Pragma"
+          context="ISO-Pragma" char="&lt;" char1="*"/>
+
+        <!-- Opening Block Comment Delimiter -->
+        <Detect2Chars attribute="Comment" context="BlockComment"
+          char="(" char1="*" beginRegion="FoldableComment"/>
+      </context><!--ISO-->
+
+<!--
+  ============================================================================
+  R10 Context
+  ============================================================================
+  This context is selected when either the R10 dialect tag (*!m2r10*) or an
+  entity indicative of the R10 dialect is found within the source file.
+  ============================================================================
+-->
+      <context name="R10" attribute="Plain Source" lineEndContext="#stay">
+        <!-- Reserved Words -->
+        <keyword attribute="Keyword" context="#stay" String="r10-keywords"/>
+
+        <!-- Built-in Constant Identifiers -->
+        <keyword attribute="Const" context="#stay" String="r10-constants"/>
+
+        <!-- Built-in Type Identifiers -->
+        <keyword attribute="Type" context="#stay" String="r10-types"/>
+
+        <!-- Built-in Procedure Identifiers -->
+        <keyword attribute="Builtin" context="#stay" String="r10-procedures"/>
+
+        <!-- Built-in Macro Identifiers and Translations -->
+        <keyword attribute="Builtin" context="#stay" String="r10-macros"/>
+
+        <!-- Facilities from Built-in Module UNSAFE -->
+        <keyword attribute="Unsafe" context="#stay" String="r10-unsafe"/>
+
+        <!-- Base-2 Whole Number Literals -->
+        <RegExpr attribute="Number" context="#stay"
+          String="0b([01]+('[01]+)?)+"/>
+
+        <!-- Base-16 Whole Number and Character Code Literals -->
+        <RegExpr attribute="Number" context="#stay"
+          String="0[ux]([0-9A-F]+('[0-9A-F]+)?)+"/>
+
+        <!-- Real Number Literals -->
+        <Float attribute="Number" context="#stay"/>
+
+        <!-- Decimal Whole Number Literals -->
+        <RegExpr attribute="Number" context="#stay"
+          String="([1-9][0-9]*('[0-9]+)*)|0"/>
+
+        <!-- Double-Quoted Character and String Literals -->
+        <DetectChar attribute="String" context="DoubleQuoted" char="&quot;"/>
+
+        <!-- Single-Quoted Character and String Literals -->
+        <DetectChar attribute="String" context="SingleQuoted" char="'"/>
+
+        <!-- Opening Pragma Delimiter -->
+        <Detect2Chars attribute="Pragma"
+          context="ISO-Pragma" char="&lt;" char1="*"/>
+
+        <!-- Line Comment -->
+        <DetectChar attribute ="Comment" context="LineComment" char="!"/>
+
+        <!-- Opening Block Comment Delimiter -->
+        <Detect2Chars attribute="Comment" context="BlockComment"
+          char="(" char1="*" beginRegion="FoldableComment"/>
+      </context><!--R10-->
+
+<!--
+  ============================================================================
+  Sub-Contexts
+  ============================================================================
+  These contexts are used to process entities that are recognised by their
+  opening delimiters, such as quoted literals, pragmas and comments.
+  ============================================================================
+-->
+      <!-- Double-Quoted Literal -->
+      <context name="DoubleQuoted" attribute="String" lineEndContext="#pop">
+        <!-- Closing Delimiter -->
+        <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+
+      <!-- Single-Quoted Literal -->
+      <context name="SingleQuoted" attribute="String" lineEndContext="#pop">
+        <!-- CLosing Delimiter -->
+        <DetectChar attribute="String" context="#pop" char="'" />
+      </context>
+
+      <!-- PIM Pragma Body -->
+      <context name="PIM-Pragma" attribute="Pragma" lineEndContext="#stay">
+        <!-- Closing Delimiter -->
+        <Detect2Chars attribute="Pragma" context="#pop" char="*" char1=")"/>
+      </context>
+
+      <!-- ISO Pragma Body -->
+      <context name="ISO-Pragma" attribute="Pragma" lineEndContext="#stay">
+        <!-- Closing Delimiter -->
+        <Detect2Chars attribute="Pragma"
+          context="#pop" char="*" char1="&gt;"/>
+      </context>
+
+      <!-- Line Comment Body -->
+      <context name="LineComment" attribute="Comment" lineEndContext="#pop">
+      </context>
+
+      <!-- Block Comment Body -->
+      <context name="BlockComment" attribute="Comment" lineEndContext="#stay">
+        <!-- Opening Delimiter of Nested Comment -->
+        <Detect2Chars attribute="Comment" context="BlockComment"
+          char="(" char1="*" beginRegion="FoldableComment"/>
+        <!-- Closing Delimiter -->
+        <Detect2Chars attribute="Comment" context="#pop"
+          char="*" char1=")" endRegion="FoldableComment"/>
+      </context>
+    </contexts>
+
+<!--
+  ============================================================================
+  Rendering Styles
+  ============================================================================
+-->
+    <itemDatas>
+      <!-- Style for Plain Source Text -->
+      <itemData name="Plain Source"
+        defStyleNum="dsNormal" bold="0" italic="0"/>
+
+      <!-- Style for Reserved Words -->
+      <itemData name="Keyword"
+        defStyleNum="dsKeyword" bold="1" italic="0"/>
+
+      <!-- Style for Pervasive Constant Identifiers -->
+      <itemData name="Const"
+        defStyleNum="dsBuiltIn" bold="1" italic="0"/>
+
+      <!-- Style for Pervasive Type Identifiers -->
+      <itemData name="Type"
+        defStyleNum="dsDataType" bold="1" italic="0"/>
+
+      <!-- Style for Pervasive Procedure Identifiers -->
+      <itemData name="Builtin"
+        defStyleNum="dsBuiltIn" bold="1" italic="0"/>
+
+      <!--  Style for Unsafe Facilities -->
+      <itemData name="Unsafe"
+        defStyleNum="dsWarning" bold="1" italic="0"/>
+
+      <!-- Style for Number Literals -->
+      <itemData name="Number"
+        defStyleNum="dsDecVal" bold="0" italic="0"/>
+
+      <!-- Style for Quoted Literals -->
+      <itemData name="String"
+        defStyleNum="dsString" bold="0" italic="0"/>
+
+      <!-- Style for Dialect Tags -->
+      <itemData name="DialectTag"
+        defStyleNum="dsComment" bold="1" italic="0"/>
+
+      <!-- Style for Pragmas -->
+      <itemData name="Pragma"
+        defStyleNum="dsPreprocessor" bold="1" italic="0"/>
+
+      <!-- Style for Comments -->
+      <itemData name="Comment"
+        defStyleNum="dsComment" bold="0" italic="1"/>
+
+      <!-- Dummy style for testing -->
+      <itemData name="Dummy" defStyleNum="dsError"/>
+    </itemDatas>
+  </highlighting>
+
+  <general>
+    <keywords casesensitive="1" />
+    <comments>
+      <comment name="singleLine" start="!"/>
+      <comment name="multiLine" start="(*" end="*)"/>
+    </comments>
+  </general>
+</language>
+
+<!--EOF-->
diff --git a/xml/objectivec.xml b/xml/objectivec.xml
--- a/xml/objectivec.xml
+++ b/xml/objectivec.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Objective-C" version="2" kateversion="5.0" section="Sources" extensions="*.m;*.h" mimetype="text/x-objc-src;text/x-c-hdr">
+<language name="Objective-C" version="3" kateversion="5.0" section="Sources" extensions="*.m;*.h" mimetype="text/x-objc-src;text/x-c-hdr">
   <highlighting>
     <list name="keywords">
       <item>break</item>
@@ -57,21 +57,10 @@
         <keyword attribute="Data Type" context="#stay" String="types"/>
         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="fF" attribute="Float" context="#stay"/>
-        </Float>
+        <Float attribute="Float" context="Float Suffixes"/>
         <HlCOct attribute="Octal" context="#stay"/>
         <HlCHex attribute="Hex" context="#stay"/>
-        <Int attribute="Decimal" context="#stay" >
-          <StringDetect attribute="Decimal" context="#stay" String="ULL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LUL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LLU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="UL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="U" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
-        </Int>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
         <Detect2Chars attribute="Comment" context="SingleLineComment" char="/" char1="/"/>
@@ -79,6 +68,19 @@
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
         <RegExpr attribute="Preprocessor" context="Preprocessor" String="^#"/>
         <Detect2Chars attribute="String" context="String" char="@" char1="&quot;" />
+      </context>
+      <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <AnyChar String="fF" attribute="Float" context="#pop"/>
+      </context>
+      <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <StringDetect attribute="Decimal" context="#pop" String="ULL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LUL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LLU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="UL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="U" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
       </context>
       <context attribute="String" lineEndContext="#pop" name="String">
         <LineContinue attribute="String" context="#stay"/>
diff --git a/xml/objectivecpp.xml b/xml/objectivecpp.xml
--- a/xml/objectivecpp.xml
+++ b/xml/objectivecpp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Objective-C++" version="4" kateversion="5.0" section="Sources" extensions="*.mm;*.M;*.h" mimetype="text/x-objcpp-src;text/x-c-hdr" author="Gennady Telegin (gepo@lvk.cs.msu.su">
+<language name="Objective-C++" version="5" kateversion="5.0" section="Sources" extensions="*.mm;*.M;*.h" mimetype="text/x-objcpp-src;text/x-c-hdr" author="Gennady Telegin (gepo@lvk.cs.msu.su">
   <highlighting>
     <list name="keywords">
       <item>break</item>
@@ -173,21 +173,10 @@
         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
         
         <DetectIdentifier />
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="fF" attribute="Float" context="#stay"/>
-        </Float>
+        <Float attribute="Float" context="Float Suffixes"/>
         <HlCOct attribute="Octal" context="#stay"/>
         <HlCHex attribute="Hex" context="#stay"/>
-        <Int attribute="Decimal" context="#stay" >
-          <StringDetect attribute="Decimal" context="#stay" String="ULL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LUL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LLU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="UL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="U" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
-        </Int>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
         <Detect2Chars attribute="Comment" context="SingleLineComment" char="/" char1="/"/>
@@ -203,6 +192,19 @@
         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;"/>
+      </context>
+      <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <AnyChar String="fF" attribute="Float" context="#pop"/>
+      </context>
+      <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <StringDetect attribute="Decimal" context="#pop" String="ULL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LUL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LLU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="UL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="U" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
       </context>
       <context attribute="String" lineEndContext="#pop" name="String">
         <LineContinue attribute="String" context="#stay"/>
diff --git a/xml/opencl.xml b/xml/opencl.xml
--- a/xml/opencl.xml
+++ b/xml/opencl.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <language name="OpenCL" section="Sources"
-          version="3" kateversion="3.4"
+          version="4" kateversion="3.4"
           indenter="cstyle"
           extensions="*.cl"
           mimetype="text/x-clsrc"
@@ -134,27 +134,31 @@
         <DetectIdentifier />
         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="fF" attribute="Float" context="#stay"/>
-        </Float>
+        <Float attribute="Float" context="Float Suffixes"/>
         <HlCOct attribute="Octal" context="#stay"/>
         <HlCHex attribute="Hex" context="#stay"/>
-        <Int attribute="Decimal" context="#stay" >
-          <StringDetect attribute="Decimal" context="#stay" String="ULL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LUL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LLU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="UL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="U" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
-        </Int>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
         <IncludeRules context="##Doxygen" />
         <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
         <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+      </context>
+
+      <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <AnyChar String="fF" attribute="Float" context="#pop"/>
+      </context>
+
+      <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <StringDetect attribute="Decimal" context="#pop" String="ULL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LUL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LLU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="UL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="U" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
       </context>
 
       <context attribute="String" lineEndContext="#pop" name="String">
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="6" kateversion="2.4" section="Scripts" extensions="*.pl;*.PL;*.pm;*.pl6;*.PL6;*.p6;*.pm6;" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPLv2">
+<language name="Perl" version="7" kateversion="2.4" section="Scripts" extensions="*.pl;*.PL;*.pm;*.pl6;*.PL6;*.p6;*.pm6;" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPLv2">
   <highlighting>
     <list name="keywords">
       <item>if</item>
@@ -358,13 +358,14 @@
         <RegExpr attribute="Decimal" String="\b\-?[1-9]([0-9]|_[0-9])*\b" context="slash_safe_escape"/>
         <Int attribute="Decimal" context="slash_safe_escape" />
 
-        <RegExpr attribute="Normal Text" context="#stay" String="\\([&quot;'])[^\1]" />
+        <!-- Allow strings as scalar references (ex: \'string') (see bug #348765). -->
+        <!-- <RegExpr attribute="Normal Text" context="#stay" String="\\([&quot;'])[^\1]" /> -->
         <Detect2Chars attribute="Normal Text" context="#stay" char="&amp;" char1="'" /><!-- ??? -->
         <DetectChar attribute="Operator" context="ip_string" char="&quot;" beginRegion="String" />
         <DetectChar attribute="Operator" context="string" char="'"  beginRegion="String"/>
         <DetectChar attribute="Operator" context="Backticked" char="`" />
 
-        <RegExpr attribute="Normal Text" context="find_variable" String="(?:[$@]\S|%[\w{]|\*[^\d\*{\$@%=(])" lookAhead="true" />
+        <RegExpr attribute="Normal Text" context="find_variable" String="(?:[$@]\S|%([\w\{\+\-!]|\^H)|\*[^\d\*{\$@%=(])" lookAhead="true" />
 
         <RegExpr attribute="Keyword" context="#stay" String="&lt;[A-Z0-9_]+&gt;" />
 
@@ -423,9 +424,17 @@
       <!-- ====== Contexts for strings ===== -->
       <context name="ipstring_internal" attribute="String (interpolated)" lineEndContext="#stay">
         <DetectIdentifier />
-        <RegExpr attribute="String Special Character" context="#stay" String="\\[UuLlEtnaefr]" />
+        <RegExpr attribute="String Special Character" context="#stay" String="\\c[^\s\\]" />
+        <RegExpr attribute="String Special Character" context="#stay" String="\\g(\{(\w+|\-\d+)\}|\d+)" />
+        <RegExpr attribute="String Special Character" context="#stay" String="\\k(\{\w+\}|&lt;\w+&gt;|'\w+')" />
+        <RegExpr attribute="String Special Character" context="#stay" String="\\N\{[^\{\}]*\}" />
+        <RegExpr attribute="String Special Character" context="#stay" String="\\o\{[0-7]+\}" />
+        <RegExpr attribute="String Special Character" context="#stay" String="\\[pP](\{\w+\}|P)" />
+        <RegExpr attribute="String Special Character" context="#stay" String="\\x([0-9a-fA-F]{2}|\{[0-9a-fA-F]+\})" />
+        <RegExpr attribute="String Special Character" context="#stay" String="\\[0-7]{3}" />
+        <RegExpr attribute="String Special Character" context="#stay" String="\\[1aAbBdDeEfFGhHKlLnNQrRsStuUvVwWXzZ]" />
         <RegExpr attribute="String (interpolated)" context="#stay" String="\\." />
-        <RegExpr attribute="Normal Text" context="find_variable_unsafe" String="(?:[\$@]\S|%[\w{])" lookAhead="true" />
+        <RegExpr attribute="Normal Text" context="find_variable_unsafe" String="(?:[\$@]\S|%([\w\{\-\+!]|\^H))" lookAhead="true" />
       </context>
       <context name="ip_string" attribute="String (interpolated)" lineEndContext="#stay">
         <DetectChar attribute="Operator" context="#pop" char="&quot;" endRegion="String"/>
@@ -517,6 +526,8 @@
         <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
         <IncludeRules context="regex_pattern_internal_ip" />
         <DetectChar attribute="Operator" context="subst_curlybrace_middle" char="}" endRegion="Pattern" />
+        <!-- Recursive brackets. Avoid closing brackets incorrectly (bug #364866). -->
+        <DetectChar attribute="Pattern" context="subst_curlybrace_pattern_recursive" char="{" />
       </context>
       <context name="subst_curlybrace_middle" attribute="Normal Text" lineEndContext="#stay" >
         <RegExpr attribute="Comment" context="#stay" String="#.*$" />
@@ -532,17 +543,27 @@
         <DetectChar attribute="Normal Text" context="#pop" char="}" endRegion="Block" />
         <IncludeRules context="ipstring_internal" />
       </context>
+      <context name="subst_curlybrace_pattern_recursive" attribute="Pattern" lineEndContext="#stay">
+        <DetectChar attribute="Pattern" context="#pop" char="}" />
+        <IncludeRules context="subst_curlybrace_pattern" />
+      </context>
 
       <context name="subst_paren_pattern" attribute="Pattern" lineEndContext="#stay">
         <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
+        <DetectChar attribute="Operator" context="subst_paren_replace" char=")" endRegion="Pattern" />
+        <!-- Round brackets of RegExp pattern inside -->
+        <DetectChar attribute="Pattern Internal Operator" context="subst_paren_pattern_internal_recursive" char="(" />
         <IncludeRules context="regex_pattern_internal_ip" />
-        <DetectChar attribute="Operator" context="subst_paren_replace" char="}" endRegion="Pattern" />
       </context>
       <context name="subst_paren_replace" attribute="String (interpolated)" lineEndContext="#stay">
         <IncludeRules context="ipstring_internal" />
         <DetectChar attribute="Operator" context="#stay" char="(" beginRegion="Replacement" />
         <RegExpr attribute="Operator" context="#pop#pop#pop" String="\)[cegimosx]*" endRegion="Replacement" />
       </context>
+      <context name="subst_paren_pattern_internal_recursive" attribute="Pattern" lineEndContext="#stay">
+        <DetectChar attribute="Pattern Internal Operator" context="#pop" char=")" />
+        <IncludeRules context="subst_paren_pattern" />
+      </context>
 
       <context name="subst_bracket_pattern" attribute="Pattern" lineEndContext="#stay">
         <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
@@ -605,15 +626,27 @@
       <context name="pattern_brace" attribute="Pattern" lineEndContext="#stay">
         <RegExpr attribute="Operator" context="#pop#pop" String="\}[cgimosx]*" endRegion="Pattern" />
         <IncludeRules context="regex_pattern_internal_ip" />
+        <!-- Recursive brackets. Avoid closing brackets incorrectly. -->
+        <DetectChar attribute="Pattern" context="pattern_brace_recursive" char="{" />
       </context>
+      <context name="pattern_brace_recursive" attribute="Pattern" lineEndContext="#stay">
+        <DetectChar attribute="Pattern" context="#pop" char="}" />
+        <IncludeRules context="pattern_brace" />
+      </context>
       <context name="pattern_bracket" attribute="Pattern" lineEndContext="#stay">
         <RegExpr attribute="Operator" context="#pop#pop" String="\][cgimosx]*" endRegion="Pattern" />
         <IncludeRules context="regex_pattern_internal_ip" />
       </context>
       <context name="pattern_paren" attribute="Pattern" lineEndContext="#stay">
         <RegExpr attribute="Operator" context="#pop#pop" String="\)[cgimosx]*" endRegion="Pattern" />
+        <!-- Round brackets of RegExp pattern inside -->
+        <DetectChar attribute="Pattern Internal Operator" context="pattern_paren_internal_recursive" char="(" />
         <IncludeRules context="regex_pattern_internal_ip" />
       </context>
+      <context name="pattern_paren_internal_recursive" attribute="Pattern" lineEndContext="#stay">
+        <DetectChar attribute="Pattern Internal Operator" context="#pop" char=")" />
+        <IncludeRules context="pattern_paren" />
+      </context>
       <context name="pattern_sq" attribute="Pattern" lineEndContext="#stay">
         <RegExpr attribute="Operator" context="#pop#pop" String="'[cgimosx]*" endRegion="Pattern" />
         <IncludeRules context="regex_pattern_internal" />
@@ -622,8 +655,15 @@
       <!-- rules internal stuff wrt regex patterns -->
       <context name="regex_pattern_internal_rules_1" attribute="Pattern" lineEndContext="#stay">
         <RegExpr attribute="Comment" context="#stay" String="#.*$" firstNonSpace="true" />
+        <RegExpr attribute="Special Variable" context="#stay" String="\\c[^\s\\]" />
+        <RegExpr attribute="Special Variable" context="#stay" String="\\g(\{(\w+|\-\d+)\}|\d+)" />
+        <RegExpr attribute="Special Variable" context="#stay" String="\\k(\{\w+\}|&lt;\w+&gt;|'\w+')" />
+        <RegExpr attribute="Special Variable" context="#stay" String="\\N\{[^\{\}]*\}" />
+        <RegExpr attribute="Special Variable" context="#stay" String="\\o\{[0-7]+\}" />
+        <RegExpr attribute="Special Variable" context="#stay" String="\\[pP](\{\w+\}|P)" />
+        <RegExpr attribute="Special Variable" context="#stay" String="\\x([0-9a-fA-F]{2}|\{[0-9a-fA-F]+\})" />
         <RegExpr attribute="Pattern Character Class" context="#stay" String="\\[anDdSsWw]" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\\[ABbEGLlNUuQdQZz]" />
+        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\\[ABbEGLlNUuQdQZz]" /> <!-- Also?: efFhHKrRtvVX -->
         <RegExpr attribute="Special Variable" context="#stay" String="\\[\d]+" />
         <RegExpr attribute="Pattern" context="#stay" String="\\." />
       </context>
@@ -664,31 +704,36 @@
 
       <!-- ====== Variables ====== -->
       <context name="find_variable" attribute="Data Type" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop" >
+        <RegExpr attribute="Data Type" context="var_detect" String="\$[#_][\w_]" />
         <RegExpr attribute="Special Variable" context="var_detect" String="\$[0-9]+" />
         <RegExpr attribute="Special Variable" context="var_detect" String="[@\$](?:[\+\-_]\B|ARGV\b|INC\b)" />
         <RegExpr attribute="Special Variable" context="var_detect" String="[%\$](?:INC\b|ENV\b|SIG\b)" />
+        <RegExpr attribute="Special Variable" context="var_detect" String="\$\^[A-Z_\]\[\^\?\\]" />
+        <RegExpr attribute="Special Variable" context="var_detect" String="%([\-\+!]|\^H)" />
         <RegExpr attribute="Data Type" context="var_detect" String="\$\$[\$\w_]" />
-        <RegExpr attribute="Data Type" context="var_detect" String="\$[#_][\w_]" />
         <RegExpr attribute="Data Type" context="var_detect" String="\$+::" />
         <RegExpr attribute="Special Variable" context="var_detect" String="\$[^a-zA-Z0-9\s{][A-Z]?" />
-        <RegExpr attribute="Data Type" context="var_detect" String="[\$@%]\{[\w_]+\}" />
+        <RegExpr attribute="Data Type" context="var_detect" String="[\$@%]\{\^?[\w_]+\}" />
         <AnyChar attribute="Data Type" context="var_detect" String="$@%" />
         <RegExpr attribute="Data Type" context="var_detect" String="\*[a-zA-Z_]+" />
-        <RegExpr attribute="Special Variable" context="#stay" String="\*[^a-zA-Z0-9\s{][A-Z]?" />
+        <!-- Do not highlight brackets after *, Ex: (... @*) (see bug #391577) -->
+        <RegExpr attribute="Special Variable" context="#stay" String="\*[^a-zA-Z0-9\s\{\(\)\[\]\}][A-Z]?" />
         <!-- this should be a rare case! -->
         <AnyChar attribute="Operator" context="#pop" String="$@%*" />
       </context>
       <!-- This does not check fo a trailing slash, for usage in strings. -->
       <context name="find_variable_unsafe" attribute="Data Type" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop" >
+        <RegExpr attribute="Data Type" context="var_detect_unsafe" String="\$[#_][\w_]" />
         <RegExpr attribute="Special Variable" context="var_detect_unsafe" String="\$[0-9]+" />
         <RegExpr attribute="Special Variable" context="var_detect_unsafe" String="[@\$](?:[\+\-_]\B|ARGV\b|INC\b)" />
         <RegExpr attribute="Special Variable" context="var_detect_unsafe" String="[%\$](?:INC\b|ENV\b|SIG\b)" />
+        <RegExpr attribute="Special Variable" context="var_detect" String="\$\^[A-Z_\]\[\^\?\\]" />
+        <RegExpr attribute="Special Variable" context="var_detect" String="%([\-\+!]|\^H)" />
         <RegExpr attribute="Data Type" context="var_detect_unsafe" String="\$\$[\$\w_]" />
-        <RegExpr attribute="Data Type" context="var_detect_unsafe" String="\$[#_][\w_]" />
         <RegExpr attribute="Data Type" context="var_detect_unsafe" String="\$+::" />
         <RegExpr attribute="Special Variable" context="#stay" String="\$[^a-zA-Z0-9\s{][A-Z]?" />
-        <RegExpr attribute="Data Type" context="var_detect_unsafe" String="[\$@%]\{[\w_]+\}" />
-        <RegExpr attribute="Data Type" context="var_detect_unsafe" String="[\$@%]" /><!-- AnyChar! -->
+        <RegExpr attribute="Data Type" context="var_detect_unsafe" String="[\$@%]\{\^?[\w_]+\}" />
+        <AnyChar attribute="Data Type" context="var_detect_unsafe" String="$@%" />
         <RegExpr attribute="Data Type" context="var_detect_unsafe" String="\*\w+" />
         <AnyChar attribute="Operator" context="#pop" String="$@%*" />
       </context>
diff --git a/xml/powershell.xml b/xml/powershell.xml
--- a/xml/powershell.xml
+++ b/xml/powershell.xml
@@ -1,13 +1,13 @@
 <!DOCTYPE language SYSTEM "language.dtd">
 <language
   name="PowerShell"
-  version="3"
+  version="4"
   kateversion="5.0"
   extensions="*.ps1;*.ps1m;*.ps1d"
   section="Scripts"
   author="Motoki Kashihara (motoki8791@gmail.com); Michael Lombardi (Michael.T.Lombardi@outlook.com)"
   casesensitive="0"
-  license="LGPLv2+">
+  license="MIT">
   <highlighting>
     <list name="keywords">
       <item>Begin</item>
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="7" kateversion="3.4"
+	  version="9" kateversion="3.4"
 	  mimetype="text/x-prolog"
 	  extensions="*.prolog;*.dcg;*.pro"
 	  author="Torsten Eichstädt (torsten.eichstaedt@web.de)"
@@ -223,7 +223,7 @@
     - Incl. Sep2012 DRAFT Technical Corrigendum 2: Prolog - Part 1: General Core
     - Incl. honourable Richard O'Keefe's remarks as warnings as "ISO Bogus".
     - Detect 'shebang' shell scripts, see BUGs
-    - Includes alert_indent.xml to highlight alert keywords in comments.
+    - Includes alert.xml to highlight alert keywords in comments.
     - Dot "." may be an _unquoted_ user-defined operator in nested terms (but is
       highlighted as "Warning" 'cause it's more likely a typo than an user-def'd
       op) and is only taken as fullstop and highlighted as "Logic & Control" in
@@ -674,15 +674,15 @@
 		<IncludeRules context="quoted_last"/>
 	    </context>
 	    <context name="single-quoted" lineEndContext="#stay" attribute="'quo Ted'" >
-		<RegExpr String="'$" context="sq" beginRegion="quoted" attribute="Syntax Error" />
+		<LineContinue char="'" context="sq" beginRegion="quoted" attribute="Syntax Error" />
 		<DetectChar char="'" context="sq" beginRegion="quoted" attribute="'quo Ted'" />
 	    </context>
 	    <context name="double-quoted" lineEndContext="#stay" attribute="&quot;double-quoted&quot;" >
-		<RegExpr String="&quot;$" context="dq" beginRegion="quoted" attribute="Syntax Error" />
+		<LineContinue char="&quot;" context="dq" beginRegion="quoted" attribute="Syntax Error" />
 		<DetectChar char="&quot;" context="dq" beginRegion="quoted" attribute="&quot;double-quoted&quot;" />
 	    </context>
 	    <context name="back-quoted" lineEndContext="#stay" attribute="`back-quoted`" >
-		<RegExpr String="`$" context="bq" beginRegion="quoted" attribute="Syntax Error" />
+		<LineContinue char="`" context="bq" beginRegion="quoted" attribute="Syntax Error" />
 		<DetectChar char="`" context="bq" beginRegion="quoted" attribute="`back-quoted`" />
 	    </context>
 
@@ -777,7 +777,7 @@
 		<Detect2Chars char="*" char1="/" context="#pop" endRegion="comment"
 			    attribute="% italic predicates: w/ side effects" />
 		<DetectSpaces />
-		<IncludeRules context="##Alerts_indent" />
+		<IncludeRules context="##Alerts" />
 		<DetectIdentifier />
 	    </context>
 
@@ -785,7 +785,7 @@
 	    <!-- Folding for consecutive 1-line comments: let indentation-based auto-folding work -->
 	    <context name="1-comment" lineEndContext="#pop" attribute="% italic predicates: w/ side effects" >
 		<DetectSpaces />
-		<IncludeRules context="##Alerts_indent" />
+		<IncludeRules context="##Alerts" />
 		<DetectIdentifier />
 	    </context>
 	    <context name="region_marker" lineEndContext="#pop" attribute="%BEGIN folding region" noIndentationBasedFolding="true" >
diff --git a/xml/python.xml b/xml/python.xml
--- a/xml/python.xml
+++ b/xml/python.xml
@@ -14,7 +14,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="5" style="python" kateversion="5.0" section="Scripts" extensions="*.py;*.pyw;SConstruct;SConscript" mimetype="application/x-python;text/x-python" casesensitive="1" author="Michael Bueker" license="">
+<language name="Python" version="9" style="python" indenter="python" kateversion="5.0" section="Scripts" extensions="*.py;*.pyw;SConstruct;SConscript" mimetype="application/x-python;text/x-python;text/x-python3" casesensitive="1" author="Michael Bueker" license="">
 	<highlighting>
 		<list name="import">
 			<item>import</item>
@@ -346,9 +346,7 @@
 				<Float attribute="Float" context="#stay" />
 				<HlCHex attribute="Hex" context="#stay"/>
 				<HlCOct attribute="Octal" context="#stay"/>
-				<Int attribute="Int" context="#stay">
-					<StringDetect attribute="Int" String="L" insensitive="true" context="#stay"/>
-				</Int>
+				<Int attribute="Int" context="Int Suffixes"/>
 
 				<RegExpr attribute="Int" String=" ([0-9]+_)+[0-9]+" context="#stay"/>
 				<RegExpr attribute="Float" String=" ([0-9]+_)+[0-9]+\.[0-9]+" context="#stay"/>
@@ -368,6 +366,10 @@
 				<AnyChar attribute="Operator" String="+*/%\|=;\!&lt;&gt;!^&amp;~-@" context="#stay"/>
 			</context>
 
+			<context name="Int Suffixes" attribute="Int" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+				<StringDetect attribute="Int" context="#pop" String="L" insensitive="true"/>
+			</context>
+
 			<context name="#CheckForString" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
 				<DetectSpaces/>
 				<LineContinue attribute="Normal Text" context="CheckForStringNext"/>
@@ -446,26 +448,27 @@
 			</context>
 
 			<context name="Triple A-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="stringescape"/>
 				<StringDetect attribute="Comment" String="'''" context="#pop" endRegion="Triple A-region"/>
-				<IncludeRules context="##Alerts_indent" />
+				<IncludeRules context="##Alerts" />
 			</context>
 
 			<context name="Triple Q-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
-				<HlCChar attribute="Comment" context="#stay"/>
+				<IncludeRules context="stringescape"/>
 				<StringDetect attribute="Comment" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
-				<IncludeRules context="##Alerts_indent" />
+				<IncludeRules context="##Alerts" />
 			</context>
 
 			<context name="Single A-comment" attribute="Comment" lineEndContext="#stay">
-				<HlCStringChar attribute="Comment" context="#stay"/>
+				<IncludeRules context="stringescape"/>
 				<DetectChar attribute="Comment" char="'" context="#pop"/>
-				<IncludeRules context="##Alerts_indent" />
+				<IncludeRules context="##Alerts" />
 			</context>
 
 			<context name="Single Q-comment" attribute="Comment" lineEndContext="#stay">
-				<HlCStringChar attribute="Comment" context="#stay"/>
+				<IncludeRules context="stringescape"/>
 				<DetectChar attribute="Comment" char="&quot;" context="#pop"/>
-				<IncludeRules context="##Alerts_indent" />
+				<IncludeRules context="##Alerts" />
 			</context>
 
 			<!-- Strings -->
@@ -678,7 +681,6 @@
 		<comments>
 			<comment name="singleLine" start="#" position="afterwhitespace"/>
 		</comments>
-		<indentation mode="python" />
 		<keywords casesensitive="1" additionalDeliminator="#'"/>
 	</general>
 </language>
diff --git a/xml/r.xml b/xml/r.xml
--- a/xml/r.xml
+++ b/xml/r.xml
@@ -56,7 +56,7 @@
 			<LineContinue attribute="Operator" context="#stay"/>
 			<DetectChar attribute="Symbol" context="#pop" char=")"/>
 
-			<RegExpr attribute="Identifier" context="#stay" String="[a-zA-Z_\.][0-9a-zA-Z_\.]*[\s]*=(?=([^=]|$))"/>
+			<RegExpr attribute="Identifier" context="#stay" String="[a-zA-Z_\.][0-9a-zA-Z_\.]*[\s]*[:]?=(?=([^=]|$))"/>
 
 			<IncludeRules context="CommonRules"/>
 			<DetectChar attribute="Error" context="#stay" char="}" />
@@ -79,7 +79,7 @@
 
 		<context attribute="Normal Text" lineEndContext="#stay" name="operator_rhs" fallthrough="true" fallthroughContext="#pop">
 			<!-- While there is nothing of interest, stay in the context -->
-			<StringDetect attribute="Headline" context="Headline" String="##"/>
+			<Detect2Chars attribute="Headline" context="Headline" char="#" char1="#"/>
 			<DetectChar attribute="Comment" context="Comment" char="#"/>
 			<DetectChar attribute="String" context="#stay" char=" "/>
 			<!-- Operators other than +, -, and ! directly after another operator are an error. -->
@@ -104,8 +104,8 @@
 			<Int attribute="Int" context="#stay"/>
 			<RegExpr attribute="Keyword" context="#stay" String="[a-zA-Z_]+[a-zA-Z_\.0-9]*(?=[\s]*[(])"/>
 			<RegExpr attribute="Keyword" context="#stay" String="\.[a-zA-Z_\.]+[a-zA-Z_\.0-9]*(?=[\s]*[(])"/>
-			<RegExpr attribute="Symbol" context="parenthesis" String="\("/>
-			<StringDetect attribute="Headline" context="Headline" String="##"/>
+			<DetectChar attribute="Symbol" context="parenthesis" char="("/>
+			<Detect2Chars attribute="Headline" context="Headline" char="#" char1="#"/>
 			<DetectChar attribute="Comment" context="Comment" char="#"/>
 
 			<!-- For (assignment) operators, enter a new context operator_rhs to check what follows (generally, that should not be another op) -->
diff --git a/xml/rest.xml b/xml/rest.xml
--- a/xml/rest.xml
+++ b/xml/rest.xml
@@ -11,7 +11,7 @@
   Copyright 2010 Matt Williams (matt@milliams.com)
   Copyright 2014 Matthew Woehlke (mw_triad@users.sourceforge.net)
   -->
-<language name="reStructuredText" extensions="*.rst" section="Markup" mimetype="text/x-rst" version="3" kateversion="2.4" casesensitive="1">
+<language name="reStructuredText" extensions="*.rst" section="Markup" mimetype="text/x-rst" version="4" kateversion="2.4" casesensitive="1">
 
   <highlighting>
 
@@ -23,7 +23,7 @@
         <RegExpr attribute="Footnote" context="#stay" String="^\s*\.\. \[(\d+|#|\*|#[&SimpleReferenceNameChars;]+)\]\s" minimal="true" column="0"/>
         <RegExpr attribute="Citation" context="#stay" String="^\s*\.\. \[[&SimpleReferenceNameChars;]+\]\s" minimal="true" column="0"/>
         <RegExpr attribute="HyperlinkTarget" context="#stay" String="^\s*(\.\. (__:|_[&SimpleReferenceNameChars; ]+:(\s|$))|__ )" minimal="true" column="0"/>
-        <RegExpr attribute="Code" String="^\s*\.\. code-block::" context="CodeBlock" column="0"/>
+        <StringDetect attribute="Code" String=".. code-block::" context="CodeBlock" firstNonSpace="true"/>
         <RegExpr attribute="Directive" context="#stay" String="^\s*\.\. [\w\-_\.]+::(\s|$)" minimal="true" column="0"/>
         <RegExpr attribute="Code" String="::$" context="CodeBlock" />
         <RegExpr attribute="SubstitutionDefinition" context="#stay" String="^\s*\.\. \|[&SimpleReferenceNameChars; ]+\|\s+[&SimpleReferenceNameChars;]+::\s" minimal="true" column="0"/>
@@ -36,8 +36,7 @@
         <RegExpr attribute="SubstitutionReference" context="#stay" String="&inlinestart;\|[^\s].*\|&inlineend;" minimal="true"/>
         <RegExpr attribute="InlineInternalTarget" context="#stay" String="&inlinestart;_`[^\s].*`&inlineend;" minimal="true"/>
         <RegExpr attribute="FootnoteReference" context="#stay" String="&inlinestart;\[[&SimpleReferenceNameChars;]+\]_&inlineend;" minimal="true"/>
-        <RegExpr attribute="HyperlinkReference" context="#stay" String="&inlinestart;`[^\s].*`_&inlineend;" minimal="true"/>
-        <RegExpr attribute="HyperlinkReference" context="#stay" String="&inlinestart;\w+_&inlineend;" minimal="true"/>
+        <RegExpr attribute="HyperlinkReference" context="#stay" String="&inlinestart;(`[^\s].*`|\w+)_&inlineend;" minimal="true"/>
         <RegExpr attribute="InterpretedText" context="TrailingRole" String="&inlinestart;`[^\s].*`(?=:[\w\-_\.\+]+:)" minimal="true"/>
         <RegExpr attribute="Role" String=":[\w\-_\.\+]+:(?=`)" context="Role"/>
       </context>
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="8" kateversion="5.0" section="Markup" extensions="*.rhtml;*.RHTML;*.html.erb" mimetype="" author="Richard Dale rdale@foton.es" license="LGPLv2+">
+<language name="Ruby/Rails/RHTML" version="9" kateversion="5.0" section="Markup" extensions="*.rhtml;*.RHTML;*.html.erb" mimetype="" author="Richard Dale rdale@foton.es" license="LGPLv2+">
 	
 	<highlighting>
 	
@@ -333,7 +333,7 @@
 				<DetectIdentifier/>
 				
 				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
-				<StringDetect attribute="Keyword" context="rubysourceline" String="%" />
+				<DetectChar attribute="Keyword" context="rubysourceline" char="%" />
 				
 				<StringDetect attribute="Comment" context="Comment" String="&lt;!--" beginRegion="comment" />
 				<StringDetect attribute="CDATA" context="CDATA" String="&lt;![CDATA[" beginRegion="cdata" />
@@ -550,16 +550,17 @@
 				<RegExpr attribute="Keyword" String="(\=|\(|\[|\{)\s*(if|unless|while|until)\b" context="#stay" beginRegion="def block"/>
 				<RegExpr attribute="Keyword" String="(while|until)\b(?!.*\bdo\b)" context="#stay" beginRegion="def block" firstNonSpace="true"/>
 				<RegExpr attribute="Keyword" String="\;\s*(while|until)\b(?!.*\bdo\b)" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="(if|unless)\b" context="#stay" beginRegion="def block" firstNonSpace="true"/>
+				<WordDetect attribute="Keyword" String="if" context="#stay" beginRegion="def block" firstNonSpace="true"/>
+				<WordDetect attribute="Keyword" String="unless" context="#stay" beginRegion="def block" firstNonSpace="true"/>
 				<RegExpr attribute="Keyword" String="\;\s*(if|unless)\b" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="\bclass\b" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="\bmodule\b" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="\bbegin\b" context="#stay" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="class" context="#stay" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="module" context="#stay" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="begin" context="#stay" beginRegion="def block"/>
 				<RegExpr attribute="Keyword" String="\bfor\b(?!.*\bdo\b)" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="\bcase\b" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="\bdo\b" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="\bdef\b" context="#stay" beginRegion="def block"/>
-				<RegExpr attribute="Keyword" String="\bend\b" context="#stay" endRegion="def block"/>
+				<WordDetect attribute="Keyword" String="case" context="#stay" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="do" context="#stay" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="def" context="#stay" beginRegion="def block"/>
+				<WordDetect attribute="Keyword" String="end" context="#stay" endRegion="def block"/>
 				<!-- elsif/else close the current block and start a new one -->
 				<RegExpr attribute="Keyword" String="(\b|^\s*)(else|elsif|rescue|ensure)(\s+|$)" context="#stay" endRegion="def block" beginRegion="def block"/>
 				
@@ -583,8 +584,7 @@
 				<!-- (global) vars starting with $
 					Match them before $_.
 					-->
-				<RegExpr attribute="Global Variable" String="\$[a-zA-Z_0-9]+" context="#stay"/>
-				<RegExpr attribute="Global Variable" String="\$\-[a-zA-Z_]\b" context="#stay"/>
+				<RegExpr attribute="Global Variable" String="\$(\w+|\-[a-zA-Z_]\b)" context="#stay"/>
 				<!-- special-character globals -->
 				<RegExpr attribute="Default globals" String="\$[\d_*`\!:?'/\\\-\&amp;]" context="#stay"/>
 				<RegExpr attribute="Global Constant" String="\b[_A-Z]+[A-Z_0-9]+\b" context="#stay"/>
@@ -620,7 +620,7 @@
 				<!-- regexp hack -->
 				<RegExpr attribute="Operator" String="\s!" context="#stay"/>
 				<RegExpr attribute="Operator" String="/=\s" context="#stay" insensitive="0"/>
-				<StringDetect attribute="Operator" String="%=" context="#stay" insensitive="0"/>
+				<Detect2Chars attribute="Operator" char="%" char1="=" context="#stay"/>
 				<Detect2Chars attribute="Operator" char=":" char1=":" context="Member Access"/>
 				
 				<RegExpr attribute="Symbol" String=":[a-zA-Z_][a-zA-Z0-9_]*" context="#stay"/>
@@ -629,11 +629,11 @@
 				<DetectChar attribute="Raw String" char="'" context="Apostrophed String"/>
 				<DetectChar attribute="Command" char="`" context="Command String"/>
 				
-				<StringDetect attribute="Normal Text" String="?#" context="#stay"/>
+				<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="#"  context="Comment Line" firstNonSpace="true"/>
+				<DetectChar attribute="Comment" char="#"  context="Comment Line" firstNonSpace="true"/>
 				<RegExpr attribute="Comment" String="\s#"  context="General Comment"/>
 				
 				<RegExpr attribute="Delimiter" String="[\[\]]+"  context="#stay"/>
@@ -653,13 +653,14 @@
 			
 			<context name="Line Continue" attribute="Ruby Normal Text" lineEndContext="#pop">
 				<RegExpr attribute="Keyword" String="(while|until)\b(?!.*\bdo\b)" context="#stay" firstNonSpace="true"/>
-				<RegExpr attribute="Keyword" String="(if|unless)\b" context="#stay" firstNonSpace="true"/>
+				<WordDetect attribute="Keyword" String="if" context="#stay" firstNonSpace="true"/>
+				<WordDetect attribute="Keyword" String="unless" context="#stay" firstNonSpace="true"/>
 				<IncludeRules context="rubysource"/>
 			</context>
 			
 			<context name="Quoted String" attribute="String" lineEndContext="#stay">
-				<StringDetect attribute="String" String="\\" context="#stay"/>
-				<RegExpr attribute="String" String="\\\&quot;" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="&quot;" context="#stay"/>
 				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
 				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
 				<!--HlCChar attribute="Char" context="#pop"/-->
@@ -668,14 +669,14 @@
 			
 			<context name="Apostrophed String" attribute="Raw String" lineEndContext="#stay">
 				<!-- <HlCChar attribute="Char" context="#pop"/> -->
-				<StringDetect attribute="String" String="\\" context="#stay"/>
-				<RegExpr attribute="String" String="\\\'" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="'" context="#stay"/>
 				<DetectChar char="'" attribute="Raw String" context="#pop"/>
 			</context>
 			
 			<context name="Command String" attribute="Command" lineEndContext="#stay">
-				<StringDetect attribute="String" String="\\" context="#stay"/>
-				<RegExpr attribute="String" String="\\\`" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="`" context="#stay"/>
 				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
 				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
 				<HlCChar attribute="Char" context="#pop"/>
@@ -687,7 +688,7 @@
 			</context>
 			
 			<context name="RegEx 1" attribute="Regular Expression" lineEndContext="#stay">
-				<RegExpr attribute="Regular Expression" String="\\\/" context="#stay"/>
+				<Detect2Chars attribute="Regular Expression" char="\" char1="/" context="#stay"/>
 				<RegExpr attribute="Regular Expression" String="[^\\]$" context="#pop"/>
 				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
 				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
@@ -782,34 +783,34 @@
 			<context name="find_gdl_input" attribute="Ruby Normal Text" lineEndContext="#pop">
 				
 				<!-- handle token arrays -->
-				<RegExpr attribute="GDL input" context="gdl_token_array_1" String="w\(" />
-				<RegExpr attribute="GDL input" context="gdl_token_array_2" String="w\{" />
-				<RegExpr attribute="GDL input" context="gdl_token_array_3" String="w\[" />
-				<RegExpr attribute="GDL input" context="gdl_token_array_4" String="w&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_1" char="w" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_2" char="w" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_3" char="w" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_4" char="w" char1="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_token_array_5" String="w([^\s\w])" />
 				
 				<!-- handle apostrophed strings -->
-				<RegExpr attribute="GDL input" context="gdl_apostrophed_1" String="q\(" />
-				<RegExpr attribute="GDL input" context="gdl_apostrophed_2" String="q\{" />
-				<RegExpr attribute="GDL input" context="gdl_apostrophed_3" String="q\[" />
-				<RegExpr attribute="GDL input" context="gdl_apostrophed_4" String="q&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_1" char="q" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_2" char="q" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_3" char="q" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_4" char="q" char1="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_apostrophed_5" String="q([^\s\w])" />
 				
 				<!-- handle shell commands -->
-				<RegExpr attribute="GDL input" context="gdl_shell_command_1" String="x\(" />
-				<RegExpr attribute="GDL input" context="gdl_shell_command_2" String="x\{" />
-				<RegExpr attribute="GDL input" context="gdl_shell_command_3" String="x\[" />
-				<RegExpr attribute="GDL input" context="gdl_shell_command_4" String="x&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_shell_command_1" char="x" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_shell_command_2" char="x" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_shell_command_3" char="x" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_shell_command_4" char="x" char1="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_shell_command_5" String="x([^\s\w])" />
 				
 				<!-- handle regular expressions -->
-				<RegExpr attribute="GDL input" context="gdl_regexpr_1" String="r\(" />
-				<RegExpr attribute="GDL input" context="gdl_regexpr_2" String="r\{" />
-				<RegExpr attribute="GDL input" context="gdl_regexpr_3" String="r\[" />
-				<RegExpr attribute="GDL input" context="gdl_regexpr_4" String="r&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_regexpr_1" char="r" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_regexpr_2" char="r" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_regexpr_3" char="r" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_regexpr_4" char="r" char1="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_regexpr_5" String="r([^\s\w])" />
 				
@@ -818,10 +819,14 @@
 					be careful to make this the last GDL ruleset, because the rule for
 					the short form %?foo? will otherwise catch any of the other formats
 					-->
-				<RegExpr attribute="GDL input" context="gdl_dq_string_1" String="Q?\(" />
-				<RegExpr attribute="GDL input" context="gdl_dq_string_2" String="Q?\{" />
-				<RegExpr attribute="GDL input" context="gdl_dq_string_3" String="Q?\[" />
-				<RegExpr attribute="GDL input" context="gdl_dq_string_4" String="Q?&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_dq_string_1" char="Q" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_dq_string_2" char="Q" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_dq_string_3" char="Q" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_dq_string_4" char="Q" char1="&lt;" />
+				<DetectChar attribute="GDL input" context="gdl_dq_string_1" char="(" />
+				<DetectChar attribute="GDL input" context="gdl_dq_string_2" char="{" />
+				<DetectChar attribute="GDL input" context="gdl_dq_string_3" char="[" />
+				<DetectChar attribute="GDL input" context="gdl_dq_string_4" char="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_dq_string_5" String="Q?([^\s\w])" />
 				
diff --git a/xml/ruby.xml b/xml/ruby.xml
--- a/xml/ruby.xml
+++ b/xml/ruby.xml
@@ -31,7 +31,7 @@
 
 <!-- Hold the "language" opening tag on a single line, as mentioned in "language.dtd". -->
 <language name="Ruby" section="Scripts"
-	  version="8" kateversion="3.3"
+	  version="9" kateversion="3.3"
 	  extensions="*.rb;*.rjs;*.rxml;*.xml.erb;*.js.erb;*.rake;Rakefile;Gemfile;*.gemspec;Vagrantfile"
 	  mimetype="application/x-ruby"
 	  style="ruby" indenter="ruby"
@@ -274,7 +274,7 @@
 				<!-- regexp hack -->
 				<RegExpr attribute="Operator" String="\s!" context="#stay"/>
 				<RegExpr attribute="Operator" String="/=\s" context="#stay" insensitive="0"/>
-				<StringDetect attribute="Operator" String="%=" context="#stay" insensitive="0"/>
+				<Detect2Chars attribute="Operator" char="%" char1="=" context="#stay"/>
 				<Detect2Chars attribute="Operator" char=":" char1=":" context="Member Access"/>
 
 				<RegExpr attribute="Symbol" String=":(@{1,2}|\$)?[a-zA-Z_][a-zA-Z0-9_]*[=?!]?" context="check_div_1"/>
@@ -287,7 +287,7 @@
 				<DetectChar attribute="Raw String" char="'" context="Apostrophed String"/>
 				<DetectChar attribute="Command" char="`" context="Command String"/>
 
-				<StringDetect attribute="Normal Text" String="?#" context="#stay"/>
+				<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"/>
@@ -364,22 +364,22 @@
 			</context>
 
 			<context name="Quoted String" attribute="String" lineEndContext="#stay">
-				<StringDetect attribute="String" String="\\" context="#stay"/>
-				<RegExpr attribute="String" String="\\\&quot;" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="&quot;" context="#stay"/>
 				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
 				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
 				<DetectChar char="&quot;" attribute="String" context="check_div_1_pop"/>
 			</context>
 
 			<context name="Apostrophed String" attribute="Raw String" lineEndContext="#stay">
-				<StringDetect attribute="String" String="\\" context="#stay"/>
-				<RegExpr attribute="String" String="\\\'" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="'" context="#stay"/>
 				<DetectChar char="'" attribute="Raw String" context="check_div_1_pop"/>
 			</context>
 
 			<context name="Command String" attribute="Command" lineEndContext="#stay">
-				<StringDetect attribute="String" String="\\" context="#stay"/>
-				<RegExpr attribute="String" String="\\\`" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="`" context="#stay"/>
 				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
 				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
 				<DetectChar char="`" attribute="Command" context="check_div_1_pop"/>
@@ -391,7 +391,7 @@
 			</context>
 
 			<context name="RegEx 1" attribute="Regular Expression" lineEndContext="#stay">
-				<RegExpr attribute="Regular Expression" String="\\\/" context="#stay"/>
+				<Detect2Chars attribute="Regular Expression" char="\" char1="/" context="#stay"/>
 				<RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
 				<Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
 				<RegExpr attribute="Regular Expression" String="/[uiomxn]*" context="check_div_1_pop"/>
@@ -473,42 +473,42 @@
 			<context name="find_gdl_input" attribute="Normal Text" lineEndContext="#pop">
 
 				<!-- handle token arrays -->
-				<RegExpr attribute="GDL input" context="gdl_token_array_1" String="w\(" />
-				<RegExpr attribute="GDL input" context="gdl_token_array_2" String="w\{" />
-				<RegExpr attribute="GDL input" context="gdl_token_array_3" String="w\[" />
-				<RegExpr attribute="GDL input" context="gdl_token_array_4" String="w&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_1" char="w" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_2" char="w" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_3" char="w" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_4" char="w" char1="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_token_array_5" String="w([^\s\w])" />
 
 				<!-- handle token arrays -->
-				<RegExpr attribute="GDL input" context="gdl_token_array_1" String="W\(" />
-				<RegExpr attribute="GDL input" context="gdl_token_array_2" String="W\{" />
-				<RegExpr attribute="GDL input" context="gdl_token_array_3" String="W\[" />
-				<RegExpr attribute="GDL input" context="gdl_token_array_4" String="W&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_1" char="W" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_2" char="W" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_3" char="W" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_token_array_4" char="W" char1="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_token_array_5" String="W([^\s\w])" />
 
 				<!-- handle apostrophed strings -->
-				<RegExpr attribute="GDL input" context="gdl_apostrophed_1" String="q\(" />
-				<RegExpr attribute="GDL input" context="gdl_apostrophed_2" String="q\{" />
-				<RegExpr attribute="GDL input" context="gdl_apostrophed_3" String="q\[" />
-				<RegExpr attribute="GDL input" context="gdl_apostrophed_4" String="q&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_1" char="q" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_2" char="q" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_3" char="q" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_apostrophed_4" char="q" char1="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_apostrophed_5" String="q([^\s\w])" />
 
 				<!-- handle shell commands -->
-				<RegExpr attribute="GDL input" context="gdl_shell_command_1" String="x\(" />
-				<RegExpr attribute="GDL input" context="gdl_shell_command_2" String="x\{" />
-				<RegExpr attribute="GDL input" context="gdl_shell_command_3" String="x\[" />
-				<RegExpr attribute="GDL input" context="gdl_shell_command_4" String="x&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_shell_command_1" char="x" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_shell_command_2" char="x" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_shell_command_3" char="x" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_shell_command_4" char="x" char1="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_shell_command_5" String="x([^\s\w])" />
 
 				<!-- handle regular expressions -->
-				<RegExpr attribute="GDL input" context="gdl_regexpr_1" String="r\(" />
-				<RegExpr attribute="GDL input" context="gdl_regexpr_2" String="r\{" />
-				<RegExpr attribute="GDL input" context="gdl_regexpr_3" String="r\[" />
-				<RegExpr attribute="GDL input" context="gdl_regexpr_4" String="r&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_regexpr_1" char="r" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_regexpr_2" char="r" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_regexpr_3" char="r" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_regexpr_4" char="r" char1="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_regexpr_5" String="r([^\s\w])" />
 
@@ -517,10 +517,14 @@
 					  be careful to make this the last GDL ruleset, because the rule for
 					  the short form %?foo? will otherwise catch any of the other formats
 				-->
-				<RegExpr attribute="GDL input" context="gdl_dq_string_1" String="Q?\(" />
-				<RegExpr attribute="GDL input" context="gdl_dq_string_2" String="Q?\{" />
-				<RegExpr attribute="GDL input" context="gdl_dq_string_3" String="Q?\[" />
-				<RegExpr attribute="GDL input" context="gdl_dq_string_4" String="Q?&lt;" />
+				<Detect2Chars attribute="GDL input" context="gdl_dq_string_1" char="Q" char1="(" />
+				<Detect2Chars attribute="GDL input" context="gdl_dq_string_2" char="Q" char1="{" />
+				<Detect2Chars attribute="GDL input" context="gdl_dq_string_3" char="Q" char1="[" />
+				<Detect2Chars attribute="GDL input" context="gdl_dq_string_4" char="Q" char1="&lt;" />
+				<DetectChar attribute="GDL input" context="gdl_dq_string_1" char="(" />
+				<DetectChar attribute="GDL input" context="gdl_dq_string_2" char="{" />
+				<DetectChar attribute="GDL input" context="gdl_dq_string_3" char="[" />
+				<DetectChar attribute="GDL input" context="gdl_dq_string_4" char="&lt;" />
 				<!-- then we handle the 'any char' format -->
 				<RegExpr attribute="GDL input" context="gdl_dq_string_5" String="Q?([^\s\w])" />
 
@@ -650,7 +654,7 @@
 
 			<!-- rules to be included in all token_array contexts -->
 			<context name="token_array_rules" attribute="String" lineEndContext="#stay" >
-				<StringDetect attribute="String" String="\\" context="#stay"/>
+				<Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
 			</context>
 
 			<!-- apostrophed string specific contexts -->
diff --git a/xml/rust.xml b/xml/rust.xml
--- a/xml/rust.xml
+++ b/xml/rust.xml
@@ -28,13 +28,12 @@
 -->
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-	<!-- FIXME: Kate's regex engine has very limited support for
-	predefined char classes, so making rustIdent consistent with actual
-	Rust identifiers will be a bit difficult -->
-	<!ENTITY rustIdent "[a-zA-Z_][a-zA-Z_0-9]*">
-	<!ENTITY rustIntSuf "([iu](8|16|32|64)?)?">
+	<!ENTITY rustIdent "([a-zA-Z_]|[^[:ascii:]])(\w|[^[:ascii:]])*">
+	<!ENTITY rustIntSuf "([iu](8|16|32|64|128|size)?)?">
+	<!ENTITY commonEscape "([trn0&apos;&quot;\\]|x[0-9a-fA-F]{2})">
+	<!ENTITY unicodeEscape "u\{([0-9a-fA-F]_*){1,6}\}">
 ]>
-<language name="Rust" version="4" kateversion="5.0" section="Sources" extensions="*.rs" mimetype="text/rust" priority="15" license="MIT" author="The Rust Project Developers">
+<language name="Rust" version="5" 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>
@@ -52,6 +51,7 @@
 		<item>const</item>
 		<item>continue</item>
 		<item>crate</item>
+		<item>default</item>
 		<item>do</item>
 		<item>else</item>
 		<item>enum</item>
@@ -85,6 +85,7 @@
 		<item>trait</item>
 		<item>type</item>
 		<item>typeof</item>
+		<item>union</item>
 		<item>unsafe</item>
 		<item>unsized</item>
 		<item>use</item>
@@ -94,6 +95,9 @@
 		<item>yield</item>
 	</list>
 	<list name="traits">
+		<!-- FIXME: Some traits may be obsolete and must be removed -->
+		<item>AsMut</item>
+		<item>AsRef</item>
 		<item>AsSlice</item>
 		<item>CharExt</item>
 		<item>Clone</item>
@@ -106,13 +110,16 @@
 		<item>Drop</item>
 		<item>Encodable</item>
 		<item>Eq</item>
-		<item>Default</item>
+		<item>ExactSizeIterator</item>
 		<item>Extend</item>
 		<item>Fn</item>
 		<item>FnMut</item>
 		<item>FnOnce</item>
+		<item>From</item>
 		<item>FromPrimitive</item>
 		<item>Hash</item>
+		<item>Into</item>
+		<item>IntoIterator</item>
 		<item>Iterator</item>
 		<item>IteratorExt</item>
 		<item>MutPtrExt</item>
@@ -121,6 +128,8 @@
 		<item>PartialOrd</item>
 		<item>PtrExt</item>
 		<item>Rand</item>
+		<item>RustcDecodable</item>
+		<item>RustcEncodable</item>
 		<item>Send</item>
 		<item>Sized</item>
 		<item>SliceConcatExt</item>
@@ -128,25 +137,25 @@
 		<item>Str</item>
 		<item>StrExt</item>
 		<item>Sync</item>
+		<item>ToOwned</item>
 		<item>ToString</item>
 	</list>
 	<list name="types">
 		<item>bool</item>
-		<item>int</item>
 		<item>isize</item>
-		<item>uint</item>
 		<item>usize</item>
 		<item>i8</item>
 		<item>i16</item>
 		<item>i32</item>
 		<item>i64</item>
+		<item>i128</item>
 		<item>u8</item>
 		<item>u16</item>
 		<item>u32</item>
 		<item>u64</item>
+		<item>u128</item>
 		<item>f32</item>
 		<item>f64</item>
-		<item>float</item>
 		<item>char</item>
 		<item>str</item>
 		<item>Option</item>
@@ -155,6 +164,8 @@
 		<item>Box</item>
 		<item>Vec</item>
 		<item>String</item>
+		<item>Path</item>
+		<item>PathBuf</item>
 	</list>
 	<list name="ctypes">
 		<item>c_float</item>
@@ -261,11 +272,9 @@
 			<keyword String="cconstants" attribute="CConstant" context="#stay"/>
 			<Detect2Chars char="/" char1="/" attribute="Comment" context="Commentar 1"/>
 			<Detect2Chars char="/" char1="*" attribute="Comment" context="Commentar 2" beginRegion="Comment"/>
-			<RegExpr String="0x[0-9a-fA-F_]+&rustIntSuf;" attribute="Number" context="#stay"/>
-			<RegExpr String="0o[0-7_]+&rustIntSuf;" attribute="Number" context="#stay"/>
-			<RegExpr String="0b[0-1_]+&rustIntSuf;" attribute="Number" context="#stay"/>
-			<RegExpr String="[0-9][0-9_]*\.[0-9_]*([eE][+-]?[0-9_]+)?(f32|f64|f)?" attribute="Number" context="#stay"/>
-			<RegExpr String="[0-9][0-9_]*&rustIntSuf;" attribute="Number" context="#stay"/>
+			<RegExpr String="\b0(x[0-9a-fA-F_]+|o[0-7_]+|b[01_]+)&rustIntSuf;\b" attribute="Number" context="#stay"/> <!-- Hexadecimal, Octal & Binary -->
+			<RegExpr String="\b[0-9][0-9_]*((\.[0-9][0-9_]*)?([eE][\+\-]?[0-9_]+)?(f32|f64)?|&rustIntSuf;)\b" attribute="Number" context="#stay"/> <!-- Float & Decimal -->
+			<RegExpr String="\b0(b[01_]*[^01_]|o[0-7_]*[^0-7_]|x[0-9a-fA-F_]*[^0-9a-fA-F_])\w*&rustIntSuf;\b" attribute="Error" context="#stay"/> <!-- Invalid number -->
 			<Detect2Chars char="#" char1="[" attribute="Attribute" context="Attribute" beginRegion="Attribute"/>
 			<StringDetect String="#![" attribute="Attribute" context="Attribute" beginRegion="Attribute"/>
 			<RegExpr String="&rustIdent;::" attribute="Scope"/>
@@ -273,10 +282,10 @@
 			<RegExpr String="&apos;&rustIdent;(?!&apos;)" attribute="Lifetime"/>
 			<DetectChar char="{" attribute="Symbol" context="#stay" beginRegion="Brace" />
 			<DetectChar char="}" attribute="Symbol" context="#stay" endRegion="Brace" />
-                        <Detect2Chars char="r" char1="&quot;" attribute="String" context="RawString"/>
-                        <StringDetect String="r##&quot;" attribute="String" context="RawHashed2"/>
-                        <StringDetect String="r#&quot;" attribute="String" context="RawHashed1"/>
+			<RegExpr String="b?r(#*)&quot;" attribute="String" context="RawString" dynamic="true"/>
+			<Detect2Chars char="b" char1="&quot;" attribute="String" context="ByteString"/>
 			<DetectChar char="&quot;" attribute="String" context="String"/>
+			<RegExpr String="b&apos;(?=([^&apos;\\]|\\&commonEscape;)&apos;)" attribute="Character" context="Character"/> <!-- Byte -->
 			<DetectChar char="&apos;" attribute="Character" context="Character"/>
 			<DetectChar char="[" attribute="Symbol" context="#stay" beginRegion="Bracket" />
 			<DetectChar char="]" attribute="Symbol" context="#stay" endRegion="Bracket" />
@@ -300,31 +309,30 @@
                 <!-- Rustc allows strings to extend over multiple lines, and the
                 only thing a backshash at end-of-line does is remove the whitespace. -->
                 <context attribute="String" lineEndContext="#stay" name="String">
-                        <DetectChar char="\" attribute="CharEscape" context="CharEscape"/>
+                        <DetectChar char="\" attribute="CharEscape" context="CharEscapeWithUnicode"/>
                         <DetectChar attribute="String" context="#pop" char="&quot;"/>
                 </context>
-		<context attribute="String" lineEndContext="#stay" name="RawString">
+		<context attribute="String" lineEndContext="#stay" name="ByteString">
+			<DetectChar char="\" attribute="CharEscape" context="CharEscape"/>
 			<DetectChar attribute="String" context="#pop" char="&quot;"/>
 		</context>
-                <!-- These rules are't complete: they won't match r###"abc"### -->
-                <context attribute="String" lineEndContext="#stay" name="RawHashed1">
-                        <Detect2Chars attribute="String" context="#pop" char="&quot;" char1="#"/>
-                </context>
-                <context attribute="String" lineEndContext="#stay" name="RawHashed2">
-                        <StringDetect attribute="String" context="#pop" String="&quot;##"/>
-                </context>
-		<context attribute="Character" lineEndContext="#pop" name="Character">
-			<DetectChar char="\" attribute="CharEscape" context="CharEscape"/>
+		<context attribute="String" lineEndContext="#stay" name="RawString" dynamic="true">
+			<RegExpr String="&quot;%1" attribute="String" context="#pop" dynamic="true"/>
+		</context>		
+		<context attribute="Character" lineEndContext="#pop" name="Character" fallthrough="true" fallthroughContext="#pop">
+			<RegExpr String="[^&apos;\\](?=&apos;)" attribute="Character" context="#stay"/>
+			<RegExpr String="\\(&unicodeEscape;|&commonEscape;)(?=&apos;)" attribute="CharEscape" context="#stay"/>
 			<DetectChar attribute="Character" context="#pop" char="&apos;"/>
+			<RegExpr String="(\\.|[^&apos;\\])[^&apos;]*(?=&apos;([\d\s!&quot;#&#036;&#037;&amp;&#039;\(\)\*\+,\-\./:;&lt;\=&gt;\?@\[\\\]\^&#096;\{\|\}~[:cntrl:]]|$))" attribute="Error" context="#stay"/>
 		</context>
 		<context attribute="CharEscape" lineEndContext="#pop" name="CharEscape">
-			<AnyChar String="nrt\&apos;&quot;" attribute="CharEscape" context="#pop"/>
-			<RegExpr String="x[0-9a-fA-F]{2}" attribute="CharEscape" context="#pop"/>
-			<RegExpr String="u\{[0-9a-fA-F]{1,6}\}" attribute="CharEscape" context="#pop"/>
-			<RegExpr String="u[0-9a-fA-F]{4}" attribute="CharEscape" context="#pop"/>
-			<RegExpr String="U[0-9a-fA-F]{8}" attribute="CharEscape" context="#pop"/>
+			<RegExpr String="&commonEscape;" attribute="CharEscape" context="#pop"/>
 			<RegExpr String="." attribute="Error" context="#pop"/>
 		</context>
+		<context attribute="CharEscape" lineEndContext="#pop" name="CharEscapeWithUnicode">
+			<RegExpr String="&unicodeEscape;" attribute="CharEscape" context="#pop"/>
+			<IncludeRules context="CharEscape"/>
+		</context>
 		<context attribute="Comment" lineEndContext="#pop" name="Commentar 1"/>
 		<context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
 			<DetectSpaces/>
@@ -343,7 +351,7 @@
 		<itemData name="CConstant"    defStyleNum="dsConstant" spellChecking="0"/>
 		<itemData name="Definition"   defStyleNum="dsNormal"/>
 		<itemData name="Comment"      defStyleNum="dsComment"/>
-		<itemData name="Scope"        defStyleNum="dsNormal"/>
+		<itemData name="Scope"        defStyleNum="dsPreprocessor"/>
 		<itemData name="Number"       defStyleNum="dsDecVal"/>
 		<itemData name="String"       defStyleNum="dsString"/>
 		<itemData name="CharEscape"   defStyleNum="dsSpecialChar"/>
diff --git a/xml/scala.xml b/xml/scala.xml
--- a/xml/scala.xml
+++ b/xml/scala.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Scala" version="5" kateversion="2.3" section="Sources"
+<language name="Scala" version="6" kateversion="2.3" section="Sources"
           extensions="*.scala;*.sbt" mimetype="text/x-scala" license="LGPL"
           author="Stephane Micheloud (stephane.micheloud@epfl.ch)">
 <!--
@@ -3406,21 +3406,10 @@
         <keyword attribute="Data Type" context="#stay" String="types"/>
         <keyword attribute="Java15" context="#stay" String="java15"/>
         <keyword attribute="Scala2" context="#stay" String="scala2"/>
-        <Float attribute="Float" context="#stay">
-          <AnyChar String="fF" attribute="Float" context="#stay"/>
-        </Float>
+        <Float attribute="Float" context="Float Suffixes"/>
         <HlCOct attribute="Octal" context="#stay"/>
         <HlCHex attribute="Hex" context="#stay"/>
-        <Int attribute="Decimal" context="#stay">
-          <StringDetect attribute="Decimal" context="#stay" String="ULL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LUL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LLU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="UL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LU" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="LL" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="U" insensitive="true"/>
-          <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
-        </Int>
+        <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <RegExpr attribute="Decimal" context="#stay" String="//\s*BEGIN.*$" beginRegion="Region1"/>
         <RegExpr attribute="Decimal" context="#stay" String="//\s*END.*$" endRegion="Region1"/>
@@ -3438,6 +3427,19 @@
         <RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*(/\*\s*\d+\s*\*/\s*)?[(])" />
         <RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" />
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+      </context>
+      <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <AnyChar String="fF" attribute="Float" context="#pop"/>
+      </context>
+      <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+          <StringDetect attribute="Decimal" context="#pop" String="ULL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LUL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LLU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="UL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LU" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="LL" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="U" insensitive="true"/>
+          <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
       </context>
       <context attribute="String" lineEndContext="#pop" name="String">
         <LineContinue attribute="String" context="#stay"/>
diff --git a/xml/sql-mysql.xml b/xml/sql-mysql.xml
--- a/xml/sql-mysql.xml
+++ b/xml/sql-mysql.xml
@@ -6,25 +6,46 @@
   modifications by Milian Wolff (mail@milianw.de)
   v3 fix comments by Gene Thomas <gene@genethomas.com>
 -->
-<language name="SQL (MySQL)" version="3" kateversion="3.4" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Shane Wright (me@shanewright.co.uk)" license="">
+<language name="SQL (MySQL)" version="5" kateversion="5.0" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Shane Wright (me@shanewright.co.uk)" license="">
   <highlighting>
+    <list name="controlFlow">
+      <item>BEGIN</item>
+      <item>CASE</item>
+      <item>DO</item>
+      <item>ELSE</item>
+      <item>ELSEIF</item>
+      <item>END</item>
+      <item>FOR</item>
+      <item>IF</item>
+      <item>LOOP</item>
+      <item>RETURN</item>
+      <item>THEN</item>
+      <item>WHEN</item>
+      <item>WHILE</item>
+    </list>
+    <list name="operators">
+      <item>AND</item>
+      <item>BETWEEN</item>
+      <item>IN</item>
+      <item>IS</item>
+      <item>LIKE</item>
+      <item>NOT</item>
+      <item>OR</item>
+    </list>
     <list name="keywords">
       <item>ACCESS</item>
       <item>ADD</item>
       <item>ALL</item>
       <item>ALTER</item>
       <item>ANALYZE</item>
-      <item>AND</item>
       <item>AS</item>
       <item>ASC</item>
       <item>AUTO_INCREMENT</item>
       <item>BDB</item>
       <item>BERKELEYDB</item>
-      <item>BETWEEN</item>
       <item>BOTH</item>
       <item>BY</item>
       <item>CASCADE</item>
-      <item>CASE</item>
       <item>CHANGE</item>
       <!-- <item> CHARACTER SET </item>
         needs special regexp (see below) -->
@@ -43,6 +64,7 @@
       <item>DAY_MINUTE</item>
       <item>DAY_SECOND</item>
       <item>DEC</item>
+      <item>DECLARE</item>
       <item>DEFAULT</item>
       <item>DELAYED</item>
       <item>DELETE</item>
@@ -51,13 +73,11 @@
       <item>DISTINCT</item>
       <item>DISTINCTROW</item>
       <item>DROP</item>
-      <item>ELSE</item>
       <item>ENCLOSED</item>
       <item>ESCAPED</item>
       <item>EXISTS</item>
       <item>EXPLAIN</item>
       <item>FIELDS</item>
-      <item>FOR</item>
       <item>FOREIGN</item>
       <item>FROM</item>
       <item>FULLTEXT</item>
@@ -66,9 +86,7 @@
       <item>GROUP</item>
       <item>HAVING</item>
       <item>HIGH_PRIORITY</item>
-      <item>IF</item>
       <item>IGNORE</item>
-      <item>IN</item>
       <item>INDEX</item>
       <item>INFILE</item>
       <item>INNER</item>
@@ -76,14 +94,12 @@
       <item>INSERT</item>
       <item>INTERVAL</item>
       <item>INTO</item>
-      <item>IS</item>
       <item>JOIN</item>
       <item>KEY</item>
       <item>KEYS</item>
       <item>KILL</item>
       <item>LEADING</item>
       <item>LEFT</item>
-      <item>LIKE</item>
       <item>LIMIT</item>
       <item>LINES</item>
       <item>LOAD</item>
@@ -94,14 +110,12 @@
       <item>MRG_MYISAM</item>
       <item>NATIONAL</item>
       <item>NATURAL</item>
-      <item>NOT</item>
       <item>NULL</item>
       <item>NUMERIC</item>
       <item>ON</item>
       <item>OPTIMIZE</item>
       <item>OPTION</item>
       <item>OPTIONALLY</item>
-      <item>OR</item>
       <item>ORDER</item>
       <item>OUTER</item>
       <item>OUTFILE</item>
@@ -136,7 +150,6 @@
       <item>TABLE</item>
       <item>TABLES</item>
       <item>TERMINATED</item>
-      <item>THEN</item>
       <item>TO</item>
       <item>TRAILING</item>
       <item>TRUNCATE</item>
@@ -152,35 +165,13 @@
       <item>USING</item>
       <item>VALUES</item>
       <item>VARYING</item>
-      <item>WHEN</item>
-      <item>WHERE</item>
-      <item>WHILE</item>
       <item>WITH</item>
+      <item>WHERE</item>
       <item>WRITE</item>
       <item>XOR</item>
       <item>YEAR_MONTH</item>
       <item>ZEROFILL</item>
     </list>
-    <list name="operators">
-      <item>+</item>
-      <item>-</item>
-      <item>*</item>
-      <item>/</item>
-      <item>||</item>
-      <item>=</item>
-      <item>!=</item>
-      <item>&lt;&gt;</item>
-      <item>&lt;</item>
-      <item>&lt;=</item>
-      <item>&gt;</item>
-      <item>&gt;=</item>
-      <item>~=</item>
-      <item>^=</item>
-      <item>:=</item>
-      <item>=&gt;</item>
-      <item>**</item>
-      <item>..</item>
-    </list>
     <list name="functions">
       <!-- string functions -->
       <item>ASCII</item>
@@ -189,6 +180,7 @@
       <item>CHAR</item>
       <item>CHARACTER_LENGTH</item>
       <item>CHAR_LENGTH</item>
+      <item>COALESCE</item>
       <item>CONCAT</item>
       <item>CONCAT_WS</item>
       <item>CONV</item>
@@ -391,14 +383,26 @@
         <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*" beginRegion="Comment"/>
         <RegExpr attribute="Comment" context="SingleLineComment" String="rem\b" insensitive="true" column="0"/>
 
+        <LineContinue attribute="Symbol" context="#stay" char="/" column="0"/> <!-- conflict with "operators" keywords -->
+
         <!-- problematic special cases -->
         <!-- SET type -->
         <RegExpr attribute="Data Type" context="#stay" insensitive="true" String="SET(?=\s*\()"/>
         <!-- keyword character set -->
-        <RegExpr attribute="Keyword" context="#stay" insensitive="true" String="\bCHARACTER SET\b"/>
+        <WordDetect attribute="Keyword" context="#stay" insensitive="true" String="CHARACTER SET"/>
         <!-- using the lists -->
         <keyword attribute="Keyword" context="#stay" String="keywords"/>
-        <keyword attribute="Operator" context="#stay" String="operators"/>
+        <LineContinue attribute="Symbol" context="#stay" char="/" column="0"/>
+        <keyword attribute="Operator Keyword" context="#stay" String="operators"/>
+        <keyword attribute="ControlFlow" context="#stay" String="controlFlow"/>
+        <AnyChar attribute="Operator" context="#stay" String="+-*/=&lt;&gt;"/>
+        <Detect2Chars attribute="Operator" context="#stay" char="!" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="~" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="^" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char=":" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="." char1="."/>
+        <Detect2Chars attribute="Operator" context="#stay" char="|" char1="|"/>
+        <AnyChar attribute="Symbol" context="#stay" String=":&#38;"/>
         <keyword attribute="Function" context="#stay" String="functions"/>
         <keyword attribute="Data Type" context="#stay" String="types"/>
 
@@ -414,8 +418,6 @@
         <DetectChar attribute="String" context="String2" char="&quot;"/>
         <DetectChar attribute="Name" context="Name" char="`"/>
 
-        <AnyChar attribute="Symbol" context="#stay" String=":&#38;"/>
-        <RegExpr attribute="Symbol" context="#stay" String="/$" column="0"/>
         <RegExpr attribute="Preprocessor" context="Preprocessor" String="@@?[^@ \t\r\n]" column="0"/>
         <!-- for something like : SELECT DB.TABLE.ROW ... -->
         <DetectChar attribute="String Char" context="#stay" char="."/>
@@ -452,7 +454,9 @@
     <itemDatas>
       <itemData name="Normal Text"       defStyleNum="dsNormal" spellChecking="false"/>
       <itemData name="Keyword"           defStyleNum="dsKeyword" spellChecking="false"/>
-      <itemData name="Operator"          defStyleNum="dsNormal" spellChecking="false"/>
+      <itemData name="ControlFlow"       defStyleNum="dsControlFlow" spellChecking="false"/>
+      <itemData name="Operator"          defStyleNum="dsOperator" spellChecking="false"/>
+      <itemData name="Operator Keyword"  defStyleNum="dsKeyword" spellChecking="false"/>
       <itemData name="Function"          defStyleNum="dsFunction" spellChecking="false"/>
       <itemData name="Data Type"         defStyleNum="dsDataType" spellChecking="false"/>
       <itemData name="Decimal"           defStyleNum="dsDecVal" spellChecking="false"/>
@@ -471,7 +475,7 @@
       <comment name="singleLine" start="--"/>
       <comment name="multiLine" start="/*" end="*/"/>
     </comments>
-    <keywords casesensitive="0" weakDeliminator="+-*/|=!&lt;&gt;~^:."/>
+    <keywords casesensitive="0"/>
     <folding indentationsensitive="true"/>
   </general>
 </language>
diff --git a/xml/sql-postgresql.xml b/xml/sql-postgresql.xml
--- a/xml/sql-postgresql.xml
+++ b/xml/sql-postgresql.xml
@@ -3,24 +3,55 @@
 <!-- PostgreSQL SQL, syntax definition based on sql.xml by Yury Lebedev
      v5 fix comments by Gene Thomas <gene@genethomas.com>
   -->
-<language name="SQL (PostgreSQL)" version="6" kateversion="2.4" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Shane Wright (me@shanewright.co.uk)" license="">
+<language name="SQL (PostgreSQL)" version="7" kateversion="5.0" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Shane Wright (me@shanewright.co.uk)" license="">
   <highlighting>
+    <list name="controlFlow">
+      <item>BEGIN</item>
+      <item>CASE</item>
+      <item>ELSE</item>
+      <item>ELSIF</item>
+      <item>END</item>
+      <item>EXCEPTION</item>
+      <item>FOR</item>
+      <item>IF</item>
+      <item>LOOP</item>
+      <item>RETURN</item>
+      <item>THEN</item>
+      <item>WHEN</item>
+  </list>
+    <list name="operators">
+      <item>AND</item>
+      <item>BETWEEN</item>
+      <item>IN</item>
+      <item>IS</item>
+      <item>LIKE</item>
+      <item>NOT</item>
+      <item>OR</item>
+    </list>
     <list name="keywords">
+      <item>A</item>
       <item>ABORT</item>
+      <item>ABSENT</item>
+      <item>ABSOLUTE</item>
       <item>ACCESS</item>
+      <item>ACCORDING</item>
       <item>ACTION</item>
+      <item>ADA</item>
       <item>ADD</item>
       <item>ADMIN</item>
       <item>AFTER</item>
       <item>AGGREGATE</item>
-      <item>ALIAS</item>
       <item>ALL</item>
       <item>ALLOCATE</item>
+      <item>ALSO</item>
       <item>ALTER</item>
-      <item>ANALYSE</item>
+      <item>ALWAYS</item>
       <item>ANALYZE</item>
       <item>ANY</item>
       <item>ARE</item>
+      <item>ARRAY</item>
+      <item>ARRAY_AGG</item>
+      <item>ARRAY_MAX_CARDINALITY</item>
       <item>AS</item>
       <item>ASC</item>
       <item>ASENSITIVE</item>
@@ -30,12 +61,19 @@
       <item>AT</item>
       <item>ATOMIC</item>
       <item>ATTACH</item>
+      <item>ATTRIBUTE</item>
+      <item>ATTRIBUTES</item>
       <item>AUTHORIZATION</item>
       <item>BACKWARD</item>
+      <item>BASE64</item>
       <item>BEFORE</item>
-      <item>BEGIN</item>
-      <item>BETWEEN</item>
+      <item>BEGIN_FRAME</item>
+      <item>BEGIN_PARTITION</item>
+      <item>BERNOULLI</item>
       <item>BINARY</item>
+      <item>BLOB</item>
+      <item>BLOCKED</item>
+      <item>BOM</item>
       <item>BOTH</item>
       <item>BREADTH</item>
       <item>BY</item>
@@ -46,90 +84,106 @@
       <item>CARDINALITY</item>
       <item>CASCADE</item>
       <item>CASCADED</item>
-      <item>CASE</item>
       <item>CAST</item>
       <item>CATALOG</item>
       <item>CATALOG_NAME</item>
       <item>CHAIN</item>
       <item>CHARACTERISTICS</item>
-      <item>CHARACTER_LENGTH</item>
+      <item>CHARACTERS</item>
       <item>CHARACTER_SET_CATALOG</item>
       <item>CHARACTER_SET_NAME</item>
       <item>CHARACTER_SET_SCHEMA</item>
-      <item>CHAR_LENGTH</item>
       <item>CHECK</item>
-      <item>CHECKED</item>
       <item>CHECKPOINT</item>
       <item>CLASS</item>
       <item>CLASS_ORIGIN</item>
       <item>CLOB</item>
       <item>CLOSE</item>
       <item>CLUSTER</item>
-      <item>COALESCE</item>
       <item>COBOL</item>
       <item>COLLATE</item>
       <item>COLLATION</item>
       <item>COLLATION_CATALOG</item>
       <item>COLLATION_NAME</item>
       <item>COLLATION_SCHEMA</item>
+      <item>COLLECT</item>
       <item>COLUMN</item>
+      <item>COLUMNS</item>
       <item>COLUMN_NAME</item>
       <item>COMMAND_FUNCTION</item>
       <item>COMMAND_FUNCTION_CODE</item>
       <item>COMMENT</item>
+      <item>COMMENTS</item>
       <item>COMMIT</item>
       <item>COMMITTED</item>
-      <item>COMPLETION</item>
+      <item>CONCURRENTLY</item>
+      <item>CONDITION</item>
       <item>CONDITION_NUMBER</item>
+      <item>CONFIGURATION</item>
+      <item>CONFLICT</item>
       <item>CONNECT</item>
       <item>CONNECTION</item>
       <item>CONNECTION_NAME</item>
-      <item>CONSTRAINTS</item>
       <item>CONSTRAINT</item>
+      <item>CONSTRAINTS</item>
       <item>CONSTRAINT_CATALOG</item>
       <item>CONSTRAINT_NAME</item>
       <item>CONSTRAINT_SCHEMA</item>
       <item>CONSTRUCTOR</item>
       <item>CONTAINS</item>
+      <item>CONTENT</item>
       <item>CONTINUE</item>
-      <item>CONVERT</item>
+      <item>CONTROL</item>
+      <item>CONVERSION</item>
       <item>COPY</item>
+      <item>CORR</item>
       <item>CORRESPONDING</item>
-      <item>COUNT</item>
+      <item>COST</item>
+      <item>COVAR_POP</item>
+      <item>COVAR_SAMP</item>
       <item>CREATE</item>
-      <item>CREATEDB</item>
-      <item>CREATEUSER</item>
       <item>CROSS</item>
+      <item>CSV</item>
       <item>CUBE</item>
+      <item>CUME_DIST</item>
       <item>CURRENT</item>
+      <item>CURRENT_CATALOG</item>
       <item>CURRENT_DATE</item>
+      <item>CURRENT_DEFAULT_TRANSFORM_GROUP</item>
       <item>CURRENT_PATH</item>
       <item>CURRENT_ROLE</item>
+      <item>CURRENT_ROW</item>
       <item>CURRENT_TIME</item>
       <item>CURRENT_TIMESTAMP</item>
-      <item>CURRENT_USER</item>
+      <item>CURRENT_TRANSFORM_GROUP_FOR_TYPE</item>
       <item>CURSOR</item>
       <item>CURSOR_NAME</item>
       <item>CYCLE</item>
       <item>DATA</item>
       <item>DATABASE</item>
-      <item>DATE</item>
+      <item>DATALINK</item>
       <item>DATETIME_INTERVAL_CODE</item>
       <item>DATETIME_INTERVAL_PRECISION</item>
       <item>DAY</item>
+      <item>DB</item>
       <item>DEALLOCATE</item>
       <item>DEC</item>
-      <item>DECIMAL</item>
       <item>DECLARE</item>
       <item>DEFAULT</item>
+      <item>DEFAULTS</item>
       <item>DEFERRABLE</item>
       <item>DEFERRED</item>
       <item>DEFINED</item>
       <item>DEFINER</item>
+      <item>DEGREE</item>
       <item>DELETE</item>
+      <item>DELIMITER</item>
       <item>DELIMITERS</item>
+      <item>DENSE_RANK</item>
+      <item>DEPENDS</item>
       <item>DEPTH</item>
       <item>DEREF</item>
+      <item>DERIVED</item>
       <item>DESC</item>
       <item>DESCRIBE</item>
       <item>DESCRIPTOR</item>
@@ -139,49 +193,78 @@
       <item>DETERMINISTIC</item>
       <item>DIAGNOSTICS</item>
       <item>DICTIONARY</item>
+      <item>DISABLE</item>
+      <item>DISCARD</item>
       <item>DISCONNECT</item>
       <item>DISPATCH</item>
       <item>DISTINCT</item>
+      <item>DLNEWCOPY</item>
+      <item>DLPREVIOUSCOPY</item>
+      <item>DLURLCOMPLETE</item>
+      <item>DLURLCOMPLETEONLY</item>
+      <item>DLURLCOMPLETEWRITE</item>
+      <item>DLURLPATH</item>
+      <item>DLURLPATHONLY</item>
+      <item>DLURLPATHWRITE</item>
+      <item>DLURLSCHEME</item>
+      <item>DLURLSERVER</item>
+      <item>DLVALUE</item>
       <item>DO</item>
+      <item>DOCUMENT</item>
       <item>DOMAIN</item>
-      <item>DOUBLE</item>
       <item>DROP</item>
       <item>DYNAMIC</item>
       <item>DYNAMIC_FUNCTION</item>
       <item>DYNAMIC_FUNCTION_CODE</item>
       <item>EACH</item>
-      <item>ELSE</item>
+      <item>ELEMENT</item>
+      <item>EMPTY</item>
+      <item>ENABLE</item>
       <item>ENCODING</item>
       <item>ENCRYPTED</item>
-      <item>END</item>
       <item>END-EXEC</item>
+      <item>END_FRAME</item>
+      <item>END_PARTITION</item>
+      <item>ENFORCED</item>
+      <item>ENUM</item>
       <item>EQUALS</item>
       <item>ESCAPE</item>
-      <item>EVERY</item>
+      <item>EVENT</item>
       <item>EXCEPT</item>
-      <item>EXCEPTION</item>
+      <item>EXCLUDE</item>
+      <item>EXCLUDING</item>
       <item>EXCLUSIVE</item>
       <item>EXEC</item>
       <item>EXECUTE</item>
-      <item>EXISTING</item>
       <item>EXISTS</item>
       <item>EXPLAIN</item>
+      <item>EXPRESSION</item>
+      <item>EXTENSION</item>
       <item>EXTERNAL</item>
       <item>FALSE</item>
       <item>FETCH</item>
+      <item>FILE</item>
+      <item>FILTER</item>
       <item>FINAL</item>
       <item>FIRST</item>
-      <item>FOR</item>
+      <item>FIRST_VALUE</item>
+      <item>FLAG</item>
+      <item>FLOAT</item>
+      <item>FOLLOWING</item>
       <item>FORCE</item>
       <item>FOREIGN</item>
       <item>FORTRAN</item>
       <item>FORWARD</item>
       <item>FOUND</item>
+      <item>FRAME_ROW</item>
       <item>FREE</item>
       <item>FREEZE</item>
       <item>FROM</item>
+      <item>FS</item>
       <item>FULL</item>
       <item>FUNCTION</item>
+      <item>FUNCTIONS</item>
+      <item>FUSION</item>
       <item>G</item>
       <item>GENERAL</item>
       <item>GENERATED</item>
@@ -191,28 +274,37 @@
       <item>GOTO</item>
       <item>GRANT</item>
       <item>GRANTED</item>
+      <item>GREATEST</item>
       <item>GROUP</item>
       <item>GROUPING</item>
+      <item>GROUPS</item>
       <item>HANDLER</item>
       <item>HAVING</item>
+      <item>HEADER</item>
+      <item>HEX</item>
       <item>HIERARCHY</item>
       <item>HOLD</item>
-      <item>HOST</item>
       <item>HOUR</item>
+      <item>ID</item>
       <item>IDENTITY</item>
       <item>IGNORE</item>
       <item>ILIKE</item>
       <item>IMMEDIATE</item>
+      <item>IMMEDIATELY</item>
       <item>IMMUTABLE</item>
       <item>IMPLEMENTATION</item>
-      <item>IN</item>
+      <item>IMPLICIT</item>
+      <item>IMPORT</item>
+      <item>INCLUDING</item>
       <item>INCREMENT</item>
+      <item>INDENT</item>
       <item>INDEX</item>
+      <item>INDEXES</item>
       <item>INDICATOR</item>
-      <item>INFIX</item>
+      <item>INHERIT</item>
       <item>INHERITS</item>
-      <item>INITIALIZE</item>
       <item>INITIALLY</item>
+      <item>INLINE</item>
       <item>INNER</item>
       <item>INOUT</item>
       <item>INPUT</item>
@@ -221,31 +313,35 @@
       <item>INSTANCE</item>
       <item>INSTANTIABLE</item>
       <item>INSTEAD</item>
+      <item>INTEGRITY</item>
       <item>INTERSECT</item>
-      <item>INTERVAL</item>
+      <item>INTERSECTION</item>
       <item>INTO</item>
       <item>INVOKER</item>
-      <item>IS</item>
       <item>ISNULL</item>
       <item>ISOLATION</item>
-      <item>ITERATE</item>
       <item>JOIN</item>
       <item>K</item>
       <item>KEY</item>
       <item>KEY_MEMBER</item>
       <item>KEY_TYPE</item>
-      <item>LANCOMPILER</item>
+      <item>LABEL</item>
+      <item>LAG</item>
       <item>LANGUAGE</item>
       <item>LARGE</item>
       <item>LAST</item>
+      <item>LAST_VALUE</item>
       <item>LATERAL</item>
+      <item>LEAD</item>
       <item>LEADING</item>
+      <item>LEAKPROOF</item>
+      <item>LEAST</item>
       <item>LEFT</item>
-      <item>LENGTH</item>
-      <item>LESS</item>
       <item>LEVEL</item>
-      <item>LIKE</item>
+      <item>LIBRARY</item>
+      <item>LIKE_REGEX</item>
       <item>LIMIT</item>
+      <item>LINK</item>
       <item>LISTEN</item>
       <item>LOAD</item>
       <item>LOCAL</item>
@@ -254,49 +350,64 @@
       <item>LOCATION</item>
       <item>LOCATOR</item>
       <item>LOCK</item>
-      <item>LOWER</item>
+      <item>LOCKED</item>
+      <item>LOGGED</item>
       <item>M</item>
       <item>MAP</item>
+      <item>MAPPING</item>
       <item>MATCH</item>
-      <item>MAX</item>
+      <item>MATCHED</item>
+      <item>MATERIALIZED</item>
       <item>MAXVALUE</item>
+      <item>MAX_CARDINALITY</item>
+      <item>MEMBER</item>
+      <item>MERGE</item>
       <item>MESSAGE_LENGTH</item>
       <item>MESSAGE_OCTET_LENGTH</item>
       <item>MESSAGE_TEXT</item>
       <item>METHOD</item>
-      <item>MIN</item>
       <item>MINUTE</item>
       <item>MINVALUE</item>
-      <item>MOD</item>
       <item>MODE</item>
       <item>MODIFIES</item>
-      <item>MODIFY</item>
       <item>MODULE</item>
       <item>MONTH</item>
       <item>MORE</item>
       <item>MOVE</item>
+      <item>MULTISET</item>
       <item>MUMPS</item>
       <item>NAME</item>
       <item>NAMES</item>
+      <item>NAMESPACE</item>
       <item>NATIONAL</item>
       <item>NATURAL</item>
+      <item>NCHAR</item>
+      <item>NCLOB</item>
+      <item>NESTING</item>
       <item>NEW</item>
       <item>NEXT</item>
+      <item>NFC</item>
+      <item>NFD</item>
+      <item>NFKC</item>
+      <item>NFKD</item>
+      <item>NIL</item>
       <item>NO</item>
-      <item>NOCREATEDB</item>
-      <item>NOCREATEUSER</item>
       <item>NONE</item>
-      <item>NOT</item>
+      <item>NORMALIZE</item>
+      <item>NORMALIZED</item>
       <item>NOTHING</item>
       <item>NOTIFY</item>
       <item>NOTNULL</item>
+      <item>NOWAIT</item>
+      <item>NTH_VALUE</item>
+      <item>NTILE</item>
       <item>NULL</item>
       <item>NULLABLE</item>
-      <item>NULLIF</item>
+      <item>NULLS</item>
       <item>NUMBER</item>
-      <item>NUMERIC</item>
       <item>OBJECT</item>
-      <item>OCTET_LENGTH</item>
+      <item>OCCURRENCES_REGEX</item>
+      <item>OCTETS</item>
       <item>OF</item>
       <item>OFF</item>
       <item>OFFSET</item>
@@ -305,69 +416,105 @@
       <item>ON</item>
       <item>ONLY</item>
       <item>OPEN</item>
-      <item>OPERATION</item>
       <item>OPERATOR</item>
       <item>OPTION</item>
       <item>OPTIONS</item>
       <item>ORDER</item>
+      <item>ORDERING</item>
       <item>ORDINALITY</item>
+      <item>OTHERS</item>
       <item>OUT</item>
       <item>OUTER</item>
       <item>OUTPUT</item>
       <item>OVER</item>
       <item>OVERLAPS</item>
-      <item>OVERLAY</item>
       <item>OVERRIDING</item>
+      <item>OWNED</item>
       <item>OWNER</item>
+      <item>P</item>
       <item>PAD</item>
+      <item>PARALLEL</item>
       <item>PARAMETER</item>
-      <item>PARAMETERS</item>
       <item>PARAMETER_MODE</item>
       <item>PARAMETER_NAME</item>
       <item>PARAMETER_ORDINAL_POSITION</item>
       <item>PARAMETER_SPECIFIC_CATALOG</item>
       <item>PARAMETER_SPECIFIC_NAME</item>
       <item>PARAMETER_SPECIFIC_SCHEMA</item>
+      <item>PARSER</item>
       <item>PARTIAL</item>
       <item>PARTITION</item>
       <item>PASCAL</item>
+      <item>PASSING</item>
+      <item>PASSTHROUGH</item>
       <item>PASSWORD</item>
-      <item>PATH</item>
-      <item>PENDANT</item>
+      <item>PERCENT</item>
+      <item>PERCENTILE_CONT</item>
+      <item>PERCENTILE_DISC</item>
+      <item>PERCENT_RANK</item>
+      <item>PERIOD</item>
+      <item>PERMISSION</item>
+      <item>PLACING</item>
+      <item>PLANS</item>
       <item>PLI</item>
-      <item>POSITION</item>
-      <item>POSTFIX</item>
+      <item>POLICY</item>
+      <item>PORTION</item>
+      <item>POSITION_REGEX</item>
+      <item>PRECEDES</item>
+      <item>PRECEDING</item>
       <item>PRECISION</item>
-      <item>PREFIX</item>
-      <item>PREORDER</item>
       <item>PREPARE</item>
+      <item>PREPARED</item>
       <item>PRESERVE</item>
       <item>PRIMARY</item>
       <item>PRIOR</item>
       <item>PRIVILEGES</item>
       <item>PROCEDURAL</item>
       <item>PROCEDURE</item>
+      <item>PROGRAM</item>
       <item>PUBLIC</item>
       <item>RANGE</item>
+      <item>PUBLICATION</item>
+      <item>QUOTE</item>
+      <item>RANGE</item>
+      <item>RANK</item>
       <item>READ</item>
       <item>READS</item>
-      <item>REAL</item>
+      <item>REASSIGN</item>
+      <item>RECHECK</item>
+      <item>RECOVERY</item>
       <item>RECURSIVE</item>
       <item>REF</item>
       <item>REFERENCES</item>
       <item>REFERENCING</item>
+      <item>REFRESH</item>
+      <item>REGR_AVGX</item>
+      <item>REGR_AVGY</item>
+      <item>REGR_COUNT</item>
+      <item>REGR_INTERCEPT</item>
+      <item>REGR_R2</item>
+      <item>REGR_SLOPE</item>
+      <item>REGR_SXX</item>
+      <item>REGR_SXY</item>
+      <item>REGR_SYY</item>
       <item>REINDEX</item>
       <item>RELATIVE</item>
+      <item>RELEASE</item>
       <item>RENAME</item>
       <item>REPEATABLE</item>
-      <item>REPLACE</item>
+      <item>REPLICA</item>
+      <item>REQUIRING</item>
       <item>RESET</item>
+      <item>RESPECT</item>
+      <item>RESTART</item>
+      <item>RESTORE</item>
       <item>RESTRICT</item>
       <item>RESULT</item>
-      <item>RETURN</item>
+      <item>RETURNED_CARDINALITY</item>
       <item>RETURNED_LENGTH</item>
       <item>RETURNED_OCTET_LENGTH</item>
       <item>RETURNED_SQLSTATE</item>
+      <item>RETURNING</item>
       <item>RETURNS</item>
       <item>REVOKE</item>
       <item>RIGHT</item>
@@ -381,25 +528,32 @@
       <item>ROW</item>
       <item>ROWS</item>
       <item>ROW_COUNT</item>
+      <item>ROW_NUMBER</item>
       <item>RULE</item>
       <item>SAVEPOINT</item>
       <item>SCALE</item>
       <item>SCHEMA</item>
+      <item>SCHEMAS</item>
       <item>SCHEMA_NAME</item>
       <item>SCOPE</item>
+      <item>SCOPE_CATALOG</item>
+      <item>SCOPE_NAME</item>
+      <item>SCOPE_SCHEMA</item>
       <item>SCROLL</item>
       <item>SEARCH</item>
       <item>SECOND</item>
       <item>SECTION</item>
       <item>SECURITY</item>
       <item>SELECT</item>
+      <item>SELECTIVE</item>
       <item>SELF</item>
       <item>SENSITIVE</item>
       <item>SEQUENCE</item>
+      <item>SEQUENCES</item>
       <item>SERIALIZABLE</item>
+      <item>SERVER</item>
       <item>SERVER_NAME</item>
       <item>SESSION</item>
-      <item>SESSION_USER</item>
       <item>SET</item>
       <item>SETOF</item>
       <item>SETS</item>
@@ -408,6 +562,8 @@
       <item>SIMILAR</item>
       <item>SIMPLE</item>
       <item>SIZE</item>
+      <item>SKIP</item>
+      <item>SNAPSHOT</item>
       <item>SOME</item>
       <item>SOURCE</item>
       <item>SPACE</item>
@@ -421,35 +577,46 @@
       <item>SQLSTATE</item>
       <item>SQLWARNING</item>
       <item>STABLE</item>
+      <item>STANDALONE</item>
       <item>START</item>
       <item>STATE</item>
       <item>STATEMENT</item>
       <item>STATIC</item>
       <item>STATISTICS</item>
+      <item>STDDEV_POP</item>
+      <item>STDDEV_SAMP</item>
       <item>STDIN</item>
       <item>STDOUT</item>
+      <item>STORAGE</item>
+      <item>STRICT</item>
+      <item>STRIP</item>
       <item>STRUCTURE</item>
       <item>STYLE</item>
       <item>SUBCLASS_ORIGIN</item>
-      <item>SUBLIST</item>
-      <item>SUBSTRING</item>
-      <item>SUM</item>
+      <item>SUBMULTISET</item>
+      <item>SUBSCRIPTION</item>
+      <item>SUBSTRING_REGEX</item>
+      <item>SUCCEEDS</item>
       <item>SYMMETRIC</item>
       <item>SYSID</item>
       <item>SYSTEM</item>
+      <item>SYSTEM_TIME</item>
       <item>SYSTEM_USER</item>
+      <item>T</item>
       <item>TABLE</item>
+      <item>TABLES</item>
+      <item>TABLESAMPLE</item>
+      <item>TABLESPACE</item>
       <item>TABLE_NAME</item>
       <item>TEMP</item>
       <item>TEMPLATE</item>
       <item>TEMPORARY</item>
-      <item>TERMINATE</item>
-      <item>THAN</item>
-      <item>THEN</item>
+      <item>TIES</item>
       <item>TIMEZONE_HOUR</item>
       <item>TIMEZONE_MINUTE</item>
       <item>TO</item>
-      <item>TOAST</item>
+      <item>TOKEN</item>
+      <item>TOP_LEVEL_COUNT</item>
       <item>TRAILING</item>
       <item>TRANSACTION</item>
       <item>TRANSACTIONS_COMMITTED</item>
@@ -457,119 +624,102 @@
       <item>TRANSACTION_ACTIVE</item>
       <item>TRANSFORM</item>
       <item>TRANSFORMS</item>
-      <item>TRANSLATE</item>
+      <item>TRANSLATE_REGEX</item>
       <item>TRANSLATION</item>
       <item>TREAT</item>
       <item>TRIGGER</item>
       <item>TRIGGER_CATALOG</item>
       <item>TRIGGER_NAME</item>
       <item>TRIGGER_SCHEMA</item>
-      <item>TRIM</item>
+      <item>TRIM_ARRAY</item>
       <item>TRUE</item>
       <item>TRUNCATE</item>
       <item>TRUSTED</item>
       <item>TYPE</item>
+      <item>TYPES</item>
+      <item>UESCAPE</item>
+      <item>UNBOUNDED</item>
       <item>UNCOMMITTED</item>
       <item>UNDER</item>
       <item>UNENCRYPTED</item>
       <item>UNION</item>
       <item>UNIQUE</item>
       <item>UNKNOWN</item>
+      <item>UNLINK</item>
       <item>UNLISTEN</item>
+      <item>UNLOGGED</item>
       <item>UNNAMED</item>
       <item>UNNEST</item>
       <item>UNTIL</item>
+      <item>UNTYPED</item>
       <item>UPDATE</item>
-      <item>UPPER</item>
+      <item>URI</item>
       <item>USAGE</item>
       <item>USER</item>
       <item>USER_DEFINED_TYPE_CATALOG</item>
+      <item>USER_DEFINED_TYPE_CODE</item>
       <item>USER_DEFINED_TYPE_NAME</item>
       <item>USER_DEFINED_TYPE_SCHEMA</item>
       <item>USING</item>
       <item>VACUUM</item>
       <item>VALID</item>
+      <item>VALIDATE</item>
+      <item>VALIDATOR</item>
       <item>VALUE</item>
       <item>VALUES</item>
-      <item>VARIABLE</item>
+      <item>VALUE_OF</item>
+      <item>VARBINARY</item>
+      <item>VARIADIC</item>
       <item>VARYING</item>
+      <item>VAR_POP</item>
+      <item>VAR_SAMP</item>
       <item>VERBOSE</item>
-      <item>VERSION</item>
+      <item>VERSIONING</item>
       <item>VIEW</item>
+      <item>VIEWS</item>
       <item>VOLATILE</item>
-      <item>WHEN</item>
       <item>WHENEVER</item>
       <item>WHERE</item>
-      <item>WHILE</item>
+      <item>WHITESPACE</item>
+      <item>WINDOW</item>
       <item>WITH</item>
+      <item>WITHIN</item>
       <item>WITHOUT</item>
       <item>WORK</item>
+      <item>WRAPPER</item>
       <item>WRITE</item>
+      <item>XMLAGG</item>
+      <item>XMLATTRIBUTES</item>
+      <item>XMLBINARY</item>
+      <item>XMLCAST</item>
+      <item>XMLCOMMENT</item>
+      <item>XMLCONCAT</item>
+      <item>XMLDECLARATION</item>
+      <item>XMLDOCUMENT</item>
+      <item>XMLELEMENT</item>
+      <item>XMLEXISTS</item>
+      <item>XMLFOREST</item>
+      <item>XMLITERATE</item>
+      <item>XMLNAMESPACES</item>
+      <item>XMLPARSE</item>
+      <item>XMLPI</item>
+      <item>XMLQUERY</item>
+      <item>XMLROOT</item>
+      <item>XMLSCHEMA</item>
+      <item>XMLSERIALIZE</item>
+      <item>XMLTABLE</item>
+      <item>XMLTEXT</item>
+      <item>XMLVALIDATE</item>
       <item>YEAR</item>
+      <item>YES</item>
       <item>ZONE</item>
     </list>
-    <list name="operators">
-      <item>+</item>
-      <item>-</item>
-      <item>*</item>
-      <item>/</item>
-      <item>||</item>
-      <item>|/</item>
-      <item>||/</item>
-      <item>!</item>
-      <item>!!</item>
-      <item>@</item>
-      <item>&amp;</item>
-      <item>|</item>
-      <item>#</item>
-      <item>&lt;&lt;</item>
-      <item>&gt;&gt;</item>
-      <item>%</item>
-      <item>^</item>
-      <item>=</item>
-      <item>!=</item>
-      <item>&lt;&gt;</item>
-      <item>&lt;</item>
-      <item>&lt;=</item>
-      <item>&gt;</item>
-      <item>&gt;=</item>
-      <item>~</item>
-      <item>~*</item>
-      <item>!~</item>
-      <item>!~*</item>
-      <item>^=</item>
-      <item>:=</item>
-      <item>=&gt;</item>
-      <item>**</item>
-      <item>..</item>
-      <item>AND</item>
-      <item>OR</item>
-      <item>NOT</item>
-      <!-- geometric -->
-      <item>##</item>
-      <item>&amp;&amp;</item>
-      <item>&amp;&lt;</item>
-      <item>&amp;&gt;</item>
-      <item>&lt;-&gt;</item>
-      <item>&lt;^</item>
-      <item>&gt;^</item>
-      <item>?#</item>
-      <item>?-</item>
-      <item>?-|</item>
-      <item>@-@</item>
-      <item>?|</item>
-      <item>?||</item>
-      <item>@@</item>
-      <item>~=</item>
-      <!-- network address type -->
-      <item>&lt;&lt;=</item>
-      <item>&gt;&gt;=</item>
-    </list>
     <list name="functions">
       <!-- math -->
       <item>ABS</item>
       <item>CBRT</item>
       <item>CEIL</item>
+      <item>CEILING</item>
       <item>DEGREES</item>
       <item>EXP</item>
       <item>FLOOR</item>
@@ -578,12 +728,15 @@
       <item>MOD</item>
       <item>PI</item>
       <item>POW</item>
+      <item>POWER</item>
       <item>RADIANS</item>
       <item>RANDOM</item>
       <item>ROUND</item>
+      <item>SETSEED</item>
       <item>SIGN</item>
       <item>SQRT</item>
       <item>TRUNC</item>
+      <item>WIDTH_BUCKET</item>
       <!-- trig -->
       <item>ACOS</item>
       <item>ASIN</item>
@@ -597,9 +750,14 @@
       <item>BIT_LENGTH</item>
       <item>CHAR_LENGTH</item>
       <item>CHARACTER_LENGTH</item>
+      <item>CONVERT</item>
+      <item>GET_BYTE</item>
+      <item>GET_BIT</item>
       <item>LOWER</item>
       <item>OCTET_LENGTH</item>
+      <item>OVERLAY</item>
       <item>POSITION</item>
+      <item>SET_BIT</item>
       <item>SUBSTRING</item>
       <item>TRIM</item>
       <item>UPPER</item>
@@ -607,21 +765,27 @@
       <item>ASCII</item>
       <item>BTRIM</item>
       <item>CHR</item>
-      <item>CONVERT</item>
+      <item>DECODE</item>
+      <item>ENCODE</item>
       <item>INITCAP</item>
       <item>LENGTH</item>
       <item>LPAD</item>
       <item>LTRIM</item>
+      <item>MD5</item>
       <item>PG_CLIENT_ENCODING</item>
+      <item>QUOTE_IDENT</item>
+      <item>QUOTE_LITERAL</item>
+      <item>REGEXP_REPLACE</item>
       <item>REPEAT</item>
+      <item>REPLACE</item>
       <item>RPAD</item>
       <item>RTRIM</item>
+      <item>SPLIT_PART</item>
       <item>STRPOS</item>
       <item>SUBSTR</item>
       <item>TO_ASCII</item>
+      <item>TO_HEX</item>
       <item>TRANSLATE</item>
-      <item>ENCODE</item>
-      <item>DECODE</item>
       <!-- data type formatting -->
       <item>TO_CHAR</item>
       <item>TO_DATE</item>
@@ -633,20 +797,20 @@
       <item>DATE_TRUNC</item>
       <item>EXTRACT</item>
       <item>ISFINITE</item>
+      <item>JUSTIFY_HOURS</item>
+      <item>JUSTIFY_DAYS</item>
       <item>NOW</item>
       <item>TIMEOFDAY</item>
       <item>TIMESTAMP</item>
-      <item>EXTRACT</item>
       <!-- geometric -->
       <item>AREA</item>
-      <item>BOX</item>
       <item>CENTER</item>
       <item>DIAMETER</item>
       <item>HEIGHT</item>
       <item>ISCLOSED</item>
       <item>ISOPEN</item>
+      <item>NPOINTS</item>
       <item>PCLOSE</item>
-      <item>NPOINT</item>
       <item>POPEN</item>
       <item>RADIUS</item>
       <item>WIDTH</item>
@@ -657,37 +821,111 @@
       <item>PATH</item>
       <item>POINT</item>
       <item>POLYGON</item>
+      <!-- array -->
+      <item>ARRAY_CAT</item>
+      <item>ARRAY_APPEND</item>
+      <item>ARRAY_PREPEND</item>
+      <item>ARRAY_DIMS</item>
+      <item>ARRAY_LOWER</item>
+      <item>ARRAY_UPPER</item>
+      <item>ARRAY_TO_STRING</item>
+      <item>STRING_TO_ARRAY</item>
       <!-- network address type, TEXT is omitted as it is more commonly a data type -->
       <item>BROADCAST</item>
       <item>HOST</item>
       <item>MASKLEN</item>
       <item>SET_MASKLEN</item>
       <item>NETMASK</item>
+      <item>HOSTMASK</item>
       <item>NETWORK</item>
+      <item>TEXT</item>
       <item>ABBREV</item>
+      <item>FAMILY</item>
       <!-- sequence manipulation -->
       <item>NEXTVAL</item>
       <item>CURRVAL</item>
+      <item>LASTVAL</item>
       <item>SETVAL</item>
       <!-- conditional expressions -->
       <item>COALESCE</item>
       <item>NULLIF</item>
-      <!-- misc -->
-      <item>HAS_TABLE_PRIVILEGE</item>
-      <item>PG_GET_VIEWDEF</item>
-      <item>PG_GET_RULEDEF</item>
-      <item>PG_GET_INDEXDEF</item>
-      <item>PG_GET_USERBYID</item>
-      <item>OBJ_DESCRIPTION</item>
-      <item>COL_DESCRIPTION</item>
       <!-- aggregate -->
       <item>AVG</item>
+      <item>BIT_AND</item>
+      <item>BIT_OR</item>
+      <item>BOOL_AND</item>
+      <item>BOOL_OR</item>
       <item>COUNT</item>
+      <item>EVERY</item>
       <item>MAX</item>
       <item>MIN</item>
       <item>STDDEV</item>
       <item>SUM</item>
       <item>VARIANCE</item>
+      <!-- series generating -->
+      <item>GENERATE_SERIES</item>
+      <!-- system information -->
+      <item>CURRENT_DATABASE</item>
+      <item>CURRENT_SCHEMA</item>
+      <item>CURRENT_SCHEMAS</item>
+      <item>CURRENT_USER</item>
+      <item>INET_CLIENT_ADDR</item>
+      <item>INET_CLIENT_PORT</item>
+      <item>INET_SERVER_ADDR</item>
+      <item>INET_SERVER_PORT</item>
+      <item>SESSION_USER</item>
+      <item>PG_POSTMASTER_START_TIME</item>
+      <item>VERSION</item>
+      <!-- access privilege inquiry  -->
+      <item>HAS_TABLE_PRIVILEGE</item>
+      <item>HAS_DATABASE_PRIVILEGE</item>
+      <item>HAS_FUNCTION_PRIVILEGE</item>
+      <item>HAS_LANGUAGE_PRIVILEGE</item>
+      <item>PG_HAS_ROLE</item>
+      <item>HAS_SCHEMA_PRIVILEGE</item>
+      <item>HAS_TABLESPACE_PRIVILEGE</item>
+      <!--  schema visibility inquiry -->
+      <item>PG_TABLE_IS_VISIBLE</item>
+      <item>PG_TYPE_IS_VISIBLE</item>
+      <item>PG_FUNCTION_IS_VISIBLE</item>
+      <item>PG_OPERATOR_IS_VISIBLE</item>
+      <item>PG_OPCLASS_IS_VISIBLE</item>
+      <item>PG_CONVERSION_IS_VISIBLE</item>
+      <!-- system catalog information -->
+      <item>FORMAT_TYPE</item>
+      <item>PG_GET_CONSTRAINTDEF</item>
+      <item>PG_GET_EXPR</item>
+      <item>PG_GET_INDEXDEF</item>
+      <item>PG_GET_RULEDEF</item>
+      <item>PG_GET_SERIAL_SEQUENCE</item>
+      <item>PG_TABLESPACE_DATABASES</item>
+      <item>PG_GET_TRIGGERDEF</item>
+      <item>PG_GET_USERBYID</item>
+      <item>PG_GET_VIEWDEF</item>
+      <!-- comment information -->
+      <item>OBJ_DESCRIPTION</item>
+      <item>COL_DESCRIPTION</item>
+      <!-- configuration settings -->
+      <item>CURRENT_SETTING</item>
+      <item>SET_CONFIG</item>
+      <!-- server signalling -->
+      <item>PG_CANCEL_BACKEND</item>
+      <item>PG_RELOAD_CONF</item>
+      <item>PG_ROTATE_LOGFILE</item>
+      <!-- backup control -->
+      <item>PG_START_BACKUP</item>
+      <item>PG_STOP_BACKUP</item>
+      <!-- database object Sizes-->
+      <item>PG_COLUMN_SIZE</item>
+      <item>PG_TABLESPACE_SIZE</item>
+      <item>PG_DATABASE_SIZE</item>
+      <item>PG_RELATION_SIZE</item>
+      <item>PG_TOTAL_RELATION_SIZE</item>
+      <item>PG_SIZE_PRETTY</item>
+      <!-- generic file access -->
+      <item>PG_LS_DIR</item>
+      <item>PG_READ_FILE</item>
+      <item>PG_STAT_FILE</item>
     </list>
     <list name="types">
       <!-- https://www.postgresql.org/docs/current/static/datatype.html#DATATYPE-TABLE -->
@@ -704,6 +942,7 @@
       <item>CIRCLE</item>
       <item>DATE</item>
       <item>DECIMAL</item>
+      <item>DOUBLE</item>
       <item>FLOAT4</item>
       <item>FLOAT8</item>
       <item>INET</item>
@@ -717,13 +956,12 @@
       <item>JSONB</item>
       <item>LINE</item>
       <item>LSEG</item>
-      <item>LZTEXT</item>
       <item>MACADDR</item>
       <item>MACADDR8</item>
       <item>MONEY</item>
       <item>NUMERIC</item>
-      <item>OID</item>
       <item>PATH</item>
+      <item>PG_LSN</item>
       <item>POINT</item>
       <item>POLYGON</item>
       <item>REAL</item>
@@ -740,6 +978,7 @@
       <item>TIMETZ</item>
       <item>TSQUERY</item>
       <item>TSVECTOR</item>
+      <item>TXID_SNAPSHOT</item>
       <item>UUID</item>
       <item>VARBIT</item>
       <item>VARCHAR</item>
@@ -758,37 +997,38 @@
         <RegExpr String="create\s+(or\s+replace\s+)?function" insensitive="true" context="CreateFunction" attribute="Keyword"/>
 
         <RegExpr String="do\s+\$([^\$\n\r]*)\$" insensitive="true" context="FunctionBody" attribute="Keyword"/>
+        <LineContinue attribute="Symbol" context="#stay" char="/" column="0"/>
         <keyword attribute="Keyword" context="#stay" String="keywords"/>
-        <keyword attribute="Operator" context="#stay" String="operators"/>
+        <keyword attribute="Operator Keyword" context="#stay" String="operators"/>
+        <keyword attribute="ControlFlow" context="#stay" String="controlFlow"/>
         <keyword attribute="Function" context="#stay" String="functions"/>
         <keyword attribute="Data Type" context="#stay" String="types"/>
-        <RegExpr attribute="Data Type" context="#stay" String="%bulk_exceptions\b" insensitive="true"/>
-        <RegExpr attribute="Data Type" context="#stay" String="%bulk_rowcount\b" insensitive="true"/>
-        <RegExpr attribute="Data Type" context="#stay" String="%found\b" insensitive="true"/>
-        <RegExpr attribute="Data Type" context="#stay" String="%isopen\b" insensitive="true"/>
-        <RegExpr attribute="Data Type" context="#stay" String="%notfound\b" insensitive="true"/>
-        <RegExpr attribute="Data Type" context="#stay" String="%rowcount\b" insensitive="true"/>
-        <RegExpr attribute="Data Type" context="#stay" String="%rowtype\b" insensitive="true"/>
-        <RegExpr attribute="Data Type" context="#stay" String="%type\b" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="%(bulk_(exceptions|rowcount)|(not)?found|isopen|rowcount|(row)?type)\b" insensitive="true"/>
         <Float attribute="Float" context="#stay"/>
         <Int attribute="Decimal" context="#stay"/>
         <DetectChar attribute="String" context="String" char="'"/>
         <DetectChar attribute="Comment" context="Identifier" char="&quot;"/>
         <AnyChar attribute="Symbol" context="#stay" String=":&#38;"/>
-        <RegExpr attribute="Symbol" context="#stay" String="/$" column="0"/>
         <RegExpr attribute="Preprocessor" context="Preprocessor" String="@@?[^@ \t\r\n]" column="0"/>
         <RegExpr attribute="Operator" context="MultiLineString" String="\$([^\$\n\r]*)\$" dynamic="true"/>
+        <AnyChar attribute="Operator" context="#stay" String="+-*/=%^!&lt;&gt;&amp;|@~#"/>
+        <Detect2Chars attribute="Operator" context="#stay" char=":" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="." char1="."/>
+        <!-- geometric operators -->
+        <Detect2Chars attribute="Operator" context="#stay" char="?" char1="#"/>
+        <Detect2Chars attribute="Operator" context="#stay" char="?" char1="-"/>
+        <Detect2Chars attribute="Operator" context="#stay" char="?" char1="|"/>
       </context>
       <context name="CreateFunction" attribute="Normal Text" lineEndContext="#stay">
         <RegExpr attribute="Function" context="FunctionBody" String="\$([^\$\n\r]*)\$" dynamic="true"/>
         <IncludeRules context="Normal"/>
       </context>
       <context name="FunctionBody" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <RegExpr attribute="Function" context="#pop#pop" String="\$%1\$" dynamic="true"/>
+        <StringDetect attribute="Function" context="#pop#pop" String="$%1$" dynamic="true"/>
         <IncludeRules context="Normal"/>
       </context>
       <context name="MultiLineString" attribute="String" lineEndContext="#stay" dynamic="true">
-        <RegExpr attribute="Operator" context="#pop" String="\$%1\$" dynamic="true"/>
+        <StringDetect attribute="Operator" context="#pop" String="$%1$" dynamic="true"/>
       </context>
       <context name="String" attribute="String" lineEndContext="#stay">
         <LineContinue attribute="String" context="#pop"/>
@@ -807,19 +1047,21 @@
       <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop"/>
     </contexts>
     <itemDatas>
-      <itemData name="Normal Text"       defStyleNum="dsNormal"/>
-      <itemData name="Keyword"           defStyleNum="dsKeyword"/>
-      <itemData name="Operator"          defStyleNum="dsNormal"/>
-      <itemData name="Function"          defStyleNum="dsFunction"/>
-      <itemData name="Data Type"         defStyleNum="dsDataType"/>
-      <itemData name="Decimal"           defStyleNum="dsDecVal"/>
-      <itemData name="Float"             defStyleNum="dsFloat"/>
+      <itemData name="Normal Text"       defStyleNum="dsNormal" spellChecking="false"/>
+      <itemData name="Keyword"           defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="ControlFlow"       defStyleNum="dsControlFlow" spellChecking="false"/>
+      <itemData name="Operator"          defStyleNum="dsOperator" spellChecking="false"/>
+      <itemData name="Operator Keyword"  defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="Function"          defStyleNum="dsFunction" spellChecking="false"/>
+      <itemData name="Data Type"         defStyleNum="dsDataType" spellChecking="false"/>
+      <itemData name="Decimal"           defStyleNum="dsDecVal" spellChecking="false"/>
+      <itemData name="Float"             defStyleNum="dsFloat" spellChecking="false"/>
       <itemData name="String"            defStyleNum="dsString"/>
-      <itemData name="String Char"       defStyleNum="dsChar"/>
+      <itemData name="String Char"       defStyleNum="dsChar" spellChecking="false"/>
       <itemData name="Comment"           defStyleNum="dsComment"/>
-      <itemData name="Identifier"        defStyleNum="dsOthers"/>
-      <itemData name="Symbol"            defStyleNum="dsChar"/>
-      <itemData name="Preprocessor"      defStyleNum="dsOthers"/>
+      <itemData name="Identifier"        defStyleNum="dsOthers" spellChecking="false"/>
+      <itemData name="Symbol"            defStyleNum="dsChar" spellChecking="false"/>
+      <itemData name="Preprocessor"      defStyleNum="dsOthers" spellChecking="false"/>
     </itemDatas>
   </highlighting>
   <general>
@@ -827,6 +1069,6 @@
       <comment name="singleLine" start="--"/>
       <comment name="multiLine" start="/*" end="*/"/>
     </comments>
-    <keywords casesensitive="0" weakDeliminator="+-*/|=!&lt;&gt;~^:.@&amp;#%?"/>
+    <keywords casesensitive="0"/>
   </general>
 </language>
diff --git a/xml/sql.xml b/xml/sql.xml
--- a/xml/sql.xml
+++ b/xml/sql.xml
@@ -5,8 +5,31 @@
      v3 fix comments by Gene Thomas <gene@genethomas.com>
   -->
 <!-- kate: space-indent on; indent-width 2; replace-tabs on; -->
-<language name="SQL" version="3" kateversion="2.4" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Yury Lebedev (yurylebedev@mail.ru)" license="LGPL">
+<language name="SQL" version="5" kateversion="5.0" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Yury Lebedev (yurylebedev@mail.ru)" license="LGPL">
   <highlighting>
+    <list name="controlFlow">
+      <item>BEGIN</item>
+      <item>CASE</item>
+      <item>ELSE</item>
+      <item>ELSIF</item>
+      <item>END</item>
+      <item>FOR</item>
+      <item>IF</item>
+      <item>LOOP</item>
+      <item>RETURN</item>
+      <item>THEN</item>
+      <item>WHEN</item>
+      <item>WHILE</item>
+    </list>
+    <list name="operators">
+      <item>AND</item>
+      <item>BETWEEN</item>
+      <item>IN</item>
+      <item>IS</item>
+      <item>LIKE</item>
+      <item>NOT</item>
+      <item>OR</item>
+    </list>
     <list name="keywords">
       <item>ACCESS</item>
       <item>ACCOUNT</item>
@@ -22,7 +45,6 @@
       <item>ALTER</item>
       <item>ANALYZE</item>
       <item>ANCILLARY</item>
-      <item>AND</item>
       <item>ANY</item>
       <item>ARCHIVE</item>
       <item>ARCHIVELOG</item>
@@ -43,9 +65,7 @@
       <item>BACKUP</item>
       <item>BECOME</item>
       <item>BEFORE</item>
-      <item>BEGIN</item>
       <item>BEHALF</item>
-      <item>BETWEEN</item>
       <item>BINDING</item>
       <item>BITMAP</item>
       <item>BLOCK</item>
@@ -65,7 +85,6 @@
       <item>CALL</item>
       <item>CANCEL</item>
       <item>CASCADE</item>
-      <item>CASE</item>
       <item>CATEGORY</item>
       <item>CHAINED</item>
       <item>CHANGE</item>
@@ -80,7 +99,6 @@
       <item>CLOSE</item>
       <item>CLOSE_CACHED_OPEN_CURSORS</item>
       <item>CLUSTER</item>
-      <item>COALESCE</item>
       <item>COLUMN</item>
       <item>COLUMNS</item>
       <item>COLUMN_VALUE</item>
@@ -101,6 +119,7 @@
       <item>CONSTRAINT</item>
       <item>CONSTRAINTS</item>
       <item>CONTAINER</item>
+      <item>CONTAINS</item>
       <item>CONTENTS</item>
       <item>CONTEXT</item>
       <item>CONTINUE</item>
@@ -149,11 +168,8 @@
       <item>DROP</item>
       <item>DYNAMIC</item>
       <item>EACH</item>
-      <item>ELSE</item>
-      <item>ELSIF</item>
       <item>EMPTY</item>
       <item>ENABLE</item>
-      <item>END</item>
       <item>ENFORCE</item>
       <item>ENTRY</item>
       <item>ESCAPE</item>
@@ -185,7 +201,6 @@
       <item>FLASHBACK</item>
       <item>FLUSH</item>
       <item>FOLLOWING</item>
-      <item>FOR</item>
       <item>FORCE</item>
       <item>FOREIGN</item>
       <item>FREELIST</item>
@@ -214,9 +229,7 @@
       <item>IDENTIFIER</item>
       <item>IDGENERATORS</item>
       <item>IDLE_TIME</item>
-      <item>IF</item>
       <item>IMMEDIATE</item>
-      <item>IN</item>
       <item>INCLUDING</item>
       <item>INCREMENT</item>
       <item>INCREMENTAL</item>
@@ -239,7 +252,6 @@
       <item>INTERSECT</item>
       <item>INTO</item>
       <item>INVALIDATE</item>
-      <item>IS</item>
       <item>ISOLATION</item>
       <item>ISOLATION_LEVEL</item>
       <item>JAVA</item>
@@ -254,7 +266,6 @@
       <item>LESS</item>
       <item>LEVEL</item>
       <item>LIBRARY</item>
-      <item>LIKE</item>
       <item>LIMIT</item>
       <item>LINK</item>
       <item>LIST</item>
@@ -268,7 +279,6 @@
       <item>LOGICAL_READS_PER_SESSION</item>
       <item>LOGOFF</item>
       <item>LOGON</item>
-      <item>LOOP</item>
       <item>MANAGE</item>
       <item>MANAGED</item>
       <item>MANAGEMENT</item>
@@ -345,7 +355,6 @@
       <item>NORMAL</item>
       <item>NOSEGMENT</item>
       <item>NOSORT</item>
-      <item>NOT</item>
       <item>NOTHING</item>
       <item>NOVALIDATE</item>
       <item>NOWAIT</item>
@@ -368,7 +377,6 @@
       <item>OPTIMAL</item>
       <item>OPTIMIZER_GOAL</item>
       <item>OPTION</item>
-      <item>OR</item>
       <item>ORDER</item>
       <item>ORGANIZATION</item>
       <item>OUT</item>
@@ -538,7 +546,6 @@
       <item>TEMPORARY</item>
       <item>THAN</item>
       <item>THE</item>
-      <item>THEN</item>
       <item>THREAD</item>
       <item>THROUGH</item>
       <item>TIMEOUT</item>
@@ -584,35 +591,13 @@
       <item>VALIDATION</item>
       <item>VALUES</item>
       <item>VIEW</item>
-      <item>WHEN</item>
       <item>WHENEVER</item>
       <item>WHERE</item>
-      <item>WHILE</item>
       <item>WITH</item>
       <item>WITHOUT</item>
       <item>WORK</item>
       <item>WRITE</item>
     </list>
-    <list name="operators">
-      <item>+</item>
-      <item>-</item>
-      <item>*</item>
-      <item>/</item>
-      <item>||</item>
-      <item>=</item>
-      <item>!=</item>
-      <item>&lt;&gt;</item>
-      <item>&lt;</item>
-      <item>&lt;=</item>
-      <item>&gt;</item>
-      <item>&gt;=</item>
-      <item>~=</item>
-      <item>^=</item>
-      <item>:=</item>
-      <item>=&gt;</item>
-      <item>**</item>
-      <item>..</item>
-    </list>
     <list name="functions">
       <item>ABS</item>
       <item>ACOS</item>
@@ -894,8 +879,18 @@
         <Detect2Chars attribute="Comment" context="Multiline C-style comment" char="/" char1="*" beginRegion="Comment"/>
         <RegExpr attribute="Comment" context="SQL*Plus remark directive" String="^rem\b" insensitive="true" column="0"/>
 
+        <LineContinue attribute="Symbol" context="#stay" char="/" column="0"/> <!-- conflict with "operators" keywords -->
         <keyword attribute="Keyword" String="keywords" context="#stay"/>
-        <keyword attribute="Operator" String="operators" context="#stay"/>
+        <LineContinue attribute="Symbol" context="#stay" char="/" column="0"/>
+        <keyword attribute="Operator Keyword" context="#stay" String="operators"/>
+        <keyword attribute="ControlFlow" context="#stay" String="controlFlow"/>
+        <AnyChar attribute="Operator" context="#stay" String="+-*/=&lt;&gt;"/>
+        <Detect2Chars attribute="Operator" context="#stay" char="!" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="~" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="^" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char=":" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="." char1="."/>
+        <Detect2Chars attribute="Operator" context="#stay" char="|" char1="|"/>
         <keyword attribute="Function" String="functions" context="#stay"/>
         <keyword attribute="Data Type" String="types" context="#stay"/>
 
@@ -911,7 +906,6 @@
 
         <DetectChar attribute="Identifier" context="User-defined identifier" char="&quot;"/>
         <RegExpr attribute="External Variable" context="#stay" String="(:|&amp;&amp;?)\w+"/>
-        <RegExpr attribute="Symbol" context="#stay" String="^/$" column="0"/>
         <RegExpr attribute="Preprocessor" context="SQL*Plus directive to include file" String="^@@?[^@ \t\r\n]" column="0"/>
       </context>
       <context name="String literal" attribute="String" lineEndContext="#stay">
@@ -932,21 +926,23 @@
       <context name="SQL*Plus directive to include file" attribute="Preprocessor" lineEndContext="#pop"/>
     </contexts>
     <itemDatas>
-      <itemData name="Normal Text"       defStyleNum="dsNormal"/>
-      <itemData name="Keyword"           defStyleNum="dsKeyword"/>
-      <itemData name="Operator"          defStyleNum="dsNormal"/>
-      <itemData name="Function"          defStyleNum="dsFunction"/>
-      <itemData name="Data Type"         defStyleNum="dsDataType"/>
-      <itemData name="Decimal"           defStyleNum="dsDecVal"/>
-      <itemData name="Hex"               defStyleNum="dsBaseN"/>
-      <itemData name="Float"             defStyleNum="dsFloat"/>
+      <itemData name="Normal Text"       defStyleNum="dsNormal" spellChecking="false"/>
+      <itemData name="Keyword"           defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="ControlFlow"       defStyleNum="dsControlFlow" spellChecking="false"/>
+      <itemData name="Operator"          defStyleNum="dsOperator" spellChecking="false"/>
+      <itemData name="Operator Keyword"  defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="Function"          defStyleNum="dsFunction" spellChecking="false"/>
+      <itemData name="Data Type"         defStyleNum="dsDataType" spellChecking="false"/>
+      <itemData name="Decimal"           defStyleNum="dsDecVal" spellChecking="false"/>
+      <itemData name="Hex"               defStyleNum="dsBaseN" spellChecking="false"/>
+      <itemData name="Float"             defStyleNum="dsFloat" spellChecking="false"/>
       <itemData name="String"            defStyleNum="dsString"/>
-      <itemData name="String Char"       defStyleNum="dsChar"/>
+      <itemData name="String Char"       defStyleNum="dsChar" spellChecking="false"/>
       <itemData name="Comment"           defStyleNum="dsComment"/>
-      <itemData name="Identifier"        defStyleNum="dsOthers"/>
-      <itemData name="External Variable" defStyleNum="dsChar"/>
-      <itemData name="Symbol"            defStyleNum="dsChar"/>
-      <itemData name="Preprocessor"      defStyleNum="dsOthers"/>
+      <itemData name="Identifier"        defStyleNum="dsOthers" spellChecking="false"/>
+      <itemData name="External Variable" defStyleNum="dsChar" spellChecking="false"/>
+      <itemData name="Symbol"            defStyleNum="dsChar" spellChecking="false"/>
+      <itemData name="Preprocessor"      defStyleNum="dsOthers" spellChecking="false"/>
     </itemDatas>
   </highlighting>
   <general>
@@ -954,6 +950,6 @@
       <comment name="singleLine" start="--"/>
       <comment name="multiLine" start="/*" end="*/"/>
     </comments>
-    <keywords casesensitive="0" weakDeliminator="+-*/|=!&lt;&gt;~^:."/>
+    <keywords casesensitive="0"/>
   </general>
 </language>
diff --git a/xml/tcl.xml b/xml/tcl.xml
--- a/xml/tcl.xml
+++ b/xml/tcl.xml
@@ -28,7 +28,7 @@
 	    - Fixed detection of varaibles with names containing serval namespace delimiters (::)
 -->
 
-<language name="Tcl/Tk" version="3" kateversion="2.4" section="Scripts" extensions="*.tcl;*.tk" mimetype="text/x-tcl" license="BSD">
+<language name="Tcl/Tk" version="4" kateversion="2.4" section="Scripts" extensions="*.tcl;*.tk" mimetype="text/x-tcl" license="BSD">
   <highlighting>
     <list name="keywords">
       <item>after</item>
@@ -511,8 +511,8 @@
         <RegExpr String = "\$(::|\w)+" attribute = "Variable" context="#stay"/>
         
         <!-- Strings -->
-        <RegExpr String = "&quot;{2}" attribute = "String" context="#stay"/>
-        <RegExpr String = "&quot;" attribute = "String" context="String"/>
+        <Detect2Chars char = "&quot;" char1 = "&quot;" attribute = "String" context="#stay"/>
+        <DetectChar char = "&quot;" attribute = "String" context="String"/>
         
         <!-- Comments -->
         <DetectChar char = ";" attribute = "Normal Text" context="New command line" />
diff --git a/xml/vhdl.xml b/xml/vhdl.xml
--- a/xml/vhdl.xml
+++ b/xml/vhdl.xml
@@ -8,7 +8,7 @@
   <!ENTITY label     "((&varname;)\s*:\s*)?">
 
 ]>
-<language name="VHDL" version="5" kateversion="3.0" section="Hardware" extensions="*.vhdl;*.vhd" mimetype="text/x-vhdl" author="Rocky Scaletta (rocky@purdue.edu), Stefan Endrullis (stefan@endrullis.de), Florent Ouchet (outchy@users.sourceforge.net), Chris Higgs (chiggs.99@gmail.com), Jan Michel (jan@mueschelsoft.de), Luigi Calligaris (luigi.calligaris@stfc.ac.uk)">
+<language name="VHDL" version="6" kateversion="3.0" section="Hardware" extensions="*.vhdl;*.vhd" mimetype="text/x-vhdl" author="Rocky Scaletta (rocky@purdue.edu), Stefan Endrullis (stefan@endrullis.de), Florent Ouchet (outchy@users.sourceforge.net), Chris Higgs (chiggs.99@gmail.com), Jan Michel (jan@mueschelsoft.de), Luigi Calligaris (luigi.calligaris@stfc.ac.uk)">
   <highlighting>
     <list name="keywordsToplevel">
       <item>file</item>
@@ -508,10 +508,8 @@
 
       <context name="caseWhen2" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
         <IncludeRules context="preDetection"/>
-        <RegExpr attribute="Control" context="#pop#pop" lookAhead="true" insensitive="true" endRegion="CaseWhenRegion1"
-                 String="^\s*when&eos;"/>
-        <RegExpr attribute="Control" context="#pop#pop" lookAhead="true" insensitive="true" endRegion="CaseWhenRegion1"
-                 String="^\s*end\s+case&eos;"/>
+        <RegExpr attribute="Control" context="#pop#pop" lookAhead="true" insensitive="true" endRegion="CaseWhenRegion1" firstNonSpace="true"
+                 String="(when|end\s+case)&eos;"/>
         <IncludeRules context="proc_rules"/>
       </context>
       <!-- 'when' and 'end case' are checked at the beginning of the line for better code folding -->
@@ -536,8 +534,8 @@
                  String="&bos;end(\s+(entity|component))?(\s+%1)?\s*;"/>
         <RegExpr attribute="Error" context="#pop#pop" dynamic="true" insensitive="true" endRegion="EntityRegion1"
                  String="&bos;end(\s+(entity|component))?(\s+&varname;)?\s*;"/>
-        <RegExpr attribute="Control" context="#stay" insensitive="true" String="generic"/>
-        <RegExpr attribute="Control" context="#stay" insensitive="true" String="port"/>
+        <StringDetect attribute="Control" context="#stay" insensitive="true" String="generic"/>
+        <StringDetect attribute="Control" context="#stay" insensitive="true" String="port"/>
         <IncludeRules context="generalDetection"/>
       </context>
 
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="7" kateversion="3.4" section="Markup" extensions="*.docbook;*.xml;*.rc;*.daml;*.rdf;*.rss;*.xspf;*.xsd;*.svg;*.ui;*.kcfg;*.qrc;*.wsdl;*.scxml;*.xbel;*.dae" 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" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
+<language name="XML" version="9" kateversion="3.4" 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>
@@ -145,6 +145,5 @@
   <comments>
     <comment name="multiLine" start="&lt;!--" end="--&gt;" />
   </comments>
-  <indentation mode="xml" />
 </general>
 </language>
diff --git a/xml/xul.xml b/xml/xul.xml
--- a/xml/xul.xml
+++ b/xml/xul.xml
@@ -4,7 +4,7 @@
 	<!ENTITY name    "[A-Za-z_:][\w.:_-]*">
 	<!ENTITY entref  "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
 ]>
-        <language name="XUL" version="4" kateversion="2.4" section="Markup" extensions="*.xul;*.xbl" mimetype="text/xul" casesensitive="1" author="Wilbert Berendsen (wilbert@kde.nl), Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net), Marc Dassonneville (marc.dassonneville@gmail.com)" license="LGPL">
+<language name="XUL" version="5" kateversion="5.0" section="Markup" extensions="*.xul;*.xbl" mimetype="text/xul" casesensitive="1" indenter="xml" author="Wilbert Berendsen (wilbert@kde.nl), Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net), Marc Dassonneville (marc.dassonneville@gmail.com)" license="LGPL">
 
 <highlighting>
    <list name="keywords">
@@ -619,7 +619,6 @@
     <comment name="singleLine" start="//" />
     <comment name="multiLine" start="/*" end="*/" />
   </comments>
-  <indentation mode="xml" />
   <keywords casesensitive="1" />
 </general>
 </language>
diff --git a/xml/yaml.xml b/xml/yaml.xml
--- a/xml/yaml.xml
+++ b/xml/yaml.xml
@@ -1,21 +1,55 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+  <!ENTITY null "(null|Null|NULL|~)">
+  <!ENTITY bool "(y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)">
+
+  <!ENTITY int         "(0|[\-\+]?[1-9][0-9_]*)">
+  <!ENTITY intOther    "[\-\+]?0(x_*[0-9a-fA-F][0-9a-fA-F_]*|o?_*[0-7][0-7_]*|b_*[01][01_]*)"> <!-- Hex, Octal, Binary -->
+  <!ENTITY intBase60   "[\-\+]?[1-9][0-9_]*(:[0-5]?[0-9])+">
+  <!ENTITY allInt      "(&intBase60;|&intOther;|&int;)">
+
+  <!ENTITY float       "[\-\+]?([0-9][0-9_]*\.[0-9\._]*|\._*[0-9][0-9\._]*)([eE][\-\+]?[0-9]+)?">
+  <!ENTITY floatExp    "[\-\+]?[0-9][0-9_]*[eE][\-\+]?[0-9]+">
+  <!ENTITY floatBase60 "[\-\+]?[0-9][0-9_]*(:[0-5]?[0-9])+\.[0-9_]*">
+  <!ENTITY inf         "[\-\+]?\.(inf|Inf|INF)\b">
+  <!ENTITY nan         "\.(nan|NaN|NAN)\b">
+  <!ENTITY allFloat    "(&float;|&floatExp;|&floatBase60;|&inf;|&nan;)">
+
+  <!ENTITY endValue       "(?:\s*$|\s+#)">
+  <!ENTITY endValueInline "\s*[:,\[\]\{\}]">
+  <!ENTITY space          "[ ]">
+
+  <!-- Key quoted -->
+  <!ENTITY keyDQ          "&quot;(?:\\.|[^&quot;])+&quot;\s*">
+  <!ENTITY keySQ          "'(?:[^']|'')+'\s*">
+  <!-- Literal/folded operator -->
+  <!ENTITY literalOp      "[\|&gt;][\-\+]?">
+  <!-- Key after "?" or "-", used to detect literal/folded operator -->
+  <!ENTITY keyAfterOp     "(?:[^&quot;'#\-\?\s][^:#]*|\-(?:[^\s:#][^:#]*)?|&keyDQ;|&keySQ;)">
+]>
+
 <!-- Author: Dr Orlovsky MA <maxim@orlovsky.info> //-->
-<language name="YAML" version="3" kateversion="5.0" section="Markup"
+<!-- Modifications, values & support for literal/folded style:
+       Nibaldo González S. <nibgonz@gmail.com> //-->
+<language name="YAML" version="5" kateversion="5.0" section="Markup"
           extensions="*.yaml;*.yml" mimetype="text/yaml"
           author="Dr Orlovsky MA (dr.orlovsky@gmail.com)" license="LGPL">
   <highlighting>
     <contexts>
       <context attribute="Normal Text" lineEndContext="#stay" name="normal" >
-        <RegExpr attribute="Document Header" context="header" String="^---"/>
+        <StringDetect attribute="Document Header" context="header" String="---" column="0"/>
         <RegExpr attribute="End of Document" context="EOD" String="^\.\.\.$"/>
-        <RegExpr attribute="Directive" context="directive" String="^%"/>
+        <DetectChar attribute="Directive" context="directive" char="%" column="0"/>
 
-        <DetectSpaces/>
         <DetectChar attribute="Comment" context="comment" char="#" />
 
-        <DetectChar attribute="Operator" firstNonSpace="true"  context="dash" char="-" />
+        <!-- Literal/Folded Style -->
+        <IncludeRules context="find-literal-block" />
 
+        <RegExpr attribute="Operator" firstNonSpace="true" context="dash" String="\-(?=\s|$)" />
+        <DetectChar attribute="Operator" firstNonSpace="true" context="mapping-key" char="?" />
+
         <DetectChar attribute="Operator" context="list" char="[" beginRegion="List" />
         <DetectChar attribute="Operator" context="hash" char="{" beginRegion="Hash" />
 
@@ -23,26 +57,40 @@
         <RegExpr attribute="Alias" firstNonSpace="true" context="#stay" String="&amp;\S+" />
         <RegExpr attribute="Reference" firstNonSpace="true" context="#stay" String="\*\S+" />
 
-        <RegExpr attribute="Key" context="attribute-pre" String="\??\s*[^&quot;'#-][^:#]*:"/>
-        <RegExpr attribute="Key" context="attribute-pre" String="\??\s*&quot;[^&quot;#]+&quot;\s*:"/>
-        <RegExpr attribute="Key" context="attribute-pre" String="\??\s*'[^'#]+'\s*:"/>
+        <RegExpr attribute="Key" context="attribute-pre" String="[^&quot;'#\-\s][^:#]*:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="attribute-pre" String="\-([^\s:#][^:#]*)?\:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="attribute-pre" String="&keyDQ;:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="attribute-pre" String="&keySQ;:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="attribute-pre" String=":(?=\s|$)"/>
 
         <DetectChar attribute="String" context="string" char="'" beginRegion="String" />
         <DetectChar attribute="String" context="stringx" char="&quot;" beginRegion="String" />
+        <IncludeRules context="values-firstnonspace" />
+        <DetectSpaces/>
       </context>
 
-      <context attribute="List" lineEndContext="#pop" name="dash">
+      <context attribute="Normal Text" lineEndContext="#pop" name="mapping-key" fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces />
+        <RegExpr attribute="Operator" context="#pop!dash" String="\-(?=\s|$)" />
+        <RegExpr attribute="Data Types" context="#pop" String="!!\S+" />
+        <RegExpr attribute="Alias" context="#pop" String="&amp;\S+" />
+        <RegExpr attribute="Reference" context="#pop" String="\*\S+" />
+      </context>
+
+      <context attribute="List" lineEndContext="#pop" name="dash" fallthrough="true" fallthroughContext="#pop">
         <DetectSpaces/>
         <DetectChar attribute="Comment" context="comment" char="#" />
-        <RegExpr attribute="Data Types" context="#stay" String="null$" />
         <RegExpr attribute="Data Types" context="#stay" String="!!\S+" />
         <RegExpr attribute="Alias" context="#stay" String="&amp;\S+" />
         <RegExpr attribute="Reference" context="#stay" String="\*\S+" />
-        <RegExpr attribute="Normal Text" lookAhead="true" context="#pop" String="." />
+        <IncludeRules context="values" />
+        <DetectChar attribute="Operator" context="#pop!mapping-key" char="?" />
+        <RegExpr attribute="Operator" context="#stay" String="\-(?=\s|$)" />
       </context>
 
       <context attribute="Document Header" lineEndContext="#pop" name="header">
         <DetectChar attribute="Comment" context="comment" char="#" />
+        <RegExpr attribute="Literal/Folded Operator" context="#pop!literal-block-simple" String="&literalOp;(?=&endValue;)" beginRegion="Literal" />
       </context>
 
       <context attribute="End of Document" lineEndContext="#stay" name="EOD">
@@ -55,120 +103,437 @@
         <DetectChar attribute="Comment" context="comment" char="#" />
       </context>
 
-      <context attribute="Attribute" lineEndContext="#stay" name="attribute-inline">
-        <DetectChar attribute="Operator" context="#pop#pop" char="," />
-        <DetectChar attribute="Operator" context="#pop#pop" lookAhead="true" char="}" />
+      <context attribute="Attribute" lineEndContext="#stay" name="list-attribute-inline">
+        <AnyChar attribute="Operator" context="#pop#pop" lookAhead="true" String=",]" />
         <DetectChar attribute="Comment" context="comment" char="#" />
       </context>
+      <context attribute="Attribute" lineEndContext="#stay" name="hash-attribute-inline">
+        <AnyChar attribute="Operator" context="#pop#pop" lookAhead="true" String=",}" />
+        <DetectChar attribute="Comment" context="comment" char="#" />
+      </context>
 
-      <context attribute="Attribute" lineEndContext="#pop" name="attribute-pre">
+      <context attribute="Attribute" lineEndContext="#pop" name="attribute-pre" fallthrough="true" fallthroughContext="attribute">
         <DetectSpaces/>
         <DetectChar attribute="Comment" context="comment" char="#" />
-        <RegExpr attribute="Data Types" context="#stay" String="null$" />
+        <DetectChar attribute="Operator" context="#stay" char="?" />
         <RegExpr attribute="Data Types" context="#stay" String="!!\S+" />
         <DetectChar attribute="Operator" context="list" char="[" beginRegion="List" />
         <DetectChar attribute="Operator" context="hash" char="{" beginRegion="Hash" />
         <DetectChar attribute="String" context="attribute-string" char="'" beginRegion="String" />
         <DetectChar attribute="String" context="attribute-stringx" char="&quot;" beginRegion="String" />
+        <RegExpr attribute="Alias" context="#stay" String="&amp;\S+(?=\s+[\[\{])" />
+        <RegExpr attribute="Reference" context="#stay" String="\*\S+(?=\s+[\[\{])" />
         <RegExpr attribute="Alias" context="attribute" String="&amp;\S+" />
         <RegExpr attribute="Reference" context="attribute" String="\*\S+" />
-        <RegExpr attribute="Attribute" context="attribute" String="." />
+        <IncludeRules context="values" />
       </context>
 
-      <context attribute="Attribute" lineEndContext="#pop" name="attribute-pre-inline">
+      <context attribute="Attribute" lineEndContext="#pop" name="default-attribute-pre-inline">
         <DetectSpaces/>
         <DetectChar attribute="Comment" context="comment" char="#" />
 
-        <StringDetect attribute="Data Types" context="#stay" String="null" />
+        <DetectChar attribute="Operator" context="#stay" char="?" />
         <RegExpr attribute="Data Types" context="#stay" String="!!\S+" />
         <DetectChar attribute="Operator" context="list" char="[" beginRegion="List" />
         <DetectChar attribute="Operator" context="hash" char="{" beginRegion="Hash" />
         <DetectChar attribute="String" context="attribute-string-inline" char="'" beginRegion="String" />
         <DetectChar attribute="String" context="attribute-stringx-inline" char="&quot;" beginRegion="String" />
-        <RegExpr attribute="Alias" context="attribute-inline" String="&amp;\S+" />
-        <RegExpr attribute="Reference" context="attribute-inline" String="\*\S+" />
+        <RegExpr attribute="Alias" context="#stay" String="&amp;\S+(?=\s+[\[\{])" />
+        <RegExpr attribute="Reference" context="#stay" String="\*\S+(?=\s+[\[\{])" />
+      </context>
 
-        <DetectChar attribute="Operator" context="#pop" char="," />
-        <DetectChar attribute="Operator" context="#pop" lookAhead="true" char="}" />
-        <RegExpr attribute="Attribute" context="attribute-inline" String="." />
+      <context attribute="Attribute" lineEndContext="#pop" name="list-attribute-pre-inline" fallthrough="true" fallthroughContext="list-attribute-inline">
+        <IncludeRules context="default-attribute-pre-inline" />
+        <RegExpr attribute="Alias" context="list-attribute-inline" String="&amp;\S+" />
+        <RegExpr attribute="Reference" context="list-attribute-inline" String="\*\S+" />
+
+        <AnyChar attribute="Operator" context="#pop" lookAhead="true" String=",]" />
+        <IncludeRules context="values-inline" />
       </context>
+      <context attribute="Attribute" lineEndContext="#pop" name="hash-attribute-pre-inline" fallthrough="true" fallthroughContext="hash-attribute-inline">
+        <IncludeRules context="default-attribute-pre-inline" />
+        <RegExpr attribute="Alias" context="hash-attribute-inline" String="&amp;\S+" />
+        <RegExpr attribute="Reference" context="hash-attribute-inline" String="\*\S+" />
 
-      <context attribute="List" lineEndContext="#stay" name="list">
-        <DetectSpaces/>
+        <AnyChar attribute="Operator" context="#pop" lookAhead="true" String=",}" />
+        <IncludeRules context="values-inline" />
+      </context>
+
+      <!-- Context "find-values-list" highlights values and then sends to "list-element" -->
+      <context attribute="List" lineEndContext="#stay" name="list" fallthrough="true" fallthroughContext="#pop!find-values-list">
+        <DetectSpaces />
+        <DetectChar attribute="Operator" context="#pop!find-values-list" char="?" />
         <DetectChar attribute="Comment" context="comment" char="#" />
+      </context>
+      <context attribute="List" lineEndContext="#stay" name="list-element">
+        <DetectChar attribute="Comment" context="comment" char="#" />
 
         <DetectChar attribute="Operator" context="#pop" char="]" endRegion="List" />
+        <DetectChar attribute="Operator" context="list" char="[" beginRegion="List" />
+        <DetectChar attribute="Operator" context="hash" char="{" beginRegion="Hash" />
 
-        <RegExpr attribute="Key" context="attribute-pre" String="\??\s*[^&quot;'#-][^:#]*:"/>
-        <RegExpr attribute="Key" context="attribute-pre" String="\??\s*&quot;[^&quot;#]+&quot;\s*:"/>
-        <RegExpr attribute="Key" context="attribute-pre" String="\??\s*'[^'#]+'\s*:"/>
+        <RegExpr attribute="Key" context="list-attribute-pre-inline" String="[^&quot;'#\-,\]\s][^:#,\]]*:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="list-attribute-pre-inline" String="\-([^\s:#,\]][^:#,\]]*)?\:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="list-attribute-pre-inline" String="&keyDQ;:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="list-attribute-pre-inline" String="&keySQ;:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="list-attribute-pre-inline" String=":(?=\s|$)" firstNonSpace="true" />
 
-        <StringDetect attribute="Data Types" context="#stay" String="null" />
         <RegExpr attribute="Data Types" context="#stay" String="!!\S+" />
-        <DetectChar attribute="Operator" context="list" char="[" beginRegion="List" />
-        <DetectChar attribute="Operator" context="hash" char="{" beginRegion="Hash" />
         <RegExpr attribute="Alias" context="#stay" String="&amp;\S+" />
         <RegExpr attribute="Reference" context="#stay" String="\*\S+" />
         <DetectChar attribute="String" context="string" char="'" beginRegion="String" />
         <DetectChar attribute="String" context="stringx" char="&quot;" beginRegion="String" />
 
-        <DetectChar attribute="Operator" context="#stay" char="," />
+        <DetectChar attribute="Operator" context="#pop!list" char="," />
+        <IncludeRules context="values-list" />
       </context>
 
-      <context attribute="Hash" lineEndContext="#stay" name="hash">
+      <context attribute="Hash" lineEndContext="#stay" name="hash" fallthrough="true" fallthroughContext="#pop!hash-element">
+        <DetectSpaces />
+        <DetectChar attribute="Operator" context="#pop!hash-element" char="?" />
+        <DetectChar attribute="Comment" context="comment" char="#" />
+      </context>
+      <context attribute="Hash" lineEndContext="#stay" name="hash-element">
         <DetectSpaces/>
         <DetectChar attribute="Comment" context="comment" char="#" />
 
-        <RegExpr attribute="Key" context="attribute-pre-inline" String="\??\s*[^&quot;'#-][^:#]*:"/>
-        <RegExpr attribute="Key" context="attribute-pre-inline" String="\??\s*&quot;[^&quot;#]+&quot;\s*:"/>
-        <RegExpr attribute="Key" context="attribute-pre-inline" String="\??\s*'[^'#]+'\s*:"/>
+        <RegExpr attribute="Key" context="hash-attribute-pre-inline" String="[^\s&quot;'#\-,\}\s][^:#,\}]*:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="hash-attribute-pre-inline" String="\-([^\s:#,\}][^:#,\}]*)?\:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="hash-attribute-pre-inline" String="&keyDQ;:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="hash-attribute-pre-inline" String="&keySQ;:(?=\s|$)"/>
+        <RegExpr attribute="Key" context="hash-attribute-pre-inline" String=":(?=\s|$)"/>
 
         <DetectChar attribute="Operator" context="#pop" char="}" endRegion="Hash" />
+        <DetectChar attribute="Operator" context="#pop!hash" char="," />
+
+        <!-- This improves highlighting in keys with multiple lines -->
+        <RegExpr attribute="Data Types" context="#stay" String="!!\S+" />
+        <RegExpr attribute="Alias" context="#stay" String="&amp;\S+" />
+        <RegExpr attribute="Reference" context="#stay" String="\*\S+" />
+        <DetectChar attribute="String" context="string" char="'" beginRegion="String" />
+        <DetectChar attribute="String" context="stringx" char="&quot;" beginRegion="String" />
       </context>
 
       <context attribute="String" lineEndContext="#stay" name="attribute-string">
         <DetectIdentifier />
+        <IncludeRules context="escaped-char-singleq" />
         <DetectChar attribute="String" context="attribute-end" char="'" endRegion="String" />
       </context>
 
       <context attribute="String" lineEndContext="#stay" name="attribute-stringx">
         <DetectIdentifier />
+        <IncludeRules context="escaped-char-doubleq" />
         <DetectChar attribute="String" context="attribute-end" char="&quot;" endRegion="String" />
       </context>
 
       <context attribute="String" lineEndContext="#stay" name="attribute-string-inline">
           <DetectIdentifier />
+          <IncludeRules context="escaped-char-singleq" />
           <DetectChar attribute="String" context="attribute-end-inline" char="'" endRegion="String" />
       </context>
 
       <context attribute="String" lineEndContext="#stay" name="attribute-stringx-inline">
           <DetectIdentifier />
+          <IncludeRules context="escaped-char-doubleq" />
           <DetectChar attribute="String" context="attribute-end-inline" char="&quot;" endRegion="String" />
       </context>
 
       <context attribute="Error" lineEndContext="#pop#pop#pop" name="attribute-end">
+          <DetectSpaces attribute="Normal Text" context="#stay"/>
+          <DetectChar attribute="Comment" context="comment" char="#" />
       </context>
 
       <context attribute="Error" lineEndContext="#pop#pop#pop" name="attribute-end-inline">
-          <RegExpr attribute="Normal Text" context="#stay" String="\s*"/>
-          <DetectChar attribute="String" context="#pop#pop#pop"  lookAhead="true" char="}"/>
-          <RegExpr attribute="Operator" context="#pop#pop#pop"  String=",\s"/>
+          <DetectSpaces attribute="Normal Text" context="#stay"/>
+          <AnyChar attribute="String" context="#pop#pop#pop"  lookAhead="true" String="}]"/>
+          <DetectChar attribute="Operator" context="#pop#pop#pop" lookAhead="true" char="," />
+          <DetectChar attribute="Comment" context="comment" char="#" />
       </context>
 
       <context attribute="String" lineEndContext="#stay" name="string">
         <DetectIdentifier />
+        <IncludeRules context="escaped-char-singleq" />
         <DetectChar attribute="String" context="#pop" char="'" endRegion="String" />
       </context>
 
       <context attribute="String" lineEndContext="#stay" name="stringx">
         <DetectIdentifier />
+        <IncludeRules context="escaped-char-doubleq" />
         <DetectChar attribute="String" context="#pop" char="&quot;" endRegion="String" />
       </context>
 
+      <context attribute="Normal Text" lineEndContext="#stay" name="escaped-char-doubleq">
+        <RegExpr attribute="Escaped Character" context="#stay" String="\\([\s0abtnvfre&quot;/\\N_Lp]|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="escaped-char-singleq">
+        <Detect2Chars attribute="Escaped Character" context="#stay" char="'" char1="'" />
+      </context>
+
       <context attribute="Comment" lineEndContext="#pop" name="comment">
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
       </context>
+
+      <!-- Values -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="values">
+        <RegExpr attribute="Null" context="#stay" String="&null;(?=&endValue;)"/>
+        <RegExpr attribute="Boolean" context="#stay" String="&bool;(?=&endValue;)"/>
+        <RegExpr attribute="Float" context="#stay" String="&allFloat;(?=&endValue;)"/>
+        <RegExpr attribute="Integer" context="#stay" String="&allInt;(?=&endValue;)"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="values-firstnonspace">
+        <RegExpr attribute="Null" firstNonSpace="true" context="#stay" String="&null;(?=&endValue;)"/>
+        <RegExpr attribute="Boolean" firstNonSpace="true" context="#stay" String="&bool;(?=&endValue;)"/>
+        <RegExpr attribute="Float" firstNonSpace="true" context="#stay" String="&allFloat;(?=&endValue;)"/>
+        <RegExpr attribute="Integer" firstNonSpace="true" context="#stay" String="&allInt;(?=&endValue;)"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="values-inline">
+        <RegExpr attribute="Null" context="#stay" String="&null;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Boolean" context="#stay" String="&bool;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Float" context="#stay" String="&allFloat;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Integer" context="#stay" String="&allInt;(?=&endValueInline;|&endValue;)"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="values-list">
+        <RegExpr attribute="Null" context="#stay" String="(\s|^)&null;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Boolean" context="#stay" String="(\s|^)&bool;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Float" context="#stay" String="(\s|^)&allFloat;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Integer" context="#stay" String="(\s|^)&allInt;(?=&endValueInline;|&endValue;)"/>
+      </context>
+      <!-- If the value is found immediately at the beginning of the list item -->
+      <context attribute="Normal Text" lineEndContext="#pop!list-element" name="find-values-list" fallthrough="true" fallthroughContext="#pop!list-element">
+        <RegExpr attribute="Null" context="#pop!list-element" String="&null;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Boolean" context="#pop!list-element" String="&bool;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Float" context="#pop!list-element" String="&allFloat;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Integer" context="#pop!list-element" String="&allInt;(?=&endValueInline;|&endValue;)"/>
+      </context>
+
+      <!-- Literal/Folded Style: http://yaml.org/spec/1.2/spec.html#id2795688 -->
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="find-literal-block">
+        <!-- Do not allow indentation with tabs: -->
+        <RegExpr attribute="Alert" context="#stay" column="0"
+                 String="^&space;*\t+\s*(?=((&keyDQ;|&keySQ;|[^#])*[^#\w\|&lt;&gt;&quot;'])?&literalOp;&endValue;)" />
+
+        <!-- CASE 1: The literal/folded operator is the first character of a line.
+             The text after a space is considered literal.
+             Ex:
+             > |
+             >  ^Start the literal text
+        -->
+        <RegExpr attribute="Literal/Folded Operator" context="literal-block-simple" column="0"
+                 String="^&literalOp;(?=&endValue;)" beginRegion="Literal" />
+
+        <!-- CASE 2: Only the literal/folded operator is present in a line, after a space (the indentation
+             is captured). The text with the same indentation of the operator will be highlighted as literal.
+             Ex:
+             >  key:
+             >    |
+             >    ^Start the literal text
+
+             However, in this case, the correct way is to use the indentation of the block, not the
+             indentation of the the operator. The problem is that it is difficult to capture.
+             >  key1:
+             >   key2:
+             >    key3:
+             >          |
+             >     ^Block indentation (correct literal text)
+        -->
+        <RegExpr attribute="Literal/Folded Operator" context="literal-block-only-operator" column="0"
+                 String="^(&space;+)&literalOp;(?=&endValue;)" beginRegion="Literal" />
+
+        <!-- CASE 3: There is a Key before the literal/folded operator (Key indentation is captured).
+             The text with the Key's indentation plus a space is considered literal.
+             Ex:
+             >    key: |
+             >     ^Start the literal text
+             >  key: !!type >-
+             >   ^Start the folded text
+        -->
+        <RegExpr attribute="Key" context="literal-block-key" column="0"
+                 String="^(&space;*)(?:[^&quot;'#\-\?\s][^:#]*|\-(?:[^\s:#][^:#]*)?|&keyDQ;|&keySQ;)?\:(?=\s+(?:(?:&keyDQ;|&keySQ;|[^#])*[^#\w\|&lt;&gt;&quot;'])?&literalOp;&endValue;)" />
+
+        <!-- CASE 4: Is there an operator "?" or "-" at the beginning of the line.
+             NOTE: Nested characters "-" and "?" are considered as part of the indentation.
+             Therefore, the indentation of the Key or the last operator "?" or "-" is captured.
+             Ex:
+             >  ? |
+             >   ^Start the literal Text
+             >  ? - - |
+             >       ^Start the literal text
+             >  - Key: |
+             >     ^Start the literal text
+             >  ? - - - - Key: |
+             >             ^Start the literal text
+        -->
+        <RegExpr context="start-literal-block-withdash" lookAhead="true" column="0"
+                 String="^&space;*(\?&space;*|\-&space;+){1,6}((&keyDQ;|&keySQ;|[^#\-\?\s]|\-[^\s#])((&keyDQ;|&keySQ;|[^#])*[^#\w\|&lt;&gt;&quot;'])?)?&literalOp;&endValue;" />
+
+        <!-- CASE 5: Literal/folded operator after a data type or other content.
+             Ex:
+             >  !!type |
+             >   ^Start the literal text
+             >  key1:
+             >   key2:
+             >    !!type |
+             >    ^Start the literal text
+        -->
+        <RegExpr context="start-literal-block-other" lookAhead="true" column="0"
+                 String="^&space;*(([&amp;\*]|!!)\S+\s+)+&literalOp;&endValue;" />
+      </context>
+
+      <!-- If the line with the literal operator starts with the "-" or "?" operator.
+           NOTE: The indentation capture is limited to 6 nested operators. -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="start-literal-block-withdash">
+        <!-- With Key: Capture the Key indentation -->
+        <RegExpr attribute="Operator" context="#pop!literal-block-key-withdash-s2" String="^(&space;*)[\?\-](&space;*)(?=&keyAfterOp;:\s)" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-key-withdash-s3" String="^(&space;*)[\?\-](&space;*)[\?\-](&space;*)(?=&keyAfterOp;:\s)" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-key-withdash-s4" String="^(&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)(?=&keyAfterOp;:\s)" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-key-withdash-s5" String="^(&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)(?=&keyAfterOp;:\s)" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-key-withdash-s6" String="^(&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)(?=&keyAfterOp;:\s)" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-key-withdash-s7" String="^(&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)(?=&keyAfterOp;:\s)" column="0"/>
+        <!-- Without Key: Capture the indentation of the last operator "?" or "-" -->
+        <RegExpr attribute="Operator" context="#pop!literal-block-withdash-s1" String="^(&space;*)[\?\-]\s*(?=[^#\-\?\s]|\-[^\s#])" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-withdash-s2" String="^(&space;*)[\?\-](&space;*)[\?\-]\s*(?=[^#\-\?\s]|\-[^\s#])" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-withdash-s3" String="^(&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-]\s*(?=[^#\-\?\s]|\-[^\s#])" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-withdash-s4" String="^(&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-]\s*(?=[^#\-\?\s]|\-[^\s#])" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-withdash-s5" String="^(&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-]\s*(?=[^#\-\?\s]|\-[^\s#])" column="0"/>
+        <RegExpr attribute="Operator" context="#pop!literal-block-withdash-s6" String="^(&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-](&space;*)[\?\-]\s*(?=[^#\-\?\s]|\-[^\s#])" column="0"/>
+      </context>
+      <!-- Capture the indentation of data type, reference or alias  -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="start-literal-block-other">
+        <!-- The text with the same indentation will be considered literal -->
+        <RegExpr attribute="Data Types" context="#pop!literal-block-after-data" String="^(&space;+)!!\S+" column="0" />
+        <RegExpr attribute="Alias" context="#pop!literal-block-after-data" String="^(&space;+)&amp;\S+" column="0" />
+        <RegExpr attribute="Reference" context="#pop!literal-block-after-data" String="^(&space;+)\*\S+" column="0" />
+        <!-- The text after a space will be considered literal (empty text is captured) -->
+        <RegExpr attribute="Data Types" context="#pop!literal-block-withdash-s1" String="^()!!\S+" column="0" />
+        <RegExpr attribute="Alias" context="#pop!literal-block-withdash-s1" String="^()&amp;\S+" column="0" />
+        <RegExpr attribute="Reference" context="#pop!literal-block-withdash-s1" String="^()\*\S+" column="0" />
+      </context>
+
+      <!-- Highlight data/attribute before the literal operator (Note that if there is a line
+           break within a string or bracket, the literal line will not be highlighted). -->
+      <context attribute="Normal Text" lineEndContext="#pop#pop" name="before-literal-operator">
+        <RegExpr attribute="Literal/Folded Operator" context="#pop!end-literal-operator" String="&literalOp;(?=&endValue;)" beginRegion="Literal" />
+
+        <RegExpr attribute="Error" context="#pop#pop" String="([&amp;\*]|!!)\S*&literalOp;(?=&endValue;)" />
+        <RegExpr attribute="Data Types" context="#stay" String="!!\S+" />
+        <RegExpr attribute="Alias" context="#stay" String="&amp;\S+" />
+        <RegExpr attribute="Reference" context="#stay" String="\*\S+" />
+
+        <DetectChar attribute="Operator" context="list" char="[" beginRegion="List" />
+        <DetectChar attribute="Operator" context="hash" char="{" beginRegion="Hash" />
+        <DetectChar attribute="String" context="string" char="'" beginRegion="String" />
+        <DetectChar attribute="String" context="stringx" char="&quot;" beginRegion="String" />
+      </context>
+      <context attribute="Attribute" lineEndContext="#pop#pop" name="key-before-literal-operator">
+        <IncludeRules context="before-literal-operator" />
+        <DetectChar attribute="Operator" context="#stay" char="?" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="end-literal-operator">
+        <DetectChar attribute="Comment" context="#pop!comment" char="#" />
+      </context>
+
+      <!-- Common rules for the content of the literal blocks -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-default">
+        <!-- End literal/folded block -->
+        <RegExpr attribute="Normal Text" context="#pop" String="^\s*\S" lookAhead="true" column="0" endRegion="Literal" />
+        <!-- Find literal/folded operator -->
+        <RegExpr context="before-literal-operator" String="\S" lookAhead="true" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="literal-block-key-default">
+        <!-- End literal/folded block -->
+        <RegExpr attribute="Normal Text" context="#pop" String="^\s*\S" lookAhead="true" column="0" endRegion="Literal" />
+        <!-- Detect Key before the literal/folded operator -->
+        <RegExpr attribute="Key" context="key-before-literal-operator" String="&keyAfterOp;:(?=\s)" />
+        <RegExpr attribute="Normal Text" context="#pop" String="\S" lookAhead="true" endRegion="Literal" />
+      </context>
+
+      <!-- Content of the literal block: -->
+
+      <!-- If the literal operator is starting the line (after a space, use block indentation) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-only-operator" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1.*$" dynamic="true" column="0" />
+
+        <RegExpr attribute="Normal Text" context="#pop" String="^\s*\S" lookAhead="true" column="0" endRegion="Literal" />
+        <DetectChar attribute="Comment" context="comment" char="#" />
+        <RegExpr context="#pop" String="\S" lookAhead="true" endRegion="Literal" />
+      </context>
+      <!-- If the literal operator is the first character of a line (or after header) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-simple">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^\s.*$" column="0" />
+
+        <RegExpr attribute="Normal Text" context="#pop" String="^\s*\S" lookAhead="true" column="0" endRegion="Literal" />
+        <DetectChar attribute="Comment" context="comment" char="#" />
+      </context>
+      <!-- If there is a data type or other content before the liretal operator (use block indentation) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-after-data" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1.*$" dynamic="true" column="0" />
+
+        <RegExpr attribute="Normal Text" context="#pop" String="^\s*\S" lookAhead="true" column="0" endRegion="Literal" />
+        <RegExpr context="before-literal-operator" String="\S" lookAhead="true" />
+      </context>
+      <!-- If there is a key before the literal operator -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-key" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1\s.*$" dynamic="true" column="0" />
+
+        <RegExpr attribute="Normal Text" context="#pop" String="^\s*\S" lookAhead="true" column="0" endRegion="Literal" />
+        <!-- Attribute of the Key (the Key was previously highlighted) -->
+        <RegExpr context="key-before-literal-operator" String="\S" lookAhead="true" />
+      </context>
+
+      <!-- If there are dashes/"?" before the literal operator -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-withdash-s1" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-withdash-s2" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2&space;\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-withdash-s3" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2%3&space;{2}\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-withdash-s4" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2%3%4&space;{3}\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-withdash-s5" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2%3%4%5&space;{4}\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-withdash-s6" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2%3%4%5%6&space;{5}\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-default" />
+      </context>
+      <!-- If there are dashes/"?" and a Key before the literal operator -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-key-withdash-s2" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2&space;\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-key-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-key-withdash-s3" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2%3&space;{2}\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-key-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-key-withdash-s4" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2%3%4&space;{3}\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-key-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-key-withdash-s5" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2%3%4%5&space;{4}\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-key-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-key-withdash-s6" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2%3%4%5%6&space;{5}\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-key-default" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-key-withdash-s7" dynamic="true">
+        <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1%2%3%4%5%6%7&space;{6}\s.*$" dynamic="true" column="0" />
+        <IncludeRules context="literal-block-key-default" />
+      </context>
     </contexts>
 
     <itemDatas>
@@ -186,7 +551,15 @@
       <itemData name="Directive" defStyleNum="dsOthers" />
       <itemData name="Operator" defStyleNum="dsKeyword" />
       <itemData name="String" defStyleNum="dsString" />
+      <itemData name="Escaped Character" defStyleNum="dsSpecialChar" />
+      <itemData name="Literal/Folded Operator" defStyleNum="dsString" bold="1" />
+      <itemData name="Literal/Folded Block" defStyleNum="dsNormal" />
+      <itemData name="Null" defStyleNum="dsChar" />
+      <itemData name="Boolean" defStyleNum="dsChar" />
+      <itemData name="Integer" defStyleNum="dsDecVal" />
+      <itemData name="Float" defStyleNum="dsFloat" />
       <itemData name="Error" defStyleNum="dsError" />
+      <itemData name="Alert" defStyleNum="dsAlert" backgroundColor="#EF9A9A" />
     </itemDatas>
   </highlighting>
 
diff --git a/xml/zsh.xml b/xml/zsh.xml
--- a/xml/zsh.xml
+++ b/xml/zsh.xml
@@ -8,7 +8,7 @@
         <!ENTITY noword   "(?![\w$+-])">                <!-- no word, $, + or - following -->
         <!ENTITY pathpart "([\w_@.&#37;*?+-]|\\ )">     <!-- valid character in a file name -->
 ]>
-<language name="Zsh" version="2" kateversion="2.4" 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">
+<language name="Zsh" version="3" kateversion="2.4" 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 -->
@@ -598,7 +598,7 @@
         <!-- handle here-string -->
         <RegExpr attribute="Redirection" context="#stay" String="\d*&lt;&lt;&lt;" />
         <!-- handle here document -->
-        <StringDetect attribute="Redirection" context="HereDoc" String="&lt;&lt;" lookAhead="true" />
+        <Detect2Chars attribute="Redirection" context="HereDoc" char="&lt;" char1="&lt;" lookAhead="true" />
         <!-- handle process subst -->
         <RegExpr attribute="Redirection" context="ProcessSubst" String="[&lt;&gt;]\(" />
         <!-- handle redirection -->
@@ -642,7 +642,7 @@
         <RegExpr attribute="Variable" context="VarBrace" String="\$\{[*@#?$!_0-9-](?=[:#%/=?+-])" />
         <StringDetect attribute="Variable" context="ExprDblParenSubst" String="$((" beginRegion="expression" />
         <StringDetect attribute="Redirection" context="SubstFile" String="$(&lt;" />
-        <StringDetect attribute="Variable" context="SubstCommand" String="$(" />
+        <Detect2Chars attribute="Variable" context="SubstCommand" char="$" char1="(" />
         <DetectChar attribute="Backquote" context="SubstBackq" char="`" />
         <RegExpr attribute="Escape" context="#stay" String="\\[`$\\]" />
       </context>
