diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,41 @@
+# The build procedure, after a fresh checkout from the repository:
+
+#     make prep
+#     cabal install
+#
+# 'make prep' generates the Haskell syntax parsers from kate
+# xml syntax definitions.
+
+XMLS=$(glob xml/*.xml)
+
+.PHONY: prep all test clean distclean install prof
+
+all: prep
+	cabal configure -fexecutable --enable-tests
+	cabal build
+
+prof:
+	cabal configure --enable-library-profiling --enable-executable-profiling --disable-optimization -fexecutable
+	cabal build
+
+prep: clean ParseSyntaxFiles $(XMLS)
+	cabal install -fexecutable --enable-tests --only-dependencies
+	./ParseSyntaxFiles xml
+	@echo "Syntax parsers have been generated."
+	@echo "You may now use cabal to build the package."
+
+install:
+	cabal install
+
+test:
+	cabal test
+
+ParseSyntaxFiles: ParseSyntaxFiles.hs
+	cabal install HXT
+	ghc --make -Wall ParseSyntaxFiles.hs  # requires HXT >= 9.0.0
+
+clean:
+	rm -rf Text/Highlighting/Kate/Syntax/*
+
+distclean:
+	rm -rf ParseSyntaxFiles.o ParseSyntaxFiles.hi ParseSyntaxFiles
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,11 +2,12 @@
 -----------------
 
 A Haskell source code highlighting library, based
-on Kate's syntax description files (http://kate-editor.org/).  It
-can produce both HTML and LaTeX output.
+on Kate's syntax description files (http://kate-editor.org/),
+now [part of the KDE Framework's "KTextEditor" component](http://kate-editor.org/2013/11/11/kate-on-5-the-future-of-ktexteditor-and-kate-part/).
+It can produce both HTML and LaTeX output.
 
 Currently, the following languages/formats are supported:
-
+- Abc
 - Actionscript
 - Ada
 - Apache
@@ -30,20 +31,24 @@
 - D
 - Diff
 - Djangotemplate
+- Dot
 - Doxygen
 - Dtd
 - Eiffel
 - Email
 - Erlang
+- Fasm
 - Fortran
 - Fsharp
+- Gcc
+- Glsl
 - Gnuassembler
 - Go
 - Haskell
 - Haxe
 - Html
-- Ilerpg
 - Ini
+- Isocpp
 - Java
 - Javadoc
 - Javascript
@@ -52,12 +57,15 @@
 - Julia
 - Latex
 - Lex
+- Lilypond
 - LiterateCurry
 - LiterateHaskell
 - Lua
+- M4
 - Makefile
 - Mandoc
 - Markdown
+- Mathematica
 - Matlab
 - Maxima
 - Mediawiki
@@ -72,6 +80,7 @@
 - Objectivecpp
 - Ocaml
 - Octave
+- Opencl
 - Pascal
 - Perl
 - Php
@@ -81,9 +90,11 @@
 - Pure
 - Python
 - R
+- Relaxng
 - Relaxngcompact
-- Restructuredtext
+- Rest
 - Rhtml
+- Roff
 - Ruby
 - Rust
 - Scala
@@ -95,6 +106,7 @@
 - SqlMysql
 - SqlPostgresql
 - Tcl
+- Tcsh
 - Texinfo
 - Verilog
 - Vhdl
@@ -104,12 +116,13 @@
 - Xul
 - Yacc
 - Yaml
+- Zsh
 
 To install, use the cabal tool:
 
     cabal install
 
-Note:  If you have checked out the source from the darcs repository,
+Note:  If you have checked out the source from the git repository,
 you will first need to do:
 
     make prep
@@ -125,6 +138,10 @@
 
     cabal haddock
 
+To run the test suite:
+
+    cabal test
+
 For an example of the use of the library, see Highlight.hs.
 To compile this program along with the library, specify the 'executable'
 flag in the configure step above:
@@ -162,14 +179,14 @@
 
 Note that ParseSyntaxFiles.hs requires the HXT package (>= 9.0.0).
 
-To get the current Kate syntax highlighting files, clone the kate
+To get the current Kate syntax highlighting files, clone the ktexteditor
 repository:
 
-    git clone git://anongit.kde.org/kate
+    git clone git://anongit.kde.org/ktexteditor
 
 The syntax definitions can then be found in
 
-    kate/part/syntax/data
+    src/syntax/data
 
 There is information on the syntax highlighting definitions at
 <http://docs.kde.org/stable/en/applications/kate/highlight.html>.  See also
@@ -177,11 +194,15 @@
 
 Thanks are due to all the authors of these syntax definitions.
 
-Changes have been made to the following xml files (the originals have
-been left in the directory, with .bkp extensions):
+Changes have been made to the following xml files (diffs have
+been left in the directory, with .patch extensions):
 
-- perl.xml:  Fixed regexes - needed backslash-escapes before ] and ^
-- php.xml:  Added fallthrough so `<?php` prefix not needed
-- base report bugs on the github issue tracker:
+- haskell.xml: Small changes to mapping of styles to token types.
+- lua.xml:  Variables and constants highlighted as "normal", not keywords.
+- perl.xml:  Small regex change due to differences in regex engines.
+- php.xml:  Added fallthrough so `<?php` prefix not needed.
+- tcsh.xml: Replace invalid character assignment(?) of regex '\s' with ' '.
+
+- base report bugs on the GitHub issue tracker:
 <https://github.com/jgm/highlighting-kate/issues>.
 
diff --git a/Text/Highlighting/Kate/Common.hs b/Text/Highlighting/Kate/Common.hs
--- a/Text/Highlighting/Kate/Common.hs
+++ b/Text/Highlighting/Kate/Common.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, ScopedTypeVariables #-}
 {- |
    Module      : Text.Highlighting.Kate.Common
    Copyright   : Copyright (C) 2008 John MacFarlane
@@ -23,6 +23,7 @@
 import Text.ParserCombinators.Parsec hiding (State)
 import Data.Char (isDigit, toLower, isSpace)
 import Data.List (tails)
+import Text.Printf
 import Control.Monad.State
 import qualified Data.Set as Set
 
@@ -167,7 +168,7 @@
 
 -- convert octal escapes to the form pcre wants.  Note:
 -- need at least pcre 8.34 for the form \o{dddd}.
--- So we prefer \ddd when possible.
+-- So we prefer \ddd or \x{...}.
 convertOctal :: String -> String
 convertOctal [] = ""
 convertOctal ('\\':'0':x:y:z:rest)
@@ -177,15 +178,10 @@
 convertOctal ('\\':'o':'{':zs) =
   case break (=='}') zs of
        (ds, '}':rest) | all isOctalDigit ds && not (null ds) ->
-         if length ds <= 3
-            then '\\': pad3 ds ++ convertOctal rest
-            else case reads ('\\':'o':ds) of
-                   ((c,[]):_) -> c : convertOctal rest
-                   _          -> '\\':'o':'{': convertOctal zs
+            case reads ('0':'o':ds) of
+                 ((n :: Int,[]):_) -> printf "\\x{%x}" n ++ convertOctal rest
+                 _          -> error $ "Unable to read octal number: " ++ ds
        _  -> '\\':'o':'{': convertOctal zs
-    where pad3 [x]   = ['0','0',x]
-          pad3 [x,y] = ['0',x,y]
-          pad3 xs    = xs
 convertOctal (x:xs) = x : convertOctal xs
 
 isOctalDigit :: Char -> Bool
diff --git a/Text/Highlighting/Kate/Syntax.hs b/Text/Highlighting/Kate/Syntax.hs
--- a/Text/Highlighting/Kate/Syntax.hs
+++ b/Text/Highlighting/Kate/Syntax.hs
@@ -15,6 +15,7 @@
 import Data.Char (toLower)
 import Text.Highlighting.Kate.Types
 import Text.Highlighting.Kate.Common (matchGlobs)
+import qualified Text.Highlighting.Kate.Syntax.Abc as Abc
 import qualified Text.Highlighting.Kate.Syntax.Actionscript as Actionscript
 import qualified Text.Highlighting.Kate.Syntax.Ada as Ada
 import qualified Text.Highlighting.Kate.Syntax.Alert as Alert
@@ -40,15 +41,18 @@
 import qualified Text.Highlighting.Kate.Syntax.D as D
 import qualified Text.Highlighting.Kate.Syntax.Diff as Diff
 import qualified Text.Highlighting.Kate.Syntax.Djangotemplate as Djangotemplate
+import qualified Text.Highlighting.Kate.Syntax.Dot as Dot
 import qualified Text.Highlighting.Kate.Syntax.Doxygen as Doxygen
 import qualified Text.Highlighting.Kate.Syntax.Doxygenlua as Doxygenlua
 import qualified Text.Highlighting.Kate.Syntax.Dtd as Dtd
 import qualified Text.Highlighting.Kate.Syntax.Eiffel as Eiffel
 import qualified Text.Highlighting.Kate.Syntax.Email as Email
 import qualified Text.Highlighting.Kate.Syntax.Erlang as Erlang
+import qualified Text.Highlighting.Kate.Syntax.Fasm as Fasm
 import qualified Text.Highlighting.Kate.Syntax.Fortran as Fortran
 import qualified Text.Highlighting.Kate.Syntax.Fsharp as Fsharp
 import qualified Text.Highlighting.Kate.Syntax.Gcc as Gcc
+import qualified Text.Highlighting.Kate.Syntax.Glsl as Glsl
 import qualified Text.Highlighting.Kate.Syntax.Gnuassembler as Gnuassembler
 import qualified Text.Highlighting.Kate.Syntax.Go as Go
 import qualified Text.Highlighting.Kate.Syntax.Haskell as Haskell
@@ -64,14 +68,18 @@
 import qualified Text.Highlighting.Kate.Syntax.Julia as Julia
 import qualified Text.Highlighting.Kate.Syntax.Latex as Latex
 import qualified Text.Highlighting.Kate.Syntax.Lex as Lex
+import qualified Text.Highlighting.Kate.Syntax.Lilypond as Lilypond
 import qualified Text.Highlighting.Kate.Syntax.LiterateCurry as LiterateCurry
 import qualified Text.Highlighting.Kate.Syntax.LiterateHaskell as LiterateHaskell
 import qualified Text.Highlighting.Kate.Syntax.Lua as Lua
+import qualified Text.Highlighting.Kate.Syntax.M4 as M4
 import qualified Text.Highlighting.Kate.Syntax.Makefile as Makefile
 import qualified Text.Highlighting.Kate.Syntax.Mandoc as Mandoc
 import qualified Text.Highlighting.Kate.Syntax.Markdown as Markdown
+import qualified Text.Highlighting.Kate.Syntax.Mathematica as Mathematica
 import qualified Text.Highlighting.Kate.Syntax.Matlab as Matlab
 import qualified Text.Highlighting.Kate.Syntax.Maxima as Maxima
+import qualified Text.Highlighting.Kate.Syntax.Mediawiki as Mediawiki
 import qualified Text.Highlighting.Kate.Syntax.Metafont as Metafont
 import qualified Text.Highlighting.Kate.Syntax.Mips as Mips
 import qualified Text.Highlighting.Kate.Syntax.Modelines as Modelines
@@ -84,6 +92,7 @@
 import qualified Text.Highlighting.Kate.Syntax.Objectivecpp as Objectivecpp
 import qualified Text.Highlighting.Kate.Syntax.Ocaml as Ocaml
 import qualified Text.Highlighting.Kate.Syntax.Octave as Octave
+import qualified Text.Highlighting.Kate.Syntax.Opencl as Opencl
 import qualified Text.Highlighting.Kate.Syntax.Pascal as Pascal
 import qualified Text.Highlighting.Kate.Syntax.Perl as Perl
 import qualified Text.Highlighting.Kate.Syntax.Php as Php
@@ -93,8 +102,9 @@
 import qualified Text.Highlighting.Kate.Syntax.Pure as Pure
 import qualified Text.Highlighting.Kate.Syntax.Python as Python
 import qualified Text.Highlighting.Kate.Syntax.R as R
+import qualified Text.Highlighting.Kate.Syntax.Relaxng as Relaxng
 import qualified Text.Highlighting.Kate.Syntax.Relaxngcompact as Relaxngcompact
-import qualified Text.Highlighting.Kate.Syntax.Restructuredtext as Restructuredtext
+import qualified Text.Highlighting.Kate.Syntax.Rest as Rest
 import qualified Text.Highlighting.Kate.Syntax.Rhtml as Rhtml
 import qualified Text.Highlighting.Kate.Syntax.Roff as Roff
 import qualified Text.Highlighting.Kate.Syntax.Ruby as Ruby
@@ -108,6 +118,7 @@
 import qualified Text.Highlighting.Kate.Syntax.SqlMysql as SqlMysql
 import qualified Text.Highlighting.Kate.Syntax.SqlPostgresql as SqlPostgresql
 import qualified Text.Highlighting.Kate.Syntax.Tcl as Tcl
+import qualified Text.Highlighting.Kate.Syntax.Tcsh as Tcsh
 import qualified Text.Highlighting.Kate.Syntax.Texinfo as Texinfo
 import qualified Text.Highlighting.Kate.Syntax.Verilog as Verilog
 import qualified Text.Highlighting.Kate.Syntax.Vhdl as Vhdl
@@ -117,14 +128,15 @@
 import qualified Text.Highlighting.Kate.Syntax.Xul as Xul
 import qualified Text.Highlighting.Kate.Syntax.Yacc as Yacc
 import qualified Text.Highlighting.Kate.Syntax.Yaml as Yaml
+import qualified Text.Highlighting.Kate.Syntax.Zsh as Zsh
 
 -- | List of supported languages.
 languages :: [String]
-languages = ["Actionscript","Ada","Alert","Alert_indent","Apache","Asn1","Asp","Awk","Bash","Bibtex","Boo","C","Changelog","Clojure","Cmake","Coffee","Coldfusion","Commonlisp","Cpp","Cs","Css","Curry","D","Diff","Djangotemplate","Doxygen","Doxygenlua","Dtd","Eiffel","Email","Erlang","Fortran","Fsharp","Gcc","Gnuassembler","Go","Haskell","Haxe","Html","Ini","Isocpp","Java","Javadoc","Javascript","Json","Jsp","Julia","Latex","Lex","LiterateCurry","LiterateHaskell","Lua","Makefile","Mandoc","Markdown","Matlab","Maxima","Metafont","Mips","Modelines","Modula2","Modula3","Monobasic","Nasm","Noweb","Objectivec","Objectivecpp","Ocaml","Octave","Pascal","Perl","Php","Pike","Postscript","Prolog","Pure","Python","R","Relaxngcompact","Restructuredtext","Rhtml","Roff","Ruby","Rust","Scala","Scheme","Sci","Sed","Sgml","Sql","SqlMysql","SqlPostgresql","Tcl","Texinfo","Verilog","Vhdl","Xml","Xorg","Xslt","Xul","Yacc","Yaml"]
+languages = ["Abc","Actionscript","Ada","Alert","Alert_indent","Apache","Asn1","Asp","Awk","Bash","Bibtex","Boo","C","Changelog","Clojure","Cmake","Coffee","Coldfusion","Commonlisp","Cpp","Cs","Css","Curry","D","Diff","Djangotemplate","Dot","Doxygen","Doxygenlua","Dtd","Eiffel","Email","Erlang","Fasm","Fortran","Fsharp","Gcc","Glsl","Gnuassembler","Go","Haskell","Haxe","Html","Ini","Isocpp","Java","Javadoc","Javascript","Json","Jsp","Julia","Latex","Lex","Lilypond","LiterateCurry","LiterateHaskell","Lua","M4","Makefile","Mandoc","Markdown","Mathematica","Matlab","Maxima","Mediawiki","Metafont","Mips","Modelines","Modula2","Modula3","Monobasic","Nasm","Noweb","Objectivec","Objectivecpp","Ocaml","Octave","Opencl","Pascal","Perl","Php","Pike","Postscript","Prolog","Pure","Python","R","Relaxng","Relaxngcompact","Rest","Rhtml","Roff","Ruby","Rust","Scala","Scheme","Sci","Sed","Sgml","Sql","SqlMysql","SqlPostgresql","Tcl","Tcsh","Texinfo","Verilog","Vhdl","Xml","Xorg","Xslt","Xul","Yacc","Yaml","Zsh"]
 
 -- | List of language extensions.
 languageExtensions :: [(String, String)]
-languageExtensions = [("Actionscript", Actionscript.syntaxExtensions), ("Ada", Ada.syntaxExtensions), ("Alert", Alert.syntaxExtensions), ("Alert_indent", Alert_indent.syntaxExtensions), ("Apache", Apache.syntaxExtensions), ("Asn1", Asn1.syntaxExtensions), ("Asp", Asp.syntaxExtensions), ("Awk", Awk.syntaxExtensions), ("Bash", Bash.syntaxExtensions), ("Bibtex", Bibtex.syntaxExtensions), ("Boo", Boo.syntaxExtensions), ("C", C.syntaxExtensions), ("Changelog", Changelog.syntaxExtensions), ("Clojure", Clojure.syntaxExtensions), ("Cmake", Cmake.syntaxExtensions), ("Coffee", Coffee.syntaxExtensions), ("Coldfusion", Coldfusion.syntaxExtensions), ("Commonlisp", Commonlisp.syntaxExtensions), ("Cpp", Cpp.syntaxExtensions), ("Cs", Cs.syntaxExtensions), ("Css", Css.syntaxExtensions), ("Curry", Curry.syntaxExtensions), ("D", D.syntaxExtensions), ("Diff", Diff.syntaxExtensions), ("Djangotemplate", Djangotemplate.syntaxExtensions), ("Doxygen", Doxygen.syntaxExtensions), ("Doxygenlua", Doxygenlua.syntaxExtensions), ("Dtd", Dtd.syntaxExtensions), ("Eiffel", Eiffel.syntaxExtensions), ("Email", Email.syntaxExtensions), ("Erlang", Erlang.syntaxExtensions), ("Fortran", Fortran.syntaxExtensions), ("Fsharp", Fsharp.syntaxExtensions), ("Gcc", Gcc.syntaxExtensions), ("Gnuassembler", Gnuassembler.syntaxExtensions), ("Go", Go.syntaxExtensions), ("Haskell", Haskell.syntaxExtensions), ("Haxe", Haxe.syntaxExtensions), ("Html", Html.syntaxExtensions), ("Ini", Ini.syntaxExtensions), ("Isocpp", Isocpp.syntaxExtensions), ("Java", Java.syntaxExtensions), ("Javadoc", Javadoc.syntaxExtensions), ("Javascript", Javascript.syntaxExtensions), ("Json", Json.syntaxExtensions), ("Jsp", Jsp.syntaxExtensions), ("Julia", Julia.syntaxExtensions), ("Latex", Latex.syntaxExtensions), ("Lex", Lex.syntaxExtensions), ("LiterateCurry", LiterateCurry.syntaxExtensions), ("LiterateHaskell", LiterateHaskell.syntaxExtensions), ("Lua", Lua.syntaxExtensions), ("Makefile", Makefile.syntaxExtensions), ("Mandoc", Mandoc.syntaxExtensions), ("Markdown", Markdown.syntaxExtensions), ("Matlab", Matlab.syntaxExtensions), ("Maxima", Maxima.syntaxExtensions), ("Metafont", Metafont.syntaxExtensions), ("Mips", Mips.syntaxExtensions), ("Modelines", Modelines.syntaxExtensions), ("Modula2", Modula2.syntaxExtensions), ("Modula3", Modula3.syntaxExtensions), ("Monobasic", Monobasic.syntaxExtensions), ("Nasm", Nasm.syntaxExtensions), ("Noweb", Noweb.syntaxExtensions), ("Objectivec", Objectivec.syntaxExtensions), ("Objectivecpp", Objectivecpp.syntaxExtensions), ("Ocaml", Ocaml.syntaxExtensions), ("Octave", Octave.syntaxExtensions), ("Pascal", Pascal.syntaxExtensions), ("Perl", Perl.syntaxExtensions), ("Php", Php.syntaxExtensions), ("Pike", Pike.syntaxExtensions), ("Postscript", Postscript.syntaxExtensions), ("Prolog", Prolog.syntaxExtensions), ("Pure", Pure.syntaxExtensions), ("Python", Python.syntaxExtensions), ("R", R.syntaxExtensions), ("Relaxngcompact", Relaxngcompact.syntaxExtensions), ("Restructuredtext", Restructuredtext.syntaxExtensions), ("Rhtml", Rhtml.syntaxExtensions), ("Roff", Roff.syntaxExtensions), ("Ruby", Ruby.syntaxExtensions), ("Rust", Rust.syntaxExtensions), ("Scala", Scala.syntaxExtensions), ("Scheme", Scheme.syntaxExtensions), ("Sci", Sci.syntaxExtensions), ("Sed", Sed.syntaxExtensions), ("Sgml", Sgml.syntaxExtensions), ("Sql", Sql.syntaxExtensions), ("SqlMysql", SqlMysql.syntaxExtensions), ("SqlPostgresql", SqlPostgresql.syntaxExtensions), ("Tcl", Tcl.syntaxExtensions), ("Texinfo", Texinfo.syntaxExtensions), ("Verilog", Verilog.syntaxExtensions), ("Vhdl", Vhdl.syntaxExtensions), ("Xml", Xml.syntaxExtensions), ("Xorg", Xorg.syntaxExtensions), ("Xslt", Xslt.syntaxExtensions), ("Xul", Xul.syntaxExtensions), ("Yacc", Yacc.syntaxExtensions), ("Yaml", Yaml.syntaxExtensions)]
+languageExtensions = [("Abc", Abc.syntaxExtensions), ("Actionscript", Actionscript.syntaxExtensions), ("Ada", Ada.syntaxExtensions), ("Alert", Alert.syntaxExtensions), ("Alert_indent", Alert_indent.syntaxExtensions), ("Apache", Apache.syntaxExtensions), ("Asn1", Asn1.syntaxExtensions), ("Asp", Asp.syntaxExtensions), ("Awk", Awk.syntaxExtensions), ("Bash", Bash.syntaxExtensions), ("Bibtex", Bibtex.syntaxExtensions), ("Boo", Boo.syntaxExtensions), ("C", C.syntaxExtensions), ("Changelog", Changelog.syntaxExtensions), ("Clojure", Clojure.syntaxExtensions), ("Cmake", Cmake.syntaxExtensions), ("Coffee", Coffee.syntaxExtensions), ("Coldfusion", Coldfusion.syntaxExtensions), ("Commonlisp", Commonlisp.syntaxExtensions), ("Cpp", Cpp.syntaxExtensions), ("Cs", Cs.syntaxExtensions), ("Css", Css.syntaxExtensions), ("Curry", Curry.syntaxExtensions), ("D", D.syntaxExtensions), ("Diff", Diff.syntaxExtensions), ("Djangotemplate", Djangotemplate.syntaxExtensions), ("Dot", Dot.syntaxExtensions), ("Doxygen", Doxygen.syntaxExtensions), ("Doxygenlua", Doxygenlua.syntaxExtensions), ("Dtd", Dtd.syntaxExtensions), ("Eiffel", Eiffel.syntaxExtensions), ("Email", Email.syntaxExtensions), ("Erlang", Erlang.syntaxExtensions), ("Fasm", Fasm.syntaxExtensions), ("Fortran", Fortran.syntaxExtensions), ("Fsharp", Fsharp.syntaxExtensions), ("Gcc", Gcc.syntaxExtensions), ("Glsl", Glsl.syntaxExtensions), ("Gnuassembler", Gnuassembler.syntaxExtensions), ("Go", Go.syntaxExtensions), ("Haskell", Haskell.syntaxExtensions), ("Haxe", Haxe.syntaxExtensions), ("Html", Html.syntaxExtensions), ("Ini", Ini.syntaxExtensions), ("Isocpp", Isocpp.syntaxExtensions), ("Java", Java.syntaxExtensions), ("Javadoc", Javadoc.syntaxExtensions), ("Javascript", Javascript.syntaxExtensions), ("Json", Json.syntaxExtensions), ("Jsp", Jsp.syntaxExtensions), ("Julia", Julia.syntaxExtensions), ("Latex", Latex.syntaxExtensions), ("Lex", Lex.syntaxExtensions), ("Lilypond", Lilypond.syntaxExtensions), ("LiterateCurry", LiterateCurry.syntaxExtensions), ("LiterateHaskell", LiterateHaskell.syntaxExtensions), ("Lua", Lua.syntaxExtensions), ("M4", M4.syntaxExtensions), ("Makefile", Makefile.syntaxExtensions), ("Mandoc", Mandoc.syntaxExtensions), ("Markdown", Markdown.syntaxExtensions), ("Mathematica", Mathematica.syntaxExtensions), ("Matlab", Matlab.syntaxExtensions), ("Maxima", Maxima.syntaxExtensions), ("Mediawiki", Mediawiki.syntaxExtensions), ("Metafont", Metafont.syntaxExtensions), ("Mips", Mips.syntaxExtensions), ("Modelines", Modelines.syntaxExtensions), ("Modula2", Modula2.syntaxExtensions), ("Modula3", Modula3.syntaxExtensions), ("Monobasic", Monobasic.syntaxExtensions), ("Nasm", Nasm.syntaxExtensions), ("Noweb", Noweb.syntaxExtensions), ("Objectivec", Objectivec.syntaxExtensions), ("Objectivecpp", Objectivecpp.syntaxExtensions), ("Ocaml", Ocaml.syntaxExtensions), ("Octave", Octave.syntaxExtensions), ("Opencl", Opencl.syntaxExtensions), ("Pascal", Pascal.syntaxExtensions), ("Perl", Perl.syntaxExtensions), ("Php", Php.syntaxExtensions), ("Pike", Pike.syntaxExtensions), ("Postscript", Postscript.syntaxExtensions), ("Prolog", Prolog.syntaxExtensions), ("Pure", Pure.syntaxExtensions), ("Python", Python.syntaxExtensions), ("R", R.syntaxExtensions), ("Relaxng", Relaxng.syntaxExtensions), ("Relaxngcompact", Relaxngcompact.syntaxExtensions), ("Rest", Rest.syntaxExtensions), ("Rhtml", Rhtml.syntaxExtensions), ("Roff", Roff.syntaxExtensions), ("Ruby", Ruby.syntaxExtensions), ("Rust", Rust.syntaxExtensions), ("Scala", Scala.syntaxExtensions), ("Scheme", Scheme.syntaxExtensions), ("Sci", Sci.syntaxExtensions), ("Sed", Sed.syntaxExtensions), ("Sgml", Sgml.syntaxExtensions), ("Sql", Sql.syntaxExtensions), ("SqlMysql", SqlMysql.syntaxExtensions), ("SqlPostgresql", SqlPostgresql.syntaxExtensions), ("Tcl", Tcl.syntaxExtensions), ("Tcsh", Tcsh.syntaxExtensions), ("Texinfo", Texinfo.syntaxExtensions), ("Verilog", Verilog.syntaxExtensions), ("Vhdl", Vhdl.syntaxExtensions), ("Xml", Xml.syntaxExtensions), ("Xorg", Xorg.syntaxExtensions), ("Xslt", Xslt.syntaxExtensions), ("Xul", Xul.syntaxExtensions), ("Yacc", Yacc.syntaxExtensions), ("Yaml", Yaml.syntaxExtensions), ("Zsh", Zsh.syntaxExtensions)]
 
 -- | Returns a list of languages appropriate for the given file extension.
 languagesByExtension :: String -> [String]
@@ -140,7 +152,7 @@
 -- extension (if unique).
 -- The parsers read the input lazily and parse line by line;
 -- results are returned immediately.
--- Supported languages: @actionscript@, @ada@, @alert@, @alert_indent@, @apache@, @asn1@, @asp@, @awk@, @bash@, @bibtex@, @boo@, @c@, @changelog@, @clojure@, @cmake@, @coffee@, @coldfusion@, @commonlisp@, @cpp@, @cs@, @css@, @curry@, @d@, @diff@, @djangotemplate@, @doxygen@, @doxygenlua@, @dtd@, @eiffel@, @email@, @erlang@, @fortran@, @fsharp@, @gcc@, @gnuassembler@, @go@, @haskell@, @haxe@, @html@, @ini@, @isocpp@, @java@, @javadoc@, @javascript@, @json@, @jsp@, @julia@, @latex@, @lex@, @literatecurry@, @literatehaskell@, @lua@, @makefile@, @mandoc@, @markdown@, @matlab@, @maxima@, @metafont@, @mips@, @modelines@, @modula2@, @modula3@, @monobasic@, @nasm@, @noweb@, @objectivec@, @objectivecpp@, @ocaml@, @octave@, @pascal@, @perl@, @php@, @pike@, @postscript@, @prolog@, @pure@, @python@, @r@, @relaxngcompact@, @restructuredtext@, @rhtml@, @roff@, @ruby@, @rust@, @scala@, @scheme@, @sci@, @sed@, @sgml@, @sql@, @sqlmysql@, @sqlpostgresql@, @tcl@, @texinfo@, @verilog@, @vhdl@, @xml@, @xorg@, @xslt@, @xul@, @yacc@, @yaml@.
+-- Supported languages: @abc@, @actionscript@, @ada@, @alert@, @alert_indent@, @apache@, @asn1@, @asp@, @awk@, @bash@, @bibtex@, @boo@, @c@, @changelog@, @clojure@, @cmake@, @coffee@, @coldfusion@, @commonlisp@, @cpp@, @cs@, @css@, @curry@, @d@, @diff@, @djangotemplate@, @dot@, @doxygen@, @doxygenlua@, @dtd@, @eiffel@, @email@, @erlang@, @fasm@, @fortran@, @fsharp@, @gcc@, @glsl@, @gnuassembler@, @go@, @haskell@, @haxe@, @html@, @ini@, @isocpp@, @java@, @javadoc@, @javascript@, @json@, @jsp@, @julia@, @latex@, @lex@, @lilypond@, @literatecurry@, @literatehaskell@, @lua@, @m4@, @makefile@, @mandoc@, @markdown@, @mathematica@, @matlab@, @maxima@, @mediawiki@, @metafont@, @mips@, @modelines@, @modula2@, @modula3@, @monobasic@, @nasm@, @noweb@, @objectivec@, @objectivecpp@, @ocaml@, @octave@, @opencl@, @pascal@, @perl@, @php@, @pike@, @postscript@, @prolog@, @pure@, @python@, @r@, @relaxng@, @relaxngcompact@, @rest@, @rhtml@, @roff@, @ruby@, @rust@, @scala@, @scheme@, @sci@, @sed@, @sgml@, @sql@, @sqlmysql@, @sqlpostgresql@, @tcl@, @tcsh@, @texinfo@, @verilog@, @vhdl@, @xml@, @xorg@, @xslt@, @xul@, @yacc@, @yaml@, @zsh@.
 highlightAs :: String         -- ^ Language syntax (e.g. "haskell") or extension (e.g. "hs").
             -> String         -- ^ Source code to highlight
             -> [SourceLine]   -- ^ List of highlighted source lines
@@ -152,6 +164,7 @@
                             [l]  -> map toLower l  -- go by extension if unambiguous
                             _    -> lang'
   in  case lang'' of
+        "abc" -> Abc.highlight
         "actionscript" -> Actionscript.highlight
         "ada" -> Ada.highlight
         "alert" -> Alert.highlight
@@ -177,15 +190,18 @@
         "d" -> D.highlight
         "diff" -> Diff.highlight
         "djangotemplate" -> Djangotemplate.highlight
+        "dot" -> Dot.highlight
         "doxygen" -> Doxygen.highlight
         "doxygenlua" -> Doxygenlua.highlight
         "dtd" -> Dtd.highlight
         "eiffel" -> Eiffel.highlight
         "email" -> Email.highlight
         "erlang" -> Erlang.highlight
+        "fasm" -> Fasm.highlight
         "fortran" -> Fortran.highlight
         "fsharp" -> Fsharp.highlight
         "gcc" -> Gcc.highlight
+        "glsl" -> Glsl.highlight
         "gnuassembler" -> Gnuassembler.highlight
         "go" -> Go.highlight
         "haskell" -> Haskell.highlight
@@ -201,14 +217,18 @@
         "julia" -> Julia.highlight
         "latex" -> Latex.highlight
         "lex" -> Lex.highlight
+        "lilypond" -> Lilypond.highlight
         "literatecurry" -> LiterateCurry.highlight
         "literatehaskell" -> LiterateHaskell.highlight
         "lua" -> Lua.highlight
+        "m4" -> M4.highlight
         "makefile" -> Makefile.highlight
         "mandoc" -> Mandoc.highlight
         "markdown" -> Markdown.highlight
+        "mathematica" -> Mathematica.highlight
         "matlab" -> Matlab.highlight
         "maxima" -> Maxima.highlight
+        "mediawiki" -> Mediawiki.highlight
         "metafont" -> Metafont.highlight
         "mips" -> Mips.highlight
         "modelines" -> Modelines.highlight
@@ -221,6 +241,7 @@
         "objectivecpp" -> Objectivecpp.highlight
         "ocaml" -> Ocaml.highlight
         "octave" -> Octave.highlight
+        "opencl" -> Opencl.highlight
         "pascal" -> Pascal.highlight
         "perl" -> Perl.highlight
         "php" -> Php.highlight
@@ -230,8 +251,9 @@
         "pure" -> Pure.highlight
         "python" -> Python.highlight
         "r" -> R.highlight
+        "relaxng" -> Relaxng.highlight
         "relaxngcompact" -> Relaxngcompact.highlight
-        "restructuredtext" -> Restructuredtext.highlight
+        "rest" -> Rest.highlight
         "rhtml" -> Rhtml.highlight
         "roff" -> Roff.highlight
         "ruby" -> Ruby.highlight
@@ -245,6 +267,7 @@
         "sqlmysql" -> SqlMysql.highlight
         "sqlpostgresql" -> SqlPostgresql.highlight
         "tcl" -> Tcl.highlight
+        "tcsh" -> Tcsh.highlight
         "texinfo" -> Texinfo.highlight
         "verilog" -> Verilog.highlight
         "vhdl" -> Vhdl.highlight
@@ -254,4 +277,5 @@
         "xul" -> Xul.highlight
         "yacc" -> Yacc.highlight
         "yaml" -> Yaml.highlight
+        "zsh" -> Zsh.highlight
         _ -> map (\l -> [(NormalTok, l)]) . lines
diff --git a/Text/Highlighting/Kate/Syntax/Abc.hs b/Text/Highlighting/Kate/Syntax/Abc.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Abc.hs
@@ -0,0 +1,144 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file abc.xml, version 1.10, by Andrea Primiani (primiani@dag.it) -}
+
+module Text.Highlighting.Kate.Syntax.Abc
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "ABC"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.abc;*.ABC"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("ABC","Normal")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("ABC","Normal") -> return ()
+      ("ABC","Preprocessor") -> (popContext) >> pEndLine
+      ("ABC","Lyrics") -> (popContext) >> pEndLine
+      ("ABC","Part") -> (popContext) >> pEndLine
+      ("ABC","Comment") -> (popContext) >> pEndLine
+      ("ABC","Bar") -> (popContext) >> pEndLine
+      ("ABC","Header") -> return ()
+      ("ABC","Header2") -> (popContext) >> pEndLine
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+
+regex_'5c'28'5b23456789'5d'3a'3f'5b23456789'5d'3f'3a'3f'5b23456789'5d'3f = compileRegex True "\\([23456789]:?[23456789]?:?[23456789]?"
+regex_'5c'5b'5bABCGHILMNOQRSTUVZ'5d'3a = compileRegex True "\\[[ABCGHILMNOQRSTUVZ]:"
+regex_'5bABCGHILMNOPQRSTUVZ'5d'3a = compileRegex True "[ABCGHILMNOPQRSTUVZ]:"
+regex_'5b'5f'7c'5c'5e'5d'3f'5b'5f'7c'3d'7c'5c'5e'5d'5bA'2dGa'2dg'5d = compileRegex True "[_|\\^]?[_|=|\\^][A-Ga-g]"
+regex_'5bA'2dGa'2dgZz'5d = compileRegex True "[A-Ga-gZz]"
+regex_'3a'2a'5c'7c'2a'5b1'2d9'5d'7c'2f'2a'5c'7c = compileRegex True ":*\\|*[1-9]|/*\\|"
+regex_K'3a'2e'2b = compileRegex True "K:.+"
+
+parseRules ("ABC","Normal") =
+  (((pRegExpr regex_'5c'28'5b23456789'5d'3a'3f'5b23456789'5d'3f'3a'3f'5b23456789'5d'3f >>= withAttribute DataTypeTok))
+   <|>
+   ((pRangeDetect '"' '"' >>= withAttribute StringTok))
+   <|>
+   ((pRangeDetect '!' '!' >>= withAttribute FloatTok))
+   <|>
+   ((pRegExpr regex_'5c'5b'5bABCGHILMNOQRSTUVZ'5d'3a >>= withAttribute FloatTok) >>~ pushContext ("ABC","Header"))
+   <|>
+   ((pRegExpr regex_'5bABCGHILMNOPQRSTUVZ'5d'3a >>= withAttribute FloatTok) >>~ pushContext ("ABC","Header2"))
+   <|>
+   ((pColumn 0 >> pDetect2Chars False 'X' ':' >>= withAttribute FloatTok) >>~ pushContext ("ABC","Header"))
+   <|>
+   ((pAnyChar "|:[" >>= withAttribute CharTok) >>~ pushContext ("ABC","Bar"))
+   <|>
+   ((pDetectChar False ']' >>= withAttribute CharTok))
+   <|>
+   ((pAnyChar "()" >>= withAttribute DataTypeTok))
+   <|>
+   ((pAnyChar "{}" >>= withAttribute DataTypeTok))
+   <|>
+   ((pDetect2Chars False 'W' ':' >>= withAttribute DataTypeTok) >>~ pushContext ("ABC","Lyrics"))
+   <|>
+   ((pDetect2Chars False 'w' ':' >>= withAttribute DataTypeTok) >>~ pushContext ("ABC","Lyrics"))
+   <|>
+   ((pDetect2Chars False '%' '%' >>= withAttribute StringTok) >>~ pushContext ("ABC","Preprocessor"))
+   <|>
+   ((pDetectChar False '%' >>= withAttribute CommentTok) >>~ pushContext ("ABC","Comment"))
+   <|>
+   ((pRegExpr regex_'5b'5f'7c'5c'5e'5d'3f'5b'5f'7c'3d'7c'5c'5e'5d'5bA'2dGa'2dg'5d >>= withAttribute NormalTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("ABC","Normal")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("ABC","Preprocessor") =
+  (currentContext >>= \x -> guard (x == ("ABC","Preprocessor")) >> pDefault >>= withAttribute StringTok)
+
+parseRules ("ABC","Lyrics") =
+  (currentContext >>= \x -> guard (x == ("ABC","Lyrics")) >> pDefault >>= withAttribute DataTypeTok)
+
+parseRules ("ABC","Part") =
+  (currentContext >>= \x -> guard (x == ("ABC","Part")) >> pDefault >>= withAttribute FloatTok)
+
+parseRules ("ABC","Comment") =
+  (currentContext >>= \x -> guard (x == ("ABC","Comment")) >> pDefault >>= withAttribute CommentTok)
+
+parseRules ("ABC","Bar") =
+  (((pDetectChar False '"' >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5bA'2dGa'2dgZz'5d >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False ' ' >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRangeDetect '!' '!' >>= withAttribute FloatTok))
+   <|>
+   ((pAnyChar "()" >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'3a'2a'5c'7c'2a'5b1'2d9'5d'7c'2f'2a'5c'7c >>= withAttribute CharTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("ABC","Bar")) >> pDefault >>= withAttribute CharTok))
+
+parseRules ("ABC","Header") =
+  (((pColumn 0 >> pRegExpr regex_K'3a'2e'2b >>= withAttribute FloatTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False ']' >>= withAttribute FloatTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("ABC","Header")) >> pDefault >>= withAttribute FloatTok))
+
+parseRules ("ABC","Header2") =
+  (currentContext >>= \x -> guard (x == ("ABC","Header2")) >> pDefault >>= withAttribute FloatTok)
+
+
+parseRules x = parseRules ("ABC","Normal") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Alert_indent.hs b/Text/Highlighting/Kate/Syntax/Alert_indent.hs
--- a/Text/Highlighting/Kate/Syntax/Alert_indent.hs
+++ b/Text/Highlighting/Kate/Syntax/Alert_indent.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file alert_indent.xml, version 1.09, by Dominik Haumann (dhdev@gmx.de) -}
+   highlighting file alert_indent.xml, version 1.10, by Dominik Haumann (dhdev@gmx.de) -}
 
 module Text.Highlighting.Kate.Syntax.Alert_indent
           (highlight, parseExpression, syntaxName, syntaxExtensions)
diff --git a/Text/Highlighting/Kate/Syntax/Awk.hs b/Text/Highlighting/Kate/Syntax/Awk.hs
--- a/Text/Highlighting/Kate/Syntax/Awk.hs
+++ b/Text/Highlighting/Kate/Syntax/Awk.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file awk.xml, version 0.92, by  -}
+   highlighting file awk.xml, version 0.93, by  -}
 
 module Text.Highlighting.Kate.Syntax.Awk
           (highlight, parseExpression, syntaxName, syntaxExtensions)
diff --git a/Text/Highlighting/Kate/Syntax/Css.hs b/Text/Highlighting/Kate/Syntax/Css.hs
--- a/Text/Highlighting/Kate/Syntax/Css.hs
+++ b/Text/Highlighting/Kate/Syntax/Css.hs
@@ -244,7 +244,9 @@
    ((popContext) >> currentContext >>= parseRules))
 
 parseRules ("CSS","MQEV") =
-  (((pRegExpr regex_'5b1'2d9'5d'5b0'2d9'2e'5d'2a'5cs'2a'2f'5cs'2a'5b1'2d9'5d'5b0'2d9'2e'5d'2a >>= withAttribute DataTypeTok) >>~ (popContext))
+  (((pDetectSpaces >>= withAttribute DecValTok))
+   <|>
+   ((pRegExpr regex_'5b1'2d9'5d'5b0'2d9'2e'5d'2a'5cs'2a'2f'5cs'2a'5b1'2d9'5d'5b0'2d9'2e'5d'2a >>= withAttribute DataTypeTok) >>~ (popContext))
    <|>
    ((pRegExpr regex_'5b0'2d9'2e'5d'2b'28em'7cex'7cch'7crem'7cvw'7cvh'7cvm'7cpx'7cin'7ccm'7cmm'7cpt'7cpc'7cdeg'7crad'7cgrad'7cturn'7cms'7cs'7cHz'7ckHz'7cdpi'7cdpcm'29'5cb >>= withAttribute DataTypeTok) >>~ (popContext))
    <|>
diff --git a/Text/Highlighting/Kate/Syntax/Diff.hs b/Text/Highlighting/Kate/Syntax/Diff.hs
--- a/Text/Highlighting/Kate/Syntax/Diff.hs
+++ b/Text/Highlighting/Kate/Syntax/Diff.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file diff.xml, version 1.11, by  -}
+   highlighting file diff.xml, version 1.12, by  -}
 
 module Text.Highlighting.Kate.Syntax.Diff
           (highlight, parseExpression, syntaxName, syntaxExtensions)
diff --git a/Text/Highlighting/Kate/Syntax/Dot.hs b/Text/Highlighting/Kate/Syntax/Dot.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Dot.hs
@@ -0,0 +1,157 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file dot.xml, version 1.1, by Postula Loïs (lois.postula@live.be) -}
+
+module Text.Highlighting.Kate.Syntax.Dot
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import qualified Text.Highlighting.Kate.Syntax.Alert
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "dot"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.dot"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("dot","Normal")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("dot","Normal") -> return ()
+      ("dot","DetectAll") -> return ()
+      ("dot","DetectComments") -> return ()
+      ("dot","RegionCurly") -> return ()
+      ("dot","RegionSquare") -> return ()
+      ("dot","RegionParen") -> return ()
+      ("dot","String") -> (popContext) >> pEndLine
+      ("dot","CommentSL") -> (popContext) >> pEndLine
+      ("dot","CommentML") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_keywords = Set.fromList $ words $ "digraph node edge subgraph"
+list_attributes = Set.fromList $ words $ "center layers margin mclimit name nodesep nslimit ordering page pagedir rank rankdir ranksep ratio rotate size distortion fillcolor fontcolor fontname fontsize height layer orientation peripheries regular shape shapefile sides skew width arrowhead arrowsize arrowtail constraint decorateP dir headclip headlabel labelangle labeldistance labelfontcolor labelfontname labelfontsize minlen port_label_distance samehead sametail tailclip taillabel weight color bgcolor label URL fontcolor fontname fontsize layer style"
+
+regex_'5cb'5cw'2b'5cb = compileRegex True "\\b\\w+\\b"
+
+parseRules ("dot","Normal") =
+  (((parseRules ("dot","DetectAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("dot","Normal")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("dot","DetectAll") =
+  (((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_keywords >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_attributes >>= withAttribute DataTypeTok))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("dot","String"))
+   <|>
+   ((pAnyChar ";=" >>= withAttribute OtherTok))
+   <|>
+   ((pDetect2Chars False '-' '>' >>= withAttribute OtherTok))
+   <|>
+   ((pFloat >>= withAttribute DecValTok))
+   <|>
+   ((pInt >>= withAttribute DecValTok))
+   <|>
+   ((pRegExpr regex_'5cb'5cw'2b'5cb >>= withAttribute FunctionTok))
+   <|>
+   ((parseRules ("dot","DetectComments")))
+   <|>
+   ((pDetectChar False '{' >>= withAttribute OtherTok) >>~ pushContext ("dot","RegionCurly"))
+   <|>
+   ((pDetectChar False '[' >>= withAttribute OtherTok) >>~ pushContext ("dot","RegionSquare"))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute OtherTok) >>~ pushContext ("dot","RegionParen"))
+   <|>
+   ((pAnyChar ")]}" >>= withAttribute ErrorTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("dot","DetectAll")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("dot","DetectComments") =
+  (((pDetect2Chars False '/' '/' >>= withAttribute CommentTok) >>~ pushContext ("dot","CommentSL"))
+   <|>
+   ((pDetect2Chars False '/' '*' >>= withAttribute CommentTok) >>~ pushContext ("dot","CommentML"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("dot","DetectComments")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("dot","RegionCurly") =
+  (((pDetectChar False '}' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((parseRules ("dot","DetectAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("dot","RegionCurly")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("dot","RegionSquare") =
+  (((pDetectChar False ']' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((parseRules ("dot","DetectAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("dot","RegionSquare")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("dot","RegionParen") =
+  (((pDetectChar False ')' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((parseRules ("dot","DetectAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("dot","RegionParen")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("dot","String") =
+  (((pDetect2Chars False '\\' '\\' >>= withAttribute CharTok))
+   <|>
+   ((pDetect2Chars False '\\' '"' >>= withAttribute CharTok))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("dot","String")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("dot","CommentSL") =
+  (((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("dot","CommentSL")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("dot","CommentML") =
+  (((pDetect2Chars False '*' '/' >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("dot","CommentML")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("Alerts", _) = Text.Highlighting.Kate.Syntax.Alert.parseExpression Nothing
+
+parseRules x = parseRules ("dot","Normal") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Doxygen.hs b/Text/Highlighting/Kate/Syntax/Doxygen.hs
--- a/Text/Highlighting/Kate/Syntax/Doxygen.hs
+++ b/Text/Highlighting/Kate/Syntax/Doxygen.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file doxygen.xml, version 1.36, by Dominik Haumann (dhdev@gmx.de) -}
+   highlighting file doxygen.xml, version 1.37, by Dominik Haumann (dhdev@gmx.de) -}
 
 module Text.Highlighting.Kate.Syntax.Doxygen
           (highlight, parseExpression, syntaxName, syntaxExtensions)
diff --git a/Text/Highlighting/Kate/Syntax/Email.hs b/Text/Highlighting/Kate/Syntax/Email.hs
--- a/Text/Highlighting/Kate/Syntax/Email.hs
+++ b/Text/Highlighting/Kate/Syntax/Email.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file email.xml, version 1.00, by Carl A Joslin (carl.joslin@joslin.dyndns.org) -}
+   highlighting file email.xml, version 1.01, by Carl A Joslin (carl.joslin@joslin.dyndns.org) -}
 
 module Text.Highlighting.Kate.Syntax.Email
           (highlight, parseExpression, syntaxName, syntaxExtensions)
@@ -159,45 +159,45 @@
    <|>
    ((pColumn 0 >> pRegExpr regex_'5bRr'5deceived'3a >>= withAttribute NormalTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bMm'5dozilla'2d'5bSs'5dtatus'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bMm'5dozilla'2d'5bSs'5dtatus'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bMm'5dozilla'2d'5bSs'5dtatus2'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bMm'5dozilla'2d'5bSs'5dtatus2'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bEe'5dnverlope'2d'5bTt'5do'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bEe'5dnverlope'2d'5bTt'5do'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bDd'5delivery'2d'5bDd'5date'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bDd'5delivery'2d'5bDd'5date'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bOo'5driginating'2d'5bIi'5d'5bPp'5d'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bOo'5driginating'2d'5bIi'5d'5bPp'5d'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bOo'5driginating'2d'5bEe'5dmail'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bOo'5driginating'2d'5bEe'5dmail'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bSs'5dender'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bSs'5dender'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bMm'5dime'2d'5bVv'5dersion'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bMm'5dime'2d'5bVv'5dersion'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bCc'5dontent'2d'5bTt'5dype'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bCc'5dontent'2d'5bTt'5dype'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bMm'5dailing'2d'5bLl'5dist'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bMm'5dailing'2d'5bLl'5dist'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bLl'5doop'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bLl'5doop'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bLl'5dist'2d'5bPp'5dost'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bLl'5dist'2d'5bPp'5dost'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bLl'5dist'2d'5bHh'5delp'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bLl'5dist'2d'5bHh'5delp'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bLl'5dist'2d'5bUu'5dnsubscribe'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bLl'5dist'2d'5bUu'5dnsubscribe'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bPp'5drecedence'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bPp'5drecedence'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bCc'5dontent'2d'5bTt'5dransfer'2d'5bEe'5dncoding'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bCc'5dontent'2d'5bTt'5dransfer'2d'5bEe'5dncoding'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bCc'5dontent'2d'5bTt'5dype'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bCc'5dontent'2d'5bTt'5dype'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bBb'5dulkmail'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bXx'5d'2d'5bBb'5dulkmail'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bPp'5drecedence'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bPp'5drecedence'3a >>= withAttribute CommentTok))
    <|>
-   ((pColumn 0 >> pRegExpr regex_'5bCc'5dontent'2d'5bDd'5disposition'3a >>= withAttribute NormalTok))
+   ((pColumn 0 >> pRegExpr regex_'5bCc'5dontent'2d'5bDd'5disposition'3a >>= withAttribute CommentTok))
    <|>
    ((pColumn 0 >> pRegExpr regex_'5b0'2d9a'2dzA'2dZ'2d'2e'5d'2b'3a >>= withAttribute NormalTok))
    <|>
diff --git a/Text/Highlighting/Kate/Syntax/Fasm.hs b/Text/Highlighting/Kate/Syntax/Fasm.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Fasm.hs
@@ -0,0 +1,121 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file fasm.xml, version 0.2, by rCX (rCX12@yahoo.com) -}
+
+module Text.Highlighting.Kate.Syntax.Fasm
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "Intel x86 (FASM)"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.asm;*.inc;*.fasm"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("Intel x86 (FASM)","Normal")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = False, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("Intel x86 (FASM)","Normal") -> return ()
+      ("Intel x86 (FASM)","Comment") -> (popContext) >> pEndLine
+      ("Intel x86 (FASM)","Preprocessor") -> (popContext) >> pEndLine
+      ("Intel x86 (FASM)","String") -> (popContext) >> pEndLine
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_registers = Set.fromList $ words $ "rax eax ax ah al rbx ebx bx bh bl rcx ecx cx ch cl rdx edx dx dh dl rbp ebp bp rsi esi si rdi edi di rsp esp sp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss cr0 cr2 cr3 cr4 dr0 dr1 dr2 dr3 dr6 dr7 st mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7"
+list_instructions = Set.fromList $ words $ "aaa aad aam aas adc add addpd addps addsd addss addsubpd addsubps and andnpd andnps andpd andps arpl bound bsf bsr bswap bt btc btr bts call cbw cwde cwd cdq cdqe cqo clc cld clgi cli clts clflush cmc cmova cmovae cmovb cmovbe cmovc cmove cmovg cmovge cmovl cmovle cmovna cmovnae cmovnb cmovnbe cmovnc cmovne cmovng cmovnge cmovnl cmovnle cmovno cmovnp cmovns cmovnz cmovo cmovp cmovpe cmovpo cmovs cmovz cmp cmpeqpd cmpeqps cmpeqsd cmpeqss cmplepd cmpleps cmplesd cmpless cmpltpd cmpltps cmpltsd cmpltss cmpneqpd cmpneqps cmpneqsd cmpneqss cmpnlepd cmpnleps cmpnlesd cmpnless cmpnltpd cmpnltps cmpnltsd cmpnltss cmpordpd cmpordps cmpordsd cmpordss cmppd cmpps cmps cmpsb cmpsd cmpss cmpsw cmpunordpd cmpunordps cmpunordsd cmpunordss cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b comisd comiss cpuid cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtpi2ps cvtps2dq cvtps2pd cvtps2pi cvtsd2si cvtsd2ss cvtsi2sd cvtsi2ss cvtss2sd cvtss2si cvttpd2dq cvttpd2pi cvttps2dq cvttps2pi cvttsd2si cvttss2si daa das dec div divpd divps divsd divss emms enter f2xm1 fabs fadd faddp fbld fbstp fchs fclex fnclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomp fcompp fcomi fcomip fcos fdecstp fdisi feni fdiv fdivr fdivp fdivrp femms ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldl2e fldl2t fldlg2 fldln2 fldcw fldenv fldpi fldz fmul fmulp fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fnwait fpatan fptan fprem fprem1 frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstp fstcw fstenv fstsw fsub fsubr fsubp fsubrp ftst fucom fucomp fucompp fucomi fucomip fwait fxam fxch fxrstor fxsave fxtract fyl2x fyl2xp1 haddpd haddps hlt hsubpd hsubps ibts idiv imul in inc ins insb insd insw int int1 int3 into invd invlpg invlpga iret iretd iretq iretw ja jae jb jbe jc je jg jge jl jle jna jnae jnb jnbe jnc jne jng jnge jnl jnle jno jnp jns jnz jo jp jpe jpo js jz jcxz jecxz jrcxz jmp lahf lar lddqu ldmxcsr lds les lea leave lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lods lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr maskmovdqu maskmovq maxpd maxps maxsd maxss mfence minpd minps minsd minss monitor mov movapd movaps movd movddup movdq2q movdqa movdqu movhlps movhpd movhps movlhps movlpd movlps movmskpd movmskps movntdq movnti movntpd movntps movntq movq movq2dq movs movsb movsd movshdup movsldup movsq movss movsx movsxd movsw movupd movups movzx mul mulpd mulps mulsd mulss mwait neg nop not or orpd orps out outs outsb outsw outsd packssdw packsswb packuswb paddb paddd paddq paddsb paddsw paddusb paddusw paddw pand pandn pause pavgb pavgusb pavgw pcmpeqb pcmpeqw pcmpeqd pcmpgtb pcmpgtw pcmpgtd pdistib pextrw pf2id pf2iw pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfnacc pfpnacc pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pi2fw pinsrw pmachriw pmaddwd pmagw pmaxsw pmaxub pminsw pminub pmovmskb pmulhrw pmulhuw pmulhw pmullw pmuludq pmvgezb pmvlzb pmvnzb pmvzb pop popa popaw popad popf popfw popfd popfq por prefetch prefetchnta prefetcht0 prefetcht1 prefetcht2 prefetchw psadbw pshufd pshufhw pshuflw pshufw pslld pslldq psllq psllw psrad psraw psrld psrldq psrlq psrlw psubb psubd psubq psubsb psubsiw psubsw psubusb psubusw psubw pswapd punpckhbw punpckhdq punpckhqdq punpckhwd punpcklbw punpckldq punpcklqdq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rcpps rcpss rdmsr rdpmc rdshr rdtsc rdtscp ret retf retn rol ror rsdc rsldt rsm rsqrtps rsqrtss rsts sahf sal sar salc sbb scas scasb scasd scasq scasw seta setae setb setbe setc sete setg setge setl setle setna setnae setnb setnbe setnc setne setng setnge setnl setnle setno setnp setns setnz seto setp setpe setpo sets setz sfence sgdt shl shld shr shrd shufpd shufps sidt skinit sldt smi smint smintold smsw sqrtpd sqrtps sqrtsd sqrtss stc std stgi sti stmxcsr stos stosb stosd stosq stosw str sub subpd subps subsd subss svdc svldt svts swapgs syscall sysenter sysexit sysret test ucomisd ucomiss ud0 ud1 ud2 umov unpckhpd unpckhps unpcklpd unpcklps verr verw vmload vmmcall vmrun vmsave wait wbinvd wrmsr wrshr xadd xbts xchg xlat xlatb xor xorpd xorps"
+list_Data = Set.fromList $ words $ "db dw du dd dp df dq dt rb rw rd rp rf rq rt file byte word dword pword qword tbyte tword dqword ptr"
+list_Preprocessor_Keywords = Set.fromList $ words $ "append at break common display else end equ fix foward if irp irps label local match macro purge repeat rept reverse restore struc times while virtual"
+list_Instruction'2dlike_Keywords = Set.fromList $ words $ "align entry extrn format include invoke data load from heap org proc public section segment stack store use16 use32 use64"
+
+regex_'5cs'2a'5bA'2dZa'2dz0'2d9'40'5f'2e'24'3f'5d'2b'3a = compileRegex True "\\s*[A-Za-z0-9@_.$?]+:"
+regex_'28cmov'7cfcmov'7cj'7cloop'7cset'29'28a'7cae'7cb'7cbe'7cc'7ce'7cg'7cge'7cl'7cle'7cna'7cnae'7cnb'7cnbe'7cnc'7cne'7cng'7cnge'7cnl'7cnle'7cno'7cnp'7cns'7cnz'7co'7cp'7cpe'7cpo'7cs'7cz'29 = compileRegex True "(cmov|fcmov|j|loop|set)(a|ae|b|be|c|e|g|ge|l|le|na|nae|nb|nbe|nc|ne|ng|nge|nl|nle|no|np|ns|nz|o|p|pe|po|s|z)"
+regex_'28'5e'7c'5b_'5ct'2c'5d'2b'29'28'28'5c'24'7c0x'29'7b1'7d'5b0'2d9'5d'2b'5ba'2df0'2d9'5d'2a'7c'5ba'2df0'2d9'5d'2bh'29'28'5b_'5ct'2c'5d'2b'7c'24'29 = compileRegex True "(^|[ \\t,]+)((\\$|0x){1}[0-9]+[a-f0-9]*|[a-f0-9]+h)([ \\t,]+|$)"
+regex_'28'5e'7c'5b_'5ct'2c'5d'2b'29'28'5b0'2d7'5d'2b'28q'7co'29'7c'5b01'5d'2bb'29'28'5b_'5ct'2c'5d'2b'7c'24'29 = compileRegex True "(^|[ \\t,]+)([0-7]+(q|o)|[01]+b)([ \\t,]+|$)"
+
+parseRules ("Intel x86 (FASM)","Normal") =
+  (((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_registers >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_Data >>= withAttribute DataTypeTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_instructions >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_Instruction'2dlike_Keywords >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_Preprocessor_Keywords >>= withAttribute OtherTok))
+   <|>
+   ((pDetectChar False ';' >>= withAttribute CommentTok) >>~ pushContext ("Intel x86 (FASM)","Comment"))
+   <|>
+   ((pAnyChar "\"'" >>= withAttribute StringTok) >>~ pushContext ("Intel x86 (FASM)","String"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5cs'2a'5bA'2dZa'2dz0'2d9'40'5f'2e'24'3f'5d'2b'3a >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'28cmov'7cfcmov'7cj'7cloop'7cset'29'28a'7cae'7cb'7cbe'7cc'7ce'7cg'7cge'7cl'7cle'7cna'7cnae'7cnb'7cnbe'7cnc'7cne'7cng'7cnge'7cnl'7cnle'7cno'7cnp'7cns'7cnz'7co'7cp'7cpe'7cpo'7cs'7cz'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b_'5ct'2c'5d'2b'29'28'28'5c'24'7c0x'29'7b1'7d'5b0'2d9'5d'2b'5ba'2df0'2d9'5d'2a'7c'5ba'2df0'2d9'5d'2bh'29'28'5b_'5ct'2c'5d'2b'7c'24'29 >>= withAttribute BaseNTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b_'5ct'2c'5d'2b'29'28'5b0'2d7'5d'2b'28q'7co'29'7c'5b01'5d'2bb'29'28'5b_'5ct'2c'5d'2b'7c'24'29 >>= withAttribute BaseNTok))
+   <|>
+   ((pDetectChar False '$' >>= withAttribute DecValTok))
+   <|>
+   ((pHlCOct >>= withAttribute BaseNTok))
+   <|>
+   ((pHlCHex >>= withAttribute BaseNTok))
+   <|>
+   ((pFloat >>= withAttribute FloatTok))
+   <|>
+   ((pInt >>= withAttribute DecValTok))
+   <|>
+   ((pHlCChar >>= withAttribute CharTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Intel x86 (FASM)","Normal")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Intel x86 (FASM)","Comment") =
+  (currentContext >>= \x -> guard (x == ("Intel x86 (FASM)","Comment")) >> pDefault >>= withAttribute CommentTok)
+
+parseRules ("Intel x86 (FASM)","Preprocessor") =
+  (currentContext >>= \x -> guard (x == ("Intel x86 (FASM)","Preprocessor")) >> pDefault >>= withAttribute OtherTok)
+
+parseRules ("Intel x86 (FASM)","String") =
+  (((pAnyChar "\"'" >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Intel x86 (FASM)","String")) >> pDefault >>= withAttribute StringTok))
+
+
+parseRules x = parseRules ("Intel x86 (FASM)","Normal") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Fsharp.hs b/Text/Highlighting/Kate/Syntax/Fsharp.hs
--- a/Text/Highlighting/Kate/Syntax/Fsharp.hs
+++ b/Text/Highlighting/Kate/Syntax/Fsharp.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file fsharp.xml, version 0.0.1, by Bas Bossink (bas.bossink@gmail.com) -}
+   highlighting file fsharp.xml, version 0.1, by Bas Bossink (bas.bossink@gmail.com) -}
 
 module Text.Highlighting.Kate.Syntax.Fsharp
           (highlight, parseExpression, syntaxName, syntaxExtensions)
diff --git a/Text/Highlighting/Kate/Syntax/Glsl.hs b/Text/Highlighting/Kate/Syntax/Glsl.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Glsl.hs
@@ -0,0 +1,131 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file glsl.xml, version 1.03, by Oliver Richers (o.richers@tu-bs.de) -}
+
+module Text.Highlighting.Kate.Syntax.Glsl
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "GLSL"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.glsl;*.vert;*.frag;*.geom"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("GLSL","Normal")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("GLSL","Normal") -> return ()
+      ("GLSL","Member") -> (popContext) >> pEndLine
+      ("GLSL","Commentar 1") -> (popContext) >> pEndLine
+      ("GLSL","Commentar 2") -> return ()
+      ("GLSL","Preprocessor") -> (popContext) >> pEndLine
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_keywords = Set.fromList $ words $ "break continue do for while if else true false discard return struct"
+list_types = Set.fromList $ words $ "float int void bool mat2 mat3 mat4 vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow"
+list_typequal = Set.fromList $ words $ "attribute const uniform varying in out inout"
+list_attention = Set.fromList $ words $ "FIXME TODO BUG"
+list_stdlib = Set.fromList $ words $ "radians degrees sin cos tan asin acos atan pow exp log exp2 log2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThenEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"
+list_stdvar = Set.fromList $ words $ "gl_Position gl_PointSize gl_ClipVertex gl_FragCoord gl_FragFacing gl_FragColor gl_FragData gl_FragDepth gl_Color gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogColor gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttributes gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxDrawBuffers gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixInverse gl_ModelViewMatrixTranspose gl_ProjectionMatrixTranspose gl_ModelViewProjectionMatrixTranspose gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormScale gl_DepthRangeParameters gl_DepthRange gl_ClipPlane gl_PointParameters gl_Point gl_MaterialParameters gl_FrontMaterial gl_BackMaterial gl_LightSourceParameters gl_LightSource gl_LightModelParameters gl_LightModel gl_LightModelProducts gl_FrontLightModelProduct gl_BackLightModelProduct gl_LightProducts gl_FrontLightProduct gl_BackLightProduct gl_TextureEnvColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_ObjectPlaneS gl_ObjectPlaneT gl_ObjectPlaneR gl_ObjectPlaneQ gl_FogParameters gl_Fog gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_Color gl_SecondaryColor"
+
+regex_'5cb'5b'5f'5cw'5d'5b'5f'5cw'5cd'5d'2a'28'3f'3d'5b'5cs'5d'2a'5b'28'5d'29 = compileRegex True "\\b[_\\w][_\\w\\d]*(?=[\\s]*[(])"
+regex_'5b'2e'5d'7b1'2c1'7d = compileRegex True "[.]{1,1}"
+regex_'5cb'5b'5f'5cw'5d'5b'5f'5cw'5cd'5d'2a'28'3f'3d'5b'5cs'5d'2a'29 = compileRegex True "\\b[_\\w][_\\w\\d]*(?=[\\s]*)"
+
+parseRules ("GLSL","Normal") =
+  (((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_keywords >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_types >>= withAttribute DataTypeTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_typequal >>= withAttribute DataTypeTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_stdlib >>= withAttribute FunctionTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_stdvar >>= withAttribute FunctionTok))
+   <|>
+   ((pFloat >>= withAttribute FloatTok))
+   <|>
+   ((pHlCOct >>= withAttribute BaseNTok))
+   <|>
+   ((pHlCHex >>= withAttribute BaseNTok))
+   <|>
+   ((pInt >>= withAttribute DecValTok))
+   <|>
+   ((pDetect2Chars False '/' '/' >>= withAttribute CommentTok) >>~ pushContext ("GLSL","Commentar 1"))
+   <|>
+   ((pDetect2Chars False '/' '*' >>= withAttribute CommentTok) >>~ pushContext ("GLSL","Commentar 2"))
+   <|>
+   ((pDetectChar False '{' >>= withAttribute NormalTok))
+   <|>
+   ((pDetectChar False '}' >>= withAttribute NormalTok))
+   <|>
+   ((pFirstNonSpace >> pDetectChar False '#' >>= withAttribute OtherTok) >>~ pushContext ("GLSL","Preprocessor"))
+   <|>
+   ((pRegExpr regex_'5cb'5b'5f'5cw'5d'5b'5f'5cw'5cd'5d'2a'28'3f'3d'5b'5cs'5d'2a'5b'28'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5b'2e'5d'7b1'2c1'7d >>= withAttribute NormalTok) >>~ pushContext ("GLSL","Member"))
+   <|>
+   ((pAnyChar ".+-/*%<>[]()^|&~=!:;,?;" >>= withAttribute NormalTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("GLSL","Normal")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("GLSL","Member") =
+  (((pRegExpr regex_'5cb'5b'5f'5cw'5d'5b'5f'5cw'5cd'5d'2a'28'3f'3d'5b'5cs'5d'2a'29 >>= withAttribute FunctionTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("GLSL","Commentar 1") =
+  (((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_attention >>= withAttribute AlertTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("GLSL","Commentar 1")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("GLSL","Commentar 2") =
+  (((pDetect2Chars False '*' '/' >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_attention >>= withAttribute AlertTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("GLSL","Commentar 2")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("GLSL","Preprocessor") =
+  (currentContext >>= \x -> guard (x == ("GLSL","Preprocessor")) >> pDefault >>= withAttribute OtherTok)
+
+
+parseRules x = parseRules ("GLSL","Normal") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Haskell.hs b/Text/Highlighting/Kate/Syntax/Haskell.hs
--- a/Text/Highlighting/Kate/Syntax/Haskell.hs
+++ b/Text/Highlighting/Kate/Syntax/Haskell.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file haskell.xml, version 2.2, by Nicolas Wu (zenzike@gmail.com) -}
+   highlighting file haskell.xml, version 2.4, by Nicolas Wu (zenzike@gmail.com) -}
 
 module Text.Highlighting.Kate.Syntax.Haskell
           (highlight, parseExpression, syntaxName, syntaxExtensions)
@@ -68,7 +68,7 @@
   return (attr, txt)
 
 list_keywords = Set.fromList $ words $ "case class data deriving do else if in infixl infixr instance let module newtype of primitive then type where"
-list_prelude_function = Set.fromList $ words $ "abs acos acosh all and any appendFile approxRational asTypeOf asin asinh atan atan2 atanh basicIORun break catch ceiling chr compare concat concatMap const cos cosh curry cycle decodeFloat denominator digitToInt div divMod drop dropWhile either elem encodeFloat enumFrom enumFromThen enumFromThenTo enumFromTo error even exp exponent fail filter flip floatDigits floatRadix floatRange floor fmap foldl foldl1 foldr foldr1 fromDouble fromEnum fromInt fromInteger fromIntegral fromRational fst gcd getChar getContents getLine group head id inRange index init intToDigit interact ioError isAlpha isAlphaNum isAscii isControl isDenormalized isDigit isHexDigit isIEEE isInfinite isLower isNaN isNegativeZero isOctDigit isPrint isSpace isUpper iterate last lcm length lex lexDigits lexLitChar lines log logBase lookup map mapM mapM_ max maxBound maximum maybe min minBound minimum mod negate not notElem null numerator odd or ord otherwise pack pi pred primExitWith print product properFraction putChar putStr putStrLn quot quotRem range rangeSize read readDec readFile readFloat readHex readIO readInt readList readLitChar readLn readOct readParen readSigned reads readsPrec realToFrac recip rem repeat replicate return reverse round scaleFloat scanl scanl1 scanr scanr1 seq sequence sequence_ show showChar showInt showList showLitChar showParen showSigned showString shows showsPrec significand signum sin sinh snd sort span splitAt sqrt subtract succ sum tail take takeWhile tan tanh threadToIOResult toEnum toInt toInteger toLower toRational toUpper truncate uncurry undefined unlines until unwords unzip unzip3 userError words writeFile zip zip3 zipWith zipWith3"
+list_prelude_function = Set.fromList $ words $ "FilePath IOError abs acos acosh all and any appendFile approxRational asTypeOf asin asinh atan atan2 atanh basicIORun break catch ceiling chr compare concat concatMap const cos cosh curry cycle decodeFloat denominator digitToInt div divMod drop dropWhile either elem encodeFloat enumFrom enumFromThen enumFromThenTo enumFromTo error even exp exponent fail filter flip floatDigits floatRadix floatRange floor fmap foldl foldl1 foldr foldr1 fromDouble fromEnum fromInt fromInteger fromIntegral fromRational fst gcd getChar getContents getLine group head id inRange index init intToDigit interact ioError isAlpha isAlphaNum isAscii isControl isDenormalized isDigit isHexDigit isIEEE isInfinite isLower isNaN isNegativeZero isOctDigit isPrint isSpace isUpper iterate last lcm length lex lexDigits lexLitChar lines log logBase lookup map mapM mapM_ max maxBound maximum maybe min minBound minimum mod negate not notElem null numerator odd or ord otherwise pack pi pred primExitWith print product properFraction putChar putStr putStrLn quot quotRem range rangeSize read readDec readFile readFloat readHex readIO readInt readList readLitChar readLn readOct readParen readSigned reads readsPrec realToFrac recip rem repeat replicate return reverse round scaleFloat scanl scanl1 scanr scanr1 seq sequence sequence_ show showChar showInt showList showLitChar showParen showSigned showString shows showsPrec significand signum sin sinh snd sort span splitAt sqrt subtract succ sum tail take takeWhile tan tanh threadToIOResult toEnum toInt toInteger toLower toRational toUpper truncate uncurry undefined unlines until unwords unzip unzip3 userError words writeFile zip zip3 zipWith zipWith3"
 list_prelude_class = Set.fromList $ words $ "Bounded Enum Eq Floating Fractional Functor Integral Ix Monad Num Ord Read Real RealFloat RealFrac Show"
 list_prelude_type = Set.fromList $ words $ "Bool Char Double Either FilePath Float Int Integer IO IOError Maybe Ordering Ratio Rational ReadS ShowS String ByteString"
 list_prelude_data = Set.fromList $ words $ "False True Left Right Just Nothing EQ LT GT"
@@ -88,7 +88,9 @@
 regex_'28'5bA'2dZ'5d'5ba'2dzA'2dZ0'2d9'5f'27'5d'2a'5c'2e'29'2a'5ba'2dz'5d'5ba'2dzA'2dZ0'2d9'5f'27'5d'2a = compileRegex True "([A-Z][a-zA-Z0-9_']*\\.)*[a-z][a-zA-Z0-9_']*"
 regex_'28'5bA'2dZ'5d'5ba'2dzA'2dZ0'2d0'5f'27'5d'2a'5c'2e'29'2a'5b'5c'2d'21'23'5c'24'25'26'5c'2a'5c'2b'2f'3c'3d'3e'5c'3f'5c'40'5c'5e'5c'7c'7e'5c'2e'3a'5d'2b = compileRegex True "([A-Z][a-zA-Z0-0_']*\\.)*[\\-!#\\$%&\\*\\+/<=>\\?\\@\\^\\|~\\.:]+"
 regex_'28'5bA'2dZ'5d'5ba'2dzA'2dZ0'2d9'5f'27'5d'2a'5c'2e'29'2a'5bA'2dZ'5d'5ba'2dzA'2dZ0'2d9'5f'27'5d'2a = compileRegex True "([A-Z][a-zA-Z0-9_']*\\.)*[A-Z][a-zA-Z0-9_']*"
-regex_'5cd'2b'5c'2e'5cd'2b = compileRegex True "\\d+\\.\\d+"
+regex_'5cd'2b'5c'2e'5cd'2b'28'5bEe'5d'5b'2b'2d'5d'3f'5cd'2b'29'3f'7c'5cd'2b'5bEe'5d'5b'2b'2d'5d'3f'5cd'2b = compileRegex True "\\d+\\.\\d+([Ee][+-]?\\d+)?|\\d+[Ee][+-]?\\d+"
+regex_0'5bOo'5d'5b0'2d7'5d'2b = compileRegex True "0[Oo][0-7]+"
+regex_0'5bXx'5d'5b0'2d9A'2dFa'2df'5d'2b = compileRegex True "0[Xx][0-9A-Fa-f]+"
 regex_'5c'5c'2e = compileRegex True "\\\\."
 regex_context = compileRegex True "context"
 regex_call = compileRegex True "call"
@@ -142,9 +144,13 @@
    <|>
    ((pRegExpr regex_'28'5bA'2dZ'5d'5ba'2dzA'2dZ0'2d9'5f'27'5d'2a'5c'2e'29'2a'5bA'2dZ'5d'5ba'2dzA'2dZ0'2d9'5f'27'5d'2a >>= withAttribute DataTypeTok))
    <|>
-   ((pInt >>= withAttribute DecValTok))
+   ((pRegExpr regex_'5cd'2b'5c'2e'5cd'2b'28'5bEe'5d'5b'2b'2d'5d'3f'5cd'2b'29'3f'7c'5cd'2b'5bEe'5d'5b'2b'2d'5d'3f'5cd'2b >>= withAttribute FloatTok))
    <|>
-   ((pRegExpr regex_'5cd'2b'5c'2e'5cd'2b >>= withAttribute FloatTok))
+   ((pRegExpr regex_0'5bOo'5d'5b0'2d7'5d'2b >>= withAttribute BaseNTok))
+   <|>
+   ((pRegExpr regex_0'5bXx'5d'5b0'2d9A'2dFa'2df'5d'2b >>= withAttribute BaseNTok))
+   <|>
+   ((pInt >>= withAttribute DecValTok))
    <|>
    ((pDetectChar False '\'' >>= withAttribute CharTok) >>~ pushContext ("Haskell","char"))
    <|>
diff --git a/Text/Highlighting/Kate/Syntax/Javadoc.hs b/Text/Highlighting/Kate/Syntax/Javadoc.hs
--- a/Text/Highlighting/Kate/Syntax/Javadoc.hs
+++ b/Text/Highlighting/Kate/Syntax/Javadoc.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file javadoc.xml, version 1.04, by Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br) -}
+   highlighting file javadoc.xml, version 1.05, by Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br) -}
 
 module Text.Highlighting.Kate.Syntax.Javadoc
           (highlight, parseExpression, syntaxName, syntaxExtensions)
diff --git a/Text/Highlighting/Kate/Syntax/Lilypond.hs b/Text/Highlighting/Kate/Syntax/Lilypond.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Lilypond.hs
@@ -0,0 +1,844 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file lilypond.xml, version 3.07, by Wilbert Berendsen (info@wilbertberendsen.nl) -}
+
+module Text.Highlighting.Kate.Syntax.Lilypond
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import qualified Text.Highlighting.Kate.Syntax.Alert
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "LilyPond"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.ly;*.LY;*.ily;*.ILY;*.lyi;*.LYI"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("LilyPond","lilypond")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("LilyPond","lilypond") -> return ()
+      ("LilyPond","music") -> return ()
+      ("LilyPond","default") -> return ()
+      ("LilyPond","basic") -> return ()
+      ("LilyPond","musiccommand") -> (popContext) >> pEndLine
+      ("LilyPond","command") -> (popContext) >> pEndLine
+      ("LilyPond","assignment") -> (popContext) >> pEndLine
+      ("LilyPond","pitch") -> return ()
+      ("LilyPond","duration") -> return ()
+      ("LilyPond","chord") -> return ()
+      ("LilyPond","chordpitch") -> return ()
+      ("LilyPond","chordend") -> return ()
+      ("LilyPond","commentline") -> (popContext) >> pEndLine
+      ("LilyPond","commentblock") -> return ()
+      ("LilyPond","string") -> return ()
+      ("LilyPond","connect") -> return ()
+      ("LilyPond","scheme") -> return ()
+      ("LilyPond","scheme2") -> (popContext >> popContext) >> pEndLine
+      ("LilyPond","scheme3") -> return ()
+      ("LilyPond","schemerules") -> return ()
+      ("LilyPond","schemequote") -> (popContext) >> pEndLine
+      ("LilyPond","schemelily") -> return ()
+      ("LilyPond","schemecommentline") -> (popContext) >> pEndLine
+      ("LilyPond","schemecommentblock") -> return ()
+      ("LilyPond","schemesub") -> (popContext) >> pEndLine
+      ("LilyPond","schemestring") -> return ()
+      ("LilyPond","notemode") -> return ()
+      ("LilyPond","notemode2") -> return ()
+      ("LilyPond","noterules") -> return ()
+      ("LilyPond","drummode") -> return ()
+      ("LilyPond","drummode2") -> return ()
+      ("LilyPond","drumrules") -> return ()
+      ("LilyPond","drumchord") -> return ()
+      ("LilyPond","chordmode") -> return ()
+      ("LilyPond","chordmode2") -> return ()
+      ("LilyPond","chordrules") -> return ()
+      ("LilyPond","figuremode") -> return ()
+      ("LilyPond","figuremode2") -> return ()
+      ("LilyPond","figurerules") -> return ()
+      ("LilyPond","figure") -> return ()
+      ("LilyPond","lyricmode") -> return ()
+      ("LilyPond","lyricmode2") -> return ()
+      ("LilyPond","lyricsto") -> return ()
+      ("LilyPond","lyricsto2") -> return ()
+      ("LilyPond","lyricsto3") -> return ()
+      ("LilyPond","lyricrules") -> return ()
+      ("LilyPond","markup") -> return ()
+      ("LilyPond","markup2") -> return ()
+      ("LilyPond","markuprules") -> return ()
+      ("LilyPond","section") -> return ()
+      ("LilyPond","section2") -> return ()
+      ("LilyPond","sectionrules") -> return ()
+      ("LilyPond","context") -> return ()
+      ("LilyPond","context2") -> return ()
+      ("LilyPond","set") -> return ()
+      ("LilyPond","override") -> return ()
+      ("LilyPond","tempo") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_contexts = Set.fromList $ words $ "ChoirStaff ChordNames CueVoice Devnull DrumStaff DrumVoice Dynamics FiguredBass FretBoards Global GrandStaff GregorianTranscriptionStaff GregorianTranscriptionVoice Lyrics MensuralStaff MensuralVoice NoteNames PianoStaff RhythmicStaff Score Staff StaffGroup TabStaff TabVoice Timing VaticanaStaff VaticanaVoice Voice"
+list_deprecatedcontexts = Set.fromList $ words $ "InnerChoirStaff InnerStaffGroup"
+list_layoutobjects = Set.fromList $ words $ "Accidental AccidentalCautionary AccidentalPlacement AccidentalSuggestion Ambitus AmbitusAccidental AmbitusLine AmbitusNoteHead Arpeggio BalloonTextItem BarLine BarNumber BassFigure BassFigureAlignment BassFigureAlignmentPositioning BassFigureBracket BassFigureContinuation BassFigureLine Beam BendAfter BreakAlignGroup BreakAlignment BreathingSign ChordName Clef ClusterSpanner ClusterSpannerBeacon CombineTextScript Custos DotColumn Dots DoublePercentRepeat DoublePercentRepeatCounter DynamicLineSpanner DynamicText DynamicTextSpanner Episema Fingering FretBoard Glissando GraceSpacing GridLine GridPoint Hairpin HarmonicParenthesesItem HorizontalBracket InstrumentName InstrumentSwitch KeyCancellation KeySignature LaissezVibrerTie LaissezVibrerTieColumn LedgerLineSpanner LeftEdge LigatureBracket LyricExtender LyricHyphen LyricSpace LyricText MeasureGrouping MelodyItem MensuralLigature MetronomeMark MultiMeasureRest MultiMeasureRestNumber MultiMeasureRestText NonMusicalPaperColumn NoteCollision NoteColumn NoteHead NoteName NoteSpacing OctavateEight OttavaBracket PaperColumn ParenthesesItem PercentRepeat PercentRepeatCounter PhrasingSlur PianoPedalBracket RehearsalMark RepeatSlash RepeatTie RepeatTieColumn Rest RestCollision Script ScriptColumn ScriptRow SeparationItem Slur SostenutoPedal SostenutoPedalLineSpanner SpacingSpanner SpanBar StaffGrouper StaffSpacing StaffSymbol StanzaNumber Stem StemTremolo StringNumber StrokeFinger SustainPedal SustainPedalLineSpanner System SystemStartBar SystemStartBrace SystemStartBracket SystemStartSquare TabNoteHead TextScript TextSpanner Tie TieColumn TimeSignature TrillPitchAccidental TrillPitchGroup TrillPitchHead TrillSpanner TupletBracket TupletNumber UnaCordaPedal UnaCordaPedalLineSpanner VaticanaLigature VerticalAlignment VerticalAxisGroup VoiceFollower VoltaBracket VoltaBracketSpanner"
+list_properties = Set.fromList $ words $ "aDueText alignAboveContext alignBassFigureAccidentals alignBelowContext allowBeamBreak associatedVoice autoAccidentals autoBeamCheck autoBeamSettings autoBeaming autoCautionaries automaticBars barAlways barCheckSynchronize barNumberVisibility baseMoment bassFigureFormatFunction bassStaffProperties beamExceptions beatGrouping beatLength beatStructure chordChanges chordNameExceptions chordNameExceptionsFull chordNameExceptionsPartial chordNameFunction chordNameSeparator chordNoteNamer chordPrefixSpacer chordRootNamer clefGlyph clefOctavation clefPosition connectArpeggios countPercentRepeats createKeyOnClefChange createSpacing crescendoSpanner crescendoText currentBarNumber decrescendoSpanner decrescendoText defaultBarType doubleSlurs doubleRepeatType drumPitchTable drumStyleTable dynamicAbsoluteVolumeFunction explicitClefVisibility explicitKeySignatureVisibility extendersOverRests extraNatural figuredBassAlterationDirection figuredBassCenterContinuations figuredBassFormatter figuredBassPlusDirection fingeringOrientations firstClef followVoice fontSize forbidBreak forceClef gridInterval hairpinToBarline harmonicAccidentals highStringOne ignoreBarChecks ignoreFiguredBassRest ignoreMelismata implicitBassFigures implicitTimeSignatureVisibility instrumentCueName instrumentEqualizer instrumentName instrumentTransposition internalBarNumber keepAliveInterfaces keyAlterationOrder keySignature lyricMelismaAlignment majorSevenSymbol markFormatter maximumFretStretch measureLength measurePosition melismaBusyProperties metronomeMarkFormatter middleCClefPosition middleCOffset middleCPosition midiInstrument midiMaximumVolume midiMinimumVolume minimumFret minimumPageTurnLength minimumRepeatLengthForPageTurn noteToFretFunction ottavation output pedalSostenutoStrings pedalSostenutoStyle pedalSustainStrings pedalSustainStyle pedalUnaCordaStrings pedalUnaCordaStyle printKeyCancellation printOctaveNames printPartCombineTexts proportionalNotationDuration recordEventSequence rehearsalMark repeatCommands restNumberThreshold scriptDefinitions shapeNoteStyles shortInstrumentName shortVocalName skipBars skipTypesetting soloIIText soloText squashedPosition staffLineLayoutFunction stanza stemLeftBeamCount stemRightBeamCount stringNumberOrientations stringOneTopmost stringTunings strokeFingerOrientations subdivideBeams suggestAccidentals systemStartDelimiter systemStartDelimiterHierarchy tablatureFormat tempoUnitCount tempoUnitDuration tempoWholesPerMinute tieWaitForNote timeSignatureFraction timing tonic topLevelAlignment trebleStaffProperties tremoloFlags tupletFullLength tupletFullLengthNote tupletSpannerDuration useBassFigureExtenders verticallySpacedContexts vocalName voltaOnThisStaff voltaSpannerDuration whichBar"
+list_deprecatedproperties = Set.fromList $ words $ "barNumberAlignSymbol centralCPosition extraVerticalExtent fingerHorizontalDirection instr instrument keyAccidentalOrder minimumVerticalExtent rehearsalMarkAlignSymbol soloADue tupletNumberFormatFunction vocNam"
+list_musicexpressions = Set.fromList $ words $ "AbsoluteDynamicEvent AnnotateOutputEvent ApplyContext ApplyOutputEvent ArpeggioEvent ArticulationEvent AutoChangeMusic BarCheck BassFigureEvent BeamEvent BeamForbidEvent BendAfterEvent BreathingEvent ClusterNoteEvent ContextChange ContextSpeccedMusic CrescendoEvent DecrescendoEvent Event EventChord ExtenderEvent FingeringEvent GlissandoEvent GraceMusic HarmonicEvent HyphenEvent KeyChangeEvent LabelEvent LaissezVibrerEvent LigatureEvent LineBreakEvent LyricCombineMusic LyricEvent MarkEvent MultiMeasureRestEvent MultiMeasureRestMusic MultiMeasureTextEvent Music NoteEvent NoteGroupingEvent OverrideProperty PageBreakEvent PageTurnEvent PartCombineMusic PercentEvent PercentRepeatedMusic PesOrFlexaEvent PhrasingSlurEvent PropertySet PropertyUnset QuoteMusic RelativeOctaveCheck RelativeOctaveMusic RepeatTieEvent RepeatedMusic RestEvent RevertProperty ScriptEvent SequentialMusic SimultaneousMusic SkipEvent SkipMusic SlurEvent SoloOneEvent SoloTwoEvent SostenutoEvent SpacingSectionEvent SpanEvent StaffSpanEvent StringNumberEvent StrokeFingerEvent SustainEvent TextScriptEvent TextSpanEvent TieEvent TimeScaledMusic TransposedMusic TremoloEvent TremoloRepeatedMusic TremoloSpanEvent TrillSpanEvent TupletSpanEvent UnaCordaEvent UnfoldedRepeatedMusic UnisonoEvent UnrelativableMusic VoiceSeparator VoltaRepeatedMusic"
+list_drumpitchnames = Set.fromList $ words $ "acousticbassdrum acousticsnare agh agl bassdrum bd bda boh bohm boho bol bolm bolo cab cabasa cb cgh cghm cgho cgl cglm cglo chinesecymbal cl claves closedhihat cowbell crashcymbal crashcymbala crashcymbalb cuim cuio cymc cymca cymcb cymch cymr cymra cymrb cyms da db dc dd de electricsnare fivedown fiveup fourdown fourup gui guil guiro guis halfopenhihat handclap hc hh hhc hhho hho hhp hiagogo hibongo hiconga highfloortom hightom hihat himidtom hisidestick hitimbale hiwoodblock loagogo lobongo loconga longguiro longwhistle losidestick lotimbale lowfloortom lowmidtom lowoodblock lowtom mar maracas mutecuica mutehibongo mutehiconga mutelobongo muteloconga mutetriangle onedown oneup opencuica openhibongo openhiconga openhihat openlobongo openloconga opentriangle pedalhihat rb ridebell ridecymbal ridecymbala ridecymbalb shortguiro shortwhistle sidestick sn sna snare sne splashcymbal ss ssh ssl tamb tambourine tamtam threedown threeup timh timl tomfh tomfl tomh toml tommh tomml tri triangle trim trio tt twodown twoup ua ub uc ud ue vibraslap vibs wbh wbl whl whs"
+
+regex_'5cb'5ba'2dz'5d'2b'5cs'2a'3d = compileRegex True "\\b[a-z]+\\s*="
+regex_'5ba'2dz'5d'2b'5cd'2b'5c'2e'2a'5b'2c'27'5d'2b = compileRegex True "[a-z]+\\d+\\.*[,']+"
+regex_'28'5cb'5bsrR'5d'28'3f'21'5bA'2dZa'2dz'5d'29'7c'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29 = compileRegex True "(\\b[srR](?![A-Za-z])|\\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|(?![A-Za-z])))"
+regex_'3a'5cd'2a = compileRegex True ":\\d*"
+regex_'5c'5c'28p'7b1'2c5'7d'7cmp'7cmf'7cf'7b1'2c5'7d'7cs'3ffp'7csff'3f'7cspp'3f'7c'5bsr'5d'3ffz'7ccresc'7cdecresc'7cdim'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(p{1,5}|mp|mf|f{1,5}|s?fp|sff?|spp?|[sr]?fz|cresc|decresc|dim)(?![A-Za-z])"
+regex_'5c'5c'5b'3c'21'3e'5d = compileRegex True "\\\\[<!>]"
+regex_'5c'5c'28'5cd'2b'7caccent'7cmarcato'7cstaccat'28issim'29'3fo'7cespressivo'7ctenuto'7cportato'7c'28up'7cdown'29'28bow'7cmordent'7cprall'29'7cflageolet'7cthumb'7c'5blr'5d'28heel'7ctoe'29'7copen'7cstopped'7cturn'7creverseturn'7ctrill'7cmordent'7cprall'28prall'7cmordent'7cdown'7cup'29'3f'7clineprall'7csignumcongruentiae'7c'28short'7clong'7cverylong'29'3ffermata'7csegno'7c'28var'29'3fcoda'7csnappizzicato'7chalfopen'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(\\d+|accent|marcato|staccat(issim)?o|espressivo|tenuto|portato|(up|down)(bow|mordent|prall)|flageolet|thumb|[lr](heel|toe)|open|stopped|turn|reverseturn|trill|mordent|prall(prall|mordent|down|up)?|lineprall|signumcongruentiae|(short|long|verylong)?fermata|segno|(var)?coda|snappizzicato|halfopen)(?![A-Za-z])"
+regex_'5c'5c'5b'28'29'5d = compileRegex True "\\\\[()]"
+regex_'5c'5c'5b'5d'5b'5d = compileRegex True "\\\\[][]"
+regex_'5c'5cnote'28mode'7cs'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\note(mode|s)(?![A-Za-z])"
+regex_'5c'5cdrum'28mode'7cs'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\drum(mode|s)(?![A-Za-z])"
+regex_'5c'5cchord'28mode'7cs'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\chord(mode|s)(?![A-Za-z])"
+regex_'5c'5cfigure'28mode'7cs'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\figure(mode|s)(?![A-Za-z])"
+regex_'5c'5c'28lyric'28mode'7cs'29'7caddlyrics'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(lyric(mode|s)|addlyrics)(?![A-Za-z])"
+regex_'5c'5clyricsto'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\lyricsto(?![A-Za-z])"
+regex_'5c'5cmarkup'28lines'29'3f'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\markup(lines)?(?![A-Za-z])"
+regex_'5c'5c'28header'7cpaper'7clayout'7cmidi'7cwith'29'5cb = compileRegex True "\\\\(header|paper|layout|midi|with)\\b"
+regex_'5c'5c'28new'7ccontext'7cchange'29'5cb = compileRegex True "\\\\(new|context|change)\\b"
+regex_'5c'5c'28un'29'3fset'5cb = compileRegex True "\\\\(un)?set\\b"
+regex_'5c'5c'28override'28Property'29'3f'7crevert'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(override(Property)?|revert)(?![A-Za-z])"
+regex_'5c'5cskip'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\skip(?![A-Za-z])"
+regex_'5c'5ctempo'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\tempo(?![A-Za-z])"
+regex_'5c'5c'28accepts'7calias'7cconsists'7cdefaultchild'7cdenies'7cdescription'7cgrobdescriptions'7cinclude'7cinvalid'7clanguage'7cname'7cobjectid'7conce'7cremove'7csequential'7csimultaneous'7ctype'7cversion'7cscore'7cbook'7cbookpart'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(accepts|alias|consists|defaultchild|denies|description|grobdescriptions|include|invalid|language|name|objectid|once|remove|sequential|simultaneous|type|version|score|book|bookpart)(?![A-Za-z])"
+regex_'5c'5c'28'28aiken'7cfunk'7csacredHarp'7csouthernHarmony'7cwalker'29Heads'28Minor'29'3f'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\((aiken|funk|sacredHarp|southernHarmony|walker)Heads(Minor)?)(?![A-Za-z])"
+regex_'5c'5c'28acciaccatura'7caddQuote'7cafterGrace'7callowPageTurn'7calternative'7capply'28Context'7cMusic'7cOutput'29'7cappoggiatura'7carpeggio'28Arrow'28Down'7cUp'29'7cBracket'7cNormal'7cParenthesis'29'3f'7c'28a'7cde'29scendens'7cauctum'7caugmentum'7cautoBeamO'28ff'7cn'29'7cautochange'7cballoon'28Grob'29'3fText'7cbar'7cbarNumberCheck'7cbendAfter'7cbreathe'7cbreak'7ccadenzaO'28ff'7cn'29'7ccavum'7cclef'28'5cs'2b'28treble'7cviolin'7cG'7calto'7cC'7ctenor'7c'28sub'29'3fbass'7cF'7cfrench'7c'28mezzo'29'3fsoprano'7c'28var'29'3fbaritone'7cpercussion'7ctab'29'29'3f'7c'28end'29'3f'28de'29'3fcr'7ccresc'28TextCresc'7cHairpin'29'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(acciaccatura|addQuote|afterGrace|allowPageTurn|alternative|apply(Context|Music|Output)|appoggiatura|arpeggio(Arrow(Down|Up)|Bracket|Normal|Parenthesis)?|(a|de)scendens|auctum|augmentum|autoBeamO(ff|n)|autochange|balloon(Grob)?Text|bar|barNumberCheck|bendAfter|breathe|break|cadenzaO(ff|n)|cavum|clef(\\s+(treble|violin|G|alto|C|tenor|(sub)?bass|F|french|(mezzo)?soprano|(var)?baritone|percussion|tab))?|(end)?(de)?cr|cresc(TextCresc|Hairpin))(?![A-Za-z])"
+regex_'5c'5c'28'28cue'7ctransposedCue'29During'7cdefault'7cdeminutum'7cdim'28Text'28Decresc'7cDecr'7cDim'29'7cHairpin'29'7cdisplay'28Lily'29'3fMusic'7cdivisio'28Maior'7cMaxima'7cMinima'29'7c'28dynamic'7cdots'7cphrasingSlur'7cslur'7cstem'7ctie'7ctuplet'29'28Down'7cNeutral'7cUp'29'7c'28balloon'7ctext'29LengthO'28ff'7cn'29'7cfeatherDurations'7cfigure'28mode'7cs'29'7cfinalis'7cflexa'7c'28french'7cgerman'7citalian'7csemiGerman'29Chords'7cglissando'7cgrace'7charmonic'7c'28unH'7ch'29ideNotes'7c'28hide'7cshow'29StaffSwitch'7cinclinatum'7c'28keep'7cremove'29WithTag'7ckey'28'5cs'2b'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'3f'7ckillCues'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\((cue|transposedCue)During|default|deminutum|dim(Text(Decresc|Decr|Dim)|Hairpin)|display(Lily)?Music|divisio(Maior|Maxima|Minima)|(dynamic|dots|phrasingSlur|slur|stem|tie|tuplet)(Down|Neutral|Up)|(balloon|text)LengthO(ff|n)|featherDurations|figure(mode|s)|finalis|flexa|(french|german|italian|semiGerman)Chords|glissando|grace|harmonic|(unH|h)ideNotes|(hide|show)StaffSwitch|inclinatum|(keep|remove)WithTag|key(\\s+\\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|(?![A-Za-z])))?|killCues)(?![A-Za-z])"
+regex_'5c'5c'28label'7claissezVibrer'7clinea'7cmakeClusters'7cmark'7cmaxima'7cmelisma'28End'29'3f'7cmergeDifferently'28Head'7cDott'29edO'28ff'7cn'29'7cnewSpacingSection'7cno'28Beam'7cBreak'7cPageBreak'7cPageTurn'29'7cnormalsize'7cnumericTimeSignature'7coctaveCheck'7coneVoice'7coriscus'7cottava'7cpage'28'2dref'7cBreak'7cTurn'29'7cparallelMusic'7cparenthesize'7cpartcombine'7cpartial'28'5cs'2a'28'5c'5c'28longa'7cbreve'29'5cb'7c'281'7c2'7c4'7c8'7c16'7c32'7c64'7c128'7c256'7c512'7c1024'7c2048'29'28'3f'21'5cd'29'29'28'5cs'2a'5c'2e'2b'29'3f'28'5cs'2a'5c'2a'5cs'2a'5cd'2b'28'2f'5cd'2b'29'3f'29'2a'29'3f'7cpes'7cpitchedTrill'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(label|laissezVibrer|linea|makeClusters|mark|maxima|melisma(End)?|mergeDifferently(Head|Dott)edO(ff|n)|newSpacingSection|no(Beam|Break|PageBreak|PageTurn)|normalsize|numericTimeSignature|octaveCheck|oneVoice|oriscus|ottava|page(-ref|Break|Turn)|parallelMusic|parenthesize|partcombine|partial(\\s*(\\\\(longa|breve)\\b|(1|2|4|8|16|32|64|128|256|512|1024|2048)(?!\\d))(\\s*\\.+)?(\\s*\\*\\s*\\d+(/\\d+)?)*)?|pes|pitchedTrill)(?![A-Za-z])"
+regex_'5c'5c'28pointAndClickO'28ff'7cn'29'7cquilisma'7cquoteDuring'7crelative'28'5cs'2b'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'3f'7cRemoveEmptyStaffContext'7crepeat'28'5cs'2b'28unfold'7cvolta'7ctremolo'7cpercent'29'28'5cs'2b'5cd'2b'29'3f'29'3f'7crepeatTie'7cresetRelativeOctave'7crest'7cscaleDurations'7cscoreTweak'7ceasyHeadsO'28ff'7cn'29'7cshift'28Durations'7cOff'7cOn'7b1'2c3'7d'29'7c'28slur'7ctie'29'28Both'7cDashed'7cDotted'7cSolid'29'7csmall'7cspacingTweaks'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(pointAndClickO(ff|n)|quilisma|quoteDuring|relative(\\s+\\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|(?![A-Za-z])))?|RemoveEmptyStaffContext|repeat(\\s+(unfold|volta|tremolo|percent)(\\s+\\d+)?)?|repeatTie|resetRelativeOctave|rest|scaleDurations|scoreTweak|easyHeadsO(ff|n)|shift(Durations|Off|On{1,3})|(slur|tie)(Both|Dashed|Dotted|Solid)|small|spacingTweaks)(?![A-Za-z])"
+regex_'5c'5c'28'28start'7cstop'29'28Group'7c'28Text'7cTrill'29Span'7cStaff'29'7cstemBoth'7cstropha'7csuper'7c'28sustain'7csostenuto'29O'28ff'7cn'29'7ctable'2dof'2dcontents'7ctag'7ctimes'3f'28'5cs'2a'5cd'2b'2f'5cd'2b'29'3f'7ctiny'7ctocItem'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\((start|stop)(Group|(Text|Trill)Span|Staff)|stemBoth|stropha|super|(sustain|sostenuto)O(ff|n)|table-of-contents|tag|times?(\\s*\\d+/\\d+)?|tiny|tocItem)(?![A-Za-z])"
+regex_'5c'5c'28transpose'28'5cs'2b'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'5cs'2a'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'3f'7ctransposition'28'5cs'2b'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(transpose(\\s+\\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|(?![A-Za-z]))\\s*\\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|(?![A-Za-z])))?|transposition(\\s+\\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|(?![A-Za-z]))))(?![A-Za-z])"
+regex_'5c'5c'28tweak'7cunfoldRepeats'7cvirg'28ul'29'3fa'7cvoice'28One'7cTwo'7cThree'7cFour'29'7cwithMusicProperty'7ccm'7cmm'7cin'7cpt'7cmajor'7cminor'7cionian'7clocrian'7caeolian'7cmixolydian'7clydian'7cphrygian'7cdorian'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(tweak|unfoldRepeats|virg(ul)?a|voice(One|Two|Three|Four)|withMusicProperty|cm|mm|in|pt|major|minor|ionian|locrian|aeolian|mixolydian|lydian|phrygian|dorian)(?![A-Za-z])"
+regex_'5c'5c'28dash'28Hat'7cPlus'7cDash'7cBar'7cLarger'7cDot'7cUnderscore'29'7cfermataMarkup'7cpipeSymbol'7cslashSeparator'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(dash(Hat|Plus|Dash|Bar|Larger|Dot|Underscore)|fermataMarkup|pipeSymbol|slashSeparator)(?![A-Za-z])"
+regex_'5c'5c'28consistsend'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(consistsend)(?![A-Za-z])"
+regex_'5c'5c'28arpeggio'28Up'7cDown'7cNeutral'29'7cnewpage'7cscript'28Up'7cDown'7cBoth'29'7c'28empty'7cfat'29Text'7csetEasyHeads'7c'28default'7cvoice'7cmodernVoice'7cpiano'7cforget'29Accidentals'7c'28modern'28Voice'29'3f'7cpiano'29Cautionaries'7cnoResetKey'7ccompressMusic'7coctave'7c'28sustain'7csostenuto'29'28Down'7cUp'29'7cset'28Hairpin'7cText'29'28Cresc'7cDecresc'7cDim'29'7csetTextDecr'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(arpeggio(Up|Down|Neutral)|newpage|script(Up|Down|Both)|(empty|fat)Text|setEasyHeads|(default|voice|modernVoice|piano|forget)Accidentals|(modern(Voice)?|piano)Cautionaries|noResetKey|compressMusic|octave|(sustain|sostenuto)(Down|Up)|set(Hairpin|Text)(Cresc|Decresc|Dim)|setTextDecr)(?![A-Za-z])"
+regex_'5c'5c'28translator'7cnewcontext'29'5cb = compileRegex True "\\\\(translator|newcontext)\\b"
+regex_'5c'5cproperty'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\property(?![A-Za-z])"
+regex_'5c'5c'5bA'2dZa'2dz'5d'2b = compileRegex True "\\\\[A-Za-z]+"
+regex_'5cb'28dash'28Hat'7cPlus'7cDash'7cBar'7cLarger'7cDot'7cUnderscore'29'7cfermataMarkup'7cpipeSymbol'7cslashSeparator'29'5cb = compileRegex True "\\b(dash(Hat|Plus|Dash|Bar|Larger|Dot|Underscore)|fermataMarkup|pipeSymbol|slashSeparator)\\b"
+regex_'5ba'2dz'5d'2b = compileRegex True "[a-z]+"
+regex_'3d'5cs'2a'28'27'2b'7c'2c'2b'29'3f = compileRegex True "=\\s*('+|,+)?"
+regex_'28'5c'5c'28longa'7cbreve'29'5cb'7c'281'7c2'7c4'7c8'7c16'7c32'7c64'7c128'7c256'7c512'7c1024'7c2048'29'28'3f'21'5cd'29'29'28'5cs'2a'5c'2e'2b'29'3f'28'5cs'2a'5c'2a'5cs'2a'5cd'2b'28'2f'5cd'2b'29'3f'29'2a = compileRegex True "(\\\\(longa|breve)\\b|(1|2|4|8|16|32|64|128|256|512|1024|2048)(?!\\d))(\\s*\\.+)?(\\s*\\*\\s*\\d+(/\\d+)?)*"
+regex_'5cd'2b = compileRegex True "\\d+"
+regex_'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29 = compileRegex True "\\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|(?![A-Za-z]))"
+regex_'5b'2d'2b'5d'3f'28'5cd'2b'28'5c'2e'5cd'2b'29'3f'7c'5c'2e'5cd'2b'29 = compileRegex True "[-+]?(\\d+(\\.\\d+)?|\\.\\d+)"
+regex_'23'28t'7cf'7cb'5b'2d'2b'5d'3f'5b01'2e'5d'2b'7co'5b'2d'2b'5d'3f'5b0'2d7'2e'5d'2b'7cd'5b'2d'2b'5d'3f'5b0'2d9'2e'5d'2b'7cx'5b'2d'2b'5d'3f'5b0'2d9a'2df'2e'5d'2b'29 = compileRegex True "#(t|f|b[-+]?[01.]+|o[-+]?[0-7.]+|d[-+]?[0-9.]+|x[-+]?[0-9a-f.]+)"
+regex_'5b'2b'2d'5d'28inf'7cnan'29'5c'2e0 = compileRegex True "[+-](inf|nan)\\.0"
+regex_'5cb'28define'7cdefined'5c'3f'7cdefine'5c'2a'28'2dpublic'29'3f'7cdefine'2d'28'5c'2a'7cbuiltin'2dmarkup'2d'28list'2d'29'3fcommand'7cclass'7c'28extra'2d'29'3fdisplay'2dmethod'7cfonts'3f'7cgrob'2dproperty'7cly'2dsyntax'28'2dloc'7c'2dsimple'29'3f'7cmacro'28'2dpublic'29'3f'7cmarkup'2d'28list'2d'29command'7cmethod'7cmodule'7cmusic'2dfunction'7cpost'2devent'2ddisplay'2dmethod'7cpublic'28'2dmacro'7c'2dtoplevel'29'3f'7csafe'2dpublic'7cspan'2devent'2ddisplay'2dmethod'29'7cdefmacro'28'5c'2a'28'2dpublic'29'3f'29'3f'7clambda'5c'2a'3f'7cand'7cor'7cif'7ccond'7ccase'7clet'5c'2a'3f'7cletrec'7cbegin'7cdo'7cdelay'7cset'21'7celse'7c'28quasi'29'3fquote'7cunquote'28'2dsplicing'29'3f'7c'28define'7clet'7cletrec'29'2dsyntax'7csyntax'2drules'29'28'3f'3d'28'24'7c'5cs'7c'5c'29'29'29 = compileRegex True "\\b(define|defined\\?|define\\*(-public)?|define-(\\*|builtin-markup-(list-)?command|class|(extra-)?display-method|fonts?|grob-property|ly-syntax(-loc|-simple)?|macro(-public)?|markup-(list-)command|method|module|music-function|post-event-display-method|public(-macro|-toplevel)?|safe-public|span-event-display-method)|defmacro(\\*(-public)?)?|lambda\\*?|and|or|if|cond|case|let\\*?|letrec|begin|do|delay|set!|else|(quasi)?quote|unquote(-splicing)?|(define|let|letrec)-syntax|syntax-rules)(?=($|\\s|\\)))"
+regex_'5cb'28not'7cboolean'5c'3f'7ceq'5c'3f'7ceqv'5c'3f'7cequal'5c'3f'7cpair'5c'3f'7ccons'7cset'2dc'5bad'5dr'21'7cc'5bad'5d'7b1'2c4'7dr'7cnull'5c'3f'7clist'5c'3f'7clist'7clength'7cappend'7creverse'7clist'2dref'7cmem'5bqv'5d'7cmember'7cass'5bqv'5d'7cassoc'7csymbol'5c'3f'7csymbol'2d'3estring'7cstring'2d'3esymbol'7cnumber'5c'3f'7ccomplex'5c'3f'7creal'5c'3f'7crational'5c'3f'7cinteger'5c'3f'7cexact'5c'3f'7cinexact'5c'3f'7czero'5c'3f'7cpositive'5c'3f'7cnegative'5c'3f'7codd'5c'3f'7ceven'5c'3f'7cmax'7cmin'7cabs'7cquotient'7cremainder'7cmodulo'7cgcd'7clcm'7cnumerator'7cdenominator'7cfloor'7cceiling'7ctruncate'7cround'7crationalize'7cexp'7clog'7csin'7ccos'7ctan'7casin'7cacos'7catan'7csqrt'7cexpt'7cmake'2drectangular'7cmake'2dpolar'7creal'2dpart'7cimag'2dpart'7cmagnitude'7cangle'7cexact'2d'3einexact'7cinexact'2d'3eexact'7cnumber'2d'3estring'7cstring'2d'3enumber'29'28'3f'3d'28'24'7c'5cs'7c'5c'29'29'29 = compileRegex True "\\b(not|boolean\\?|eq\\?|eqv\\?|equal\\?|pair\\?|cons|set-c[ad]r!|c[ad]{1,4}r|null\\?|list\\?|list|length|append|reverse|list-ref|mem[qv]|member|ass[qv]|assoc|symbol\\?|symbol->string|string->symbol|number\\?|complex\\?|real\\?|rational\\?|integer\\?|exact\\?|inexact\\?|zero\\?|positive\\?|negative\\?|odd\\?|even\\?|max|min|abs|quotient|remainder|modulo|gcd|lcm|numerator|denominator|floor|ceiling|truncate|round|rationalize|exp|log|sin|cos|tan|asin|acos|atan|sqrt|expt|make-rectangular|make-polar|real-part|imag-part|magnitude|angle|exact->inexact|inexact->exact|number->string|string->number)(?=($|\\s|\\)))"
+regex_'5cb'28char'28'28'2dci'29'3f'28'3d'5c'3f'7c'3c'5c'3f'7c'3e'5c'3f'7c'3c'3d'5c'3f'7c'3e'3d'5c'3f'29'7c'2dalphabetic'5c'3f'7c'5c'3f'7c'2dnumeric'5c'3f'7c'2dwhitespace'5c'3f'7c'2dupper'2dcase'5c'3f'7c'2dlower'2dcase'5c'3f'7c'2d'3einteger'7c'2dupcase'7c'2ddowncase'7c'2dready'5c'3f'29'7cinteger'2d'3echar'7cmake'2dstring'7cstring'28'5c'3f'7c'2dcopy'7c'2dfill'21'7c'2dlength'7c'2dref'7c'2dset'21'7c'28'2dci'29'3f'28'3d'5c'3f'7c'3c'5c'3f'7c'3e'5c'3f'7c'3c'3d'5c'3f'7c'3e'3d'5c'3f'29'7c'2dappend'29'7csubstring'7cmake'2dvector'7cvector'28'5c'3f'7c'2dlength'7c'2dref'7c'2dset'21'7c'2dfill'21'29'3f'7cprocedure'5c'3f'7capply'7cmap'7cfor'2deach'7cforce'7ccall'2dwith'2d'28current'2dcontinuation'7c'28in'7cout'29put'2dfile'29'7c'28in'7cout'29put'2dport'5c'3f'7ccurrent'2d'28in'7cout'29put'2dport'7copen'2d'28in'7cout'29put'2dfile'7cclose'2d'28in'7cout'29put'2dport'7ceof'2dobject'5c'3f'7cread'7c'28read'7cpeek'29'2dchar'7cwrite'28'2dchar'29'3f'7cdisplay'7cnewline'7ccall'2fcc'7clist'2dtail'7cstring'2d'3elist'7clist'2d'3estring'7cvector'2d'3elist'7clist'2d'3evector'7cwith'2dinput'2dfrom'2dfile'7cwith'2doutput'2dto'2dfile'7cload'7ctranscript'2d'28on'7coff'29'7ceval'7cdynamic'2dwind'7cport'5c'3f'7cvalues'7ccall'2dwith'2dvalues'7c'28scheme'2dreport'2d'7cnull'2d'7cinteraction'2d'29environment'29'28'3f'3d'28'24'7c'5cs'7c'5c'29'29'29 = compileRegex True "\\b(char((-ci)?(=\\?|<\\?|>\\?|<=\\?|>=\\?)|-alphabetic\\?|\\?|-numeric\\?|-whitespace\\?|-upper-case\\?|-lower-case\\?|->integer|-upcase|-downcase|-ready\\?)|integer->char|make-string|string(\\?|-copy|-fill!|-length|-ref|-set!|(-ci)?(=\\?|<\\?|>\\?|<=\\?|>=\\?)|-append)|substring|make-vector|vector(\\?|-length|-ref|-set!|-fill!)?|procedure\\?|apply|map|for-each|force|call-with-(current-continuation|(in|out)put-file)|(in|out)put-port\\?|current-(in|out)put-port|open-(in|out)put-file|close-(in|out)put-port|eof-object\\?|read|(read|peek)-char|write(-char)?|display|newline|call/cc|list-tail|string->list|list->string|vector->list|list->vector|with-input-from-file|with-output-to-file|load|transcript-(on|off)|eval|dynamic-wind|port\\?|values|call-with-values|(scheme-report-|null-|interaction-)environment)(?=($|\\s|\\)))"
+regex_'5ba'2dzA'2dZ'23'5d'5b'5e'5cs'28'29'7b'7d'5b'5c'5d'3b'24'22'5d'2a = compileRegex True "[a-zA-Z#][^\\s(){}[\\];$\"]*"
+regex_'5c'5c'5b0fnrtav'5c'5c'22'5d = compileRegex True "\\\\[0fnrtav\\\\\"]"
+regex_'3c'28'3f'21'3c'29 = compileRegex True "<(?!<)"
+regex_'3a'3f'28'5b'5c'2e'5e'5d'3f'5cd'2b'5b'2d'2b'5d'3f'7c'28m'7cdim'7caug'7cmaj'7csus'29'28'3f'21'5bA'2dZa'2dz'5d'29'29'2a'28'2f'5c'2b'3f'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'3f = compileRegex True ":?([\\.^]?\\d+[-+]?|(m|dim|aug|maj|sus)(?![A-Za-z]))*(/\\+?\\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|(?![A-Za-z])))?"
+regex_'5cb'5bsrR'5d'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\b[srR](?![A-Za-z])"
+regex_'22'28'5c'5c'5b'22'5c'5c'5d'7c'5b'5e'22'5c'5c'5d'29'2b'22 = compileRegex True "\"(\\\\[\"\\\\]|[^\"\\\\])+\""
+regex_'5bA'2dZa'2dz'5d'2b = compileRegex True "[A-Za-z]+"
+regex_'28'5cw'2b'2d'7b2'2c'7d'7c'5cw'2b'5f'7b2'2c'7d'7c'2d'7b2'2c'7d'5cw'2b'7c'5f'7b2'2c'7d'5cw'2b'29 = compileRegex True "(\\w+-{2,}|\\w+_{2,}|-{2,}\\w+|_{2,}\\w+)"
+regex_'28'2d'2d'7c'5f'5f'7c'5f'29 = compileRegex True "(--|__|_)"
+regex_'5cS'2b'5c'7d = compileRegex True "\\S+\\}"
+regex_'5c'5cscore'5cb = compileRegex True "\\\\score\\b"
+regex_'5c'5c'28markup'7cbold'7c'28rounded'2d'29'3fbox'7cbracket'7ccaps'7c'28center'7cgeneral'7cleft'7cright'29'2dalign'7ccircle'7c'28'28center'7cdir'7cleft'7cright'29'2d'29'3fcolumn'7ccombine'7cconcat'7cdynamic'7cfill'2dline'7cfinger'7cfontCaps'7c'28abs'2d'29'3ffontsize'7cfraction'7chalign'7chbracket'7chcenter'2din'7chcenter'7chspace'7chuge'7citalic'7cjustify'7clarger'3f'7cline'7clower'7cmagnify'7cmedium'7cnormal'2dsize'2d'28sub'7csuper'29'7cnormal'2dtext'7cnormalsize'7cnumber'7con'2dthe'2dfly'7coverride'7cpad'2d'28around'7cmarkup'7cto'2dbox'7cx'29'7cpage'2dref'7cpostscript'7cput'2dadjacent'7craise'7croman'7crotate'7csans'7csmall'28er'29'3f'7csmallCaps'7csub'7csuper'7cteeny'7ctext'7ctiny'7ctranslate'28'2dscaled'29'3f'7ctransparent'7ctypewriter'7cunderline'7cupright'7cvcenter'7cwhiteout'7cwith'2d'28color'7cdimensions'7curl'29'7cwordwrap'7c'28markup'7ccolumn'2d'7cjustified'2d'7coverride'2d'7cwordwrap'2d'29lines'7cwordwrap'2d'28string'2d'29'3finternal'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(markup|bold|(rounded-)?box|bracket|caps|(center|general|left|right)-align|circle|((center|dir|left|right)-)?column|combine|concat|dynamic|fill-line|finger|fontCaps|(abs-)?fontsize|fraction|halign|hbracket|hcenter-in|hcenter|hspace|huge|italic|justify|larger?|line|lower|magnify|medium|normal-size-(sub|super)|normal-text|normalsize|number|on-the-fly|override|pad-(around|markup|to-box|x)|page-ref|postscript|put-adjacent|raise|roman|rotate|sans|small(er)?|smallCaps|sub|super|teeny|text|tiny|translate(-scaled)?|transparent|typewriter|underline|upright|vcenter|whiteout|with-(color|dimensions|url)|wordwrap|(markup|column-|justified-|override-|wordwrap-)lines|wordwrap-(string-)?internal)(?![A-Za-z])"
+regex_'5c'5c'28arrow'2dhead'7cbeam'7cchar'7c'28semi'7csesqui'7cdouble'29'3f'28flat'7csharp'29'7cdraw'2d'28circle'7cline'29'7cepsfile'7ceyeglasses'7cfilled'2dbox'7cfret'2ddiagram'28'2dterse'7c'2dverbose'29'3f'7cfromproperty'7charp'2dpedal'7c'28justify'7cwordwrap'29'2d'28field'7cstring'29'7cleft'2dbrace'7clookup'7cmarkalphabet'7cmarkletter'7cmusicglyph'7cnatural'7cnote'2dby'2dnumber'7cnote'7cnull'7cpath'7cright'2dbrace'7csimple'7c'28back'29'3fslashed'2ddigit'7cstencil'7cstrut'7ctied'2dlyric'7ctriangle'7cverbatim'2dfile'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(arrow-head|beam|char|(semi|sesqui|double)?(flat|sharp)|draw-(circle|line)|epsfile|eyeglasses|filled-box|fret-diagram(-terse|-verbose)?|fromproperty|harp-pedal|(justify|wordwrap)-(field|string)|left-brace|lookup|markalphabet|markletter|musicglyph|natural|note-by-number|note|null|path|right-brace|simple|(back)?slashed-digit|stencil|strut|tied-lyric|triangle|verbatim-file)(?![A-Za-z])"
+regex_'5b'5e'22'5cs'5c'5c'23'25'7b'7d'24'5d'2b = compileRegex True "[^\"\\s\\\\#%{}$]+"
+regex_'5c'5c'28arrow'2dhead'7cbeam'7cchar'7c'28semi'7csesqui'7cdouble'29'3f'28flat'7csharp'29'7cdraw'2d'28circle'7cline'29'7cepsfile'7ceyeglasses'7cfilled'2dbox'7cfret'2ddiagram'28'2dterse'7c'2dverbose'29'3f'7cfromproperty'7charp'2dpedal'7c'28justify'7cwordwrap'29'2d'28field'7cstring'29'7cleft'2dbrace'7clookup'7cmarkalphabet'7cmarkletter'7cmusicglyph'7cnatural'7cnote'2dby'2dnumber'7cnote'7cnull'7cpath'7cright'2dbrace'7csimple'7c'28back'29'3fslashed'2ddigit'7cstencil'7cstrut'7ctied'2dlyric'7ctriangle'7cverbatim'2dfile'7cmarkup'7cbold'7c'28rounded'2d'29'3fbox'7cbracket'7ccaps'7c'28center'7cgeneral'7cleft'7cright'29'2dalign'7ccircle'7c'28'28center'7cdir'7cleft'7cright'29'2d'29'3fcolumn'7ccombine'7cconcat'7cdynamic'7cfill'2dline'7cfinger'7cfontCaps'7c'28abs'2d'29'3ffontsize'7cfraction'7chalign'7chbracket'7chcenter'2din'7chcenter'7chspace'7chuge'7citalic'7cjustify'7clarger'3f'7cline'7clower'7cmagnify'7cmedium'7cnormal'2dsize'2d'28sub'7csuper'29'7cnormal'2dtext'7cnormalsize'7cnumber'7con'2dthe'2dfly'7coverride'7cpad'2d'28around'7cmarkup'7cto'2dbox'7cx'29'7cpage'2dref'7cpostscript'7cput'2dadjacent'7craise'7croman'7crotate'7csans'7csmall'28er'29'3f'7csmallCaps'7csub'7csuper'7cteeny'7ctext'7ctiny'7ctranslate'28'2dscaled'29'3f'7ctransparent'7ctypewriter'7cunderline'7cupright'7cvcenter'7cwhiteout'7cwith'2d'28color'7cdimensions'7curl'29'7cwordwrap'7c'28markup'7ccolumn'2d'7cjustified'2d'7coverride'2d'7cwordwrap'2d'29lines'7cwordwrap'2d'28string'2d'29'3finternal'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(arrow-head|beam|char|(semi|sesqui|double)?(flat|sharp)|draw-(circle|line)|epsfile|eyeglasses|filled-box|fret-diagram(-terse|-verbose)?|fromproperty|harp-pedal|(justify|wordwrap)-(field|string)|left-brace|lookup|markalphabet|markletter|musicglyph|natural|note-by-number|note|null|path|right-brace|simple|(back)?slashed-digit|stencil|strut|tied-lyric|triangle|verbatim-file|markup|bold|(rounded-)?box|bracket|caps|(center|general|left|right)-align|circle|((center|dir|left|right)-)?column|combine|concat|dynamic|fill-line|finger|fontCaps|(abs-)?fontsize|fraction|halign|hbracket|hcenter-in|hcenter|hspace|huge|italic|justify|larger?|line|lower|magnify|medium|normal-size-(sub|super)|normal-text|normalsize|number|on-the-fly|override|pad-(around|markup|to-box|x)|page-ref|postscript|put-adjacent|raise|roman|rotate|sans|small(er)?|smallCaps|sub|super|teeny|text|tiny|translate(-scaled)?|transparent|typewriter|underline|upright|vcenter|whiteout|with-(color|dimensions|url)|wordwrap|(markup|column-|justified-|override-|wordwrap-)lines|wordwrap-(string-)?internal)(?![A-Za-z])"
+regex_'5c'5c'28bigger'7ch'3fcenter'29'28'3f'21'5bA'2dZa'2dz'5d'29 = compileRegex True "\\\\(bigger|h?center)(?![A-Za-z])"
+regex_'5c'5c'5bA'2dZa'2dz'5d'2b'28'2d'5bA'2dZa'2dz'5d'2b'29'2a = compileRegex True "\\\\[A-Za-z]+(-[A-Za-z]+)*"
+regex_'28'22'3f'29'5cb'28'28Accidental'7cAmbitus'7cArpeggio'7cAuto'5fbeam'7cAxis'5fgroup'7cBalloon'7cBar'7cBar'5fnumber'7cBeam'7cBend'7cBreak'5falign'7cBreathing'5fsign'7cChord'5fname'7cChord'5ftremolo'7cClef'7cCluster'5fspanner'7cCollision'7cCompletion'5fheads'7cCustos'7cDefault'5fbar'5fline'7cDot'5fcolumn'7cDots'7cDrum'5fnotes'7cDynami'5falign'7cDynamic'7cEpisema'7cExtender'7cFigured'5fbass'7cFigured'5fbass'5fposition'7cFingering'7cFont'5fsize'7cForbid'5fline'5fbreak'7cFretboard'7cGlissando'7cGrace'5fbeam'7cGrace'7cGrace'5fspacing'7cGrid'5fline'5fspan'7cGrid'5fpoint'7cGrob'5fpq'7cHara'5fkiri'7cHorizontal'5fbracket'29'5fengraver'29'5cb'5c1 = compileRegex True "(\"?)\\b((Accidental|Ambitus|Arpeggio|Auto_beam|Axis_group|Balloon|Bar|Bar_number|Beam|Bend|Break_align|Breathing_sign|Chord_name|Chord_tremolo|Clef|Cluster_spanner|Collision|Completion_heads|Custos|Default_bar_line|Dot_column|Dots|Drum_notes|Dynami_align|Dynamic|Episema|Extender|Figured_bass|Figured_bass_position|Fingering|Font_size|Forbid_line_break|Fretboard|Glissando|Grace_beam|Grace|Grace_spacing|Grid_line_span|Grid_point|Grob_pq|Hara_kiri|Horizontal_bracket)_engraver)\\b\\1"
+regex_'28'22'3f'29'5cb'28'28Hyphen'7cInstrument'5fname'7cInstrument'5fswitch'7cKey'7cLaissez'5fvibrer'7cLedger'5fline'7cLigature'5fbracket'7cLyric'7cMark'7cMeasure'5fgrouping'7cMelody'7cMensural'5fligature'7cMetronome'5fmark'7cMulti'5fmeasure'5frest'7cNew'5fdynamic'7cNew'5ffingering'7cNote'5fhead'5fline'7cNote'5fheads'7cNote'5fname'7cNote'5fspacing'7cOttava'5fspanner'7cOutput'5fproperty'7cPage'5fturn'7cPaper'5fcolumn'7cParenthesis'7cPart'5fcombine'7cPercent'5frepeat'7cPhrasing'5fslur'7cPiano'5fpedal'5falign'7cPiano'5fpedal'7cPitch'5fsquash'7cPitched'5ftrill'7cRepeat'5facknowledge'7cRepeat'5ftie'7cRest'5fcollision'7cRest'7cRhythmic'5fcolumn'7cScheme'7cScript'5fcolumn'7cScript'7cScript'5frow'29'5fengraver'29'5cb'5c1 = compileRegex True "(\"?)\\b((Hyphen|Instrument_name|Instrument_switch|Key|Laissez_vibrer|Ledger_line|Ligature_bracket|Lyric|Mark|Measure_grouping|Melody|Mensural_ligature|Metronome_mark|Multi_measure_rest|New_dynamic|New_fingering|Note_head_line|Note_heads|Note_name|Note_spacing|Ottava_spanner|Output_property|Page_turn|Paper_column|Parenthesis|Part_combine|Percent_repeat|Phrasing_slur|Piano_pedal_align|Piano_pedal|Pitch_squash|Pitched_trill|Repeat_acknowledge|Repeat_tie|Rest_collision|Rest|Rhythmic_column|Scheme|Script_column|Script|Script_row)_engraver)\\b\\1"
+regex_'28'22'3f'29'5cb'28'28Separating'5fline'5fgroup'7cSlash'5frepeat'7cSlur'7cSpacing'7cSpan'5farpeggio'7cSpan'5fbar'7cSpanner'5fbreak'5fforbid'7cStaff'5fcollecting'7cStaff'5fsymbol'7cStanza'5fnumber'5falign'7cStanza'5fnumber'7cStem'7cString'5fnumber'7cSwallow'7cSystem'5fstart'5fdelimiter'7cTab'5fharmonic'7cTab'5fnote'5fheads'7cTab'5fstaff'5fsymbol'7cText'7cText'5fspanner'7cTie'7cTime'5fsignature'7cTrill'5fspanner'7cTuplet'7cTweak'7cVaticana'5fligature'7cVertical'5falign'7cVertically'5fspaced'5fcontexts'7cVolta'29'5fengraver'29'5cb'5c1 = compileRegex True "(\"?)\\b((Separating_line_group|Slash_repeat|Slur|Spacing|Span_arpeggio|Span_bar|Spanner_break_forbid|Staff_collecting|Staff_symbol|Stanza_number_align|Stanza_number|Stem|String_number|Swallow|System_start_delimiter|Tab_harmonic|Tab_note_heads|Tab_staff_symbol|Text|Text_spanner|Tie|Time_signature|Trill_spanner|Tuplet|Tweak|Vaticana_ligature|Vertical_align|Vertically_spaced_contexts|Volta)_engraver)\\b\\1"
+regex_'28'22'3f'29'5cb'28'28Beam'7cControl'5ftrack'7cDrum'5fnote'7cDynamic'7cKey'7cLyric'7cNote'7cPiano'5fpedal'7cSlur'7cStaff'7cSwallow'7cTempo'7cTie'7cTime'5fsignature'29'5fperformer'29'5cb'5c1 = compileRegex True "(\"?)\\b((Beam|Control_track|Drum_note|Dynamic|Key|Lyric|Note|Piano_pedal|Slur|Staff|Swallow|Tempo|Tie|Time_signature)_performer)\\b\\1"
+regex_'28'22'3f'29'5cb'28'28Note'5fswallow'7cRest'5fswallow'7cSkip'5fevent'5fswallow'7cTiming'29'5ftranslator'29'5cb'5c1 = compileRegex True "(\"?)\\b((Note_swallow|Rest_swallow|Skip_event_swallow|Timing)_translator)\\b\\1"
+regex_'5cb'28dedication'7c'28sub'29'7b'2c2'7dtitle'7cpoet'7ccomposer'7cmeter'7copus'7carranger'7cinstrument'7cpiece'7cbreakbefore'7ccopyright'7ctagline'7cmutopia'28title'7ccomposer'7cpoet'7copus'7cinstrument'29'7cdate'7centeredby'7csource'7cstyle'7cmaintainer'28Email'7cWeb'29'3f'7cmoreInfo'7clastupdated'7ctexidoc'7cfooter'7c'28top'7cbottom'7cleft'7cright'29'2dmargin'7c'28foot'7chead'29'2dseparation'7cindent'7cshort'2dindent'7cpaper'2d'28height'7cwidth'29'7chorizontal'2dshift'7cline'2dwidth'7c'28inner'7couter'29'2dmargin'7ctwo'2dsided'7cbinding'2doffset'7c'28after'7cbefore'7cbetween'29'2dtitle'2dspace'7cbetween'2dsystem'2d'28space'7cpadding'29'7cpage'2dtop'2dspace'7cpage'2dbreaking'2dbetween'2dsystem'2dpadding'7c'28after'7cbefore'7cbetween'29'2dtitle'2dspacing'7cbetween'2d'28scores'2d'29'3fsystem'2dspacing'7cbottom'2dsystem'2dspacing'7ctop'2dtitle'2dspacing'7ctop'2dsystem'2dspacing'7cpage'2dbreaking'2dbetween'2dsystem'2dspacing'7csystem'2dcount'7c'28min'2d'7cmax'2d'29'3fsystems'2dper'2dpage'7cannotate'2dspacing'7cauto'2dfirst'2dpage'2dnumber'7cblank'2d'28last'2d'29'3fpage'2dforce'7cfirst'2dpage'2dnumber'7cpage'2dcount'7cpage'2dlimit'2dinter'2dsystem'2dspace'7cpage'2dlimit'2dinter'2dsystem'2dspace'2dfactor'7cpage'2dspacing'2dweight'7cprint'2dall'2dheaders'7cprint'2dfirst'2dpage'2dnumber'7cprint'2dpage'2dnumber'7cragged'2d'28bottom'7cright'29'7cragged'2dlast'28'2dbottom'29'3f'7csystem'2dseparator'2dmarkup'7cforce'2dassignment'7cinput'2dencoding'7coutput'2dscale'7c'28'28even'7codd'29'28Footer'7cHeader'29'7c'28book'7cscore'7ctoc'29Title'7ctocItem'29Markup'7csystem'2dcount'7c'28short'2d'29'3findent'29'5cb = compileRegex True "\\b(dedication|(sub){,2}title|poet|composer|meter|opus|arranger|instrument|piece|breakbefore|copyright|tagline|mutopia(title|composer|poet|opus|instrument)|date|enteredby|source|style|maintainer(Email|Web)?|moreInfo|lastupdated|texidoc|footer|(top|bottom|left|right)-margin|(foot|head)-separation|indent|short-indent|paper-(height|width)|horizontal-shift|line-width|(inner|outer)-margin|two-sided|binding-offset|(after|before|between)-title-space|between-system-(space|padding)|page-top-space|page-breaking-between-system-padding|(after|before|between)-title-spacing|between-(scores-)?system-spacing|bottom-system-spacing|top-title-spacing|top-system-spacing|page-breaking-between-system-spacing|system-count|(min-|max-)?systems-per-page|annotate-spacing|auto-first-page-number|blank-(last-)?page-force|first-page-number|page-count|page-limit-inter-system-space|page-limit-inter-system-space-factor|page-spacing-weight|print-all-headers|print-first-page-number|print-page-number|ragged-(bottom|right)|ragged-last(-bottom)?|system-separator-markup|force-assignment|input-encoding|output-scale|((even|odd)(Footer|Header)|(book|score|toc)Title|tocItem)Markup|system-count|(short-)?indent)\\b"
+regex_'3d'28'5cs'2a'5bA'2dZa'2dz'5d'2b'29'3f = compileRegex True "=(\\s*[A-Za-z]+)?"
+regex_'5bA'2dZa'2dz'5d'2b'28'3f'3d'5cs'2a'5c'2e'29 = compileRegex True "[A-Za-z]+(?=\\s*\\.)"
+regex_'5cd'2b'5c'2e'2a'5cs'2a'3d'5cs'2a'5cd'2b = compileRegex True "\\d+\\.*\\s*=\\s*\\d+"
+
+parseRules ("LilyPond","lilypond") =
+  (((parseRules ("LilyPond","music")))
+   <|>
+   ((lookAhead (pRegExpr regex_'5cb'5ba'2dz'5d'2b'5cs'2a'3d) >> pushContext ("LilyPond","assignment") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","lilypond")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","music") =
+  (((pAnyChar "()~" >>= withAttribute CharTok))
+   <|>
+   ((pAnyChar "[]" >>= withAttribute DataTypeTok))
+   <|>
+   ((pAnyChar "-_^" >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","connect"))
+   <|>
+   ((lookAhead (pDetectChar False '\\') >> pushContext ("LilyPond","musiccommand") >> currentContext >>= parseRules))
+   <|>
+   ((parseRules ("LilyPond","default")))
+   <|>
+   ((pDetectChar False '<' >>= withAttribute DataTypeTok) >>~ pushContext ("LilyPond","chord"))
+   <|>
+   ((pDetectChar False '>' >>= withAttribute ErrorTok))
+   <|>
+   ((pRegExpr regex_'5ba'2dz'5d'2b'5cd'2b'5c'2e'2a'5b'2c'27'5d'2b >>= withAttribute ErrorTok))
+   <|>
+   ((pRegExpr regex_'28'5cb'5bsrR'5d'28'3f'21'5bA'2dZa'2dz'5d'29'7c'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29 >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","pitch"))
+   <|>
+   ((pRegExpr regex_'3a'5cd'2a >>= withAttribute NormalTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","music")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","default") =
+  (((pDetect2Chars False '<' '<' >>= withAttribute KeywordTok))
+   <|>
+   ((pDetect2Chars False '>' '>' >>= withAttribute KeywordTok))
+   <|>
+   ((pDetectChar False '{' >>= withAttribute KeywordTok))
+   <|>
+   ((pDetectChar False '}' >>= withAttribute KeywordTok))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok))
+   <|>
+   ((lookAhead (pDetectChar False '\\') >> pushContext ("LilyPond","command") >> currentContext >>= parseRules))
+   <|>
+   ((parseRules ("LilyPond","basic")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","default")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","basic") =
+  (((pDetect2Chars False '%' '{' >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","commentblock"))
+   <|>
+   ((pDetectChar False '%' >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","commentline"))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","string"))
+   <|>
+   ((pDetectChar False '#' >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","scheme"))
+   <|>
+   ((pDetectChar False '$' >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","schemesub"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","basic")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","musiccommand") =
+  (((pRegExpr regex_'5c'5c'28p'7b1'2c5'7d'7cmp'7cmf'7cf'7b1'2c5'7d'7cs'3ffp'7csff'3f'7cspp'3f'7c'5bsr'5d'3ffz'7ccresc'7cdecresc'7cdim'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute StringTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'5b'3c'21'3e'5d >>= withAttribute StringTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28'5cd'2b'7caccent'7cmarcato'7cstaccat'28issim'29'3fo'7cespressivo'7ctenuto'7cportato'7c'28up'7cdown'29'28bow'7cmordent'7cprall'29'7cflageolet'7cthumb'7c'5blr'5d'28heel'7ctoe'29'7copen'7cstopped'7cturn'7creverseturn'7ctrill'7cmordent'7cprall'28prall'7cmordent'7cdown'7cup'29'3f'7clineprall'7csignumcongruentiae'7c'28short'7clong'7cverylong'29'3ffermata'7csegno'7c'28var'29'3fcoda'7csnappizzicato'7chalfopen'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute StringTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'5b'28'29'5d >>= withAttribute CharTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'5b'5d'5b'5d >>= withAttribute DataTypeTok))
+   <|>
+   ((parseRules ("LilyPond","command")))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","command") =
+  (((pDetect2Chars False '\\' '\\' >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5c'5cnote'28mode'7cs'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","notemode"))
+   <|>
+   ((pRegExpr regex_'5c'5cdrum'28mode'7cs'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","drummode"))
+   <|>
+   ((pRegExpr regex_'5c'5cchord'28mode'7cs'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","chordmode"))
+   <|>
+   ((pRegExpr regex_'5c'5cfigure'28mode'7cs'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","figuremode"))
+   <|>
+   ((pRegExpr regex_'5c'5c'28lyric'28mode'7cs'29'7caddlyrics'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","lyricmode"))
+   <|>
+   ((pRegExpr regex_'5c'5clyricsto'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","lyricsto"))
+   <|>
+   ((pRegExpr regex_'5c'5cmarkup'28lines'29'3f'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute BaseNTok) >>~ pushContext ("LilyPond","markup"))
+   <|>
+   ((pRegExpr regex_'5c'5c'28header'7cpaper'7clayout'7cmidi'7cwith'29'5cb >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","section"))
+   <|>
+   ((pRegExpr regex_'5c'5c'28new'7ccontext'7cchange'29'5cb >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","context"))
+   <|>
+   ((pRegExpr regex_'5c'5c'28un'29'3fset'5cb >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","set"))
+   <|>
+   ((pRegExpr regex_'5c'5c'28override'28Property'29'3f'7crevert'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","override"))
+   <|>
+   ((pRegExpr regex_'5c'5cskip'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok) >>~ pushContext ("LilyPond","duration"))
+   <|>
+   ((pRegExpr regex_'5c'5ctempo'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok) >>~ pushContext ("LilyPond","tempo"))
+   <|>
+   ((pRegExpr regex_'5c'5c'28accepts'7calias'7cconsists'7cdefaultchild'7cdenies'7cdescription'7cgrobdescriptions'7cinclude'7cinvalid'7clanguage'7cname'7cobjectid'7conce'7cremove'7csequential'7csimultaneous'7ctype'7cversion'7cscore'7cbook'7cbookpart'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28'28aiken'7cfunk'7csacredHarp'7csouthernHarmony'7cwalker'29Heads'28Minor'29'3f'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28acciaccatura'7caddQuote'7cafterGrace'7callowPageTurn'7calternative'7capply'28Context'7cMusic'7cOutput'29'7cappoggiatura'7carpeggio'28Arrow'28Down'7cUp'29'7cBracket'7cNormal'7cParenthesis'29'3f'7c'28a'7cde'29scendens'7cauctum'7caugmentum'7cautoBeamO'28ff'7cn'29'7cautochange'7cballoon'28Grob'29'3fText'7cbar'7cbarNumberCheck'7cbendAfter'7cbreathe'7cbreak'7ccadenzaO'28ff'7cn'29'7ccavum'7cclef'28'5cs'2b'28treble'7cviolin'7cG'7calto'7cC'7ctenor'7c'28sub'29'3fbass'7cF'7cfrench'7c'28mezzo'29'3fsoprano'7c'28var'29'3fbaritone'7cpercussion'7ctab'29'29'3f'7c'28end'29'3f'28de'29'3fcr'7ccresc'28TextCresc'7cHairpin'29'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28'28cue'7ctransposedCue'29During'7cdefault'7cdeminutum'7cdim'28Text'28Decresc'7cDecr'7cDim'29'7cHairpin'29'7cdisplay'28Lily'29'3fMusic'7cdivisio'28Maior'7cMaxima'7cMinima'29'7c'28dynamic'7cdots'7cphrasingSlur'7cslur'7cstem'7ctie'7ctuplet'29'28Down'7cNeutral'7cUp'29'7c'28balloon'7ctext'29LengthO'28ff'7cn'29'7cfeatherDurations'7cfigure'28mode'7cs'29'7cfinalis'7cflexa'7c'28french'7cgerman'7citalian'7csemiGerman'29Chords'7cglissando'7cgrace'7charmonic'7c'28unH'7ch'29ideNotes'7c'28hide'7cshow'29StaffSwitch'7cinclinatum'7c'28keep'7cremove'29WithTag'7ckey'28'5cs'2b'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'3f'7ckillCues'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28label'7claissezVibrer'7clinea'7cmakeClusters'7cmark'7cmaxima'7cmelisma'28End'29'3f'7cmergeDifferently'28Head'7cDott'29edO'28ff'7cn'29'7cnewSpacingSection'7cno'28Beam'7cBreak'7cPageBreak'7cPageTurn'29'7cnormalsize'7cnumericTimeSignature'7coctaveCheck'7coneVoice'7coriscus'7cottava'7cpage'28'2dref'7cBreak'7cTurn'29'7cparallelMusic'7cparenthesize'7cpartcombine'7cpartial'28'5cs'2a'28'5c'5c'28longa'7cbreve'29'5cb'7c'281'7c2'7c4'7c8'7c16'7c32'7c64'7c128'7c256'7c512'7c1024'7c2048'29'28'3f'21'5cd'29'29'28'5cs'2a'5c'2e'2b'29'3f'28'5cs'2a'5c'2a'5cs'2a'5cd'2b'28'2f'5cd'2b'29'3f'29'2a'29'3f'7cpes'7cpitchedTrill'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28pointAndClickO'28ff'7cn'29'7cquilisma'7cquoteDuring'7crelative'28'5cs'2b'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'3f'7cRemoveEmptyStaffContext'7crepeat'28'5cs'2b'28unfold'7cvolta'7ctremolo'7cpercent'29'28'5cs'2b'5cd'2b'29'3f'29'3f'7crepeatTie'7cresetRelativeOctave'7crest'7cscaleDurations'7cscoreTweak'7ceasyHeadsO'28ff'7cn'29'7cshift'28Durations'7cOff'7cOn'7b1'2c3'7d'29'7c'28slur'7ctie'29'28Both'7cDashed'7cDotted'7cSolid'29'7csmall'7cspacingTweaks'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28'28start'7cstop'29'28Group'7c'28Text'7cTrill'29Span'7cStaff'29'7cstemBoth'7cstropha'7csuper'7c'28sustain'7csostenuto'29O'28ff'7cn'29'7ctable'2dof'2dcontents'7ctag'7ctimes'3f'28'5cs'2a'5cd'2b'2f'5cd'2b'29'3f'7ctiny'7ctocItem'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28transpose'28'5cs'2b'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'5cs'2a'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'3f'7ctransposition'28'5cs'2b'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28tweak'7cunfoldRepeats'7cvirg'28ul'29'3fa'7cvoice'28One'7cTwo'7cThree'7cFour'29'7cwithMusicProperty'7ccm'7cmm'7cin'7cpt'7cmajor'7cminor'7cionian'7clocrian'7caeolian'7cmixolydian'7clydian'7cphrygian'7cdorian'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28dash'28Hat'7cPlus'7cDash'7cBar'7cLarger'7cDot'7cUnderscore'29'7cfermataMarkup'7cpipeSymbol'7cslashSeparator'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28consistsend'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28arpeggio'28Up'7cDown'7cNeutral'29'7cnewpage'7cscript'28Up'7cDown'7cBoth'29'7c'28empty'7cfat'29Text'7csetEasyHeads'7c'28default'7cvoice'7cmodernVoice'7cpiano'7cforget'29Accidentals'7c'28modern'28Voice'29'3f'7cpiano'29Cautionaries'7cnoResetKey'7ccompressMusic'7coctave'7c'28sustain'7csostenuto'29'28Down'7cUp'29'7cset'28Hairpin'7cText'29'28Cresc'7cDecresc'7cDim'29'7csetTextDecr'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28translator'7cnewcontext'29'5cb >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","context"))
+   <|>
+   ((pRegExpr regex_'5c'5cproperty'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","override"))
+   <|>
+   ((pRegExpr regex_'5c'5c'5bA'2dZa'2dz'5d'2b >>= withAttribute FunctionTok))
+   <|>
+   ((pDetectChar False '\\' >>= withAttribute ErrorTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","assignment") =
+  (((pRegExpr regex_'5cb'28dash'28Hat'7cPlus'7cDash'7cBar'7cLarger'7cDot'7cUnderscore'29'7cfermataMarkup'7cpipeSymbol'7cslashSeparator'29'5cb >>= withAttribute DataTypeTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5ba'2dz'5d'2b >>= withAttribute FunctionTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","assignment")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","pitch") =
+  (((pRegExpr regex_'3d'5cs'2a'28'27'2b'7c'2c'2b'29'3f >>= withAttribute DecValTok))
+   <|>
+   ((pAnyChar "!?" >>= withAttribute NormalTok))
+   <|>
+   ((parseRules ("LilyPond","duration")))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","duration") =
+  (((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'28'5c'5c'28longa'7cbreve'29'5cb'7c'281'7c2'7c4'7c8'7c16'7c32'7c64'7c128'7c256'7c512'7c1024'7c2048'29'28'3f'21'5cd'29'29'28'5cs'2a'5c'2e'2b'29'3f'28'5cs'2a'5c'2a'5cs'2a'5cd'2b'28'2f'5cd'2b'29'3f'29'2a >>= withAttribute DataTypeTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5cd'2b >>= withAttribute ErrorTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","chord") =
+  (((pDetectChar False '>' >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","chordend"))
+   <|>
+   ((pRegExpr regex_'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29 >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","chordpitch"))
+   <|>
+   ((pAnyChar "<{}srR" >>= withAttribute ErrorTok))
+   <|>
+   ((parseRules ("LilyPond","music")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","chord")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","chordpitch") =
+  (((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'3d'5cs'2a'28'27'2b'7c'2c'2b'29'3f >>= withAttribute DecValTok))
+   <|>
+   ((pRegExpr regex_'28'5c'5c'28longa'7cbreve'29'5cb'7c'281'7c2'7c4'7c8'7c16'7c32'7c64'7c128'7c256'7c512'7c1024'7c2048'29'28'3f'21'5cd'29'29'28'5cs'2a'5c'2e'2b'29'3f'28'5cs'2a'5c'2a'5cs'2a'5cd'2b'28'2f'5cd'2b'29'3f'29'2a >>= withAttribute ErrorTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5cd'2b >>= withAttribute ErrorTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","chordend") =
+  (((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'28'5c'5c'28longa'7cbreve'29'5cb'7c'281'7c2'7c4'7c8'7c16'7c32'7c64'7c128'7c256'7c512'7c1024'7c2048'29'28'3f'21'5cd'29'29'28'5cs'2a'5c'2e'2b'29'3f'28'5cs'2a'5c'2a'5cs'2a'5cd'2b'28'2f'5cd'2b'29'3f'29'2a >>= withAttribute DataTypeTok) >>~ (popContext >> popContext))
+   <|>
+   ((popContext >> popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","commentline") =
+  (((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","commentline")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("LilyPond","commentblock") =
+  (((pDetect2Chars False '%' '}' >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","commentblock")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("LilyPond","string") =
+  (((pDetectChar False '"' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   ((pDetect2Chars False '\\' '\\' >>= withAttribute StringTok))
+   <|>
+   ((pDetect2Chars False '\\' '"' >>= withAttribute StringTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","string")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("LilyPond","connect") =
+  (((pAnyChar ".-+|>^_12345" >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","scheme") =
+  (((pDetectSpaces >>= withAttribute FloatTok))
+   <|>
+   (pushContext ("LilyPond","scheme2") >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","scheme2") =
+  (((pDetectChar False '(' >>= withAttribute FloatTok) >>~ pushContext ("LilyPond","scheme3"))
+   <|>
+   ((parseRules ("LilyPond","schemerules")))
+   <|>
+   ((lookAhead (pDetectSpaces) >> (popContext >> popContext) >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","scheme2")) >> pDefault >>= withAttribute FloatTok))
+
+parseRules ("LilyPond","scheme3") =
+  (((pDetectChar False ')' >>= withAttribute FloatTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   ((parseRules ("LilyPond","schemerules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","scheme3")) >> pDefault >>= withAttribute FloatTok))
+
+parseRules ("LilyPond","schemerules") =
+  (((pDetectChar False '(' >>= withAttribute FloatTok) >>~ pushContext ("LilyPond","schemerules"))
+   <|>
+   ((pDetectChar False ')' >>= withAttribute FloatTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute FloatTok) >>~ pushContext ("LilyPond","schemestring"))
+   <|>
+   ((pDetectChar False ';' >>= withAttribute FloatTok) >>~ pushContext ("LilyPond","schemecommentline"))
+   <|>
+   ((pDetectChar False '$' >>= withAttribute FloatTok) >>~ pushContext ("LilyPond","schemesub"))
+   <|>
+   ((pDetectChar False '\'' >>= withAttribute FloatTok) >>~ pushContext ("LilyPond","schemequote"))
+   <|>
+   ((pDetect2Chars False '#' '!' >>= withAttribute FloatTok) >>~ pushContext ("LilyPond","schemecommentblock"))
+   <|>
+   ((pDetect2Chars False '#' '{' >>= withAttribute FloatTok) >>~ pushContext ("LilyPond","schemelily"))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_musicexpressions >>= withAttribute FloatTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_contexts >>= withAttribute FloatTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_layoutobjects >>= withAttribute FloatTok))
+   <|>
+   ((pRegExpr regex_'5b'2d'2b'5d'3f'28'5cd'2b'28'5c'2e'5cd'2b'29'3f'7c'5c'2e'5cd'2b'29 >>= withAttribute DecValTok))
+   <|>
+   ((pRegExpr regex_'23'28t'7cf'7cb'5b'2d'2b'5d'3f'5b01'2e'5d'2b'7co'5b'2d'2b'5d'3f'5b0'2d7'2e'5d'2b'7cd'5b'2d'2b'5d'3f'5b0'2d9'2e'5d'2b'7cx'5b'2d'2b'5d'3f'5b0'2d9a'2df'2e'5d'2b'29 >>= withAttribute DecValTok))
+   <|>
+   ((pRegExpr regex_'5b'2b'2d'5d'28inf'7cnan'29'5c'2e0 >>= withAttribute DecValTok))
+   <|>
+   ((pRegExpr regex_'5cb'28define'7cdefined'5c'3f'7cdefine'5c'2a'28'2dpublic'29'3f'7cdefine'2d'28'5c'2a'7cbuiltin'2dmarkup'2d'28list'2d'29'3fcommand'7cclass'7c'28extra'2d'29'3fdisplay'2dmethod'7cfonts'3f'7cgrob'2dproperty'7cly'2dsyntax'28'2dloc'7c'2dsimple'29'3f'7cmacro'28'2dpublic'29'3f'7cmarkup'2d'28list'2d'29command'7cmethod'7cmodule'7cmusic'2dfunction'7cpost'2devent'2ddisplay'2dmethod'7cpublic'28'2dmacro'7c'2dtoplevel'29'3f'7csafe'2dpublic'7cspan'2devent'2ddisplay'2dmethod'29'7cdefmacro'28'5c'2a'28'2dpublic'29'3f'29'3f'7clambda'5c'2a'3f'7cand'7cor'7cif'7ccond'7ccase'7clet'5c'2a'3f'7cletrec'7cbegin'7cdo'7cdelay'7cset'21'7celse'7c'28quasi'29'3fquote'7cunquote'28'2dsplicing'29'3f'7c'28define'7clet'7cletrec'29'2dsyntax'7csyntax'2drules'29'28'3f'3d'28'24'7c'5cs'7c'5c'29'29'29 >>= withAttribute FloatTok))
+   <|>
+   ((pRegExpr regex_'5cb'28not'7cboolean'5c'3f'7ceq'5c'3f'7ceqv'5c'3f'7cequal'5c'3f'7cpair'5c'3f'7ccons'7cset'2dc'5bad'5dr'21'7cc'5bad'5d'7b1'2c4'7dr'7cnull'5c'3f'7clist'5c'3f'7clist'7clength'7cappend'7creverse'7clist'2dref'7cmem'5bqv'5d'7cmember'7cass'5bqv'5d'7cassoc'7csymbol'5c'3f'7csymbol'2d'3estring'7cstring'2d'3esymbol'7cnumber'5c'3f'7ccomplex'5c'3f'7creal'5c'3f'7crational'5c'3f'7cinteger'5c'3f'7cexact'5c'3f'7cinexact'5c'3f'7czero'5c'3f'7cpositive'5c'3f'7cnegative'5c'3f'7codd'5c'3f'7ceven'5c'3f'7cmax'7cmin'7cabs'7cquotient'7cremainder'7cmodulo'7cgcd'7clcm'7cnumerator'7cdenominator'7cfloor'7cceiling'7ctruncate'7cround'7crationalize'7cexp'7clog'7csin'7ccos'7ctan'7casin'7cacos'7catan'7csqrt'7cexpt'7cmake'2drectangular'7cmake'2dpolar'7creal'2dpart'7cimag'2dpart'7cmagnitude'7cangle'7cexact'2d'3einexact'7cinexact'2d'3eexact'7cnumber'2d'3estring'7cstring'2d'3enumber'29'28'3f'3d'28'24'7c'5cs'7c'5c'29'29'29 >>= withAttribute FloatTok))
+   <|>
+   ((pRegExpr regex_'5cb'28char'28'28'2dci'29'3f'28'3d'5c'3f'7c'3c'5c'3f'7c'3e'5c'3f'7c'3c'3d'5c'3f'7c'3e'3d'5c'3f'29'7c'2dalphabetic'5c'3f'7c'5c'3f'7c'2dnumeric'5c'3f'7c'2dwhitespace'5c'3f'7c'2dupper'2dcase'5c'3f'7c'2dlower'2dcase'5c'3f'7c'2d'3einteger'7c'2dupcase'7c'2ddowncase'7c'2dready'5c'3f'29'7cinteger'2d'3echar'7cmake'2dstring'7cstring'28'5c'3f'7c'2dcopy'7c'2dfill'21'7c'2dlength'7c'2dref'7c'2dset'21'7c'28'2dci'29'3f'28'3d'5c'3f'7c'3c'5c'3f'7c'3e'5c'3f'7c'3c'3d'5c'3f'7c'3e'3d'5c'3f'29'7c'2dappend'29'7csubstring'7cmake'2dvector'7cvector'28'5c'3f'7c'2dlength'7c'2dref'7c'2dset'21'7c'2dfill'21'29'3f'7cprocedure'5c'3f'7capply'7cmap'7cfor'2deach'7cforce'7ccall'2dwith'2d'28current'2dcontinuation'7c'28in'7cout'29put'2dfile'29'7c'28in'7cout'29put'2dport'5c'3f'7ccurrent'2d'28in'7cout'29put'2dport'7copen'2d'28in'7cout'29put'2dfile'7cclose'2d'28in'7cout'29put'2dport'7ceof'2dobject'5c'3f'7cread'7c'28read'7cpeek'29'2dchar'7cwrite'28'2dchar'29'3f'7cdisplay'7cnewline'7ccall'2fcc'7clist'2dtail'7cstring'2d'3elist'7clist'2d'3estring'7cvector'2d'3elist'7clist'2d'3evector'7cwith'2dinput'2dfrom'2dfile'7cwith'2doutput'2dto'2dfile'7cload'7ctranscript'2d'28on'7coff'29'7ceval'7cdynamic'2dwind'7cport'5c'3f'7cvalues'7ccall'2dwith'2dvalues'7c'28scheme'2dreport'2d'7cnull'2d'7cinteraction'2d'29environment'29'28'3f'3d'28'24'7c'5cs'7c'5c'29'29'29 >>= withAttribute FloatTok))
+   <|>
+   ((pRegExpr regex_'5ba'2dzA'2dZ'23'5d'5b'5e'5cs'28'29'7b'7d'5b'5c'5d'3b'24'22'5d'2a >>= withAttribute FloatTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","schemerules")) >> pDefault >>= withAttribute FloatTok))
+
+parseRules ("LilyPond","schemequote") =
+  (((pRegExpr regex_'5cb'28define'7cdefined'5c'3f'7cdefine'5c'2a'28'2dpublic'29'3f'7cdefine'2d'28'5c'2a'7cbuiltin'2dmarkup'2d'28list'2d'29'3fcommand'7cclass'7c'28extra'2d'29'3fdisplay'2dmethod'7cfonts'3f'7cgrob'2dproperty'7cly'2dsyntax'28'2dloc'7c'2dsimple'29'3f'7cmacro'28'2dpublic'29'3f'7cmarkup'2d'28list'2d'29command'7cmethod'7cmodule'7cmusic'2dfunction'7cpost'2devent'2ddisplay'2dmethod'7cpublic'28'2dmacro'7c'2dtoplevel'29'3f'7csafe'2dpublic'7cspan'2devent'2ddisplay'2dmethod'29'7cdefmacro'28'5c'2a'28'2dpublic'29'3f'29'3f'7clambda'5c'2a'3f'7cand'7cor'7cif'7ccond'7ccase'7clet'5c'2a'3f'7cletrec'7cbegin'7cdo'7cdelay'7cset'21'7celse'7c'28quasi'29'3fquote'7cunquote'28'2dsplicing'29'3f'7c'28define'7clet'7cletrec'29'2dsyntax'7csyntax'2drules'29'28'3f'3d'28'24'7c'5cs'7c'5c'29'29'29 >>= withAttribute FloatTok))
+   <|>
+   ((pRegExpr regex_'5cb'28not'7cboolean'5c'3f'7ceq'5c'3f'7ceqv'5c'3f'7cequal'5c'3f'7cpair'5c'3f'7ccons'7cset'2dc'5bad'5dr'21'7cc'5bad'5d'7b1'2c4'7dr'7cnull'5c'3f'7clist'5c'3f'7clist'7clength'7cappend'7creverse'7clist'2dref'7cmem'5bqv'5d'7cmember'7cass'5bqv'5d'7cassoc'7csymbol'5c'3f'7csymbol'2d'3estring'7cstring'2d'3esymbol'7cnumber'5c'3f'7ccomplex'5c'3f'7creal'5c'3f'7crational'5c'3f'7cinteger'5c'3f'7cexact'5c'3f'7cinexact'5c'3f'7czero'5c'3f'7cpositive'5c'3f'7cnegative'5c'3f'7codd'5c'3f'7ceven'5c'3f'7cmax'7cmin'7cabs'7cquotient'7cremainder'7cmodulo'7cgcd'7clcm'7cnumerator'7cdenominator'7cfloor'7cceiling'7ctruncate'7cround'7crationalize'7cexp'7clog'7csin'7ccos'7ctan'7casin'7cacos'7catan'7csqrt'7cexpt'7cmake'2drectangular'7cmake'2dpolar'7creal'2dpart'7cimag'2dpart'7cmagnitude'7cangle'7cexact'2d'3einexact'7cinexact'2d'3eexact'7cnumber'2d'3estring'7cstring'2d'3enumber'29'28'3f'3d'28'24'7c'5cs'7c'5c'29'29'29 >>= withAttribute FloatTok))
+   <|>
+   ((pRegExpr regex_'5cb'28char'28'28'2dci'29'3f'28'3d'5c'3f'7c'3c'5c'3f'7c'3e'5c'3f'7c'3c'3d'5c'3f'7c'3e'3d'5c'3f'29'7c'2dalphabetic'5c'3f'7c'5c'3f'7c'2dnumeric'5c'3f'7c'2dwhitespace'5c'3f'7c'2dupper'2dcase'5c'3f'7c'2dlower'2dcase'5c'3f'7c'2d'3einteger'7c'2dupcase'7c'2ddowncase'7c'2dready'5c'3f'29'7cinteger'2d'3echar'7cmake'2dstring'7cstring'28'5c'3f'7c'2dcopy'7c'2dfill'21'7c'2dlength'7c'2dref'7c'2dset'21'7c'28'2dci'29'3f'28'3d'5c'3f'7c'3c'5c'3f'7c'3e'5c'3f'7c'3c'3d'5c'3f'7c'3e'3d'5c'3f'29'7c'2dappend'29'7csubstring'7cmake'2dvector'7cvector'28'5c'3f'7c'2dlength'7c'2dref'7c'2dset'21'7c'2dfill'21'29'3f'7cprocedure'5c'3f'7capply'7cmap'7cfor'2deach'7cforce'7ccall'2dwith'2d'28current'2dcontinuation'7c'28in'7cout'29put'2dfile'29'7c'28in'7cout'29put'2dport'5c'3f'7ccurrent'2d'28in'7cout'29put'2dport'7copen'2d'28in'7cout'29put'2dfile'7cclose'2d'28in'7cout'29put'2dport'7ceof'2dobject'5c'3f'7cread'7c'28read'7cpeek'29'2dchar'7cwrite'28'2dchar'29'3f'7cdisplay'7cnewline'7ccall'2fcc'7clist'2dtail'7cstring'2d'3elist'7clist'2d'3estring'7cvector'2d'3elist'7clist'2d'3evector'7cwith'2dinput'2dfrom'2dfile'7cwith'2doutput'2dto'2dfile'7cload'7ctranscript'2d'28on'7coff'29'7ceval'7cdynamic'2dwind'7cport'5c'3f'7cvalues'7ccall'2dwith'2dvalues'7c'28scheme'2dreport'2d'7cnull'2d'7cinteraction'2d'29environment'29'28'3f'3d'28'24'7c'5cs'7c'5c'29'29'29 >>= withAttribute FloatTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","schemelily") =
+  (((pDetect2Chars False '#' '}' >>= withAttribute FloatTok) >>~ (popContext))
+   <|>
+   ((parseRules ("LilyPond","lilypond")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","schemelily")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","schemecommentline") =
+  (((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","schemecommentline")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("LilyPond","schemecommentblock") =
+  (((pDetect2Chars False '!' '#' >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","schemecommentblock")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("LilyPond","schemesub") =
+  (((pRegExpr regex_'5ba'2dzA'2dZ'23'5d'5b'5e'5cs'28'29'7b'7d'5b'5c'5d'3b'24'22'5d'2a >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","schemestring") =
+  (((pDetectChar False '"' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5c'5c'5b0fnrtav'5c'5c'22'5d >>= withAttribute StringTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","schemestring")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("LilyPond","notemode") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","notemode2"))
+   <|>
+   ((pDetectSpaces >>= withAttribute KeywordTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","notemode2") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("LilyPond","noterules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","notemode2")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","noterules") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","noterules"))
+   <|>
+   ((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("LilyPond","music")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","noterules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","drummode") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","drummode2"))
+   <|>
+   ((pDetectSpaces >>= withAttribute KeywordTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","drummode2") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("LilyPond","drumrules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","drummode2")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","drumrules") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","drumrules"))
+   <|>
+   ((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3c'28'3f'21'3c'29 >>= withAttribute DataTypeTok) >>~ pushContext ("LilyPond","drumchord"))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_drumpitchnames >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","duration"))
+   <|>
+   ((parseRules ("LilyPond","music")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","drumrules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","drumchord") =
+  (((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_drumpitchnames >>= withAttribute NormalTok))
+   <|>
+   ((parseRules ("LilyPond","chord")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","drumchord")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","chordmode") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","chordmode2"))
+   <|>
+   ((pDetectSpaces >>= withAttribute KeywordTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","chordmode2") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("LilyPond","chordrules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","chordmode2")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","chordrules") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","chordrules"))
+   <|>
+   ((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3a'3f'28'5b'5c'2e'5e'5d'3f'5cd'2b'5b'2d'2b'5d'3f'7c'28m'7cdim'7caug'7cmaj'7csus'29'28'3f'21'5bA'2dZa'2dz'5d'29'29'2a'28'2f'5c'2b'3f'5cb'28'5ba'2dh'5d'28'28iss'29'7b1'2c2'7d'7c'28ess'29'7b1'2c2'7d'7c'28is'29'7b1'2c2'7d'7c'28es'29'7b1'2c2'7d'7c'28sharp'29'7b1'2c2'7d'7c'28flat'29'7b1'2c2'7d'7css'3f'7cff'3f'29'3f'7c'28do'7cre'7cmi'7cfa'7csol'7cla'7csi'29'28dd'3f'7cbb'3f'7css'3f'7ckk'3f'29'3f'7cq'29'28'27'2b'7c'2c'2b'7c'28'3f'21'5bA'2dZa'2dz'5d'29'29'29'3f >>= withAttribute NormalTok))
+   <|>
+   ((parseRules ("LilyPond","music")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","chordrules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","figuremode") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","figuremode2"))
+   <|>
+   ((pDetectSpaces >>= withAttribute KeywordTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","figuremode2") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("LilyPond","figurerules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","figuremode2")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","figurerules") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","figurerules"))
+   <|>
+   ((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '<' >>= withAttribute DataTypeTok) >>~ pushContext ("LilyPond","figure"))
+   <|>
+   ((pRegExpr regex_'5cb'5bsrR'5d'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","duration"))
+   <|>
+   ((parseRules ("LilyPond","default")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","figurerules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","figure") =
+  (((pDetectChar False '>' >>= withAttribute DataTypeTok) >>~ pushContext ("LilyPond","chordend"))
+   <|>
+   ((parseRules ("LilyPond","basic")))
+   <|>
+   ((pRegExpr regex_'5c'5cmarkup'28lines'29'3f'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute BaseNTok) >>~ pushContext ("LilyPond","markup"))
+   <|>
+   ((pRegExpr regex_'5c'5cskip'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute FunctionTok) >>~ pushContext ("LilyPond","duration"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","figure")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","lyricmode") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","lyricmode2"))
+   <|>
+   ((pDetectSpaces >>= withAttribute KeywordTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","lyricmode2") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("LilyPond","lyricrules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","lyricmode2")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","lyricsto") =
+  (((pRegExpr regex_'22'28'5c'5c'5b'22'5c'5c'5d'7c'5b'5e'22'5c'5c'5d'29'2b'22 >>= withAttribute StringTok) >>~ pushContext ("LilyPond","lyricsto2"))
+   <|>
+   ((pRegExpr regex_'5bA'2dZa'2dz'5d'2b >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","lyricsto2"))
+   <|>
+   ((pDetectSpaces >>= withAttribute KeywordTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","lyricsto2") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","lyricsto3"))
+   <|>
+   ((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((popContext >> popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","lyricsto3") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   ((parseRules ("LilyPond","lyricrules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","lyricsto3")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","lyricrules") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","lyricrules"))
+   <|>
+   ((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'28'5cw'2b'2d'7b2'2c'7d'7c'5cw'2b'5f'7b2'2c'7d'7c'2d'7b2'2c'7d'5cw'2b'7c'5f'7b2'2c'7d'5cw'2b'29 >>= withAttribute ErrorTok))
+   <|>
+   ((pRegExpr regex_'28'5c'5c'28longa'7cbreve'29'5cb'7c'281'7c2'7c4'7c8'7c16'7c32'7c64'7c128'7c256'7c512'7c1024'7c2048'29'28'3f'21'5cd'29'29'28'5cs'2a'5c'2e'2b'29'3f'28'5cs'2a'5c'2a'5cs'2a'5cd'2b'28'2f'5cd'2b'29'3f'29'2a >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'2d'2d'7c'5f'5f'7c'5f'29 >>= withAttribute KeywordTok))
+   <|>
+   ((parseRules ("LilyPond","default")))
+   <|>
+   ((pRegExpr regex_'5cS'2b'5c'7d >>= withAttribute ErrorTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","lyricrules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","markup") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","markup2"))
+   <|>
+   ((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'5c'5cscore'5cb >>= withAttribute BaseNTok) >>~ pushContext ("LilyPond","notemode"))
+   <|>
+   ((pRegExpr regex_'5c'5c'28markup'7cbold'7c'28rounded'2d'29'3fbox'7cbracket'7ccaps'7c'28center'7cgeneral'7cleft'7cright'29'2dalign'7ccircle'7c'28'28center'7cdir'7cleft'7cright'29'2d'29'3fcolumn'7ccombine'7cconcat'7cdynamic'7cfill'2dline'7cfinger'7cfontCaps'7c'28abs'2d'29'3ffontsize'7cfraction'7chalign'7chbracket'7chcenter'2din'7chcenter'7chspace'7chuge'7citalic'7cjustify'7clarger'3f'7cline'7clower'7cmagnify'7cmedium'7cnormal'2dsize'2d'28sub'7csuper'29'7cnormal'2dtext'7cnormalsize'7cnumber'7con'2dthe'2dfly'7coverride'7cpad'2d'28around'7cmarkup'7cto'2dbox'7cx'29'7cpage'2dref'7cpostscript'7cput'2dadjacent'7craise'7croman'7crotate'7csans'7csmall'28er'29'3f'7csmallCaps'7csub'7csuper'7cteeny'7ctext'7ctiny'7ctranslate'28'2dscaled'29'3f'7ctransparent'7ctypewriter'7cunderline'7cupright'7cvcenter'7cwhiteout'7cwith'2d'28color'7cdimensions'7curl'29'7cwordwrap'7c'28markup'7ccolumn'2d'7cjustified'2d'7coverride'2d'7cwordwrap'2d'29lines'7cwordwrap'2d'28string'2d'29'3finternal'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute BaseNTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28arrow'2dhead'7cbeam'7cchar'7c'28semi'7csesqui'7cdouble'29'3f'28flat'7csharp'29'7cdraw'2d'28circle'7cline'29'7cepsfile'7ceyeglasses'7cfilled'2dbox'7cfret'2ddiagram'28'2dterse'7c'2dverbose'29'3f'7cfromproperty'7charp'2dpedal'7c'28justify'7cwordwrap'29'2d'28field'7cstring'29'7cleft'2dbrace'7clookup'7cmarkalphabet'7cmarkletter'7cmusicglyph'7cnatural'7cnote'2dby'2dnumber'7cnote'7cnull'7cpath'7cright'2dbrace'7csimple'7c'28back'29'3fslashed'2ddigit'7cstencil'7cstrut'7ctied'2dlyric'7ctriangle'7cverbatim'2dfile'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute BaseNTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '#' >>= withAttribute NormalTok) >>~ pushContext ("LilyPond","scheme"))
+   <|>
+   ((pRegExpr regex_'5b'5e'22'5cs'5c'5c'23'25'7b'7d'24'5d'2b >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","markup2") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("LilyPond","markuprules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","markup2")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","markuprules") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","markuprules"))
+   <|>
+   ((pRegExpr regex_'5c'5cscore'5cb >>= withAttribute BaseNTok) >>~ pushContext ("LilyPond","notemode"))
+   <|>
+   ((pRegExpr regex_'5c'5c'28arrow'2dhead'7cbeam'7cchar'7c'28semi'7csesqui'7cdouble'29'3f'28flat'7csharp'29'7cdraw'2d'28circle'7cline'29'7cepsfile'7ceyeglasses'7cfilled'2dbox'7cfret'2ddiagram'28'2dterse'7c'2dverbose'29'3f'7cfromproperty'7charp'2dpedal'7c'28justify'7cwordwrap'29'2d'28field'7cstring'29'7cleft'2dbrace'7clookup'7cmarkalphabet'7cmarkletter'7cmusicglyph'7cnatural'7cnote'2dby'2dnumber'7cnote'7cnull'7cpath'7cright'2dbrace'7csimple'7c'28back'29'3fslashed'2ddigit'7cstencil'7cstrut'7ctied'2dlyric'7ctriangle'7cverbatim'2dfile'7cmarkup'7cbold'7c'28rounded'2d'29'3fbox'7cbracket'7ccaps'7c'28center'7cgeneral'7cleft'7cright'29'2dalign'7ccircle'7c'28'28center'7cdir'7cleft'7cright'29'2d'29'3fcolumn'7ccombine'7cconcat'7cdynamic'7cfill'2dline'7cfinger'7cfontCaps'7c'28abs'2d'29'3ffontsize'7cfraction'7chalign'7chbracket'7chcenter'2din'7chcenter'7chspace'7chuge'7citalic'7cjustify'7clarger'3f'7cline'7clower'7cmagnify'7cmedium'7cnormal'2dsize'2d'28sub'7csuper'29'7cnormal'2dtext'7cnormalsize'7cnumber'7con'2dthe'2dfly'7coverride'7cpad'2d'28around'7cmarkup'7cto'2dbox'7cx'29'7cpage'2dref'7cpostscript'7cput'2dadjacent'7craise'7croman'7crotate'7csans'7csmall'28er'29'3f'7csmallCaps'7csub'7csuper'7cteeny'7ctext'7ctiny'7ctranslate'28'2dscaled'29'3f'7ctransparent'7ctypewriter'7cunderline'7cupright'7cvcenter'7cwhiteout'7cwith'2d'28color'7cdimensions'7curl'29'7cwordwrap'7c'28markup'7ccolumn'2d'7cjustified'2d'7coverride'2d'7cwordwrap'2d'29lines'7cwordwrap'2d'28string'2d'29'3finternal'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute BaseNTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28bigger'7ch'3fcenter'29'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute BaseNTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'5bA'2dZa'2dz'5d'2b'28'2d'5bA'2dZa'2dz'5d'2b'29'2a >>= withAttribute FunctionTok))
+   <|>
+   ((parseRules ("LilyPond","basic")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","markuprules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","section") =
+  (((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","section2"))
+   <|>
+   ((pDetectSpaces >>= withAttribute KeywordTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","section2") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("LilyPond","sectionrules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","section2")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","sectionrules") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","sectionrules"))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_contexts >>= withAttribute DataTypeTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_deprecatedcontexts >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'22'3f'29'5cb'28'28Accidental'7cAmbitus'7cArpeggio'7cAuto'5fbeam'7cAxis'5fgroup'7cBalloon'7cBar'7cBar'5fnumber'7cBeam'7cBend'7cBreak'5falign'7cBreathing'5fsign'7cChord'5fname'7cChord'5ftremolo'7cClef'7cCluster'5fspanner'7cCollision'7cCompletion'5fheads'7cCustos'7cDefault'5fbar'5fline'7cDot'5fcolumn'7cDots'7cDrum'5fnotes'7cDynami'5falign'7cDynamic'7cEpisema'7cExtender'7cFigured'5fbass'7cFigured'5fbass'5fposition'7cFingering'7cFont'5fsize'7cForbid'5fline'5fbreak'7cFretboard'7cGlissando'7cGrace'5fbeam'7cGrace'7cGrace'5fspacing'7cGrid'5fline'5fspan'7cGrid'5fpoint'7cGrob'5fpq'7cHara'5fkiri'7cHorizontal'5fbracket'29'5fengraver'29'5cb'5c1 >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'22'3f'29'5cb'28'28Hyphen'7cInstrument'5fname'7cInstrument'5fswitch'7cKey'7cLaissez'5fvibrer'7cLedger'5fline'7cLigature'5fbracket'7cLyric'7cMark'7cMeasure'5fgrouping'7cMelody'7cMensural'5fligature'7cMetronome'5fmark'7cMulti'5fmeasure'5frest'7cNew'5fdynamic'7cNew'5ffingering'7cNote'5fhead'5fline'7cNote'5fheads'7cNote'5fname'7cNote'5fspacing'7cOttava'5fspanner'7cOutput'5fproperty'7cPage'5fturn'7cPaper'5fcolumn'7cParenthesis'7cPart'5fcombine'7cPercent'5frepeat'7cPhrasing'5fslur'7cPiano'5fpedal'5falign'7cPiano'5fpedal'7cPitch'5fsquash'7cPitched'5ftrill'7cRepeat'5facknowledge'7cRepeat'5ftie'7cRest'5fcollision'7cRest'7cRhythmic'5fcolumn'7cScheme'7cScript'5fcolumn'7cScript'7cScript'5frow'29'5fengraver'29'5cb'5c1 >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'22'3f'29'5cb'28'28Separating'5fline'5fgroup'7cSlash'5frepeat'7cSlur'7cSpacing'7cSpan'5farpeggio'7cSpan'5fbar'7cSpanner'5fbreak'5fforbid'7cStaff'5fcollecting'7cStaff'5fsymbol'7cStanza'5fnumber'5falign'7cStanza'5fnumber'7cStem'7cString'5fnumber'7cSwallow'7cSystem'5fstart'5fdelimiter'7cTab'5fharmonic'7cTab'5fnote'5fheads'7cTab'5fstaff'5fsymbol'7cText'7cText'5fspanner'7cTie'7cTime'5fsignature'7cTrill'5fspanner'7cTuplet'7cTweak'7cVaticana'5fligature'7cVertical'5falign'7cVertically'5fspaced'5fcontexts'7cVolta'29'5fengraver'29'5cb'5c1 >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'22'3f'29'5cb'28'28Beam'7cControl'5ftrack'7cDrum'5fnote'7cDynamic'7cKey'7cLyric'7cNote'7cPiano'5fpedal'7cSlur'7cStaff'7cSwallow'7cTempo'7cTie'7cTime'5fsignature'29'5fperformer'29'5cb'5c1 >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'22'3f'29'5cb'28'28Note'5fswallow'7cRest'5fswallow'7cSkip'5fevent'5fswallow'7cTiming'29'5ftranslator'29'5cb'5c1 >>= withAttribute DataTypeTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_layoutobjects >>= withAttribute DataTypeTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_properties >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'5cb'28dedication'7c'28sub'29'7b'2c2'7dtitle'7cpoet'7ccomposer'7cmeter'7copus'7carranger'7cinstrument'7cpiece'7cbreakbefore'7ccopyright'7ctagline'7cmutopia'28title'7ccomposer'7cpoet'7copus'7cinstrument'29'7cdate'7centeredby'7csource'7cstyle'7cmaintainer'28Email'7cWeb'29'3f'7cmoreInfo'7clastupdated'7ctexidoc'7cfooter'7c'28top'7cbottom'7cleft'7cright'29'2dmargin'7c'28foot'7chead'29'2dseparation'7cindent'7cshort'2dindent'7cpaper'2d'28height'7cwidth'29'7chorizontal'2dshift'7cline'2dwidth'7c'28inner'7couter'29'2dmargin'7ctwo'2dsided'7cbinding'2doffset'7c'28after'7cbefore'7cbetween'29'2dtitle'2dspace'7cbetween'2dsystem'2d'28space'7cpadding'29'7cpage'2dtop'2dspace'7cpage'2dbreaking'2dbetween'2dsystem'2dpadding'7c'28after'7cbefore'7cbetween'29'2dtitle'2dspacing'7cbetween'2d'28scores'2d'29'3fsystem'2dspacing'7cbottom'2dsystem'2dspacing'7ctop'2dtitle'2dspacing'7ctop'2dsystem'2dspacing'7cpage'2dbreaking'2dbetween'2dsystem'2dspacing'7csystem'2dcount'7c'28min'2d'7cmax'2d'29'3fsystems'2dper'2dpage'7cannotate'2dspacing'7cauto'2dfirst'2dpage'2dnumber'7cblank'2d'28last'2d'29'3fpage'2dforce'7cfirst'2dpage'2dnumber'7cpage'2dcount'7cpage'2dlimit'2dinter'2dsystem'2dspace'7cpage'2dlimit'2dinter'2dsystem'2dspace'2dfactor'7cpage'2dspacing'2dweight'7cprint'2dall'2dheaders'7cprint'2dfirst'2dpage'2dnumber'7cprint'2dpage'2dnumber'7cragged'2d'28bottom'7cright'29'7cragged'2dlast'28'2dbottom'29'3f'7csystem'2dseparator'2dmarkup'7cforce'2dassignment'7cinput'2dencoding'7coutput'2dscale'7c'28'28even'7codd'29'28Footer'7cHeader'29'7c'28book'7cscore'7ctoc'29Title'7ctocItem'29Markup'7csystem'2dcount'7c'28short'2d'29'3findent'29'5cb >>= withAttribute DataTypeTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_deprecatedproperties >>= withAttribute DataTypeTok))
+   <|>
+   ((parseRules ("LilyPond","default")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("LilyPond","sectionrules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("LilyPond","context") =
+  (((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_contexts >>= withAttribute DataTypeTok) >>~ pushContext ("LilyPond","context2"))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_deprecatedcontexts >>= withAttribute DataTypeTok) >>~ pushContext ("LilyPond","context2"))
+   <|>
+   ((pRegExpr regex_'5bA'2dZa'2dz'5d'2b >>= withAttribute FunctionTok) >>~ pushContext ("LilyPond","context2"))
+   <|>
+   ((pDetectChar False '{' >>= withAttribute KeywordTok) >>~ pushContext ("LilyPond","section2"))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","context2") =
+  (((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'3d'28'5cs'2a'5bA'2dZa'2dz'5d'2b'29'3f >>= withAttribute NormalTok) >>~ (popContext >> popContext))
+   <|>
+   ((popContext >> popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","set") =
+  (((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_contexts >>= withAttribute DataTypeTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_deprecatedcontexts >>= withAttribute DataTypeTok))
+   <|>
+   ((pDetectChar False '.' >>= withAttribute NormalTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_properties >>= withAttribute DataTypeTok) >>~ (popContext))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_deprecatedproperties >>= withAttribute DataTypeTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5bA'2dZa'2dz'5d'2b >>= withAttribute FunctionTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","override") =
+  (((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_contexts >>= withAttribute DataTypeTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_deprecatedcontexts >>= withAttribute DataTypeTok))
+   <|>
+   ((pDetectChar False '.' >>= withAttribute NormalTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'_0123456789" list_layoutobjects >>= withAttribute DataTypeTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5bA'2dZa'2dz'5d'2b'28'3f'3d'5cs'2a'5c'2e'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5bA'2dZa'2dz'5d'2b >>= withAttribute FunctionTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("LilyPond","tempo") =
+  (((pRegExpr regex_'5c'5cmarkup'28lines'29'3f'28'3f'21'5bA'2dZa'2dz'5d'29 >>= withAttribute BaseNTok) >>~ pushContext ("LilyPond","markup"))
+   <|>
+   ((pRegExpr regex_'5cd'2b'5c'2e'2a'5cs'2a'3d'5cs'2a'5cd'2b >>= withAttribute FunctionTok) >>~ (popContext))
+   <|>
+   ((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((parseRules ("LilyPond","basic")))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Alerts", _) = Text.Highlighting.Kate.Syntax.Alert.parseExpression Nothing
+
+parseRules x = parseRules ("LilyPond","lilypond") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/LiterateHaskell.hs b/Text/Highlighting/Kate/Syntax/LiterateHaskell.hs
--- a/Text/Highlighting/Kate/Syntax/LiterateHaskell.hs
+++ b/Text/Highlighting/Kate/Syntax/LiterateHaskell.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file literate-haskell.xml, version 2.0.2, by Nicolas Wu (zenzike@gmail.com) -}
+   highlighting file literate-haskell.xml, version 2.1, by Nicolas Wu (zenzike@gmail.com) -}
 
 module Text.Highlighting.Kate.Syntax.LiterateHaskell
           (highlight, parseExpression, syntaxName, syntaxExtensions)
diff --git a/Text/Highlighting/Kate/Syntax/M4.hs b/Text/Highlighting/Kate/Syntax/M4.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/M4.hs
@@ -0,0 +1,103 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file m4.xml, version 1.1, by Jaak Ristioja -}
+
+module Text.Highlighting.Kate.Syntax.M4
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "GNU M4"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.m4;"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("GNU M4","Normal Text")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("GNU M4","Normal Text") -> return ()
+      ("GNU M4","inparenthesis") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_optbuiltins = Set.fromList $ words $ "__gnu__ __os2__ os2 __unix__ unix __windows__ windows"
+list_m4'5foptbuiltins = Set.fromList $ words $ "m4___gnu__ m4___os2__ m4_os2 m4___unix__ m4_unix m4___windows__ m4_windows"
+list_builtins = Set.fromList $ words $ "__file__ __line__ __program__ builtin changecom changequote changeword debugfile debugmode decr define defn divert divnum dnl dumpdef errprint esyscmd eval format ifdef ifelse include incr index indir len m4exit m4wrap maketemp mkstemp patsubst popdef pushdef regexp shift sinclude substr syscmd sysval traceon traceoff translit undefine undivert"
+list_m4'5fbuiltins = Set.fromList $ words $ "m4___file__ m4___line__ m4___program__ m4_builtin m4_changecom m4_changequote m4_changeword m4_debugfile m4_debugmode m4_decr m4_define m4_defn m4_divert m4_divnum m4_dnl m4_dumpdef m4_errprint m4_esyscmd m4_eval m4_format m4_ifdef m4_ifelse m4_include m4_incr m4_index m4_indir m4_len m4_m4exit m4_m4wrap m4_maketemp m4_mkstemp m4_patsubst m4_popdef m4_pushdef m4_regexp m4_shift m4_sinclude m4_substr m4_syscmd m4_sysval m4_traceon m4_traceoff m4_translit m4_undefine m4_undivert"
+
+regex_'5ba'2dzA'2dZ'5f'5d'5cw'2b = compileRegex True "[a-zA-Z_]\\w+"
+regex_'5c'24'28'5b1'2d9'5d'5cd'2a'7c0'7c'5c'23'7c'5c'2a'7c'5c'40'7c'5c'7b'28'5b1'2d9'5d'5cd'2a'7c0'29'5c'7d'29 = compileRegex True "\\$([1-9]\\d*|0|\\#|\\*|\\@|\\{([1-9]\\d*|0)\\})"
+regex_'28'5b1'2d9'5d'5cd'2a'7c0'7c0x'5b0'2d9abcdefABCDEF'5d'2b'29 = compileRegex True "([1-9]\\d*|0|0x[0-9abcdefABCDEF]+)"
+regex_'23'2e'2a'24 = compileRegex True "#.*$"
+regex_'5b'2b'2a'2f'25'5c'7c'3d'5c'21'3c'3e'21'5e'26'7e'2d'5d = compileRegex True "[+*/%\\|=\\!<>!^&~-]"
+
+parseRules ("GNU M4","Normal Text") =
+  (((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_builtins >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_m4'5fbuiltins >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_optbuiltins >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_m4'5foptbuiltins >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5ba'2dzA'2dZ'5f'5d'5cw'2b >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'5c'24'28'5b1'2d9'5d'5cd'2a'7c0'7c'5c'23'7c'5c'2a'7c'5c'40'7c'5c'7b'28'5b1'2d9'5d'5cd'2a'7c0'29'5c'7d'29 >>= withAttribute CharTok))
+   <|>
+   ((pRegExpr regex_'28'5b1'2d9'5d'5cd'2a'7c0'7c0x'5b0'2d9abcdefABCDEF'5d'2b'29 >>= withAttribute DecValTok))
+   <|>
+   ((pRegExpr regex_'23'2e'2a'24 >>= withAttribute CommentTok))
+   <|>
+   ((pDetectChar False ',' >>= withAttribute CharTok))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute CharTok) >>~ pushContext ("GNU M4","inparenthesis"))
+   <|>
+   ((pDetectChar False ')' >>= withAttribute CharTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5b'2b'2a'2f'25'5c'7c'3d'5c'21'3c'3e'21'5e'26'7e'2d'5d >>= withAttribute CharTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("GNU M4","Normal Text")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("GNU M4","inparenthesis") =
+  (((parseRules ("GNU M4","Normal Text")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("GNU M4","inparenthesis")) >> pDefault >>= withAttribute NormalTok))
+
+
+parseRules x = parseRules ("GNU M4","Normal Text") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Markdown.hs b/Text/Highlighting/Kate/Syntax/Markdown.hs
--- a/Text/Highlighting/Kate/Syntax/Markdown.hs
+++ b/Text/Highlighting/Kate/Syntax/Markdown.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file markdown.xml, version 1.3, by Darrin Yeager, Claes Holmerson -}
+   highlighting file markdown.xml, version 1.4, by Darrin Yeager, Claes Holmerson -}
 
 module Text.Highlighting.Kate.Syntax.Markdown
           (highlight, parseExpression, syntaxName, syntaxExtensions)
@@ -45,9 +45,9 @@
   if length contexts >= 2
     then case context of
       ("Markdown","Normal Text") -> return ()
-      ("Markdown","blockquote") -> (popContext) >> pEndLine
-      ("Markdown","bullet") -> (popContext) >> pEndLine
-      ("Markdown","numlist") -> (popContext) >> pEndLine
+      ("Markdown","blockquote") -> return ()
+      ("Markdown","bullet") -> return ()
+      ("Markdown","numlist") -> return ()
       ("Markdown","comment") -> return ()
       ("Markdown","inc") -> return ()
       _ -> return ()
diff --git a/Text/Highlighting/Kate/Syntax/Mathematica.hs b/Text/Highlighting/Kate/Syntax/Mathematica.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Mathematica.hs
@@ -0,0 +1,82 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file mathematica.xml, version 8.1, by Sven Brauch (svenbrauch@gmail.com) -}
+
+module Text.Highlighting.Kate.Syntax.Mathematica
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "Mathematica"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.nb"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("Mathematica","Normal")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = False, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("Mathematica","Normal") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_functions = Set.fromList $ words $ "a abeliangroup all arcsinh abort allowgroupclose arctan abortkernels allowreversegroupclose arctanh abortprotect alphachannel arg abs alternatinggroup argmax absolutecurrentvalue alternativehypothesis argmin absolutedashing alternatives arithmeticgeometricmean absolutefilename anchoredsearch array absoluteoptions and arraycomponents absolutepointsize andersondarlingtest arraydepth absolutethickness angerj arrayflatten absolutetime anglebracket arraypad absolutetiming animate arrayplot accountingform animationdirection arrayq accumulate animationdisplaytime arrayrules accuracy animationrate arrow accuracygoal animationrepetitions arrowheads actionmenu animationrunning aspectratio activestyle animator assert acyclicgraphq annotation assuming addto annuity assumptions adjacencygraph annuitydue astronomicaldata adjacencymatrix antialiasing asynchronous adjustmentbox apart atomq affinetransform apartsquarefree attributes airyai appearance augmentedsymmetricpolynomial airyaiprime appearanceelements autoaction airyaizero appellf1 autoindent airybi append autoitalicwords airybiprime appendto automatic airybizero apply automultiplicationsymbol algebraicintegerq arccos autorunsequencing algebraicnumber arccosh autoscroll algebraicnumberdenominator arccot autospacing algebraicnumbernorm arccoth axes algebraicnumberpolynomial arccsc axesedge algebraicnumbertrace arccsch axeslabel algebraics arcsec axesorigin algebraicunitq arcsech axesstyle alignment arcsin axis alignmentpoint arcsindistribution b babymonstergroupb betaregularized booleangraph back betweennesscentrality booleanmaxterms background beziercurve booleanminimize backslash bezierfunction booleanminterms backward bilateralfilter booleans band binarize booleantable barabasialbertgraphdistribution binaryformat booleanvariables barchart binaryimageq borderdimensions barchart3d binaryread boreltannerdistribution barnesg binaryreadlist bottom barorigin binarywrite bottomhattransform barspacing bincounts boundarystyle baseform binlists boxdata baseline binomial boxed baselineposition binomialdistribution boxmatrix basestyle binormaldistribution boxratios batesdistribution biorthogonalsplinewavelet boxstyle battlelemariewavelet bipartitegraphq boxwhiskerchart because birnbaumsaundersdistribution bracketingbar beckmanndistribution bitand braycurtisdistance beep bitclear breadthfirstscan begin bitget break begindialogpacket bitlength brown beginpackage bitnot brownforsythetest bellb bitor bsplinebasis belly bitset bsplinecurve benforddistribution bitshiftleft bsplinefunction beninidistribution bitshiftright bsplinesurface benktandergibratdistribution bitxor bubblechart benktanderweibulldistribution black bubblechart3d bernoullib blank bubblescale bernoullidistribution blanknullsequence bubblesizes bernoulligraphdistribution blanksequence butterflygraph bernsteinbasis blend button besseli block buttonbar besselj blockrandom buttonbox besseljzero blue buttondata besselk blur buttonframe bessely bodeplot buttonfunction besselyzero bold buttonminheight beta bookmarks buttonnotebook betabinomialdistribution boole buttonsource betadistribution booleanconvert byte betanegativebinomialdistribution booleancountingfunction bytecount betaprimedistribution booleanfunction byteordering c c citydata continuousaction callpacket clear continuoustimemodelq canberradistance clearall continuouswaveletdata cancel clearattributes continuouswavelettransform cancelbutton clearsystemcache contourdetect candlestickchart clebschgordan contourlabels cap clickpane contourplot capform clip contourplot3d capitaldifferentiald clippingstyle contours carmichaellambda clock contourshading cases close contourstyle cashflow closekernels contraharmonicmean casoratian closenesscentrality control catalan closing controlactive catalannumber clusteringcomponents controllabilitygramian catch cmykcolor controllabilitymatrix cauchydistribution coefficient controllabledecomposition cayleygraph coefficientarrays controllablemodelq cdf coefficientlist controllerinformation cdfwavelet coefficientrules controllerlinking ceiling coifletwavelet controllermanipulate cell collect controllermethod cellautooverwrite colon controllerpath cellbaseline colorcombine controllerstate cellchangetimes colorconvert controlplacement cellcontext colordata controlsrendering celldingbat colordatafunction controltype celldynamicexpression colorfunction convergents celleditduplicate colorfunctionscaling conversionrules cellepilog colorize convolve cellevaluationduplicate colornegate conwaygroupco1 cellevaluationfunction colorquantize conwaygroupco2 celleventactions colorrules conwaygroupco3 cellframe colorseparate coordinatestooloptions cellframemargins colorsetter coprimeq cellgroup colorslider coproduct cellgroupdata colorspace copuladistribution cellgrouping column copyable celllabel columnalignments copydirectory celllabelautodelete columnlines copyfile cellmargins columnsequal copytoclipboard cellopen columnspacings cornerfilter cellprint columnwidths cornerneighbors cellprolog commonest correlation celltags commonestfilter correlationdistance cellularautomaton compilationoptions cos censoreddistribution compilationtarget cosh censoring compile coshintegral center compiled cosinedistance centerdot compiledfunction cosintegral centralmoment complement cot centralmomentgeneratingfunction completegraph coth cform completegraphq count champernownenumber completekarytree countroots chanvesebinarize complex countrydata character complexes covariance characterencoding complexexpand covarianceestimatorfunction characteristicfunction complexinfinity cramervonmisestest characteristicpolynomial complexityfunction createarchive characterrange componentmeasurements createdialog characters composelist createdirectory chartbasestyle composeseries createdocument chartelementfunction composition createintermediatedirectories chartelements compoundexpression createpalette chartlabels compress createscheduledtask chartlayout condition createwindow chartlegends conditionalexpression criticalsection chartstyle conditioned cross chebyshevt cone crossingdetect chebyshevu confidencelevel crossmatrix check congruent csc checkabort conjugate csch checkbox conjugatetranspose cubics checkboxbar conjunction cuboid chemicaldata connectedcomponents cumulant chessboarddistance connectedgraphq cumulantgeneratingfunction chidistribution conovertest cup chineseremainder constant cupcap chisquaredistribution constantarray currentimage choicebuttons constants currentvalue choicedialog contentpadding curvatureflowfilter choleskydecomposition contentselectable curveclosed chop contentsize cyan circle context cyclegraph circledot contexts cycles circleminus contexttofilename cyclicgroup circleplus continue cyclotomic circletimes continuedfraction cylinder circulantgraph continuedfractionk cylindricaldecomposition d d depthfirstscan diskmatrix dagumdistribution derivative dispatch dameraulevenshteindistance derivativefilter dispersionestimatorfunction darker designmatrix displayallsteps dashed det displayendpacket dashing dgaussianwavelet displayform datadistribution diagonal displayfunction datarange diagonalmatrix displaypacket datareversed dialog distancefunction datedifference dialoginput distancetransform datefunction dialognotebook distribute datelist dialogprolog distributed datelistlogplot dialogreturn distributedcontexts datelistplot dialogsymbols distributedefinitions datepattern diamond distributionchart dateplus diamondmatrix distributionfittest datestring dicedissimilarity distributionparameterassumptions dateticksformat dictionarylookup distributionparameterq daubechieswavelet differencedelta divide davisdistribution differenceroot divideby dawsonf differencerootreduce dividers debruijngraph differences divisible declarepackage differentiald divisors decompose differentialroot divisorsigma decrement differentialrootreduce divisorsum dedekindeta digitblock dmslist default digitcharacter dmsstring defaultaxesstyle digitcount do defaultbasestyle digitq dockedcells defaultboxstyle dihedralgroup documentnotebook defaultbutton dilation dot defaultduplicatecellstyle dimensions dotdashed defaultduration diraccomb dotequal defaultelement diracdelta dotted defaultfacegridsstyle directededge doublebracketingbar defaultfieldhintstyle directededges doubledownarrow defaultframestyle directedgraph doubleleftarrow defaultframeticksstyle directedgraphq doubleleftrightarrow defaultgridlinesstyle directedinfinity doublelongleftarrow defaultlabelstyle direction doublelongleftrightarrow defaultmenustyle directive doublelongrightarrow defaultnewcellstyle directory doublerightarrow defaultoptions directoryname doubleuparrow defaultticksstyle directoryq doubleupdownarrow defer directorystack doubleverticalbar definition dirichletcharacter downarrow degree dirichletconvolve downarrowbar degreecentrality dirichletdistribution downarrowuparrow degreegraphdistribution dirichletl downleftrightvector deinitialization dirichlettransform downleftteevector del discreteconvolve downleftvector deletable discretedelta downleftvectorbar delete discreteindicator downrightteevector deletebordercomponents discretelqestimatorgains downrightvector deletecases discretelqregulatorgains downrightvectorbar deletecontents discretelyapunovsolve downteearrow deletedirectory discreteplot downvalues deleteduplicates discreteplot3d draganddrop deletefile discreteratio drop deletesmallcomponents discretericcatisolve dsolve delimiter discreteshift dt delimiterflashtime discretetimemodelq dualsystemsmodel denominator discreteuniformdistribution dumpsave densityhistogram discretewaveletdata dynamic densityplot discretewaveletpackettransform dynamicevaluationtimeout dependentvariables discretewavelettransform dynamicmodule deploy discriminant dynamicmodulevalues deployed disjunction dynamicsetting depth disk dynamicwrapper e e end exactnumberq edgeadd enddialogpacket exampledata edgecount endoffile except edgecoverq endofline excludedforms edgedelete endofstring excludepods edgedetect endpackage exclusions edgeform engineeringform exclusionsstyle edgeindex enterexpressionpacket exists edgelabeling entertextpacket exit edgelabels entropy exp edgelist entropyfilter expand edgeq environment expandall edgerenderingfunction epilog expanddenominator edgerules equal expandfilename edgeshapefunction equaltilde expandnumerator edgestyle equilibrium expectation edgeweight equivalent expgammadistribution editable erf expintegrale editdistance erfc expintegralei effectiveinterest erfi exponent eigensystem erlangdistribution exponentfunction eigenvalues erosion exponentialdistribution eigenvectorcentrality errorbox exponentialfamily eigenvectors estimateddistribution exponentialgeneratingfunction element estimatorgains exponentialmovingaverage elementdata estimatorregulator exponentialpowerdistribution eliminate euclideandistance exponentstep elliptice eulere export ellipticexp eulergamma exportstring ellipticexpprime euleriangraphq expression ellipticf eulerphi expressioncell elliptick evaluatable exptotrig ellipticlog evaluate extendedgcd ellipticnomeq evaluatepacket extension ellipticpi evaluationelements extentelementfunction elliptictheta evaluationmonitor extentmarkers ellipticthetaprime evaluationnotebook extentsize emitsound evaluationobject extract empiricaldistribution evaluator extractarchive emptygraphq evenq extremevaluedistribution enabled eventhandler encode eventlabels f faceform findfit formbox facegrids findgeneratingfunction fortranform facegridsstyle findgeolocation forward factor findgeometrictransform forwardbackward factorial findgraphisomorphism fourier factorial2 findhamiltoniancycle fouriercoefficient factorialmoment findindependentedgeset fouriercoscoefficient factorialmomentgeneratingfunction findindependentvertexset fouriercosseries factorialpower findinstance fouriercostransform factorinteger findintegernullvector fourierdct factorlist findlibrary fourierdst factorsquarefree findlinearrecurrence fourierparameters factorsquarefreelist findlist fouriersequencetransform factorterms findmaximum fourierseries factortermslist findmaxvalue fouriersincoefficient false findminimum fouriersinseries feedbacktype findminvalue fouriersintransform fibonacci findpermutation fouriertransform fieldhint findroot fouriertrigseries fieldhintstyle findsequencefunction fractionalpart fieldmasked findshortestpath fractionbox fieldsize findshortesttour frame filebasename findthreshold framebox filebytecount findvertexcover framed filedate finishdynamic framelabel fileexistsq finiteabeliangroupcount framemargins fileextension finitegroupcount framestyle fileformat finitegroupdata frameticks filehash first frameticksstyle filenamedepth fischergroupfi22 fratiodistribution filenamedrop fischergroupfi23 frechetdistribution filenamejoin fischergroupfi24prime freeq filenames fisherhypergeometricdistribution fresnelc filenamesetter fisherratiotest fresnels filenamesplit fisherzdistribution frobeniusnumber filenametake fit frobeniussolve fileprint fittedmodel fromcharactercode filetype fixedpoint fromcoefficientrules filledcurve fixedpointlist fromcontinuedfraction filling flat fromdigits fillingstyle flatten fromdms fillingtransform flattenat front filterrules flipview frontenddynamicexpression financialbond floor frontendeventactions financialdata fold frontendexecute financialderivative foldlist frontendtoken financialindicator fontcolor frontendtokenexecute find fontfamily full findargmax fontsize fulldefinition findargmin fontslant fullform findclique fontsubstitutions fullgraphics findclusters fonttracking fullsimplify findcurvepath fontvariations function finddistributionparameters fontweight functionexpand finddivisions for functioninterpolation findedgecover forall functionspace findeuleriancycle format findfile formattype g gaborwavelet geopositionxyz graphstyle gainmargins geoprojectiondata graphunion gainphasemargins get gray gamma glaisher graylevel gammadistribution glow greater gammaregularized goldenratio greaterequal gappenalty gompertzmakehamdistribution greaterequalless gather goto greaterfullequal gatherby gradient greatergreater gaussianfilter gradientfilter greaterless gaussianintegers graph greaterslantequal gaussianmatrix graphcenter greatertilde gcd graphcomplement green gegenbauerc graphdata grid general graphdiameter gridbox generalizedlinearmodelfit graphdifference griddefaultelement generateconditions graphdisjointunion gridgraph generatedcell graphdistance gridlines generatedparameters graphdistancematrix gridlinesstyle generatingfunction graphhighlight groebnerbasis genericcylindricaldecomposition graphhighlightstyle groupactionbase genomedata graphics groupcentralizer genomelookup graphics3d groupelementposition geodesicdilation graphicscolumn groupelementq geodesicerosion graphicscomplex groupelements geodestination graphicsgrid groupgenerators geodesydata graphicsgroup groupmultiplicationtable geodirection graphicsrow grouporbits geodistance graphintersection grouporder geogridposition graphlayout grouppagebreakwithin geometricdistribution graphperiphery groupsetwisestabilizer geometricmean graphplot groupstabilizer geometricmeanfilter graphplot3d groupstabilizerchain geometrictransformation graphpower gudermannian geoposition graphq gumbeldistribution geopositionenu graphradius h haarwavelet hermitianmatrixq hue halfnormaldistribution hessenbergdecomposition humpdownhump hamiltoniangraphq hexadecimalcharacter humpequal hammingdistance highlightgraph hurwitzlerchphi hankelh1 higmansimsgrouphs hurwitzzeta hankelh2 hilbertmatrix hyperbolicdistribution hankelmatrix histogram hypercubegraph haradanortongrouphn histogram3d hyperfactorial hararygraph histogramdistribution hypergeometric0f1 harmonicmean histogramlist hypergeometric0f1regularized harmonicmeanfilter hitmisstransform hypergeometric1f1 harmonicnumber hitscentrality hypergeometric1f1regularized hash hold hypergeometric2f1 haversine holdall hypergeometric2f1regularized hazardfunction holdallcomplete hypergeometricdistribution head holdcomplete hypergeometricpfq heads holdfirst hypergeometricpfqregularized heavisidelambda holdform hypergeometricu heavisidepi holdpattern hyperlink heavisidetheta holdrest hyphenation heldgrouphe hornerform hypothesistestdata hermitedecomposition hotellingtsquaredistribution hermiteh hoytdistribution i i importstring interrupt identity in intersection identitymatrix incidencegraph interval if incidencematrix intervalintersection ignorecase includeconstantbasis intervalmemberq im includepods intervalunion image increment inverse imageadd independentedgesetq inversebetaregularized imageadjust independentvertexsetq inversecdf imagealign indeterminate inversechisquaredistribution imageapply indexgraph inversecontinuouswavelettransform imageaspectratio inexactnumberq inversedistancetransform imageassemble infinity inverseellipticnomeq imagecapture infix inverseerf imagechannels information inverseerfc imageclip inherited inversefourier imagecolorspace initialization inversefouriercostransform imagecompose initializationcell inversefouriersequencetransform imageconvolve inner inversefouriersintransform imagecooccurrence inpaint inversefouriertransform imagecorrelate input inversefunction imagecorrespondingpoints inputaliases inversefunctions imagecrop inputassumptions inversegammadistribution imagedata inputautoreplacements inversegammaregularized imagedeconvolve inputfield inversegaussiandistribution imagedifference inputform inversegudermannian imagedimensions inputnamepacket inversehaversine imageeffect inputnotebook inversejacobicd imagefilter inputpacket inversejacobicn imageforestingcomponents inputstream inversejacobics imageforwardtransformation inputstring inversejacobidc imagehistogram inputstringpacket inversejacobidn imagekeypoints insert inversejacobids imagelevels insertresults inversejacobinc imagelines inset inversejacobind imagemargins install inversejacobins imagemultiply installservice inversejacobisc imagepad instring inversejacobisd imagepadding integer inversejacobisn imagepartition integerdigits inverselaplacetransform imageperspectivetransformation integerexponent inversepermutation imageq integerlength inverseradon imagereflect integerpart inverseseries imageresize integerpartitions inversesurvivalfunction imageresolution integerq inversewavelettransform imagerotate integers inverseweierstrassp imagescaled integerstring inverseztransform imagesize integrate invisible imagesizeaction interactivetradingchart irreduciblepolynomialq imagesizemultipliers interleaving isolatinginterval imagesubtract internallybalanceddecomposition isomorphicgraphq imagetake interpolatingfunction isotopedata imagetransformation interpolatingpolynomial italic imagetrim interpolation item imagetype interpolationorder itemaspectratio imagevalue interpretation itemsize implies interpretationbox itemstyle import interquartilerange j jaccarddissimilarity jacobins jankogroupj4 jacobiamplitude jacobip jarqueberaalmtest jacobicd jacobisc johnsondistribution jacobicn jacobisd join jacobics jacobisn joined jacobidc jacobisymbol joinedcurve jacobidn jacobizeta joinform jacobids jankogroupj1 jordandecomposition jacobinc jankogroupj2 jordanmodeldecomposition jacobind jankogroupj3 k kagichart kelvinker kolmogorovsmirnovtest kalmanestimator kernelmixturedistribution kroneckerdelta karhunenloevedecomposition kernelobject kroneckerproduct karytree kernels kroneckersymbol katzcentrality khinchin kuipertest kcorecomponents kirchhoffgraph kumaraswamydistribution kdistribution kirchhoffmatrix kurtosis kelvinbei kleininvariantj kuwaharafilter kelvinber knighttourgraph kelvinkei knotdata l label libraryfunction listdensityplot labeled libraryfunctionerror listinterpolation labelingfunction libraryfunctioninformation listlineintegralconvolutionplot labelstyle libraryfunctionload listlineplot laguerrel libraryfunctionunload listloglinearplot landaudistribution libraryload listloglogplot languagecategory libraryunload listlogplot laplacedistribution liftingfilterdata listplay laplacetransform liftingwavelettransform listplot laplacianfilter lightblue listplot3d laplaciangaussianfilter lightbrown listpointplot3d large lightcyan listpolarplot larger lighter liststreamdensityplot last lightgray liststreamplot latitude lightgreen listsurfaceplot3d latitudelongitude lighting listvectordensityplot latticedata lightingangle listvectorplot latticereduce lightmagenta listvectorplot3d launchkernels lightorange localizevariables layeredgraphplot lightpink locationequivalencetest layersizefunction lightpurple locationtest lcm lightred locator leafcount lightyellow locatorautocreate leastsquares likelihood locatorpane left limit locatorregion leftarrow limitspositioning locked leftarrowbar lindleydistribution log leftarrowrightarrow line log10 leftdownteevector linearfractionaltransform log2 leftdownvector linearmodelfit logbarnesg leftdownvectorbar linearoffsetfunction loggamma leftrightarrow linearprogramming loggammadistribution leftrightvector linearrecurrence logicalexpand leftteearrow linearsolve logintegral leftteevector linearsolvefunction logisticdistribution lefttriangle linebreakchart logitmodelfit lefttrianglebar linegraph loglikelihood lefttriangleequal lineindent loglinearplot leftupdownvector lineindentmaxfraction loglogisticdistribution leftupteevector lineintegralconvolutionplot loglogplot leftupvector lineintegralconvolutionscale lognormaldistribution leftupvectorbar linespacing logplot leftvector linkclose logseriesdistribution leftvectorbar linkconnect longest legendappearance linkcreate longestcommonsequence legended linkfunction longestcommonsubsequence legendrep linkinterrupt longitude legendreq linklaunch longleftarrow length linkobject longleftrightarrow lengthwhile linkpatterns longrightarrow lerchphi linkprotocol loopfreegraphq less linkread lowercaseq lessequal linkreadyq lowerleftarrow lessequalgreater links lowerrightarrow lessfullequal linkwrite lowertriangularize lessgreater liouvillelambda lqestimatorgains lessless list lqgregulator lessslantequal listable lqoutputregulatorgains lesstilde listanimate lqregulatorgains lettercharacter listcontourplot lucasl letterq listcontourplot3d ludecomposition level listconvolve lyapunovsolve levenetest listcorrelate lyonsgrouply levicivitatensor listcurvepathplot levydistribution listdeconvolve m machinenumberq maxdetect mindetect machineprecision maxextrabandwidths minfilter magenta maxextraconditions minimalpolynomial magnification maxfilter minimalstatespacemodel magnify maximize minimize majority maxiterations minors makeboxes maxmemoryused minstabledistribution makeexpression maxmixturekernels minus mangoldtlambda maxplotpoints minusplus manhattandistance maxrecursion minvalue manipulate maxstabledistribution missing manipulator maxstepfraction mixturedistribution mannwhitneytest maxsteps mod mantissaexponent maxstepsize modal manual maxvalue modularlambda map maxwelldistribution module mapall mclaughlingroupmcl modulus mapat mean moebiusmu mapindexed meandeviation moment mapthread meanfilter momentconvert marcumq meanshift momentevaluate mardiacombinedtest meanshiftfilter momentgeneratingfunction mardiakurtosistest median monitor mardiaskewnesstest mediandeviation monomiallist marginaldistribution medianfilter monstergroupm masking medium morletwavelet matchingdissimilarity meijerg morphologicalbinarize matchlocalnames memberq morphologicalbranchpoints matchq memoryconstrained morphologicalcomponents mathieuc memoryinuse morphologicaleulernumber mathieucharacteristica menucommandkey morphologicalgraph mathieucharacteristicb menupacket morphologicalperimeter mathieucharacteristicexponent menusortingvalue morphologicaltransform mathieucprime menustyle most mathieugroupm11 menuview mouseannotation mathieugroupm12 mesh mouseappearance mathieugroupm22 meshfunctions mouseover mathieugroupm23 meshshading mouseposition mathieugroupm24 meshstyle movingaverage mathieus message movingmedian mathieusprime messagedialog moyaldistribution mathmlform messagelist multiedgestyle matrixexp messagename multinomial matrixform messagepacket multinomialdistribution matrixplot messages multinormaldistribution matrixpower method multiplicativeorder matrixq mexicanhatwavelet multivariatehypergeometricdistribution matrixrank meyerwavelet multivariatepoissondistribution max min multivariatetdistribution n n normalizedsquaredeuclideandistance notprecedesslantequal nakagamidistribution normalsfunction notprecedestilde nameq normfunction notreverseelement names not notrighttriangle nand notcongruent notrighttrianglebar nargmax notcupcap notrighttriangleequal nargmin notdoubleverticalbar notsquaresubset ncache notebook notsquaresubsetequal ndsolve notebookapply notsquaresuperset nearest notebookautosave notsquaresupersetequal nearestfunction notebookclose notsubset needlemanwunschsimilarity notebookdelete notsubsetequal needs notebookdirectory notsucceeds negative notebookdynamicexpression notsucceedsequal negativebinomialdistribution notebookevaluate notsucceedsslantequal negativemultinomialdistribution notebookeventactions notsucceedstilde neighborhoodgraph notebookfilename notsuperset nest notebookfind notsupersetequal nestedgreatergreater notebookget nottilde nestedlessless notebookinformation nottildeequal nestlist notebooklocate nottildefullequal nestwhile notebookobject nottildetilde nestwhilelist notebookopen notverticalbar nevillethetac notebookprint nprobability nevillethetad notebookput nproduct nevillethetan notebookread nroots nevillethetas notebooks nsolve nexpectation notebooksave nsum nextprime notebookselection null nholdall notebookwrite nullrecords nholdfirst notelement nullspace nholdrest notequaltilde nullwords nicholsgridlines notexists number nicholsplot notgreater numberfieldclassnumber nintegrate notgreaterequal numberfielddiscriminant nmaximize notgreaterfullequal numberfieldfundamentalunits nmaxvalue notgreatergreater numberfieldintegralbasis nminimize notgreaterless numberfieldnormrepresentatives nminvalue notgreaterslantequal numberfieldregulator nominalvariables notgreatertilde numberfieldrootsofunity noncentralbetadistribution nothumpdownhump numberfieldsignature noncentralchisquaredistribution nothumpequal numberform noncentralfratiodistribution notlefttriangle numberformat noncentralstudenttdistribution notlefttrianglebar numbermarks noncommutativemultiply notlefttriangleequal numbermultiplier nonconstants notless numberpadding none notlessequal numberpoint nonlinearmodelfit notlessfullequal numberq nonnegative notlessgreater numberseparator nonpositive notlessless numbersigns nor notlessslantequal numberstring norlundb notlesstilde numerator norm notnestedgreatergreater numericfunction normal notnestedlessless numericq normaldistribution notprecedes nyquistgridlines normalize notprecedesequal nyquistplot o o operate outputform observabilitygramian operatingsystem outputnamepacket observabilitymatrix optional outputresponse observabledecomposition options outputsizelimit observablemodelq optionspattern outputstream oddq optionvalue overbar off or overdot offset orange overflow on order overhat onangroupon orderdistribution overlaps oneidentity orderedq overlay opacity ordering overscript openappend orderless overscriptbox opener orthogonalize overtilde openerview out overvector opening outer owent openread outputcontrollabilitymatrix ownvalues openwrite outputcontrollablemodelq p packingmethod permutationlist popupmenu paddedform permutationlistq popupview padding permutationmax popupwindow padeapproximant permutationmin position padleft permutationorder positive padright permutationpower positivedefinitematrixq pagebreakabove permutationproduct possiblezeroq pagebreakbelow permutationreplace postfix pagebreakwithin permutations power pagefooters permutationsupport powerdistribution pageheaders permute powerexpand pagerankcentrality peronamalikfilter powermod pagewidth pertdistribution powermodlist pairedbarchart petersengraph powersrepresentations pairedhistogram phasemargins powersymmetricpolynomial pairedttest pi precedenceform pairedztest pick precedes palettenotebook piecewise precedesequal pane piecewiseexpand precedesslantequal panel piechart precedestilde paneled piechart3d precision paneselector pink precisiongoal paraboliccylinderd pixelconstrained predecrement paragraphindent pixelvalue preemptprotect paragraphspacing placed prefix parallelarray placeholder preincrement parallelcombine placeholderreplace prepend paralleldo plain prependto parallelevaluate play preserveimageoptions parallelization playrange pricegraphdistribution parallelize plot prime parallelmap plot3d primenu parallelneeds plotlabel primeomega parallelproduct plotlayout primepi parallelsubmit plotmarkers primepowerq parallelsum plotpoints primeq paralleltable plotrange primes paralleltry plotrangeclipping primezetap parameterestimator plotrangepadding primitiveroot parametermixturedistribution plotregion principalcomponents parametricplot plotstyle principalvalue parametricplot3d plus print parentdirectory plusminus printingstyleenvironment paretodistribution pochhammer printtemporary part podstates probability particledata podwidth probabilitydistribution partition point probabilityplot partitionsp pointfigurechart probabilityscaleplot partitionsq pointsize probitmodelfit pascaldistribution poissonconsuldistribution product passeventsdown poissondistribution productdistribution passeventsup polaraxes productlog paste polaraxesorigin progressindicator pastebutton polargridlines projection path polarplot prolog pathgraph polarticks properties pathgraphq polezeromarkers property pattern polyaaepplidistribution propertylist patternsequence polygamma propertyvalue patterntest polygon proportion paulimatrix polyhedrondata proportional paulwavelet polylog protect pause polynomialextendedgcd protected pdf polynomialgcd proteindata pearsonchisquaretest polynomiallcm pruning pearsondistribution polynomialmod pseudoinverse performancegoal polynomialq purple permutationcycles polynomialquotient put permutationcyclesq polynomialquotientremainder putappend permutationgroup polynomialreduce permutationlength polynomialremainder q qbinomial qrdecomposition quartiles qfactorial quadraticirrationalq quartileskewness qgamma quantile quiet qhypergeometricpfq quantileplot quit qpochhammer quartics quotient qpolygamma quartiledeviation quotientremainder r radicalbox refreshrate rightarrowbar radiobutton regionbinarize rightarrowleftarrow radiobuttonbar regionfunction rightcosetrepresentative radon regionplot rightdownteevector ramanujantau regionplot3d rightdownvector ramanujantaul regularexpression rightdownvectorbar ramanujantautheta regularization rightteearrow ramanujantauz releasehold rightteevector randomchoice reliefimage righttriangle randomcomplex reliefplot righttrianglebar randomgraph remove righttriangleequal randomimage removealphachannel rightupdownvector randominteger removeproperty rightupteevector randompermutation removescheduledtask rightupvector randomprime renamedirectory rightupvectorbar randomreal renamefile rightvector randomsample renkochart rightvectorbar randomvariate repeated rogerstanimotodissimilarity range repeatednull root rangefilter replace rootapproximant rankedmax replaceall rootintervals rankedmin replacelist rootlocusplot raster replacepart rootmeansquare rasterize replacerepeated rootofunityq rastersize resampling rootreduce rational rescale roots rationalize rescalingtransform rootsum rationals resetdirectory rotate ratios resetscheduledtask rotatelabel rawboxes residue rotateleft rawdata resolve rotateright rayleighdistribution rest rotationaction re resultant rotationmatrix read resumepacket rotationtransform readlist return round readprotected returnexpressionpacket roundingradius real returnpacket row realblockdiagonalform returntextpacket rowalignments realdigits reverse rowbox realexponent reversebiorthogonalsplinewavelet rowlines reals reverseelement rowminheight reap reverseequilibrium rowreduce record reversegraph rowsequal recordlists reverseupequilibrium rowspacings recordseparators revolutionaxis rsolve rectangle revolutionplot3d rudvalisgroupru rectanglechart rgbcolor rule rectanglechart3d riccatisolve ruledelayed recurrencetable ricedistribution run red ridgefilter runscheduledtask reduce riemannr runthrough referencelinestyle riemannsiegeltheta runtimeattributes refine riemannsiegelz runtimeoptions reflectionmatrix riffle russellraodissimilarity reflectiontransform right refresh rightarrow s sameq sin stationarywaveletpackettransform sametest sinc stationarywavelettransform sampledepth singhmaddaladistribution statusarea sampledsoundfunction singleletteritalics stepmonitor sampledsoundlist singularvaluedecomposition stieltjesgamma samplerate singularvaluelist stirlings1 samplingperiod singularvalueplot stirlings2 satisfiabilitycount sinh stopscheduledtask satisfiabilityinstances sinhintegral streamcolorfunction satisfiableq sinintegral streamcolorfunctionscaling save sixjsymbol streamdensityplot savedefinitions skeleton streamplot sawtoothwave skeletontransform streampoints scale skellamdistribution streamposition scaled skewness streams scalingfunctions skewnormaldistribution streamscale scalingmatrix skip streamstyle scalingtransform slider string scan slider2d stringcases scheduledtaskobject slideview stringcount scheduledtasks slot stringdrop schurdecomposition slotsequence stringexpression scientificform small stringform screenstyleenvironment smallcircle stringformat scriptbaselineshifts smaller stringfreeq scriptminsize smithwatermansimilarity stringinsert scriptsizemultipliers smoothdensityhistogram stringjoin scrollbars smoothhistogram stringlength scrollposition smoothhistogram3d stringmatchq sec smoothkerneldistribution stringposition sech sokalsneathdissimilarity stringq sechdistribution solve stringreplace sectorchart solvealways stringreplacelist sectorchart3d sort stringreplacepart sectororigin sortby stringreverse sectorspacing sound stringskeleton seedrandom soundnote stringsplit select soundvolume stringtake selectable sow stringtostream selectcomponents spacer stringtrim selectednotebook spacings structuredselection selectionanimate span struveh selectioncreatecell spanfromabove struvel selectionevaluate spanfromboth stub selectionevaluatecreatecell spanfromleft studenttdistribution selectionmove sparsearray style selfloopstyle speak stylebox semialgebraiccomponentinstances specularity styledata sendmail spellingcorrection styledefinitions sequence sphere subfactorial sequencealignment sphericalbesselj subgraph sequencehold sphericalbessely subminus series sphericalhankelh1 subplus seriescoefficient sphericalhankelh2 subresultants seriesdata sphericalharmonicy subscript sessiontime sphericalplot3d subscriptbox set sphericalregion subset setaccuracy spheroidaleigenvalue subsetequal setalphachannel spheroidaljoiningfactor subsets setattributes spheroidalps substar setdelayed spheroidalpsprime subsuperscript setdirectory spheroidalqs subsuperscriptbox setfiledate spheroidalqsprime subtract setoptions spheroidalradialfactor subtractfrom setprecision spheroidals1 succeeds setproperty spheroidals1prime succeedsequal setselectednotebook spheroidals2 succeedsslantequal setsharedfunction spheroidals2prime succeedstilde setsharedvariable splice suchthat setstreamposition splineclosed sum setsystemoptions splinedegree sumconvergence setter splineknots superdagger setterbar splineweights superminus setting split superplus shallow splitby superscript shannonwavelet spokenstring superscriptbox shapirowilktest sqrt superset share sqrtbox supersetequal sharpen square superstar shearingmatrix squaredeuclideandistance survivaldistribution shearingtransform squarefreeq survivalfunction short squareintersection suspendpacket shortdownarrow squaresr suzukidistribution shortest squaresubset suzukigroupsuz shortestpathfunction squaresubsetequal switch shortleftarrow squaresuperset symbol shortrightarrow squaresupersetequal symbolname shortuparrow squareunion symletwavelet show squarewave symmetricgroup showautostyles stabilitymargins symmetricmatrixq showcellbracket stabilitymarginsstyle symmetricpolynomial showcelllabel stabledistribution symmetricreduction showcelltags stack synchronousinitialization showcursortracker stackbegin synchronousupdating showgroupopener stackcomplete syntaxinformation showpagebreaks stackinhibit syntaxlength showselection standarddeviation syntaxpacket showspecialcharacters standarddeviationfilter syntaxq showstringcharacters standardform systemdialoginput shrinkingdelay standardize systeminformation siegeltheta star systemopen siegeltukeytest stargraph systemoptions sign startingstepsize systemsmodeldelete signature startofline systemsmodeldimensions signedranktest startofstring systemsmodelextract significancelevel startscheduledtask systemsmodelfeedbackconnect signpadding statefeedbackgains systemsmodellabels signtest stateoutputestimator systemsmodelorder similarityrules stateresponse systemsmodelparallelconnect simplegraph statespacemodel systemsmodelseriesconnect simplegraphq statespacerealization systemsmodelstatefeedbackconnect simplify statespacetransform t table tilde traceon tablealignments tildeequal traceoriginal tabledepth tildefullequal traceprint tabledirections tildetilde tracescan tableform timeconstrained trackedsymbols tableheadings timeconstraint tradingchart tablespacing times traditionalform tabview timesby transferfunctioncancel tagbox timeused transferfunctionexpand taggingrules timevalue transferfunctionfactor tagset timezone transferfunctionmodel tagsetdelayed timing transferfunctionpoles tagunset tiny transferfunctionzeros take titsgroupt transformationfunction takewhile toboxes transformationfunctions tally tocharactercode transformationmatrix tan tocontinuoustimemodel transformeddistribution tanh todiscretetimemodel translate targetfunctions toeplitzmatrix translationtransform tautologyq toexpression transparent temporary together transpose texform toggler treeform text togglerbar treegraph textalignment tokenwords treegraphq textcell tolerance treeplot textclipboardtype tolowercase trendstyle textdata tonumberfield trianglewave textjustification tooltip triangulardistribution textpacket tooltipdelay trig textrecognize top trigexpand texture tophattransform trigfactor texturecoordinatefunction topologicalsort trigfactorlist texturecoordinatescaling toradicals trigger therefore torules trigreduce thick tostring trigtoexp thickness total trimmedmean thin totalvariationfilter true thinning totalwidth trueq thompsongroupth touppercase truncateddistribution thread tr ttest threejsymbol trace tube threshold traceabove tukeylambdadistribution through tracebackward tuples throw tracedepth turangraph thumbnail tracedialog turingmachine ticks traceforward ticksstyle traceoff u uncompress uniformsumdistribution uparrowbar undefined uninstall uparrowdownarrow underbar union update underflow unionplus updateinterval underlined unique updownarrow underoverscript unitbox upequilibrium underoverscriptbox unitize uppercaseq underscript unitstep upperleftarrow underscriptbox unittriangle upperrightarrow undirectededge unitvector uppertriangularize undirectedgraph unprotect upset undirectedgraphq unsameq upsetdelayed unequal unsavedvariables upteearrow unevaluated unset upvalues uniformdistribution unsetshared usingfrontend uniformgraphdistribution uparrow v validationlength vertexadd vertexreplace valueq vertexcolors vertexshape variables vertexcomponent vertexshapefunction variance vertexcoordinaterules vertexsize varianceequivalencetest vertexcoordinates vertexstyle varianceestimatorfunction vertexcount vertextexturecoordinates variancetest vertexcoverq vertexweight vectorangle vertexdegree verticalbar vectorcolorfunction vertexdelete verticalseparator vectorcolorfunctionscaling vertexeccentricity verticalslider vectordensityplot vertexincomponent verticaltilde vectorplot vertexindegree viewangle vectorplot3d vertexindex viewcenter vectorpoints vertexlabeling viewmatrix vectorq vertexlabels viewpoint vectorscale vertexlist viewrange vectorstyle vertexnormals viewvector vee vertexoutcomponent viewvertical verbatim vertexoutdegree visible verifyconvergence vertexq vonmisesdistribution verifytestassumptions vertexrenderingfunction w waitall weierstrasshalfperiods windowfloating waitnext weierstrassinvariants windowframe wakebydistribution weierstrassp windowmargins walleniushypergeometricdistribution weierstrasspprime windowmovable waringyuledistribution weierstrasssigma windowopacity watershedcomponents weierstrasszeta windowsize watsonusquaretest weightedadjacencygraph windowstatusarea wattsstrogatzgraphdistribution weightedadjacencymatrix windowtitle waveletbestbasis weightedgraphq windowtoolbars waveletfiltercoefficients weights with waveletimageplot wheelgraph wolframalpha waveletlistplot which word waveletmapindexed while wordboundary waveletmatrixplot white wordcharacter waveletphi whitespace worddata waveletpsi whitespacecharacter wordsearch waveletscale whittakerm wordseparators waveletscalogram whittakerw workingprecision waveletthreshold wienerfilter write weatherdata wignerd writestring webere wignersemicircledistribution wronskian wedge windowclickselect weibulldistribution windowelements x xmlelement xnor xmlobject xor y yellow yuledissimilarity z zerniker zetazero ztransform zerotest zipfdistribution zeta ztest $ $aborted $inspector $outputsizelimit $assertfunction $installationdirectory $packages $assumptions $iterationlimit $parentlink $basedirectory $kernelcount $parentprocessid $batchinput $kernelid $path $batchoutput $language $pathnameseparator $byteordering $librarypath $performancegoal $canceled $licenseexpirationdate $post $characterencoding $licenseid $pre $characterencodings $licenseserver $preprint $commandline $line $preread $compilationtarget $linked $processid $configuredkernels $machineaddresses $processorcount $context $machinedomains $processortype $contextpath $machineepsilon $recursionlimit $controlactivesetting $machineid $releasenumber $creationdate $machinename $rootdirectory $currentlink $machineprecision $scheduledtask $datestringformat $machinetype $scriptcommandline $defaultimagingdevice $maxextraprecision $sessionid $display $maxmachinenumber $sharedfunctions $displayfunction $maxnumber $sharedvariables $distributedcontexts $maxpiecewisecases $sounddisplayfunction $dynamicevaluation $maxprecision $syntaxhandler $echo $maxrootdegree $system $epilog $messagegroups $systemcharacterencoding $exportformats $messagelist $systemid $failed $messagepreprint $systemwordlength $frontend $messages $temporarydirectory $frontendsession $minmachinenumber $timedout $geolocation $minnumber $timeunit $historylength $minprecision $timezone $homedirectory $modulenumber $urgent $ignoreeof $newmessage $userbasedirectory $imagingdevices $newsymbol $userdocumentsdirectory $importformats $notebooks $username $initialdirectory $numbermarks $version $input $operatingsystem $versionnumber $inputfilename $output"
+
+regex_'5ba'2dzA'2dZ'5f0'2d9'5d'2b'5c'5f = compileRegex True "[a-zA-Z_0-9]+\\_"
+regex_'28'5c'2d'5c'3e'7c'5c'2f'5c'2e'29 = compileRegex True "(\\-\\>|\\/\\.)"
+regex_'28'3a'3d'7c'3d'29 = compileRegex True "(:=|=)"
+
+parseRules ("Mathematica","Normal") =
+  (((pKeyword " \n\t.():!+,<=>&*/;?[]^{|}~\\" list_functions >>= withAttribute FunctionTok))
+   <|>
+   ((pInt >>= withAttribute DecValTok))
+   <|>
+   ((pFloat >>= withAttribute FloatTok))
+   <|>
+   ((pRegExpr regex_'5ba'2dzA'2dZ'5f0'2d9'5d'2b'5c'5f >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'5c'2d'5c'3e'7c'5c'2f'5c'2e'29 >>= withAttribute NormalTok))
+   <|>
+   ((pAnyChar "+*/%\\|-^" >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'28'3a'3d'7c'3d'29 >>= withAttribute NormalTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Mathematica","Normal")) >> pDefault >>= withAttribute NormalTok))
+
+
+parseRules x = parseRules ("Mathematica","Normal") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Maxima.hs b/Text/Highlighting/Kate/Syntax/Maxima.hs
--- a/Text/Highlighting/Kate/Syntax/Maxima.hs
+++ b/Text/Highlighting/Kate/Syntax/Maxima.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file maxima.xml, version 0.16, by Alexey Beshenov <al@beshenov.ru> -}
+   highlighting file maxima.xml, version 0.17, by Alexey Beshenov <al@beshenov.ru> -}
 
 module Text.Highlighting.Kate.Syntax.Maxima
           (highlight, parseExpression, syntaxName, syntaxExtensions)
@@ -77,7 +77,7 @@
    <|>
    ((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("Maxima","String"))
    <|>
-   ((pDetect2Chars False '/' '*' >>= withAttribute NormalTok) >>~ pushContext ("Maxima","Comment"))
+   ((pDetect2Chars False '/' '*' >>= withAttribute CommentTok) >>~ pushContext ("Maxima","Comment"))
    <|>
    ((pRegExpr regex_'5ba'2dzA'2dZ'5f'5d'5ba'2dzA'2dZ0'2d9'25'5f'5d'2a >>= withAttribute NormalTok))
    <|>
@@ -89,7 +89,7 @@
    <|>
    ((pRegExpr regex_'5b'2d'2b'5d'3f'5cd'2b >>= withAttribute DecValTok))
    <|>
-   ((pDetectChar False '\'' >>= withAttribute NormalTok))
+   ((pDetectChar False '\'' >>= withAttribute CommentTok))
    <|>
    (currentContext >>= \x -> guard (x == ("Maxima","Normal Text")) >> pDefault >>= withAttribute NormalTok))
 
@@ -101,11 +101,11 @@
 parseRules ("Maxima","Comment") =
   (((pKeyword " \n\t.():!+,-<=>&*/;?[]^{|}~\\@#" list_SpecialComment >>= withAttribute NormalTok))
    <|>
-   ((pDetectSpaces >>= withAttribute NormalTok))
+   ((pDetectSpaces >>= withAttribute CommentTok))
    <|>
-   ((pDetect2Chars False '*' '/' >>= withAttribute NormalTok) >>~ (popContext))
+   ((pDetect2Chars False '*' '/' >>= withAttribute CommentTok) >>~ (popContext))
    <|>
-   (currentContext >>= \x -> guard (x == ("Maxima","Comment")) >> pDefault >>= withAttribute NormalTok))
+   (currentContext >>= \x -> guard (x == ("Maxima","Comment")) >> pDefault >>= withAttribute CommentTok))
 
 
 parseRules x = parseRules ("Maxima","Normal Text") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Mediawiki.hs b/Text/Highlighting/Kate/Syntax/Mediawiki.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Mediawiki.hs
@@ -0,0 +1,1156 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file mediawiki.xml, version 1.11, by  -}
+
+module Text.Highlighting.Kate.Syntax.Mediawiki
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import qualified Text.Highlighting.Kate.Syntax.Javascript
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "MediaWiki"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.mediawiki"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("MediaWiki","normal")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = False, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("MediaWiki","normal") -> return ()
+      ("MediaWiki","TableHeader") -> pushContext ("MediaWiki","TableContent") >> return ()
+      ("MediaWiki","TableContent") -> return ()
+      ("MediaWiki","Section5") -> (popContext) >> pEndLine
+      ("MediaWiki","Section4") -> (popContext) >> pEndLine
+      ("MediaWiki","Section3") -> (popContext) >> pEndLine
+      ("MediaWiki","Section2") -> (popContext) >> pEndLine
+      ("MediaWiki","comment") -> return ()
+      ("MediaWiki","DelimitedURL") -> return ()
+      ("MediaWiki","DelimitedUrlLink") -> return ()
+      ("MediaWiki","LooseURL") -> (popContext) >> pEndLine
+      ("MediaWiki","LooseURLWithinTemplate") -> (popContext) >> pEndLine
+      ("MediaWiki","URLTag") -> return ()
+      ("MediaWiki","WikiLinkWithoutDescriptionRules") -> return ()
+      ("MediaWiki","WikiLinkWithDescriptionRules") -> return ()
+      ("MediaWiki","WikiLink") -> return ()
+      ("MediaWiki","WikiLinkBoldWithDescription") -> return ()
+      ("MediaWiki","WikiLinkBoldWithoutDescription") -> return ()
+      ("MediaWiki","WikiLinkItalicWithDescription") -> return ()
+      ("MediaWiki","WikiLinkItalicWithoutDescription") -> return ()
+      ("MediaWiki","WikiLinkUnderlinedWithDescription") -> return ()
+      ("MediaWiki","WikiLinkUnderlinedWithoutDescription") -> return ()
+      ("MediaWiki","WikiLinkBoldItalicWithDescription") -> return ()
+      ("MediaWiki","WikiLinkBoldItalicWithoutDescription") -> return ()
+      ("MediaWiki","WikiLinkBoldUnderlinedWithDescription") -> return ()
+      ("MediaWiki","WikiLinkBoldUnderlinedWithoutDescription") -> return ()
+      ("MediaWiki","WikiLinkItalicUnderlinedWithDescription") -> return ()
+      ("MediaWiki","WikiLinkItalicUnderlinedWithoutDescription") -> return ()
+      ("MediaWiki","WikiLinkBoldItalicUnderlinedWithDescription") -> return ()
+      ("MediaWiki","WikiLinkBoldItalicUnderlinedWithoutDescription") -> return ()
+      ("MediaWiki","WikiLinkDescriptionRules") -> return ()
+      ("MediaWiki","WikiLinkDescription") -> return ()
+      ("MediaWiki","WikiLinkDescriptionBold") -> return ()
+      ("MediaWiki","WikiLinkDescriptionItalic") -> return ()
+      ("MediaWiki","WikiLinkDescriptionUnderlined") -> return ()
+      ("MediaWiki","WikiLinkDescriptionBoldItalic") -> return ()
+      ("MediaWiki","WikiLinkDescriptionBoldUnderlined") -> return ()
+      ("MediaWiki","WikiLinkDescriptionItalicUnderlined") -> return ()
+      ("MediaWiki","WikiLinkDescriptionBoldItalicUnderlined") -> return ()
+      ("MediaWiki","Template") -> return ()
+      ("MediaWiki","TemplateParameterSlot") -> return ()
+      ("MediaWiki","TemplateParameterSlotEqual") -> return ()
+      ("MediaWiki","TemplateParameterSlotValue") -> return ()
+      ("MediaWiki","TemplateParameter") -> return ()
+      ("MediaWiki","NoWiki") -> return ()
+      ("MediaWiki","Unformatted") -> (popContext) >> pEndLine
+      ("MediaWiki","Pre") -> return ()
+      ("MediaWiki","SourceStartTag") -> return ()
+      ("MediaWiki","SyntaxHighlightStartTag") -> return ()
+      ("MediaWiki","UnsupportedLanguageSourceStartTag") -> return ()
+      ("MediaWiki","UnsupportedLanguageSyntaxHighlightStartTag") -> return ()
+      ("MediaWiki","JavaScriptSourceStartTag") -> return ()
+      ("MediaWiki","JavaScriptSyntaxHighlightStartTag") -> return ()
+      ("MediaWiki","UnsupportedLanguageSourceContent") -> return ()
+      ("MediaWiki","UnsupportedLanguageSyntaxHighlightContent") -> return ()
+      ("MediaWiki","JavaScriptSourceContent") -> return ()
+      ("MediaWiki","JavaScriptSyntaxHighlightContent") -> return ()
+      ("MediaWiki","SourceEnd") -> return ()
+      ("MediaWiki","SyntaxHighlightEnd") -> return ()
+      ("MediaWiki","HtmlAttribute") -> return ()
+      ("MediaWiki","HtmlValue") -> return ()
+      ("MediaWiki","ValueWithDoubleQuotes") -> return ()
+      ("MediaWiki","ValueWithSingleQuotes") -> return ()
+      ("MediaWiki","DefinitionListHeader") -> (popContext) >> pEndLine
+      ("MediaWiki","Bold") -> (popContext) >> pEndLine
+      ("MediaWiki","Italic") -> (popContext) >> pEndLine
+      ("MediaWiki","Underlined") -> return ()
+      ("MediaWiki","BoldItalic") -> (popContext) >> pEndLine
+      ("MediaWiki","ItalicBold") -> (popContext) >> pEndLine
+      ("MediaWiki","BoldUnderlined") -> (popContext) >> pEndLine
+      ("MediaWiki","UnderlinedBold") -> (popContext) >> pEndLine
+      ("MediaWiki","ItalicUnderlined") -> (popContext) >> pEndLine
+      ("MediaWiki","UnderlinedItalic") -> (popContext) >> pEndLine
+      ("MediaWiki","BoldItalicUnderlined") -> (popContext) >> pEndLine
+      ("MediaWiki","BoldUnderlinedItalic") -> (popContext) >> pEndLine
+      ("MediaWiki","ItalicUnderlinedBold") -> (popContext) >> pEndLine
+      ("MediaWiki","FindHtmlEntities") -> return ()
+      ("MediaWiki","FindHtmlStartTagAttributes") -> return ()
+      ("MediaWiki","FindListItem") -> return ()
+      ("MediaWiki","FindSyntaxHighlightingHtmlElement") -> return ()
+      ("MediaWiki","FindTable") -> return ()
+      ("MediaWiki","FindTemplate") -> return ()
+      ("MediaWiki","FindTextDecorations") -> return ()
+      ("MediaWiki","FindTextDecorationsInHeader") -> return ()
+      ("MediaWiki","FindUrl") -> return ()
+      ("MediaWiki","FindUrlWithinTemplate") -> return ()
+      ("MediaWiki","FindWikiLink") -> return ()
+      ("MediaWiki","FindWikiLinkBeingBold") -> return ()
+      ("MediaWiki","FindWikiLinkBeingItalic") -> return ()
+      ("MediaWiki","FindWikiLinkBeingUnderlined") -> return ()
+      ("MediaWiki","FindWikiLinkBeingBoldItalic") -> return ()
+      ("MediaWiki","FindWikiLinkBeingBoldUnderlined") -> return ()
+      ("MediaWiki","FindWikiLinkBeingItalicUnderlined") -> return ()
+      ("MediaWiki","FindWikiLinkBeingBoldItalicUnderlined") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+
+regex_'5b'3d'5d'7b5'2c5'7d'28'3f'21'3d'29 = compileRegex True "[=]{5,5}(?!=)"
+regex_'5b'3d'5d'7b4'2c4'7d'28'3f'21'3d'29 = compileRegex True "[=]{4,4}(?!=)"
+regex_'5b'3d'5d'7b3'2c3'7d'28'3f'21'3d'29 = compileRegex True "[=]{3,3}(?!=)"
+regex_'5b'3d'5d'7b2'2c2'7d'28'3f'21'3d'29 = compileRegex True "[=]{2,2}(?!=)"
+regex_'5b'7e'5d'7b3'2c4'7d = compileRegex True "[~]{3,4}"
+regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d = compileRegex True "[<][^>]+[>]"
+regex_'5b'5cs'5d = compileRegex True "[\\s]"
+regex_'5b'2d'5d'7b4'2c'7d = compileRegex True "[-]{4,}"
+regex_'3d'7b6'2c'7d_'2a'24 = compileRegex True "={6,} *$"
+regex_'3d'7b5'2c5'7d_'2a'24 = compileRegex True "={5,5} *$"
+regex_'3d'7b1'2c4'7d_'2a'24 = compileRegex True "={1,4} *$"
+regex_'3d'2a'5b'5e'3d'5d'2b'24 = compileRegex True "=*[^=]+$"
+regex_'3d'7b5'2c'7d_'2a'24 = compileRegex True "={5,} *$"
+regex_'3d'7b4'2c4'7d_'2a'24 = compileRegex True "={4,4} *$"
+regex_'3d'7b1'2c3'7d_'2a'24 = compileRegex True "={1,3} *$"
+regex_'3d'7b4'2c'7d_'2a'24 = compileRegex True "={4,} *$"
+regex_'3d'7b3'2c3'7d_'2a'24 = compileRegex True "={3,3} *$"
+regex_'3d'7b1'2c2'7d_'2a'24 = compileRegex True "={1,2} *$"
+regex_'3d'7b3'2c'7d_'2a'24 = compileRegex True "={3,} *$"
+regex_'3d'7b2'2c2'7d_'2a'24 = compileRegex True "={2,2} *$"
+regex_'3d'7b1'2c1'7d_'2a'24 = compileRegex True "={1,1} *$"
+regex_'28http'3a'7chttps'3a'7cftp'3a'7cmailto'3a'29'5b'5e'5d'7c_'5d'2a'28'3f'3d'24'7c'5b'5d'7c'5cs'5d'29 = compileRegex True "(http:|https:|ftp:|mailto:)[^]| ]*(?=$|[]|\\s])"
+regex_'3cu_'2a'3e = compileRegex True "<u *>"
+regex_'5b'5e'7b'7d'7c'3d'5d'2b'28'3f'3d'5b'3d'5d'29 = compileRegex True "[^{}|=]+(?=[=])"
+regex_'3c'21'2d'2d'5b'5e'2d'5d'2a'2d'2d'3e = compileRegex True "<!--[^-]*-->"
+regex_'28'5e'7c'5cs'2b'29lang'5c'3d'28'22javascript'22'7c'27javascript'27'29 = compileRegex True "(^|\\s+)lang\\=(\"javascript\"|'javascript')"
+regex_'5cS = compileRegex True "\\S"
+regex_'3c'2fu_'2a'3e = compileRegex True "</u *>"
+regex_'26'28'23'5b0'2d9'5d'2b'7c'23'5bxX'5d'5b0'2d9A'2dFa'2df'5d'2b'7c'28'3f'21'5b0'2d9'5d'29'5b'5cw'5f'3a'5d'5b'5cw'2e'3a'5f'2d'5d'2a'29'3b = compileRegex True "&(#[0-9]+|#[xX][0-9A-Fa-f]+|(?![0-9])[\\w_:][\\w.:_-]*);"
+regex_'28'3f'21'5b0'2d9'5d'29'5b'5cw'5f'3a'5d'5b'5cw'2e'3a'5f'2d'5d'2a = compileRegex True "(?![0-9])[\\w_:][\\w.:_-]*"
+regex_'5cs'2b'28'3f'21'5b0'2d9'5d'29'5b'5cw'5f'3a'5d'5b'5cw'2e'3a'5f'2d'5d'2a = compileRegex True "\\s+(?![0-9])[\\w_:][\\w.:_-]*"
+regex_'5b'2a'23'3b'3a'5cs'5d'2a'5b'2a'23'3a'5d'2b = compileRegex True "[*#;:\\s]*[*#:]+"
+regex_'3csource'28'3f'3d'5cs'29 = compileRegex True "<source(?=\\s)"
+regex_'3csyntaxhighlight'28'3f'3d'5cs'29 = compileRegex True "<syntaxhighlight(?=\\s)"
+regex_'5c'5b'28http'3a'7chttps'3a'7cftp'3a'7cmailto'3a'29'5b'5e'5d'7c_'5d'2a'28'3f'3d'24'7c'5b'5d'7c'5cs'5d'29 = compileRegex True "\\[(http:|https:|ftp:|mailto:)[^]| ]*(?=$|[]|\\s])"
+regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'7c'5b'5e'5d'5d'2a'5c'5d'5c'5d = compileRegex True "\\[\\[[^]|]*\\|[^]]*\\]\\]"
+regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'5d'5c'5d = compileRegex True "\\[\\[[^]|]*\\]\\]"
+
+parseRules ("MediaWiki","normal") =
+  (((pString False "<!--" >>= withAttribute CommentTok) >>~ pushContext ("MediaWiki","comment"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'3d'5d'7b5'2c5'7d'28'3f'21'3d'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Section5"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'3d'5d'7b4'2c4'7d'28'3f'21'3d'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Section4"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'3d'5d'7b3'2c3'7d'28'3f'21'3d'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Section3"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'3d'5d'7b2'2c2'7d'28'3f'21'3d'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Section2"))
+   <|>
+   ((pRegExpr regex_'5b'7e'5d'7b3'2c4'7d >>= withAttribute DecValTok))
+   <|>
+   ((pColumn 0 >> pDetectChar False ';' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","DefinitionListHeader"))
+   <|>
+   ((parseRules ("MediaWiki","FindListItem")))
+   <|>
+   ((parseRules ("MediaWiki","FindUrl")))
+   <|>
+   ((parseRules ("MediaWiki","FindTextDecorations")))
+   <|>
+   ((parseRules ("MediaWiki","FindTable")))
+   <|>
+   ((pString False "{{{" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameter"))
+   <|>
+   ((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLink")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((pString False "<nowiki>" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","NoWiki"))
+   <|>
+   ((pString False "<pre>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Pre"))
+   <|>
+   ((parseRules ("MediaWiki","FindSyntaxHighlightingHtmlElement")))
+   <|>
+   ((pRegExpr regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d >>= withAttribute KeywordTok))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'5cs'5d >>= withAttribute NormalTok) >>~ pushContext ("MediaWiki","Unformatted"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","normal")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","TableHeader") =
+  (((pDetect2Chars False '{' '|' >>= withAttribute DecValTok))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlStartTagAttributes")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","TableHeader")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","TableContent") =
+  (((pString False "<!--" >>= withAttribute CommentTok) >>~ pushContext ("MediaWiki","comment"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'3d'5d'7b5'2c5'7d'28'3f'21'3d'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Section5"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'3d'5d'7b4'2c4'7d'28'3f'21'3d'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Section4"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'3d'5d'7b3'2c3'7d'28'3f'21'3d'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Section3"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'3d'5d'7b2'2c2'7d'28'3f'21'3d'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Section2"))
+   <|>
+   ((pColumn 0 >> pDetectChar False ';' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","DefinitionListHeader"))
+   <|>
+   ((parseRules ("MediaWiki","FindListItem")))
+   <|>
+   ((parseRules ("MediaWiki","FindUrl")))
+   <|>
+   ((parseRules ("MediaWiki","FindTextDecorations")))
+   <|>
+   ((parseRules ("MediaWiki","FindTable")))
+   <|>
+   ((pColumn 0 >> pDetect2Chars False '|' '}' >>= withAttribute DecValTok) >>~ (popContext >> popContext))
+   <|>
+   ((pColumn 0 >> pDetect2Chars False '|' '-' >>= withAttribute DecValTok))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok))
+   <|>
+   ((pString False "{{{" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameter"))
+   <|>
+   ((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLink")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((pString False "<nowiki>" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","NoWiki"))
+   <|>
+   ((pString False "<pre>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Pre"))
+   <|>
+   ((parseRules ("MediaWiki","FindSyntaxHighlightingHtmlElement")))
+   <|>
+   ((pRegExpr regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d >>= withAttribute KeywordTok))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5b'5cs'5d >>= withAttribute NormalTok) >>~ pushContext ("MediaWiki","Unformatted"))
+   <|>
+   ((pRegExpr regex_'5b'7e'5d'7b3'2c4'7d >>= withAttribute DecValTok))
+   <|>
+   ((pRegExpr regex_'5b'2d'5d'7b4'2c'7d >>= withAttribute DecValTok))
+   <|>
+   ((pColumn 0 >> pDetectChar False '!' >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","TableContent")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","Section5") =
+  (((pString False "<!--" >>= withAttribute CommentTok) >>~ pushContext ("MediaWiki","comment"))
+   <|>
+   ((pRegExpr regex_'5b'7e'5d'7b3'2c4'7d >>= withAttribute DecValTok))
+   <|>
+   ((parseRules ("MediaWiki","FindUrl")))
+   <|>
+   ((parseRules ("MediaWiki","FindTextDecorationsInHeader")))
+   <|>
+   ((pString False "{{{" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameter"))
+   <|>
+   ((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLink")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((pString False "<nowiki>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","NoWiki"))
+   <|>
+   ((pString False "<pre>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Pre"))
+   <|>
+   ((parseRules ("MediaWiki","FindSyntaxHighlightingHtmlElement")))
+   <|>
+   ((pRegExpr regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'3d'7b6'2c'7d_'2a'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'7b5'2c5'7d_'2a'24 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'7b1'2c4'7d_'2a'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'7b1'2c4'7d_'2a'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'2a'5b'5e'3d'5d'2b'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","Section5")) >> pDefault >>= withAttribute KeywordTok))
+
+parseRules ("MediaWiki","Section4") =
+  (((pString False "<!--" >>= withAttribute CommentTok) >>~ pushContext ("MediaWiki","comment"))
+   <|>
+   ((pRegExpr regex_'5b'7e'5d'7b3'2c4'7d >>= withAttribute DecValTok))
+   <|>
+   ((parseRules ("MediaWiki","FindUrl")))
+   <|>
+   ((parseRules ("MediaWiki","FindTextDecorationsInHeader")))
+   <|>
+   ((pString False "{{{" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameter"))
+   <|>
+   ((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLink")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((pString False "<nowiki>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","NoWiki"))
+   <|>
+   ((pString False "<pre>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Pre"))
+   <|>
+   ((parseRules ("MediaWiki","FindSyntaxHighlightingHtmlElement")))
+   <|>
+   ((pRegExpr regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'3d'7b5'2c'7d_'2a'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'7b4'2c4'7d_'2a'24 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'7b1'2c3'7d_'2a'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'2a'5b'5e'3d'5d'2b'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","Section4")) >> pDefault >>= withAttribute KeywordTok))
+
+parseRules ("MediaWiki","Section3") =
+  (((pString False "<!--" >>= withAttribute CommentTok) >>~ pushContext ("MediaWiki","comment"))
+   <|>
+   ((pRegExpr regex_'5b'7e'5d'7b3'2c4'7d >>= withAttribute DecValTok))
+   <|>
+   ((parseRules ("MediaWiki","FindUrl")))
+   <|>
+   ((parseRules ("MediaWiki","FindTextDecorationsInHeader")))
+   <|>
+   ((pString False "{{{" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameter"))
+   <|>
+   ((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLink")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((pString False "<nowiki>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","NoWiki"))
+   <|>
+   ((pString False "<pre>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Pre"))
+   <|>
+   ((parseRules ("MediaWiki","FindSyntaxHighlightingHtmlElement")))
+   <|>
+   ((pRegExpr regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'3d'7b4'2c'7d_'2a'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'7b3'2c3'7d_'2a'24 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'7b1'2c2'7d_'2a'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'2a'5b'5e'3d'5d'2b'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","Section3")) >> pDefault >>= withAttribute KeywordTok))
+
+parseRules ("MediaWiki","Section2") =
+  (((pString False "<!--" >>= withAttribute CommentTok) >>~ pushContext ("MediaWiki","comment"))
+   <|>
+   ((pRegExpr regex_'5b'7e'5d'7b3'2c4'7d >>= withAttribute DecValTok))
+   <|>
+   ((parseRules ("MediaWiki","FindUrl")))
+   <|>
+   ((parseRules ("MediaWiki","FindTextDecorationsInHeader")))
+   <|>
+   ((pString False "{{{" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameter"))
+   <|>
+   ((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLink")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((pString False "<nowiki>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","NoWiki"))
+   <|>
+   ((pString False "<pre>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Pre"))
+   <|>
+   ((parseRules ("MediaWiki","FindSyntaxHighlightingHtmlElement")))
+   <|>
+   ((pRegExpr regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'3d'7b3'2c'7d_'2a'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'7b2'2c2'7d_'2a'24 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'7b1'2c1'7d_'2a'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3d'2a'5b'5e'3d'5d'2b'24 >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","Section2")) >> pDefault >>= withAttribute KeywordTok))
+
+parseRules ("MediaWiki","comment") =
+  (((pString False "-->" >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","comment")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("MediaWiki","DelimitedURL") =
+  (((pDetectChar False ']' >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '[' >>= withAttribute DecValTok))
+   <|>
+   ((lookAhead (pRegExpr regex_'28http'3a'7chttps'3a'7cftp'3a'7cmailto'3a'29'5b'5e'5d'7c_'5d'2a'28'3f'3d'24'7c'5b'5d'7c'5cs'5d'29) >> pushContext ("MediaWiki","DelimitedUrlLink") >> currentContext >>= parseRules))
+   <|>
+   ((pDetectChar False ' ' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","URLTag"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","DelimitedURL")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","DelimitedUrlLink") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((lookAhead (pDetectChar False ' ') >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pDetectChar False ']') >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","DelimitedUrlLink")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","LooseURL") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pDetectChar False ' ' >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","LooseURL")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","LooseURLWithinTemplate") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((lookAhead (pDetect2Chars False '}' '}') >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((pDetectChar False ' ' >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","LooseURLWithinTemplate")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","URLTag") =
+  (((parseRules ("MediaWiki","FindTextDecorations")))
+   <|>
+   ((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((lookAhead (pDetectChar False ']') >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","URLTag")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkWithoutDescriptionRules") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((pDetect2Chars False '[' '[' >>= withAttribute DecValTok))
+   <|>
+   ((pDetect2Chars False ']' ']' >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkWithoutDescriptionRules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkWithDescriptionRules") =
+  (((parseRules ("MediaWiki","WikiLinkWithoutDescriptionRules")))
+   <|>
+   ((pDetectChar False '#' >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkWithDescriptionRules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLink") =
+  (((parseRules ("MediaWiki","WikiLinkWithDescriptionRules")))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","WikiLinkDescription"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLink")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkBoldWithDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithDescriptionRules")))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","WikiLinkDescriptionBold"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkBoldWithDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkBoldWithoutDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithoutDescriptionRules")))
+   <|>
+   ((pDetectChar False '#' >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkBoldWithoutDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkItalicWithDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithDescriptionRules")))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","WikiLinkDescriptionItalic"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkItalicWithDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkItalicWithoutDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithoutDescriptionRules")))
+   <|>
+   ((pDetectChar False '#' >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkItalicWithoutDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkUnderlinedWithDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithDescriptionRules")))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","WikiLinkDescriptionUnderlined"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkUnderlinedWithDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkUnderlinedWithoutDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithoutDescriptionRules")))
+   <|>
+   ((pDetectChar False '#' >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkUnderlinedWithoutDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkBoldItalicWithDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithDescriptionRules")))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","WikiLinkDescriptionBoldItalic"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkBoldItalicWithDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkBoldItalicWithoutDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithoutDescriptionRules")))
+   <|>
+   ((pDetectChar False '#' >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkBoldItalicWithoutDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkBoldUnderlinedWithDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithDescriptionRules")))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","WikiLinkDescriptionBoldUnderlined"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkBoldUnderlinedWithDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkBoldUnderlinedWithoutDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithoutDescriptionRules")))
+   <|>
+   ((pDetectChar False '#' >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkBoldUnderlinedWithoutDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkItalicUnderlinedWithDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithDescriptionRules")))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","WikiLinkDescriptionItalicUnderlined"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkItalicUnderlinedWithDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkItalicUnderlinedWithoutDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithoutDescriptionRules")))
+   <|>
+   ((pDetectChar False '#' >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkItalicUnderlinedWithoutDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkBoldItalicUnderlinedWithDescription") =
+  (((parseRules ("MediaWiki","WikiLinkWithDescriptionRules")))
+   <|>
+   ((pDetectChar False '|' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","WikiLinkDescriptionBoldItalicUnderlined"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkBoldItalicUnderlinedWithDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkBoldItalicUnderlinedWithoutDescription") =
+  (((pDetectChar False '#' >>= withAttribute DecValTok))
+   <|>
+   ((parseRules ("MediaWiki","WikiLinkWithoutDescriptionRules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkBoldItalicUnderlinedWithoutDescription")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","WikiLinkDescriptionRules") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((lookAhead (pDetect2Chars False ']' ']') >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkDescriptionRules")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkDescription") =
+  (((parseRules ("MediaWiki","WikiLinkDescriptionRules")))
+   <|>
+   ((parseRules ("MediaWiki","FindTextDecorations")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkDescription")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkDescriptionBold") =
+  (((parseRules ("MediaWiki","WikiLinkDescriptionRules")))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","BoldItalic"))
+   <|>
+   ((pRegExpr regex_'3cu_'2a'3e >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","BoldUnderlined"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkDescriptionBold")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkDescriptionItalic") =
+  (((parseRules ("MediaWiki","WikiLinkDescriptionRules")))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","ItalicBold"))
+   <|>
+   ((pRegExpr regex_'3cu_'2a'3e >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","ItalicUnderlined"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkDescriptionItalic")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkDescriptionUnderlined") =
+  (((parseRules ("MediaWiki","WikiLinkDescriptionRules")))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","UnderlinedBold"))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","UnderlinedItalic"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkDescriptionUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkDescriptionBoldItalic") =
+  (((parseRules ("MediaWiki","WikiLinkDescriptionRules")))
+   <|>
+   ((pRegExpr regex_'3cu_'2a'3e >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","BoldItalicUnderlined"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkDescriptionBoldItalic")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkDescriptionBoldUnderlined") =
+  (((parseRules ("MediaWiki","WikiLinkDescriptionRules")))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","BoldUnderlinedItalic"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkDescriptionBoldUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkDescriptionItalicUnderlined") =
+  (((parseRules ("MediaWiki","WikiLinkDescriptionRules")))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","ItalicUnderlinedBold"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkDescriptionItalicUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","WikiLinkDescriptionBoldItalicUnderlined") =
+  (((parseRules ("MediaWiki","WikiLinkDescriptionRules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","WikiLinkDescriptionBoldItalicUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","Template") =
+  (((pString False "|" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameterSlot"))
+   <|>
+   ((pDetect2Chars False '}' '}' >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","Template")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("MediaWiki","TemplateParameterSlot") =
+  (((lookAhead (pDetect2Chars False '}' '}') >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((pString False "<!--" >>= withAttribute CommentTok) >>~ pushContext ("MediaWiki","comment"))
+   <|>
+   ((pRegExpr regex_'5b'7e'5d'7b3'2c4'7d >>= withAttribute DecValTok))
+   <|>
+   ((parseRules ("MediaWiki","FindListItem")))
+   <|>
+   ((parseRules ("MediaWiki","FindUrlWithinTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindTextDecorations")))
+   <|>
+   ((pString False "{{{" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameter"))
+   <|>
+   ((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLink")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((pString False "<nowiki>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","NoWiki"))
+   <|>
+   ((pString False "<pre>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Pre"))
+   <|>
+   ((parseRules ("MediaWiki","FindSyntaxHighlightingHtmlElement")))
+   <|>
+   ((pRegExpr regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d >>= withAttribute KeywordTok))
+   <|>
+   ((lookAhead (pString False "|") >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((pRegExpr regex_'5b'5e'7b'7d'7c'3d'5d'2b'28'3f'3d'5b'3d'5d'29 >>= withAttribute NormalTok) >>~ pushContext ("MediaWiki","TemplateParameterSlotEqual"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","TemplateParameterSlot")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","TemplateParameterSlotEqual") =
+  (((lookAhead (pDetect2Chars False '}' '}') >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pString False "|") >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((pString False "=" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameterSlotValue"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","TemplateParameterSlotEqual")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","TemplateParameterSlotValue") =
+  (((pString False "<!--" >>= withAttribute CommentTok) >>~ pushContext ("MediaWiki","comment"))
+   <|>
+   ((pRegExpr regex_'5b'7e'5d'7b3'2c4'7d >>= withAttribute DecValTok))
+   <|>
+   ((parseRules ("MediaWiki","FindListItem")))
+   <|>
+   ((parseRules ("MediaWiki","FindUrlWithinTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindTextDecorations")))
+   <|>
+   ((pString False "{{{" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","TemplateParameter"))
+   <|>
+   ((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLink")))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   ((pString False "<nowiki>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","NoWiki"))
+   <|>
+   ((pString False "<pre>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Pre"))
+   <|>
+   ((parseRules ("MediaWiki","FindSyntaxHighlightingHtmlElement")))
+   <|>
+   ((pRegExpr regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d >>= withAttribute KeywordTok))
+   <|>
+   ((lookAhead (pDetect2Chars False '}' '}') >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pString False "|") >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","TemplateParameterSlotValue")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","TemplateParameter") =
+  (((pString False "}}}" >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","TemplateParameter")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","NoWiki") =
+  (((pRegExpr regex_'3c'21'2d'2d'5b'5e'2d'5d'2a'2d'2d'3e >>= withAttribute NormalTok))
+   <|>
+   ((pString False "</nowiki>" >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5b'3c'5d'5b'5e'3e'5d'2b'5b'3e'5d >>= withAttribute KeywordTok))
+   <|>
+   ((pString False "<pre>" >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Pre"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","NoWiki")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","Unformatted") =
+  (currentContext >>= \x -> guard (x == ("MediaWiki","Unformatted")) >> pDefault >>= withAttribute NormalTok)
+
+parseRules ("MediaWiki","Pre") =
+  (((pString False "</pre>" >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","Pre")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","SourceStartTag") =
+  (((lookAhead (pRegExpr regex_'28'5e'7c'5cs'2b'29lang'5c'3d'28'22javascript'22'7c'27javascript'27'29) >> pushContext ("MediaWiki","JavaScriptSourceStartTag") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pDetectChar False '>') >> pushContext ("MediaWiki","UnsupportedLanguageSourceStartTag") >> currentContext >>= parseRules))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlStartTagAttributes")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","SourceStartTag")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","SyntaxHighlightStartTag") =
+  (((lookAhead (pRegExpr regex_'28'5e'7c'5cs'2b'29lang'5c'3d'28'22javascript'22'7c'27javascript'27'29) >> pushContext ("MediaWiki","JavaScriptSyntaxHighlightStartTag") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pDetectChar False '>') >> pushContext ("MediaWiki","UnsupportedLanguageSyntaxHighlightStartTag") >> currentContext >>= parseRules))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlStartTagAttributes")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","SyntaxHighlightStartTag")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","UnsupportedLanguageSourceStartTag") =
+  (((pDetectChar False '>' >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","UnsupportedLanguageSourceContent"))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlStartTagAttributes")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","UnsupportedLanguageSourceStartTag")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","UnsupportedLanguageSyntaxHighlightStartTag") =
+  (((pDetectChar False '>' >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","UnsupportedLanguageSyntaxHighlightContent"))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlStartTagAttributes")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","UnsupportedLanguageSyntaxHighlightStartTag")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","JavaScriptSourceStartTag") =
+  (((pDetectChar False '>' >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","JavaScriptSourceContent"))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlStartTagAttributes")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","JavaScriptSourceStartTag")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","JavaScriptSyntaxHighlightStartTag") =
+  (((pDetectChar False '>' >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","JavaScriptSyntaxHighlightContent"))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlStartTagAttributes")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","JavaScriptSyntaxHighlightStartTag")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","UnsupportedLanguageSourceContent") =
+  (((parseRules ("MediaWiki","SourceEnd")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","UnsupportedLanguageSourceContent")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","UnsupportedLanguageSyntaxHighlightContent") =
+  (((parseRules ("MediaWiki","SyntaxHighlightEnd")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","UnsupportedLanguageSyntaxHighlightContent")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","JavaScriptSourceContent") =
+  (((parseRules ("MediaWiki","SourceEnd")))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Javascript.parseExpression (Just ("JavaScript","Normal"))))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","JavaScriptSourceContent")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","JavaScriptSyntaxHighlightContent") =
+  (((pString False "</syntaxhighlight>" >>= withAttribute KeywordTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   ((parseRules ("MediaWiki","SyntaxHighlightEnd")))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Javascript.parseExpression (Just ("JavaScript","Normal"))))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","JavaScriptSyntaxHighlightContent")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","SourceEnd") =
+  (((pString False "</source>" >>= withAttribute KeywordTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","SourceEnd")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","SyntaxHighlightEnd") =
+  (((pString False "</syntaxhighlight>" >>= withAttribute KeywordTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","SyntaxHighlightEnd")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","HtmlAttribute") =
+  (((pDetectChar False '=' >>= withAttribute OtherTok) >>~ pushContext ("MediaWiki","HtmlValue"))
+   <|>
+   ((pRegExpr regex_'5cS >>= withAttribute ErrorTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","HtmlAttribute")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","HtmlValue") =
+  (((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("MediaWiki","ValueWithDoubleQuotes"))
+   <|>
+   ((pDetectChar False '\'' >>= withAttribute StringTok) >>~ pushContext ("MediaWiki","ValueWithSingleQuotes"))
+   <|>
+   ((pRegExpr regex_'5cS >>= withAttribute ErrorTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","HtmlValue")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","ValueWithDoubleQuotes") =
+  (((pDetectChar False '"' >>= withAttribute StringTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","ValueWithDoubleQuotes")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("MediaWiki","ValueWithSingleQuotes") =
+  (((pDetectChar False '\'' >>= withAttribute StringTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   ((parseRules ("MediaWiki","FindHtmlEntities")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","ValueWithSingleQuotes")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("MediaWiki","DefinitionListHeader") =
+  (((pDetectChar False ':' >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","DefinitionListHeader")) >> pDefault >>= withAttribute KeywordTok))
+
+parseRules ("MediaWiki","Bold") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","BoldItalic"))
+   <|>
+   ((pRegExpr regex_'3cu_'2a'3e >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","BoldUnderlined"))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingBold")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","Bold")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","Italic") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","ItalicBold"))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3cu_'2a'3e >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","ItalicUnderlined"))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingItalic")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","Italic")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","Underlined") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","UnderlinedBold"))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","UnderlinedItalic"))
+   <|>
+   ((pRegExpr regex_'3c'2fu_'2a'3e >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingUnderlined")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","Underlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","BoldItalic") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3cu_'2a'3e >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","BoldItalicUnderlined"))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingBoldItalic")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","BoldItalic")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","ItalicBold") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'3cu_'2a'3e >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","BoldItalicUnderlined"))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingBoldItalic")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","ItalicBold")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","BoldUnderlined") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pRegExpr regex_'3c'2fu_'2a'3e >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","BoldUnderlinedItalic"))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingBoldUnderlined")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","BoldUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","UnderlinedBold") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","BoldUnderlinedItalic"))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingBoldUnderlined")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","UnderlinedBold")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","ItalicUnderlined") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pRegExpr regex_'3c'2fu_'2a'3e >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","ItalicUnderlinedBold"))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingItalicUnderlined")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","ItalicUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","UnderlinedItalic") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","ItalicUnderlinedBold"))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingItalicUnderlined")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","UnderlinedItalic")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","BoldItalicUnderlined") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pRegExpr regex_'3c'2fu_'2a'3e >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingBoldItalicUnderlined")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","BoldItalicUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","BoldUnderlinedItalic") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingBoldItalicUnderlined")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","BoldUnderlinedItalic")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","ItalicUnderlinedBold") =
+  (((parseRules ("MediaWiki","FindTemplate")))
+   <|>
+   ((pString False "'''" >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   ((parseRules ("MediaWiki","FindWikiLinkBeingBoldItalicUnderlined")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","ItalicUnderlinedBold")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindHtmlEntities") =
+  (((pRegExpr regex_'26'28'23'5b0'2d9'5d'2b'7c'23'5bxX'5d'5b0'2d9A'2dFa'2df'5d'2b'7c'28'3f'21'5b0'2d9'5d'29'5b'5cw'5f'3a'5d'5b'5cw'2e'3a'5f'2d'5d'2a'29'3b >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindHtmlEntities")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindHtmlStartTagAttributes") =
+  (((pColumn 0 >> pRegExpr regex_'28'3f'21'5b0'2d9'5d'29'5b'5cw'5f'3a'5d'5b'5cw'2e'3a'5f'2d'5d'2a >>= withAttribute OtherTok) >>~ pushContext ("MediaWiki","HtmlAttribute"))
+   <|>
+   ((pRegExpr regex_'5cs'2b'28'3f'21'5b0'2d9'5d'29'5b'5cw'5f'3a'5d'5b'5cw'2e'3a'5f'2d'5d'2a >>= withAttribute OtherTok) >>~ pushContext ("MediaWiki","HtmlAttribute"))
+   <|>
+   ((pRegExpr regex_'5cS >>= withAttribute ErrorTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindHtmlStartTagAttributes")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindListItem") =
+  (((pColumn 0 >> pRegExpr regex_'5b'2a'23'3b'3a'5cs'5d'2a'5b'2a'23'3a'5d'2b >>= withAttribute DecValTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindListItem")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindSyntaxHighlightingHtmlElement") =
+  (((pRegExpr regex_'3csource'28'3f'3d'5cs'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","SourceStartTag"))
+   <|>
+   ((pRegExpr regex_'3csyntaxhighlight'28'3f'3d'5cs'29 >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","SyntaxHighlightStartTag"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindSyntaxHighlightingHtmlElement")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindTable") =
+  (((pColumn 0 >> lookAhead (pDetect2Chars False '{' '|') >> pushContext ("MediaWiki","TableHeader") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindTable")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindTemplate") =
+  (((pDetect2Chars False '{' '{' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","Template"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindTemplate")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindTextDecorations") =
+  (((pString False "'''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","Bold"))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","Italic"))
+   <|>
+   ((pRegExpr regex_'3cu_'2a'3e >>= withAttribute KeywordTok) >>~ pushContext ("MediaWiki","Underlined"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindTextDecorations")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindTextDecorationsInHeader") =
+  (((pString False "'''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","Bold"))
+   <|>
+   ((pString False "''" >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","BoldItalic"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindTextDecorationsInHeader")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindUrl") =
+  (((lookAhead (pRegExpr regex_'5c'5b'28http'3a'7chttps'3a'7cftp'3a'7cmailto'3a'29'5b'5e'5d'7c_'5d'2a'28'3f'3d'24'7c'5b'5d'7c'5cs'5d'29) >> pushContext ("MediaWiki","DelimitedURL") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28http'3a'7chttps'3a'7cftp'3a'7cmailto'3a'29'5b'5e'5d'7c_'5d'2a'28'3f'3d'24'7c'5b'5d'7c'5cs'5d'29) >> pushContext ("MediaWiki","LooseURL") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindUrl")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindUrlWithinTemplate") =
+  (((lookAhead (pRegExpr regex_'5c'5b'28http'3a'7chttps'3a'7cftp'3a'7cmailto'3a'29'5b'5e'5d'7c_'5d'2a'28'3f'3d'24'7c'5b'5d'7c'5cs'5d'29) >> pushContext ("MediaWiki","DelimitedURL") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28http'3a'7chttps'3a'7cftp'3a'7cmailto'3a'29'5b'5e'5d'7c_'5d'2a'28'3f'3d'24'7c'5b'5d'7c'5cs'5d'29) >> pushContext ("MediaWiki","LooseURLWithinTemplate") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindUrlWithinTemplate")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindWikiLink") =
+  (((pDetect2Chars False '[' '[' >>= withAttribute DecValTok) >>~ pushContext ("MediaWiki","WikiLink"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindWikiLink")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindWikiLinkBeingBold") =
+  (((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'7c'5b'5e'5d'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkBoldWithDescription") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkBoldWithoutDescription") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindWikiLinkBeingBold")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindWikiLinkBeingItalic") =
+  (((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'7c'5b'5e'5d'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkItalicWithDescription") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkItalicWithoutDescription") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindWikiLinkBeingItalic")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindWikiLinkBeingUnderlined") =
+  (((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'7c'5b'5e'5d'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkUnderlinedWithDescription") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkUnderlinedWithoutDescription") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindWikiLinkBeingUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindWikiLinkBeingBoldItalic") =
+  (((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'7c'5b'5e'5d'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkBoldItalicWithDescription") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkBoldItalicWithoutDescription") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindWikiLinkBeingBoldItalic")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindWikiLinkBeingBoldUnderlined") =
+  (((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'7c'5b'5e'5d'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkBoldUnderlinedWithDescription") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkBoldUnderlinedWithoutDescription") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindWikiLinkBeingBoldUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindWikiLinkBeingItalicUnderlined") =
+  (((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'7c'5b'5e'5d'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkItalicUnderlinedWithDescription") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkItalicUnderlinedWithoutDescription") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindWikiLinkBeingItalicUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("MediaWiki","FindWikiLinkBeingBoldItalicUnderlined") =
+  (((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'7c'5b'5e'5d'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkBoldItalicUnderlinedWithDescription") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'5c'5b'5c'5b'5b'5e'5d'7c'5d'2a'5c'5d'5c'5d) >> pushContext ("MediaWiki","WikiLinkBoldItalicUnderlinedWithoutDescription") >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("MediaWiki","FindWikiLinkBeingBoldItalicUnderlined")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("JavaScript", _) = Text.Highlighting.Kate.Syntax.Javascript.parseExpression Nothing
+
+parseRules x = parseRules ("MediaWiki","normal") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Opencl.hs b/Text/Highlighting/Kate/Syntax/Opencl.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Opencl.hs
@@ -0,0 +1,250 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file opencl.xml, version 1.44, by  -}
+
+module Text.Highlighting.Kate.Syntax.Opencl
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import qualified Text.Highlighting.Kate.Syntax.Doxygen
+import qualified Text.Highlighting.Kate.Syntax.Alert
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "OpenCL"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.cl"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("OpenCL","Normal")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("OpenCL","Normal") -> return ()
+      ("OpenCL","String") -> (popContext) >> pEndLine
+      ("OpenCL","Region Marker") -> (popContext) >> pEndLine
+      ("OpenCL","Commentar 1") -> (popContext) >> pEndLine
+      ("OpenCL","Commentar 2") -> return ()
+      ("OpenCL","AfterHash") -> (popContext) >> pEndLine
+      ("OpenCL","Preprocessor") -> (popContext) >> pEndLine
+      ("OpenCL","Define") -> (popContext) >> pEndLine
+      ("OpenCL","Commentar/Preprocessor") -> return ()
+      ("OpenCL","Outscoped") -> return ()
+      ("OpenCL","Outscoped intern") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_keywords = Set.fromList $ words $ "__constant __global __local __private __kernel __read_only __write_only constant global local private kernel read_only write_only break case continue default do else enum for goto if inline return sizeof struct switch typedef union while"
+list_types = Set.fromList $ words $ "bool uchar uchar2 uchar3 uchar4 uchar8 uchar16 char char2 char3 char4 char8 char16 const double double2 double3 double4 double8 double16 event_t float float2 float3 float4 float8 float16 half half2 half3 half4 half8 half16 image1d_t image2d_t image3d_t uint uint2 uint3 uint4 uint8 uint16 int int2 int3 int4 int8 int16 ulong ulong2 ulong3 ulong4 ulong8 ulong16 long long2 long3 long4 long8 long16 restrict sampler_t ushort ushort2 ushort3 ushort4 ushort8 ushort16 short short2 short3 short4 short8 short16 signed static unsigned void volatile"
+
+regex_'23'5cs'2aif'5cs'2b0'5cs'2a'24 = compileRegex True "#\\s*if\\s+0\\s*$"
+regex_'23'5cs'2aif'28'3f'3adef'7cndef'29'3f'28'3f'3d'5cs'2b'5cS'29 = compileRegex True "#\\s*if(?:def|ndef)?(?=\\s+\\S)"
+regex_'23'5cs'2aendif = compileRegex True "#\\s*endif"
+regex_'23'5cs'2adefine'2e'2a'28'28'3f'3d'5c'5c'29'29 = compileRegex True "#\\s*define.*((?=\\\\))"
+regex_'23'5cs'2a'28'3f'3ael'28'3f'3ase'7cif'29'7cinclude'28'3f'3a'5fnext'29'3f'7cdefine'7cundef'7cline'7cerror'7cwarning'7cpragma'29 = compileRegex True "#\\s*(?:el(?:se|if)|include(?:_next)?|define|undef|line|error|warning|pragma)"
+regex_'23'5cs'2b'5b0'2d9'5d'2b = compileRegex True "#\\s+[0-9]+"
+regex_'23'5cs'2aif = compileRegex True "#\\s*if"
+regex_'23'5cs'2ael'28'3f'3ase'7cif'29 = compileRegex True "#\\s*el(?:se|if)"
+
+parseRules ("OpenCL","Normal") =
+  (((pDetectSpaces >>= withAttribute NormalTok))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2aif'5cs'2b0'5cs'2a'24 >>= withAttribute OtherTok) >>~ pushContext ("OpenCL","Outscoped"))
+   <|>
+   ((pFirstNonSpace >> lookAhead (pDetectChar False '#') >> pushContext ("OpenCL","AfterHash") >> currentContext >>= parseRules))
+   <|>
+   ((pFirstNonSpace >> pString False "//BEGIN" >>= withAttribute RegionMarkerTok) >>~ pushContext ("OpenCL","Region Marker"))
+   <|>
+   ((pFirstNonSpace >> pString False "//END" >>= withAttribute RegionMarkerTok) >>~ pushContext ("OpenCL","Region Marker"))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'\"" list_keywords >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\'\"" list_types >>= withAttribute DataTypeTok))
+   <|>
+   ((pDetectIdentifier >>= withAttribute NormalTok))
+   <|>
+   ((pDetectChar False '{' >>= withAttribute NormalTok))
+   <|>
+   ((pDetectChar False '}' >>= withAttribute NormalTok))
+   <|>
+   (withChildren (pFloat >>= withAttribute FloatTok) ((pAnyChar "fF" >>= withAttribute FloatTok)))
+   <|>
+   ((pHlCOct >>= withAttribute BaseNTok))
+   <|>
+   ((pHlCHex >>= withAttribute BaseNTok))
+   <|>
+   (withChildren (pInt >>= withAttribute DecValTok) (((pString False "ULL" >>= withAttribute DecValTok))
+                                                     <|>
+                                                     ((pString False "LUL" >>= withAttribute DecValTok))
+                                                     <|>
+                                                     ((pString False "LLU" >>= withAttribute DecValTok))
+                                                     <|>
+                                                     ((pString False "UL" >>= withAttribute DecValTok))
+                                                     <|>
+                                                     ((pString False "LU" >>= withAttribute DecValTok))
+                                                     <|>
+                                                     ((pString False "LL" >>= withAttribute DecValTok))
+                                                     <|>
+                                                     ((pString False "U" >>= withAttribute DecValTok))
+                                                     <|>
+                                                     ((pString False "L" >>= withAttribute DecValTok))))
+   <|>
+   ((pHlCChar >>= withAttribute CharTok))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("OpenCL","String"))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Doxygen.parseExpression (Just ("Doxygen",""))))
+   <|>
+   ((pDetect2Chars False '/' '/' >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Commentar 1"))
+   <|>
+   ((pDetect2Chars False '/' '*' >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Commentar 2"))
+   <|>
+   ((pAnyChar ":!%&()+,-/.*<=>?[]|~^;" >>= withAttribute NormalTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","Normal")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("OpenCL","String") =
+  (((pLineContinue >>= withAttribute StringTok))
+   <|>
+   ((pHlCStringChar >>= withAttribute CharTok))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","String")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("OpenCL","Region Marker") =
+  (currentContext >>= \x -> guard (x == ("OpenCL","Region Marker")) >> pDefault >>= withAttribute RegionMarkerTok)
+
+parseRules ("OpenCL","Commentar 1") =
+  (((pLineContinue >>= withAttribute CommentTok))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","Commentar 1")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("OpenCL","Commentar 2") =
+  (((pDetect2Chars False '*' '/' >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","Commentar 2")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("OpenCL","AfterHash") =
+  (((pFirstNonSpace >> pRegExpr regex_'23'5cs'2aif'28'3f'3adef'7cndef'29'3f'28'3f'3d'5cs'2b'5cS'29 >>= withAttribute OtherTok) >>~ pushContext ("OpenCL","Preprocessor"))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2aendif >>= withAttribute OtherTok) >>~ pushContext ("OpenCL","Preprocessor"))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2adefine'2e'2a'28'28'3f'3d'5c'5c'29'29 >>= withAttribute OtherTok) >>~ pushContext ("OpenCL","Define"))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2a'28'3f'3ael'28'3f'3ase'7cif'29'7cinclude'28'3f'3a'5fnext'29'3f'7cdefine'7cundef'7cline'7cerror'7cwarning'7cpragma'29 >>= withAttribute OtherTok) >>~ pushContext ("OpenCL","Preprocessor"))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2b'5b0'2d9'5d'2b >>= withAttribute OtherTok) >>~ pushContext ("OpenCL","Preprocessor"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","AfterHash")) >> pDefault >>= withAttribute ErrorTok))
+
+parseRules ("OpenCL","Preprocessor") =
+  (((pLineContinue >>= withAttribute OtherTok))
+   <|>
+   ((pRangeDetect '"' '"' >>= withAttribute OtherTok))
+   <|>
+   ((pRangeDetect '<' '>' >>= withAttribute OtherTok))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Doxygen.parseExpression (Just ("Doxygen","")) >>= ((withAttribute OtherTok) . snd)))
+   <|>
+   ((pDetect2Chars False '/' '*' >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Commentar/Preprocessor"))
+   <|>
+   ((pDetect2Chars False '/' '/' >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Commentar 1"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","Preprocessor")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("OpenCL","Define") =
+  (((pLineContinue >>= withAttribute OtherTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","Define")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("OpenCL","Commentar/Preprocessor") =
+  (((pDetect2Chars False '*' '/' >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","Commentar/Preprocessor")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("OpenCL","Outscoped") =
+  (((pDetectSpaces >>= withAttribute CommentTok))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   ((pDetectIdentifier >>= withAttribute CommentTok))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("OpenCL","String"))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Doxygen.parseExpression (Just ("Doxygen","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   ((pDetect2Chars False '/' '/' >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Commentar 1"))
+   <|>
+   ((pDetect2Chars False '/' '*' >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Commentar 2"))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2aif >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Outscoped intern"))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2ael'28'3f'3ase'7cif'29 >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2aendif >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","Outscoped")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("OpenCL","Outscoped intern") =
+  (((pDetectSpaces >>= withAttribute CommentTok))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   ((pDetectIdentifier >>= withAttribute CommentTok))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("OpenCL","String"))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Doxygen.parseExpression (Just ("Doxygen","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   ((pDetect2Chars False '/' '/' >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Commentar 1"))
+   <|>
+   ((pDetect2Chars False '/' '*' >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Commentar 2"))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2aif >>= withAttribute CommentTok) >>~ pushContext ("OpenCL","Outscoped intern"))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'23'5cs'2aendif >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("OpenCL","Outscoped intern")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("Doxygen", _) = Text.Highlighting.Kate.Syntax.Doxygen.parseExpression Nothing
+parseRules ("Alerts", _) = Text.Highlighting.Kate.Syntax.Alert.parseExpression Nothing
+
+parseRules x = parseRules ("OpenCL","Normal") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Perl.hs b/Text/Highlighting/Kate/Syntax/Perl.hs
--- a/Text/Highlighting/Kate/Syntax/Perl.hs
+++ b/Text/Highlighting/Kate/Syntax/Perl.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file perl.xml, version 1.29, by Anders Lund (anders@alweb.dk) -}
+   highlighting file perl.xml, version 1.30, by Anders Lund (anders@alweb.dk) -}
 
 module Text.Highlighting.Kate.Syntax.Perl
           (highlight, parseExpression, syntaxName, syntaxExtensions)
@@ -677,7 +677,7 @@
    <|>
    ((pRegExpr regex_'5c'5c'2e >>= withAttribute OtherTok))
    <|>
-   (currentContext >>= \x -> guard (x == ("Perl","regex_pattern_internal_rules_1")) >> pDefault >>= withAttribute NormalTok))
+   (currentContext >>= \x -> guard (x == ("Perl","regex_pattern_internal_rules_1")) >> pDefault >>= withAttribute OtherTok))
 
 parseRules ("Perl","regex_pattern_internal_rules_2") =
   (((pDetect2Chars False '(' '?' >>= withAttribute CharTok) >>~ pushContext ("Perl","pat_ext"))
@@ -692,7 +692,7 @@
    <|>
    ((pRegExpr regex_'5cs'7b3'2c'7d'23'2e'2a'24 >>= withAttribute CommentTok))
    <|>
-   (currentContext >>= \x -> guard (x == ("Perl","regex_pattern_internal_rules_2")) >> pDefault >>= withAttribute NormalTok))
+   (currentContext >>= \x -> guard (x == ("Perl","regex_pattern_internal_rules_2")) >> pDefault >>= withAttribute OtherTok))
 
 parseRules ("Perl","regex_pattern_internal") =
   (((parseRules ("Perl","regex_pattern_internal_rules_1")))
@@ -869,7 +869,7 @@
 parseRules ("Perl","here_document") =
   (((pDetectSpaces >>= withAttribute StringTok))
    <|>
-   ((pColumn 0 >> pRegExprDynamic "%1" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   ((pColumn 0 >> pRegExprDynamic "%1\\b" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
    <|>
    ((pRegExpr regex_'5c'3d'5cs'2a'3c'3c'5cs'2a'5b'22'27'5d'3f'28'5bA'2dZ0'2d9'5f'5c'2d'5d'2b'29'5b'22'27'5d'3f >>= withAttribute KeywordTok) >>~ pushContext ("Perl","here_document"))
    <|>
diff --git a/Text/Highlighting/Kate/Syntax/Prolog.hs b/Text/Highlighting/Kate/Syntax/Prolog.hs
--- a/Text/Highlighting/Kate/Syntax/Prolog.hs
+++ b/Text/Highlighting/Kate/Syntax/Prolog.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file prolog.xml, version 1.2, by Torsten Eichstädt (torsten.eichstaedt@web.de) -}
+   highlighting file prolog.xml, version 1.3, by Torsten Eichstädt (torsten.eichstaedt@web.de) -}
 
 module Text.Highlighting.Kate.Syntax.Prolog
           (highlight, parseExpression, syntaxName, syntaxExtensions)
diff --git a/Text/Highlighting/Kate/Syntax/Python.hs b/Text/Highlighting/Kate/Syntax/Python.hs
--- a/Text/Highlighting/Kate/Syntax/Python.hs
+++ b/Text/Highlighting/Kate/Syntax/Python.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file python.xml, version 2.22, by Michael Bueker -}
+   highlighting file python.xml, version 2.23, by Michael Bueker -}
 
 module Text.Highlighting.Kate.Syntax.Python
           (highlight, parseExpression, syntaxName, syntaxExtensions)
@@ -175,11 +175,11 @@
    <|>
    ((pDetectChar False '\'' >>= withAttribute StringTok) >>~ pushContext ("Python","Single A-string"))
    <|>
-   ((pDetect2Chars False 'u' '\'' >>= withAttribute StringTok) >>~ pushContext ("Python","Single A-string"))
+   ((pString False "u'" >>= withAttribute StringTok) >>~ pushContext ("Python","Single A-string"))
    <|>
    ((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("Python","Single Q-string"))
    <|>
-   ((pDetect2Chars False 'u' '"' >>= withAttribute StringTok) >>~ pushContext ("Python","Single Q-string"))
+   ((pString False "u\"" >>= withAttribute StringTok) >>~ pushContext ("Python","Single Q-string"))
    <|>
    ((pString False "r'''" >>= withAttribute StringTok) >>~ pushContext ("Python","Raw Tripple A-string"))
    <|>
@@ -212,11 +212,11 @@
    <|>
    ((pFirstNonSpace >> pDetectChar False '\'' >>= withAttribute CommentTok) >>~ pushContext ("Python","Single A-comment"))
    <|>
-   ((pFirstNonSpace >> pDetect2Chars False 'u' '\'' >>= withAttribute CommentTok) >>~ pushContext ("Python","Single A-comment"))
+   ((pFirstNonSpace >> pString False "u'" >>= withAttribute CommentTok) >>~ pushContext ("Python","Single A-comment"))
    <|>
    ((pFirstNonSpace >> pDetectChar False '"' >>= withAttribute CommentTok) >>~ pushContext ("Python","Single Q-comment"))
    <|>
-   ((pFirstNonSpace >> pDetect2Chars False 'u' '"' >>= withAttribute CommentTok) >>~ pushContext ("Python","Single Q-comment"))
+   ((pFirstNonSpace >> pString False "u\"" >>= withAttribute CommentTok) >>~ pushContext ("Python","Single Q-comment"))
    <|>
    ((pFirstNonSpace >> pString False "r'''" >>= withAttribute CommentTok) >>~ pushContext ("Python","Tripple A-comment"))
    <|>
diff --git a/Text/Highlighting/Kate/Syntax/Relaxng.hs b/Text/Highlighting/Kate/Syntax/Relaxng.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Relaxng.hs
@@ -0,0 +1,135 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file relaxng.xml, version 0.8, by Thomas Schraitle (tom_schr AT web DOT de) -}
+
+module Text.Highlighting.Kate.Syntax.Relaxng
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import qualified Text.Highlighting.Kate.Syntax.Alert
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "RELAX NG"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.rng;*.RNG"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("RELAX NG","normalText")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = False, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("RELAX NG","normalText") -> return ()
+      ("RELAX NG","detectEntRef") -> return ()
+      ("RELAX NG","tagname") -> return ()
+      ("RELAX NG","attributes") -> return ()
+      ("RELAX NG","attrValue") -> return ()
+      ("RELAX NG","string") -> return ()
+      ("RELAX NG","comment") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_relaxngnames = Set.fromList $ words $ "anyname attribute choice data define div element empty except externalref grammar group include interleave list mixed name notallowed nsname oneormore optional param parentref ref start text value zeroormore"
+
+regex_'26'28'23'5b0'2d9'5d'2b'7c'23'5bxX'5d'5b0'2d9A'2dFa'2df'5d'2b'7c'5bA'2dZa'2dz'5f'3a'5d'5b'5cw'2e'3a'5f'2d'5d'2a'29'3b = compileRegex True "&(#[0-9]+|#[xX][0-9A-Fa-f]+|[A-Za-z_:][\\w.:_-]*);"
+regex_'5cs'2a = compileRegex True "\\s*"
+regex_'5cs'2a'3d'5cs'2a = compileRegex True "\\s*=\\s*"
+regex_'2d'28'2d'28'3f'21'2d'3e'29'29'2b = compileRegex True "-(-(?!->))+"
+
+parseRules ("RELAX NG","normalText") =
+  (((pString False "<!--" >>= withAttribute CommentTok) >>~ pushContext ("RELAX NG","comment"))
+   <|>
+   ((pDetectChar False '<' >>= withAttribute KeywordTok) >>~ pushContext ("RELAX NG","tagname"))
+   <|>
+   ((pRegExpr regex_'26'28'23'5b0'2d9'5d'2b'7c'23'5bxX'5d'5b0'2d9A'2dFa'2df'5d'2b'7c'5bA'2dZa'2dz'5f'3a'5d'5b'5cw'2e'3a'5f'2d'5d'2a'29'3b >>= withAttribute NormalTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("RELAX NG","normalText")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("RELAX NG","detectEntRef") =
+  (((pRegExpr regex_'26'28'23'5b0'2d9'5d'2b'7c'23'5bxX'5d'5b0'2d9A'2dFa'2df'5d'2b'7c'5bA'2dZa'2dz'5f'3a'5d'5b'5cw'2e'3a'5f'2d'5d'2a'29'3b >>= withAttribute NormalTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("RELAX NG","detectEntRef")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("RELAX NG","tagname") =
+  (((pKeyword " \n\t.()!+,<=>%&*/;?[]^{|}~\\\"{}" list_relaxngnames >>= withAttribute NormalTok) >>~ pushContext ("RELAX NG","attributes"))
+   <|>
+   ((pRegExpr regex_'5cs'2a >>= withAttribute OtherTok) >>~ pushContext ("RELAX NG","attributes"))
+   <|>
+   ((pDetectChar False '>' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("RELAX NG","tagname")) >> pDefault >>= withAttribute KeywordTok))
+
+parseRules ("RELAX NG","attributes") =
+  (((pDetect2Chars False '/' '>' >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((pDetectChar False '>' >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((pRegExpr regex_'5cs'2a'3d'5cs'2a >>= withAttribute NormalTok) >>~ pushContext ("RELAX NG","attrValue"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("RELAX NG","attributes")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("RELAX NG","attrValue") =
+  (((pDetect2Chars False '/' '>' >>= withAttribute ErrorTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   ((pDetectChar False '>' >>= withAttribute ErrorTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("RELAX NG","string"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("RELAX NG","attrValue")) >> pDefault >>= withAttribute ErrorTok))
+
+parseRules ("RELAX NG","string") =
+  (((pDetectChar False '"' >>= withAttribute StringTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("RELAX NG","detectEntRef")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("RELAX NG","string")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("RELAX NG","comment") =
+  (((pDetectSpaces >>= withAttribute CommentTok))
+   <|>
+   ((pString False "-->" >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'2d'28'2d'28'3f'21'2d'3e'29'29'2b >>= withAttribute NormalTok))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   ((pDetectIdentifier >>= withAttribute CommentTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("RELAX NG","comment")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("Alerts", _) = Text.Highlighting.Kate.Syntax.Alert.parseExpression Nothing
+
+parseRules x = parseRules ("RELAX NG","normalText") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Rest.hs b/Text/Highlighting/Kate/Syntax/Rest.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Rest.hs
@@ -0,0 +1,187 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file rest.xml, version 1.4, by  -}
+
+module Text.Highlighting.Kate.Syntax.Rest
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import qualified Text.Highlighting.Kate.Syntax.Alert
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "reStructuredText"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.rst"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("reStructuredText","Normal")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("reStructuredText","Normal") -> return ()
+      ("reStructuredText","InlineMarkup") -> return ()
+      ("reStructuredText","Field") -> return ()
+      ("reStructuredText","InterpretedText") -> (popContext) >> pEndLine
+      ("reStructuredText","Role") -> (popContext) >> pEndLine
+      ("reStructuredText","TrailingRole") -> (popContext) >> pEndLine
+      ("reStructuredText","Comment") -> return ()
+      ("reStructuredText","CodeBlock") -> return ()
+      ("reStructuredText","Code") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+
+regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'2a'5c'2a'5b'5e'5cs'5d'2e'2a'5c'2a'5c'2a'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 = compileRegex True "(^|[-\\s'\"\\(\\[{</:\8216\8220\8217\171\161\191\8208\8209\8210\8211\8212 ])\\*\\*[^\\s].*\\*\\*(?=[-\\s\8217\8221\187\8208\8209\8210\8211\8212 '\"\\)\\]}>/:\\.,;!\\?\\\\]|$)"
+regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'2a'5b'5e'5cs'5d'2e'2a'5c'2a'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 = compileRegex True "(^|[-\\s'\"\\(\\[{</:\8216\8220\8217\171\161\191\8208\8209\8210\8211\8212 ])\\*[^\\s].*\\*(?=[-\\s\8217\8221\187\8208\8209\8210\8211\8212 '\"\\)\\]}>/:\\.,;!\\?\\\\]|$)"
+regex_'5cs'2a'5c'2e'5c'2e_'5c'5b'28'5cd'2b'7c'23'7c'5c'2a'7c'23'5b'5cw'5f'5c'2e'3a'5c'2b'2d'5d'2b'29'5c'5d'5cs = compileRegex True "\\s*\\.\\. \\[(\\d+|#|\\*|#[\\w_\\.:\\+-]+)\\]\\s"
+regex_'5cs'2a'5c'2e'5c'2e_'5c'5b'5b'5cw'5f'5c'2e'3a'5c'2b'2d'5d'2b'5c'5d'5cs = compileRegex True "\\s*\\.\\. \\[[\\w_\\.:\\+-]+\\]\\s"
+regex_'5cs'2a'28'5c'2e'5c'2e_'28'5f'5f'3a'7c'5f'5b'5cw'5f'5c'2e'3a'5c'2b'2d_'5d'2b'3a'28'5cs'7c'24'29'29'7c'5f'5f_'29 = compileRegex True "\\s*(\\.\\. (__:|_[\\w_\\.:\\+- ]+:(\\s|$))|__ )"
+regex_'5cs'2a'5c'2e'5c'2e_code'2dblock'3a'3a = compileRegex True "\\s*\\.\\. code-block::"
+regex_'5cs'2a'5c'2e'5c'2e_'5b'5cw'2d'5f'5c'2e'5d'2b'3a'3a'28'5cs'7c'24'29 = compileRegex True "\\s*\\.\\. [\\w-_\\.]+::(\\s|$)"
+regex_'3a'3a'24 = compileRegex True "::$"
+regex_'5cs'2a'5c'2e'5c'2e_'5c'7c'5b'5cw'5f'5c'2e'3a'5c'2b'2d_'5d'2b'5c'7c'5cs'2b'5b'5cw'5f'5c'2e'3a'5c'2b'2d'5d'2b'3a'3a'5cs = compileRegex True "\\s*\\.\\. \\|[\\w_\\.:\\+- ]+\\|\\s+[\\w_\\.:\\+-]+::\\s"
+regex_'3a'28'3f'3d'28'5b'5e'3a'5d'2a'5c'5c'3a'29'2a'5b'5e'3a'5d'2a'3a'28'5cs'7c'24'29'29 = compileRegex True ":(?=([^:]*\\\\:)*[^:]*:(\\s|$))"
+regex_'28'5cs'2a'29'5c'2e'5c'2e'5cs'28'3f'21'5b'5cw'2d'5f'5c'2e'5d'2b'3a'3a'28'5cs'7c'24'29'29 = compileRegex True "(\\s*)\\.\\.\\s(?![\\w-_\\.]+::(\\s|$))"
+regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'60'60'5b'5e'5cs'5d'2e'2a'60'60'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 = compileRegex True "(^|[-\\s'\"\\(\\[{</:\8216\8220\8217\171\161\191\8208\8209\8210\8211\8212 ])``[^\\s].*``(?=[-\\s\8217\8221\187\8208\8209\8210\8211\8212 '\"\\)\\]}>/:\\.,;!\\?\\\\]|$)"
+regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'7c'5b'5e'5cs'5d'2e'2a'5c'7c'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 = compileRegex True "(^|[-\\s'\"\\(\\[{</:\8216\8220\8217\171\161\191\8208\8209\8210\8211\8212 ])\\|[^\\s].*\\|(?=[-\\s\8217\8221\187\8208\8209\8210\8211\8212 '\"\\)\\]}>/:\\.,;!\\?\\\\]|$)"
+regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5f'60'5b'5e'5cs'5d'2e'2a'60'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 = compileRegex True "(^|[-\\s'\"\\(\\[{</:\8216\8220\8217\171\161\191\8208\8209\8210\8211\8212 ])_`[^\\s].*`(?=[-\\s\8217\8221\187\8208\8209\8210\8211\8212 '\"\\)\\]}>/:\\.,;!\\?\\\\]|$)"
+regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'5b'5b'5cw'5f'5c'2e'3a'5c'2b'2d'5d'2b'5c'5d'5f'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 = compileRegex True "(^|[-\\s'\"\\(\\[{</:\8216\8220\8217\171\161\191\8208\8209\8210\8211\8212 ])\\[[\\w_\\.:\\+-]+\\]_(?=[-\\s\8217\8221\187\8208\8209\8210\8211\8212 '\"\\)\\]}>/:\\.,;!\\?\\\\]|$)"
+regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'60'5b'5e'5cs'5d'2e'2a'60'5f'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 = compileRegex True "(^|[-\\s'\"\\(\\[{</:\8216\8220\8217\171\161\191\8208\8209\8210\8211\8212 ])`[^\\s].*`_(?=[-\\s\8217\8221\187\8208\8209\8210\8211\8212 '\"\\)\\]}>/:\\.,;!\\?\\\\]|$)"
+regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5cw'2b'5f'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 = compileRegex True "(^|[-\\s'\"\\(\\[{</:\8216\8220\8217\171\161\191\8208\8209\8210\8211\8212 ])\\w+_(?=[-\\s\8217\8221\187\8208\8209\8210\8211\8212 '\"\\)\\]}>/:\\.,;!\\?\\\\]|$)"
+regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'60'5b'5e'5cs'5d'2e'2a'60'28'3f'3d'3a'5b'5cw'2d'5f'5c'2e'5c'2b'5d'2b'3a'29 = compileRegex True "(^|[-\\s'\"\\(\\[{</:\8216\8220\8217\171\161\191\8208\8209\8210\8211\8212 ])`[^\\s].*`(?=:[\\w-_\\.\\+]+:)"
+regex_'3a'5b'5cw'2d'5f'5c'2e'5c'2b'5d'2b'3a'28'3f'3d'60'29 = compileRegex True ":[\\w-_\\.\\+]+:(?=`)"
+regex_'3a'5b'5cw'2d'5f'5c'2e'5c'2b'5d'2b'3a = compileRegex True ":[\\w-_\\.\\+]+:"
+regex_'28'2e'7c'24'29 = compileRegex True "(.|$)"
+regex_'28'5cs'2b'29'28'3f'3d'5cS'29 = compileRegex True "(\\s+)(?=\\S)"
+
+parseRules ("reStructuredText","Normal") =
+  (((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'2a'5c'2a'5b'5e'5cs'5d'2e'2a'5c'2a'5c'2a'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'2a'5b'5e'5cs'5d'2e'2a'5c'2a'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute NormalTok))
+   <|>
+   ((parseRules ("reStructuredText","InlineMarkup")))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5cs'2a'5c'2e'5c'2e_'5c'5b'28'5cd'2b'7c'23'7c'5c'2a'7c'23'5b'5cw'5f'5c'2e'3a'5c'2b'2d'5d'2b'29'5c'5d'5cs >>= withAttribute DataTypeTok))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5cs'2a'5c'2e'5c'2e_'5c'5b'5b'5cw'5f'5c'2e'3a'5c'2b'2d'5d'2b'5c'5d'5cs >>= withAttribute DataTypeTok))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5cs'2a'28'5c'2e'5c'2e_'28'5f'5f'3a'7c'5f'5b'5cw'5f'5c'2e'3a'5c'2b'2d_'5d'2b'3a'28'5cs'7c'24'29'29'7c'5f'5f_'29 >>= withAttribute DataTypeTok))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5cs'2a'5c'2e'5c'2e_code'2dblock'3a'3a >>= withAttribute DataTypeTok) >>~ pushContext ("reStructuredText","CodeBlock"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5cs'2a'5c'2e'5c'2e_'5b'5cw'2d'5f'5c'2e'5d'2b'3a'3a'28'5cs'7c'24'29 >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'3a'3a'24 >>= withAttribute DataTypeTok) >>~ pushContext ("reStructuredText","CodeBlock"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5cs'2a'5c'2e'5c'2e_'5c'7c'5b'5cw'5f'5c'2e'3a'5c'2b'2d_'5d'2b'5c'7c'5cs'2b'5b'5cw'5f'5c'2e'3a'5c'2b'2d'5d'2b'3a'3a'5cs >>= withAttribute DataTypeTok))
+   <|>
+   ((pFirstNonSpace >> pRegExpr regex_'3a'28'3f'3d'28'5b'5e'3a'5d'2a'5c'5c'3a'29'2a'5b'5e'3a'5d'2a'3a'28'5cs'7c'24'29'29 >>= withAttribute FunctionTok) >>~ pushContext ("reStructuredText","Field"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'28'5cs'2a'29'5c'2e'5c'2e'5cs'28'3f'21'5b'5cw'2d'5f'5c'2e'5d'2b'3a'3a'28'5cs'7c'24'29'29 >>= withAttribute CommentTok) >>~ pushContext ("reStructuredText","Comment"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("reStructuredText","Normal")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("reStructuredText","InlineMarkup") =
+  (((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'60'60'5b'5e'5cs'5d'2e'2a'60'60'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'7c'5b'5e'5cs'5d'2e'2a'5c'7c'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5f'60'5b'5e'5cs'5d'2e'2a'60'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'5b'5b'5cw'5f'5c'2e'3a'5c'2b'2d'5d'2b'5c'5d'5f'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'60'5b'5e'5cs'5d'2e'2a'60'5f'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5cw'2b'5f'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'60'5b'5e'5cs'5d'2e'2a'60'28'3f'3d'3a'5b'5cw'2d'5f'5c'2e'5c'2b'5d'2b'3a'29 >>= withAttribute DecValTok) >>~ pushContext ("reStructuredText","TrailingRole"))
+   <|>
+   ((pRegExpr regex_'3a'5b'5cw'2d'5f'5c'2e'5c'2b'5d'2b'3a'28'3f'3d'60'29 >>= withAttribute KeywordTok) >>~ pushContext ("reStructuredText","Role"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("reStructuredText","InlineMarkup")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("reStructuredText","Field") =
+  (((pDetectChar False ':' >>= withAttribute FunctionTok) >>~ (popContext))
+   <|>
+   ((pDetect2Chars False '\\' ':' >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'2a'5c'2a'5b'5e'5cs'5d'2e'2a'5c'2a'5c'2a'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'28'5e'7c'5b'2d'5cs'27'22'5c'28'5c'5b'7b'3c'2f'3a'2018'201c'2019'ab'a1'bf'2010'2011'2012'2013'2014_'5d'29'5c'2a'5b'5e'5cs'5d'2e'2a'5c'2a'28'3f'3d'5b'2d'5cs'2019'201d'bb'2010'2011'2012'2013'2014_'27'22'5c'29'5c'5d'7d'3e'2f'3a'5c'2e'2c'3b'21'5c'3f'5c'5c'5d'7c'24'29 >>= withAttribute FunctionTok))
+   <|>
+   ((parseRules ("reStructuredText","InlineMarkup")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("reStructuredText","Field")) >> pDefault >>= withAttribute FunctionTok))
+
+parseRules ("reStructuredText","InterpretedText") =
+  (((pDetectChar False '`' >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("reStructuredText","InterpretedText")) >> pDefault >>= withAttribute DecValTok))
+
+parseRules ("reStructuredText","Role") =
+  (((pDetectChar False '`' >>= withAttribute DecValTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("reStructuredText","Role")) >> pDefault >>= withAttribute KeywordTok))
+
+parseRules ("reStructuredText","TrailingRole") =
+  (((pRegExpr regex_'3a'5b'5cw'2d'5f'5c'2e'5c'2b'5d'2b'3a >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("reStructuredText","TrailingRole")) >> pDefault >>= withAttribute KeywordTok))
+
+parseRules ("reStructuredText","Comment") =
+  (((pColumn 0 >> pRegExprDynamic "%1   " >>= withAttribute DataTypeTok))
+   <|>
+   ((pColumn 0 >> lookAhead (pRegExpr regex_'28'2e'7c'24'29) >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("reStructuredText","Comment")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("reStructuredText","CodeBlock") =
+  (((pColumn 0 >> pRegExpr regex_'28'5cs'2b'29'28'3f'3d'5cS'29 >>= withAttribute DataTypeTok) >>~ pushContext ("reStructuredText","Code"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("reStructuredText","CodeBlock")) >> pDefault >>= withAttribute DataTypeTok))
+
+parseRules ("reStructuredText","Code") =
+  (((pColumn 0 >> pRegExprDynamic "%1" >>= withAttribute DataTypeTok))
+   <|>
+   ((pColumn 0 >> lookAhead (pRegExpr regex_'28'2e'7c'24'29) >> (popContext >> popContext) >> currentContext >>= parseRules))
+   <|>
+   (currentContext >>= \x -> guard (x == ("reStructuredText","Code")) >> pDefault >>= withAttribute DataTypeTok))
+
+parseRules ("Alerts", _) = Text.Highlighting.Kate.Syntax.Alert.parseExpression Nothing
+
+parseRules x = parseRules ("reStructuredText","Normal") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Restructuredtext.hs b/Text/Highlighting/Kate/Syntax/Restructuredtext.hs
deleted file mode 100644
--- a/Text/Highlighting/Kate/Syntax/Restructuredtext.hs
+++ /dev/null
@@ -1,126 +0,0 @@
-{- This module was generated from data in the Kate syntax
-   highlighting file restructuredtext.xml, version 1.0, by Massimiliano Torromeo (massimiliano.torromeo@gmail.com) -}
-
-module Text.Highlighting.Kate.Syntax.Restructuredtext
-          (highlight, parseExpression, syntaxName, syntaxExtensions)
-where
-import Text.Highlighting.Kate.Types
-import Text.Highlighting.Kate.Common
-import Text.ParserCombinators.Parsec hiding (State)
-import Control.Monad.State
-import Data.Char (isSpace)
-
--- | Full name of language.
-syntaxName :: String
-syntaxName = "Restructured Text"
-
--- | Filename extensions for this language.
-syntaxExtensions :: String
-syntaxExtensions = "*.rst"
-
--- | Highlight source code using this syntax definition.
-highlight :: String -> [SourceLine]
-highlight input = evalState (mapM parseSourceLine $ lines input) startingState
-
-parseSourceLine :: String -> State SyntaxState SourceLine
-parseSourceLine = mkParseSourceLine (parseExpression Nothing)
-
--- | Parse an expression using appropriate local context.
-parseExpression :: Maybe (String,String)
-                -> KateParser Token
-parseExpression mbcontext = do
-  (lang,cont) <- maybe currentContext return mbcontext
-  result <- parseRules (lang,cont)
-  optional $ do eof
-                updateState $ \st -> st{ synStPrevChar = '\n' }
-                pEndLine
-  return result
-
-startingState = SyntaxState {synStContexts = [("Restructured Text","Normal")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
-
-pEndLine = do
-  updateState $ \st -> st{ synStPrevNonspace = False }
-  context <- currentContext
-  contexts <- synStContexts `fmap` getState
-  if length contexts >= 2
-    then case context of
-      ("Restructured Text","Normal") -> return ()
-      ("Restructured Text","CodeBlock") -> return ()
-      ("Restructured Text","Code") -> return ()
-      ("Restructured Text","Directive") -> (popContext) >> pEndLine
-      ("Restructured Text","Link") -> (popContext) >> pEndLine
-      ("Restructured Text","URL") -> return ()
-      _ -> return ()
-    else return ()
-
-withAttribute attr txt = do
-  when (null txt) $ fail "Parser matched no text"
-  updateState $ \st -> st { synStPrevChar = last txt
-                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
-  return (attr, txt)
-
-
-regex_'5c'2a'5b'5e'2a_'5d'2e'2a'5cS'5c'2a = compileRegex True "\\*[^* ].*\\S\\*"
-regex_'5c'2a'5c'2a'5cS'2e'2a'5cS'5c'2a'5c'2a = compileRegex True "\\*\\*\\S.*\\S\\*\\*"
-regex_'60'60'5cS'2e'2a'5cS'60'60 = compileRegex True "``\\S.*\\S``"
-regex_'5c'2e'5c'2e_ = compileRegex True "\\.\\. "
-regex_'28'23'7b3'2c'7d'7c'5c'2a'7b3'2c'7d'7c'3d'7b3'2c'7d'7c'2d'7b3'2c'7d'7c'5c'5e'7b3'2c'7d'7c'22'7b3'2c'7d'7c'27'7b3'2c'7d'7c'7e'7b3'2c'7d'7c'60'7b3'2c'7d'7c'5c'2b'7b3'2c'7d'29'24 = compileRegex True "(#{3,}|\\*{3,}|={3,}|-{3,}|\\^{3,}|\"{3,}|'{3,}|~{3,}|`{3,}|\\+{3,})$"
-regex_'5b'230'2d9'5d'5c'2e'5cs = compileRegex True "[#0-9]\\.\\s"
-regex_'3a'3a'24 = compileRegex True "::$"
-regex_'5cs = compileRegex True "\\s"
-regex_'5cS = compileRegex True "\\S"
-regex_'5cw'2b = compileRegex True "\\w+"
-regex_'5b'5e'3e'5d'2b = compileRegex True "[^>]+"
-
-parseRules ("Restructured Text","Normal") =
-  (((pRegExpr regex_'5c'2a'5b'5e'2a_'5d'2e'2a'5cS'5c'2a >>= withAttribute NormalTok))
-   <|>
-   ((pRegExpr regex_'5c'2a'5c'2a'5cS'2e'2a'5cS'5c'2a'5c'2a >>= withAttribute NormalTok))
-   <|>
-   ((pRegExpr regex_'60'60'5cS'2e'2a'5cS'60'60 >>= withAttribute DataTypeTok))
-   <|>
-   ((pColumn 0 >> pRegExpr regex_'5c'2e'5c'2e_ >>= withAttribute DecValTok) >>~ pushContext ("Restructured Text","Directive"))
-   <|>
-   ((pColumn 0 >> pRegExpr regex_'28'23'7b3'2c'7d'7c'5c'2a'7b3'2c'7d'7c'3d'7b3'2c'7d'7c'2d'7b3'2c'7d'7c'5c'5e'7b3'2c'7d'7c'22'7b3'2c'7d'7c'27'7b3'2c'7d'7c'7e'7b3'2c'7d'7c'60'7b3'2c'7d'7c'5c'2b'7b3'2c'7d'29'24 >>= withAttribute KeywordTok))
-   <|>
-   ((pFirstNonSpace >> pRegExpr regex_'5b'230'2d9'5d'5c'2e'5cs >>= withAttribute DecValTok))
-   <|>
-   ((pFirstNonSpace >> pAnyChar "*+-" >>= withAttribute FloatTok))
-   <|>
-   ((pDetectChar False '`' >>= withAttribute StringTok) >>~ pushContext ("Restructured Text","Link"))
-   <|>
-   ((pRegExpr regex_'3a'3a'24 >>= withAttribute DataTypeTok) >>~ pushContext ("Restructured Text","CodeBlock"))
-   <|>
-   (currentContext >>= \x -> guard (x == ("Restructured Text","Normal")) >> pDefault >>= withAttribute NormalTok))
-
-parseRules ("Restructured Text","CodeBlock") =
-  (((pColumn 0 >> pRegExpr regex_'5cs >>= withAttribute DataTypeTok) >>~ pushContext ("Restructured Text","Code"))
-   <|>
-   (currentContext >>= \x -> guard (x == ("Restructured Text","CodeBlock")) >> pDefault >>= withAttribute DataTypeTok))
-
-parseRules ("Restructured Text","Code") =
-  (((pColumn 0 >> lookAhead (pRegExpr regex_'5cS) >> (popContext >> popContext) >> currentContext >>= parseRules))
-   <|>
-   (currentContext >>= \x -> guard (x == ("Restructured Text","Code")) >> pDefault >>= withAttribute DataTypeTok))
-
-parseRules ("Restructured Text","Directive") =
-  (((pRegExpr regex_'5cw'2b >>= withAttribute KeywordTok))
-   <|>
-   (currentContext >>= \x -> guard (x == ("Restructured Text","Directive")) >> pDefault >>= withAttribute DecValTok))
-
-parseRules ("Restructured Text","Link") =
-  (((pDetectChar False '<' >>= withAttribute StringTok) >>~ pushContext ("Restructured Text","URL"))
-   <|>
-   ((pDetect2Chars False '`' '_' >>= withAttribute StringTok) >>~ (popContext))
-   <|>
-   (currentContext >>= \x -> guard (x == ("Restructured Text","Link")) >> pDefault >>= withAttribute StringTok))
-
-parseRules ("Restructured Text","URL") =
-  (((pRegExpr regex_'5b'5e'3e'5d'2b >>= withAttribute StringTok))
-   <|>
-   ((pDetectChar False '>' >>= withAttribute StringTok) >>~ (popContext))
-   <|>
-   (currentContext >>= \x -> guard (x == ("Restructured Text","URL")) >> pDefault >>= withAttribute StringTok))
-
-
-parseRules x = parseRules ("Restructured Text","Normal") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Tcsh.hs b/Text/Highlighting/Kate/Syntax/Tcsh.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Tcsh.hs
@@ -0,0 +1,694 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file tcsh.xml, version 0.2, by Matthew Woehlke (mw_triad@users.sourceforge.net) -}
+
+module Text.Highlighting.Kate.Syntax.Tcsh
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import qualified Text.Highlighting.Kate.Syntax.Alert
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "Tcsh"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.csh;*.tcsh;csh.cshrc;csh.login;.tcshrc;.cshrc;.login"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("Tcsh","Start")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("Tcsh","Start") -> return ()
+      ("Tcsh","FindAll") -> return ()
+      ("Tcsh","FindMost") -> return ()
+      ("Tcsh","FindComments") -> (popContext) >> pEndLine
+      ("Tcsh","Comment") -> (popContext) >> pEndLine
+      ("Tcsh","FindCommentsParen") -> (popContext) >> pEndLine
+      ("Tcsh","CommentParen") -> (popContext) >> pEndLine
+      ("Tcsh","FindCommentsBackq") -> (popContext) >> pEndLine
+      ("Tcsh","CommentBackq") -> (popContext) >> pEndLine
+      ("Tcsh","FindCommands") -> return ()
+      ("Tcsh","FindOthers") -> return ()
+      ("Tcsh","FindStrings") -> return ()
+      ("Tcsh","FindSubstitutions") -> return ()
+      ("Tcsh","FindTests") -> return ()
+      ("Tcsh","ExprDblParen") -> return ()
+      ("Tcsh","ExprDblParenSubst") -> return ()
+      ("Tcsh","ExprSubParen") -> return ()
+      ("Tcsh","ExprBracket") -> return ()
+      ("Tcsh","ExprDblBracket") -> return ()
+      ("Tcsh","Group") -> return ()
+      ("Tcsh","SubShell") -> return ()
+      ("Tcsh","Assign") -> (popContext) >> pEndLine
+      ("Tcsh","AssignArray") -> (popContext) >> pEndLine
+      ("Tcsh","AssignSubscr") -> (popContext) >> pEndLine
+      ("Tcsh","Subscript") -> return ()
+      ("Tcsh","FunctionDef") -> (popContext) >> pEndLine
+      ("Tcsh","CmdSetEnv") -> (popContext) >> pEndLine
+      ("Tcsh","VarName") -> (popContext) >> pEndLine
+      ("Tcsh","ProcessSubst") -> return ()
+      ("Tcsh","StringSQ") -> return ()
+      ("Tcsh","StringDQ") -> return ()
+      ("Tcsh","StringEsc") -> return ()
+      ("Tcsh","VarBrace") -> return ()
+      ("Tcsh","SubstFile") -> return ()
+      ("Tcsh","SubstCommand") -> return ()
+      ("Tcsh","SubstBackq") -> return ()
+      ("Tcsh","Switch") -> return ()
+      ("Tcsh","SwitchCase") -> return ()
+      ("Tcsh","SwitchDefault") -> return ()
+      ("Tcsh","SwitchExpr") -> return ()
+      ("Tcsh","HereDoc") -> return ()
+      ("Tcsh","HereDocRemainder") -> (popContext) >> pEndLine
+      ("Tcsh","HereDocQ") -> return ()
+      ("Tcsh","HereDocNQ") -> return ()
+      ("Tcsh","HereDocIQ") -> return ()
+      ("Tcsh","HereDocINQ") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_keywords = Set.fromList $ words $ "else for function in select until while . then"
+list_builtins = Set.fromList $ words $ ": alias alloc bg bindkey break builtins bye cd chdir complete continue dirs echo echotc eval exec exit fg filetest glob hashstat history hup inlib jobs kill limit log login logout ls-F migrate newgrp nice nohup notify onintr popd printenv pushd rehash repeat sched settc setty shift source stop suspend telltc time umask unalias uncomplete unhash unlimit ver wait watchlog where which"
+list_builtins'5fvar = Set.fromList $ words $ "unset unsetenv"
+list_unixcommands = Set.fromList $ words $ "arch awk bash bunzip2 bzcat bzcmp bzdiff bzegrep bzfgrep bzgrep bzip2 bzip2recover bzless bzmore cat chattr chgrp chmod chown chvt cp date dd deallocvt df dir dircolors dmesg dnsdomainname domainname du dumpkeys echo ed egrep false fgconsole fgrep fuser gawk getkeycodes gocr grep groff groups gunzip gzexe gzip hostname igawk install kbd_mode kbdrate killall last lastb link ln loadkeys loadunimap login ls lsattr lsmod lsmod.old mapscrn mesg mkdir mkfifo mknod mktemp more mount mv nano netstat nisdomainname nroff openvt pgawk pidof ping ps pstree pwd rbash readlink red resizecons rm rmdir run-parts sash sed setfont setkeycodes setleds setmetamode setserial sh showkey shred sleep ssed stat stty su sync tar tempfile touch troff true umount uname unicode_start unicode_stop unlink utmpdump uuidgen vdir wall wc ypdomainname zcat zcmp zdiff zegrep zfgrep zforce zgrep zless zmore znew zsh aclocal aconnect aplay apm apmsleep apropos ar arecord as as86 autoconf autoheader automake awk basename bc bison c++ cal cat cc cdda2wav cdparanoia cdrdao cd-read cdrecord chfn chgrp chmod chown chroot chsh clear cmp co col comm cp cpio cpp cut dc dd df diff diff3 dir dircolors directomatic dirname du env expr fbset file find flex flex++ fmt free ftp funzip fuser g++ gawk gc gcc gdb getent getopt gettext gettextize gimp gimp-remote gimptool gmake gs head hexdump id install join kill killall ld ld86 ldd less lex ln locate lockfile logname lp lpr ls lynx m4 make man mkdir mknod msgfmt mv namei nasm nawk nice nl nm nm86 nmap nohup nop od passwd patch pcregrep pcretest perl perror pidof pr printf procmail prune ps2ascii ps2epsi ps2frag ps2pdf ps2ps psbook psmerge psnup psresize psselect pstops rcs rev rm scp sed seq setterm shred size size86 skill slogin snice sort sox split ssh ssh-add ssh-agent ssh-keygen ssh-keyscan stat strings strip sudo suidperl sum tac tail tee test tr uniq unlink unzip updatedb updmap uptime users vmstat w wc wget whatis whereis which who whoami write xargs yacc yes zip zsoelim dcop kdialog kfile xhost xmodmap xset"
+
+regex_'5b'5cs'3b'5d'28'3f'3d'23'29 = compileRegex True "[\\s;](?=#)"
+regex_'5b'5e'29'5d'28'3f'3d'5c'29'29 = compileRegex True "[^)](?=\\))"
+regex_'5b'5e'60'5d'28'3f'3d'60'29 = compileRegex True "[^`](?=`)"
+regex_'5c'5b'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\[\\[(?=($|\\s))"
+regex_'5cs'5c'5b'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\s\\[\\[(?=($|\\s))"
+regex_'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\[(?=($|\\s))"
+regex_'5cs'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\s\\[(?=($|\\s))"
+regex_'5c'7b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\{(?=($|\\s))"
+regex_'5cbdo'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\bdo(?![\\w$+-])"
+regex_'5cbdone'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\bdone(?![\\w$+-])"
+regex_'5cbelse'5cs'2bif'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\belse\\s+if(?![\\w$+-])"
+regex_'5cbif'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\bif(?![\\w$+-])"
+regex_'5cbendif'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\bendif(?![\\w$+-])"
+regex_'5cbswitch'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\bswitch(?![\\w$+-])"
+regex_'2d'5bA'2dZa'2dz0'2d9'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a = compileRegex True "-[A-Za-z0-9][A-Za-z0-9_]*"
+regex_'2d'2d'5ba'2dz'5d'5bA'2dZa'2dz0'2d9'5f'2d'5d'2a = compileRegex True "--[a-z][A-Za-z0-9_-]*"
+regex_'5cb'40'5cs = compileRegex True "\\b@\\s"
+regex_'5cbset'5cs = compileRegex True "\\bset\\s"
+regex_'5cbsetenv'5cs = compileRegex True "\\bsetenv\\s"
+regex_'5cbfunction'5cb = compileRegex True "\\bfunction\\b"
+regex_'28'3c'3c'3f'7c'3e'3e'3f'26'3f'21'3f'29 = compileRegex True "(<<?|>>?&?!?)"
+regex_'28'5b'7c'26'5d'29'5c1'3f = compileRegex True "([|&])\\1?"
+regex_'5bA'2dZa'2dz'5f'3a'5d'5bA'2dZa'2dz0'2d9'5f'3a'23'25'40'2d'5d'2a'5cs'2a'5c'28'5c'29 = compileRegex True "[A-Za-z_:][A-Za-z0-9_:#%@-]*\\s*\\(\\)"
+regex_'5c'5c'5b'3b'22'5c'5c'27'24'60'7b'7d'28'29'7c'26'3c'3e'2a_'5d = compileRegex True "\\\\[;\"\\\\'$`{}()|&<>* ]"
+regex_'28'5b'5cw'5f'40'2e'25'2a'3f'2b'2d'5d'7c'5c'5c_'29'2a'28'3f'3d'2f'29 = compileRegex True "([\\w_@.%*?+-]|\\\\ )*(?=/)"
+regex_'7e'5cw'2a = compileRegex True "~\\w*"
+regex_'2f'28'5b'5cw'5f'40'2e'25'2a'3f'2b'2d'5d'7c'5c'5c_'29'2a'28'3f'3d'28'5b'5cs'2f'29'3a'3b'24'60'27'22'5d'7c'24'29'29 = compileRegex True "/([\\w_@.%*?+-]|\\\\ )*(?=([\\s/):;$`'\"]|$))"
+regex_'5c'24'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'5b = compileRegex True "\\$[A-Za-z_][A-Za-z0-9_]*\\["
+regex_'5c'24'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a = compileRegex True "\\$[A-Za-z_][A-Za-z0-9_]*"
+regex_'5c'24'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d = compileRegex True "\\$[*@#?$!_0-9-]"
+regex_'5c'24'5c'7b'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d'5c'7d = compileRegex True "\\$\\{[*@#?$!_0-9-]\\}"
+regex_'5c'24'5c'7b'23'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'7d = compileRegex True "\\$\\{#[A-Za-z_][A-Za-z0-9_]*\\}"
+regex_'5c'24'5c'7b'21'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'2a'3f'5c'7d = compileRegex True "\\$\\{![A-Za-z_][A-Za-z0-9_]*\\*?\\}"
+regex_'5c'24'5c'7b'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a = compileRegex True "\\$\\{[A-Za-z_][A-Za-z0-9_]*"
+regex_'5c'24'5c'7b'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d'28'3f'3d'5b'3a'23'25'2f'5d'29 = compileRegex True "\\$\\{[*@#?$!_0-9-](?=[:#%/])"
+regex_'5c'5c'5b'60'24'5c'5c'5d = compileRegex True "\\\\[`$\\\\]"
+regex_'2d'5brwxXeozsfdlbcpSugktRLDIFNZ'5d'28'3f'3d'5cs'29 = compileRegex True "-[rwxXeozsfdlbcpSugktRLDIFNZ](?=\\s)"
+regex_'2d'5bAMCUG'5d'3a'3f'28'3f'3d'5cs'29 = compileRegex True "-[AMCUG]:?(?=\\s)"
+regex_'2dP'5b0'2d7'5d'7b'2c3'7d'3a'3f'28'3f'3d'5cs'29 = compileRegex True "-P[0-7]{,3}:?(?=\\s)"
+regex_'28'5b'7c'26'3d'3e'3c'5d'29'5c1 = compileRegex True "([|&=><])\\1"
+regex_'5b'7c'5e'26'3e'3c'2b'5c'2d'2a'2f'25'21'7e'5d = compileRegex True "[|^&><+\\-*/%!~]"
+regex_'28'5b'21'3d'5d'7e'7c'5b'21'3e'3c'5d'3d'29 = compileRegex True "([!=]~|[!><]=)"
+regex_'5cs'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 = compileRegex True "\\s\\](?=($|[\\s;|&]))"
+regex_'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 = compileRegex True "\\](?=($|[\\s;|&]))"
+regex_'5cs'5c'5d'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 = compileRegex True "\\s\\]\\](?=($|[\\s;|&]))"
+regex_'5c'5d'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 = compileRegex True "\\]\\](?=($|[\\s;|&]))"
+regex_'5b'5cw'3a'2c'2b'5f'2e'2f'2d'5d'2b = compileRegex True "[\\w:,+_./-]+"
+regex_'5cs'2b'5bA'2dZa'2dz'5f'3a'5d'5bA'2dZa'2dz0'2d9'5f'3a'23'25'40'2d'5d'2a'28'5cs'2a'5c'28'5c'29'29'3f = compileRegex True "\\s+[A-Za-z_:][A-Za-z0-9_:#%@-]*(\\s*\\(\\))?"
+regex_'5cb'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a = compileRegex True "\\b[A-Za-z_][A-Za-z0-9_]*"
+regex_'2d'5bA'2dZa'2dz0'2d9'5d'2b = compileRegex True "-[A-Za-z0-9]+"
+regex_'5b'5e'5d'7d'29'7c'3b'60'26'3e'3c'5d = compileRegex True "[^]})|;`&><]"
+regex_'5c'5c'5b'60'22'5c'5c'24'5cn'5d = compileRegex True "\\\\[`\"\\\\$\\n]"
+regex_'5c'5c'5babefnrtv'5c'5c'27'5d = compileRegex True "\\\\[abefnrtv\\\\']"
+regex_'5c'5c'28'5b0'2d7'5d'7b1'2c3'7d'7cx'5bA'2dFa'2df0'2d9'5d'7b1'2c2'7d'7cc'2e'29 = compileRegex True "\\\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)"
+regex_'5cscase'5cb = compileRegex True "\\scase\\b"
+regex_'5csdefault'5cb = compileRegex True "\\sdefault\\b"
+regex_'5cbendsw'28'3f'3d'24'7c'5b'5cs'3b'29'5d'29 = compileRegex True "\\bendsw(?=$|[\\s;)])"
+regex_'5csbreaksw'5cb = compileRegex True "\\sbreaksw\\b"
+regex_'28'3c'3c'2d'5cs'2a'22'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'22'29 = compileRegex True "(<<-\\s*\"([|&;()<>\\s]+)\")"
+regex_'28'3c'3c'2d'5cs'2a'27'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'27'29 = compileRegex True "(<<-\\s*'([|&;()<>\\s]+)')"
+regex_'28'3c'3c'2d'5cs'2a'5c'5c'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29 = compileRegex True "(<<-\\s*\\\\([|&;()<>\\s]+))"
+regex_'28'3c'3c'2d'5cs'2a'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29 = compileRegex True "(<<-\\s*([|&;()<>\\s]+))"
+regex_'28'3c'3c'5cs'2a'22'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'22'29 = compileRegex True "(<<\\s*\"([|&;()<>\\s]+)\")"
+regex_'28'3c'3c'5cs'2a'27'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'27'29 = compileRegex True "(<<\\s*'([|&;()<>\\s]+)')"
+regex_'28'3c'3c'5cs'2a'5c'5c'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29 = compileRegex True "(<<\\s*\\\\([|&;()<>\\s]+))"
+regex_'28'3c'3c'5cs'2a'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29 = compileRegex True "(<<\\s*([|&;()<>\\s]+))"
+
+parseRules ("Tcsh","Start") =
+  (((parseRules ("Tcsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","Start")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","FindAll") =
+  (((parseRules ("Tcsh","FindComments")))
+   <|>
+   ((parseRules ("Tcsh","FindCommands")))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Tcsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindAll")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","FindMost") =
+  (((parseRules ("Tcsh","FindComments")))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Tcsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindMost")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","FindComments") =
+  (((pFirstNonSpace >> pDetectChar False '#' >>= withAttribute CommentTok) >>~ pushContext ("Tcsh","Comment"))
+   <|>
+   ((pRegExpr regex_'5b'5cs'3b'5d'28'3f'3d'23'29 >>= withAttribute NormalTok) >>~ pushContext ("Tcsh","Comment"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindComments")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","Comment") =
+  (((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","Comment")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("Tcsh","FindCommentsParen") =
+  (((pFirstNonSpace >> pDetectChar False '#' >>= withAttribute CommentTok) >>~ pushContext ("Tcsh","CommentParen"))
+   <|>
+   ((pRegExpr regex_'5b'5cs'3b'5d'28'3f'3d'23'29 >>= withAttribute NormalTok) >>~ pushContext ("Tcsh","CommentParen"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindCommentsParen")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","CommentParen") =
+  (((pRegExpr regex_'5b'5e'29'5d'28'3f'3d'5c'29'29 >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","CommentParen")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("Tcsh","FindCommentsBackq") =
+  (((pFirstNonSpace >> pDetectChar False '#' >>= withAttribute CommentTok) >>~ pushContext ("Tcsh","CommentBackq"))
+   <|>
+   ((pRegExpr regex_'5b'5cs'3b'5d'28'3f'3d'23'29 >>= withAttribute NormalTok) >>~ pushContext ("Tcsh","CommentBackq"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindCommentsBackq")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","CommentBackq") =
+  (((pRegExpr regex_'5b'5e'60'5d'28'3f'3d'60'29 >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","CommentBackq")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("Tcsh","FindCommands") =
+  (((pDetect2Chars False '(' '(' >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","ExprDblParen"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5c'5b'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","ExprDblBracket"))
+   <|>
+   ((pRegExpr regex_'5cs'5c'5b'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","ExprDblBracket"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","ExprBracket"))
+   <|>
+   ((pRegExpr regex_'5cs'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","ExprBracket"))
+   <|>
+   ((pRegExpr regex_'5c'7b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","Group"))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","SubShell"))
+   <|>
+   ((pRegExpr regex_'5cbdo'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbdone'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbelse'5cs'2bif'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbif'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbendif'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbswitch'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","Switch"))
+   <|>
+   ((pRegExpr regex_'2d'5bA'2dZa'2dz0'2d9'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'2d'2d'5ba'2dz'5d'5bA'2dZa'2dz0'2d9'5f'2d'5d'2a >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'5cb'40'5cs >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbset'5cs >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbsetenv'5cs >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","CmdSetEnv"))
+   <|>
+   ((pString False ":()" >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5cbfunction'5cb >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","FunctionDef"))
+   <|>
+   ((pKeyword " \n\t()!+,<=>&*/;?|~\\`" list_keywords >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t()!+,<=>&*/;?|~\\`" list_builtins >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t()!+,<=>&*/;?|~\\`" list_unixcommands >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t()!+,<=>&*/;?|~\\`" list_builtins'5fvar >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","VarName"))
+   <|>
+   ((pRegExpr regex_'28'3c'3c'3f'7c'3e'3e'3f'26'3f'21'3f'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'28'5b'7c'26'5d'29'5c1'3f >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5bA'2dZa'2dz'5f'3a'5d'5bA'2dZa'2dz0'2d9'5f'3a'23'25'40'2d'5d'2a'5cs'2a'5c'28'5c'29 >>= withAttribute FunctionTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindCommands")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","FindOthers") =
+  (((pRegExpr regex_'5c'5c'5b'3b'22'5c'5c'27'24'60'7b'7d'28'29'7c'26'3c'3e'2a_'5d >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'5b'5cw'5f'40'2e'25'2a'3f'2b'2d'5d'7c'5c'5c_'29'2a'28'3f'3d'2f'29 >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'7e'5cw'2a >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'2f'28'5b'5cw'5f'40'2e'25'2a'3f'2b'2d'5d'7c'5c'5c_'29'2a'28'3f'3d'28'5b'5cs'2f'29'3a'3b'24'60'27'22'5d'7c'24'29'29 >>= withAttribute NormalTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindOthers")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","FindStrings") =
+  (((pDetectChar False '\'' >>= withAttribute StringTok) >>~ pushContext ("Tcsh","StringSQ"))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("Tcsh","StringDQ"))
+   <|>
+   ((pDetect2Chars False '$' '\'' >>= withAttribute StringTok) >>~ pushContext ("Tcsh","StringEsc"))
+   <|>
+   ((pDetect2Chars False '$' '"' >>= withAttribute StringTok) >>~ pushContext ("Tcsh","StringDQ"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindStrings")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","FindSubstitutions") =
+  (((pRegExpr regex_'5c'24'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'5b >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","Subscript"))
+   <|>
+   ((pRegExpr regex_'5c'24'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d'5c'7d >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'23'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'7d >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'21'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'2a'3f'5c'7d >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","VarBrace"))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d'28'3f'3d'5b'3a'23'25'2f'5d'29 >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","VarBrace"))
+   <|>
+   ((pString False "$((" >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","ExprDblParenSubst"))
+   <|>
+   ((pDetectChar False '`' >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","SubstBackq"))
+   <|>
+   ((pRegExpr regex_'5c'5c'5b'60'24'5c'5c'5d >>= withAttribute DataTypeTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindSubstitutions")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","FindTests") =
+  (((pRegExpr regex_'2d'5brwxXeozsfdlbcpSugktRLDIFNZ'5d'28'3f'3d'5cs'29 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'2d'5bAMCUG'5d'3a'3f'28'3f'3d'5cs'29 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'2dP'5b0'2d7'5d'7b'2c3'7d'3a'3f'28'3f'3d'5cs'29 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'28'5b'7c'26'3d'3e'3c'5d'29'5c1 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5b'7c'5e'26'3e'3c'2b'5c'2d'2a'2f'25'21'7e'5d >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'28'5b'21'3d'5d'7e'7c'5b'21'3e'3c'5d'3d'29 >>= withAttribute OtherTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","FindTests")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","ExprDblParen") =
+  (((pDetect2Chars False ')' ')' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Tcsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","ExprDblParen")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","ExprDblParenSubst") =
+  (((pDetect2Chars False ')' ')' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Tcsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","ExprDblParenSubst")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","ExprSubParen") =
+  (((pDetectChar False ')' >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Tcsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","ExprSubParen")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","ExprBracket") =
+  (((pRegExpr regex_'5cs'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Tcsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Tcsh","FindTests")))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","ExprBracket")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","ExprDblBracket") =
+  (((pRegExpr regex_'5cs'5c'5d'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5c'5d'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Tcsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Tcsh","FindTests")))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","ExprDblBracket")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","Group") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Tcsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","Group")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","SubShell") =
+  (((pDetectChar False ')' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Tcsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","SubShell")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","Assign") =
+  (((pDetectChar False '(' >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","AssignArray"))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Tcsh","FindOthers")))
+   <|>
+   ((pRegExpr regex_'5b'5cw'3a'2c'2b'5f'2e'2f'2d'5d'2b >>= withAttribute NormalTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Tcsh","AssignArray") =
+  (((pDetectChar False ')' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '[' >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","Subscript"))
+   <|>
+   ((pDetectChar False '=' >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","Assign"))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","AssignArray")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","AssignSubscr") =
+  (((pDetectChar False '[' >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","Subscript"))
+   <|>
+   ((pDetectChar False '=' >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","Assign"))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Tcsh","FindOthers")))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Tcsh","Subscript") =
+  (((pDetectChar False ']' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Tcsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","Subscript")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("Tcsh","FunctionDef") =
+  (((pRegExpr regex_'5cs'2b'5bA'2dZa'2dz'5f'3a'5d'5bA'2dZa'2dz0'2d9'5f'3a'23'25'40'2d'5d'2a'28'5cs'2a'5c'28'5c'29'29'3f >>= withAttribute FunctionTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Tcsh","CmdSetEnv") =
+  (((pRegExpr regex_'5cb'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False ' ' >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","Assign"))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Tcsh","VarName") =
+  (((pRegExpr regex_'2d'5bA'2dZa'2dz0'2d9'5d'2b >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'2d'2d'5ba'2dz'5d'5bA'2dZa'2dz0'2d9'5f'2d'5d'2a >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'5cb'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute OtherTok))
+   <|>
+   ((pDetectChar False '[' >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","Subscript"))
+   <|>
+   ((pDetectChar False '=' >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","Assign"))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   ((pRegExpr regex_'5b'5e'5d'7d'29'7c'3b'60'26'3e'3c'5d >>= withAttribute NormalTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Tcsh","ProcessSubst") =
+  (((pDetectChar False ')' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Tcsh","FindCommentsParen")))
+   <|>
+   ((parseRules ("Tcsh","FindCommands")))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Tcsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","ProcessSubst")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","StringSQ") =
+  (((pDetectChar False '\'' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","StringSQ")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("Tcsh","StringDQ") =
+  (((pDetectChar False '"' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5c'5c'5b'60'22'5c'5c'24'5cn'5d >>= withAttribute DataTypeTok))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","StringDQ")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("Tcsh","StringEsc") =
+  (((pDetectChar False '\'' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5c'5c'5babefnrtv'5c'5c'27'5d >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28'5b0'2d7'5d'7b1'2c3'7d'7cx'5bA'2dFa'2df0'2d9'5d'7b1'2c2'7d'7cc'2e'29 >>= withAttribute DataTypeTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","StringEsc")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("Tcsh","VarBrace") =
+  (((pDetectChar False '}' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '[' >>= withAttribute OtherTok) >>~ pushContext ("Tcsh","Subscript"))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","VarBrace")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("Tcsh","SubstFile") =
+  (((pDetectChar False ')' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Tcsh","FindCommentsParen")))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Tcsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","SubstFile")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","SubstCommand") =
+  (((pDetectChar False ')' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Tcsh","FindCommentsParen")))
+   <|>
+   ((parseRules ("Tcsh","FindCommands")))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Tcsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","SubstCommand")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","SubstBackq") =
+  (((pDetectChar False '`' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Tcsh","FindCommentsBackq")))
+   <|>
+   ((parseRules ("Tcsh","FindCommands")))
+   <|>
+   ((parseRules ("Tcsh","FindStrings")))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Tcsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","SubstBackq")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","Switch") =
+  (((pRegExpr regex_'5cscase'5cb >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","SwitchCase"))
+   <|>
+   ((pRegExpr regex_'5csdefault'5cb >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","SwitchDefault"))
+   <|>
+   ((pRegExpr regex_'5cbendsw'28'3f'3d'24'7c'5b'5cs'3b'29'5d'29 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","Switch")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","SwitchCase") =
+  (((pDetectChar False ':' >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","SwitchExpr"))
+   <|>
+   ((parseRules ("Tcsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","SwitchCase")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","SwitchDefault") =
+  (((pDetectChar False ':' >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","SwitchExpr"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","SwitchDefault")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","SwitchExpr") =
+  (((pRegExpr regex_'5csbreaksw'5cb >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((lookAhead (pRegExpr regex_'5cscase'5cb) >> (popContext >> popContext) >> currentContext >>= parseRules))
+   <|>
+   ((parseRules ("Tcsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","SwitchExpr")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","HereDoc") =
+  (((lookAhead (pRegExpr regex_'28'3c'3c'2d'5cs'2a'22'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'22'29) >> pushContext ("Tcsh","HereDocIQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'2d'5cs'2a'27'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'27'29) >> pushContext ("Tcsh","HereDocIQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'2d'5cs'2a'5c'5c'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29) >> pushContext ("Tcsh","HereDocIQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'2d'5cs'2a'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29) >> pushContext ("Tcsh","HereDocINQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'5cs'2a'22'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'22'29) >> pushContext ("Tcsh","HereDocQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'5cs'2a'27'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'27'29) >> pushContext ("Tcsh","HereDocQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'5cs'2a'5c'5c'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29) >> pushContext ("Tcsh","HereDocQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'5cs'2a'28'5b'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29) >> pushContext ("Tcsh","HereDocNQ") >> currentContext >>= parseRules))
+   <|>
+   ((pString False "<<" >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","HereDoc")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","HereDocRemainder") =
+  (((parseRules ("Tcsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","HereDocRemainder")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","HereDocQ") =
+  (((pRegExprDynamic "%1" >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","HereDocRemainder"))
+   <|>
+   ((pColumn 0 >> pRegExprDynamic "%2[\\s;]*$" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","HereDocQ")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","HereDocNQ") =
+  (((pRegExprDynamic "%1" >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","HereDocRemainder"))
+   <|>
+   ((pColumn 0 >> pRegExprDynamic "%2[\\s;]*$" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","HereDocNQ")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","HereDocIQ") =
+  (((pRegExprDynamic "%1" >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","HereDocRemainder"))
+   <|>
+   ((pColumn 0 >> pRegExprDynamic "\\s*%2[\\s;]*$" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","HereDocIQ")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Tcsh","HereDocINQ") =
+  (((pRegExprDynamic "%1" >>= withAttribute KeywordTok) >>~ pushContext ("Tcsh","HereDocRemainder"))
+   <|>
+   ((pColumn 0 >> pRegExprDynamic "\\s*%2[\\s;]*$" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("Tcsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Tcsh","HereDocINQ")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Alerts", _) = Text.Highlighting.Kate.Syntax.Alert.parseExpression Nothing
+
+parseRules x = parseRules ("Tcsh","Start") <|> fail ("Unknown context" ++ show x)
diff --git a/Text/Highlighting/Kate/Syntax/Vhdl.hs b/Text/Highlighting/Kate/Syntax/Vhdl.hs
--- a/Text/Highlighting/Kate/Syntax/Vhdl.hs
+++ b/Text/Highlighting/Kate/Syntax/Vhdl.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file vhdl.xml, version 1.10, by 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) -}
+   highlighting file vhdl.xml, version 1.11, by 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) -}
 
 module Text.Highlighting.Kate.Syntax.Vhdl
           (highlight, parseExpression, syntaxName, syntaxExtensions)
@@ -47,8 +47,14 @@
     then case context of
       ("VHDL","start") -> return ()
       ("VHDL","package") -> return ()
+      ("VHDL","packagemain") -> return ()
+      ("VHDL","packagefunction") -> return ()
       ("VHDL","packagebody") -> return ()
+      ("VHDL","packagebodymain") -> return ()
+      ("VHDL","packagebodyfunc1") -> return ()
+      ("VHDL","packagebodyfunc2") -> return ()
       ("VHDL","architecture_main") -> return ()
+      ("VHDL","arch_start") -> return ()
       ("VHDL","arch_decl") -> return ()
       ("VHDL","detect_arch_parts") -> return ()
       ("VHDL","generate1") -> return ()
@@ -56,14 +62,22 @@
       ("VHDL","process1") -> return ()
       ("VHDL","proc_rules") -> return ()
       ("VHDL","instance") -> return ()
-      ("VHDL","forOrWhile") -> return ()
+      ("VHDL","instanceMap") -> return ()
+      ("VHDL","instanceInnerPar") -> return ()
+      ("VHDL","forwhile1") -> return ()
+      ("VHDL","forwhile2") -> return ()
       ("VHDL","if_start") -> return ()
       ("VHDL","if") -> return ()
       ("VHDL","case1") -> return ()
       ("VHDL","case2") -> return ()
       ("VHDL","caseWhen") -> return ()
+      ("VHDL","caseWhen2") -> return ()
       ("VHDL","entity") -> return ()
       ("VHDL","entity_main") -> return ()
+      ("VHDL","configuration") -> return ()
+      ("VHDL","conf_start") -> return ()
+      ("VHDL","conf_decl") -> return ()
+      ("VHDL","conf_for") -> return ()
       ("VHDL","preDetection") -> return ()
       ("VHDL","generalDetection") -> return ()
       ("VHDL","comment") -> (popContext) >> pEndLine
@@ -81,78 +95,149 @@
   return (attr, txt)
 
 list_keywordsToplevel = Set.fromList $ words $ "file library use"
-list_keywords = Set.fromList $ words $ "access after alias all array assert assume assume_guarantee attribute begin block body bus component constant context cover default disconnect downto end exit fairness file force function generate generic group guarded impure inertial is label linkage literal map new next null of on open others parameter port postponed procedure process property protected pure range record register reject release report return select sequence severity signal shared strong subtype to transport type unaffected units until variable vmode vprop vunit wait when with note warning error failure in inout out buffer and abs or xor xnor not mod nand nor rem rol ror sla sra sll srl"
+list_keywords = Set.fromList $ words $ "access after alias all array assert assume assume_guarantee attribute begin block body bus component constant context cover default disconnect downto end exit fairness falling_edge file force function generate generic group guarded impure inertial is label linkage literal map new next null of on open others parameter port postponed procedure process property protected pure range record register reject release report return rising_edge select sequence severity signal shared strong subtype to transport type unaffected units until variable vmode vprop vunit wait when with note warning error failure in inout out buffer and abs or xor xnor not mod nand nor rem rol ror sla sra sll srl"
 list_if = Set.fromList $ words $ "if else elsif then"
 list_forOrWhile = Set.fromList $ words $ "loop"
 list_directions = Set.fromList $ words $ "in inout out buffer linkage"
-list_signals = Set.fromList $ words $ "signal variable constant type"
+list_signals = Set.fromList $ words $ "signal variable constant type attribute"
 list_range = Set.fromList $ words $ "to downto others"
 list_case = Set.fromList $ words $ "case when"
+list_timeunits = Set.fromList $ words $ "fs ps ns us ms sec min hr"
 list_types = Set.fromList $ words $ "bit bit_vector character boolean boolean_vector integer integer_vector real real_vector time time_vector delay_length string severity_level positive natural file_open_kind file_open_status signed unsigned unresolved_unsigned unresolved_signed line text side width std_logic std_logic_vector std_ulogic std_ulogic_vector x01 x01z ux01 ux01z qsim_state qsim_state_vector qsim_12state qsim_12state_vector qsim_strength mux_bit mux_vector reg_bit reg_vector wor_bit wor_vector"
 
-regex_'28'5cb'29'28package'5cs'2b'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2bis'29'5cb = compileRegex True "(\\b)(package\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+is)\\b"
-regex_'28'5cb'29'28package'5cs'2bbody'5cs'2b'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2bis'29'5cb = compileRegex True "(\\b)(package\\s+body\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+is)\\b"
-regex_architecture'5cs'2b'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2bof'5cs'2b'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2bis = compileRegex True "architecture\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+of\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+is"
-regex_'28'5cb'29generate'5cb = compileRegex True "(\\b)generate\\b"
-regex_'28'5cb'29end'5cs'2bgenerate'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b = compileRegex True "(\\b)end\\s+generate(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?\\s*;"
+regex_'28'5cb'29package'5cb = compileRegex True "(\\b)package\\b"
+regex_'28'5cb'29is'5cb = compileRegex True "(\\b)is\\b"
+regex_'28'5cb'29end'5cb = compileRegex True "(\\b)end\\b"
+regex_'28'5cb'29function'5cb = compileRegex True "(\\b)function\\b"
+regex_'28'5cb'29'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'5cb = compileRegex True "(\\b)\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b\\b"
+regex_'28'5cb'29end'5cs'2bpackage'5cb = compileRegex True "(\\b)end\\s+package\\b"
+regex_'28'5cb'29begin'5cb = compileRegex True "(\\b)begin\\b"
+regex_'28'5cb'29'28generate'7cloop'29'5cb = compileRegex True "(\\b)(generate|loop)\\b"
+regex_'28'5cb'29'28for'7cif'7cwhile'29'5cb = compileRegex True "(\\b)(for|if|while)\\b"
+regex_'28'5cb'29end'5cs'2b'28generate'7cloop'29'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f = compileRegex True "(\\b)end\\s+(generate|loop)(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?"
+regex_'28'5cb'29process'5cb = compileRegex True "(\\b)process\\b"
 regex_'28'5cb'29'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'28'3f'3d'5cs'2a'3a'28'3f'21'3d'29'29 = compileRegex True "(\\b)\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b(?=\\s*:(?!=))"
-regex_'28'5cb'29'28if'29'5cb = compileRegex True "(\\b)(if)\\b"
-regex_'28'5cb'29'28'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2a'3a'5cs'2a'29'3f'28'28for'7cwhile'29'5cs'2b'2e'2b'5cs'2b'29'3floop'5cb = compileRegex True "(\\b)((\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s*:\\s*)?((for|while)\\s+.+\\s+)?loop\\b"
-regex_'28'5cb'29end'5cs'2bloop'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b = compileRegex True "(\\b)end\\s+loop(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?\\s*;"
+regex_'28'5cb'29if'5cb = compileRegex True "(\\b)if\\b"
+regex_'28'5cb'29case'5cb = compileRegex True "(\\b)case\\b"
+regex_'28'5cb'29'28port'7cgeneric'29'5cs'2bmap'5cs'2a'5c'28 = compileRegex True "(\\b)(port|generic)\\s+map\\s*\\("
+regex_'28'5cb'29loop'5cb = compileRegex True "(\\b)loop\\b"
+regex_'28'5cb'29'28for'7cwhile'29'5cb = compileRegex True "(\\b)(for|while)\\b"
+regex_'28'5cb'29end'5cs'2bloop'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f = compileRegex True "(\\b)end\\s+loop(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?"
+regex_'28'5cb'29then'5cb = compileRegex True "(\\b)then\\b"
 regex_'28'5cb'29end'5cs'2bif'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b = compileRegex True "(\\b)end\\s+if(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?\\s*;"
-regex_'28'5cb'29end'5cs'2bcase'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b = compileRegex True "(\\b)end\\s+case(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?\\s*;"
+regex_'28'5cb'29end'5cs'2bcase'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b = compileRegex True "(\\b)end\\s+case(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?\\s*;"
 regex_'28'5cb'29when'5cb = compileRegex True "(\\b)when\\b"
+regex_'5cs'2awhen'5cb = compileRegex True "\\s*when\\b"
+regex_'5cs'2aend'5cs'2bcase'5cb = compileRegex True "\\s*end\\s+case\\b"
 regex_'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29 = compileRegex True "(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)"
 regex_generic = compileRegex True "generic"
 regex_port = compileRegex True "port"
+regex_end'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f = compileRegex True "end(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?"
 
 parseRules ("VHDL","start") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((lookAhead (pRegExprDynamic "architecture\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)") >> pushContext ("VHDL","architecture_main") >> currentContext >>= parseRules))
+   ((lookAhead (pRegExprDynamic "(\\b)architecture\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\b") >> pushContext ("VHDL","architecture_main") >> currentContext >>= parseRules))
    <|>
    ((pString False "entity" >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","entity"))
    <|>
-   ((lookAhead (pRegExpr regex_'28'5cb'29'28package'5cs'2b'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2bis'29'5cb) >> pushContext ("VHDL","package") >> currentContext >>= parseRules))
+   ((lookAhead (pRegExprDynamic "(\\b)package\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+is\\b") >> pushContext ("VHDL","package") >> currentContext >>= parseRules))
    <|>
-   ((lookAhead (pRegExpr regex_'28'5cb'29'28package'5cs'2bbody'5cs'2b'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2bis'29'5cb) >> pushContext ("VHDL","packagebody") >> currentContext >>= parseRules))
+   ((lookAhead (pRegExprDynamic "(\\b)package\\s+body\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+is\\b") >> pushContext ("VHDL","packagebody") >> currentContext >>= parseRules))
    <|>
+   ((lookAhead (pRegExprDynamic "(\\b)configuration\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\b") >> pushContext ("VHDL","configuration") >> currentContext >>= parseRules))
+   <|>
    ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_keywordsToplevel >>= withAttribute KeywordTok))
    <|>
    (currentContext >>= \x -> guard (x == ("VHDL","start")) >> pDefault >>= withAttribute NormalTok))
 
 parseRules ("VHDL","package") =
-  (((pString True "%2" >>= withAttribute KeywordTok))
+  (((parseRules ("VHDL","preDetection")))
    <|>
-   ((parseRules ("VHDL","preDetection")))
+   ((pRegExpr regex_'28'5cb'29package'5cb >>= withAttribute KeywordTok))
    <|>
-   ((pString False "begin" >>= withAttribute KeywordTok))
+   ((pRegExpr regex_'28'5cb'29is'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","packagemain"))
    <|>
-   ((pRegExprDynamic "(\\b)end(\\s+package)?(\\s+%3)?\\s*;" >>= withAttribute KeywordTok) >>~ (popContext))
+   ((pRegExprDynamic "(\\b)%2\\b" >>= withAttribute KeywordTok))
    <|>
+   ((pRegExprDynamic "(\\b)end(\\s+package)?(\\s+%2)?\\s*;" >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
    ((parseRules ("VHDL","generalDetection")))
    <|>
    (currentContext >>= \x -> guard (x == ("VHDL","package")) >> pDefault >>= withAttribute NormalTok))
 
+parseRules ("VHDL","packagemain") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'5cb'29end'5cb) >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((pRegExpr regex_'28'5cb'29function'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","packagefunction"))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","packagemain")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("VHDL","packagefunction") =
+  (((pRegExpr regex_'28'5cb'29'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'5cb >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","packagefunction")) >> pDefault >>= withAttribute NormalTok))
+
 parseRules ("VHDL","packagebody") =
-  (((pString True "%2" >>= withAttribute KeywordTok))
+  (((parseRules ("VHDL","preDetection")))
    <|>
-   ((parseRules ("VHDL","preDetection")))
+   ((pRegExpr regex_'28'5cb'29package'5cb >>= withAttribute KeywordTok))
    <|>
-   ((pString False "begin" >>= withAttribute KeywordTok))
+   ((pRegExpr regex_'28'5cb'29is'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","packagebodymain"))
    <|>
-   ((pRegExprDynamic "(\\b)end(\\s+package)?(\\s+%3)?\\s*;" >>= withAttribute KeywordTok) >>~ (popContext))
+   ((pRegExprDynamic "(\\b)%2\\b" >>= withAttribute KeywordTok))
    <|>
+   ((pRegExprDynamic "(\\b)end(\\s+package)?(\\s+%2)?\\s*;" >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
    ((parseRules ("VHDL","generalDetection")))
    <|>
    (currentContext >>= \x -> guard (x == ("VHDL","packagebody")) >> pDefault >>= withAttribute NormalTok))
 
+parseRules ("VHDL","packagebodymain") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'5cb'29end'5cs'2bpackage'5cb) >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExprDynamic "(\\b)function\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\b") >> pushContext ("VHDL","packagebodyfunc1") >> currentContext >>= parseRules))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","packagebodymain")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("VHDL","packagebodyfunc1") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pRegExpr regex_'28'5cb'29begin'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","packagebodyfunc2"))
+   <|>
+   ((pRegExprDynamic "(\\b)end(\\s+function)?(\\s+%2)?\\b" >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pRegExprDynamic "(\\b)%2\\b" >>= withAttribute KeywordTok))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","packagebodyfunc1")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("VHDL","packagebodyfunc2") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((lookAhead (pRegExprDynamic "(\\b)end(\\s+function)?\\b") >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((pRegExpr regex_'28'5cb'29begin'5cb >>= withAttribute KeywordTok))
+   <|>
+   ((parseRules ("VHDL","proc_rules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","packagebodyfunc2")) >> pDefault >>= withAttribute NormalTok))
+
 parseRules ("VHDL","architecture_main") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((pRegExpr regex_architecture'5cs'2b'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2bof'5cs'2b'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2bis >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","arch_decl"))
+   ((lookAhead (pRegExprDynamic "(\\b)architecture\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+of\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+is") >> pushContext ("VHDL","arch_start") >> currentContext >>= parseRules))
    <|>
-   ((pRegExprDynamic "(\\b)end(\\s+architecture)?(\\s+%1)?\\s*;" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   ((pRegExprDynamic "(\\b)end(\\s+architecture)?(\\s+%2)?\\s*;" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
    <|>
    ((pRegExprDynamic "(\\b)end(\\s+architecture)?(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s*;" >>= withAttribute ErrorTok) >>~ (popContext >> popContext))
    <|>
@@ -160,6 +245,19 @@
    <|>
    (currentContext >>= \x -> guard (x == ("VHDL","architecture_main")) >> pDefault >>= withAttribute NormalTok))
 
+parseRules ("VHDL","arch_start") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pRegExpr regex_'28'5cb'29is'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","arch_decl"))
+   <|>
+   ((pRegExprDynamic "(\\b)%2\\b" >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExprDynamic "(\\b)%4\\b" >>= withAttribute FunctionTok))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","arch_start")) >> pDefault >>= withAttribute KeywordTok))
+
 parseRules ("VHDL","arch_decl") =
   (((parseRules ("VHDL","preDetection")))
    <|>
@@ -167,18 +265,18 @@
    <|>
    ((pString False "component" >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","entity"))
    <|>
-   ((pString False "begin" >>= withAttribute KeywordTok) >>~ (popContext))
+   ((pString False "begin" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
    <|>
    ((parseRules ("VHDL","generalDetection")))
    <|>
    (currentContext >>= \x -> guard (x == ("VHDL","arch_decl")) >> pDefault >>= withAttribute NormalTok))
 
 parseRules ("VHDL","detect_arch_parts") =
-  (((lookAhead (pRegExprDynamic "(\\b)((\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s*:\\s*)(if|for).*\\s+generate\\b") >> pushContext ("VHDL","generate1") >> currentContext >>= parseRules))
+  (((lookAhead (pRegExprDynamic "(\\b)(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b\\s*:\\s*)(if|for).*\\s+generate\\b") >> pushContext ("VHDL","generate1") >> currentContext >>= parseRules))
    <|>
-   ((lookAhead (pRegExprDynamic "(\\b)((\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s*:\\s*)?process\\b") >> pushContext ("VHDL","process1") >> currentContext >>= parseRules))
+   ((lookAhead (pRegExprDynamic "(\\b)(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b\\s*:\\s*)?process\\b") >> pushContext ("VHDL","process1") >> currentContext >>= parseRules))
    <|>
-   ((lookAhead (pRegExprDynamic "\\b(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s*:\\s*(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)") >> pushContext ("VHDL","instance") >> currentContext >>= parseRules))
+   ((lookAhead (pRegExprDynamic "(\\b)(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s*:\\s*((entity\\s+)?(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)(\\.\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?)") >> pushContext ("VHDL","instance") >> currentContext >>= parseRules))
    <|>
    ((parseRules ("VHDL","generalDetection")))
    <|>
@@ -187,13 +285,11 @@
 parseRules ("VHDL","generate1") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((pRegExpr regex_'28'5cb'29generate'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","generate2"))
+   ((pRegExpr regex_'28'5cb'29'28generate'7cloop'29'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","generate2"))
    <|>
    ((pRegExprDynamic "(\\b)%3\\b" >>= withAttribute KeywordTok))
    <|>
-   ((pString False "for" >>= withAttribute KeywordTok))
-   <|>
-   ((pString False "if" >>= withAttribute KeywordTok))
+   ((pRegExpr regex_'28'5cb'29'28for'7cif'7cwhile'29'5cb >>= withAttribute KeywordTok))
    <|>
    ((parseRules ("VHDL","generalDetection")))
    <|>
@@ -202,9 +298,9 @@
 parseRules ("VHDL","generate2") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((pString False "begin" >>= withAttribute KeywordTok))
+   ((pRegExpr regex_'28'5cb'29begin'5cb >>= withAttribute KeywordTok))
    <|>
-   ((pRegExpr regex_'28'5cb'29end'5cs'2bgenerate'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   ((pRegExpr regex_'28'5cb'29end'5cs'2b'28generate'7cloop'29'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
    <|>
    ((parseRules ("VHDL","detect_arch_parts")))
    <|>
@@ -213,13 +309,13 @@
 parseRules ("VHDL","process1") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((pRegExprDynamic "end\\s+process(\\s+%3)?\\s*;" >>= withAttribute KeywordTok) >>~ (popContext))
+   ((pRegExprDynamic "(\\b)end\\s+process(\\s+%3)?" >>= withAttribute KeywordTok) >>~ (popContext))
    <|>
-   ((pRegExprDynamic "end\\s+process(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?" >>= withAttribute ErrorTok) >>~ (popContext))
+   ((pRegExprDynamic "(\\b)end\\s+process(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?" >>= withAttribute ErrorTok) >>~ (popContext))
    <|>
-   ((pString False "process" >>= withAttribute KeywordTok))
+   ((pRegExpr regex_'28'5cb'29process'5cb >>= withAttribute KeywordTok))
    <|>
-   ((pString False "begin" >>= withAttribute KeywordTok))
+   ((pRegExpr regex_'28'5cb'29begin'5cb >>= withAttribute KeywordTok))
    <|>
    ((parseRules ("VHDL","proc_rules")))
    <|>
@@ -228,11 +324,11 @@
 parseRules ("VHDL","proc_rules") =
   (((pRegExpr regex_'28'5cb'29'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'28'3f'3d'5cs'2a'3a'28'3f'21'3d'29'29 >>= withAttribute KeywordTok))
    <|>
-   ((pRegExpr regex_'28'5cb'29'28if'29'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","if_start"))
+   ((pRegExpr regex_'28'5cb'29if'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","if_start"))
    <|>
-   ((lookAhead (pRegExprDynamic "(\\b)(case)\\b") >> pushContext ("VHDL","case1") >> currentContext >>= parseRules))
+   ((lookAhead (pRegExpr regex_'28'5cb'29case'5cb) >> pushContext ("VHDL","case1") >> currentContext >>= parseRules))
    <|>
-   ((pRegExpr regex_'28'5cb'29'28'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'5cs'2a'3a'5cs'2a'29'3f'28'28for'7cwhile'29'5cs'2b'2e'2b'5cs'2b'29'3floop'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","forOrWhile"))
+   ((lookAhead (pRegExprDynamic "(\\b)((\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s*:\\s*)?((for|while)\\s+.+\\s+)loop\\b") >> pushContext ("VHDL","forwhile1") >> currentContext >>= parseRules))
    <|>
    ((parseRules ("VHDL","generalDetection")))
    <|>
@@ -241,29 +337,74 @@
 parseRules ("VHDL","instance") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((pRegExprDynamic "\\b%1\\b" >>= withAttribute KeywordTok))
+   ((pRegExprDynamic "(\\b)%4\\b" >>= withAttribute FunctionTok))
    <|>
-   ((pRegExprDynamic "\\b%2\\b" >>= withAttribute KeywordTok))
+   ((pRegExprDynamic "(\\b)%3\\b" >>= withAttribute KeywordTok))
    <|>
-   ((pDetect2Chars False ')' ';' >>= withAttribute NormalTok) >>~ (popContext))
+   ((pRegExpr regex_'28'5cb'29'28port'7cgeneric'29'5cs'2bmap'5cs'2a'5c'28 >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","instanceMap"))
    <|>
+   ((pDetectChar False ';' >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
    ((parseRules ("VHDL","generalDetection")))
    <|>
-   (currentContext >>= \x -> guard (x == ("VHDL","instance")) >> pDefault >>= withAttribute NormalTok))
+   (currentContext >>= \x -> guard (x == ("VHDL","instance")) >> pDefault >>= withAttribute ErrorTok))
 
-parseRules ("VHDL","forOrWhile") =
-  (((pRegExpr regex_'28'5cb'29end'5cs'2bloop'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b >>= withAttribute KeywordTok) >>~ (popContext))
+parseRules ("VHDL","instanceMap") =
+  (((pAnyChar "<;:" >>= withAttribute ErrorTok))
    <|>
-   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_forOrWhile >>= withAttribute KeywordTok))
+   ((pDetectChar False ':' >>= withAttribute ErrorTok))
    <|>
+   ((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pDetectChar False ')' >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("VHDL","instanceInnerPar"))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","instanceMap")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("VHDL","instanceInnerPar") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pDetectChar False ')' >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("VHDL","instanceInnerPar"))
+   <|>
+   ((pDetectChar False ';' >>= withAttribute ErrorTok))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","instanceInnerPar")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("VHDL","forwhile1") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pRegExpr regex_'28'5cb'29loop'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","forwhile2"))
+   <|>
+   ((pRegExprDynamic "(\\b)%3\\b" >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'28'5cb'29'28for'7cwhile'29'5cb >>= withAttribute KeywordTok))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","forwhile1")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("VHDL","forwhile2") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pRegExpr regex_'28'5cb'29begin'5cb >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'28'5cb'29end'5cs'2bloop'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
    ((parseRules ("VHDL","proc_rules")))
    <|>
-   (currentContext >>= \x -> guard (x == ("VHDL","forOrWhile")) >> pDefault >>= withAttribute NormalTok))
+   (currentContext >>= \x -> guard (x == ("VHDL","forwhile2")) >> pDefault >>= withAttribute NormalTok))
 
 parseRules ("VHDL","if_start") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((pString False "then" >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","if"))
+   ((pRegExpr regex_'28'5cb'29then'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","if"))
    <|>
    ((parseRules ("VHDL","generalDetection")))
    <|>
@@ -283,34 +424,49 @@
 parseRules ("VHDL","case1") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((pString False "is" >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","case2"))
+   ((pRegExpr regex_'28'5cb'29is'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","case2"))
    <|>
    ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_case >>= withAttribute KeywordTok))
    <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
    (currentContext >>= \x -> guard (x == ("VHDL","case1")) >> pDefault >>= withAttribute NormalTok))
 
 parseRules ("VHDL","case2") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((pRegExpr regex_'28'5cb'29end'5cs'2bcase'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   ((pRegExpr regex_'28'5cb'29end'5cs'2bcase'28'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
    <|>
-   ((pString False "when" >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","caseWhen"))
+   ((lookAhead (pRegExprDynamic "(\\b)when(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)?\\b") >> pushContext ("VHDL","caseWhen") >> currentContext >>= parseRules))
    <|>
    ((parseRules ("VHDL","proc_rules")))
    <|>
    (currentContext >>= \x -> guard (x == ("VHDL","case2")) >> pDefault >>= withAttribute NormalTok))
 
 parseRules ("VHDL","caseWhen") =
-  (((parseRules ("VHDL","preDetection")))
+  (((pDetect2Chars False '=' '>' >>= withAttribute OtherTok) >>~ pushContext ("VHDL","caseWhen2"))
    <|>
-   ((lookAhead (pRegExpr regex_'28'5cb'29when'5cb) >> (popContext) >> currentContext >>= parseRules))
+   ((parseRules ("VHDL","preDetection")))
    <|>
-   ((lookAhead (pRegExpr regex_'28'5cb'29end'5cs'2bcase'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f'5cs'2a'3b) >> (popContext) >> currentContext >>= parseRules))
+   ((pRegExpr regex_'28'5cb'29when'5cb >>= withAttribute KeywordTok))
    <|>
+   ((pRegExprDynamic "(\\b)%2\\b" >>= withAttribute KeywordTok))
+   <|>
    ((parseRules ("VHDL","proc_rules")))
    <|>
    (currentContext >>= \x -> guard (x == ("VHDL","caseWhen")) >> pDefault >>= withAttribute NormalTok))
 
+parseRules ("VHDL","caseWhen2") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pColumn 0 >> lookAhead (pRegExpr regex_'5cs'2awhen'5cb) >> (popContext >> popContext) >> currentContext >>= parseRules))
+   <|>
+   ((pColumn 0 >> lookAhead (pRegExpr regex_'5cs'2aend'5cs'2bcase'5cb) >> (popContext >> popContext) >> currentContext >>= parseRules))
+   <|>
+   ((parseRules ("VHDL","proc_rules")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","caseWhen2")) >> pDefault >>= withAttribute NormalTok))
+
 parseRules ("VHDL","entity") =
   (((parseRules ("VHDL","preDetection")))
    <|>
@@ -335,6 +491,52 @@
    <|>
    (currentContext >>= \x -> guard (x == ("VHDL","entity_main")) >> pDefault >>= withAttribute NormalTok))
 
+parseRules ("VHDL","configuration") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((lookAhead (pRegExprDynamic "(\\b)configuration\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+of\\s+(\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s+is") >> pushContext ("VHDL","conf_start") >> currentContext >>= parseRules))
+   <|>
+   ((pRegExprDynamic "(\\b)end(\\s+configuration)?(\\s+%2)?\\s*;" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((pRegExprDynamic "(\\b)end(\\s+configuration)?(\\s+\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b)\\s*;" >>= withAttribute ErrorTok) >>~ (popContext >> popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","configuration")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("VHDL","conf_start") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pRegExpr regex_'28'5cb'29is'5cb >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","conf_decl"))
+   <|>
+   ((pRegExprDynamic "(\\b)%2\\b" >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExprDynamic "(\\b)%4\\b" >>= withAttribute FunctionTok))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","conf_start")) >> pDefault >>= withAttribute KeywordTok))
+
+parseRules ("VHDL","conf_decl") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pString False "for" >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","conf_for"))
+   <|>
+   ((lookAhead (pString False "end") >> (popContext >> popContext) >> currentContext >>= parseRules))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","conf_decl")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("VHDL","conf_for") =
+  (((parseRules ("VHDL","preDetection")))
+   <|>
+   ((pString False "for" >>= withAttribute KeywordTok) >>~ pushContext ("VHDL","conf_for"))
+   <|>
+   ((pRegExpr regex_end'28'5cs'2b'5cb'28'3f'21'28'3f'3aprocess'7cconstant'7csignal'7cvariable'29'29'28'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'29'5cb'29'3f >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("VHDL","generalDetection")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("VHDL","conf_for")) >> pDefault >>= withAttribute NormalTok))
+
 parseRules ("VHDL","preDetection") =
   (((pDetect2Chars False '-' '-' >>= withAttribute CommentTok) >>~ pushContext ("VHDL","comment"))
    <|>
@@ -349,6 +551,8 @@
 parseRules ("VHDL","generalDetection") =
   (((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_types >>= withAttribute DataTypeTok))
    <|>
+   ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_timeunits >>= withAttribute DataTypeTok))
+   <|>
    ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_signals >>= withAttribute OtherTok) >>~ pushContext ("VHDL","signal"))
    <|>
    ((pKeyword " \n\t.():!+,-<=>%&*/;?[]^{|}~\\" list_range >>= withAttribute OtherTok))
@@ -374,11 +578,13 @@
 parseRules ("VHDL","attribute") =
   (((pDetectChar False '"' >>= withAttribute BaseNTok) >>~ pushContext ("VHDL","quot in att"))
    <|>
+   ((pDetectChar False '"' >>= withAttribute BaseNTok) >>~ pushContext ("VHDL","quot in att"))
+   <|>
    ((pDetectChar False ' ' >>= withAttribute NormalTok) >>~ (popContext))
    <|>
    ((pDetectChar False '\'' >>= withAttribute BaseNTok) >>~ (popContext))
    <|>
-   ((pAnyChar "()=<>" >>= withAttribute BaseNTok) >>~ (popContext))
+   ((pAnyChar ")=<>" >>= withAttribute BaseNTok) >>~ (popContext))
    <|>
    (currentContext >>= \x -> guard (x == ("VHDL","attribute")) >> pDefault >>= withAttribute BaseNTok))
 
@@ -390,7 +596,7 @@
 parseRules ("VHDL","signal") =
   (((parseRules ("VHDL","preDetection")))
    <|>
-   ((pDetectChar False ';' >>= withAttribute NormalTok) >>~ (popContext))
+   ((lookAhead (pDetectChar False ';') >> (popContext) >> currentContext >>= parseRules))
    <|>
    ((parseRules ("VHDL","generalDetection")))
    <|>
diff --git a/Text/Highlighting/Kate/Syntax/Yacc.hs b/Text/Highlighting/Kate/Syntax/Yacc.hs
--- a/Text/Highlighting/Kate/Syntax/Yacc.hs
+++ b/Text/Highlighting/Kate/Syntax/Yacc.hs
@@ -1,5 +1,5 @@
 {- This module was generated from data in the Kate syntax
-   highlighting file yacc.xml, version 1.03, by Jan Villat (jan.villat@net2000.ch) -}
+   highlighting file yacc.xml, version 1.04, by Jan Villat (jan.villat@net2000.ch) -}
 
 module Text.Highlighting.Kate.Syntax.Yacc
           (highlight, parseExpression, syntaxName, syntaxExtensions)
diff --git a/Text/Highlighting/Kate/Syntax/Zsh.hs b/Text/Highlighting/Kate/Syntax/Zsh.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Zsh.hs
@@ -0,0 +1,757 @@
+{- This module was generated from data in the Kate syntax
+   highlighting file zsh.xml, version 0.1, by Jonathan Kolberg (bulldog98@kubuntu-de.org) -}
+
+module Text.Highlighting.Kate.Syntax.Zsh
+          (highlight, parseExpression, syntaxName, syntaxExtensions)
+where
+import Text.Highlighting.Kate.Types
+import Text.Highlighting.Kate.Common
+import qualified Text.Highlighting.Kate.Syntax.Alert
+import Text.ParserCombinators.Parsec hiding (State)
+import Control.Monad.State
+import Data.Char (isSpace)
+import qualified Data.Set as Set
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "Zsh"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.sh;*.zsh;.zshrc;.zprofile;.zlogin;.zlogout;.profile"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> [SourceLine]
+highlight input = evalState (mapM parseSourceLine $ lines input) startingState
+
+parseSourceLine :: String -> State SyntaxState SourceLine
+parseSourceLine = mkParseSourceLine (parseExpression Nothing)
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: Maybe (String,String)
+                -> KateParser Token
+parseExpression mbcontext = do
+  (lang,cont) <- maybe currentContext return mbcontext
+  result <- parseRules (lang,cont)
+  optional $ do eof
+                updateState $ \st -> st{ synStPrevChar = '\n' }
+                pEndLine
+  return result
+
+startingState = SyntaxState {synStContexts = [("Zsh","Start")], synStLineNumber = 0, synStPrevChar = '\n', synStPrevNonspace = False, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+pEndLine = do
+  updateState $ \st -> st{ synStPrevNonspace = False }
+  context <- currentContext
+  contexts <- synStContexts `fmap` getState
+  if length contexts >= 2
+    then case context of
+      ("Zsh","Start") -> return ()
+      ("Zsh","FindAll") -> return ()
+      ("Zsh","FindMost") -> return ()
+      ("Zsh","FindComments") -> (popContext) >> pEndLine
+      ("Zsh","Comment") -> (popContext) >> pEndLine
+      ("Zsh","FindCommentsParen") -> (popContext) >> pEndLine
+      ("Zsh","CommentParen") -> (popContext) >> pEndLine
+      ("Zsh","FindCommentsBackq") -> (popContext) >> pEndLine
+      ("Zsh","CommentBackq") -> (popContext) >> pEndLine
+      ("Zsh","FindCommands") -> return ()
+      ("Zsh","FindOthers") -> return ()
+      ("Zsh","FindStrings") -> return ()
+      ("Zsh","FindSubstitutions") -> return ()
+      ("Zsh","FindTests") -> return ()
+      ("Zsh","ExprDblParen") -> return ()
+      ("Zsh","ExprDblParenSubst") -> return ()
+      ("Zsh","ExprSubParen") -> return ()
+      ("Zsh","ExprBracket") -> return ()
+      ("Zsh","ExprDblBracket") -> return ()
+      ("Zsh","Group") -> return ()
+      ("Zsh","SubShell") -> return ()
+      ("Zsh","Assign") -> (popContext) >> pEndLine
+      ("Zsh","AssignArray") -> (popContext) >> pEndLine
+      ("Zsh","AssignSubscr") -> (popContext) >> pEndLine
+      ("Zsh","Subscript") -> return ()
+      ("Zsh","FunctionDef") -> (popContext) >> pEndLine
+      ("Zsh","VarName") -> (popContext) >> pEndLine
+      ("Zsh","ProcessSubst") -> return ()
+      ("Zsh","StringSQ") -> return ()
+      ("Zsh","StringDQ") -> return ()
+      ("Zsh","StringEsc") -> return ()
+      ("Zsh","VarBrace") -> return ()
+      ("Zsh","VarAlt") -> return ()
+      ("Zsh","VarSubst") -> return ()
+      ("Zsh","VarSubst2") -> return ()
+      ("Zsh","VarSub") -> return ()
+      ("Zsh","VarSub2") -> return ()
+      ("Zsh","SubstFile") -> return ()
+      ("Zsh","SubstCommand") -> return ()
+      ("Zsh","SubstBackq") -> return ()
+      ("Zsh","Case") -> return ()
+      ("Zsh","CaseIn") -> return ()
+      ("Zsh","CaseExpr") -> return ()
+      ("Zsh","HereDoc") -> return ()
+      ("Zsh","HereDocRemainder") -> (popContext) >> pEndLine
+      ("Zsh","HereDocQ") -> return ()
+      ("Zsh","HereDocNQ") -> return ()
+      ("Zsh","HereDocIQ") -> return ()
+      ("Zsh","HereDocINQ") -> return ()
+      _ -> return ()
+    else return ()
+
+withAttribute attr txt = do
+  when (null txt) $ fail "Parser matched no text"
+  updateState $ \st -> st { synStPrevChar = last txt
+                          , synStPrevNonspace = synStPrevNonspace st || not (all isSpace txt) }
+  return (attr, txt)
+
+list_keywords = Set.fromList $ words $ "else for function in select until while elif then set"
+list_builtins = Set.fromList $ words $ "- . : alias autoload bg bindkey break builtin bye cap cd chdir clone command comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues continue dirs disable disown echo echotc echoti emulate enable eval exec exit false fc fg functions getcap getopts hash history jobs kill let limit log logout noglob popd print printf pushd pushln pwd r rehash return sched set setcap setopt shift source stat suspend test times trap true ttyctl type ulimit umask unalias unfunction unhash unlimit unset unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"
+list_builtins'5fvar = Set.fromList $ words $ "declare export float getln integer unset declare typeset local read readonly"
+list_unixcommands = Set.fromList $ words $ "arch awk bash bunzip2 bzcat bzcmp bzdiff bzegrep bzfgrep bzgrep bzip2 bzip2recover bzless bzmore cat chattr chgrp chmod chown chvt cp date dd deallocvt df dir dircolors dmesg dnsdomainname domainname du dumpkeys echo ed egrep false fgconsole fgrep fuser gawk getkeycodes gocr grep groff groups gunzip gzexe gzip hostname igawk install kbd_mode kbdrate killall last lastb link ln loadkeys loadunimap login ls lsattr lsmod lsmod.old lzcat lzcmp lzdiff lzegrep lzfgrep lzgrep lzless lzcat lzma lzmainfo lzmore mapscrn mesg mkdir mkfifo mknod mktemp more mount mv nano netstat nisdomainname nroff openvt pgawk pidof ping ps pstree pwd rbash readlink red resizecons rm rmdir run-parts sash sed setfont setkeycodes setleds setmetamode setserial sh showkey shred sleep ssed stat stty su sync tar tempfile touch troff true umount uname unicode_start unicode_stop unlink unlzma unxz utmpdump uuidgen vdir wall wc xz xzcat ypdomainname zcat zcmp zdiff zegrep zfgrep zforce zgrep zless zmore znew zsh aclocal aconnect aplay apm apmsleep apropos ar arecord as as86 autoconf autoheader automake awk basename bc bison c++ cal cat cc cdda2wav cdparanoia cdrdao cd-read cdrecord chfn chgrp chmod chown chroot chsh clear cmp co col comm cp cpio cpp cut dc dd df diff diff3 dir dircolors directomatic dirname du env expr fbset file find flex flex++ fmt free ftp funzip fuser g++ gawk gc gcc gdb getent getopt gettext gettextize gimp gimp-remote gimptool gmake gs head hexdump id install join kill killall ld ld86 ldd less lex ln locate lockfile logname lp lpr ls lynx m4 make man mkdir mknod msgfmt mv namei nasm nawk nice nl nm nm86 nmap nohup nop od passwd patch pcregrep pcretest perl perror pidof pr printf procmail prune ps2ascii ps2epsi ps2frag ps2pdf ps2ps psbook psmerge psnup psresize psselect pstops rcs rev rm scp sed seq setterm shred size size86 skill slogin snice sort sox split ssh ssh-add ssh-agent ssh-keygen ssh-keyscan stat strings strip sudo suidperl sum tac tail tee test tr uniq unlink unzip updatedb updmap uptime users vmstat w wc wget whatis whereis which who whoami write xargs yacc yes zip zsoelim dcop kdialog kfile xhost xmodmap xset"
+
+regex_'5b'5cs'3b'5d'28'3f'3d'23'29 = compileRegex True "[\\s;](?=#)"
+regex_'5b'5e'29'5d'28'3f'3d'5c'29'29 = compileRegex True "[^)](?=\\))"
+regex_'5b'5e'60'5d'28'3f'3d'60'29 = compileRegex True "[^`](?=`)"
+regex_'5c'5b'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\[\\[(?=($|\\s))"
+regex_'5cs'5c'5b'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\s\\[\\[(?=($|\\s))"
+regex_'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\[(?=($|\\s))"
+regex_'5cs'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\s\\[(?=($|\\s))"
+regex_'5c'7b'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\{(?=($|\\s))"
+regex_'5cbdo'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\bdo(?![\\w$+-])"
+regex_'5cbdone'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\bdone(?![\\w$+-])"
+regex_'5cbif'28'3f'3d'28'24'7c'5cs'29'29 = compileRegex True "\\bif(?=($|\\s))"
+regex_'5cbfi'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\bfi(?![\\w$+-])"
+regex_'5cbcase'28'3f'21'5b'5cw'24'2b'2d'5d'29 = compileRegex True "\\bcase(?![\\w$+-])"
+regex_'2d'5bA'2dZa'2dz0'2d9'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a = compileRegex True "-[A-Za-z0-9][A-Za-z0-9_]*"
+regex_'2d'2d'5ba'2dz'5d'5bA'2dZa'2dz0'2d9'5f'2d'5d'2a = compileRegex True "--[a-z][A-Za-z0-9_-]*"
+regex_'5cb'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'2b'3f'3d = compileRegex True "\\b[A-Za-z_][A-Za-z0-9_]*\\+?="
+regex_'5cb'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'28'3f'3d'5c'5b'2e'2b'5c'5d'5c'2b'3f'3d'29 = compileRegex True "\\b[A-Za-z_][A-Za-z0-9_]*(?=\\[.+\\]\\+?=)"
+regex_'5cbfunction'5cb = compileRegex True "\\bfunction\\b"
+regex_'5c'2e'28'3f'3d'5cs'29 = compileRegex True "\\.(?=\\s)"
+regex_'5cd'2a'3c'3c'3c = compileRegex True "\\d*<<<"
+regex_'5b'3c'3e'5d'5c'28 = compileRegex True "[<>]\\("
+regex_'28'5b0'2d9'5d'2a'28'3e'7b1'2c2'7d'7c'3c'29'28'26'5b0'2d9'5d'2b'2d'3f'29'3f'7c'26'3e'7c'3e'26'7c'5b0'2d9'5d'2a'3c'3e'29 = compileRegex True "([0-9]*(>{1,2}|<)(&[0-9]+-?)?|&>|>&|[0-9]*<>)"
+regex_'28'5b'7c'26'5d'29'5c1'3f = compileRegex True "([|&])\\1?"
+regex_'5bA'2dZa'2dz'5f'3a'5d'5bA'2dZa'2dz0'2d9'5f'3a'23'25'40'2d'5d'2a'5cs'2a'5c'28'5c'29 = compileRegex True "[A-Za-z_:][A-Za-z0-9_:#%@-]*\\s*\\(\\)"
+regex_'5c'5c'5b'5d'5b'3b'5c'5c'24'60'7b'7d'28'29'7c'26'3c'3e'2a_'5d = compileRegex True "\\\\[][;\\\\$`{}()|&<>* ]"
+regex_'5c'5c'24 = compileRegex True "\\\\$"
+regex_'5c'7b'28'3f'21'28'5cs'7c'24'29'29'5cS'2a'5c'7d = compileRegex True "\\{(?!(\\s|$))\\S*\\}"
+regex_'28'5b'5cw'5f'40'2e'25'2a'3f'2b'2d'5d'7c'5c'5c_'29'2a'28'3f'3d'2f'29 = compileRegex True "([\\w_@.%*?+-]|\\\\ )*(?=/)"
+regex_'7e'5cw'2a = compileRegex True "~\\w*"
+regex_'2f'28'5b'5cw'5f'40'2e'25'2a'3f'2b'2d'5d'7c'5c'5c_'29'2a'28'3f'3d'28'5b'5cs'2f'29'3a'3b'24'60'27'22'5d'7c'24'29'29 = compileRegex True "/([\\w_@.%*?+-]|\\\\ )*(?=([\\s/):;$`'\"]|$))"
+regex_'5c'24'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'5b = compileRegex True "\\$[A-Za-z_][A-Za-z0-9_]*\\["
+regex_'5c'24'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a = compileRegex True "\\$[A-Za-z_][A-Za-z0-9_]*"
+regex_'5c'24'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d = compileRegex True "\\$[*@#?$!_0-9-]"
+regex_'5c'24'5c'7b'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d'5c'7d = compileRegex True "\\$\\{[*@#?$!_0-9-]\\}"
+regex_'5c'24'5c'7b'23'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'28'5c'5b'5b'2a'40'5d'5c'5d'29'3f'5c'7d = compileRegex True "\\$\\{#[A-Za-z_][A-Za-z0-9_]*(\\[[*@]\\])?\\}"
+regex_'5c'24'5c'7b'21'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'28'5c'5b'5b'2a'40'5d'5c'5d'7c'5b'2a'40'5d'29'3f'5c'7d = compileRegex True "\\$\\{![A-Za-z_][A-Za-z0-9_]*(\\[[*@]\\]|[*@])?\\}"
+regex_'5c'24'5c'7b'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a = compileRegex True "\\$\\{[A-Za-z_][A-Za-z0-9_]*"
+regex_'5c'24'5c'7b'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d'28'3f'3d'5b'3a'23'25'2f'3d'3f'2b'2d'5d'29 = compileRegex True "\\$\\{[*@#?$!_0-9-](?=[:#%/=?+-])"
+regex_'5c'5c'5b'60'24'5c'5c'5d = compileRegex True "\\\\[`$\\\\]"
+regex_'2d'5babcdefghkprstuwxOGLSNozn'5d'28'3f'3d'5cs'29 = compileRegex True "-[abcdefghkprstuwxOGLSNozn](?=\\s)"
+regex_'2d'28'5bno'5dt'7cef'29'28'3f'3d'5cs'29 = compileRegex True "-([no]t|ef)(?=\\s)"
+regex_'28'5b'21'3d'5d'3d'3f'7c'5b'3e'3c'5d'29'28'3f'3d'5cs'29 = compileRegex True "([!=]=?|[><])(?=\\s)"
+regex_'2d'28eq'7cne'7c'5bgl'5d'5bte'5d'29'28'3f'3d'5cs'29 = compileRegex True "-(eq|ne|[gl][te])(?=\\s)"
+regex_'5cs'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 = compileRegex True "\\s\\](?=($|[\\s;|&]))"
+regex_'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 = compileRegex True "\\](?=($|[\\s;|&]))"
+regex_'5cs'5c'5d'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 = compileRegex True "\\s\\]\\](?=($|[\\s;|&]))"
+regex_'5c'5d'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 = compileRegex True "\\]\\](?=($|[\\s;|&]))"
+regex_'5b'5cw'3a'2c'2b'5f'2e'2f'2d'5d = compileRegex True "[\\w:,+_./-]"
+regex_'5cs'2b'5bA'2dZa'2dz'5f'3a'5d'5bA'2dZa'2dz0'2d9'5f'3a'23'25'40'2d'5d'2a'28'5cs'2a'5c'28'5c'29'29'3f = compileRegex True "\\s+[A-Za-z_:][A-Za-z0-9_:#%@-]*(\\s*\\(\\))?"
+regex_'2d'5bA'2dZa'2dz0'2d9'5d'2b = compileRegex True "-[A-Za-z0-9]+"
+regex_'5cb'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a = compileRegex True "\\b[A-Za-z_][A-Za-z0-9_]*"
+regex_'5b'5e'5d'7d'29'7c'3b'60'26'3e'3c'5d = compileRegex True "[^]})|;`&><]"
+regex_'5c'5c'5b'60'22'5c'5c'24'5cn'5d = compileRegex True "\\\\[`\"\\\\$\\n]"
+regex_'5c'5c'5babefnrtv'5c'5c'27'5d = compileRegex True "\\\\[abefnrtv\\\\']"
+regex_'5c'5c'28'5b0'2d7'5d'7b1'2c3'7d'7cx'5bA'2dFa'2df0'2d9'5d'7b1'2c2'7d'7cc'2e'29 = compileRegex True "\\\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)"
+regex_'28'3a'3f'5b'2d'3d'3f'2b'5d'7c'23'23'3f'7c'25'25'3f'29 = compileRegex True "(:?[-=?+]|##?|%%?)"
+regex_'2f'2f'3f = compileRegex True "//?"
+regex_'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a = compileRegex True "[A-Za-z_][A-Za-z0-9_]*"
+regex_'5b0'2d9'5d'2b'28'3f'3d'5b'3a'7d'5d'29 = compileRegex True "[0-9]+(?=[:}])"
+regex_'5b0'2d9'5d'28'3f'3d'5b'3a'7d'5d'29 = compileRegex True "[0-9](?=[:}])"
+regex_'5csin'5cb = compileRegex True "\\sin\\b"
+regex_'5cbesac'28'3f'3d'24'7c'5b'5cs'3b'29'5d'29 = compileRegex True "\\besac(?=$|[\\s;)])"
+regex_esac'28'3f'3d'24'7c'5b'5cs'3b'29'5d'29 = compileRegex True "esac(?=$|[\\s;)])"
+regex_'28'3c'3c'2d'5cs'2a'22'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'22'29 = compileRegex True "(<<-\\s*\"([^|&;()<>\\s]+)\")"
+regex_'28'3c'3c'2d'5cs'2a'27'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'27'29 = compileRegex True "(<<-\\s*'([^|&;()<>\\s]+)')"
+regex_'28'3c'3c'2d'5cs'2a'5c'5c'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29 = compileRegex True "(<<-\\s*\\\\([^|&;()<>\\s]+))"
+regex_'28'3c'3c'2d'5cs'2a'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29 = compileRegex True "(<<-\\s*([^|&;()<>\\s]+))"
+regex_'28'3c'3c'5cs'2a'22'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'22'29 = compileRegex True "(<<\\s*\"([^|&;()<>\\s]+)\")"
+regex_'28'3c'3c'5cs'2a'27'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'27'29 = compileRegex True "(<<\\s*'([^|&;()<>\\s]+)')"
+regex_'28'3c'3c'5cs'2a'5c'5c'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29 = compileRegex True "(<<\\s*\\\\([^|&;()<>\\s]+))"
+regex_'28'3c'3c'5cs'2a'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29 = compileRegex True "(<<\\s*([^|&;()<>\\s]+))"
+
+parseRules ("Zsh","Start") =
+  (((parseRules ("Zsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","Start")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","FindAll") =
+  (((parseRules ("Zsh","FindComments")))
+   <|>
+   ((parseRules ("Zsh","FindCommands")))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Zsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindAll")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","FindMost") =
+  (((parseRules ("Zsh","FindComments")))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Zsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindMost")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","FindComments") =
+  (((pFirstNonSpace >> pDetectChar False '#' >>= withAttribute CommentTok) >>~ pushContext ("Zsh","Comment"))
+   <|>
+   ((pRegExpr regex_'5b'5cs'3b'5d'28'3f'3d'23'29 >>= withAttribute NormalTok) >>~ pushContext ("Zsh","Comment"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindComments")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","Comment") =
+  (((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","Comment")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("Zsh","FindCommentsParen") =
+  (((pFirstNonSpace >> pDetectChar False '#' >>= withAttribute CommentTok) >>~ pushContext ("Zsh","CommentParen"))
+   <|>
+   ((pRegExpr regex_'5b'5cs'3b'5d'28'3f'3d'23'29 >>= withAttribute NormalTok) >>~ pushContext ("Zsh","CommentParen"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindCommentsParen")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","CommentParen") =
+  (((pRegExpr regex_'5b'5e'29'5d'28'3f'3d'5c'29'29 >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","CommentParen")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("Zsh","FindCommentsBackq") =
+  (((pFirstNonSpace >> pDetectChar False '#' >>= withAttribute CommentTok) >>~ pushContext ("Zsh","CommentBackq"))
+   <|>
+   ((pRegExpr regex_'5b'5cs'3b'5d'28'3f'3d'23'29 >>= withAttribute NormalTok) >>~ pushContext ("Zsh","CommentBackq"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindCommentsBackq")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","CommentBackq") =
+  (((pRegExpr regex_'5b'5e'60'5d'28'3f'3d'60'29 >>= withAttribute CommentTok) >>~ (popContext))
+   <|>
+   ((Text.Highlighting.Kate.Syntax.Alert.parseExpression (Just ("Alerts","")) >>= ((withAttribute CommentTok) . snd)))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","CommentBackq")) >> pDefault >>= withAttribute CommentTok))
+
+parseRules ("Zsh","FindCommands") =
+  (((pDetect2Chars False '(' '(' >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","ExprDblParen"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5c'5b'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","ExprDblBracket"))
+   <|>
+   ((pRegExpr regex_'5cs'5c'5b'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","ExprDblBracket"))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","ExprBracket"))
+   <|>
+   ((pRegExpr regex_'5cs'5c'5b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","ExprBracket"))
+   <|>
+   ((pRegExpr regex_'5c'7b'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","Group"))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","SubShell"))
+   <|>
+   ((pRegExpr regex_'5cbdo'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbdone'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbif'28'3f'3d'28'24'7c'5cs'29'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbfi'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5cbcase'28'3f'21'5b'5cw'24'2b'2d'5d'29 >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","Case"))
+   <|>
+   ((pRegExpr regex_'2d'5bA'2dZa'2dz0'2d9'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'2d'2d'5ba'2dz'5d'5bA'2dZa'2dz0'2d9'5f'2d'5d'2a >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'5cb'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'2b'3f'3d >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Assign"))
+   <|>
+   ((pRegExpr regex_'5cb'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'28'3f'3d'5c'5b'2e'2b'5c'5d'5c'2b'3f'3d'29 >>= withAttribute OtherTok) >>~ pushContext ("Zsh","AssignSubscr"))
+   <|>
+   ((pString False ":()" >>= withAttribute FunctionTok))
+   <|>
+   ((pRegExpr regex_'5cbfunction'5cb >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","FunctionDef"))
+   <|>
+   ((pKeyword " \n\t()!+,<=>&*;?|~\\`" list_keywords >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5c'2e'28'3f'3d'5cs'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t()!+,<=>&*;?|~\\`" list_builtins >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t()!+,<=>&*;?|~\\`" list_unixcommands >>= withAttribute KeywordTok))
+   <|>
+   ((pKeyword " \n\t()!+,<=>&*;?|~\\`" list_builtins'5fvar >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","VarName"))
+   <|>
+   ((pRegExpr regex_'5cd'2a'3c'3c'3c >>= withAttribute KeywordTok))
+   <|>
+   ((lookAhead (pString False "<<") >> pushContext ("Zsh","HereDoc") >> currentContext >>= parseRules))
+   <|>
+   ((pRegExpr regex_'5b'3c'3e'5d'5c'28 >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","ProcessSubst"))
+   <|>
+   ((pRegExpr regex_'28'5b0'2d9'5d'2a'28'3e'7b1'2c2'7d'7c'3c'29'28'26'5b0'2d9'5d'2b'2d'3f'29'3f'7c'26'3e'7c'3e'26'7c'5b0'2d9'5d'2a'3c'3e'29 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'28'5b'7c'26'5d'29'5c1'3f >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5bA'2dZa'2dz'5f'3a'5d'5bA'2dZa'2dz0'2d9'5f'3a'23'25'40'2d'5d'2a'5cs'2a'5c'28'5c'29 >>= withAttribute FunctionTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindCommands")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","FindOthers") =
+  (((pRegExpr regex_'5c'5c'5b'5d'5b'3b'5c'5c'24'60'7b'7d'28'29'7c'26'3c'3e'2a_'5d >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'24 >>= withAttribute KeywordTok))
+   <|>
+   ((pRegExpr regex_'5c'7b'28'3f'21'28'5cs'7c'24'29'29'5cS'2a'5c'7d >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'28'5b'5cw'5f'40'2e'25'2a'3f'2b'2d'5d'7c'5c'5c_'29'2a'28'3f'3d'2f'29 >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'7e'5cw'2a >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'2f'28'5b'5cw'5f'40'2e'25'2a'3f'2b'2d'5d'7c'5c'5c_'29'2a'28'3f'3d'28'5b'5cs'2f'29'3a'3b'24'60'27'22'5d'7c'24'29'29 >>= withAttribute NormalTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindOthers")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","FindStrings") =
+  (((pDetect2Chars False '\\' '\'' >>= withAttribute DataTypeTok))
+   <|>
+   ((pDetect2Chars False '\\' '"' >>= withAttribute DataTypeTok))
+   <|>
+   ((pDetectChar False '\'' >>= withAttribute StringTok) >>~ pushContext ("Zsh","StringSQ"))
+   <|>
+   ((pDetectChar False '"' >>= withAttribute StringTok) >>~ pushContext ("Zsh","StringDQ"))
+   <|>
+   ((pDetect2Chars False '$' '\'' >>= withAttribute StringTok) >>~ pushContext ("Zsh","StringEsc"))
+   <|>
+   ((pDetect2Chars False '$' '"' >>= withAttribute StringTok) >>~ pushContext ("Zsh","StringDQ"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindStrings")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","FindSubstitutions") =
+  (((pRegExpr regex_'5c'24'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'5c'5b >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Subscript"))
+   <|>
+   ((pRegExpr regex_'5c'24'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d'5c'7d >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'23'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'28'5c'5b'5b'2a'40'5d'5c'5d'29'3f'5c'7d >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'21'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a'28'5c'5b'5b'2a'40'5d'5c'5d'7c'5b'2a'40'5d'29'3f'5c'7d >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute OtherTok) >>~ pushContext ("Zsh","VarBrace"))
+   <|>
+   ((pRegExpr regex_'5c'24'5c'7b'5b'2a'40'23'3f'24'21'5f0'2d9'2d'5d'28'3f'3d'5b'3a'23'25'2f'3d'3f'2b'2d'5d'29 >>= withAttribute OtherTok) >>~ pushContext ("Zsh","VarBrace"))
+   <|>
+   ((pString False "$((" >>= withAttribute OtherTok) >>~ pushContext ("Zsh","ExprDblParenSubst"))
+   <|>
+   ((pString False "$(<" >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","SubstFile"))
+   <|>
+   ((pString False "$(" >>= withAttribute OtherTok) >>~ pushContext ("Zsh","SubstCommand"))
+   <|>
+   ((pDetectChar False '`' >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","SubstBackq"))
+   <|>
+   ((pRegExpr regex_'5c'5c'5b'60'24'5c'5c'5d >>= withAttribute DataTypeTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindSubstitutions")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","FindTests") =
+  (((pRegExpr regex_'2d'5babcdefghkprstuwxOGLSNozn'5d'28'3f'3d'5cs'29 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'2d'28'5bno'5dt'7cef'29'28'3f'3d'5cs'29 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'28'5b'21'3d'5d'3d'3f'7c'5b'3e'3c'5d'29'28'3f'3d'5cs'29 >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'2d'28eq'7cne'7c'5bgl'5d'5bte'5d'29'28'3f'3d'5cs'29 >>= withAttribute OtherTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","FindTests")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","ExprDblParen") =
+  (((pDetect2Chars False ')' ')' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Zsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Zsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","ExprDblParen")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","ExprDblParenSubst") =
+  (((pDetect2Chars False ')' ')' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Zsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Zsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","ExprDblParenSubst")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","ExprSubParen") =
+  (((pDetectChar False ')' >>= withAttribute NormalTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Zsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Zsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","ExprSubParen")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","ExprBracket") =
+  (((pRegExpr regex_'5cs'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Zsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Zsh","FindTests")))
+   <|>
+   ((parseRules ("Zsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","ExprBracket")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","ExprDblBracket") =
+  (((pRegExpr regex_'5cs'5c'5d'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pColumn 0 >> pRegExpr regex_'5c'5d'5c'5d'28'3f'3d'28'24'7c'5b'5cs'3b'7c'26'5d'29'29 >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '(' >>= withAttribute NormalTok) >>~ pushContext ("Zsh","ExprSubParen"))
+   <|>
+   ((parseRules ("Zsh","FindTests")))
+   <|>
+   ((parseRules ("Zsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","ExprDblBracket")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","Group") =
+  (((pDetectChar False '}' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Zsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","Group")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","SubShell") =
+  (((pDetectChar False ')' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Zsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","SubShell")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","Assign") =
+  (((pDetectChar False '(' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","AssignArray"))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Zsh","FindOthers")))
+   <|>
+   ((pRegExpr regex_'5b'5cw'3a'2c'2b'5f'2e'2f'2d'5d >>= withAttribute NormalTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Zsh","AssignArray") =
+  (((pDetectChar False ')' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '[' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Subscript"))
+   <|>
+   ((pDetectChar False '=' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Assign"))
+   <|>
+   ((parseRules ("Zsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","AssignArray")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","AssignSubscr") =
+  (((pDetectChar False '[' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Subscript"))
+   <|>
+   ((pDetect2Chars False '+' '=' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Assign"))
+   <|>
+   ((pDetectChar False '=' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Assign"))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Zsh","FindOthers")))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Zsh","Subscript") =
+  (((pDetectChar False ']' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Zsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","Subscript")) >> pDefault >>= withAttribute OtherTok))
+
+parseRules ("Zsh","FunctionDef") =
+  (((pRegExpr regex_'5cs'2b'5bA'2dZa'2dz'5f'3a'5d'5bA'2dZa'2dz0'2d9'5f'3a'23'25'40'2d'5d'2a'28'5cs'2a'5c'28'5c'29'29'3f >>= withAttribute FunctionTok) >>~ (popContext))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Zsh","VarName") =
+  (((pRegExpr regex_'2d'5bA'2dZa'2dz0'2d9'5d'2b >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'2d'2d'5ba'2dz'5d'5bA'2dZa'2dz0'2d9'5f'2d'5d'2a >>= withAttribute NormalTok))
+   <|>
+   ((pRegExpr regex_'5cb'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute OtherTok))
+   <|>
+   ((pDetectChar False '[' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Subscript"))
+   <|>
+   ((pDetectChar False '=' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Assign"))
+   <|>
+   ((parseRules ("Zsh","FindMost")))
+   <|>
+   ((pRegExpr regex_'5b'5e'5d'7d'29'7c'3b'60'26'3e'3c'5d >>= withAttribute NormalTok))
+   <|>
+   ((popContext) >> currentContext >>= parseRules))
+
+parseRules ("Zsh","ProcessSubst") =
+  (((pDetectChar False ')' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Zsh","FindCommentsParen")))
+   <|>
+   ((parseRules ("Zsh","FindCommands")))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Zsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","ProcessSubst")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","StringSQ") =
+  (((pDetectChar False '\'' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","StringSQ")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("Zsh","StringDQ") =
+  (((pDetectChar False '"' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5c'5c'5b'60'22'5c'5c'24'5cn'5d >>= withAttribute DataTypeTok))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","StringDQ")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("Zsh","StringEsc") =
+  (((pDetectChar False '\'' >>= withAttribute StringTok) >>~ (popContext))
+   <|>
+   ((pRegExpr regex_'5c'5c'5babefnrtv'5c'5c'27'5d >>= withAttribute DataTypeTok))
+   <|>
+   ((pRegExpr regex_'5c'5c'28'5b0'2d7'5d'7b1'2c3'7d'7cx'5bA'2dFa'2df0'2d9'5d'7b1'2c2'7d'7cc'2e'29 >>= withAttribute DataTypeTok))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","StringEsc")) >> pDefault >>= withAttribute StringTok))
+
+parseRules ("Zsh","VarBrace") =
+  (((pDetectChar False '}' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((pDetectChar False '[' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","Subscript"))
+   <|>
+   ((pRegExpr regex_'28'3a'3f'5b'2d'3d'3f'2b'5d'7c'23'23'3f'7c'25'25'3f'29 >>= withAttribute OtherTok) >>~ pushContext ("Zsh","VarAlt"))
+   <|>
+   ((pRegExpr regex_'2f'2f'3f >>= withAttribute OtherTok) >>~ pushContext ("Zsh","VarSubst"))
+   <|>
+   ((pDetectChar False ':' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","VarSub"))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","VarBrace")) >> pDefault >>= withAttribute ErrorTok))
+
+parseRules ("Zsh","VarAlt") =
+  (((pDetectChar False '}' >>= withAttribute OtherTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","VarAlt")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","VarSubst") =
+  (((pDetectChar False '}' >>= withAttribute OtherTok) >>~ (popContext >> popContext))
+   <|>
+   ((pDetectChar False '/' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","VarSubst2"))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","VarSubst")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","VarSubst2") =
+  (((pDetectChar False '}' >>= withAttribute OtherTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","VarSubst2")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","VarSub") =
+  (((pDetectChar False ':' >>= withAttribute OtherTok) >>~ pushContext ("Zsh","VarSub2"))
+   <|>
+   ((pDetectChar False '}' >>= withAttribute OtherTok) >>~ (popContext >> popContext))
+   <|>
+   ((pRegExpr regex_'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5b0'2d9'5d'2b'28'3f'3d'5b'3a'7d'5d'29 >>= withAttribute OtherTok))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","VarSub")) >> pDefault >>= withAttribute ErrorTok))
+
+parseRules ("Zsh","VarSub2") =
+  (((pDetectChar False '}' >>= withAttribute OtherTok) >>~ (popContext >> popContext >> popContext))
+   <|>
+   ((pRegExpr regex_'5bA'2dZa'2dz'5f'5d'5bA'2dZa'2dz0'2d9'5f'5d'2a >>= withAttribute OtherTok))
+   <|>
+   ((pRegExpr regex_'5b0'2d9'5d'28'3f'3d'5b'3a'7d'5d'29 >>= withAttribute OtherTok))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","VarSub2")) >> pDefault >>= withAttribute ErrorTok))
+
+parseRules ("Zsh","SubstFile") =
+  (((pDetectChar False ')' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Zsh","FindCommentsParen")))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Zsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","SubstFile")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","SubstCommand") =
+  (((pDetectChar False ')' >>= withAttribute OtherTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Zsh","FindCommentsParen")))
+   <|>
+   ((parseRules ("Zsh","FindCommands")))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Zsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","SubstCommand")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","SubstBackq") =
+  (((pDetectChar False '`' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((parseRules ("Zsh","FindCommentsBackq")))
+   <|>
+   ((parseRules ("Zsh","FindCommands")))
+   <|>
+   ((parseRules ("Zsh","FindStrings")))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   ((parseRules ("Zsh","FindOthers")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","SubstBackq")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","Case") =
+  (((pRegExpr regex_'5csin'5cb >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","CaseIn"))
+   <|>
+   ((parseRules ("Zsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","Case")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","CaseIn") =
+  (((pRegExpr regex_'5cbesac'28'3f'3d'24'7c'5b'5cs'3b'29'5d'29 >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((pDetectChar False ')' >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","CaseExpr"))
+   <|>
+   ((pAnyChar "(|" >>= withAttribute KeywordTok))
+   <|>
+   ((parseRules ("Zsh","FindMost")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","CaseIn")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","CaseExpr") =
+  (((pDetect2Chars False ';' ';' >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   ((pFirstNonSpace >> lookAhead (pRegExpr regex_esac'28'3f'3d'24'7c'5b'5cs'3b'29'5d'29) >> (popContext) >> currentContext >>= parseRules))
+   <|>
+   ((parseRules ("Zsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","CaseExpr")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","HereDoc") =
+  (((lookAhead (pRegExpr regex_'28'3c'3c'2d'5cs'2a'22'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'22'29) >> pushContext ("Zsh","HereDocIQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'2d'5cs'2a'27'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'27'29) >> pushContext ("Zsh","HereDocIQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'2d'5cs'2a'5c'5c'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29) >> pushContext ("Zsh","HereDocIQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'2d'5cs'2a'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29) >> pushContext ("Zsh","HereDocINQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'5cs'2a'22'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'22'29) >> pushContext ("Zsh","HereDocQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'5cs'2a'27'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'27'29) >> pushContext ("Zsh","HereDocQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'5cs'2a'5c'5c'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29) >> pushContext ("Zsh","HereDocQ") >> currentContext >>= parseRules))
+   <|>
+   ((lookAhead (pRegExpr regex_'28'3c'3c'5cs'2a'28'5b'5e'7c'26'3b'28'29'3c'3e'5cs'5d'2b'29'29) >> pushContext ("Zsh","HereDocNQ") >> currentContext >>= parseRules))
+   <|>
+   ((pString False "<<" >>= withAttribute KeywordTok) >>~ (popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","HereDoc")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","HereDocRemainder") =
+  (((parseRules ("Zsh","FindAll")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","HereDocRemainder")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","HereDocQ") =
+  (((pRegExprDynamic "%1" >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","HereDocRemainder"))
+   <|>
+   ((pColumn 0 >> pRegExprDynamic "%2\\b" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","HereDocQ")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","HereDocNQ") =
+  (((pRegExprDynamic "%1" >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","HereDocRemainder"))
+   <|>
+   ((pColumn 0 >> pRegExprDynamic "%2\\b" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","HereDocNQ")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","HereDocIQ") =
+  (((pRegExprDynamic "%1" >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","HereDocRemainder"))
+   <|>
+   ((pColumn 0 >> pRegExprDynamic "\\t*%2\\b" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","HereDocIQ")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Zsh","HereDocINQ") =
+  (((pRegExprDynamic "%1" >>= withAttribute KeywordTok) >>~ pushContext ("Zsh","HereDocRemainder"))
+   <|>
+   ((pColumn 0 >> pRegExprDynamic "\\t*%2\\b" >>= withAttribute KeywordTok) >>~ (popContext >> popContext))
+   <|>
+   ((parseRules ("Zsh","FindSubstitutions")))
+   <|>
+   (currentContext >>= \x -> guard (x == ("Zsh","HereDocINQ")) >> pDefault >>= withAttribute NormalTok))
+
+parseRules ("Alerts", _) = Text.Highlighting.Kate.Syntax.Alert.parseExpression Nothing
+
+parseRules x = parseRules ("Zsh","Start") <|> fail ("Unknown context" ++ show x)
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,27 @@
+highlighting-kate 0.5.9 (24 Aug 2014)
+
+  * Added cabal test suite.
+  * Update .cabal file and README.md to reflect new upstream repo
+    (Geoff Nixon).
+  * Added new syntaxes: ABC, Lilypond (musical typesetting),
+    FASM/[NASM/MASM/YASM] (Intel Style Assembly Language), GraphViz Dot (graph
+    notation), GLSL (graphics language), M4 (macro language, used by GNU
+    autotools), Mathematica, MediaWiki (wiki markup), OpenCL (GPGPU language),
+    RELAX NG (XML schema) [as the alternate RELAX NG compact syntax is already
+    included], tcsh [C shell] (scripting/shell language [with small patch for
+    parsing error]).  (Geoff Nixon)
+  * Add language.xsd and validatehl.sh script from upstream: useful (Geoff
+    Nixon).
+  * Replace restructuredtext.xml with updated (renamed) rest.xml (Geoff
+    Nixon).
+  * Update from upstream: alert_indent, awk, css, diff, doxygen, email,
+    fsharp, haskell, javadoc, literate-haskell, markdown, maxima, perl,
+    prolog, python, vhdl, yacc. (Geoff Nixon)
+  * Added .patch files in xml directory where local changes have been
+    made (Geoff Nixon).
+  * Common:  Convert `\o{...}` to `\x{..}` in regexes.
+    `\x{..}` has been supported for a long time in pcre.
+
 highlighting-kate 0.5.8.5 (15 Jul 2014)
 
   * Use utf8 option with pcre-light.
diff --git a/css/hk-tango.css b/css/hk-tango.css
new file mode 100644
--- /dev/null
+++ b/css/hk-tango.css
@@ -0,0 +1,21 @@
+/* Loosely based on pygment's tango colors */
+table.sourceCode, tr.sourceCode, td.sourceCode, table.sourceCode pre
+   { margin: 0; padding: 0; border: 0; vertical-align: baseline; border: none; background-color: #f8f8f8 }
+td.nums { text-align: right; padding-right: 5px; padding-left: 5px; background-color: #f0f0f0; }
+td.sourceCode { padding-left: 5px; }
+code.sourceCode { background-color: #f8f8f8; }
+pre.sourceCode { background-color: #f8f8f8; line-height: 125% }
+td.nums pre { background-color: #f0f0f0; line-height: 125% }
+code.sourceCode span.kw { color: #204a87; font-weight: bold } /* Keyword */
+code.sourceCode span.dt { color: #204a87 } /* Keyword.Type */
+code.sourceCode span.dv { color: #0000cf } /* Literal.Number.Integer */
+code.sourceCode span.bn { color: #0000cf } /* Literal.Number.Hex */
+code.sourceCode span.fl { color: #0000cf } /* Literal.Number.Float */
+code.sourceCode span.ch { color: #4e9a06 } /* Literal.String.Char */
+code.sourceCode span.st { color: #4e9a06 } /* Literal.String */
+code.sourceCode span.co { color: #8f5902; font-style: italic } /* Comment */
+code.sourceCode span.ot { color: #8f5902 } /* Comment.Preproc */
+code.sourceCode span.al { color: #ef2929 } /* Generic.Error */
+code.sourceCode span.fu { color: #000000 } /* Name.Function */
+code.sourceCode span.re { }
+code.sourceCode span.er { color: #a40000; border: 1px solid #ef2929 } /* Error */
diff --git a/highlighting-kate.cabal b/highlighting-kate.cabal
--- a/highlighting-kate.cabal
+++ b/highlighting-kate.cabal
@@ -1,5 +1,5 @@
 Name:                highlighting-kate
-Version:             0.5.8.5
+Version:             0.5.9
 Cabal-Version:       >= 1.10
 Build-Type:          Simple
 Category:            Text
@@ -20,116 +20,67 @@
 Homepage:            http://github.com/jgm/highlighting-kate
 Extra-Source-Files:  README.md
                      changelog
+                     Makefile
                      ParseSyntaxFiles.hs
                      Text/Highlighting/Kate/Syntax.hs.in
                      css/hk-espresso.css
                      css/hk-kate.css
                      css/hk-pyg.css
-                     xml/actionscript.xml
-                     xml/ada.xml
-                     xml/alert.xml
-                     xml/alert_indent.xml
-                     xml/apache.xml
-                     xml/asn1.xml
-                     xml/asp.xml
-                     xml/awk.xml
-                     xml/bash.xml
-                     xml/bash.xml.bkp
-                     xml/bibtex.xml
-                     xml/boo.xml
-                     xml/c.xml
-                     xml/changelog.xml
-                     xml/clojure.xml
-                     xml/cmake.xml
-                     xml/coffee.xml
-                     xml/coldfusion.xml
-                     xml/commonlisp.xml
-                     xml/cpp.xml
-                     xml/cs.xml
-                     xml/css.xml
-                     xml/curry.xml
-                     xml/d.xml
-                     xml/diff.xml
-                     xml/djangotemplate.xml
-                     xml/doxygen.xml
-                     xml/doxygenlua.xml
-                     xml/dtd.xml
-                     xml/eiffel.xml
-                     xml/email.xml
-                     xml/erlang.xml
-                     xml/fortran.xml
-                     xml/fsharp.xml
-                     xml/gcc.xml
-                     xml/gnuassembler.xml
-                     xml/go.xml
-                     xml/haskell.xml
-                     xml/haxe.xml
-                     xml/html.xml
-                     xml/ini.xml
-                     xml/isocpp.xml
-                     xml/java.xml
-                     xml/javadoc.xml
-                     xml/javascript.xml
-                     xml/javascript.xml.bkp
-                     xml/json.xml
-                     xml/jsp.xml
-                     xml/julia.xml
-                     xml/language.dtd
-                     xml/latex.xml
-                     xml/lex.xml
-                     xml/literate-curry.xml
-                     xml/literate-haskell.xml
-                     xml/lua.xml
-                     xml/makefile.xml
-                     xml/mandoc.xml
-                     xml/markdown.xml
-                     xml/matlab.xml
-                     xml/maxima.xml
-                     xml/metafont.xml
-                     xml/mips.xml
-                     xml/modelines.xml
-                     xml/modula-2.xml
-                     xml/modula-3.xml
-                     xml/monobasic.xml
-                     xml/nasm.xml
-                     xml/noweb.xml
-                     xml/objectivec.xml
-                     xml/objectivecpp.xml
-                     xml/ocaml.xml
-                     xml/octave.xml
-                     xml/pascal.xml
-                     xml/perl.xml
-                     xml/perl.xml.bkp
-                     xml/php.xml
-                     xml/pike.xml
-                     xml/postscript.xml
-                     xml/prolog.xml
-                     xml/python.xml
-                     xml/r.xml
-                     xml/relaxngcompact.xml
-                     xml/restructuredtext.xml
-                     xml/rhtml.xml
-                     xml/roff.xml
-                     xml/ruby.xml
-                     xml/rust.xml
-                     xml/scala.xml
-                     xml/scheme.xml
-                     xml/sci.xml
-                     xml/sed.xml
-                     xml/sgml.xml
-                     xml/sql-mysql.xml
-                     xml/sql-postgresql.xml
-                     xml/sql.xml
-                     xml/tcl.xml
-                     xml/texinfo.xml
-                     xml/verilog.xml
-                     xml/vhdl.xml
-                     xml/xml.xml
-                     xml/xorg.xml
-                     xml/xslt.xml
-                     xml/xul.xml
-                     xml/yacc.xml
-                     xml/yaml.xml
+                     css/hk-tango.css
+                     xml/*.xml
+                     xml/*.xml.patch
+                     tests/abc.ada
+                     tests/abc.ada.html
+                     tests/abc.c
+                     tests/abc.c.html
+                     tests/abc.clojure
+                     tests/abc.clojure.html
+                     tests/abc.cpp
+                     tests/abc.cpp.html
+                     tests/abc.cs
+                     tests/abc.cs.html
+                     tests/abc.d
+                     tests/abc.d.html
+                     tests/abc.fortran
+                     tests/abc.fortran.html
+                     tests/abc.go
+                     tests/abc.go.html
+                     tests/abc.haskell
+                     tests/abc.haskell.html
+                     tests/abc.java
+                     tests/abc.java.html
+                     tests/abc.javascript
+                     tests/abc.javascript.html
+                     tests/abc.julia
+                     tests/abc.julia.html
+                     tests/abc.lisp
+                     tests/abc.lisp.html
+                     tests/abc.matlab
+                     tests/abc.matlab.html
+                     tests/abc.ocaml
+                     tests/abc.ocaml.html
+                     tests/abc.perl
+                     tests/abc.perl.html
+                     tests/abc.php
+                     tests/abc.php.html
+                     tests/abc.prolog
+                     tests/abc.prolog.html
+                     tests/abc.python
+                     tests/abc.python.html
+                     tests/abc.r
+                     tests/abc.r.html
+                     tests/abc.ruby
+                     tests/abc.ruby.html
+                     tests/abc.scala
+                     tests/abc.scala.html
+                     tests/abc.scheme
+                     tests/abc.scheme.html
+                     tests/abc.tcl
+                     tests/abc.tcl.html
+                     tests/archive.rhtml
+                     tests/archive.rhtml.html
+                     tests/life.lua
+                     tests/life.lua.html
 Flag splitBase
   Description:       Choose the new, smaller, split-up base package.
   Default:           True
@@ -163,6 +114,7 @@
                      Text.Highlighting.Kate.Format.LaTeX
   Other-Modules:     Text.Highlighting.Kate.Common
                      Paths_highlighting_kate
+                     Text.Highlighting.Kate.Syntax.Abc
                      Text.Highlighting.Kate.Syntax.Actionscript
                      Text.Highlighting.Kate.Syntax.Ada
                      Text.Highlighting.Kate.Syntax.Alert
@@ -188,15 +140,18 @@
                      Text.Highlighting.Kate.Syntax.D
                      Text.Highlighting.Kate.Syntax.Diff
                      Text.Highlighting.Kate.Syntax.Djangotemplate
+                     Text.Highlighting.Kate.Syntax.Dot
                      Text.Highlighting.Kate.Syntax.Doxygen
                      Text.Highlighting.Kate.Syntax.Doxygenlua
                      Text.Highlighting.Kate.Syntax.Dtd
                      Text.Highlighting.Kate.Syntax.Eiffel
                      Text.Highlighting.Kate.Syntax.Email
                      Text.Highlighting.Kate.Syntax.Erlang
+                     Text.Highlighting.Kate.Syntax.Fasm
                      Text.Highlighting.Kate.Syntax.Fortran
                      Text.Highlighting.Kate.Syntax.Fsharp
                      Text.Highlighting.Kate.Syntax.Gcc
+                     Text.Highlighting.Kate.Syntax.Glsl
                      Text.Highlighting.Kate.Syntax.Gnuassembler
                      Text.Highlighting.Kate.Syntax.Go
                      Text.Highlighting.Kate.Syntax.Haskell
@@ -212,14 +167,18 @@
                      Text.Highlighting.Kate.Syntax.Julia
                      Text.Highlighting.Kate.Syntax.Latex
                      Text.Highlighting.Kate.Syntax.Lex
+                     Text.Highlighting.Kate.Syntax.Lilypond
                      Text.Highlighting.Kate.Syntax.LiterateCurry
                      Text.Highlighting.Kate.Syntax.LiterateHaskell
                      Text.Highlighting.Kate.Syntax.Lua
+                     Text.Highlighting.Kate.Syntax.M4
                      Text.Highlighting.Kate.Syntax.Makefile
                      Text.Highlighting.Kate.Syntax.Mandoc
                      Text.Highlighting.Kate.Syntax.Markdown
+                     Text.Highlighting.Kate.Syntax.Mathematica
                      Text.Highlighting.Kate.Syntax.Matlab
                      Text.Highlighting.Kate.Syntax.Maxima
+                     Text.Highlighting.Kate.Syntax.Mediawiki
                      Text.Highlighting.Kate.Syntax.Metafont
                      Text.Highlighting.Kate.Syntax.Mips
                      Text.Highlighting.Kate.Syntax.Modelines
@@ -232,6 +191,7 @@
                      Text.Highlighting.Kate.Syntax.Objectivecpp
                      Text.Highlighting.Kate.Syntax.Ocaml
                      Text.Highlighting.Kate.Syntax.Octave
+                     Text.Highlighting.Kate.Syntax.Opencl
                      Text.Highlighting.Kate.Syntax.Pascal
                      Text.Highlighting.Kate.Syntax.Perl
                      Text.Highlighting.Kate.Syntax.Php
@@ -241,8 +201,9 @@
                      Text.Highlighting.Kate.Syntax.Pure
                      Text.Highlighting.Kate.Syntax.Python
                      Text.Highlighting.Kate.Syntax.R
+                     Text.Highlighting.Kate.Syntax.Relaxng
                      Text.Highlighting.Kate.Syntax.Relaxngcompact
-                     Text.Highlighting.Kate.Syntax.Restructuredtext
+                     Text.Highlighting.Kate.Syntax.Rest
                      Text.Highlighting.Kate.Syntax.Rhtml
                      Text.Highlighting.Kate.Syntax.Roff
                      Text.Highlighting.Kate.Syntax.Ruby
@@ -256,6 +217,7 @@
                      Text.Highlighting.Kate.Syntax.SqlMysql
                      Text.Highlighting.Kate.Syntax.SqlPostgresql
                      Text.Highlighting.Kate.Syntax.Tcl
+                     Text.Highlighting.Kate.Syntax.Tcsh
                      Text.Highlighting.Kate.Syntax.Texinfo
                      Text.Highlighting.Kate.Syntax.Verilog
                      Text.Highlighting.Kate.Syntax.Vhdl
@@ -265,6 +227,7 @@
                      Text.Highlighting.Kate.Syntax.Xul
                      Text.Highlighting.Kate.Syntax.Yacc
                      Text.Highlighting.Kate.Syntax.Yaml
+                     Text.Highlighting.Kate.Syntax.Zsh
   -- disable optimizations; it doesn't hurt performance much and
   -- massively improves compilation speed and memory usage
   Default-Language:    Haskell98
@@ -292,3 +255,11 @@
     Buildable:      True
   else
     Buildable:      False
+
+test-suite test-highlighting-kate
+  Type:           exitcode-stdio-1.0
+  Main-Is:        test-highlighting-kate.hs
+  Hs-Source-Dirs: tests
+  build-depends:  base >= 4, directory, highlighting-kate, filepath,
+                  process, Diff, containers, blaze-html >= 0.4.2 && < 0.8
+  default-language: Haskell98
diff --git a/tests/abc.ada b/tests/abc.ada
new file mode 100644
--- /dev/null
+++ b/tests/abc.ada
@@ -0,0 +1,79 @@
+with Ada.Characters.Handling;
+use Ada.Characters.Handling;
+
+
+package Abc is
+    type Block_Faces is array(1..2) of Character;
+    type Block_List is array(positive range <>) of Block_Faces;
+    function Can_Make_Word(W: String; Blocks: Block_List) return Boolean;
+end Abc;
+
+
+package body Abc is
+
+function Can_Make_Word(W: String; Blocks: Block_List) return Boolean is
+    Used : array(Blocks'Range) of Boolean := (Others => False);
+    subtype wIndex is Integer range W'First..W'Last;
+    wPos : wIndex;
+begin
+    if W'Length = 0 then
+        return True;
+    end if;
+    wPos := W'First;
+    while True loop
+        declare
+            C : Character := To_Upper(W(wPos));
+            X : constant wIndex := wPos;
+        begin
+            for I in Blocks'Range loop
+                if (not Used(I)) then
+                    if C = To_Upper(Blocks(I)(1)) or C = To_Upper(Blocks(I)(2)) then
+                        Used(I) := True;
+                        if wPos = W'Last then
+                            return True;
+                        end if;
+                        wPos := wIndex'Succ(wPos);
+                        exit;
+                    end if;
+                end if;
+            end loop;
+            if X = wPos then
+                return False;
+            end if;
+        end;
+    end loop;
+    return False;
+end Can_Make_Word;
+
+end Abc;
+
+with Ada.Text_IO, Ada.Strings.Unbounded, Abc;
+use Ada.Text_IO, Ada.Strings.Unbounded, Abc;
+
+procedure Abc_Problem is
+    Blocks : Block_List := (
+          ('B','O'), ('X','K'), ('D','Q'), ('C','P')
+        , ('N','A'), ('G','T'), ('R','E'), ('T','G')
+        , ('Q','D'), ('F','S'), ('J','W'), ('H','U')
+        , ('V','I'), ('A','N'), ('O','B'), ('E','R')
+        , ('F','S'), ('L','Y'), ('P','C'), ('Z','M')
+    );
+    function "+" (S : String) return Unbounded_String renames To_Unbounded_String;
+    words : array(positive range <>) of Unbounded_String := (
+          +"A"
+        , +"BARK"
+        , +"BOOK"
+        , +"TREAT"
+        , +"COMMON"
+        , +"SQUAD"
+        , +"CONFUSE"
+        -- Border cases:
+        -- , +"CONFUSE2"
+        -- , +""
+    );
+begin
+    for I in words'Range loop
+        Put_Line ( To_String(words(I)) & ": " & Boolean'Image(Can_Make_Word(To_String(words(I)),Blocks)) );
+    end loop;
+end Abc_Problem;
+
diff --git a/tests/abc.ada.html b/tests/abc.ada.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.ada.html
@@ -0,0 +1,96 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">with</span> Ada.Characters.Handling;
+<span class="kw" title="KeywordTok">use</span> Ada.Characters.Handling;
+
+
+<span class="kw" title="KeywordTok">package</span> Abc <span class="kw" title="KeywordTok">is</span>
+    <span class="kw" title="KeywordTok">type</span> Block_Faces <span class="kw" title="KeywordTok">is</span> <span class="kw" title="KeywordTok">array</span>(<span class="dv" title="DecValTok">1</span>..<span class="dv" title="DecValTok">2</span>) <span class="kw" title="KeywordTok">of</span> Character;
+    <span class="kw" title="KeywordTok">type</span> Block_List <span class="kw" title="KeywordTok">is</span> <span class="kw" title="KeywordTok">array</span>(positive <span class="kw" title="KeywordTok">range</span> &lt;&gt;) <span class="kw" title="KeywordTok">of</span> Block_Faces;
+    <span class="kw" title="KeywordTok">function</span> Can_Make_Word(W: <span class="dt" title="DataTypeTok">String</span>; Blocks: Block_List) <span class="kw" title="KeywordTok">return</span> <span class="dt" title="DataTypeTok">Boolean</span>;
+<span class="kw" title="KeywordTok">end</span> Abc;
+
+
+<span class="kw" title="KeywordTok">package</span> <span class="kw" title="KeywordTok">body</span> Abc <span class="kw" title="KeywordTok">is</span>
+
+<span class="kw" title="KeywordTok">function</span> Can_Make_Word(W: <span class="dt" title="DataTypeTok">String</span>; Blocks: Block_List) <span class="kw" title="KeywordTok">return</span> <span class="dt" title="DataTypeTok">Boolean</span> <span class="kw" title="KeywordTok">is</span>
+    Used : <span class="kw" title="KeywordTok">array</span>(Blocks&#39;Range) <span class="kw" title="KeywordTok">of</span> <span class="dt" title="DataTypeTok">Boolean</span> := (<span class="kw" title="KeywordTok">Others</span> =&gt; False);
+    <span class="kw" title="KeywordTok">subtype</span> wIndex <span class="kw" title="KeywordTok">is</span> <span class="dt" title="DataTypeTok">Integer</span> <span class="kw" title="KeywordTok">range</span> W&#39;First..W&#39;Last;
+    wPos : wIndex;
+<span class="kw" title="KeywordTok">begin</span>
+    <span class="kw" title="KeywordTok">if</span> W&#39;Length = <span class="dv" title="DecValTok">0</span> <span class="kw" title="KeywordTok">then</span>
+        <span class="kw" title="KeywordTok">return</span> True;
+    <span class="kw" title="KeywordTok">end if</span>;
+    wPos := W&#39;First;
+    <span class="kw" title="KeywordTok">while</span> True <span class="kw" title="KeywordTok">loop</span>
+        <span class="kw" title="KeywordTok">declare</span>
+            C : Character := To_Upper(W(wPos));
+            X : <span class="kw" title="KeywordTok">constant</span> wIndex := wPos;
+        <span class="kw" title="KeywordTok">begin</span>
+            <span class="kw" title="KeywordTok">for</span> I <span class="kw" title="KeywordTok">in</span> Blocks&#39;Range <span class="kw" title="KeywordTok">loop</span>
+                <span class="kw" title="KeywordTok">if</span> (<span class="kw" title="KeywordTok">not</span> Used(I)) <span class="kw" title="KeywordTok">then</span>
+                    <span class="kw" title="KeywordTok">if</span> C = To_Upper(Blocks(I)(<span class="dv" title="DecValTok">1</span>)) <span class="kw" title="KeywordTok">or</span> C = To_Upper(Blocks(I)(<span class="dv" title="DecValTok">2</span>)) <span class="kw" title="KeywordTok">then</span>
+                        Used(I) := True;
+                        <span class="kw" title="KeywordTok">if</span> wPos = W&#39;Last <span class="kw" title="KeywordTok">then</span>
+                            <span class="kw" title="KeywordTok">return</span> True;
+                        <span class="kw" title="KeywordTok">end if</span>;
+                        wPos := wIndex&#39;Succ(wPos);
+                        <span class="kw" title="KeywordTok">exit</span>;
+                    <span class="kw" title="KeywordTok">end if</span>;
+                <span class="kw" title="KeywordTok">end if</span>;
+            <span class="kw" title="KeywordTok">end loop</span>;
+            <span class="kw" title="KeywordTok">if</span> X = wPos <span class="kw" title="KeywordTok">then</span>
+                <span class="kw" title="KeywordTok">return</span> False;
+            <span class="kw" title="KeywordTok">end if</span>;
+        <span class="kw" title="KeywordTok">end</span>;
+    <span class="kw" title="KeywordTok">end loop</span>;
+    <span class="kw" title="KeywordTok">return</span> False;
+<span class="kw" title="KeywordTok">end</span> Can_Make_Word;
+
+<span class="kw" title="KeywordTok">end</span> Abc;
+
+<span class="kw" title="KeywordTok">with</span> Ada.Text_IO, Ada.Strings.Unbounded, Abc;
+<span class="kw" title="KeywordTok">use</span> Ada.Text_IO, Ada.Strings.Unbounded, Abc;
+
+<span class="kw" title="KeywordTok">procedure</span> Abc_Problem <span class="kw" title="KeywordTok">is</span>
+    Blocks : Block_List := (
+          (<span class="ch" title="CharTok">&#39;B&#39;</span>,<span class="ch" title="CharTok">&#39;O&#39;</span>), (<span class="ch" title="CharTok">&#39;X&#39;</span>,<span class="ch" title="CharTok">&#39;K&#39;</span>), (<span class="ch" title="CharTok">&#39;D&#39;</span>,<span class="ch" title="CharTok">&#39;Q&#39;</span>), (<span class="ch" title="CharTok">&#39;C&#39;</span>,<span class="ch" title="CharTok">&#39;P&#39;</span>)
+        , (<span class="ch" title="CharTok">&#39;N&#39;</span>,<span class="ch" title="CharTok">&#39;A&#39;</span>), (<span class="ch" title="CharTok">&#39;G&#39;</span>,<span class="ch" title="CharTok">&#39;T&#39;</span>), (<span class="ch" title="CharTok">&#39;R&#39;</span>,<span class="ch" title="CharTok">&#39;E&#39;</span>), (<span class="ch" title="CharTok">&#39;T&#39;</span>,<span class="ch" title="CharTok">&#39;G&#39;</span>)
+        , (<span class="ch" title="CharTok">&#39;Q&#39;</span>,<span class="ch" title="CharTok">&#39;D&#39;</span>), (<span class="ch" title="CharTok">&#39;F&#39;</span>,<span class="ch" title="CharTok">&#39;S&#39;</span>), (<span class="ch" title="CharTok">&#39;J&#39;</span>,<span class="ch" title="CharTok">&#39;W&#39;</span>), (<span class="ch" title="CharTok">&#39;H&#39;</span>,<span class="ch" title="CharTok">&#39;U&#39;</span>)
+        , (<span class="ch" title="CharTok">&#39;V&#39;</span>,<span class="ch" title="CharTok">&#39;I&#39;</span>), (<span class="ch" title="CharTok">&#39;A&#39;</span>,<span class="ch" title="CharTok">&#39;N&#39;</span>), (<span class="ch" title="CharTok">&#39;O&#39;</span>,<span class="ch" title="CharTok">&#39;B&#39;</span>), (<span class="ch" title="CharTok">&#39;E&#39;</span>,<span class="ch" title="CharTok">&#39;R&#39;</span>)
+        , (<span class="ch" title="CharTok">&#39;F&#39;</span>,<span class="ch" title="CharTok">&#39;S&#39;</span>), (<span class="ch" title="CharTok">&#39;L&#39;</span>,<span class="ch" title="CharTok">&#39;Y&#39;</span>), (<span class="ch" title="CharTok">&#39;P&#39;</span>,<span class="ch" title="CharTok">&#39;C&#39;</span>), (<span class="ch" title="CharTok">&#39;Z&#39;</span>,<span class="ch" title="CharTok">&#39;M&#39;</span>)
+    );
+    <span class="kw" title="KeywordTok">function</span> <span class="st" title="StringTok">&quot;+&quot;</span> (S : <span class="dt" title="DataTypeTok">String</span>) <span class="kw" title="KeywordTok">return</span> Unbounded_String <span class="kw" title="KeywordTok">renames</span> To_Unbounded_String;
+    words : <span class="kw" title="KeywordTok">array</span>(positive <span class="kw" title="KeywordTok">range</span> &lt;&gt;) <span class="kw" title="KeywordTok">of</span> Unbounded_String := (
+          +<span class="st" title="StringTok">&quot;A&quot;</span>
+        , +<span class="st" title="StringTok">&quot;BARK&quot;</span>
+        , +<span class="st" title="StringTok">&quot;BOOK&quot;</span>
+        , +<span class="st" title="StringTok">&quot;TREAT&quot;</span>
+        , +<span class="st" title="StringTok">&quot;COMMON&quot;</span>
+        , +<span class="st" title="StringTok">&quot;SQUAD&quot;</span>
+        , +<span class="st" title="StringTok">&quot;CONFUSE&quot;</span>
+        <span class="co" title="CommentTok">-- Border cases:</span>
+        <span class="co" title="CommentTok">-- , +&quot;CONFUSE2&quot;</span>
+        <span class="co" title="CommentTok">-- , +&quot;&quot;</span>
+    );
+<span class="kw" title="KeywordTok">begin</span>
+    <span class="kw" title="KeywordTok">for</span> I <span class="kw" title="KeywordTok">in</span> words&#39;Range <span class="kw" title="KeywordTok">loop</span>
+        Put_Line ( To_String(words(I)) &amp; <span class="st" title="StringTok">&quot;: &quot;</span> &amp; Boolean&#39;Image(Can_Make_Word(To_String(words(I)),Blocks)) );
+    <span class="kw" title="KeywordTok">end loop</span>;
+<span class="kw" title="KeywordTok">end</span> Abc_Problem;
+</code></pre></body>
diff --git a/tests/abc.c b/tests/abc.c
new file mode 100644
--- /dev/null
+++ b/tests/abc.c
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <ctype.h>
+
+int can_make_words(char **b, char *word)
+{
+        int i, ret = 0, c = toupper(*word);
+
+#define SWAP(a, b) if (a != b) { char * tmp = a; a = b; b = tmp; }
+
+        if (!c) return 1;
+        if (!b[0]) return 0;
+
+        for (i = 0; b[i] && !ret; i++) {
+                if (b[i][0] != c && b[i][1] != c) continue;
+                SWAP(b[i], b[0]);
+                ret = can_make_words(b + 1, word + 1);
+                SWAP(b[i], b[0]);
+        }
+
+        return ret;
+}
+
+int main(void)
+{
+        char* blocks[] = {
+                "BO", "XK", "DQ", "CP", "NA", 
+                "GT", "RE", "TG", "QD", "FS", 
+                "JW", "HU", "VI", "AN", "OB", 
+                "ER", "FS", "LY", "PC", "ZM",
+                0 };
+
+        char *words[] = {
+                "", "A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "Confuse", 0
+        };
+
+        char **w;
+        for (w = words; *w; w++)
+                printf("%s\t%d\n", *w, can_make_words(blocks, *w));
+
+        return 0;
+}
diff --git a/tests/abc.c.html b/tests/abc.c.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.c.html
@@ -0,0 +1,58 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="ot" title="OtherTok">#include &lt;stdio.h&gt;</span>
+<span class="ot" title="OtherTok">#include &lt;ctype.h&gt;</span>
+
+<span class="dt" title="DataTypeTok">int</span> can_make_words(<span class="dt" title="DataTypeTok">char</span> **b, <span class="dt" title="DataTypeTok">char</span> *word)
+{
+        <span class="dt" title="DataTypeTok">int</span> i, ret = <span class="dv" title="DecValTok">0</span>, c = toupper(*word);
+
+<span class="ot" title="OtherTok">#define SWAP(a, b) if (a != b) { char * tmp = a; a = b; b = tmp; }</span>
+
+        <span class="kw" title="KeywordTok">if</span> (!c) <span class="kw" title="KeywordTok">return</span> <span class="dv" title="DecValTok">1</span>;
+        <span class="kw" title="KeywordTok">if</span> (!b[<span class="dv" title="DecValTok">0</span>]) <span class="kw" title="KeywordTok">return</span> <span class="dv" title="DecValTok">0</span>;
+
+        <span class="kw" title="KeywordTok">for</span> (i = <span class="dv" title="DecValTok">0</span>; b[i] &amp;&amp; !ret; i++) {
+                <span class="kw" title="KeywordTok">if</span> (b[i][<span class="dv" title="DecValTok">0</span>] != c &amp;&amp; b[i][<span class="dv" title="DecValTok">1</span>] != c) <span class="kw" title="KeywordTok">continue</span>;
+                SWAP(b[i], b[<span class="dv" title="DecValTok">0</span>]);
+                ret = can_make_words(b + <span class="dv" title="DecValTok">1</span>, word + <span class="dv" title="DecValTok">1</span>);
+                SWAP(b[i], b[<span class="dv" title="DecValTok">0</span>]);
+        }
+
+        <span class="kw" title="KeywordTok">return</span> ret;
+}
+
+<span class="dt" title="DataTypeTok">int</span> main(<span class="dt" title="DataTypeTok">void</span>)
+{
+        <span class="dt" title="DataTypeTok">char</span>* blocks[] = {
+                <span class="st" title="StringTok">&quot;BO&quot;</span>, <span class="st" title="StringTok">&quot;XK&quot;</span>, <span class="st" title="StringTok">&quot;DQ&quot;</span>, <span class="st" title="StringTok">&quot;CP&quot;</span>, <span class="st" title="StringTok">&quot;NA&quot;</span>, 
+                <span class="st" title="StringTok">&quot;GT&quot;</span>, <span class="st" title="StringTok">&quot;RE&quot;</span>, <span class="st" title="StringTok">&quot;TG&quot;</span>, <span class="st" title="StringTok">&quot;QD&quot;</span>, <span class="st" title="StringTok">&quot;FS&quot;</span>, 
+                <span class="st" title="StringTok">&quot;JW&quot;</span>, <span class="st" title="StringTok">&quot;HU&quot;</span>, <span class="st" title="StringTok">&quot;VI&quot;</span>, <span class="st" title="StringTok">&quot;AN&quot;</span>, <span class="st" title="StringTok">&quot;OB&quot;</span>, 
+                <span class="st" title="StringTok">&quot;ER&quot;</span>, <span class="st" title="StringTok">&quot;FS&quot;</span>, <span class="st" title="StringTok">&quot;LY&quot;</span>, <span class="st" title="StringTok">&quot;PC&quot;</span>, <span class="st" title="StringTok">&quot;ZM&quot;</span>,
+                <span class="dv" title="DecValTok">0</span> };
+
+        <span class="dt" title="DataTypeTok">char</span> *words[] = {
+                <span class="st" title="StringTok">&quot;&quot;</span>, <span class="st" title="StringTok">&quot;A&quot;</span>, <span class="st" title="StringTok">&quot;BARK&quot;</span>, <span class="st" title="StringTok">&quot;BOOK&quot;</span>, <span class="st" title="StringTok">&quot;TREAT&quot;</span>, <span class="st" title="StringTok">&quot;COMMON&quot;</span>, <span class="st" title="StringTok">&quot;SQUAD&quot;</span>, <span class="st" title="StringTok">&quot;Confuse&quot;</span>, <span class="dv" title="DecValTok">0</span>
+        };
+
+        <span class="dt" title="DataTypeTok">char</span> **w;
+        <span class="kw" title="KeywordTok">for</span> (w = words; *w; w++)
+                printf(<span class="st" title="StringTok">&quot;%s</span><span class="ch" title="CharTok">\t</span><span class="st" title="StringTok">%d</span><span class="ch" title="CharTok">\n</span><span class="st" title="StringTok">&quot;</span>, *w, can_make_words(blocks, *w));
+
+        <span class="kw" title="KeywordTok">return</span> <span class="dv" title="DecValTok">0</span>;
+}</code></pre></body>
diff --git a/tests/abc.clojure b/tests/abc.clojure
new file mode 100644
--- /dev/null
+++ b/tests/abc.clojure
@@ -0,0 +1,22 @@
+
+(def blocks
+  (-> "BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM" (.split " ") vec))
+
+(defn omit 
+  "return bs with (one instance of) b omitted"
+  [bs b] 
+  (let [[before after] (split-with #(not= b %) bs)]
+    (concat before (rest after))))
+
+(defn abc 
+  "return lazy sequence of solutions (i.e. block lists)"
+  [blocks [c & cs]]
+  (if-some c
+    (for [b blocks :when (some #(= c %) b)
+          bs (abc (omit blocks b) cs)]
+      (cons b bs))
+    [[]]))
+    
+      
+(doseq [word ["A" "BARK" "Book" "treat" "COMMON" "SQUAD" "CONFUSE"]]
+  (->> word .toUpperCase (abc blocks) first (printf "%s: %b\n" word)))
diff --git a/tests/abc.clojure.html b/tests/abc.clojure.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.clojure.html
@@ -0,0 +1,39 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode">
+(<span class="kw" title="KeywordTok">def</span><span class="fu" title="FunctionTok"> blocks</span>
+  (<span class="kw" title="KeywordTok">-&gt;</span> <span class="st" title="StringTok">&quot;BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM&quot;</span> (.split <span class="st" title="StringTok">&quot; &quot;</span>) <span class="kw" title="KeywordTok">vec</span>))
+
+(<span class="kw" title="KeywordTok">defn</span><span class="fu" title="FunctionTok"> omit </span>
+  <span class="st" title="StringTok">&quot;return bs with (one instance of) b omitted&quot;</span>
+  [bs b] 
+  (<span class="kw" title="KeywordTok">let</span> [[before after] (<span class="kw" title="KeywordTok">split-with</span> #(<span class="kw" title="KeywordTok">not=</span> b %) bs)]
+    (<span class="kw" title="KeywordTok">concat</span> before (<span class="kw" title="KeywordTok">rest</span> after))))
+
+(<span class="kw" title="KeywordTok">defn</span><span class="fu" title="FunctionTok"> abc </span>
+  <span class="st" title="StringTok">&quot;return lazy sequence of solutions (i.e. block lists)&quot;</span>
+  [blocks [c &amp; cs]]
+  (if-some c
+    (<span class="kw" title="KeywordTok">for</span> [b blocks <span class="kw" title="KeywordTok">:when</span> (<span class="kw" title="KeywordTok">some</span> #(<span class="kw" title="KeywordTok">=</span> c %) b)
+          bs (abc (omit blocks b) cs)]
+      (<span class="kw" title="KeywordTok">cons</span> b bs))
+    [[]]))
+    
+      
+(<span class="kw" title="KeywordTok">doseq</span> [word [<span class="st" title="StringTok">&quot;A&quot;</span> <span class="st" title="StringTok">&quot;BARK&quot;</span> <span class="st" title="StringTok">&quot;Book&quot;</span> <span class="st" title="StringTok">&quot;treat&quot;</span> <span class="st" title="StringTok">&quot;COMMON&quot;</span> <span class="st" title="StringTok">&quot;SQUAD&quot;</span> <span class="st" title="StringTok">&quot;CONFUSE&quot;</span>]]
+  (<span class="kw" title="KeywordTok">-&gt;&gt;</span> word .toUpperCase (abc blocks) <span class="kw" title="KeywordTok">first</span> (<span class="kw" title="KeywordTok">printf</span> <span class="st" title="StringTok">&quot;%s: %b</span>\n<span class="st" title="StringTok">&quot;</span> word)))</code></pre></body>
diff --git a/tests/abc.cpp b/tests/abc.cpp
new file mode 100644
--- /dev/null
+++ b/tests/abc.cpp
@@ -0,0 +1,37 @@
+#include <iostream>
+#include <vector>
+#include <string>
+#include <set>
+#include <cctype>
+
+
+typedef std::pair<char,char> item_t;
+typedef std::vector<item_t> list_t;
+
+bool can_make_word(const std::string& w, const list_t& vals) {
+    std::set<uint32_t> used;
+    while (used.size() < w.size()) {
+        const char c = toupper(w[used.size()]);
+        uint32_t x = used.size();
+        for (uint32_t i = 0, ii = vals.size(); i < ii; ++i) {
+            if (used.find(i) == used.end()) {
+                if (toupper(vals[i].first) == c || toupper(vals[i].second) == c) {
+                    used.insert(i);
+                    break;
+                }
+            }
+        }
+        if (x == used.size()) break;
+    }
+    return used.size() == w.size();
+}
+
+
+int main() {
+    list_t vals{ {'B','O'}, {'X','K'}, {'D','Q'}, {'C','P'}, {'N','A'}, {'G','T'}, {'R','E'}, {'T','G'}, {'Q','D'}, {'F','S'}, {'J','W'}, {'H','U'}, {'V','I'}, {'A','N'}, {'O','B'}, {'E','R'}, {'F','S'}, {'L','Y'}, {'P','C'}, {'Z','M'} };
+    std::vector<std::string> words{"A","BARK","BOOK","TREAT","COMMON","SQUAD","CONFUSE"};
+    for (const std::string& w : words) {
+        std::cout << w << ": " << std::boolalpha << can_make_word(w,vals) << ".\n";
+    }
+
+}
diff --git a/tests/abc.cpp.html b/tests/abc.cpp.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.cpp.html
@@ -0,0 +1,54 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="ot" title="OtherTok">#include &lt;iostream&gt;</span>
+<span class="ot" title="OtherTok">#include &lt;vector&gt;</span>
+<span class="ot" title="OtherTok">#include &lt;string&gt;</span>
+<span class="ot" title="OtherTok">#include &lt;set&gt;</span>
+<span class="ot" title="OtherTok">#include &lt;cctype&gt;</span>
+
+
+<span class="kw" title="KeywordTok">typedef</span> std::pair&lt;<span class="dt" title="DataTypeTok">char</span>,<span class="dt" title="DataTypeTok">char</span>&gt; item_t;
+<span class="kw" title="KeywordTok">typedef</span> std::vector&lt;item_t&gt; list_t;
+
+<span class="dt" title="DataTypeTok">bool</span> can_make_word(<span class="dt" title="DataTypeTok">const</span> std::string&amp; w, <span class="dt" title="DataTypeTok">const</span> list_t&amp; vals) {
+    std::set&lt;<span class="dt" title="DataTypeTok">uint32_t</span>&gt; used;
+    <span class="kw" title="KeywordTok">while</span> (used.size() &lt; w.size()) {
+        <span class="dt" title="DataTypeTok">const</span> <span class="dt" title="DataTypeTok">char</span> c = toupper(w[used.size()]);
+        <span class="dt" title="DataTypeTok">uint32_t</span> x = used.size();
+        <span class="kw" title="KeywordTok">for</span> (<span class="dt" title="DataTypeTok">uint32_t</span> i = <span class="dv" title="DecValTok">0</span>, ii = vals.size(); i &lt; ii; ++i) {
+            <span class="kw" title="KeywordTok">if</span> (used.find(i) == used.end()) {
+                <span class="kw" title="KeywordTok">if</span> (toupper(vals[i].first) == c || toupper(vals[i].second) == c) {
+                    used.insert(i);
+                    <span class="kw" title="KeywordTok">break</span>;
+                }
+            }
+        }
+        <span class="kw" title="KeywordTok">if</span> (x == used.size()) <span class="kw" title="KeywordTok">break</span>;
+    }
+    <span class="kw" title="KeywordTok">return</span> used.size() == w.size();
+}
+
+
+<span class="dt" title="DataTypeTok">int</span> main() {
+    list_t vals{ {<span class="st" title="StringTok">&#39;B&#39;</span>,<span class="st" title="StringTok">&#39;O&#39;</span>}, {<span class="st" title="StringTok">&#39;X&#39;</span>,<span class="st" title="StringTok">&#39;K&#39;</span>}, {<span class="st" title="StringTok">&#39;D&#39;</span>,<span class="st" title="StringTok">&#39;Q&#39;</span>}, {<span class="st" title="StringTok">&#39;C&#39;</span>,<span class="st" title="StringTok">&#39;P&#39;</span>}, {<span class="st" title="StringTok">&#39;N&#39;</span>,<span class="st" title="StringTok">&#39;A&#39;</span>}, {<span class="st" title="StringTok">&#39;G&#39;</span>,<span class="st" title="StringTok">&#39;T&#39;</span>}, {<span class="st" title="StringTok">&#39;R&#39;</span>,<span class="st" title="StringTok">&#39;E&#39;</span>}, {<span class="st" title="StringTok">&#39;T&#39;</span>,<span class="st" title="StringTok">&#39;G&#39;</span>}, {<span class="st" title="StringTok">&#39;Q&#39;</span>,<span class="st" title="StringTok">&#39;D&#39;</span>}, {<span class="st" title="StringTok">&#39;F&#39;</span>,<span class="st" title="StringTok">&#39;S&#39;</span>}, {<span class="st" title="StringTok">&#39;J&#39;</span>,<span class="st" title="StringTok">&#39;W&#39;</span>}, {<span class="st" title="StringTok">&#39;H&#39;</span>,<span class="st" title="StringTok">&#39;U&#39;</span>}, {<span class="st" title="StringTok">&#39;V&#39;</span>,<span class="st" title="StringTok">&#39;I&#39;</span>}, {<span class="st" title="StringTok">&#39;A&#39;</span>,<span class="st" title="StringTok">&#39;N&#39;</span>}, {<span class="st" title="StringTok">&#39;O&#39;</span>,<span class="st" title="StringTok">&#39;B&#39;</span>}, {<span class="st" title="StringTok">&#39;E&#39;</span>,<span class="st" title="StringTok">&#39;R&#39;</span>}, {<span class="st" title="StringTok">&#39;F&#39;</span>,<span class="st" title="StringTok">&#39;S&#39;</span>}, {<span class="st" title="StringTok">&#39;L&#39;</span>,<span class="st" title="StringTok">&#39;Y&#39;</span>}, {<span class="st" title="StringTok">&#39;P&#39;</span>,<span class="st" title="StringTok">&#39;C&#39;</span>}, {<span class="st" title="StringTok">&#39;Z&#39;</span>,<span class="st" title="StringTok">&#39;M&#39;</span>} };
+    std::vector&lt;std::string&gt; words{<span class="st" title="StringTok">&quot;A&quot;</span>,<span class="st" title="StringTok">&quot;BARK&quot;</span>,<span class="st" title="StringTok">&quot;BOOK&quot;</span>,<span class="st" title="StringTok">&quot;TREAT&quot;</span>,<span class="st" title="StringTok">&quot;COMMON&quot;</span>,<span class="st" title="StringTok">&quot;SQUAD&quot;</span>,<span class="st" title="StringTok">&quot;CONFUSE&quot;</span>};
+    <span class="kw" title="KeywordTok">for</span> (<span class="dt" title="DataTypeTok">const</span> std::string&amp; w : words) {
+        std::cout &lt;&lt; w &lt;&lt; <span class="st" title="StringTok">&quot;: &quot;</span> &lt;&lt; std::boolalpha &lt;&lt; can_make_word(w,vals) &lt;&lt; <span class="st" title="StringTok">&quot;.</span><span class="ch" title="CharTok">\n</span><span class="st" title="StringTok">&quot;</span>;
+    }
+
+}</code></pre></body>
diff --git a/tests/abc.cs b/tests/abc.cs
new file mode 100644
--- /dev/null
+++ b/tests/abc.cs
@@ -0,0 +1,83 @@
+using System.Collections.Generic;
+using System.Linq;
+
+void Main()
+{
+        List<string> blocks =
+        new List<string>() { "bo", "xk", "dq", "cp", "na", "gt", "re", "tg", "qd", "fs",
+                "jw", "hu", "vi", "an", "ob", "er", "fs", "ly", "pc", "zm" };
+        List<string> words = new List<string>() {
+                "A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSE"};
+        
+        var solver = new ABC(blocks);
+        
+        foreach( var word in words)
+        {
+                Console.WriteLine("{0} :{1}", word, solver.CanMake(word));
+        }
+}
+
+class ABC
+{
+        readonly Dictionary<char, List<int>> _blockDict = new Dictionary<char, List<int>>();
+        bool[] _used;
+        int _nextBlock;
+
+        readonly List<string> _blocks;
+
+        private void AddBlockChar(char c)
+        {
+                if (!_blockDict.ContainsKey(c))
+                {
+                        _blockDict[c] = new List<int>();
+                }
+                _blockDict[c].Add(_nextBlock);
+        }
+
+        private void AddBlock(string block)
+        {
+                AddBlockChar(block[0]);
+                AddBlockChar(block[1]);
+                _nextBlock++;
+        }
+
+        public ABC(List<string> blocks)
+        {
+                _blocks = blocks;
+                foreach (var block in blocks)
+                {
+                        AddBlock(block);
+                }
+        }
+
+        public bool CanMake(string word)
+        {
+                word = word.ToLower();
+                if (word.Length > _blockDict.Count)
+                {
+                        return false;
+                }
+                _used = new bool[_blocks.Count];
+                return TryMake(word);
+        }
+
+        public bool TryMake(string word)
+        {
+                if (word == string.Empty)
+                {
+                        return true;
+                }
+                var blocks = _blockDict[word[0]].Where(b => !_used[b]);
+                foreach (var block in blocks)
+                {
+                        _used[block] = true;
+                        if (TryMake(word.Substring(1)))
+                        {
+                                return true;
+                        }
+                        _used[block] = false;
+                }
+                return false;
+        }
+}
+
diff --git a/tests/abc.cs.html b/tests/abc.cs.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.cs.html
@@ -0,0 +1,100 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">using</span> System.<span class="fu" title="FunctionTok">Collections</span>.<span class="fu" title="FunctionTok">Generic</span>;
+<span class="kw" title="KeywordTok">using</span> System.<span class="fu" title="FunctionTok">Linq</span>;
+
+<span class="dt" title="DataTypeTok">void</span> <span class="fu" title="FunctionTok">Main</span>()
+{
+        List&lt;<span class="dt" title="DataTypeTok">string</span>&gt; blocks =
+        <span class="kw" title="KeywordTok">new</span> List&lt;<span class="dt" title="DataTypeTok">string</span>&gt;() { <span class="st" title="StringTok">&quot;bo&quot;</span>, <span class="st" title="StringTok">&quot;xk&quot;</span>, <span class="st" title="StringTok">&quot;dq&quot;</span>, <span class="st" title="StringTok">&quot;cp&quot;</span>, <span class="st" title="StringTok">&quot;na&quot;</span>, <span class="st" title="StringTok">&quot;gt&quot;</span>, <span class="st" title="StringTok">&quot;re&quot;</span>, <span class="st" title="StringTok">&quot;tg&quot;</span>, <span class="st" title="StringTok">&quot;qd&quot;</span>, <span class="st" title="StringTok">&quot;fs&quot;</span>,
+                <span class="st" title="StringTok">&quot;jw&quot;</span>, <span class="st" title="StringTok">&quot;hu&quot;</span>, <span class="st" title="StringTok">&quot;vi&quot;</span>, <span class="st" title="StringTok">&quot;an&quot;</span>, <span class="st" title="StringTok">&quot;ob&quot;</span>, <span class="st" title="StringTok">&quot;er&quot;</span>, <span class="st" title="StringTok">&quot;fs&quot;</span>, <span class="st" title="StringTok">&quot;ly&quot;</span>, <span class="st" title="StringTok">&quot;pc&quot;</span>, <span class="st" title="StringTok">&quot;zm&quot;</span> };
+        List&lt;<span class="dt" title="DataTypeTok">string</span>&gt; words = <span class="kw" title="KeywordTok">new</span> List&lt;<span class="dt" title="DataTypeTok">string</span>&gt;() {
+                <span class="st" title="StringTok">&quot;A&quot;</span>, <span class="st" title="StringTok">&quot;BARK&quot;</span>, <span class="st" title="StringTok">&quot;BOOK&quot;</span>, <span class="st" title="StringTok">&quot;TREAT&quot;</span>, <span class="st" title="StringTok">&quot;COMMON&quot;</span>, <span class="st" title="StringTok">&quot;SQUAD&quot;</span>, <span class="st" title="StringTok">&quot;CONFUSE&quot;</span>};
+        
+        <span class="dt" title="DataTypeTok">var</span> solver = <span class="kw" title="KeywordTok">new</span> <span class="fu" title="FunctionTok">ABC</span>(blocks);
+        
+        <span class="kw" title="KeywordTok">foreach</span>( var word <span class="kw" title="KeywordTok">in</span> words)
+        {
+                Console.<span class="fu" title="FunctionTok">WriteLine</span>(<span class="st" title="StringTok">&quot;{0} :{1}&quot;</span>, word, solver.<span class="fu" title="FunctionTok">CanMake</span>(word));
+        }
+}
+
+<span class="kw" title="KeywordTok">class</span> ABC
+{
+        <span class="kw" title="KeywordTok">readonly</span> Dictionary&lt;<span class="dt" title="DataTypeTok">char</span>, List&lt;<span class="dt" title="DataTypeTok">int</span>&gt;&gt; _blockDict = <span class="kw" title="KeywordTok">new</span> Dictionary&lt;<span class="dt" title="DataTypeTok">char</span>, List&lt;<span class="dt" title="DataTypeTok">int</span>&gt;&gt;();
+        <span class="dt" title="DataTypeTok">bool</span>[] _used;
+        <span class="dt" title="DataTypeTok">int</span> _nextBlock;
+
+        <span class="kw" title="KeywordTok">readonly</span> List&lt;<span class="dt" title="DataTypeTok">string</span>&gt; _blocks;
+
+        <span class="kw" title="KeywordTok">private</span> <span class="dt" title="DataTypeTok">void</span> <span class="fu" title="FunctionTok">AddBlockChar</span>(<span class="dt" title="DataTypeTok">char</span> c)
+        {
+                <span class="kw" title="KeywordTok">if</span> (!_blockDict.<span class="fu" title="FunctionTok">ContainsKey</span>(c))
+                {
+                        _blockDict[c] = <span class="kw" title="KeywordTok">new</span> List&lt;<span class="dt" title="DataTypeTok">int</span>&gt;();
+                }
+                _blockDict[c].<span class="fu" title="FunctionTok">Add</span>(_nextBlock);
+        }
+
+        <span class="kw" title="KeywordTok">private</span> <span class="dt" title="DataTypeTok">void</span> <span class="fu" title="FunctionTok">AddBlock</span>(<span class="dt" title="DataTypeTok">string</span> block)
+        {
+                <span class="fu" title="FunctionTok">AddBlockChar</span>(block[<span class="dv" title="DecValTok">0</span>]);
+                <span class="fu" title="FunctionTok">AddBlockChar</span>(block[<span class="dv" title="DecValTok">1</span>]);
+                _nextBlock++;
+        }
+
+        <span class="kw" title="KeywordTok">public</span> <span class="fu" title="FunctionTok">ABC</span>(List&lt;<span class="dt" title="DataTypeTok">string</span>&gt; blocks)
+        {
+                _blocks = blocks;
+                <span class="kw" title="KeywordTok">foreach</span> (var block <span class="kw" title="KeywordTok">in</span> blocks)
+                {
+                        <span class="fu" title="FunctionTok">AddBlock</span>(block);
+                }
+        }
+
+        <span class="kw" title="KeywordTok">public</span> <span class="dt" title="DataTypeTok">bool</span> <span class="fu" title="FunctionTok">CanMake</span>(<span class="dt" title="DataTypeTok">string</span> word)
+        {
+                word = word.<span class="fu" title="FunctionTok">ToLower</span>();
+                <span class="kw" title="KeywordTok">if</span> (word.<span class="fu" title="FunctionTok">Length</span> &gt; _blockDict.<span class="fu" title="FunctionTok">Count</span>)
+                {
+                        <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">false</span>;
+                }
+                _used = <span class="kw" title="KeywordTok">new</span> <span class="dt" title="DataTypeTok">bool</span>[_blocks.<span class="fu" title="FunctionTok">Count</span>];
+                <span class="kw" title="KeywordTok">return</span> <span class="fu" title="FunctionTok">TryMake</span>(word);
+        }
+
+        <span class="kw" title="KeywordTok">public</span> <span class="dt" title="DataTypeTok">bool</span> <span class="fu" title="FunctionTok">TryMake</span>(<span class="dt" title="DataTypeTok">string</span> word)
+        {
+                <span class="kw" title="KeywordTok">if</span> (word == <span class="dt" title="DataTypeTok">string</span>.<span class="fu" title="FunctionTok">Empty</span>)
+                {
+                        <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">true</span>;
+                }
+                <span class="dt" title="DataTypeTok">var</span> blocks = _blockDict[word[<span class="dv" title="DecValTok">0</span>]].<span class="fu" title="FunctionTok">Where</span>(b =&gt; !_used[b]);
+                <span class="kw" title="KeywordTok">foreach</span> (var block <span class="kw" title="KeywordTok">in</span> blocks)
+                {
+                        _used[block] = <span class="kw" title="KeywordTok">true</span>;
+                        <span class="kw" title="KeywordTok">if</span> (<span class="fu" title="FunctionTok">TryMake</span>(word.<span class="fu" title="FunctionTok">Substring</span>(<span class="dv" title="DecValTok">1</span>)))
+                        {
+                                <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">true</span>;
+                        }
+                        _used[block] = <span class="kw" title="KeywordTok">false</span>;
+                }
+                <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">false</span>;
+        }
+}
+</code></pre></body>
diff --git a/tests/abc.d b/tests/abc.d
new file mode 100644
--- /dev/null
+++ b/tests/abc.d
@@ -0,0 +1,42 @@
+import std.stdio, std.ascii, std.algorithm, std.array, std.range;
+
+alias Block = char[2];
+
+bool canMakeWord(immutable Block[] blocks, in string word) pure nothrow
+in {
+    assert(blocks.all!(w => w[].all!isAlpha));
+    assert(word.all!isAlpha);
+} body {
+    bool inner(size_t[] indexes, in string w) pure nothrow {
+        if (w.empty)
+            return true;
+
+        immutable c = w[0].toUpper;
+        foreach (ref idx; indexes) {
+            if (blocks[idx][0].toUpper != c &&
+                blocks[idx][1].toUpper != c)
+                continue;
+            indexes[0].swap(idx);
+            if (inner(indexes[1 .. $], w[1 .. $]))
+                return true;
+            indexes[0].swap(idx);
+        }
+
+        return false;
+    }
+
+    return inner(blocks.length.iota.array, word);
+}
+
+void main() {
+    enum Block[] blocks = "BO XK DQ CP NA GT RE TG QD FS
+                           JW HU VI AN OB ER FS LY PC ZM".split;
+
+    foreach (w; "" ~ "A BARK BoOK TrEAT COmMoN SQUAD conFUsE".split)
+        writefln(`"%s" %s`, w, blocks.canMakeWord(w));
+
+    // Extra test.
+    immutable Block[] blocks2 = ["AB", "AB", "AC", "AC"];
+    immutable word = "abba";
+    writefln(`"%s" %s`, word, blocks2.canMakeWord(word));
+}
diff --git a/tests/abc.d.html b/tests/abc.d.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.d.html
@@ -0,0 +1,59 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">import</span> std.stdio, std.ascii, std.algorithm, std.array, std.range;
+
+<span class="kw" title="KeywordTok">alias</span> Block = <span class="dt" title="DataTypeTok">char</span>[<span class="dv" title="DecValTok">2</span>];
+
+<span class="dt" title="DataTypeTok">bool</span> canMakeWord(<span class="kw" title="KeywordTok">immutable</span> Block[] blocks, <span class="kw" title="KeywordTok">in</span> <span class="dt" title="DataTypeTok">string</span> word) <span class="kw" title="KeywordTok">pure</span> <span class="kw" title="KeywordTok">nothrow</span>
+<span class="kw" title="KeywordTok">in </span>{
+    <span class="kw" title="KeywordTok">assert</span>(blocks.all!(w =&gt; w[].all!isAlpha));
+    <span class="kw" title="KeywordTok">assert</span>(word.all!isAlpha);
+} <span class="kw" title="KeywordTok">body</span> {
+    <span class="dt" title="DataTypeTok">bool</span> inner(<span class="dt" title="DataTypeTok">size_t</span>[] indexes, <span class="kw" title="KeywordTok">in</span> <span class="dt" title="DataTypeTok">string</span> w) <span class="kw" title="KeywordTok">pure</span> <span class="kw" title="KeywordTok">nothrow</span> {
+        <span class="kw" title="KeywordTok">if</span> (w.empty)
+            <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">true</span>;
+
+        <span class="kw" title="KeywordTok">immutable</span> c = w[<span class="dv" title="DecValTok">0</span>].toUpper;
+        <span class="kw" title="KeywordTok">foreach</span> (<span class="kw" title="KeywordTok">ref</span> idx; indexes) {
+            <span class="kw" title="KeywordTok">if</span> (blocks[idx][<span class="dv" title="DecValTok">0</span>].toUpper != c &amp;&amp;
+                blocks[idx][<span class="dv" title="DecValTok">1</span>].toUpper != c)
+                <span class="kw" title="KeywordTok">continue</span>;
+            indexes[<span class="dv" title="DecValTok">0</span>].swap(idx);
+            <span class="kw" title="KeywordTok">if</span> (inner(indexes[<span class="dv" title="DecValTok">1</span> .. $], w[<span class="dv" title="DecValTok">1</span> .. $]))
+                <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">true</span>;
+            indexes[<span class="dv" title="DecValTok">0</span>].swap(idx);
+        }
+
+        <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">false</span>;
+    }
+
+    <span class="kw" title="KeywordTok">return</span> inner(blocks.<span class="dt" title="DataTypeTok">length</span>.iota.array, word);
+}
+
+<span class="dt" title="DataTypeTok">void</span> main() {
+    <span class="kw" title="KeywordTok">enum</span> Block[] blocks = <span class="st" title="StringTok">&quot;BO XK DQ CP NA GT RE TG QD FS</span>
+<span class="st" title="StringTok">                           JW HU VI AN OB ER FS LY PC ZM&quot;</span>.split;
+
+    <span class="kw" title="KeywordTok">foreach</span> (w; <span class="st" title="StringTok">&quot;&quot;</span> ~ <span class="st" title="StringTok">&quot;A BARK BoOK TrEAT COmMoN SQUAD conFUsE&quot;</span>.split)
+        writefln(<span class="st" title="StringTok">`&quot;%s&quot; %s`</span>, w, blocks.canMakeWord(w));
+
+    <span class="co" title="CommentTok">// Extra test.</span>
+    <span class="kw" title="KeywordTok">immutable</span> Block[] blocks2 = [<span class="st" title="StringTok">&quot;AB&quot;</span>, <span class="st" title="StringTok">&quot;AB&quot;</span>, <span class="st" title="StringTok">&quot;AC&quot;</span>, <span class="st" title="StringTok">&quot;AC&quot;</span>];
+    <span class="kw" title="KeywordTok">immutable</span> word = <span class="st" title="StringTok">&quot;abba&quot;</span>;
+    writefln(<span class="st" title="StringTok">`&quot;%s&quot; %s`</span>, word, blocks2.canMakeWord(word));
+}</code></pre></body>
diff --git a/tests/abc.fortran b/tests/abc.fortran
new file mode 100644
--- /dev/null
+++ b/tests/abc.fortran
@@ -0,0 +1,70 @@
+!-*- mode: compilation; default-directory: "/tmp/" -*-
+!Compilation started at Thu Jun  5 01:52:03
+!
+!make f && for a in '' a bark book treat common squad confuse ; do echo $a | ./f ; done
+!gfortran -std=f2008 -Wall -fopenmp -ffree-form -fall-intrinsics -fimplicit-none -g f.f08 -o f
+! T                      
+! T  A                    NA
+! T  BARK                 BO NA RE XK
+! F  BOOK                 OB BO -- --
+! T  TREAT                GT RE ER NA TG
+! F  COMMON               PC OB ZM -- -- --
+! T  SQUAD                FS DQ HU NA QD
+! T  CONFUSE              CP BO NA FS HU FS RE
+!
+!Compilation finished at Thu Jun  5 01:52:03
+
+program abc
+  implicit none
+  integer, parameter :: nblocks = 20
+  character(len=nblocks) :: goal
+  integer, dimension(nblocks) :: solution
+  character(len=2), dimension(0:nblocks) :: blocks_copy, blocks = &
+       &(/'--','BO','XK','DQ','CP','NA','GT','RE','TG','QD','FS','JW','HU','VI','AN','OB','ER','FS','LY','PC','ZM'/)
+  logical :: valid
+  integer :: i, iostat
+  read(5,*,iostat=iostat) goal
+  if (iostat .ne. 0) goal = ''
+  call ucase(goal)
+  solution = 0
+  blocks_copy = blocks
+  valid = assign_block(goal(1:len_trim(goal)), blocks, solution, 1)
+  write(6,*) valid, ' '//goal, (' '//blocks_copy(solution(i)), i=1,len_trim(goal))
+
+contains
+
+  recursive function assign_block(goal, blocks, solution, n) result(valid)
+    implicit none
+    logical :: valid
+    character(len=*), intent(in) :: goal
+    character(len=2), dimension(0:), intent(inout) :: blocks
+    integer, dimension(:), intent(out) :: solution
+    integer, intent(in) :: n
+    integer :: i
+    character(len=2) :: backing_store
+    valid = .true.
+    if (len(goal)+1 .eq. n) return
+    do i=1, size(blocks)
+       if (index(blocks(i),goal(n:n)) .ne. 0) then
+          backing_store = blocks(i)
+          blocks(i) = ''
+          solution(n) = i
+          if (assign_block(goal, blocks, solution, n+1)) return
+          blocks(i) = backing_store
+       end if
+    end do
+    valid = .false.
+    return
+  end function assign_block
+
+  subroutine ucase(a)
+    implicit none
+    character(len=*), intent(inout) :: a
+    integer :: i, j
+    do i = 1, len_trim(a)
+       j = index('abcdefghijklmnopqrstuvwxyz',a(i:i))
+       if (j .ne. 0) a(i:i) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'(j:j)
+    end do
+  end subroutine ucase
+
+end program abc
diff --git a/tests/abc.fortran.html b/tests/abc.fortran.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.fortran.html
@@ -0,0 +1,87 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="co" title="CommentTok">!-*- mode: compilation; default-directory: &quot;/tmp/&quot; -*-</span>
+<span class="co" title="CommentTok">!Compilation started at Thu Jun  5 01:52:03</span>
+<span class="co" title="CommentTok">!</span>
+<span class="co" title="CommentTok">!make f &amp;&amp; for a in &#39;&#39; a bark book treat common squad confuse ; do echo $a | ./f ; done</span>
+<span class="co" title="CommentTok">!gfortran -std=f2008 -Wall -fopenmp -ffree-form -fall-intrinsics -fimplicit-none -g f.f08 -o f</span>
+<span class="co" title="CommentTok">! T                      </span>
+<span class="co" title="CommentTok">! T  A                    NA</span>
+<span class="co" title="CommentTok">! T  BARK                 BO NA RE XK</span>
+<span class="co" title="CommentTok">! F  BOOK                 OB BO -- --</span>
+<span class="co" title="CommentTok">! T  TREAT                GT RE ER NA TG</span>
+<span class="co" title="CommentTok">! F  COMMON               PC OB ZM -- -- --</span>
+<span class="co" title="CommentTok">! T  SQUAD                FS DQ HU NA QD</span>
+<span class="co" title="CommentTok">! T  CONFUSE              CP BO NA FS HU FS RE</span>
+<span class="co" title="CommentTok">!</span>
+<span class="co" title="CommentTok">!Compilation finished at Thu Jun  5 01:52:03</span>
+
+<span class="kw" title="KeywordTok">program</span> abc
+  <span class="kw" title="KeywordTok">implicit</span> <span class="kw" title="KeywordTok">none</span>
+  <span class="dt" title="DataTypeTok">integer</span>, <span class="dt" title="DataTypeTok">parameter</span> <span class="dt" title="DataTypeTok">::</span> nblocks <span class="kw" title="KeywordTok">=</span> <span class="dv" title="DecValTok">20</span>
+  <span class="dt" title="DataTypeTok">character(len=nblocks)</span> <span class="dt" title="DataTypeTok">::</span> goal
+  <span class="dt" title="DataTypeTok">integer</span>, <span class="dt" title="DataTypeTok">dimension(nblocks)</span> <span class="dt" title="DataTypeTok">::</span> solution
+  <span class="dt" title="DataTypeTok">character(len=2)</span>, <span class="dt" title="DataTypeTok">dimension(0:nblocks)</span> <span class="dt" title="DataTypeTok">::</span> blocks_copy, blocks <span class="kw" title="KeywordTok">=</span> <span class="kw" title="KeywordTok">&amp;</span>
+       <span class="kw" title="KeywordTok">&amp;(/</span><span class="st" title="StringTok">&#39;--&#39;</span>,<span class="st" title="StringTok">&#39;BO&#39;</span>,<span class="st" title="StringTok">&#39;XK&#39;</span>,<span class="st" title="StringTok">&#39;DQ&#39;</span>,<span class="st" title="StringTok">&#39;CP&#39;</span>,<span class="st" title="StringTok">&#39;NA&#39;</span>,<span class="st" title="StringTok">&#39;GT&#39;</span>,<span class="st" title="StringTok">&#39;RE&#39;</span>,<span class="st" title="StringTok">&#39;TG&#39;</span>,<span class="st" title="StringTok">&#39;QD&#39;</span>,<span class="st" title="StringTok">&#39;FS&#39;</span>,<span class="st" title="StringTok">&#39;JW&#39;</span>,<span class="st" title="StringTok">&#39;HU&#39;</span>,<span class="st" title="StringTok">&#39;VI&#39;</span>,<span class="st" title="StringTok">&#39;AN&#39;</span>,<span class="st" title="StringTok">&#39;OB&#39;</span>,<span class="st" title="StringTok">&#39;ER&#39;</span>,<span class="st" title="StringTok">&#39;FS&#39;</span>,<span class="st" title="StringTok">&#39;LY&#39;</span>,<span class="st" title="StringTok">&#39;PC&#39;</span>,<span class="st" title="StringTok">&#39;ZM&#39;</span><span class="kw" title="KeywordTok">/)</span>
+  <span class="dt" title="DataTypeTok">logical</span> <span class="dt" title="DataTypeTok">::</span> valid
+  <span class="dt" title="DataTypeTok">integer</span> <span class="dt" title="DataTypeTok">::</span> i, iostat
+  <span class="fu" title="FunctionTok">read(</span><span class="dv" title="DecValTok">5</span>,<span class="fu" title="FunctionTok">*</span>,<span class="fu" title="FunctionTok">iostat</span><span class="kw" title="KeywordTok">=</span><span class="fu" title="FunctionTok">iostat)</span> goal
+  <span class="kw" title="KeywordTok">if</span> (iostat <span class="kw" title="KeywordTok">.ne.</span> <span class="dv" title="DecValTok">0</span>) goal <span class="kw" title="KeywordTok">=</span> <span class="st" title="StringTok">&#39;&#39;</span>
+  <span class="kw" title="KeywordTok">call</span> ucase(goal)
+  solution <span class="kw" title="KeywordTok">=</span> <span class="dv" title="DecValTok">0</span>
+  blocks_copy <span class="kw" title="KeywordTok">=</span> blocks
+  valid <span class="kw" title="KeywordTok">=</span> assign_block(goal(<span class="dv" title="DecValTok">1</span>:<span class="kw" title="KeywordTok">len_trim</span>(goal)), blocks, solution, <span class="dv" title="DecValTok">1</span>)
+  <span class="fu" title="FunctionTok">write(</span><span class="dv" title="DecValTok">6</span>,<span class="fu" title="FunctionTok">*)</span> valid, <span class="st" title="StringTok">&#39; &#39;</span><span class="kw" title="KeywordTok">//</span>goal, (<span class="st" title="StringTok">&#39; &#39;</span><span class="kw" title="KeywordTok">//</span>blocks_copy(solution(i)), i<span class="kw" title="KeywordTok">=</span><span class="dv" title="DecValTok">1</span>,<span class="kw" title="KeywordTok">len_trim</span>(goal))
+
+<span class="co" title="CommentTok">contains</span>
+
+  <span class="kw" title="KeywordTok">recursive</span> <span class="kw" title="KeywordTok">function</span> assign_block(goal, blocks, solution, n) <span class="kw" title="KeywordTok">result</span>(valid)
+    <span class="kw" title="KeywordTok">implicit</span> <span class="kw" title="KeywordTok">none</span>
+    <span class="dt" title="DataTypeTok">logical</span> <span class="dt" title="DataTypeTok">::</span> valid
+    <span class="dt" title="DataTypeTok">character(len=*)</span>, <span class="dt" title="DataTypeTok">intent(in)</span> <span class="dt" title="DataTypeTok">::</span> goal
+    <span class="dt" title="DataTypeTok">character(len=2)</span>, <span class="dt" title="DataTypeTok">dimension(0:)</span>, <span class="dt" title="DataTypeTok">intent(inout)</span> <span class="dt" title="DataTypeTok">::</span> blocks
+    <span class="dt" title="DataTypeTok">integer</span>, <span class="dt" title="DataTypeTok">dimension(:)</span>, <span class="dt" title="DataTypeTok">intent(out)</span> <span class="dt" title="DataTypeTok">::</span> solution
+    <span class="dt" title="DataTypeTok">integer</span>, <span class="dt" title="DataTypeTok">intent(in)</span> <span class="dt" title="DataTypeTok">::</span> n
+    <span class="dt" title="DataTypeTok">integer</span> <span class="dt" title="DataTypeTok">::</span> i
+    <span class="dt" title="DataTypeTok">character(len=2)</span> <span class="dt" title="DataTypeTok">::</span> backing_store
+    valid <span class="kw" title="KeywordTok">=</span> <span class="ot" title="OtherTok">.true.</span>
+    <span class="kw" title="KeywordTok">if</span> (<span class="fu" title="FunctionTok">len</span>(goal)<span class="kw" title="KeywordTok">+</span><span class="dv" title="DecValTok">1</span> <span class="kw" title="KeywordTok">.eq.</span> n) <span class="kw" title="KeywordTok">return</span>
+    <span class="kw" title="KeywordTok">do</span> i<span class="kw" title="KeywordTok">=</span><span class="dv" title="DecValTok">1</span>, <span class="fu" title="FunctionTok">size</span>(blocks)
+       <span class="kw" title="KeywordTok">if</span> (<span class="kw" title="KeywordTok">index</span>(blocks(i),goal(n:n)) <span class="kw" title="KeywordTok">.ne.</span> <span class="dv" title="DecValTok">0</span>) <span class="kw" title="KeywordTok">then</span>
+          backing_store <span class="kw" title="KeywordTok">=</span> blocks(i)
+          blocks(i) <span class="kw" title="KeywordTok">=</span> <span class="st" title="StringTok">&#39;&#39;</span>
+          solution(n) <span class="kw" title="KeywordTok">=</span> i
+          <span class="kw" title="KeywordTok">if</span> (assign_block(goal, blocks, solution, n<span class="kw" title="KeywordTok">+</span><span class="dv" title="DecValTok">1</span>)) <span class="kw" title="KeywordTok">return</span>
+          blocks(i) <span class="kw" title="KeywordTok">=</span> backing_store
+       <span class="kw" title="KeywordTok">end if</span>
+    <span class="kw" title="KeywordTok">end do</span>
+    valid <span class="kw" title="KeywordTok">=</span> <span class="ot" title="OtherTok">.false.</span>
+    <span class="kw" title="KeywordTok">return</span>
+  <span class="kw" title="KeywordTok">end function</span> assign_block
+
+  <span class="kw" title="KeywordTok">subroutine</span> ucase(a)
+    <span class="kw" title="KeywordTok">implicit</span> <span class="kw" title="KeywordTok">none</span>
+    <span class="dt" title="DataTypeTok">character(len=*)</span>, <span class="dt" title="DataTypeTok">intent(inout)</span> <span class="dt" title="DataTypeTok">::</span> a
+    <span class="dt" title="DataTypeTok">integer</span> <span class="dt" title="DataTypeTok">::</span> i, j
+    <span class="kw" title="KeywordTok">do</span> i <span class="kw" title="KeywordTok">=</span> <span class="dv" title="DecValTok">1</span>, <span class="kw" title="KeywordTok">len_trim</span>(a)
+       j <span class="kw" title="KeywordTok">=</span> <span class="kw" title="KeywordTok">index</span>(<span class="st" title="StringTok">&#39;abcdefghijklmnopqrstuvwxyz&#39;</span>,a(i:i))
+       <span class="kw" title="KeywordTok">if</span> (j <span class="kw" title="KeywordTok">.ne.</span> <span class="dv" title="DecValTok">0</span>) a(i:i) <span class="kw" title="KeywordTok">=</span> <span class="st" title="StringTok">&#39;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;</span>(j:j)
+    <span class="kw" title="KeywordTok">end do</span>
+  <span class="kw" title="KeywordTok">end subroutine</span> ucase
+
+<span class="kw" title="KeywordTok">end program</span> abc</code></pre></body>
diff --git a/tests/abc.go b/tests/abc.go
new file mode 100644
--- /dev/null
+++ b/tests/abc.go
@@ -0,0 +1,39 @@
+package main
+
+import (
+        "fmt"
+        "strings"
+)
+
+func newSpeller(blocks string) func(string) bool {
+        bl := strings.Fields(blocks)
+        return func(word string) bool {
+                return r(word, bl)
+        }
+}
+
+func r(word string, bl []string) bool {
+        if word == "" {
+                return true
+        }
+        c := word[0] | 32
+        for i, b := range bl {
+                if c == b[0]|32 || c == b[1]|32 {
+                        bl[i], bl[0] = bl[0], b
+                        if r(word[1:], bl[1:]) == true {
+                                return true
+                        }
+                        bl[i], bl[0] = bl[0], bl[i]
+                }
+        }
+        return false
+}
+
+func main() {
+        sp := newSpeller(
+                "BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM")
+        for _, word := range []string{
+                "A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSE"} {
+                fmt.Println(word, sp(word))
+        }
+}
diff --git a/tests/abc.go.html b/tests/abc.go.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.go.html
@@ -0,0 +1,56 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">package</span> main
+
+<span class="kw" title="KeywordTok">import</span> (
+        <span class="st" title="StringTok">&quot;fmt&quot;</span>
+        <span class="st" title="StringTok">&quot;strings&quot;</span>
+)
+
+<span class="kw" title="KeywordTok">func</span> newSpeller(blocks <span class="dt" title="DataTypeTok">string</span>) <span class="kw" title="KeywordTok">func</span>(<span class="dt" title="DataTypeTok">string</span>) <span class="dt" title="DataTypeTok">bool</span> {
+        bl := strings.Fields(blocks)
+        <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">func</span>(word <span class="dt" title="DataTypeTok">string</span>) <span class="dt" title="DataTypeTok">bool</span> {
+                <span class="kw" title="KeywordTok">return</span> r(word, bl)
+        }
+}
+
+<span class="kw" title="KeywordTok">func</span> r(word <span class="dt" title="DataTypeTok">string</span>, bl []<span class="dt" title="DataTypeTok">string</span>) <span class="dt" title="DataTypeTok">bool</span> {
+        <span class="kw" title="KeywordTok">if</span> word == <span class="st" title="StringTok">&quot;&quot;</span> {
+                <span class="kw" title="KeywordTok">return</span> <span class="ot" title="OtherTok">true</span>
+        }
+        c := word[<span class="dv" title="DecValTok">0</span>] | <span class="dv" title="DecValTok">32</span>
+        <span class="kw" title="KeywordTok">for</span> i, b := <span class="kw" title="KeywordTok">range</span> bl {
+                <span class="kw" title="KeywordTok">if</span> c == b[<span class="dv" title="DecValTok">0</span>]|<span class="dv" title="DecValTok">32</span> || c == b[<span class="dv" title="DecValTok">1</span>]|<span class="dv" title="DecValTok">32</span> {
+                        bl[i], bl[<span class="dv" title="DecValTok">0</span>] = bl[<span class="dv" title="DecValTok">0</span>], b
+                        <span class="kw" title="KeywordTok">if</span> r(word[<span class="dv" title="DecValTok">1</span>:], bl[<span class="dv" title="DecValTok">1</span>:]) == <span class="ot" title="OtherTok">true</span> {
+                                <span class="kw" title="KeywordTok">return</span> <span class="ot" title="OtherTok">true</span>
+                        }
+                        bl[i], bl[<span class="dv" title="DecValTok">0</span>] = bl[<span class="dv" title="DecValTok">0</span>], bl[i]
+                }
+        }
+        <span class="kw" title="KeywordTok">return</span> <span class="ot" title="OtherTok">false</span>
+}
+
+<span class="kw" title="KeywordTok">func</span> main() {
+        sp := newSpeller(
+                <span class="st" title="StringTok">&quot;BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM&quot;</span>)
+        <span class="kw" title="KeywordTok">for</span> _, word := <span class="kw" title="KeywordTok">range</span> []<span class="dt" title="DataTypeTok">string</span>{
+                <span class="st" title="StringTok">&quot;A&quot;</span>, <span class="st" title="StringTok">&quot;BARK&quot;</span>, <span class="st" title="StringTok">&quot;BOOK&quot;</span>, <span class="st" title="StringTok">&quot;TREAT&quot;</span>, <span class="st" title="StringTok">&quot;COMMON&quot;</span>, <span class="st" title="StringTok">&quot;SQUAD&quot;</span>, <span class="st" title="StringTok">&quot;CONFUSE&quot;</span>} {
+                fmt.Println(word, sp(word))
+        }
+}</code></pre></body>
diff --git a/tests/abc.haskell b/tests/abc.haskell
new file mode 100644
--- /dev/null
+++ b/tests/abc.haskell
@@ -0,0 +1,15 @@
+import Data.List (delete)
+import Data.Char (toUpper)
+
+-- returns list of all solutions, each solution being a list of blocks
+abc :: (Eq a) => [[a]] -> [a] -> [[[a]]]
+abc _ [] = [[]]
+abc blocks (c:cs) = [b:ans | b <- blocks, c `elem` b,
+                             ans <- abc (delete b blocks) cs]
+
+blocks = ["BO", "XK", "DQ", "CP", "NA", "GT", "RE", "TG", "QD", "FS",
+          "JW", "HU", "VI", "AN", "OB", "ER", "FS", "LY", "PC", "ZM"]
+
+main :: IO ()
+main = mapM_ (\w -> print (w, not . null $ abc blocks (map toUpper w)))
+         ["", "A", "BARK", "BoOK", "TrEAT", "COmMoN", "SQUAD", "conFUsE"]
diff --git a/tests/abc.haskell.html b/tests/abc.haskell.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.haskell.html
@@ -0,0 +1,32 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">import </span><span class="dt" title="DataTypeTok">Data.List</span> (delete)
+<span class="kw" title="KeywordTok">import </span><span class="dt" title="DataTypeTok">Data.Char</span> (toUpper)
+
+<span class="co" title="CommentTok">-- returns list of all solutions, each solution being a list of blocks</span>
+<span class="ot" title="OtherTok">abc ::</span> (<span class="dt" title="DataTypeTok">Eq</span> a) <span class="ot" title="OtherTok">=&gt;</span> [[a]] <span class="ot" title="OtherTok">-&gt;</span> [a] <span class="ot" title="OtherTok">-&gt;</span> [[[a]]]
+abc _ [] <span class="fu" title="FunctionTok">=</span> [[]]
+abc blocks (c<span class="fu" title="FunctionTok">:</span>cs) <span class="fu" title="FunctionTok">=</span> [b<span class="fu" title="FunctionTok">:</span>ans <span class="fu" title="FunctionTok">|</span> b <span class="ot" title="OtherTok">&lt;-</span> blocks, c <span class="ot" title="OtherTok">`elem`</span> b,
+                             ans <span class="ot" title="OtherTok">&lt;-</span> abc (delete b blocks) cs]
+
+blocks <span class="fu" title="FunctionTok">=</span> [<span class="st" title="StringTok">&quot;BO&quot;</span>, <span class="st" title="StringTok">&quot;XK&quot;</span>, <span class="st" title="StringTok">&quot;DQ&quot;</span>, <span class="st" title="StringTok">&quot;CP&quot;</span>, <span class="st" title="StringTok">&quot;NA&quot;</span>, <span class="st" title="StringTok">&quot;GT&quot;</span>, <span class="st" title="StringTok">&quot;RE&quot;</span>, <span class="st" title="StringTok">&quot;TG&quot;</span>, <span class="st" title="StringTok">&quot;QD&quot;</span>, <span class="st" title="StringTok">&quot;FS&quot;</span>,
+          <span class="st" title="StringTok">&quot;JW&quot;</span>, <span class="st" title="StringTok">&quot;HU&quot;</span>, <span class="st" title="StringTok">&quot;VI&quot;</span>, <span class="st" title="StringTok">&quot;AN&quot;</span>, <span class="st" title="StringTok">&quot;OB&quot;</span>, <span class="st" title="StringTok">&quot;ER&quot;</span>, <span class="st" title="StringTok">&quot;FS&quot;</span>, <span class="st" title="StringTok">&quot;LY&quot;</span>, <span class="st" title="StringTok">&quot;PC&quot;</span>, <span class="st" title="StringTok">&quot;ZM&quot;</span>]
+
+<span class="ot" title="OtherTok">main ::</span> <span class="dt" title="DataTypeTok">IO</span> ()
+main <span class="fu" title="FunctionTok">=</span> mapM_ (\w <span class="ot" title="OtherTok">-&gt;</span> print (w, not <span class="fu" title="FunctionTok">.</span> null <span class="fu" title="FunctionTok">$</span> abc blocks (map toUpper w)))
+         [<span class="st" title="StringTok">&quot;&quot;</span>, <span class="st" title="StringTok">&quot;A&quot;</span>, <span class="st" title="StringTok">&quot;BARK&quot;</span>, <span class="st" title="StringTok">&quot;BoOK&quot;</span>, <span class="st" title="StringTok">&quot;TrEAT&quot;</span>, <span class="st" title="StringTok">&quot;COmMoN&quot;</span>, <span class="st" title="StringTok">&quot;SQUAD&quot;</span>, <span class="st" title="StringTok">&quot;conFUsE&quot;</span>]</code></pre></body>
diff --git a/tests/abc.java b/tests/abc.java
new file mode 100644
--- /dev/null
+++ b/tests/abc.java
@@ -0,0 +1,44 @@
+import java.util.Arrays;
+
+public class ABC{
+        private static void swap(int i, int j, Object... arr){
+                Object tmp = arr[i];
+                arr[i] = arr[j];
+                arr[j] = tmp;
+        }
+        
+        public static boolean canMakeWord(String word, String... blocks) {
+            if(word.length() == 0)
+                return true;
+         
+            char c = Character.toUpperCase(word.charAt(0));
+            for(int i = 0; i < blocks.length; i++) {
+                String b = blocks[i];
+                if(Character.toUpperCase(b.charAt(0)) != c && Character.toUpperCase(b.charAt(1)) != c)
+                    continue;
+                swap(0, i, blocks);
+                if(canMakeWord(word.substring(1), Arrays.copyOfRange(blocks, 1, blocks.length)))
+                    return true;
+                swap(0, i, blocks);
+            }
+         
+            return false;
+        }
+        
+        public static void main(String[] args){
+                String[] blocks = {"BO", "XK", "DQ", "CP", "NA", 
+                                "GT", "RE", "TG", "QD", "FS", 
+                                "JW", "HU", "VI", "AN", "OB", 
+                                "ER", "FS", "LY", "PC", "ZM"};
+
+                System.out.println("\"\": " + canMakeWord("", blocks));
+                System.out.println("A: " + canMakeWord("A", blocks));
+                System.out.println("BARK: " + canMakeWord("BARK", blocks));
+                System.out.println("book: " + canMakeWord("book", blocks));
+                System.out.println("treat: " + canMakeWord("treat", blocks));
+                System.out.println("COMMON: " + canMakeWord("COMMON", blocks));
+                System.out.println("SQuAd: " + canMakeWord("SQuAd", blocks));
+                System.out.println("CONFUSE: " + canMakeWord("CONFUSE", blocks));
+                
+        }
+}
diff --git a/tests/abc.java.html b/tests/abc.java.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.java.html
@@ -0,0 +1,61 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">import java.util.Arrays;</span>
+
+<span class="kw" title="KeywordTok">public</span> <span class="kw" title="KeywordTok">class</span> ABC{
+        <span class="kw" title="KeywordTok">private</span> <span class="dt" title="DataTypeTok">static</span> <span class="dt" title="DataTypeTok">void</span> <span class="fu" title="FunctionTok">swap</span>(<span class="dt" title="DataTypeTok">int</span> i, <span class="dt" title="DataTypeTok">int</span> j, Object<span class="kw" title="KeywordTok">... </span>arr){
+                Object tmp = arr[i];
+                arr[i] = arr[j];
+                arr[j] = tmp;
+        }
+        
+        <span class="kw" title="KeywordTok">public</span> <span class="dt" title="DataTypeTok">static</span> <span class="dt" title="DataTypeTok">boolean</span> <span class="fu" title="FunctionTok">canMakeWord</span>(String word, String<span class="kw" title="KeywordTok">... </span>blocks) {
+            <span class="kw" title="KeywordTok">if</span>(word.<span class="fu" title="FunctionTok">length</span>() == <span class="dv" title="DecValTok">0</span>)
+                <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">true</span>;
+         
+            <span class="dt" title="DataTypeTok">char</span> c = Character.<span class="fu" title="FunctionTok">toUpperCase</span>(word.<span class="fu" title="FunctionTok">charAt</span>(<span class="dv" title="DecValTok">0</span>));
+            <span class="kw" title="KeywordTok">for</span>(<span class="dt" title="DataTypeTok">int</span> i = <span class="dv" title="DecValTok">0</span>; i &lt; blocks.<span class="fu" title="FunctionTok">length</span>; i++) {
+                String b = blocks[i];
+                <span class="kw" title="KeywordTok">if</span>(Character.<span class="fu" title="FunctionTok">toUpperCase</span>(b.<span class="fu" title="FunctionTok">charAt</span>(<span class="dv" title="DecValTok">0</span>)) != c &amp;&amp; Character.<span class="fu" title="FunctionTok">toUpperCase</span>(b.<span class="fu" title="FunctionTok">charAt</span>(<span class="dv" title="DecValTok">1</span>)) != c)
+                    <span class="kw" title="KeywordTok">continue</span>;
+                <span class="fu" title="FunctionTok">swap</span>(<span class="dv" title="DecValTok">0</span>, i, blocks);
+                <span class="kw" title="KeywordTok">if</span>(<span class="fu" title="FunctionTok">canMakeWord</span>(word.<span class="fu" title="FunctionTok">substring</span>(<span class="dv" title="DecValTok">1</span>), Arrays.<span class="fu" title="FunctionTok">copyOfRange</span>(blocks, <span class="dv" title="DecValTok">1</span>, blocks.<span class="fu" title="FunctionTok">length</span>)))
+                    <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">true</span>;
+                <span class="fu" title="FunctionTok">swap</span>(<span class="dv" title="DecValTok">0</span>, i, blocks);
+            }
+         
+            <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">false</span>;
+        }
+        
+        <span class="kw" title="KeywordTok">public</span> <span class="dt" title="DataTypeTok">static</span> <span class="dt" title="DataTypeTok">void</span> <span class="fu" title="FunctionTok">main</span>(String[] args){
+                String[] blocks = {<span class="st" title="StringTok">&quot;BO&quot;</span>, <span class="st" title="StringTok">&quot;XK&quot;</span>, <span class="st" title="StringTok">&quot;DQ&quot;</span>, <span class="st" title="StringTok">&quot;CP&quot;</span>, <span class="st" title="StringTok">&quot;NA&quot;</span>, 
+                                <span class="st" title="StringTok">&quot;GT&quot;</span>, <span class="st" title="StringTok">&quot;RE&quot;</span>, <span class="st" title="StringTok">&quot;TG&quot;</span>, <span class="st" title="StringTok">&quot;QD&quot;</span>, <span class="st" title="StringTok">&quot;FS&quot;</span>, 
+                                <span class="st" title="StringTok">&quot;JW&quot;</span>, <span class="st" title="StringTok">&quot;HU&quot;</span>, <span class="st" title="StringTok">&quot;VI&quot;</span>, <span class="st" title="StringTok">&quot;AN&quot;</span>, <span class="st" title="StringTok">&quot;OB&quot;</span>, 
+                                <span class="st" title="StringTok">&quot;ER&quot;</span>, <span class="st" title="StringTok">&quot;FS&quot;</span>, <span class="st" title="StringTok">&quot;LY&quot;</span>, <span class="st" title="StringTok">&quot;PC&quot;</span>, <span class="st" title="StringTok">&quot;ZM&quot;</span>};
+
+                System.<span class="fu" title="FunctionTok">out</span>.<span class="fu" title="FunctionTok">println</span>(<span class="st" title="StringTok">&quot;</span><span class="ch" title="CharTok">\&quot;\&quot;</span><span class="st" title="StringTok">: &quot;</span> + <span class="fu" title="FunctionTok">canMakeWord</span>(<span class="st" title="StringTok">&quot;&quot;</span>, blocks));
+                System.<span class="fu" title="FunctionTok">out</span>.<span class="fu" title="FunctionTok">println</span>(<span class="st" title="StringTok">&quot;A: &quot;</span> + <span class="fu" title="FunctionTok">canMakeWord</span>(<span class="st" title="StringTok">&quot;A&quot;</span>, blocks));
+                System.<span class="fu" title="FunctionTok">out</span>.<span class="fu" title="FunctionTok">println</span>(<span class="st" title="StringTok">&quot;BARK: &quot;</span> + <span class="fu" title="FunctionTok">canMakeWord</span>(<span class="st" title="StringTok">&quot;BARK&quot;</span>, blocks));
+                System.<span class="fu" title="FunctionTok">out</span>.<span class="fu" title="FunctionTok">println</span>(<span class="st" title="StringTok">&quot;book: &quot;</span> + <span class="fu" title="FunctionTok">canMakeWord</span>(<span class="st" title="StringTok">&quot;book&quot;</span>, blocks));
+                System.<span class="fu" title="FunctionTok">out</span>.<span class="fu" title="FunctionTok">println</span>(<span class="st" title="StringTok">&quot;treat: &quot;</span> + <span class="fu" title="FunctionTok">canMakeWord</span>(<span class="st" title="StringTok">&quot;treat&quot;</span>, blocks));
+                System.<span class="fu" title="FunctionTok">out</span>.<span class="fu" title="FunctionTok">println</span>(<span class="st" title="StringTok">&quot;COMMON: &quot;</span> + <span class="fu" title="FunctionTok">canMakeWord</span>(<span class="st" title="StringTok">&quot;COMMON&quot;</span>, blocks));
+                System.<span class="fu" title="FunctionTok">out</span>.<span class="fu" title="FunctionTok">println</span>(<span class="st" title="StringTok">&quot;SQuAd: &quot;</span> + <span class="fu" title="FunctionTok">canMakeWord</span>(<span class="st" title="StringTok">&quot;SQuAd&quot;</span>, blocks));
+                System.<span class="fu" title="FunctionTok">out</span>.<span class="fu" title="FunctionTok">println</span>(<span class="st" title="StringTok">&quot;CONFUSE: &quot;</span> + <span class="fu" title="FunctionTok">canMakeWord</span>(<span class="st" title="StringTok">&quot;CONFUSE&quot;</span>, blocks));
+                
+        }
+}</code></pre></body>
diff --git a/tests/abc.javascript b/tests/abc.javascript
new file mode 100644
--- /dev/null
+++ b/tests/abc.javascript
@@ -0,0 +1,33 @@
+let characters = "BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM";
+let blocks = characters.split(" ").map(pair => pair.split(""));
+ 
+function isWordPossible(word) {
+  var letters = [...word.toUpperCase()];
+  var length = letters.length;
+  var copy = new Set(blocks);
+
+  for (let letter of letters) {
+    for (let block of copy) {
+      let index = block.indexOf(letter);
+ 
+      if (index !== -1) {
+        length--;
+        copy.delete(block);
+        break;  
+      }
+    }
+
+  }
+  return !length;
+}    
+ 
+[ 
+  "A", 
+  "BARK", 
+  "BOOK", 
+  "TREAT", 
+  "COMMON", 
+  "SQUAD", 
+  "CONFUSE" 
+].forEach(word => console.log(`${word}: ${isWordPossible(word)}`));
+
diff --git a/tests/abc.javascript.html b/tests/abc.javascript.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.javascript.html
@@ -0,0 +1,50 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">let</span> characters = <span class="st" title="StringTok">&quot;BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM&quot;</span>;
+<span class="kw" title="KeywordTok">let</span> blocks = <span class="ot" title="OtherTok">characters</span>.<span class="fu" title="FunctionTok">split</span>(<span class="st" title="StringTok">&quot; &quot;</span>).<span class="fu" title="FunctionTok">map</span>(pair =&gt; <span class="ot" title="OtherTok">pair</span>.<span class="fu" title="FunctionTok">split</span>(<span class="st" title="StringTok">&quot;&quot;</span>));
+ 
+<span class="kw" title="KeywordTok">function</span> <span class="fu" title="FunctionTok">isWordPossible</span>(word) {
+  <span class="kw" title="KeywordTok">var</span> letters = [...<span class="ot" title="OtherTok">word</span>.<span class="fu" title="FunctionTok">toUpperCase</span>()];
+  <span class="kw" title="KeywordTok">var</span> length = <span class="ot" title="OtherTok">letters</span>.<span class="fu" title="FunctionTok">length</span>;
+  <span class="kw" title="KeywordTok">var</span> copy = <span class="kw" title="KeywordTok">new</span> <span class="fu" title="FunctionTok">Set</span>(blocks);
+
+  <span class="kw" title="KeywordTok">for</span> (<span class="kw" title="KeywordTok">let</span> letter of letters) {
+    <span class="kw" title="KeywordTok">for</span> (<span class="kw" title="KeywordTok">let</span> block of copy) {
+      <span class="kw" title="KeywordTok">let</span> index = <span class="ot" title="OtherTok">block</span>.<span class="fu" title="FunctionTok">indexOf</span>(letter);
+ 
+      <span class="kw" title="KeywordTok">if</span> (index !== -<span class="dv" title="DecValTok">1</span>) {
+        length--;
+        <span class="ot" title="OtherTok">copy</span>.<span class="fu" title="FunctionTok">delete</span>(block);
+        <span class="kw" title="KeywordTok">break</span>;  
+      }
+    }
+
+  }
+  <span class="kw" title="KeywordTok">return</span> !length;
+}    
+ 
+[ 
+  <span class="st" title="StringTok">&quot;A&quot;</span>, 
+  <span class="st" title="StringTok">&quot;BARK&quot;</span>, 
+  <span class="st" title="StringTok">&quot;BOOK&quot;</span>, 
+  <span class="st" title="StringTok">&quot;TREAT&quot;</span>, 
+  <span class="st" title="StringTok">&quot;COMMON&quot;</span>, 
+  <span class="st" title="StringTok">&quot;SQUAD&quot;</span>, 
+  <span class="st" title="StringTok">&quot;CONFUSE&quot;</span> 
+].<span class="fu" title="FunctionTok">forEach</span>(word =&gt; <span class="ot" title="OtherTok">console</span>.<span class="fu" title="FunctionTok">log</span>(`${word}: ${<span class="fu" title="FunctionTok">isWordPossible</span>(word)}`));
+</code></pre></body>
diff --git a/tests/abc.julia b/tests/abc.julia
new file mode 100644
--- /dev/null
+++ b/tests/abc.julia
@@ -0,0 +1,9 @@
+function abc (str, list)
+  isempty(str) && return true
+  for i = 1:length(list)
+    str[end] in list[i] && 
+    any([abc(str[1:end-1], deleteat!(copy(list), i))]) &&
+    return true
+  end
+  false
+end
diff --git a/tests/abc.julia.html b/tests/abc.julia.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.julia.html
@@ -0,0 +1,26 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">function</span> abc (str, list)
+  isempty(str) &amp;&amp; <span class="kw" title="KeywordTok">return</span> true
+  <span class="kw" title="KeywordTok">for</span> i = <span class="fl" title="FloatTok">1</span>:length(list)
+    str[<span class="kw" title="KeywordTok">end</span>] <span class="kw" title="KeywordTok">in</span> list[i] &amp;&amp; 
+    any([abc(str[<span class="fl" title="FloatTok">1</span>:<span class="kw" title="KeywordTok">end</span>-<span class="fl" title="FloatTok">1</span>], deleteat!(copy(list), i))]) &amp;&amp;
+    <span class="kw" title="KeywordTok">return</span> true
+  <span class="kw" title="KeywordTok">end</span>
+  false
+<span class="kw" title="KeywordTok">end</span></code></pre></body>
diff --git a/tests/abc.lisp b/tests/abc.lisp
new file mode 100644
--- /dev/null
+++ b/tests/abc.lisp
@@ -0,0 +1,15 @@
+
+(defun word-possible-p (word blocks)
+  (cond 
+    ((= (length word) 0) t)
+    ((null blocks) nil)
+    (t (let* 
+         ((c (aref word 0))
+          (bs (remove-if-not #'(lambda (b) 
+                                 (find c b :test #'char-equal))
+                             blocks)))
+         (some #'identity 
+               (loop for b in bs
+                     collect (word-possible-p
+                               (subseq word 1)
+                               (remove b blocks))))))))
diff --git a/tests/abc.lisp.html b/tests/abc.lisp.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.lisp.html
@@ -0,0 +1,32 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode">
+(<span class="kw" title="KeywordTok">defun</span><span class="fu" title="FunctionTok"> word-possible-p </span>(word blocks)
+  (<span class="kw" title="KeywordTok">cond</span> 
+    ((<span class="kw" title="KeywordTok">=</span> (<span class="kw" title="KeywordTok">length</span> word) <span class="dv" title="DecValTok">0</span>) <span class="kw" title="KeywordTok">t</span>)
+    ((<span class="kw" title="KeywordTok">null</span> blocks) <span class="kw" title="KeywordTok">nil</span>)
+    (<span class="kw" title="KeywordTok">t</span> (<span class="kw" title="KeywordTok">let*</span> 
+         ((c (<span class="kw" title="KeywordTok">aref</span> word <span class="dv" title="DecValTok">0</span>))
+          (bs (<span class="kw" title="KeywordTok">remove-if-not</span> #&#39;(<span class="kw" title="KeywordTok">lambda</span> (b) 
+                                 (<span class="kw" title="KeywordTok">find</span> c b <span class="kw" title="KeywordTok">:test</span> #&#39;char-equal))
+                             blocks)))
+         (<span class="kw" title="KeywordTok">some</span> #&#39;identity 
+               (<span class="kw" title="KeywordTok">loop</span> for b in bs
+                     collect (word-possible-p
+                               (<span class="kw" title="KeywordTok">subseq</span> word <span class="dv" title="DecValTok">1</span>)
+                               (<span class="kw" title="KeywordTok">remove</span> b blocks))))))))</code></pre></body>
diff --git a/tests/abc.matlab b/tests/abc.matlab
new file mode 100644
--- /dev/null
+++ b/tests/abc.matlab
@@ -0,0 +1,26 @@
+function testABC
+    combos = ['BO' ; 'XK' ; 'DQ' ; 'CP' ; 'NA' ; 'GT' ; 'RE' ; 'TG' ; 'QD' ; ...
+        'FS' ; 'JW' ; 'HU' ; 'VI' ; 'AN' ; 'OB' ; 'ER' ; 'FS' ; 'LY' ; ...
+        'PC' ; 'ZM'];
+    words = {'A' 'BARK' 'BOOK' 'TREAT' 'COMMON' 'SQUAD' 'CONFUSE'};
+    for k = 1:length(words)
+        possible = canMakeWord(words{k}, combos);
+        fprintf('Can%s make word %s.\n', char(~possible.*'NOT'), words{k})
+    end
+end
+
+function isPossible = canMakeWord(word, combos)
+    word = lower(word);
+    combos = lower(combos);
+    isPossible = true;
+    k = 1;
+    while isPossible && k <= length(word)
+        [r, c] = find(combos == word(k), 1);
+        if ~isempty(r)
+            combos(r, :) = '';
+        else
+            isPossible = false;
+        end
+        k = k+1;
+    end
+end
diff --git a/tests/abc.matlab.html b/tests/abc.matlab.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.matlab.html
@@ -0,0 +1,43 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode">function testABC
+    combos = [<span class="st" title="StringTok">&#39;BO&#39;</span> ; <span class="st" title="StringTok">&#39;XK&#39;</span> ; <span class="st" title="StringTok">&#39;DQ&#39;</span> ; <span class="st" title="StringTok">&#39;CP&#39;</span> ; <span class="st" title="StringTok">&#39;NA&#39;</span> ; <span class="st" title="StringTok">&#39;GT&#39;</span> ; <span class="st" title="StringTok">&#39;RE&#39;</span> ; <span class="st" title="StringTok">&#39;TG&#39;</span> ; <span class="st" title="StringTok">&#39;QD&#39;</span> ; ...
+        <span class="st" title="StringTok">&#39;FS&#39;</span> ; <span class="st" title="StringTok">&#39;JW&#39;</span> ; <span class="st" title="StringTok">&#39;HU&#39;</span> ; <span class="st" title="StringTok">&#39;VI&#39;</span> ; <span class="st" title="StringTok">&#39;AN&#39;</span> ; <span class="st" title="StringTok">&#39;OB&#39;</span> ; <span class="st" title="StringTok">&#39;ER&#39;</span> ; <span class="st" title="StringTok">&#39;FS&#39;</span> ; <span class="st" title="StringTok">&#39;LY&#39;</span> ; ...
+        <span class="st" title="StringTok">&#39;PC&#39;</span> ; <span class="st" title="StringTok">&#39;ZM&#39;</span>];
+    words = {<span class="st" title="StringTok">&#39;A&#39;</span> <span class="st" title="StringTok">&#39;BARK&#39;</span> <span class="st" title="StringTok">&#39;BOOK&#39;</span> <span class="st" title="StringTok">&#39;TREAT&#39;</span> <span class="st" title="StringTok">&#39;COMMON&#39;</span> <span class="st" title="StringTok">&#39;SQUAD&#39;</span> <span class="st" title="StringTok">&#39;CONFUSE&#39;</span>};
+    for k = <span class="fl" title="FloatTok">1</span>:length(words)
+        possible = canMakeWord(words{k}, combos);
+        fprintf(<span class="st" title="StringTok">&#39;Can%s make word %s.\n&#39;</span>, char(~possible.*<span class="st" title="StringTok">&#39;NOT&#39;</span>), words{k})
+    end
+end
+
+function isPossible = canMakeWord(word, combos)
+    word = lower(word);
+    combos = lower(combos);
+    isPossible = true;
+    k = <span class="fl" title="FloatTok">1</span>;
+    while isPossible &amp;&amp; k &lt;= length(word)
+        [r, c] = find(combos == word(k), <span class="fl" title="FloatTok">1</span>);
+        if ~isempty(r)
+            combos(r, :) = <span class="st" title="StringTok">&#39;&#39;</span>;
+        else
+            isPossible = false;
+        end
+        k = k+<span class="fl" title="FloatTok">1</span>;
+    end
+end</code></pre></body>
diff --git a/tests/abc.ocaml b/tests/abc.ocaml
new file mode 100644
--- /dev/null
+++ b/tests/abc.ocaml
@@ -0,0 +1,40 @@
+let blocks = [
+  ('B', 'O');  ('X', 'K');  ('D', 'Q');  ('C', 'P');
+  ('N', 'A');  ('G', 'T');  ('R', 'E');  ('T', 'G');
+  ('Q', 'D');  ('F', 'S');  ('J', 'W');  ('H', 'U');
+  ('V', 'I');  ('A', 'N');  ('O', 'B');  ('E', 'R');
+  ('F', 'S');  ('L', 'Y');  ('P', 'C');  ('Z', 'M');
+]
+
+let find_letter blocks c =
+  let found, remaining =
+    List.partition (fun (c1, c2) -> c1 = c || c2 = c) blocks
+  in
+  match found with
+  | _ :: res -> Some (res @ remaining)
+  | _ -> None
+
+let can_make_word w =
+  let n = String.length w in
+  let rec aux i _blocks =
+    if i >= n then true else
+      match find_letter _blocks w.[i] with
+      | None -> false
+      | Some rem_blocks ->
+          aux (succ i) rem_blocks
+  in
+  aux 0 blocks
+
+let test label f (word, should) =
+  Printf.printf "- %s %S = %B  (should: %B)\n" label word (f word) should
+
+let () =
+  List.iter (test "can make word" can_make_word) [
+    "A", true;
+    "BARK", true;
+    "BOOK", false;
+    "TREAT", true;
+    "COMMON", false;
+    "SQUAD", true;
+    "CONFUSE", true;
+  ]
diff --git a/tests/abc.ocaml.html b/tests/abc.ocaml.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.ocaml.html
@@ -0,0 +1,57 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">let</span> blocks = [
+  (<span class="ch" title="CharTok">&#39;B&#39;</span>, <span class="ch" title="CharTok">&#39;O&#39;</span>);  (<span class="ch" title="CharTok">&#39;X&#39;</span>, <span class="ch" title="CharTok">&#39;K&#39;</span>);  (<span class="ch" title="CharTok">&#39;D&#39;</span>, <span class="ch" title="CharTok">&#39;Q&#39;</span>);  (<span class="ch" title="CharTok">&#39;C&#39;</span>, <span class="ch" title="CharTok">&#39;P&#39;</span>);
+  (<span class="ch" title="CharTok">&#39;N&#39;</span>, <span class="ch" title="CharTok">&#39;A&#39;</span>);  (<span class="ch" title="CharTok">&#39;G&#39;</span>, <span class="ch" title="CharTok">&#39;T&#39;</span>);  (<span class="ch" title="CharTok">&#39;R&#39;</span>, <span class="ch" title="CharTok">&#39;E&#39;</span>);  (<span class="ch" title="CharTok">&#39;T&#39;</span>, <span class="ch" title="CharTok">&#39;G&#39;</span>);
+  (<span class="ch" title="CharTok">&#39;Q&#39;</span>, <span class="ch" title="CharTok">&#39;D&#39;</span>);  (<span class="ch" title="CharTok">&#39;F&#39;</span>, <span class="ch" title="CharTok">&#39;S&#39;</span>);  (<span class="ch" title="CharTok">&#39;J&#39;</span>, <span class="ch" title="CharTok">&#39;W&#39;</span>);  (<span class="ch" title="CharTok">&#39;H&#39;</span>, <span class="ch" title="CharTok">&#39;U&#39;</span>);
+  (<span class="ch" title="CharTok">&#39;V&#39;</span>, <span class="ch" title="CharTok">&#39;I&#39;</span>);  (<span class="ch" title="CharTok">&#39;A&#39;</span>, <span class="ch" title="CharTok">&#39;N&#39;</span>);  (<span class="ch" title="CharTok">&#39;O&#39;</span>, <span class="ch" title="CharTok">&#39;B&#39;</span>);  (<span class="ch" title="CharTok">&#39;E&#39;</span>, <span class="ch" title="CharTok">&#39;R&#39;</span>);
+  (<span class="ch" title="CharTok">&#39;F&#39;</span>, <span class="ch" title="CharTok">&#39;S&#39;</span>);  (<span class="ch" title="CharTok">&#39;L&#39;</span>, <span class="ch" title="CharTok">&#39;Y&#39;</span>);  (<span class="ch" title="CharTok">&#39;P&#39;</span>, <span class="ch" title="CharTok">&#39;C&#39;</span>);  (<span class="ch" title="CharTok">&#39;Z&#39;</span>, <span class="ch" title="CharTok">&#39;M&#39;</span>);
+]
+
+<span class="kw" title="KeywordTok">let</span> find_letter blocks c =
+  <span class="kw" title="KeywordTok">let</span> found, remaining =
+    List<span class="kw" title="KeywordTok">.</span>partition (<span class="kw" title="KeywordTok">fun</span> (c1, c2) -&gt; c1 = c || c2 = c) blocks
+  <span class="kw" title="KeywordTok">in</span>
+  <span class="kw" title="KeywordTok">match</span> found <span class="kw" title="KeywordTok">with</span>
+  | _ :: res -&gt; <span class="dt" title="DataTypeTok">Some</span> (res @ remaining)
+  | _ -&gt; <span class="dt" title="DataTypeTok">None</span>
+
+<span class="kw" title="KeywordTok">let</span> can_make_word w =
+  <span class="kw" title="KeywordTok">let</span> n = String<span class="kw" title="KeywordTok">.</span>length w <span class="kw" title="KeywordTok">in</span>
+  <span class="kw" title="KeywordTok">let</span> <span class="kw" title="KeywordTok">rec</span> aux i _blocks =
+    <span class="kw" title="KeywordTok">if</span> i &gt;= n <span class="kw" title="KeywordTok">then</span> <span class="kw" title="KeywordTok">true</span> <span class="kw" title="KeywordTok">else</span>
+      <span class="kw" title="KeywordTok">match</span> find_letter _blocks w.[i] <span class="kw" title="KeywordTok">with</span>
+      | <span class="dt" title="DataTypeTok">None</span> -&gt; <span class="kw" title="KeywordTok">false</span>
+      | <span class="dt" title="DataTypeTok">Some</span> rem_blocks -&gt;
+          aux (succ i) rem_blocks
+  <span class="kw" title="KeywordTok">in</span>
+  aux <span class="dv" title="DecValTok">0</span> blocks
+
+<span class="kw" title="KeywordTok">let</span> test label f (word, should) =
+  Printf<span class="kw" title="KeywordTok">.</span>printf <span class="st" title="StringTok">&quot;- %s %S = %B  (should: %B)</span><span class="ch" title="CharTok">\n</span><span class="st" title="StringTok">&quot;</span> label word (f word) should
+
+<span class="kw" title="KeywordTok">let</span> () =
+  List<span class="kw" title="KeywordTok">.</span>iter (test <span class="st" title="StringTok">&quot;can make word&quot;</span> can_make_word) [
+    <span class="st" title="StringTok">&quot;A&quot;</span>, <span class="kw" title="KeywordTok">true</span>;
+    <span class="st" title="StringTok">&quot;BARK&quot;</span>, <span class="kw" title="KeywordTok">true</span>;
+    <span class="st" title="StringTok">&quot;BOOK&quot;</span>, <span class="kw" title="KeywordTok">false</span>;
+    <span class="st" title="StringTok">&quot;TREAT&quot;</span>, <span class="kw" title="KeywordTok">true</span>;
+    <span class="st" title="StringTok">&quot;COMMON&quot;</span>, <span class="kw" title="KeywordTok">false</span>;
+    <span class="st" title="StringTok">&quot;SQUAD&quot;</span>, <span class="kw" title="KeywordTok">true</span>;
+    <span class="st" title="StringTok">&quot;CONFUSE&quot;</span>, <span class="kw" title="KeywordTok">true</span>;
+  ]</code></pre></body>
diff --git a/tests/abc.perl b/tests/abc.perl
new file mode 100644
--- /dev/null
+++ b/tests/abc.perl
@@ -0,0 +1,14 @@
+use Test::More tests => 8;
+
+my @blocks1 = qw(BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM);
+is(can_make_word("A",       @blocks1), 1);
+is(can_make_word("BARK",    @blocks1), 1);
+is(can_make_word("BOOK",    @blocks1), undef);
+is(can_make_word("TREAT",   @blocks1), 1);
+is(can_make_word("COMMON",  @blocks1), undef);
+is(can_make_word("SQUAD",   @blocks1), 1);
+is(can_make_word("CONFUSE", @blocks1), 1);
+
+my @blocks2 = qw(US TZ AO QA);
+is(can_make_word('auto', @blocks2), 1);
+
diff --git a/tests/abc.perl.html b/tests/abc.perl.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.perl.html
@@ -0,0 +1,31 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="fu" title="FunctionTok">use</span> <span class="fu" title="FunctionTok">Test::More</span> tests =&gt; <span class="dv" title="DecValTok">8</span>;
+
+<span class="kw" title="KeywordTok">my</span> <span class="dt" title="DataTypeTok">@blocks1</span> = <span class="kw" title="KeywordTok">qw(</span>BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM<span class="kw" title="KeywordTok">)</span>;
+is(can_make_word(<span class="kw" title="KeywordTok">&quot;</span><span class="st" title="StringTok">A</span><span class="kw" title="KeywordTok">&quot;</span>,       <span class="dt" title="DataTypeTok">@blocks1</span>), <span class="dv" title="DecValTok">1</span>);
+is(can_make_word(<span class="kw" title="KeywordTok">&quot;</span><span class="st" title="StringTok">BARK</span><span class="kw" title="KeywordTok">&quot;</span>,    <span class="dt" title="DataTypeTok">@blocks1</span>), <span class="dv" title="DecValTok">1</span>);
+is(can_make_word(<span class="kw" title="KeywordTok">&quot;</span><span class="st" title="StringTok">BOOK</span><span class="kw" title="KeywordTok">&quot;</span>,    <span class="dt" title="DataTypeTok">@blocks1</span>), <span class="fu" title="FunctionTok">undef</span>);
+is(can_make_word(<span class="kw" title="KeywordTok">&quot;</span><span class="st" title="StringTok">TREAT</span><span class="kw" title="KeywordTok">&quot;</span>,   <span class="dt" title="DataTypeTok">@blocks1</span>), <span class="dv" title="DecValTok">1</span>);
+is(can_make_word(<span class="kw" title="KeywordTok">&quot;</span><span class="st" title="StringTok">COMMON</span><span class="kw" title="KeywordTok">&quot;</span>,  <span class="dt" title="DataTypeTok">@blocks1</span>), <span class="fu" title="FunctionTok">undef</span>);
+is(can_make_word(<span class="kw" title="KeywordTok">&quot;</span><span class="st" title="StringTok">SQUAD</span><span class="kw" title="KeywordTok">&quot;</span>,   <span class="dt" title="DataTypeTok">@blocks1</span>), <span class="dv" title="DecValTok">1</span>);
+is(can_make_word(<span class="kw" title="KeywordTok">&quot;</span><span class="st" title="StringTok">CONFUSE</span><span class="kw" title="KeywordTok">&quot;</span>, <span class="dt" title="DataTypeTok">@blocks1</span>), <span class="dv" title="DecValTok">1</span>);
+
+<span class="kw" title="KeywordTok">my</span> <span class="dt" title="DataTypeTok">@blocks2</span> = <span class="kw" title="KeywordTok">qw(</span>US TZ AO QA<span class="kw" title="KeywordTok">)</span>;
+is(can_make_word(<span class="kw" title="KeywordTok">&#39;</span><span class="st" title="StringTok">auto</span><span class="kw" title="KeywordTok">&#39;</span>, <span class="dt" title="DataTypeTok">@blocks2</span>), <span class="dv" title="DecValTok">1</span>);
+</code></pre></body>
diff --git a/tests/abc.php b/tests/abc.php
new file mode 100644
--- /dev/null
+++ b/tests/abc.php
@@ -0,0 +1,30 @@
+
+<?php
+$words = array("A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "Confuse");
+
+function canMakeWord($word) {
+    $word = strtoupper($word);
+    $blocks = array(
+            "BO", "XK", "DQ", "CP", "NA",
+            "GT", "RE", "TG", "QD", "FS",
+            "JW", "HU", "VI", "AN", "OB",
+            "ER", "FS", "LY", "PC", "ZM",
+    );
+
+    foreach (str_split($word) as $char) {
+        foreach ($blocks as $k => $block) {
+            if (strpos($block, $char) !== FALSE) {
+                unset($blocks[$k]);
+                continue(2);
+            }
+        }
+        return false;
+    }
+    return true;
+}
+
+foreach ($words as $word) {
+    echo $word.': ';
+    echo canMakeWord($word) ? "True" : "False";
+    echo "\r\n";
+}
diff --git a/tests/abc.php.html b/tests/abc.php.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.php.html
@@ -0,0 +1,47 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode">
+<span class="kw" title="KeywordTok">&lt;?php</span>
+<span class="kw" title="KeywordTok">$words</span> = <span class="fu" title="FunctionTok">array</span><span class="ot" title="OtherTok">(</span><span class="st" title="StringTok">&quot;A&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;BARK&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;BOOK&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;TREAT&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;COMMON&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;SQUAD&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;Confuse&quot;</span><span class="ot" title="OtherTok">);</span>
+
+<span class="kw" title="KeywordTok">function</span> canMakeWord<span class="ot" title="OtherTok">(</span><span class="kw" title="KeywordTok">$word</span><span class="ot" title="OtherTok">)</span> {
+    <span class="kw" title="KeywordTok">$word</span> = <span class="fu" title="FunctionTok">strtoupper</span><span class="ot" title="OtherTok">(</span><span class="kw" title="KeywordTok">$word</span><span class="ot" title="OtherTok">);</span>
+    <span class="kw" title="KeywordTok">$blocks</span> = <span class="fu" title="FunctionTok">array</span><span class="ot" title="OtherTok">(</span>
+            <span class="st" title="StringTok">&quot;BO&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;XK&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;DQ&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;CP&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;NA&quot;</span><span class="ot" title="OtherTok">,</span>
+            <span class="st" title="StringTok">&quot;GT&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;RE&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;TG&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;QD&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;FS&quot;</span><span class="ot" title="OtherTok">,</span>
+            <span class="st" title="StringTok">&quot;JW&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;HU&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;VI&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;AN&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;OB&quot;</span><span class="ot" title="OtherTok">,</span>
+            <span class="st" title="StringTok">&quot;ER&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;FS&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;LY&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;PC&quot;</span><span class="ot" title="OtherTok">,</span> <span class="st" title="StringTok">&quot;ZM&quot;</span><span class="ot" title="OtherTok">,</span>
+    <span class="ot" title="OtherTok">);</span>
+
+    <span class="kw" title="KeywordTok">foreach</span> <span class="ot" title="OtherTok">(</span><span class="fu" title="FunctionTok">str_split</span><span class="ot" title="OtherTok">(</span><span class="kw" title="KeywordTok">$word</span><span class="ot" title="OtherTok">)</span> <span class="kw" title="KeywordTok">as</span> <span class="kw" title="KeywordTok">$char</span><span class="ot" title="OtherTok">)</span> {
+        <span class="kw" title="KeywordTok">foreach</span> <span class="ot" title="OtherTok">(</span><span class="kw" title="KeywordTok">$blocks</span> <span class="kw" title="KeywordTok">as</span> <span class="kw" title="KeywordTok">$k</span> =&gt; <span class="kw" title="KeywordTok">$block</span><span class="ot" title="OtherTok">)</span> {
+            <span class="kw" title="KeywordTok">if</span> <span class="ot" title="OtherTok">(</span><span class="fu" title="FunctionTok">strpos</span><span class="ot" title="OtherTok">(</span><span class="kw" title="KeywordTok">$block</span><span class="ot" title="OtherTok">,</span> <span class="kw" title="KeywordTok">$char</span><span class="ot" title="OtherTok">)</span> !== <span class="kw" title="KeywordTok">FALSE</span><span class="ot" title="OtherTok">)</span> {
+                <span class="fu" title="FunctionTok">unset</span><span class="ot" title="OtherTok">(</span><span class="kw" title="KeywordTok">$blocks</span><span class="ot" title="OtherTok">[</span><span class="kw" title="KeywordTok">$k</span><span class="ot" title="OtherTok">]);</span>
+                <span class="kw" title="KeywordTok">continue</span><span class="ot" title="OtherTok">(</span><span class="dv" title="DecValTok">2</span><span class="ot" title="OtherTok">);</span>
+            }
+        }
+        <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">false</span><span class="ot" title="OtherTok">;</span>
+    }
+    <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">true</span><span class="ot" title="OtherTok">;</span>
+}
+
+<span class="kw" title="KeywordTok">foreach</span> <span class="ot" title="OtherTok">(</span><span class="kw" title="KeywordTok">$words</span> <span class="kw" title="KeywordTok">as</span> <span class="kw" title="KeywordTok">$word</span><span class="ot" title="OtherTok">)</span> {
+    <span class="fu" title="FunctionTok">echo</span> <span class="kw" title="KeywordTok">$word</span>.<span class="st" title="StringTok">&#39;: &#39;</span><span class="ot" title="OtherTok">;</span>
+    <span class="fu" title="FunctionTok">echo</span> canMakeWord<span class="ot" title="OtherTok">(</span><span class="kw" title="KeywordTok">$word</span><span class="ot" title="OtherTok">)</span> <span class="ot" title="OtherTok">?</span> <span class="st" title="StringTok">&quot;True&quot;</span> <span class="ot" title="OtherTok">:</span> <span class="st" title="StringTok">&quot;False&quot;</span><span class="ot" title="OtherTok">;</span>
+    <span class="fu" title="FunctionTok">echo</span> <span class="st" title="StringTok">&quot;</span><span class="kw" title="KeywordTok">\r\n</span><span class="st" title="StringTok">&quot;</span><span class="ot" title="OtherTok">;</span>
+}</code></pre></body>
diff --git a/tests/abc.prolog b/tests/abc.prolog
new file mode 100644
--- /dev/null
+++ b/tests/abc.prolog
@@ -0,0 +1,23 @@
+abc_problem :-
+        maplist(abc_problem, ['', 'A', bark, bOOk, treAT, 'COmmon', sQuaD, 'CONFUSE']).
+
+
+abc_problem(Word) :-
+        L = [[b,o],[x,k],[d,q],[c,p],[n,a],[g,t],[r,e],[t,g],[q,d],[f,s],
+             [j,w],[h,u],[v,i],[a,n],[o,b],[e,r],[f,s],[l,y],[p,c],[z,m]],
+
+        (   abc_problem(L, Word)
+        ->  format('~w OK~n', [Word])
+        ;   format('~w KO~n', [Word])).
+
+abc_problem(L, Word) :-
+        atom_chars(Word, C_Words),
+        maplist(downcase_atom, C_Words, D_Words),
+        can_makeword(L, D_Words).
+
+can_makeword(_L, []).
+
+can_makeword(L, [H | T]) :-
+        (   select([H, _], L, L1); select([_, H], L, L1)),
+        can_makeword(L1, T).
+
diff --git a/tests/abc.prolog.html b/tests/abc.prolog.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.prolog.html
@@ -0,0 +1,40 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode">abc_problem <span class="kw" title="KeywordTok">:-</span>
+        maplist(abc_problem<span class="kw" title="KeywordTok">,</span> [&#39;&#39;, &#39;<span class="er" title="ErrorTok">A</span>&#39;, bark, bOOk, treAT, &#39;<span class="er" title="ErrorTok">COmmon</span>&#39;, sQuaD, &#39;<span class="er" title="ErrorTok">CONFUSE</span>&#39;])<span class="kw" title="KeywordTok">.</span>
+
+
+abc_problem(<span class="dt" title="DataTypeTok">Word</span>) <span class="kw" title="KeywordTok">:-</span>
+        <span class="dt" title="DataTypeTok">L</span> <span class="kw" title="KeywordTok">=</span> [[b,o],[x,k],[d,q],[c,p],[n,a],[g,t],[r,e],[t,g],[q,d],[f,s],
+             [j,w],[h,u],[v,i],[a,n],[o,b],[e,r],[f,s],[l,y],[p,c],[z,m]]<span class="kw" title="KeywordTok">,</span>
+
+        (   abc_problem(<span class="dt" title="DataTypeTok">L</span><span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">Word</span>)
+        <span class="kw" title="KeywordTok">-&gt;</span>  format(&#39;~<span class="er" title="ErrorTok">w</span><span class="al" title="AlertTok"> </span><span class="er" title="ErrorTok">OK</span>~<span class="er" title="ErrorTok">n</span>&#39;<span class="kw" title="KeywordTok">,</span> [<span class="dt" title="DataTypeTok">Word</span>])
+        <span class="kw" title="KeywordTok">;</span>   format(&#39;~<span class="er" title="ErrorTok">w</span><span class="al" title="AlertTok"> </span><span class="er" title="ErrorTok">KO</span>~<span class="er" title="ErrorTok">n</span>&#39;<span class="kw" title="KeywordTok">,</span> [<span class="dt" title="DataTypeTok">Word</span>]))<span class="kw" title="KeywordTok">.</span>
+
+abc_problem(<span class="dt" title="DataTypeTok">L</span><span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">Word</span>) <span class="kw" title="KeywordTok">:-</span>
+        <span class="fu" title="FunctionTok">atom_chars</span>(<span class="dt" title="DataTypeTok">Word</span><span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">C_Words</span>)<span class="kw" title="KeywordTok">,</span>
+        maplist(downcase_atom<span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">C_Words</span><span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">D_Words</span>)<span class="kw" title="KeywordTok">,</span>
+        can_makeword(<span class="dt" title="DataTypeTok">L</span><span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">D_Words</span>)<span class="kw" title="KeywordTok">.</span>
+
+can_makeword(<span class="dt" title="DataTypeTok">_L</span><span class="kw" title="KeywordTok">,</span> [])<span class="kw" title="KeywordTok">.</span>
+
+can_makeword(<span class="dt" title="DataTypeTok">L</span><span class="kw" title="KeywordTok">,</span> [<span class="dt" title="DataTypeTok">H</span> <span class="fu" title="FunctionTok">|</span> <span class="dt" title="DataTypeTok">T</span>]) <span class="kw" title="KeywordTok">:-</span>
+        (   select([<span class="dt" title="DataTypeTok">H</span>, <span class="dt" title="DataTypeTok">_</span>]<span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">L</span><span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">L1</span>)<span class="kw" title="KeywordTok">;</span> select([<span class="dt" title="DataTypeTok">_</span>, <span class="dt" title="DataTypeTok">H</span>]<span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">L</span><span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">L1</span>))<span class="kw" title="KeywordTok">,</span>
+        can_makeword(<span class="dt" title="DataTypeTok">L1</span><span class="kw" title="KeywordTok">,</span> <span class="dt" title="DataTypeTok">T</span>)<span class="kw" title="KeywordTok">.</span>
+</code></pre></body>
diff --git a/tests/abc.python b/tests/abc.python
new file mode 100644
--- /dev/null
+++ b/tests/abc.python
@@ -0,0 +1,16 @@
+def mkword(w, b):
+    if not w: return []
+
+    c,w = w[0],w[1:]
+    for i in range(len(b)):
+        if c in b[i]:
+            m = mkword(w, b[0:i] + b[i+1:])
+            if m != None: return [b[i]] + m
+
+def abc(w, blk):
+    return mkword(w.upper(), [a.upper() for a in blk])
+
+blocks = 'BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM'.split()
+
+for w in ", A, bark, book, treat, common, SQUAD, conFUsEd".split(', '):
+    print '\'' + w + '\'' + ' ->', abc(w, blocks)
diff --git a/tests/abc.python.html b/tests/abc.python.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.python.html
@@ -0,0 +1,33 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">def</span> mkword(w, b):
+    <span class="kw" title="KeywordTok">if</span> not w: <span class="kw" title="KeywordTok">return</span> []
+
+    c,w = w[<span class="dv" title="DecValTok">0</span>],w[<span class="dv" title="DecValTok">1</span>:]
+    <span class="kw" title="KeywordTok">for</span> i in <span class="dt" title="DataTypeTok">range</span>(<span class="dt" title="DataTypeTok">len</span>(b)):
+        <span class="kw" title="KeywordTok">if</span> c in b[i]:
+            m = mkword(w, b[<span class="dv" title="DecValTok">0</span>:i] + b[i<span class="dv" title="DecValTok">+1</span>:])
+            <span class="kw" title="KeywordTok">if</span> m != <span class="ot" title="OtherTok">None</span>: <span class="kw" title="KeywordTok">return</span> [b[i]] + m
+
+<span class="kw" title="KeywordTok">def</span> abc(w, blk):
+    <span class="kw" title="KeywordTok">return</span> mkword(w.upper(), [a.upper() <span class="kw" title="KeywordTok">for</span> a in blk])
+
+blocks = <span class="st" title="StringTok">&#39;BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM&#39;</span>.split()
+
+<span class="kw" title="KeywordTok">for</span> w in <span class="st" title="StringTok">&quot;, A, bark, book, treat, common, SQUAD, conFUsEd&quot;</span>.split(<span class="st" title="StringTok">&#39;, &#39;</span>):
+    <span class="dt" title="DataTypeTok">print</span> <span class="st" title="StringTok">&#39;</span><span class="ch" title="CharTok">\&#39;</span><span class="st" title="StringTok">&#39;</span> + w + <span class="st" title="StringTok">&#39;</span><span class="ch" title="CharTok">\&#39;</span><span class="st" title="StringTok">&#39;</span> + <span class="st" title="StringTok">&#39; -&gt;&#39;</span>, abc(w, blocks)</code></pre></body>
diff --git a/tests/abc.r b/tests/abc.r
new file mode 100644
--- /dev/null
+++ b/tests/abc.r
@@ -0,0 +1,21 @@
+canMakeNoRecursion <- function(x) {
+  x <- toupper(x)
+  charList <- strsplit(x, character(0))
+  getCombos <- function(chars) {
+    charBlocks <-  data.matrix(expand.grid(lapply(chars, function(char) which(blocks == char, arr.ind=TRUE)[, 1L])))
+    charBlocks <- charBlocks[!apply(charBlocks, 1, function(row) any(duplicated(row))), , drop=FALSE]
+    if (dim(charBlocks)[1L] > 0L) {
+      t(apply(charBlocks, 1, function(row) apply(blocks[row, , drop=FALSE], 1, paste, collapse="")))
+    } else {
+      character(0)
+    }
+  }
+  setNames(lapply(charList, getCombos), x)
+}
+canMakeNoRecursion(c("A",
+           "BARK",
+           "BOOK",
+           "TREAT",
+           "COMMON",
+           "SQUAD",
+           "CONFUSE"))
diff --git a/tests/abc.r.html b/tests/abc.r.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.r.html
@@ -0,0 +1,38 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode">canMakeNoRecursion &lt;-<span class="st" title="StringTok"> </span>function(x) {
+  x &lt;-<span class="st" title="StringTok"> </span><span class="kw" title="KeywordTok">toupper</span>(x)
+  charList &lt;-<span class="st" title="StringTok"> </span><span class="kw" title="KeywordTok">strsplit</span>(x, <span class="kw" title="KeywordTok">character</span>(<span class="dv" title="DecValTok">0</span>))
+  getCombos &lt;-<span class="st" title="StringTok"> </span>function(chars) {
+    charBlocks &lt;-<span class="st" title="StringTok">  </span><span class="kw" title="KeywordTok">data.matrix</span>(<span class="kw" title="KeywordTok">expand.grid</span>(<span class="kw" title="KeywordTok">lapply</span>(chars, function(char) <span class="kw" title="KeywordTok">which</span>(blocks ==<span class="st" title="StringTok"> </span>char, <span class="dt" title="DataTypeTok">arr.ind=</span><span class="ot" title="OtherTok">TRUE</span>)[, 1L])))
+    charBlocks &lt;-<span class="st" title="StringTok"> </span>charBlocks[!<span class="kw" title="KeywordTok">apply</span>(charBlocks, <span class="dv" title="DecValTok">1</span>, function(row) <span class="kw" title="KeywordTok">any</span>(<span class="kw" title="KeywordTok">duplicated</span>(row))), , drop=<span class="ot" title="OtherTok">FALSE</span>]
+    if (<span class="kw" title="KeywordTok">dim</span>(charBlocks)[1L] &gt;<span class="st" title="StringTok"> </span>0L) {
+      <span class="kw" title="KeywordTok">t</span>(<span class="kw" title="KeywordTok">apply</span>(charBlocks, <span class="dv" title="DecValTok">1</span>, function(row) <span class="kw" title="KeywordTok">apply</span>(blocks[row, , <span class="dt" title="DataTypeTok">drop=</span><span class="ot" title="OtherTok">FALSE</span>], <span class="dv" title="DecValTok">1</span>, paste, <span class="dt" title="DataTypeTok">collapse=</span><span class="st" title="StringTok">&quot;&quot;</span>)))
+    } else {
+      <span class="kw" title="KeywordTok">character</span>(<span class="dv" title="DecValTok">0</span>)
+    }
+  }
+  <span class="kw" title="KeywordTok">setNames</span>(<span class="kw" title="KeywordTok">lapply</span>(charList, getCombos), x)
+}
+<span class="kw" title="KeywordTok">canMakeNoRecursion</span>(<span class="kw" title="KeywordTok">c</span>(<span class="st" title="StringTok">&quot;A&quot;</span>,
+           <span class="st" title="StringTok">&quot;BARK&quot;</span>,
+           <span class="st" title="StringTok">&quot;BOOK&quot;</span>,
+           <span class="st" title="StringTok">&quot;TREAT&quot;</span>,
+           <span class="st" title="StringTok">&quot;COMMON&quot;</span>,
+           <span class="st" title="StringTok">&quot;SQUAD&quot;</span>,
+           <span class="st" title="StringTok">&quot;CONFUSE&quot;</span>))</code></pre></body>
diff --git a/tests/abc.ruby b/tests/abc.ruby
new file mode 100644
--- /dev/null
+++ b/tests/abc.ruby
@@ -0,0 +1,8 @@
+words = %w(A BaRK BOoK tREaT COmMOn SqUAD CoNfuSE) << ""
+
+words.each do |word|
+  blocks = "BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM"
+  res = word.each_char.all?{|c| blocks.sub!(/\w?#{c}\w?/i, "")}  #regexps can be interpolated like strings
+  puts "#{word.inspect}: #{res}"
+end
+
diff --git a/tests/abc.ruby.html b/tests/abc.ruby.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.ruby.html
@@ -0,0 +1,25 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode">words =<span class="ot" title="OtherTok"> %w(</span><span class="st" title="StringTok">A BaRK BOoK tREaT COmMOn SqUAD CoNfuSE</span><span class="ot" title="OtherTok">)</span> &lt;&lt; <span class="st" title="StringTok">&quot;&quot;</span>
+
+words.each <span class="kw" title="KeywordTok">do</span> |word|
+  blocks = <span class="st" title="StringTok">&quot;BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM&quot;</span>
+  res = word.each_char.all?{|c| blocks.sub!(<span class="ot" title="OtherTok">/\w?#{</span>c<span class="ot" title="OtherTok">}\w?/i</span>, <span class="st" title="StringTok">&quot;&quot;</span>)}  <span class="co" title="CommentTok">#regexps can be interpolated like strings</span>
+  puts <span class="st" title="StringTok">&quot;</span><span class="ot" title="OtherTok">#{</span>word.inspect<span class="ot" title="OtherTok">}</span><span class="st" title="StringTok">: </span><span class="ot" title="OtherTok">#{</span>res<span class="ot" title="OtherTok">}</span><span class="st" title="StringTok">&quot;</span>
+<span class="kw" title="KeywordTok">end</span>
+</code></pre></body>
diff --git a/tests/abc.scala b/tests/abc.scala
new file mode 100644
--- /dev/null
+++ b/tests/abc.scala
@@ -0,0 +1,50 @@
+object AbcBlocks extends App {
+
+  protected class Block(face1: Char, face2: Char) {
+
+    def isFacedWith(that: Char) = { that == face1 || that == face2 }
+    override def toString() = face1.toString + face2
+  }
+  protected object Block {
+    def apply(faces: String) = new Block(faces.head, faces.last)
+  }
+
+  type word = Seq[Block]
+
+  private val blocks = List(Block("BO"), Block("XK"), Block("DQ"), Block("CP"), Block("NA"),
+    Block("GT"), Block("RE"), Block("TG"), Block("QD"), Block("FS"),
+    Block("JW"), Block("HU"), Block("VI"), Block("AN"), Block("OB"),
+    Block("ER"), Block("FS"), Block("LY"), Block("PC"), Block("ZM"))
+
+  private def isMakeable(word: String, blocks: word) = {
+
+    def getTheBlocks(word: String, blocks: word) = {
+
+      def inner(word: String, toCompare: word, rest: word, accu: word): word = {
+        if (word.isEmpty || rest.isEmpty || toCompare.isEmpty) accu
+        else if (toCompare.head.isFacedWith(word.head)) {
+          val restant = rest diff List(toCompare.head)
+          inner(word.tail, restant, restant, accu :+ toCompare.head)
+        } else inner(word, toCompare.tail, rest, accu)
+      }
+      inner(word, blocks, blocks, Nil)
+    }
+
+    word.lengthCompare(getTheBlocks(word, blocks).size) == 0
+  }
+
+  val words = List("A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSED", "ANBOCPDQERSFTGUVWXLZ")
+  // Automatic tests
+  assert(isMakeable(words(0), blocks))
+  assert(isMakeable(words(1), blocks))
+  assert(!isMakeable(words(2), blocks)) // BOOK not
+  assert(isMakeable(words(3), blocks))
+  assert(!isMakeable(words(4), blocks)) // COMMON not
+  assert(isMakeable(words(5), blocks))
+  assert(isMakeable(words(6), blocks))
+  assert(isMakeable(words(7), blocks))
+
+  //words(7).mkString.permutations.foreach(s => assert(isMakeable(s, blocks)))
+
+  words.foreach(w => println(s"$w can${if (isMakeable(w, blocks)) " " else "not "}be made."))
+}
diff --git a/tests/abc.scala.html b/tests/abc.scala.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.scala.html
@@ -0,0 +1,67 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">object</span> AbcBlocks <span class="kw" title="KeywordTok">extends</span> App {
+
+  <span class="kw" title="KeywordTok">protected</span> <span class="kw" title="KeywordTok">class</span> <span class="fu" title="FunctionTok">Block</span>(face1: Char, face2: Char) {
+
+    <span class="kw" title="KeywordTok">def</span> <span class="fu" title="FunctionTok">isFacedWith</span>(that: Char) = { that == face1 || that == face2 }
+    <span class="kw" title="KeywordTok">override</span> <span class="kw" title="KeywordTok">def</span> <span class="fu" title="FunctionTok">toString</span>() = face1.<span class="fu" title="FunctionTok">toString</span> + face2
+  }
+  <span class="kw" title="KeywordTok">protected</span> <span class="kw" title="KeywordTok">object</span> Block {
+    <span class="kw" title="KeywordTok">def</span> <span class="fu" title="FunctionTok">apply</span>(faces: String) = <span class="kw" title="KeywordTok">new</span> <span class="fu" title="FunctionTok">Block</span>(faces.<span class="fu" title="FunctionTok">head</span>, faces.<span class="fu" title="FunctionTok">last</span>)
+  }
+
+  <span class="kw" title="KeywordTok">type</span> word = Seq[Block]
+
+  <span class="kw" title="KeywordTok">private</span> <span class="kw" title="KeywordTok">val</span> blocks = List(<span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;BO&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;XK&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;DQ&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;CP&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;NA&quot;</span>),
+    <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;GT&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;RE&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;TG&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;QD&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;FS&quot;</span>),
+    <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;JW&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;HU&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;VI&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;AN&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;OB&quot;</span>),
+    <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;ER&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;FS&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;LY&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;PC&quot;</span>), <span class="fu" title="FunctionTok">Block</span>(<span class="st" title="StringTok">&quot;ZM&quot;</span>))
+
+  <span class="kw" title="KeywordTok">private</span> <span class="kw" title="KeywordTok">def</span> <span class="fu" title="FunctionTok">isMakeable</span>(word: String, blocks: word) = {
+
+    <span class="kw" title="KeywordTok">def</span> <span class="fu" title="FunctionTok">getTheBlocks</span>(word: String, blocks: word) = {
+
+      <span class="kw" title="KeywordTok">def</span> <span class="fu" title="FunctionTok">inner</span>(word: String, toCompare: word, rest: word, accu: word): word = {
+        <span class="kw" title="KeywordTok">if</span> (word.<span class="fu" title="FunctionTok">isEmpty</span> || rest.<span class="fu" title="FunctionTok">isEmpty</span> || toCompare.<span class="fu" title="FunctionTok">isEmpty</span>) accu
+        <span class="kw" title="KeywordTok">else</span> <span class="kw" title="KeywordTok">if</span> (toCompare.<span class="fu" title="FunctionTok">head</span>.<span class="fu" title="FunctionTok">isFacedWith</span>(word.<span class="fu" title="FunctionTok">head</span>)) {
+          <span class="kw" title="KeywordTok">val</span> restant = rest diff List(toCompare.<span class="fu" title="FunctionTok">head</span>)
+          <span class="fu" title="FunctionTok">inner</span>(word.<span class="fu" title="FunctionTok">tail</span>, restant, restant, accu :+ toCompare.<span class="fu" title="FunctionTok">head</span>)
+        } <span class="kw" title="KeywordTok">else</span> <span class="fu" title="FunctionTok">inner</span>(word, toCompare.<span class="fu" title="FunctionTok">tail</span>, rest, accu)
+      }
+      <span class="fu" title="FunctionTok">inner</span>(word, blocks, blocks, Nil)
+    }
+
+    word.<span class="fu" title="FunctionTok">lengthCompare</span>(<span class="fu" title="FunctionTok">getTheBlocks</span>(word, blocks).<span class="fu" title="FunctionTok">size</span>) == <span class="dv" title="DecValTok">0</span>
+  }
+
+  <span class="kw" title="KeywordTok">val</span> words = List(<span class="st" title="StringTok">&quot;A&quot;</span>, <span class="st" title="StringTok">&quot;BARK&quot;</span>, <span class="st" title="StringTok">&quot;BOOK&quot;</span>, <span class="st" title="StringTok">&quot;TREAT&quot;</span>, <span class="st" title="StringTok">&quot;COMMON&quot;</span>, <span class="st" title="StringTok">&quot;SQUAD&quot;</span>, <span class="st" title="StringTok">&quot;CONFUSED&quot;</span>, <span class="st" title="StringTok">&quot;ANBOCPDQERSFTGUVWXLZ&quot;</span>)
+  <span class="co" title="CommentTok">// Automatic tests</span>
+  <span class="fu" title="FunctionTok">assert</span>(<span class="fu" title="FunctionTok">isMakeable</span>(<span class="fu" title="FunctionTok">words</span>(<span class="dv" title="DecValTok">0</span>), blocks))
+  <span class="fu" title="FunctionTok">assert</span>(<span class="fu" title="FunctionTok">isMakeable</span>(<span class="fu" title="FunctionTok">words</span>(<span class="dv" title="DecValTok">1</span>), blocks))
+  <span class="fu" title="FunctionTok">assert</span>(!<span class="fu" title="FunctionTok">isMakeable</span>(<span class="fu" title="FunctionTok">words</span>(<span class="dv" title="DecValTok">2</span>), blocks)) <span class="co" title="CommentTok">// BOOK not</span>
+  <span class="fu" title="FunctionTok">assert</span>(<span class="fu" title="FunctionTok">isMakeable</span>(<span class="fu" title="FunctionTok">words</span>(<span class="dv" title="DecValTok">3</span>), blocks))
+  <span class="fu" title="FunctionTok">assert</span>(!<span class="fu" title="FunctionTok">isMakeable</span>(<span class="fu" title="FunctionTok">words</span>(<span class="dv" title="DecValTok">4</span>), blocks)) <span class="co" title="CommentTok">// COMMON not</span>
+  <span class="fu" title="FunctionTok">assert</span>(<span class="fu" title="FunctionTok">isMakeable</span>(<span class="fu" title="FunctionTok">words</span>(<span class="dv" title="DecValTok">5</span>), blocks))
+  <span class="fu" title="FunctionTok">assert</span>(<span class="fu" title="FunctionTok">isMakeable</span>(<span class="fu" title="FunctionTok">words</span>(<span class="dv" title="DecValTok">6</span>), blocks))
+  <span class="fu" title="FunctionTok">assert</span>(<span class="fu" title="FunctionTok">isMakeable</span>(<span class="fu" title="FunctionTok">words</span>(<span class="dv" title="DecValTok">7</span>), blocks))
+
+  <span class="co" title="CommentTok">//words(7).mkString.permutations.foreach(s =&gt; assert(isMakeable(s, blocks)))</span>
+
+  words.<span class="fu" title="FunctionTok">foreach</span>(w =&gt; <span class="fu" title="FunctionTok">println</span>(s<span class="st" title="StringTok">&quot;$w can${if (isMakeable(w, blocks)) &quot;</span> <span class="st" title="StringTok">&quot; else &quot;</span>not <span class="st" title="StringTok">&quot;}be made.&quot;</span>))
+}</code></pre></body>
diff --git a/tests/abc.scheme b/tests/abc.scheme
new file mode 100644
--- /dev/null
+++ b/tests/abc.scheme
@@ -0,0 +1,43 @@
+#lang racket
+(define block-strings
+  (list "BO" "XK" "DQ" "CP" "NA"
+        "GT" "RE" "TG" "QD" "FS"
+        "JW" "HU" "VI" "AN" "OB"
+        "ER" "FS" "LY" "PC" "ZM"))
+(define BLOCKS (map string->list block-strings))
+
+(define (can-make-word? w)
+  (define (usable-block blocks word-char)
+    (for/first ((b (in-list blocks)) #:when (memf (curry char-ci=? word-char) b)) b))
+  
+  (define (inner word-chars blocks tried-blocks)
+    (cond
+      [(null? word-chars) #t]
+      [(usable-block blocks (car word-chars))
+       =>
+       (lambda (b)
+         (or
+          (inner (cdr word-chars) (append tried-blocks (remove b blocks)) null)
+          (inner word-chars (remove b blocks) (cons b tried-blocks))))]
+      [else #f]))
+  (inner (string->list w) BLOCKS null))
+
+(define WORD-LIST '("" "A" "BARK" "BOOK" "TREAT" "COMMON" "SQUAD" "CONFUSE"))
+(define (report-word w)
+  (printf "Can we make: ~a? ~a~%"
+          (~s w #:min-width 9)
+          (if (can-make-word? w) "yes" "no")))
+
+(module+ main
+  (for-each report-word WORD-LIST))  
+
+(module+ test
+  (require rackunit)
+  (check-true  (can-make-word? ""))
+  (check-true  (can-make-word? "A"))
+  (check-true  (can-make-word? "BARK"))
+  (check-false (can-make-word? "BOOK"))
+  (check-true  (can-make-word? "TREAT"))
+  (check-false (can-make-word? "COMMON"))
+  (check-true  (can-make-word? "SQUAD"))
+  (check-true  (can-make-word? "CONFUSE")))
diff --git a/tests/abc.scheme.html b/tests/abc.scheme.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.scheme.html
@@ -0,0 +1,60 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode">#lang racket
+(<span class="kw" title="KeywordTok">define</span><span class="fu" title="FunctionTok"> block-strings</span>
+  (<span class="kw" title="KeywordTok">list</span> <span class="st" title="StringTok">&quot;BO&quot;</span> <span class="st" title="StringTok">&quot;XK&quot;</span> <span class="st" title="StringTok">&quot;DQ&quot;</span> <span class="st" title="StringTok">&quot;CP&quot;</span> <span class="st" title="StringTok">&quot;NA&quot;</span>
+        <span class="st" title="StringTok">&quot;GT&quot;</span> <span class="st" title="StringTok">&quot;RE&quot;</span> <span class="st" title="StringTok">&quot;TG&quot;</span> <span class="st" title="StringTok">&quot;QD&quot;</span> <span class="st" title="StringTok">&quot;FS&quot;</span>
+        <span class="st" title="StringTok">&quot;JW&quot;</span> <span class="st" title="StringTok">&quot;HU&quot;</span> <span class="st" title="StringTok">&quot;VI&quot;</span> <span class="st" title="StringTok">&quot;AN&quot;</span> <span class="st" title="StringTok">&quot;OB&quot;</span>
+        <span class="st" title="StringTok">&quot;ER&quot;</span> <span class="st" title="StringTok">&quot;FS&quot;</span> <span class="st" title="StringTok">&quot;LY&quot;</span> <span class="st" title="StringTok">&quot;PC&quot;</span> <span class="st" title="StringTok">&quot;ZM&quot;</span>))
+(<span class="kw" title="KeywordTok">define</span><span class="fu" title="FunctionTok"> BLOCKS </span>(map <span class="kw" title="KeywordTok">string-&gt;list</span> block-strings))
+
+(<span class="kw" title="KeywordTok">define</span><span class="fu" title="FunctionTok"> </span>(can-make-word? w)
+  (<span class="kw" title="KeywordTok">define</span><span class="fu" title="FunctionTok"> </span>(usable-block blocks word-char)
+    (for/first ((b (in-list blocks)) #:when (memf (curry <span class="kw" title="KeywordTok">char-ci=?</span> word-char) b)) b))
+  
+  (<span class="kw" title="KeywordTok">define</span><span class="fu" title="FunctionTok"> </span>(inner word-chars blocks tried-blocks)
+    (<span class="kw" title="KeywordTok">cond</span>
+      [(<span class="kw" title="KeywordTok">null?</span> word-chars) <span class="dv" title="DecValTok">#t</span>]
+      [(usable-block blocks (<span class="kw" title="KeywordTok">car</span> word-chars))
+       <span class="kw" title="KeywordTok">=&gt;</span>
+       (<span class="kw" title="KeywordTok">lambda</span> (b)
+         (<span class="kw" title="KeywordTok">or</span>
+          (inner (<span class="kw" title="KeywordTok">cdr</span> word-chars) (<span class="kw" title="KeywordTok">append</span> tried-blocks (remove b blocks)) null)
+          (inner word-chars (remove b blocks) (<span class="kw" title="KeywordTok">cons</span> b tried-blocks))))]
+      [<span class="kw" title="KeywordTok">else</span> <span class="dv" title="DecValTok">#f</span>]))
+  (inner (<span class="kw" title="KeywordTok">string-&gt;list</span> w) BLOCKS null))
+
+(<span class="kw" title="KeywordTok">define</span><span class="fu" title="FunctionTok"> WORD-LIST </span>&#39;(<span class="st" title="StringTok">&quot;&quot;</span> <span class="st" title="StringTok">&quot;A&quot;</span> <span class="st" title="StringTok">&quot;BARK&quot;</span> <span class="st" title="StringTok">&quot;BOOK&quot;</span> <span class="st" title="StringTok">&quot;TREAT&quot;</span> <span class="st" title="StringTok">&quot;COMMON&quot;</span> <span class="st" title="StringTok">&quot;SQUAD&quot;</span> <span class="st" title="StringTok">&quot;CONFUSE&quot;</span>))
+(<span class="kw" title="KeywordTok">define</span><span class="fu" title="FunctionTok"> </span>(report-word w)
+  (printf <span class="st" title="StringTok">&quot;Can we make: ~a? ~a~%&quot;</span>
+          (~s w #:min-width <span class="dv" title="DecValTok">9</span>)
+          (<span class="kw" title="KeywordTok">if</span> (can-make-word? w) <span class="st" title="StringTok">&quot;yes&quot;</span> <span class="st" title="StringTok">&quot;no&quot;</span>)))
+
+(module+ main
+  (<span class="kw" title="KeywordTok">for-each</span> report-word WORD-LIST))  
+
+(module+ test
+  (require rackunit)
+  (check-true  (can-make-word? <span class="st" title="StringTok">&quot;&quot;</span>))
+  (check-true  (can-make-word? <span class="st" title="StringTok">&quot;A&quot;</span>))
+  (check-true  (can-make-word? <span class="st" title="StringTok">&quot;BARK&quot;</span>))
+  (check-false (can-make-word? <span class="st" title="StringTok">&quot;BOOK&quot;</span>))
+  (check-true  (can-make-word? <span class="st" title="StringTok">&quot;TREAT&quot;</span>))
+  (check-false (can-make-word? <span class="st" title="StringTok">&quot;COMMON&quot;</span>))
+  (check-true  (can-make-word? <span class="st" title="StringTok">&quot;SQUAD&quot;</span>))
+  (check-true  (can-make-word? <span class="st" title="StringTok">&quot;CONFUSE&quot;</span>)))</code></pre></body>
diff --git a/tests/abc.tcl b/tests/abc.tcl
new file mode 100644
--- /dev/null
+++ b/tests/abc.tcl
@@ -0,0 +1,21 @@
+package require Tcl 8.6
+
+proc abc {word {blocks {BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM}}} {
+    set abc {{letters blocks abc} {
+        set rest [lassign $letters ch]
+        set i 0
+        foreach blk $blocks {
+            if {$ch in $blk && (![llength $rest]
+                    || [apply $abc $rest [lreplace $blocks $i $i] $abc])} {
+                return true
+            }
+            incr i
+        }
+        return false
+    }}
+    return [apply $abc [split $word ""] [lmap b $blocks {split $b ""}] $abc]
+}
+
+foreach word {"" A BARK BOOK TREAT COMMON SQUAD CONFUSE} {
+    puts [format "Can we spell %9s? %s" '$word' [abc $word]]
+}
diff --git a/tests/abc.tcl.html b/tests/abc.tcl.html
new file mode 100644
--- /dev/null
+++ b/tests/abc.tcl.html
@@ -0,0 +1,38 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">package</span> <span class="ot" title="OtherTok">require</span> Tcl <span class="fl" title="FloatTok">8.6</span>
+
+<span class="kw" title="KeywordTok">proc</span> abc <span class="kw" title="KeywordTok">{</span>word <span class="kw" title="KeywordTok">{</span>blocks <span class="kw" title="KeywordTok">{</span>BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM<span class="kw" title="KeywordTok">}}}</span> <span class="kw" title="KeywordTok">{</span>
+    <span class="kw" title="KeywordTok">set</span> abc <span class="kw" title="KeywordTok">{{</span>letters blocks abc<span class="kw" title="KeywordTok">}</span> <span class="kw" title="KeywordTok">{</span>
+        <span class="kw" title="KeywordTok">set</span> rest <span class="kw" title="KeywordTok">[lassign</span> <span class="dt" title="DataTypeTok">$letters</span> ch<span class="kw" title="KeywordTok">]</span>
+        <span class="kw" title="KeywordTok">set</span> i <span class="dv" title="DecValTok">0</span>
+        <span class="kw" title="KeywordTok">foreach</span> blk <span class="dt" title="DataTypeTok">$blocks</span> <span class="kw" title="KeywordTok">{</span>
+            <span class="kw" title="KeywordTok">if</span> <span class="kw" title="KeywordTok">{</span><span class="dt" title="DataTypeTok">$ch</span> in <span class="dt" title="DataTypeTok">$blk</span> &amp;&amp; (!<span class="kw" title="KeywordTok">[llength</span> <span class="dt" title="DataTypeTok">$rest</span><span class="kw" title="KeywordTok">]</span>
+                    || <span class="kw" title="KeywordTok">[</span>apply <span class="dt" title="DataTypeTok">$abc</span> <span class="dt" title="DataTypeTok">$rest</span> <span class="kw" title="KeywordTok">[lreplace</span> <span class="dt" title="DataTypeTok">$blocks</span> <span class="dt" title="DataTypeTok">$i</span> <span class="dt" title="DataTypeTok">$i</span><span class="kw" title="KeywordTok">]</span> <span class="dt" title="DataTypeTok">$abc</span><span class="kw" title="KeywordTok">]</span>)<span class="kw" title="KeywordTok">}</span> <span class="kw" title="KeywordTok">{</span>
+                <span class="kw" title="KeywordTok">return</span> true
+            <span class="kw" title="KeywordTok">}</span>
+            <span class="kw" title="KeywordTok">incr</span> i
+        <span class="kw" title="KeywordTok">}</span>
+        <span class="kw" title="KeywordTok">return</span> false
+    <span class="kw" title="KeywordTok">}}</span>
+    <span class="kw" title="KeywordTok">return</span> <span class="kw" title="KeywordTok">[</span>apply <span class="dt" title="DataTypeTok">$abc</span> <span class="kw" title="KeywordTok">[split</span> <span class="dt" title="DataTypeTok">$word</span> <span class="st" title="StringTok">&quot;&quot;</span><span class="kw" title="KeywordTok">]</span> <span class="kw" title="KeywordTok">[</span>lmap b <span class="dt" title="DataTypeTok">$blocks</span> <span class="kw" title="KeywordTok">{split</span> <span class="dt" title="DataTypeTok">$b</span> <span class="st" title="StringTok">&quot;&quot;</span><span class="kw" title="KeywordTok">}]</span> <span class="dt" title="DataTypeTok">$abc</span><span class="kw" title="KeywordTok">]</span>
+<span class="kw" title="KeywordTok">}</span>
+
+<span class="kw" title="KeywordTok">foreach</span> word <span class="kw" title="KeywordTok">{</span><span class="st" title="StringTok">&quot;&quot;</span> A BARK BOOK TREAT COMMON SQUAD CONFUSE<span class="kw" title="KeywordTok">}</span> <span class="kw" title="KeywordTok">{</span>
+    <span class="kw" title="KeywordTok">puts</span> <span class="kw" title="KeywordTok">[format</span> <span class="st" title="StringTok">&quot;Can we spell %9s? %s&quot;</span> &#39;<span class="dt" title="DataTypeTok">$word</span>&#39; <span class="kw" title="KeywordTok">[</span>abc <span class="dt" title="DataTypeTok">$word</span><span class="kw" title="KeywordTok">]]</span>
+<span class="kw" title="KeywordTok">}</span></code></pre></body>
diff --git a/tests/archive.rhtml b/tests/archive.rhtml
new file mode 100644
--- /dev/null
+++ b/tests/archive.rhtml
@@ -0,0 +1,23 @@
+<h1>Event Archive</h1>
+
+
+<% form_for :to_date, @to_date, :url => {:action => 'archive'} do |f| %>
+  <p><label for="start_date">From</label>
+  <%= select_date @from_date, :prefix => 'from' %>
+  <label for="end_date">To</label>
+  <%= select_date @to_date, :prefix => 'to', :start_year => 2000 %></p>
+  <p><label for="event_series">Series</label>
+  <%= select_tag "series", options_for_select(series_list('All'), @series) %>
+  <%= f.submit 'Show events' %>
+  </p>
+<% end %>
+
+<ul>
+<%
+if @events
+%>
+  <%= render :partial => 'events' %>
+<%
+end
+%>
+</ul>
diff --git a/tests/archive.rhtml.html b/tests/archive.rhtml.html
new file mode 100644
--- /dev/null
+++ b/tests/archive.rhtml.html
@@ -0,0 +1,40 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="kw" title="KeywordTok">&lt;h1&gt;</span>Event Archive<span class="kw" title="KeywordTok">&lt;/h1&gt;</span>
+
+
+<span class="kw" title="KeywordTok">&lt;%</span> form_for <span class="st" title="StringTok">:to_date</span>, <span class="ot" title="OtherTok">@to_date</span>, <span class="st" title="StringTok">:url</span> <span class="ch" title="CharTok">=&gt;</span> <span class="ch" title="CharTok">{</span><span class="st" title="StringTok">:action</span> <span class="ch" title="CharTok">=&gt;</span> <span class="st" title="StringTok">&#39;archive&#39;</span><span class="ch" title="CharTok">}</span> <span class="kw" title="KeywordTok">do</span> <span class="ch" title="CharTok">|</span>f<span class="ch" title="CharTok">|</span> <span class="kw" title="KeywordTok">%&gt;</span>
+  <span class="kw" title="KeywordTok">&lt;p&gt;&lt;label</span><span class="ot" title="OtherTok"> for=</span><span class="st" title="StringTok">&quot;start_date&quot;</span><span class="kw" title="KeywordTok">&gt;</span>From<span class="kw" title="KeywordTok">&lt;/label&gt;</span>
+  <span class="kw" title="KeywordTok">&lt;%=</span> select_date <span class="ot" title="OtherTok">@from_date</span>, <span class="st" title="StringTok">:prefix</span> <span class="ch" title="CharTok">=&gt;</span> <span class="st" title="StringTok">&#39;from&#39;</span> <span class="kw" title="KeywordTok">%&gt;</span>
+  <span class="kw" title="KeywordTok">&lt;label</span><span class="ot" title="OtherTok"> for=</span><span class="st" title="StringTok">&quot;end_date&quot;</span><span class="kw" title="KeywordTok">&gt;</span>To<span class="kw" title="KeywordTok">&lt;/label&gt;</span>
+  <span class="kw" title="KeywordTok">&lt;%=</span> select_date <span class="ot" title="OtherTok">@to_date</span>, <span class="st" title="StringTok">:prefix</span> <span class="ch" title="CharTok">=&gt;</span> <span class="st" title="StringTok">&#39;to&#39;</span>, <span class="st" title="StringTok">:start_year</span> <span class="ch" title="CharTok">=&gt;</span> <span class="dv" title="DecValTok">2000</span> <span class="kw" title="KeywordTok">%&gt;&lt;/p&gt;</span>
+  <span class="kw" title="KeywordTok">&lt;p&gt;&lt;label</span><span class="ot" title="OtherTok"> for=</span><span class="st" title="StringTok">&quot;event_series&quot;</span><span class="kw" title="KeywordTok">&gt;</span>Series<span class="kw" title="KeywordTok">&lt;/label&gt;</span>
+  <span class="kw" title="KeywordTok">&lt;%=</span> select_tag <span class="st" title="StringTok">&quot;series&quot;</span>, options_for_select(series_list(<span class="st" title="StringTok">&#39;All&#39;</span>), <span class="ot" title="OtherTok">@series</span>) <span class="kw" title="KeywordTok">%&gt;</span>
+  <span class="kw" title="KeywordTok">&lt;%=</span> f.submit <span class="st" title="StringTok">&#39;Show events&#39;</span> <span class="kw" title="KeywordTok">%&gt;</span>
+  <span class="kw" title="KeywordTok">&lt;/p&gt;</span>
+<span class="kw" title="KeywordTok">&lt;%</span> <span class="kw" title="KeywordTok">end</span> <span class="kw" title="KeywordTok">%&gt;</span>
+
+<span class="kw" title="KeywordTok">&lt;ul&gt;</span>
+<span class="kw" title="KeywordTok">&lt;%</span>
+<span class="kw" title="KeywordTok">if</span> <span class="ot" title="OtherTok">@events</span>
+<span class="kw" title="KeywordTok">%&gt;</span>
+  <span class="kw" title="KeywordTok">&lt;%=</span> render <span class="st" title="StringTok">:partial</span> <span class="ch" title="CharTok">=&gt;</span> <span class="st" title="StringTok">&#39;events&#39;</span> <span class="kw" title="KeywordTok">%&gt;</span>
+<span class="kw" title="KeywordTok">&lt;%</span>
+<span class="kw" title="KeywordTok">end</span>
+<span class="kw" title="KeywordTok">%&gt;</span>
+<span class="kw" title="KeywordTok">&lt;/ul&gt;</span></code></pre></body>
diff --git a/tests/life.lua b/tests/life.lua
new file mode 100644
--- /dev/null
+++ b/tests/life.lua
@@ -0,0 +1,111 @@
+-- life.lua
+-- original by Dave Bollinger <DBollinger@compuserve.com> posted to lua-l
+-- modified to use ANSI terminal escape sequences
+-- modified to use for instead of while
+
+local write=io.write
+
+ALIVE="¥"	DEAD="þ"
+ALIVE="O"	DEAD="-"
+
+function delay() -- NOTE: SYSTEM-DEPENDENT, adjust as necessary
+  for i=1,10000 do end
+  -- local i=os.clock()+1 while(os.clock()<i) do end
+end
+
+function ARRAY2D(w,h)
+  local t = {w=w,h=h}
+  for y=1,h do
+    t[y] = {}
+    for x=1,w do
+      t[y][x]=0
+    end
+  end
+  return t
+end
+
+_CELLS = {}
+
+-- give birth to a "shape" within the cell array
+function _CELLS:spawn(shape,left,top)
+  for y=0,shape.h-1 do
+    for x=0,shape.w-1 do
+      self[top+y][left+x] = shape[y*shape.w+x+1]
+    end
+  end
+end
+
+-- run the CA and produce the next generation
+function _CELLS:evolve(next)
+  local ym1,y,yp1,yi=self.h-1,self.h,1,self.h
+  while yi > 0 do
+    local xm1,x,xp1,xi=self.w-1,self.w,1,self.w
+    while xi > 0 do
+      local sum = self[ym1][xm1] + self[ym1][x] + self[ym1][xp1] +
+                  self[y][xm1] + self[y][xp1] +
+                  self[yp1][xm1] + self[yp1][x] + self[yp1][xp1]
+      next[y][x] = ((sum==2) and self[y][x]) or ((sum==3) and 1) or 0
+      xm1,x,xp1,xi = x,xp1,xp1+1,xi-1
+    end
+    ym1,y,yp1,yi = y,yp1,yp1+1,yi-1
+  end
+end
+
+-- output the array to screen
+function _CELLS:draw()
+  local out="" -- accumulate to reduce flicker
+  for y=1,self.h do
+   for x=1,self.w do
+      out=out..(((self[y][x]>0) and ALIVE) or DEAD)
+    end
+    out=out.."\n"
+  end
+  write(out)
+end
+
+-- constructor
+function CELLS(w,h)
+  local c = ARRAY2D(w,h)
+  c.spawn = _CELLS.spawn
+  c.evolve = _CELLS.evolve
+  c.draw = _CELLS.draw
+  return c
+end
+
+--
+-- shapes suitable for use with spawn() above
+--
+HEART = { 1,0,1,1,0,1,1,1,1; w=3,h=3 }
+GLIDER = { 0,0,1,1,0,1,0,1,1; w=3,h=3 }
+EXPLODE = { 0,1,0,1,1,1,1,0,1,0,1,0; w=3,h=4 }
+FISH = { 0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0; w=5,h=4 }
+BUTTERFLY = { 1,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1; w=5,h=5 }
+
+-- the main routine
+function LIFE(w,h)
+  -- create two arrays
+  local thisgen = CELLS(w,h)
+  local nextgen = CELLS(w,h)
+
+  -- create some life
+  -- about 1000 generations of fun, then a glider steady-state
+  thisgen:spawn(GLIDER,5,4)
+  thisgen:spawn(EXPLODE,25,10)
+  thisgen:spawn(FISH,4,12)
+
+  -- run until break
+  local gen=1
+  write("\027[2J")	-- ANSI clear screen
+  while 1 do
+    thisgen:evolve(nextgen)
+    thisgen,nextgen = nextgen,thisgen
+    write("\027[H")	-- ANSI home cursor
+    thisgen:draw()
+    write("Life - generation ",gen,"\n")
+    gen=gen+1
+    if gen>2000 then break end
+    --delay()		-- no delay
+  end
+end
+
+LIFE(40,20)
diff --git a/tests/life.lua.html b/tests/life.lua.html
new file mode 100644
--- /dev/null
+++ b/tests/life.lua.html
@@ -0,0 +1,128 @@
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; }
+code > span.dt { color: #902000; }
+code > span.dv { color: #40a070; }
+code > span.bn { color: #40a070; }
+code > span.fl { color: #40a070; }
+code > span.ch { color: #4070a0; }
+code > span.st { color: #4070a0; }
+code > span.co { color: #60a0b0; font-style: italic; }
+code > span.ot { color: #007020; }
+code > span.al { color: #ff0000; font-weight: bold; }
+code > span.fu { color: #06287e; }
+code > span.er { color: #ff0000; font-weight: bold; }
+</style></head><body><pre class="sourceCode"><code class="sourceCode"><span class="co" title="CommentTok">-- life.lua</span>
+<span class="co" title="CommentTok">-- original by Dave Bollinger </span><span class="kw" title="KeywordTok">&lt;DBollinger</span><span class="ot" title="OtherTok">@compuserve.com</span><span class="kw" title="KeywordTok">&gt;</span><span class="co" title="CommentTok"> posted to lua-l</span>
+<span class="co" title="CommentTok">-- modified to use ANSI terminal escape sequences</span>
+<span class="co" title="CommentTok">-- modified to use for instead of while</span>
+
+<span class="kw" title="KeywordTok">local</span> <span class="fu" title="FunctionTok">write</span><span class="ot" title="OtherTok">=</span><span class="fu" title="FunctionTok">io.write</span>
+
+ALIVE<span class="ot" title="OtherTok">=</span><span class="st" title="StringTok">&quot;¥&quot;</span>	DEAD<span class="ot" title="OtherTok">=</span><span class="st" title="StringTok">&quot;þ&quot;</span>
+ALIVE<span class="ot" title="OtherTok">=</span><span class="st" title="StringTok">&quot;O&quot;</span>	DEAD<span class="ot" title="OtherTok">=</span><span class="st" title="StringTok">&quot;-&quot;</span>
+
+<span class="kw" title="KeywordTok">function</span> delay<span class="ot" title="OtherTok">()</span> <span class="co" title="CommentTok">-- NOTE: SYSTEM-DEPENDENT, adjust as necessary</span>
+  <span class="kw" title="KeywordTok">for</span> i<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">10000</span> <span class="kw" title="KeywordTok">do</span> <span class="kw" title="KeywordTok">end</span>
+  <span class="co" title="CommentTok">-- local i=os.clock()+1 while(os.clock()</span><span class="kw" title="KeywordTok">&lt;i</span><span class="ot" title="OtherTok">) do end</span>
+<span class="kw" title="KeywordTok">end</span>
+
+<span class="kw" title="KeywordTok">function</span> ARRAY2D<span class="ot" title="OtherTok">(</span>w<span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">)</span>
+  <span class="kw" title="KeywordTok">local</span> t <span class="ot" title="OtherTok">=</span> <span class="ot" title="OtherTok">{</span>w<span class="ot" title="OtherTok">=</span>w<span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">=</span>h<span class="ot" title="OtherTok">}</span>
+  <span class="kw" title="KeywordTok">for</span> y<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>h <span class="kw" title="KeywordTok">do</span>
+    t<span class="ot" title="OtherTok">[</span>y<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">=</span> <span class="ot" title="OtherTok">{}</span>
+    <span class="kw" title="KeywordTok">for</span> x<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>w <span class="kw" title="KeywordTok">do</span>
+      t<span class="ot" title="OtherTok">[</span>y<span class="ot" title="OtherTok">][</span>x<span class="ot" title="OtherTok">]=</span><span class="dv" title="DecValTok">0</span>
+    <span class="kw" title="KeywordTok">end</span>
+  <span class="kw" title="KeywordTok">end</span>
+  <span class="kw" title="KeywordTok">return</span> t
+<span class="kw" title="KeywordTok">end</span>
+
+_CELLS <span class="ot" title="OtherTok">=</span> <span class="ot" title="OtherTok">{}</span>
+
+<span class="co" title="CommentTok">-- give birth to a &quot;shape&quot; within the cell array</span>
+<span class="kw" title="KeywordTok">function</span> _CELLS:spawn<span class="ot" title="OtherTok">(</span>shape<span class="ot" title="OtherTok">,</span>left<span class="ot" title="OtherTok">,</span>top<span class="ot" title="OtherTok">)</span>
+  <span class="kw" title="KeywordTok">for</span> y<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span>shape<span class="ot" title="OtherTok">.</span>h<span class="ot" title="OtherTok">-</span><span class="dv" title="DecValTok">1</span> <span class="kw" title="KeywordTok">do</span>
+    <span class="kw" title="KeywordTok">for</span> x<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span>shape<span class="ot" title="OtherTok">.</span>w<span class="ot" title="OtherTok">-</span><span class="dv" title="DecValTok">1</span> <span class="kw" title="KeywordTok">do</span>
+      self<span class="ot" title="OtherTok">[</span>top<span class="ot" title="OtherTok">+</span>y<span class="ot" title="OtherTok">][</span>left<span class="ot" title="OtherTok">+</span>x<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">=</span> shape<span class="ot" title="OtherTok">[</span>y<span class="ot" title="OtherTok">*</span>shape<span class="ot" title="OtherTok">.</span>w<span class="ot" title="OtherTok">+</span>x<span class="ot" title="OtherTok">+</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">]</span>
+    <span class="kw" title="KeywordTok">end</span>
+  <span class="kw" title="KeywordTok">end</span>
+<span class="kw" title="KeywordTok">end</span>
+
+<span class="co" title="CommentTok">-- run the CA and produce the next generation</span>
+<span class="kw" title="KeywordTok">function</span> _CELLS:evolve<span class="ot" title="OtherTok">(</span><span class="fu" title="FunctionTok">next</span><span class="ot" title="OtherTok">)</span>
+  <span class="kw" title="KeywordTok">local</span> ym1<span class="ot" title="OtherTok">,</span>y<span class="ot" title="OtherTok">,</span>yp1<span class="ot" title="OtherTok">,</span>yi<span class="ot" title="OtherTok">=</span>self<span class="ot" title="OtherTok">.</span>h<span class="ot" title="OtherTok">-</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>self<span class="ot" title="OtherTok">.</span>h<span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>self<span class="ot" title="OtherTok">.</span>h
+  <span class="kw" title="KeywordTok">while</span> yi <span class="ot" title="OtherTok">&gt;</span> <span class="dv" title="DecValTok">0</span> <span class="kw" title="KeywordTok">do</span>
+    <span class="kw" title="KeywordTok">local</span> xm1<span class="ot" title="OtherTok">,</span>x<span class="ot" title="OtherTok">,</span>xp1<span class="ot" title="OtherTok">,</span>xi<span class="ot" title="OtherTok">=</span>self<span class="ot" title="OtherTok">.</span>w<span class="ot" title="OtherTok">-</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>self<span class="ot" title="OtherTok">.</span>w<span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>self<span class="ot" title="OtherTok">.</span>w
+    <span class="kw" title="KeywordTok">while</span> xi <span class="ot" title="OtherTok">&gt;</span> <span class="dv" title="DecValTok">0</span> <span class="kw" title="KeywordTok">do</span>
+      <span class="kw" title="KeywordTok">local</span> sum <span class="ot" title="OtherTok">=</span> self<span class="ot" title="OtherTok">[</span>ym1<span class="ot" title="OtherTok">][</span>xm1<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">+</span> self<span class="ot" title="OtherTok">[</span>ym1<span class="ot" title="OtherTok">][</span>x<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">+</span> self<span class="ot" title="OtherTok">[</span>ym1<span class="ot" title="OtherTok">][</span>xp1<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">+</span>
+                  self<span class="ot" title="OtherTok">[</span>y<span class="ot" title="OtherTok">][</span>xm1<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">+</span> self<span class="ot" title="OtherTok">[</span>y<span class="ot" title="OtherTok">][</span>xp1<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">+</span>
+                  self<span class="ot" title="OtherTok">[</span>yp1<span class="ot" title="OtherTok">][</span>xm1<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">+</span> self<span class="ot" title="OtherTok">[</span>yp1<span class="ot" title="OtherTok">][</span>x<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">+</span> self<span class="ot" title="OtherTok">[</span>yp1<span class="ot" title="OtherTok">][</span>xp1<span class="ot" title="OtherTok">]</span>
+      <span class="fu" title="FunctionTok">next</span><span class="ot" title="OtherTok">[</span>y<span class="ot" title="OtherTok">][</span>x<span class="ot" title="OtherTok">]</span> <span class="ot" title="OtherTok">=</span> <span class="ot" title="OtherTok">((</span>sum<span class="ot" title="OtherTok">==</span><span class="dv" title="DecValTok">2</span><span class="ot" title="OtherTok">)</span> <span class="kw" title="KeywordTok">and</span> self<span class="ot" title="OtherTok">[</span>y<span class="ot" title="OtherTok">][</span>x<span class="ot" title="OtherTok">])</span> <span class="kw" title="KeywordTok">or</span> <span class="ot" title="OtherTok">((</span>sum<span class="ot" title="OtherTok">==</span><span class="dv" title="DecValTok">3</span><span class="ot" title="OtherTok">)</span> <span class="kw" title="KeywordTok">and</span> <span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">)</span> <span class="kw" title="KeywordTok">or</span> <span class="dv" title="DecValTok">0</span>
+      xm1<span class="ot" title="OtherTok">,</span>x<span class="ot" title="OtherTok">,</span>xp1<span class="ot" title="OtherTok">,</span>xi <span class="ot" title="OtherTok">=</span> x<span class="ot" title="OtherTok">,</span>xp1<span class="ot" title="OtherTok">,</span>xp1<span class="ot" title="OtherTok">+</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>xi<span class="ot" title="OtherTok">-</span><span class="dv" title="DecValTok">1</span>
+    <span class="kw" title="KeywordTok">end</span>
+    ym1<span class="ot" title="OtherTok">,</span>y<span class="ot" title="OtherTok">,</span>yp1<span class="ot" title="OtherTok">,</span>yi <span class="ot" title="OtherTok">=</span> y<span class="ot" title="OtherTok">,</span>yp1<span class="ot" title="OtherTok">,</span>yp1<span class="ot" title="OtherTok">+</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>yi<span class="ot" title="OtherTok">-</span><span class="dv" title="DecValTok">1</span>
+  <span class="kw" title="KeywordTok">end</span>
+<span class="kw" title="KeywordTok">end</span>
+
+<span class="co" title="CommentTok">-- output the array to screen</span>
+<span class="kw" title="KeywordTok">function</span> _CELLS:draw<span class="ot" title="OtherTok">()</span>
+  <span class="kw" title="KeywordTok">local</span> out<span class="ot" title="OtherTok">=</span><span class="st" title="StringTok">&quot;&quot;</span> <span class="co" title="CommentTok">-- accumulate to reduce flicker</span>
+  <span class="kw" title="KeywordTok">for</span> y<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>self<span class="ot" title="OtherTok">.</span>h <span class="kw" title="KeywordTok">do</span>
+   <span class="kw" title="KeywordTok">for</span> x<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span>self<span class="ot" title="OtherTok">.</span>w <span class="kw" title="KeywordTok">do</span>
+      out<span class="ot" title="OtherTok">=</span>out<span class="ot" title="OtherTok">..(((</span>self<span class="ot" title="OtherTok">[</span>y<span class="ot" title="OtherTok">][</span>x<span class="ot" title="OtherTok">]&gt;</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">)</span> <span class="kw" title="KeywordTok">and</span> ALIVE<span class="ot" title="OtherTok">)</span> <span class="kw" title="KeywordTok">or</span> DEAD<span class="ot" title="OtherTok">)</span>
+    <span class="kw" title="KeywordTok">end</span>
+    out<span class="ot" title="OtherTok">=</span>out<span class="ot" title="OtherTok">..</span><span class="st" title="StringTok">&quot;</span><span class="ot" title="OtherTok">\n</span><span class="st" title="StringTok">&quot;</span>
+  <span class="kw" title="KeywordTok">end</span>
+  <span class="fu" title="FunctionTok">write</span><span class="ot" title="OtherTok">(</span>out<span class="ot" title="OtherTok">)</span>
+<span class="kw" title="KeywordTok">end</span>
+
+<span class="co" title="CommentTok">-- constructor</span>
+<span class="kw" title="KeywordTok">function</span> CELLS<span class="ot" title="OtherTok">(</span>w<span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">)</span>
+  <span class="kw" title="KeywordTok">local</span> c <span class="ot" title="OtherTok">=</span> ARRAY2D<span class="ot" title="OtherTok">(</span>w<span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">)</span>
+  c<span class="ot" title="OtherTok">.</span>spawn <span class="ot" title="OtherTok">=</span> _CELLS<span class="ot" title="OtherTok">.</span>spawn
+  c<span class="ot" title="OtherTok">.</span>evolve <span class="ot" title="OtherTok">=</span> _CELLS<span class="ot" title="OtherTok">.</span>evolve
+  c<span class="ot" title="OtherTok">.</span>draw <span class="ot" title="OtherTok">=</span> _CELLS<span class="ot" title="OtherTok">.</span>draw
+  <span class="kw" title="KeywordTok">return</span> c
+<span class="kw" title="KeywordTok">end</span>
+
+<span class="co" title="CommentTok">--</span>
+<span class="co" title="CommentTok">-- shapes suitable for use with spawn() above</span>
+<span class="co" title="CommentTok">--</span>
+HEART <span class="ot" title="OtherTok">=</span> <span class="ot" title="OtherTok">{</span> <span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">;</span> w<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">3</span><span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">3</span> <span class="ot" title="OtherTok">}</span>
+GLIDER <span class="ot" title="OtherTok">=</span> <span class="ot" title="OtherTok">{</span> <span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">;</span> w<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">3</span><span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">3</span> <span class="ot" title="OtherTok">}</span>
+EXPLODE <span class="ot" title="OtherTok">=</span> <span class="ot" title="OtherTok">{</span> <span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">;</span> w<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">3</span><span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">4</span> <span class="ot" title="OtherTok">}</span>
+FISH <span class="ot" title="OtherTok">=</span> <span class="ot" title="OtherTok">{</span> <span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">;</span> w<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">5</span><span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">4</span> <span class="ot" title="OtherTok">}</span>
+BUTTERFLY <span class="ot" title="OtherTok">=</span> <span class="ot" title="OtherTok">{</span> <span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">0</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">1</span><span class="ot" title="OtherTok">;</span> w<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">5</span><span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">5</span> <span class="ot" title="OtherTok">}</span>
+
+<span class="co" title="CommentTok">-- the main routine</span>
+<span class="kw" title="KeywordTok">function</span> LIFE<span class="ot" title="OtherTok">(</span>w<span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">)</span>
+  <span class="co" title="CommentTok">-- create two arrays</span>
+  <span class="kw" title="KeywordTok">local</span> thisgen <span class="ot" title="OtherTok">=</span> CELLS<span class="ot" title="OtherTok">(</span>w<span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">)</span>
+  <span class="kw" title="KeywordTok">local</span> nextgen <span class="ot" title="OtherTok">=</span> CELLS<span class="ot" title="OtherTok">(</span>w<span class="ot" title="OtherTok">,</span>h<span class="ot" title="OtherTok">)</span>
+
+  <span class="co" title="CommentTok">-- create some life</span>
+  <span class="co" title="CommentTok">-- about 1000 generations of fun, then a glider steady-state</span>
+  thisgen:spawn<span class="ot" title="OtherTok">(</span>GLIDER<span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">5</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">4</span><span class="ot" title="OtherTok">)</span>
+  thisgen:spawn<span class="ot" title="OtherTok">(</span>EXPLODE<span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">25</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">10</span><span class="ot" title="OtherTok">)</span>
+  thisgen:spawn<span class="ot" title="OtherTok">(</span>FISH<span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">4</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">12</span><span class="ot" title="OtherTok">)</span>
+
+  <span class="co" title="CommentTok">-- run until break</span>
+  <span class="kw" title="KeywordTok">local</span> gen<span class="ot" title="OtherTok">=</span><span class="dv" title="DecValTok">1</span>
+  <span class="fu" title="FunctionTok">write</span><span class="ot" title="OtherTok">(</span><span class="st" title="StringTok">&quot;\027[2J&quot;</span><span class="ot" title="OtherTok">)</span>	<span class="co" title="CommentTok">-- ANSI clear screen</span>
+  <span class="kw" title="KeywordTok">while</span> <span class="dv" title="DecValTok">1</span> <span class="kw" title="KeywordTok">do</span>
+    thisgen:evolve<span class="ot" title="OtherTok">(</span>nextgen<span class="ot" title="OtherTok">)</span>
+    thisgen<span class="ot" title="OtherTok">,</span>nextgen <span class="ot" title="OtherTok">=</span> nextgen<span class="ot" title="OtherTok">,</span>thisgen
+    <span class="fu" title="FunctionTok">write</span><span class="ot" title="OtherTok">(</span><span class="st" title="StringTok">&quot;\027[H&quot;</span><span class="ot" title="OtherTok">)</span>	<span class="co" title="CommentTok">-- ANSI home cursor</span>
+    thisgen:draw<span class="ot" title="OtherTok">()</span>
+    <span class="fu" title="FunctionTok">write</span><span class="ot" title="OtherTok">(</span><span class="st" title="StringTok">&quot;Life - generation &quot;</span><span class="ot" title="OtherTok">,</span>gen<span class="ot" title="OtherTok">,</span><span class="st" title="StringTok">&quot;</span><span class="ot" title="OtherTok">\n</span><span class="st" title="StringTok">&quot;</span><span class="ot" title="OtherTok">)</span>
+    gen<span class="ot" title="OtherTok">=</span>gen<span class="ot" title="OtherTok">+</span><span class="dv" title="DecValTok">1</span>
+    <span class="kw" title="KeywordTok">if</span> gen<span class="ot" title="OtherTok">&gt;</span><span class="dv" title="DecValTok">2000</span> <span class="kw" title="KeywordTok">then</span> <span class="kw" title="KeywordTok">break</span> <span class="kw" title="KeywordTok">end</span>
+    <span class="co" title="CommentTok">--delay()		-- no delay</span>
+  <span class="kw" title="KeywordTok">end</span>
+<span class="kw" title="KeywordTok">end</span>
+
+LIFE<span class="ot" title="OtherTok">(</span><span class="dv" title="DecValTok">40</span><span class="ot" title="OtherTok">,</span><span class="dv" title="DecValTok">20</span><span class="ot" title="OtherTok">)</span></code></pre></body>
diff --git a/tests/test-highlighting-kate.hs b/tests/test-highlighting-kate.hs
new file mode 100644
--- /dev/null
+++ b/tests/test-highlighting-kate.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE CPP, OverloadedStrings #-}
+module Main where
+import Data.Char (toLower)
+import Control.Monad
+import System.Exit
+import System.Directory
+import System.FilePath
+import Data.Maybe (fromMaybe)
+import Text.Printf
+import System.IO
+import Data.Monoid (mempty)
+import Text.Printf
+import Text.Highlighting.Kate
+import Data.Algorithm.Diff
+import Control.Applicative
+import System.Environment (getArgs)
+#if MIN_VERSION_blaze_html(0,5,0)
+import Text.Blaze.Html
+import Text.Blaze.Html.Renderer.String
+#else
+import Text.Blaze
+import Text.Blaze.Renderer.String
+#endif
+import qualified Text.Blaze.Html5 as H
+import qualified Text.Blaze.Html5.Attributes as A
+
+data TestResult = Pass | Fail | Error
+                  deriving (Eq, Show)
+
+main = do
+  inputs <- map ("tests" </>) <$>
+            filter isTestFile <$> getDirectoryContents "tests"
+  args <- getArgs
+  let regen = "--regenerate" `elem` args
+  results <- forM inputs (runTest regen)
+  let numfailures = length $ filter (== Fail) results
+  let numerrors = length $ filter (== Error) results
+  exitWith $ if numfailures == 0 && numerrors == 0
+                then ExitSuccess
+                else ExitFailure $ numfailures + numerrors
+
+isTestFile :: FilePath -> Bool
+isTestFile f = case drop 1 $ takeExtension f of
+                    x -> x `elem` map (map toLower) languages &&
+                          null (takeExtension (dropExtension f))
+
+err :: String -> IO ()
+err = hPutStrLn stderr
+
+runTest regen inpFile = do
+  code <- readFile inpFile
+  let lang = drop 1 $ takeExtension inpFile
+  let actual = formatHtml $ highlightAs lang code
+  when regen $
+    writeFile (inpFile <.> "html") actual
+  expectedString <- readFile (inpFile <.> "html")
+  if expectedString == actual
+     then do
+       putStrLn $ "[PASSED] " ++ inpFile
+       return Pass
+     else do
+       putStrLn $ "[FAILED] " ++ inpFile
+       putStrLn $ "--- " ++ inpFile <.> "html"
+       putStrLn $ "+++ actual"
+       printDiff expectedString actual
+       return Fail
+
+formatHtml toks =
+  renderHtml $ H.head (metadata >> css) >> H.body (toHtml fragment)
+  where css = H.style ! A.type_ "text/css" $ toHtml $ styleToCss pygments
+        fragment = formatHtmlBlock opts toks
+        metadata = H.meta ! A.httpEquiv "Content-Type"
+                              ! A.content "text/html; charset=UTF-8"
+        opts = defaultFormatOpts{ titleAttributes = True }
+
+vividize :: Diff String -> String
+vividize (Both s _) = "  " ++ s
+vividize (First s)  = "- " ++ s
+vividize (Second s) = "+ " ++ s
+
+printDiff :: String -> String -> IO ()
+printDiff expected actual = do
+  mapM_ putStrLn $ map vividize $ getDiff (lines expected) (lines actual)
diff --git a/xml/abc.xml b/xml/abc.xml
new file mode 100644
--- /dev/null
+++ b/xml/abc.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<!-- Andrea Primiani - primiani at dag dot it
+ 	version1.10 - 12 december 2005 -->
+<language name="ABC" version="1.10" kateversion="2.4" section="Other" extensions="*.abc;*.ABC" mimetype="text/vnd.abc" casesensitive="1" author="Andrea Primiani (primiani@dag.it)" license="LGPL">
+    <highlighting>
+        <contexts>
+           <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
+<!-- detects tuplet symbols e.g. (3 or (3:2:2-->
+	    <RegExpr attribute="Tuplet" context="#stay" String="\([23456789]:?[23456789]?:?[23456789]?" />
+<!-- detects quoted strings -->
+	    <RangeDetect attribute="String" context="#stay" char="&quot;" char1="&quot;"/>
+<!-- detects decorations delimited by ! ! symbols -->
+	    <RangeDetect attribute="Decoration" context="#stay" char="!" char1="!" />
+<!-- detects single header command delimited by [ and sends to Header context -->
+	    <RegExpr attribute="Header" context="Header" String="\[[ABCGHILMNOQRSTUVZ]:" />
+<!-- detects single header line inside a song without [] - ends at EOL-->
+	    <RegExpr attribute="Header" context="Header2" String="[ABCGHILMNOPQRSTUVZ]:" />
+<!-- detect beginning of header zone with X: and sends to Header context -->	    
+	    <Detect2Chars attribute="Header" context="Header" char="X" char1=":" beginRegion="header" column="0"/>
+<!-- detects bar beginning (or chord) symbols and sends to Bar context -->
+	    <AnyChar attribute="Bar" context="Bar" String="|:[" />
+<!-- detects ] if used to close chords -->	    
+	    <DetectChar attribute="Bar" context="#stay" char="]" />
+<!-- detects () for slurs -->
+	    <AnyChar attribute="Slur" context="#stay" String="()" />
+<!-- detects {} for gracings -->
+	    <AnyChar attribute="Slur" context="#stay" String="{}" />
+<!-- detects W: and w: lyric lines -->	    
+	    <Detect2Chars attribute="Lyrics" context="Lyrics" char="W" char1=":" />
+	    <Detect2Chars attribute="Lyrics" context="Lyrics" char="w" char1=":" />
+<!-- detects %% preprocessor lines and % comment lines-->	    
+	    <Detect2Chars attribute="Preprocessor" context="Preprocessor" char="%" char1="%"/>
+	    <DetectChar attribute="Comment" context="Comment" char="%" />
+<!-- detects ^ _ = symbols before a note -->
+	    <RegExpr attribute="Sharp" context="#stay" String="[_|\^]?[_|=|\^][A-Ga-g]" />
+	   </context>
+<!-- returns to Normal context at the end of line -->	   
+	   <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop" />
+	   <context name="Lyrics" attribute="Lyrics" lineEndContext="#pop" />
+	   <context name="Part" attribute="Header" lineEndContext="#pop" />
+	   <context name="Comment" attribute="Comment" lineEndContext="#pop" />
+<!-- returns to Normal context after the end of bar symbols or at EOL -->
+	   <context name="Bar" attribute="Bar" lineEndContext="#pop" >
+	   	<DetectChar attribute="Normal" context="#pop" char="&quot;" />
+<!-- the bar symbol ends when a note letter follows -->
+		<RegExpr attribute="Normal" context="#pop" String="[A-Ga-gZz]" />
+<!-- the bar symbol ends after a white space -->
+		<DetectChar attribute="Normal" context="#pop" char=" " />
+<!-- detects decorations delimited by ! ! symbols -->
+	    <RangeDetect attribute="Decoration" context="#stay" char="!" char1="!" />
+<!-- detects () for slurs -->
+	    <AnyChar attribute="Slur" context="#stay" String="()" />
+<!-- chomps all other bar symbols -->
+		<RegExpr attribute="Bar" context="#pop" String=":*\|*[1-9]|/*\|" />
+	   </context>
+<!-- returns to Normal context at the end of header -->
+	   <context name="Header" attribute="Header" lineEndContext="#stay">
+<!-- the header ends after K: line -->
+		<RegExpr attribute="Header" context="#pop" String="K:.+" endRegion="header" column="0"/>
+<!-- the single header command ends at the ] char -->
+		<DetectChar attribute="Header" context="#pop" char="]" />
+	   </context>
+<!-- the single header line ends at EOL -->
+	   <context name="Header2" attribute="Header" lineEndContext="#pop" />
+       </contexts>
+        <itemDatas>
+          <itemData name="Normal Text" defStyleNum="dsNormal"/>
+          <itemData name="Notes" defStyleNum="dsKeyword" bold="true"/>
+	  <itemData name="Comment" defStyleNum="dsComment"/>
+	  <itemData name="Decoration" defStyleNum="dsFloat" color="#00bbaa" />
+	  <itemData name="String" defStyleNum="dsString" bold="true"/>
+	  <itemData name="Preprocessor" defStyleNum="dsString" italic="true"/>
+	  <itemData name="Header" defStyleNum="dsFloat"/>
+	  <itemData name="Slur" defStyleNum="dsDataType" bold="true"/>
+	  <itemData name="Tuplet" defStyleNum="dsDataType" color="#bb00bb"/>
+	  <itemData name="Lyrics" defStyleNum="dsDataType" color="#00bb00"/>
+	  <itemData name="Bar" defStyleNum="dsChar" color="#0000ff"/>
+	  <itemData name="Sharp" defStyleNum="dsNormal" color="#22bb66" bold="true"/>
+	</itemDatas>
+ </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="%" />
+    </comments>
+    <keywords casesensitive="1" />
+  </general>
+</language>
diff --git a/xml/actionscript.xml b/xml/actionscript.xml
--- a/xml/actionscript.xml
+++ b/xml/actionscript.xml
@@ -259,14 +259,14 @@
         <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"/>
+          <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>
         <HlCChar attribute="Char" context="#stay"/>
         <RegExpr attribute="Decimal" context="#stay" String="//\s*BEGIN.*$" beginRegion="Region1"/>
diff --git a/xml/alert_indent.xml b/xml/alert_indent.xml
--- a/xml/alert_indent.xml
+++ b/xml/alert_indent.xml
@@ -26,17 +26,18 @@
  This file is included in every file that highlights the "alerts" keywords.
  That's why extensions and mimetype are empty.
 -->
-<language version="1.09" kateversion="2.3" name="Alerts_indent" section="Other" extensions="" mimetype="" author="Dominik Haumann (dhdev@gmx.de)" license="LGPL" hidden="true">
+<language version="1.10" kateversion="2.3" name="Alerts_indent" section="Other" extensions="" mimetype="" author="Dominik Haumann (dhdev@gmx.de)" license="LGPL" hidden="true">
   <highlighting>
     <contexts>
       <context attribute="Normal Text" lineEndContext="#pop" name="Normal Text" >
         <IncludeRules context="##Alerts" />
       </context>
     </contexts>
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+    </itemDatas>
   </highlighting>
   <general>
     <folding indentationsensitive="1" />
   </general>
-  <itemDatas>  <!-- JGM: otherwise ParseSyntaxFiles chokes here -->
-  </itemDatas>
 </language>
diff --git a/xml/asp.xml b/xml/asp.xml
--- a/xml/asp.xml
+++ b/xml/asp.xml
@@ -232,15 +232,15 @@
             <contexts>
             <context name="nosource" attribute="Normal Text" lineEndContext="#stay">
                 <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
-                <RegExpr attribute="HTML Tag" context="aspsource" String="&lt;\s*script\s*language=&quot;VBScript&quot;[^&gt;]*&gt;" insensitive="TRUE" />
-                <RegExpr attribute="HTML Tag" context="scripts" String="&lt;\s*script(\s|&gt;)" insensitive="TRUE" />
+                <RegExpr attribute="HTML Tag" context="aspsource" String="&lt;\s*script\s*language=&quot;VBScript&quot;[^&gt;]*&gt;" insensitive="true" />
+                <RegExpr attribute="HTML Tag" context="scripts" String="&lt;\s*script(\s|&gt;)" insensitive="true" />
                 <RegExpr attribute="HTML Tag" context="htmltag" String="&lt;\s*\/?\s*[a-zA-Z_:][a-zA-Z0-9._:-]*" />
                 <StringDetect attribute="HTML Comment" context="htmlcomment" String="&lt;!--" />
             </context>
 
             <context name="aspsource" attribute="ASP Text" lineEndContext="#stay">
                 <StringDetect attribute="Keyword" context="#pop" String="%&gt;" />
-                <RegExpr attribute="HTML Tag" context="#pop" String="&lt;\s*\/\s*script\s*&gt;" insensitive="TRUE" />
+                <RegExpr attribute="HTML Tag" context="#pop" String="&lt;\s*\/\s*script\s*&gt;" insensitive="true" />
                 <DetectChar attribute="Comment" context="asp_onelinecomment" char="'" />
                 <DetectChar attribute="String" context="doublequotestring" char="&quot;" />
                 <DetectChar attribute="String" context="singlequotestring" char="&#39;" />
@@ -254,36 +254,36 @@
                 <AnyChar attribute="Other" context="#stay" String=";()}{:,[]" />
                 <keyword attribute="Other" context="#stay" String="Others" />
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\belseif\b" insensitive="TRUE" beginRegion="iffi1" endRegion="iffi1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\belse\b" insensitive="TRUE" beginRegion="iffi1" endRegion="iffi1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bif\b" insensitive="TRUE" beginRegion="iffi1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bend if\b" insensitive="TRUE" endRegion="iffi1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\belseif\b" insensitive="true" beginRegion="iffi1" endRegion="iffi1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\belse\b" insensitive="true" beginRegion="iffi1" endRegion="iffi1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bif\b" insensitive="true" beginRegion="iffi1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bend if\b" insensitive="true" endRegion="iffi1"/>
 
-                <RegExpr attribute="Keyword" context="#stay" String="\bexit function\b" insensitive="TRUE" />
-                <RegExpr attribute="Keyword" context="#stay" String="\bfunction\b" insensitive="TRUE" beginRegion="funendfun1"/>
-                <RegExpr attribute="Keyword" context="#stay" String="\bend function\b" insensitive="TRUE" endRegion="funendfun1"/>
+                <RegExpr attribute="Keyword" context="#stay" String="\bexit function\b" insensitive="true" />
+                <RegExpr attribute="Keyword" context="#stay" String="\bfunction\b" insensitive="true" beginRegion="funendfun1"/>
+                <RegExpr attribute="Keyword" context="#stay" String="\bend function\b" insensitive="true" endRegion="funendfun1"/>
 
-                <RegExpr attribute="Keyword" context="#stay" String="\bexit sub\b" insensitive="TRUE" />
-                <RegExpr attribute="Keyword" context="#stay" String="\bsub\b" insensitive="TRUE" beginRegion="subendsub1"/>
-                <RegExpr attribute="Keyword" context="#stay" String="\bend sub\b" insensitive="TRUE" endRegion="subendsub1"/>
+                <RegExpr attribute="Keyword" context="#stay" String="\bexit sub\b" insensitive="true" />
+                <RegExpr attribute="Keyword" context="#stay" String="\bsub\b" insensitive="true" beginRegion="subendsub1"/>
+                <RegExpr attribute="Keyword" context="#stay" String="\bend sub\b" insensitive="true" endRegion="subendsub1"/>
 
-                <RegExpr attribute="Keyword" context="#stay" String="\bclass\b" insensitive="TRUE" beginRegion="classendclass1"/>
-                <RegExpr attribute="Keyword" context="#stay" String="\bend class\b" insensitive="TRUE" endRegion="classendclass1"/>
+                <RegExpr attribute="Keyword" context="#stay" String="\bclass\b" insensitive="true" beginRegion="classendclass1"/>
+                <RegExpr attribute="Keyword" context="#stay" String="\bend class\b" insensitive="true" endRegion="classendclass1"/>
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\bexit do\b" insensitive="TRUE" />
-                <RegExpr attribute="Control Structures" context="#stay" String="\bdo(\s+(while))?\b" insensitive="TRUE" beginRegion="doloop1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bloop\b" insensitive="TRUE" endRegion="doloop1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bexit do\b" insensitive="true" />
+                <RegExpr attribute="Control Structures" context="#stay" String="\bdo(\s+(while))?\b" insensitive="true" beginRegion="doloop1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bloop\b" insensitive="true" endRegion="doloop1"/>
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\bexit while\b" insensitive="TRUE" />
-                <RegExpr attribute="Control Structures" context="#stay" String="\bwhile\b" insensitive="TRUE" beginRegion="whilewend1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bwend\b" insensitive="TRUE" endRegion="whilewend1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bexit while\b" insensitive="true" />
+                <RegExpr attribute="Control Structures" context="#stay" String="\bwhile\b" insensitive="true" beginRegion="whilewend1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bwend\b" insensitive="true" endRegion="whilewend1"/>
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\bexit for\b" insensitive="TRUE" />
-                <RegExpr attribute="Control Structures" context="#stay" String="\bfor\b" insensitive="TRUE" beginRegion="fornext1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bnext\b" insensitive="TRUE" endRegion="fornext1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bexit for\b" insensitive="true" />
+                <RegExpr attribute="Control Structures" context="#stay" String="\bfor\b" insensitive="true" beginRegion="fornext1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bnext\b" insensitive="true" endRegion="fornext1"/>
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\bselect case\b" insensitive="TRUE" beginRegion="selcase1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bend select\b" insensitive="TRUE" endRegion="selcase1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bselect case\b" insensitive="true" beginRegion="selcase1"/>
+                <RegExpr attribute="Control Structures" context="#stay" String="\bend select\b" insensitive="true" endRegion="selcase1"/>
 
                 <keyword attribute="Keyword" context="#stay" String="keywords" />
                 <keyword attribute="Control Structures" context="#stay" String="control structures" />
@@ -340,7 +340,7 @@
                 <keyword attribute="Keyword" context="#stay" String="keywords" />
                 <keyword attribute="Function" context="#stay" String="functions" />
                 <StringDetect attribute="Keyword" context="aspsource" String="&lt;%"/>
-                <RegExpr attribute="HTML Tag" context="#pop" String="&lt;\s*\/\s*script\s*&gt;" insensitive="TRUE" />
+                <RegExpr attribute="HTML Tag" context="#pop" String="&lt;\s*\/\s*script\s*&gt;" insensitive="true" />
 
                 <DetectChar attribute="String" context="doublequotestring" char="&quot;" />
                 <DetectChar attribute="String" context="singlequotestring" char="&#39;" />
@@ -354,7 +354,7 @@
                 <keyword attribute="Other" context="#stay" String="Others" />
             </context>
             <context name="scripts_onelinecomment" attribute="Comment" lineEndContext="#pop">
-                <RegExpr attribute="HTML Tag" context="#pop#pop" String="&lt;\s*\/\s*script\s*&gt;" insensitive="TRUE" />
+                <RegExpr attribute="HTML Tag" context="#pop#pop" String="&lt;\s*\/\s*script\s*&gt;" insensitive="true" />
             </context>
             <context name="twolinecomment" attribute="Comment" lineEndContext="#stay">
                 <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment" />
diff --git a/xml/awk.xml b/xml/awk.xml
--- a/xml/awk.xml
+++ b/xml/awk.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="AWK" version="0.92" kateversion="2.3" section="Scripts"
+<language name="AWK" version="0.93" kateversion="2.3" section="Scripts"
   extensions="*.awk" mimetype="text/x-awk" indenter="cstyle"
   license="LGPL">
 <!-- patched by igli#kate@irc:chat.freenode.net -->
@@ -87,7 +87,7 @@
 	<keyword String="special" attribute="Error" context="#stay"/>
 </context>
 
-<context name="base">
+<context name="base" attribute="Normal" lineEndContext="#stay">
 	<DetectSpaces />
 	<DetectChar char="#" context="Comment" attribute="Comment"/>
 	<DetectChar char="~" context="Match" attribute="Operator"/>
@@ -125,7 +125,7 @@
 	<IncludeRules context="regex"/>
 	<DetectChar char="/" context="#pop#pop" attribute="Regex Op"/>
 </context>
-<context name="regex">
+<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"/>
diff --git a/xml/bash.xml.bkp b/xml/bash.xml.bkp
deleted file mode 100644
--- a/xml/bash.xml.bkp
+++ /dev/null
@@ -1,901 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd"
-[
-        <!ENTITY funcname "[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*">
-        <!ENTITY varname  "[A-Za-z_][A-Za-z0-9_]*">
-        <!ENTITY word     "[^|&amp;;()&lt;&gt;\s]+">    <!-- see man bash -->
-        <!ENTITY eos      "(?=($|\s))">                 <!-- eol or space following -->
-        <!ENTITY noword   "(?![\w$+-])">                <!-- no word, $, + or - following -->
-        <!ENTITY pathpart "([\w_@.&#37;*?+-]|\\ )">     <!-- valid character in a file name -->
-]>
-<language name="Bash" version="2.12" kateversion="2.4" section="Scripts" extensions="*.sh;*.bash;*.ebuild;*.eclass;.bashrc;.bash_profile;.bash_login;.profile" 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)
-    Changes by Sebastian Pipping (webmaster@hartwork.org)
-    Released under the LGPL, part of kdelibs/kate -->
-
-  <highlighting>
-    <list name="keywords">
-      <item> else </item>
-      <item> for </item>
-      <item> function </item>
-      <item> in </item>
-      <item> select </item>
-      <item> until </item>
-      <item> while </item>
-      <item> elif </item>
-      <item> then </item>
-      <item> set </item>
-    </list>
-
-    <list name="builtins">
-      <item> : </item>
-      <item> source </item>
-      <item> alias </item>
-      <item> bg </item>
-      <item> bind </item>
-      <item> break </item>
-      <item> builtin </item>
-      <item> cd </item>
-      <item> caller </item>
-      <item> command </item>
-      <item> compgen </item>
-      <item> complete </item>
-      <item> continue </item>
-      <item> dirs </item>
-      <item> disown </item>
-      <item> echo </item>
-      <item> enable </item>
-      <item> eval </item>
-      <item> exec </item>
-      <item> exit </item>
-      <item> fc </item>
-      <item> fg </item>
-      <item> getopts </item>
-      <item> hash </item>
-      <item> help </item>
-      <item> history </item>
-      <item> jobs </item>
-      <item> kill </item>
-      <item> let </item>
-      <item> logout </item>
-      <item> popd </item>
-      <item> printf </item>
-      <item> pushd </item>
-      <item> pwd </item>
-      <item> return </item>
-      <item> set </item>
-      <item> shift </item>
-      <item> shopt </item>
-      <item> suspend </item>
-      <item> test </item>
-      <item> time </item>
-      <item> times </item>
-      <item> trap </item>
-      <item> type </item>
-      <item> ulimit </item>
-      <item> umask </item>
-      <item> unalias </item>
-      <item> wait </item>
-    </list>
-
-    <list name="builtins_var">
-      <item> export </item>
-      <item> unset </item>
-      <item> declare </item>
-      <item> typeset </item>
-      <item> local </item>
-      <item> read </item>
-      <item> readonly </item>
-    </list>
-
-    <list name="unixcommands">
-      <!-- /bin -->
-      <item> arch </item>
-      <item> awk </item>
-      <item> bash </item>
-      <item> bunzip2 </item>
-      <item> bzcat </item>
-      <item> bzcmp </item>
-      <item> bzdiff </item>
-      <item> bzegrep </item>
-      <item> bzfgrep </item>
-      <item> bzgrep </item>
-      <item> bzip2 </item>
-      <item> bzip2recover </item>
-      <item> bzless </item>
-      <item> bzmore </item>
-      <item> cat </item>
-      <item> chattr </item>
-      <item> chgrp </item>
-      <item> chmod </item>
-      <item> chown </item>
-      <item> chvt </item>
-      <item> cp </item>
-      <item> date </item>
-      <item> dd </item>
-      <item> deallocvt </item>
-      <item> df </item>
-      <item> dir </item>
-      <item> dircolors </item>
-      <item> dmesg </item>
-      <item> dnsdomainname </item>
-      <item> domainname </item>
-      <item> du </item>
-      <item> dumpkeys </item>
-      <item> echo </item>
-      <item> ed </item>
-      <item> egrep </item>
-      <item> false </item>
-      <item> fgconsole </item>
-      <item> fgrep </item>
-      <item> fuser </item>
-      <item> gawk </item>
-      <item> getkeycodes </item>
-      <item> gocr </item>
-      <item> grep </item>
-      <item> groff </item>
-      <item> groups </item>
-      <item> gunzip </item>
-      <item> gzexe </item>
-      <item> gzip </item>
-      <item> hostname </item>
-      <item> igawk </item>
-      <item> install </item>
-      <item> kbd_mode </item>
-      <item> kbdrate </item>
-      <item> killall </item>
-      <item> last </item>
-      <item> lastb </item>
-      <item> link </item>
-      <item> ln </item>
-      <item> loadkeys </item>
-      <item> loadunimap </item>
-      <item> login </item>
-      <item> ls </item>
-      <item> lsattr </item>
-      <item> lsmod </item>
-      <item> lsmod.old </item>
-      <item> lzcat </item>
-      <item> lzcmp </item>
-      <item> lzdiff </item>
-      <item> lzegrep </item>
-      <item> lzfgrep </item>
-      <item> lzgrep </item>
-      <item> lzless </item>
-      <item> lzcat </item>
-      <item> lzma </item>
-      <item> lzmainfo </item>
-      <item> lzmore </item>
-      <item> mapscrn </item>
-      <item> mesg </item>
-      <item> mkdir </item>
-      <item> mkfifo </item>
-      <item> mknod </item>
-      <item> mktemp </item>
-      <item> more </item>
-      <item> mount </item>
-      <item> mv </item>
-      <item> nano </item>
-      <item> netstat </item>
-      <item> nisdomainname </item>
-      <item> nroff </item>
-      <item> openvt </item>
-      <item> pgawk </item>
-      <item> pidof </item>
-      <item> ping </item>
-      <item> ps </item>
-      <item> pstree </item>
-      <item> pwd </item>
-      <item> rbash </item>
-      <item> readlink </item>
-      <item> red </item>
-      <item> resizecons </item>
-      <item> rm </item>
-      <item> rmdir </item>
-      <item> run-parts </item>
-      <item> sash </item>
-      <item> sed </item>
-      <item> setfont </item>
-      <item> setkeycodes </item>
-      <item> setleds </item>
-      <item> setmetamode </item>
-      <item> setserial </item>
-      <item> sh </item>
-      <item> showkey </item>
-      <item> shred </item>
-      <item> sleep </item>
-      <item> ssed </item>
-      <item> stat </item>
-      <item> stty </item>
-      <item> su </item>
-      <item> sync </item>
-      <item> tar </item>
-      <item> tempfile </item>
-      <item> touch </item>
-      <item> troff </item>
-      <item> true </item>
-      <item> umount </item>
-      <item> uname </item>
-      <item> unicode_start </item>
-      <item> unicode_stop </item>
-      <item> unlink </item>
-      <item> unlzma </item>
-      <item> unxz </item>
-      <item> utmpdump </item>
-      <item> uuidgen </item>
-      <item> vdir </item>
-      <item> wall </item>
-      <item> wc </item>
-      <item> xz </item>
-      <item> xzcat </item>
-      <item> ypdomainname </item>
-      <item> zcat </item>
-      <item> zcmp </item>
-      <item> zdiff </item>
-      <item> zegrep </item>
-      <item> zfgrep </item>
-      <item> zforce </item>
-      <item> zgrep </item>
-      <item> zless </item>
-      <item> zmore </item>
-      <item> znew </item>
-      <item> zsh </item>
-
-      <!-- some from /usr/bin -->
-      <item> aclocal </item>
-      <item> aconnect </item>
-      <item> aplay </item>
-      <item> apm </item>
-      <item> apmsleep </item>
-      <item> apropos </item>
-      <item> ar </item>
-      <item> arecord </item>
-      <item> as </item>
-      <item> as86 </item>
-      <item> autoconf </item>
-      <item> autoheader </item>
-      <item> automake </item>
-      <item> awk </item>
-      <item> basename </item>
-      <item> bc </item>
-      <item> bison </item>
-      <item> c++ </item>
-      <item> cal </item>
-      <item> cat </item>
-      <item> cc </item>
-      <item> cdda2wav </item>
-      <item> cdparanoia </item>
-      <item> cdrdao </item>
-      <item> cd-read </item>
-      <item> cdrecord </item>
-      <item> chfn </item>
-      <item> chgrp </item>
-      <item> chmod </item>
-      <item> chown </item>
-      <item> chroot </item>
-      <item> chsh </item>
-      <item> clear </item>
-      <item> cmp </item>
-      <item> co </item>
-      <item> col </item>
-      <item> comm </item>
-      <item> cp </item>
-      <item> cpio </item>
-      <item> cpp </item>
-      <item> cut </item>
-      <item> dc </item>
-      <item> dd </item>
-      <item> df </item>
-      <item> diff </item>
-      <item> diff3 </item>
-      <item> dir </item>
-      <item> dircolors </item>
-      <item> directomatic </item>
-      <item> dirname </item>
-      <item> du </item>
-      <item> env </item>
-      <item> expr </item>
-      <item> fbset </item>
-      <item> file </item>
-      <item> find </item>
-      <item> flex </item>
-      <item> flex++ </item>
-      <item> fmt </item>
-      <item> free </item>
-      <item> ftp </item>
-      <item> funzip </item>
-      <item> fuser </item>
-      <item> g++ </item>
-      <item> gawk </item>
-      <item> gc </item>
-      <item> gcc </item>
-      <item> gdb </item>
-      <item> getent </item>
-      <item> getopt </item>
-      <item> gettext </item>
-      <item> gettextize </item>
-      <item> gimp </item>
-      <item> gimp-remote </item>
-      <item> gimptool </item>
-      <item> gmake </item>
-      <item> gs </item>
-      <item> head </item>
-      <item> hexdump </item>
-      <item> id </item>
-      <item> install </item>
-      <item> join </item>
-      <item> kill </item>
-      <item> killall </item>
-      <item> ld </item>
-      <item> ld86 </item>
-      <item> ldd </item>
-      <item> less </item>
-      <item> lex </item>
-      <item> ln </item>
-      <item> locate </item>
-      <item> lockfile </item>
-      <item> logname </item>
-      <item> lp </item>
-      <item> lpr </item>
-      <item> ls </item>
-      <item> lynx </item>
-      <item> m4 </item>
-      <item> make </item>
-      <item> man </item>
-      <item> mkdir </item>
-      <item> mknod </item>
-      <item> msgfmt </item>
-      <item> mv </item>
-      <item> namei </item>
-      <item> nasm </item>
-      <item> nawk </item>
-      <item> nice </item>
-      <item> nl </item>
-      <item> nm </item>
-      <item> nm86 </item>
-      <item> nmap </item>
-      <item> nohup </item>
-      <item> nop </item>
-      <item> od </item>
-      <item> passwd </item>
-      <item> patch </item>
-      <item> pcregrep </item>
-      <item> pcretest </item>
-      <item> perl </item>
-      <item> perror </item>
-      <item> pidof </item>
-      <item> pr </item>
-      <item> printf </item>
-      <item> procmail </item>
-      <item> prune </item>
-      <item> ps2ascii </item>
-      <item> ps2epsi </item>
-      <item> ps2frag </item>
-      <item> ps2pdf </item>
-      <item> ps2ps </item>
-      <item> psbook </item>
-      <item> psmerge </item>
-      <item> psnup </item>
-      <item> psresize </item>
-      <item> psselect </item>
-      <item> pstops </item>
-      <item> rcs </item>
-      <item> rev </item>
-      <item> rm </item>
-      <item> scp </item>
-      <item> sed </item>
-      <item> seq </item>
-      <item> setterm </item>
-      <item> shred </item>
-      <item> size </item>
-      <item> size86 </item>
-      <item> skill </item>
-      <item> slogin </item>
-      <item> snice </item>
-      <item> sort </item>
-      <item> sox </item>
-      <item> split </item>
-      <item> ssh </item>
-      <item> ssh-add </item>
-      <item> ssh-agent </item>
-      <item> ssh-keygen </item>
-      <item> ssh-keyscan </item>
-      <item> stat </item>
-      <item> strings </item>
-      <item> strip </item>
-      <item> sudo </item>
-      <item> suidperl </item>
-      <item> sum </item>
-      <item> tac </item>
-      <item> tail </item>
-      <item> tee </item>
-      <item> test </item>
-      <item> tr </item>
-      <item> uniq </item>
-      <item> unlink </item>
-      <item> unzip </item>
-      <item> updatedb </item>
-      <item> updmap </item>
-      <item> uptime </item>
-      <item> users </item>
-      <item> vmstat </item>
-      <item> w </item>
-      <item> wc </item>
-      <item> wget </item>
-      <item> whatis </item>
-      <item> whereis </item>
-      <item> which </item>
-      <item> who </item>
-      <item> whoami </item>
-      <item> write </item>
-      <item> xargs </item>
-      <item> yacc </item>
-      <item> yes </item>
-      <item> zip </item>
-      <item> zsoelim </item>
-
-      <!-- others -->
-      <item> dcop </item>
-      <item> kdialog </item>
-      <item> kfile </item>
-      <item> xhost </item>
-      <item> xmodmap </item>
-      <item> xset </item>
-    </list>
-
-
-    <contexts>
-      <context attribute="Normal Text" lineEndContext="#stay" name="Start">
-        <IncludeRules context="FindAll" />
-      </context>
-
-<!-- ====== The following rulessets are meant to be included ======== -->
-      <!-- FindAll tries to interpret everything -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindAll">
-        <IncludeRules context="FindComments" />
-        <IncludeRules context="FindCommands" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- FindMost tries to interpret anything except commands -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindMost">
-        <IncludeRules context="FindComments" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-
-      <!-- FindComments consumes shell comments till EOL -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="FindComments">
-        <DetectChar attribute="Comment" context="Comment" char="#" firstNonSpace="true"/>
-        <RegExpr attribute="Normal Text" context="Comment" String="[\s;](?=#)" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" name="Comment">
-        <IncludeRules context="##Alerts" />
-      </context>
-
-      <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsParen">
-        <DetectChar attribute="Comment" context="CommentParen" char="#" firstNonSpace="true"/>
-        <RegExpr attribute="Normal Text" context="CommentParen" String="[\s;](?=#)" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" name="CommentParen">
-        <RegExpr attribute="Comment" context="#pop" String="[^)](?=\))" />
-        <IncludeRules context="##Alerts" />
-      </context>
-
-      <!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsBackq">
-        <DetectChar attribute="Comment" context="CommentBackq" char="#" firstNonSpace="true"/>
-        <RegExpr attribute="Normal Text" context="CommentBackq" String="[\s;](?=#)" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" name="CommentBackq">
-        <RegExpr attribute="Comment" context="#pop" String="[^`](?=`)" />
-        <IncludeRules context="##Alerts" />
-      </context>
-
-
-      <!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindCommands">
-        <!-- start expression in double parentheses -->
-        <Detect2Chars attribute="Keyword" context="ExprDblParen" char="(" char1="(" beginRegion="expression" />
-        <!-- start expression in double brackets -->
-        <RegExpr attribute="Keyword" context="ExprDblBracket" String="\[\[&eos;" beginRegion="expression" column="0"/>
-        <RegExpr attribute="Keyword" context="ExprDblBracket" String="\s\[\[&eos;" beginRegion="expression" />
-        <!-- start expression in single brackets -->
-        <RegExpr attribute="Builtin" context="ExprBracket" String="\[&eos;" beginRegion="expression" column="0"/>
-        <RegExpr attribute="Builtin" context="ExprBracket" String="\s\[&eos;" beginRegion="expression" />
-        <!-- start a group command with { -->
-        <RegExpr attribute="Keyword" context="Group" String="\{&eos;" beginRegion="group" />
-        <!-- start a subshell -->
-        <DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell" />
-        <!-- match do and if blocks -->
-        <RegExpr attribute="Keyword" context="#stay" String="\bdo&noword;" beginRegion="do" />
-        <RegExpr attribute="Keyword" context="#stay" String="\bdone&noword;" endRegion="do" />
-        <RegExpr attribute="Keyword" context="#stay" String="\bif &noword;" beginRegion="if" />
-        <RegExpr attribute="Keyword" context="#stay" String="\bfi&noword;" endRegion="if" />
-        <!-- handle case as a special case -->
-        <RegExpr attribute="Keyword" context="Case" String="\bcase&noword;" beginRegion="case" />
-        <!-- handle command line options -->
-        <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9][A-Za-z0-9_]*" />
-        <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
-        <!-- handle variable assignments -->
-        <RegExpr attribute="Variable" context="Assign" String="\b&varname;\+?=" />
-        <RegExpr attribute="Variable" context="AssignSubscr" String="\b&varname;(?=\[.+\]\+?=)" />
-        <!-- handle functions with function keyword before keywords -->
-        <StringDetect attribute="Function" context="#stay" String=":()" />
-        <RegExpr attribute="Keyword" context="FunctionDef" String="\bfunction\b" />
-        <!-- handle keywords -->
-        <keyword attribute="Keyword" context="#stay" String="keywords" />
-        <RegExpr attribute="Builtin" context="#stay" String="\.(?=\s)" />
-        <keyword attribute="Builtin" context="#stay" String="builtins" />
-        <keyword attribute="Command" context="#stay" String="unixcommands" />
-        <!-- handle commands that have variable names as argument -->
-        <keyword attribute="Builtin" context="VarName" String="builtins_var" />
-        <!-- handle here-string -->
-        <RegExpr attribute="Redirection" context="#stay" String="\d*&lt;&lt;&lt;" />
-        <!-- handle here document -->
-        <StringDetect attribute="Redirection" context="HereDoc" String="&lt;&lt;" lookAhead="true" />
-        <!-- handle process subst -->
-        <RegExpr attribute="Redirection" context="ProcessSubst" String="[&lt;&gt;]\(" />
-        <!-- handle redirection -->
-        <RegExpr attribute="Redirection" context="#stay" String="([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)" />
-        <!-- handle &, &&, | and || -->
-        <RegExpr attribute="Control" context="#stay" String="([|&amp;])\1?" />
-        <!-- mark function definitions without function keyword -->
-        <RegExpr attribute="Function" context="#stay" String="&funcname;\s*\(\)" />
-      </context>
-
-      <!-- FindOthers contains various rules to mark different shell input -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindOthers">
-        <RegExpr attribute="Escape" context="#stay" String="\\[][;\\$`{}()|&amp;&lt;&gt;* ]" />
-        <RegExpr attribute="Keyword" context="#stay" String="\\$" />
-        <RegExpr attribute="Escape" context="#stay" String="\{(?!(\s|$))\S*\}" />
-        <RegExpr attribute="Path" context="#stay" String="&pathpart;*(?=/)" />
-        <RegExpr attribute="Path" context="#stay" String="~\w*" />
-        <RegExpr attribute="Path" context="#stay" String="/&pathpart;*(?=([\s/):;$`'&quot;]|$))" />
-        <!-- TODO: shell globs beside * and ? (in Path's) -->
-      </context>
-
-      <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindStrings">
-        <Detect2Chars attribute="Escape" context="#stay" char="\\" char1="'" />
-        <Detect2Chars attribute="Escape" context="#stay" char="\\" char1="&quot;" />
-        <DetectChar attribute="String SingleQ" context="StringSQ" char="'" />
-        <DetectChar attribute="String DoubleQ" context="StringDQ" char="&quot;" />
-        <Detect2Chars attribute="String SingleQ" context="StringEsc" char="$" char1="'" />
-        <Detect2Chars attribute="String Transl." context="StringDQ" char="$" char1="&quot;" />
-      </context>
-
-      <!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindSubstitutions">
-        <RegExpr attribute="Variable" context="Subscript" String="\$&varname;\[" />
-        <RegExpr attribute="Variable" context="#stay" String="\$&varname;" />
-        <RegExpr attribute="Variable" context="#stay" String="\$[*@#?$!_0-9-]" />
-        <RegExpr attribute="Variable" context="#stay" String="\$\{[*@#?$!_0-9-]\}" />
-        <RegExpr attribute="Variable" context="#stay" String="\$\{#&varname;(\[[*@]\])?\}" />
-        <RegExpr attribute="Variable" context="#stay" String="\$\{!&varname;(\[[*@]\]|[*@])?\}" />
-        <RegExpr attribute="Variable" context="VarBrace" String="\$\{&varname;" />
-        <RegExpr attribute="Variable" context="VarBrace" String="\$\{[*@#?$!_0-9-](?=[:#%/=?+-])" />
-        <StringDetect attribute="Variable" context="ExprDblParenSubst" String="$((" beginRegion="expression" />
-        <StringDetect attribute="Redirection" context="SubstFile" String="$(&lt;" />
-        <StringDetect attribute="Variable" context="SubstCommand" String="$(" />
-        <DetectChar attribute="Backquote" context="SubstBackq" char="`" />
-        <RegExpr attribute="Escape" context="#stay" String="\\[`$\\]" />
-      </context>
-
-      <!-- FindTests finds operators valid in tests -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="FindTests">
-        <RegExpr attribute="Expression" context="#stay" String="-[abcdefghkprstuwxOGLSNozn](?=\s)"/>
-        <RegExpr attribute="Expression" context="#stay" String="-([no]t|ef)(?=\s)"/>
-        <RegExpr attribute="Expression" context="#stay" String="([!=]=?|[&gt;&lt;])(?=\s)"/>
-        <RegExpr attribute="Expression" context="#stay" String="-(eq|ne|[gl][te])(?=\s)"/>
-      </context>
-
-
-<!-- ====== These are the contexts that can be branched to ======= -->
-
-      <!-- ExprDblParen consumes an expression started in command mode till )) -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
-        <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression" />
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
-        <Detect2Chars attribute="Variable" context="#pop" char=")" char1=")" endRegion="expression" />
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- ExprSubParen consumes an expression till ) -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubParen">
-        <DetectChar attribute="Normal Text" context="#pop" char=")" />
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- ExprBracket consumes an expression till ] -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket">
-        <RegExpr attribute="Builtin" context="#pop" String="\s\](?=($|[\s;|&amp;]))" endRegion="expression" />
-        <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindTests" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- ExprDblBracket consumes an expression till ]] -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket">
-        <RegExpr attribute="Keyword" context="#pop" String="\s\]\](?=($|[\s;|&amp;]))" endRegion="expression" />
-        <RegExpr attribute="Keyword" context="#pop" String="\]\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
-        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
-        <IncludeRules context="FindTests" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- Group consumes shell input till } -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="Group">
-        <DetectChar attribute="Keyword" context="#pop" char="}" endRegion="group" />
-        <IncludeRules context="FindAll" />
-      </context>
-
-      <!-- SubShell consumes shell input till ) -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="SubShell">
-        <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell" />
-        <IncludeRules context="FindAll" />
-      </context>
-
-      <!-- Assign consumes an expression till EOL or whitespace -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthrough="true" fallthroughContext="#pop">
-        <DetectChar attribute="Variable" context="AssignArray" char="(" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-        <RegExpr attribute="Normal Text" context="#stay" String="[\w:,+_./-]" />
-      </context>
-
-      <!-- AssignArray consumes everything till ), marking assignments -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="AssignArray">
-        <DetectChar attribute="Variable" context="#pop" char=")" />
-        <DetectChar attribute="Variable" context="Subscript" char="[" />
-        <DetectChar attribute="Variable" context="Assign" char="=" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- AssignSubscr first expects a [ then parses subscript and continues with '=value' -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="AssignSubscr" fallthrough="true" fallthroughContext="#pop">
-        <DetectChar attribute="Variable" context="Subscript" char="[" />
-        <Detect2Chars attribute="Variable" context="Assign" char="+" char1="=" />
-        <DetectChar attribute="Variable" context="Assign" char="=" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- Subscript consumes anything till ], marks as Variable -->
-      <context attribute="Variable" lineEndContext="#stay" name="Subscript">
-        <DetectChar attribute="Variable" context="#pop" char="]" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- FunctionDef consumes a name, possibly with (), marks as Function -->
-      <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Function" context="#pop" String="\s+&funcname;(\s*\(\))?" />
-      </context>
-
-      <!-- VarName consumes spare variable names and assignments -->
-      <context attribute="Normal Text" lineEndContext="#pop" name="VarName" fallthrough="true" fallthroughContext="#pop">
-        <!-- handle command line options -->
-        <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9]+" />
-        <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
-        <RegExpr attribute="Variable" context="#stay" String="\b&varname;" />
-        <DetectChar attribute="Variable" context="Subscript" char="[" />
-        <DetectChar attribute="Variable" context="Assign" char="=" />
-        <IncludeRules context="FindMost" />
-        <!-- stay here in spaces and other safe characters -->
-        <RegExpr attribute="Normal Text" context="#stay" String="[^]})|;`&amp;&gt;&lt;]" />
-      </context>
-
-      <!-- ProcessSubst handles <(command) and >(command) -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst">
-        <DetectChar attribute="Redirection" context="#pop" char=")" />
-        <IncludeRules context="FindCommentsParen" />
-        <IncludeRules context="FindCommands" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- StringSQ consumes anything till ' -->
-      <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ">
-        <DetectChar attribute="String SingleQ" context="#pop" char="'" />
-      </context>
-
-      <!-- StringDQ consumes anything till ", substitutes vars and expressions -->
-      <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ">
-        <DetectChar attribute="String DoubleQ" context="#pop" char="&quot;" />
-        <RegExpr attribute="String Escape" context="#stay" String="\\[`&quot;\\$\n]" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-      <!-- StringEsc eats till ', but escaping many characters -->
-      <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
-        <DetectChar attribute="String SingleQ" context="#pop" char="'" />
-        <RegExpr attribute="String Escape" context="#stay" String="\\[abefnrtv\\']" />
-        <RegExpr attribute="String Escape" context="#stay" String="\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)" />
-      </context>
-
-      <!-- VarBrace is called as soon as ${xxx is encoutered -->
-      <context attribute="Error" lineEndContext="#stay" name="VarBrace">
-        <DetectChar attribute="Variable" context="#pop" char="}" />
-        <DetectChar attribute="Variable" context="Subscript" char="[" />
-        <RegExpr attribute="Variable" context="VarAlt" String="(:?[-=?+]|##?|%%?)" />
-        <RegExpr attribute="Variable" context="VarSubst" String="//?" />
-        <DetectChar attribute="Variable" context="VarSub" char=":" />
-      </context>
-
-      <!-- VarAlt is to handle default/alternate/etc values of variables -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="VarAlt">
-        <DetectChar attribute="Variable" context="#pop#pop" char="}" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-      <!-- VarSubst is to handle substitutions on variables -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="VarSubst">
-        <DetectChar attribute="Variable" context="#pop#pop" char="}" />
-        <DetectChar attribute="Variable" context="VarSubst2" char="/" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-      <context attribute="Normal Text" lineEndContext="#stay" name="VarSubst2">
-        <DetectChar attribute="Variable" context="#pop#pop#pop" char="}" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-      <!-- VarSub is to substrings of variables -->
-      <context attribute="Error" lineEndContext="#stay" name="VarSub">
-        <DetectChar attribute="Variable" context="VarSub2" char=":" />
-        <DetectChar attribute="Variable" context="#pop#pop" char="}" />
-        <RegExpr attribute="Variable" context="#stay" String="&varname;" />
-        <RegExpr attribute="Variable" context="#stay" String="[0-9]+(?=[:}])" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-      <context attribute="Error" lineEndContext="#stay" name="VarSub2">
-        <DetectChar attribute="Variable" context="#pop#pop#pop" char="}" />
-        <RegExpr attribute="Variable" context="#stay" String="&varname;" />
-        <RegExpr attribute="Variable" context="#stay" String="[0-9](?=[:}])" />
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-
-      <!-- SubstFile is called after a <( or >( is encoutered -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="SubstFile">
-        <DetectChar attribute="Redirection" context="#pop" char=")" />
-        <IncludeRules context="FindCommentsParen" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- SubstCommand is called after a $( is encountered -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand">
-        <DetectChar attribute="Variable" context="#pop" char=")" />
-        <IncludeRules context="FindCommentsParen" />
-        <IncludeRules context="FindCommands" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- SubstBackq is called when a backquote is encountered -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="SubstBackq">
-        <DetectChar attribute="Backquote" context="#pop" char="`" />
-        <IncludeRules context="FindCommentsBackq" />
-        <IncludeRules context="FindCommands" />
-        <IncludeRules context="FindStrings" />
-        <IncludeRules context="FindSubstitutions" />
-        <IncludeRules context="FindOthers" />
-      </context>
-
-      <!-- Case is called after the case keyword is encoutered. We handle this because of
-           the lonely closing parentheses that would otherwise disturb the expr matching -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="Case">
-        <RegExpr attribute="Keyword" context="CaseIn" String="\sin\b" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- CaseIn is called when the construct 'case ... in' has been found. -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="CaseIn">
-        <RegExpr attribute="Keyword" context="#pop#pop" String="\besac(?=$|[\s;)])" endRegion="case" />
-        <DetectChar attribute="Keyword" context="CaseExpr" char=")" beginRegion="caseexpr" />
-        <AnyChar attribute="Keyword" context="#stay" String="(|" />
-        <IncludeRules context="FindMost" />
-      </context>
-
-      <!-- CaseExpr eats shell input till ;; -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr">
-        <Detect2Chars attribute="Keyword" context="#pop" char=";" char1=";" endRegion="caseexpr" />
-        <RegExpr attribute="Keyword" context="#pop" String="esac(?=$|[\s;)])" lookAhead="true" firstNonSpace="true" endRegion="caseexpr"/>
-        <IncludeRules context="FindAll" />
-      </context>
-
-      <!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDoc">
-        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*&quot;(&word;)&quot;)" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*'(&word;)')" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*\\(&word;))" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocINQ" String="(&lt;&lt;-\s*(&word;))" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*&quot;(&word;)&quot;)" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*'(&word;)')" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*\\(&word;))" lookAhead="true" />
-        <RegExpr attribute="Redirection" context="HereDocNQ"  String="(&lt;&lt;\s*(&word;))" lookAhead="true" />
-        <StringDetect attribute="Redirection" context="#pop"  String="&lt;&lt;" /><!-- always met -->
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder">
-        <IncludeRules context="FindAll" />
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocQ" dynamic="true">
-        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
-        <RegExpr attribute="Redirection" context="#pop#pop" String="^%2\b" dynamic="true" column="0"/>
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocNQ" dynamic="true">
-        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
-        <RegExpr attribute="Redirection" context="#pop#pop" String="^%2\b" dynamic="true" column="0"/>
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocIQ" dynamic="true">
-        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
-        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2\b" dynamic="true" column="0"/>
-      </context>
-
-      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocINQ" dynamic="true">
-        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
-        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2\b" dynamic="true" column="0"/>
-        <IncludeRules context="FindSubstitutions" />
-      </context>
-
-    </contexts>
-
-    <itemDatas>
-      <itemData name="Normal Text"	defStyleNum="dsNormal" />
-      <itemData name="Comment"		defStyleNum="dsComment" />
-      <itemData name="Keyword" 		defStyleNum="dsKeyword" />
-      <itemData name="Control" 		defStyleNum="dsKeyword" />
-      <itemData name="Builtin" 		defStyleNum="dsKeyword" color="#808" />
-      <itemData name="Command" 		defStyleNum="dsKeyword" color="#c0c" />
-      <itemData name="Redirection" 	defStyleNum="dsKeyword" color="#238" />
-      <itemData name="Escape" 		defStyleNum="dsDataType" />
-      <itemData name="String SingleQ" 	defStyleNum="dsString" />
-      <itemData name="String DoubleQ" 	defStyleNum="dsString" />
-      <itemData name="Backquote" 	defStyleNum="dsKeyword" />
-      <itemData name="String Transl." 	defStyleNum="dsString" />
-      <itemData name="String Escape" 	defStyleNum="dsDataType" />
-      <itemData name="Variable" 	defStyleNum="dsOthers" />
-      <itemData name="Expression" 	defStyleNum="dsOthers" />
-      <itemData name="Function" 	defStyleNum="dsFunction" />
-      <itemData name="Path" 		defStyleNum="dsNormal" />
-      <itemData name="Option" 		defStyleNum="dsNormal" />
-      <itemData name="Error"            defStyleNum="dsError" />
-    </itemDatas>
-  </highlighting>
-  <general>
-    <comments>
-      <comment name="singleLine" start="#"/>
-    </comments>
-    <keywords casesensitive="1" weakDeliminator="^%#[]$._{}:-/" additionalDeliminator="`"/>
-  </general>
-</language>
diff --git a/xml/c.xml b/xml/c.xml
--- a/xml/c.xml
+++ b/xml/c.xml
@@ -83,14 +83,14 @@
         <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"/>
+          <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>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
diff --git a/xml/cs.xml b/xml/cs.xml
--- a/xml/cs.xml
+++ b/xml/cs.xml
@@ -100,14 +100,14 @@
         <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"/>
+          <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>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
diff --git a/xml/css.xml b/xml/css.xml
--- a/xml/css.xml
+++ b/xml/css.xml
@@ -797,6 +797,7 @@
                         
                         <context attribute="Media" lineEndContext="#stay" name="MQEV">
                         <!-- this should be seperate for different features, for now it is all the same -->
+                            <DetectSpaces/>
                             <RegExpr attribute="Value" context="#pop" String="[1-9][0-9.]*\s*/\s*[1-9][0-9.]*" />
                             <RegExpr attribute="Value" context="#pop" String="[0-9.]+(em|ex|ch|rem|vw|vh|vm|px|in|cm|mm|pt|pc|deg|rad|grad|turn|ms|s|Hz|kHz|dpi|dpcm)\b" />
                             <RegExpr attribute="Value" context="#pop" String="[0-9.]+[%]?" />
diff --git a/xml/diff.xml b/xml/diff.xml
--- a/xml/diff.xml
+++ b/xml/diff.xml
@@ -15,7 +15,7 @@
     2008-02-13: 1.11 Eduardo Robles Elvira <edulix AT gmail DOT com>
      Fixed folding.
 -->
-<language name="Diff" version="1.11" kateversion="2.1" section="Other" extensions="*.diff;*patch" mimetype="text/x-patch">
+<language name="Diff" version="1.12" kateversion="2.1" section="Other" extensions="*.diff;*patch" mimetype="text/x-patch">
 
   <highlighting>
 
@@ -25,7 +25,7 @@
         <RegExpr attribute="Header" context="Chunk" String="&chunk;" beginRegion="chunk" column="0"/>
         <RegExpr attribute="Header" context="RChunk" String="\*+$" beginRegion="chunk" column="0"/>
         <RegExpr attribute="File" context="#stay" String="Only in .*:.*$" column="0"/>
-        <RegExpr attribute="File" context="RFile" String="diff.*$" Region="chunk" column="0"/>
+        <RegExpr attribute="File" context="RFile" String="diff.*$" beginRegion="chunk" column="0"/>
         <RegExpr attribute="File" context="#stay" String="====.*$" column="0"/>
         <RegExpr attribute="File" context="File" String="(\*\*\*|\-\-\-).*$" beginRegion="chunk" column="0"/>
         <IncludeRules context="FindDiff"/>
diff --git a/xml/djangotemplate.xml b/xml/djangotemplate.xml
--- a/xml/djangotemplate.xml
+++ b/xml/djangotemplate.xml
@@ -131,15 +131,15 @@
     <StringDetect attribute="CDATA" context="CDATA" String="&lt;![CDATA[" beginRegion="cdata" />
     <RegExpr attribute="Doctype" context="Doctype" String="&lt;!DOCTYPE\s+" beginRegion="doctype" />
     <RegExpr attribute="Processing Instruction" context="PI" String="&lt;\?[\w:-]*" beginRegion="pi" />
-    <RegExpr attribute="Element" context="CSS" String="&lt;style\b" insensitive="TRUE" beginRegion="style" />
-    <RegExpr attribute="Element" context="JS" String="&lt;script\b" insensitive="TRUE" beginRegion="script" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;pre\b" insensitive="TRUE" beginRegion="pre" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;div\b" insensitive="TRUE" beginRegion="div" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;table\b" insensitive="TRUE" beginRegion="table" />
+    <RegExpr attribute="Element" context="CSS" String="&lt;style\b" insensitive="true" beginRegion="style" />
+    <RegExpr attribute="Element" context="JS" String="&lt;script\b" insensitive="true" beginRegion="script" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;pre\b" insensitive="true" beginRegion="pre" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;div\b" insensitive="true" beginRegion="div" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;table\b" insensitive="true" beginRegion="table" />
     <RegExpr attribute="Element" context="El Open" String="&lt;&name;" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/pre\b" insensitive="TRUE" endRegion="pre" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/div\b" insensitive="TRUE" endRegion="div" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/table\b" insensitive="TRUE" endRegion="table" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/pre\b" insensitive="true" endRegion="pre" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/div\b" insensitive="true" endRegion="div" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/table\b" insensitive="true" endRegion="table" />
     <RegExpr attribute="Element" context="El Close" String="&lt;/&name;" />
     <!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context="FindDTDRules" />
     <IncludeRules context="FindEntityRefs" />
@@ -248,7 +248,7 @@
   </context>
 
   <context name="CSS content" attribute="Normal Text" lineEndContext="#stay">
-    <RegExpr attribute="Element" context="El Close 2" String="&lt;/style\b" insensitive="TRUE" endRegion="style" />
+    <RegExpr attribute="Element" context="El Close 2" String="&lt;/style\b" insensitive="true" endRegion="style" />
     <IncludeRules context="FindTemplate" />
     <IncludeRules context="##CSS" includeAttrib="true"/>
   </context>
@@ -262,14 +262,14 @@
   </context>
 
   <context name="JS content" attribute="Normal Text" lineEndContext="#stay">
-    <RegExpr attribute="Element" context="El Close 2" String="&lt;/script\b" insensitive="TRUE" endRegion="script" />
-    <RegExpr attribute="Comment" context="JS comment close" String="//(?=.*&lt;/script\b)" insensitive="TRUE" />
+    <RegExpr attribute="Element" context="El Close 2" String="&lt;/script\b" insensitive="true" endRegion="script" />
+    <RegExpr attribute="Comment" context="JS comment close" String="//(?=.*&lt;/script\b)" insensitive="true" />
     <IncludeRules context="FindTemplate" />
     <IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
   </context>
 
   <context name="JS comment close" attribute="Comment" lineEndContext="#pop">
-    <RegExpr attribute="Element" context="El Close 3" String="&lt;/script\b" insensitive="TRUE" endRegion="script" />
+    <RegExpr attribute="Element" context="El Close 3" String="&lt;/script\b" insensitive="true" endRegion="script" />
     <IncludeRules context="FindTemplate" />
     <IncludeRules context="##Alerts" />
   </context>
diff --git a/xml/dot.xml b/xml/dot.xml
new file mode 100644
--- /dev/null
+++ b/xml/dot.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<!-- Adapted from the VIM highlighter, by Markus Mottl (markus@oefai.at) -->
+<language name="dot" version="1.1" kateversion="2.4" section="Scientific" extensions="*.dot" mimetype="text/x-dot" author="Postula Loïs (lois.postula@live.be)" priority="0">
+
+  <highlighting>
+
+    <list name="keywords">
+      <item> digraph </item>
+      <item> node </item>
+      <item> edge </item>
+      <item> subgraph </item>
+    </list>
+
+    <list name="attributes">
+      <!-- Graph attributes -->
+      <item> center </item>
+      <item> layers </item>
+      <item> margin </item>
+      <item> mclimit </item>
+      <item> name </item>
+      <item> nodesep </item>
+      <item> nslimit </item>
+      <item> ordering </item>
+      <item> page </item>
+      <item> pagedir </item>
+      <item> rank </item>
+      <item> rankdir </item>
+      <item> ranksep </item>
+      <item> ratio </item>
+      <item> rotate </item>
+      <item> size </item>
+      <!-- Node attributes -->
+      <item> distortion </item>
+      <item> fillcolor </item>
+      <item> fontcolor </item>
+      <item> fontname </item>
+      <item> fontsize </item>
+      <item> height </item>
+      <item> layer </item>
+      <item> orientation </item>
+      <item> peripheries </item>
+      <item> regular </item>
+      <item> shape </item>
+      <item> shapefile </item>
+      <item> sides </item>
+      <item> skew </item>
+      <item> width</item>
+      <!-- Edge attributes -->
+      <item> arrowhead </item>
+      <item> arrowsize </item>
+      <item> arrowtail </item>
+      <item> constraint </item>
+      <item> decorateP </item>
+      <item> dir </item>
+      <item> headclip </item>
+      <item> headlabel </item>
+      <item> labelangle </item>
+      <item> labeldistance </item>
+      <item> labelfontcolor </item>
+      <item> labelfontname </item>
+      <item> labelfontsize </item>
+      <item> minlen </item>
+      <item> port_label_distance </item>
+      <item> samehead </item>
+      <item> sametail </item>
+      <item> tailclip </item>
+      <item> taillabel </item>
+      <item> weight </item>
+      <!-- Shared attributes (graphs, nodes, edges) -->
+      <item> color </item>
+      <!-- Shared attributes (graphs and edges) -->
+      <item> bgcolor </item>
+      <item> label </item>
+      <item> URL </item>
+      <!-- Shared attributes (nodes and edges) -->
+      <item> fontcolor </item>
+      <item> fontname </item>
+      <item> fontsize </item>
+      <item> layer </item>
+      <item> style </item>
+    </list>
+
+    <contexts>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
+        <IncludeRules context="DetectAll"/>
+      </context>
+
+      <!-- detector contexts -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="DetectAll">
+        <keyword attribute="Keyword" context="#stay" String="keywords"/>
+        <keyword attribute="Attribute" context="#stay" String="attributes"/>
+        <DetectChar attribute="String" context="String" char="&quot;"/>
+        <AnyChar attribute="Symbol" context="#stay" String=";="/>
+        <Detect2Chars attribute="Symbol" context="#stay" char="-" char1="&gt;"/>
+        <Float attribute="Number" context="#stay"/>
+        <Int attribute="Number" context="#stay"/>
+        <RegExpr attribute="Identifier" context="#stay" String="\b\w+\b"/>
+        <IncludeRules context="DetectComments"/>
+        <DetectChar attribute="Symbol" context="RegionCurly" char="{" beginRegion="curly"/>
+        <DetectChar attribute="Symbol" context="RegionSquare" char="[" beginRegion="square"/>
+        <DetectChar attribute="Symbol" context="RegionParen" char="(" beginRegion="paren"/>
+        <AnyChar attribute="Error" context="#stay" String=")]}"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="DetectComments">
+        <Detect2Chars attribute="Comment" context="CommentSL" char="/" char1="/"/>
+        <Detect2Chars attribute="Comment" context="CommentML" char="/" char1="*" beginRegion="Comment"/>
+      </context>
+
+      <!-- region contexts -->
+      <context attribute="Comment" lineEndContext="#stay" name="RegionCurly">
+        <DetectChar attribute="Symbol" context="#pop" char="}" endRegion="curly"/>
+        <IncludeRules context="DetectAll"/>
+      </context>
+
+      <context attribute="Comment" lineEndContext="#stay" name="RegionSquare">
+        <DetectChar attribute="Symbol" context="#pop" char="]" endRegion="square"/>
+        <IncludeRules context="DetectAll"/>
+      </context>
+
+      <context attribute="Comment" lineEndContext="#stay" name="RegionParen">
+        <DetectChar attribute="Symbol" context="#pop" char=")" endRegion="paren"/>
+        <IncludeRules context="DetectAll"/>
+      </context>
+
+      <!-- other contexts -->
+      <context attribute="String" lineEndContext="#pop" name="String">
+        <Detect2Chars attribute="String Char" context="#stay" char="\\" char1="\\"/>
+        <Detect2Chars attribute="String Char" context="#stay" char="\\" char1="&quot;"/>
+        <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+
+      <context attribute="Comment" lineEndContext="#pop" name="CommentSL">
+        <IncludeRules context="##Alerts"/>
+      </context>
+
+      <context attribute="Comment" lineEndContext="#stay" name="CommentML">
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts"/>
+      </context>
+
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal Text"  defStyleNum="dsNormal"/>
+      <itemData name="Keyword"      defStyleNum="dsKeyword"/>
+      <itemData name="Attribute"    defStyleNum="dsDataType"/>
+      <itemData name="Symbol"       defStyleNum="dsOthers"/>
+      <itemData name="Number"       defStyleNum="dsDecVal"/>
+      <itemData name="Identifier"   defStyleNum="dsFunction"/>
+      <itemData name="String"       defStyleNum="dsString"/>
+      <itemData name="String Char"  defStyleNum="dsChar"/>
+      <itemData name="Comment"      defStyleNum="dsComment"/>
+      <itemData name="Error"        defStyleNum="dsError"/>
+    </itemDatas>
+
+  </highlighting>
+
+  <general>
+
+    <comments>
+      <comment name="singleLine" start="//"/>
+      <comment name="multiLine" start="/*" end="*/"/>
+    </comments>
+
+    <keywords casesensitive="1"/>
+
+  </general>
+
+</language>
diff --git a/xml/doxygen.xml b/xml/doxygen.xml
--- a/xml/doxygen.xml
+++ b/xml/doxygen.xml
@@ -29,7 +29,7 @@
  -->
 
 <language name="Doxygen"
-          version="1.36"
+          version="1.37"
           kateversion="2.5"
           section="Markup"
           extensions="*.dox;*.doxygen"
@@ -149,7 +149,7 @@
       <item> \extends </item>          <item> @extends </item>
       <item> \file </item>             <item> @file </item>
       <item> \htmlinclude </item>      <item> @htmlinclude </item>
-      <item> \idlexcept </item>m>      <item> @idlexcept </item>
+      <item> \idlexcept </item>        <item> @idlexcept </item>
       <item> \if </item>               <item> @if </item>
       <item> \ifnot </item>            <item> @ifnot </item>
       <item> \implements </item>       <item> @implements </item>
diff --git a/xml/email.xml b/xml/email.xml
--- a/xml/email.xml
+++ b/xml/email.xml
@@ -3,10 +3,10 @@
 <!--
   Copyright (C) 2005 Carl A Joslin <carl.joslin@joslin.dyndns.org>
 -->
-<language name="Email" version="1.00" kateversion="2.4" extensions="*.eml" section="Other" mimetype="message/rfc822" casesensitive="0" author="Carl A Joslin (carl.joslin@joslin.dyndns.org)" license="GPL">
+<language name="Email" version="1.01" kateversion="2.4" extensions="*.eml" section="Other" mimetype="message/rfc822" casesensitive="0" author="Carl A Joslin (carl.joslin@joslin.dyndns.org)" license="GPL">
   <highlighting>
     <contexts>      
-      <context name="headder" attribute="Normal Text" lineEndContext="#stay" casesensitive="0">
+      <context name="headder" attribute="Normal Text" lineEndContext="#stay">
         <RegExpr attribute="rfc-main" context="#stay" String="^[Tt]o:.*$"/>
         <RegExpr attribute="rfc-main" context="#stay" String="^[Ff]rom:.*$"/>
         <RegExpr attribute="rfc-main" context="#stay" String="^[Cc][Cc]:.*$"/>
@@ -79,22 +79,22 @@
     </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal"/>
-      <itemData name="rfc" color="darkgreen"/>
+      <itemData name="rfc" color="darkgreen" defStyleNum="dsNormal"/>
       <itemData name="rfc-main" bold="1" color="darkgreen" defStyleNum="dsAlert"/>
-      <itemData name="common" color="gold"/>
-      <itemData name="other" color="red"/>
-      <itemData name="email" color="blue"/>
+      <itemData name="common" color="gold" defStyleNum="dsComment"/>
+      <itemData name="other" color="red" defStyleNum="dsNormal"/>
+      <itemData name="email" color="blue" defStyleNum="dsNormal"/>
       <itemData name="string" defStyleNum="dsString"/>
       
       <itemData name="base64" defStyleNum="dsRegionMarker"/>
       <itemData name="marker" defStyleNum="dsAlert"/>
       
-      <itemData name="indent1" bold="1" color="red"/>
-      <itemData name="indent2" bold="1" color="green"/>
-      <itemData name="indent3" bold="1" color="blue"/>
-      <itemData name="indent4" bold="1" color="cyan"/>
-      <itemData name="indent5" bold="1" color="magenta"/>
-      <itemData name="indent6" bold="1" color="yellow"/>
+      <itemData name="indent1" bold="1" color="red" defStyleNum="dsNormal"/>
+      <itemData name="indent2" bold="1" color="green" defStyleNum="dsNormal"/>
+      <itemData name="indent3" bold="1" color="blue" defStyleNum="dsNormal"/>
+      <itemData name="indent4" bold="1" color="cyan" defStyleNum="dsNormal"/>
+      <itemData name="indent5" bold="1" color="magenta" defStyleNum="dsNormal"/>
+      <itemData name="indent6" bold="1" color="yellow" defStyleNum="dsNormal"/>
       
       
       <itemData name="sign" defStyleNum="dsComment"/>
diff --git a/xml/fasm.xml b/xml/fasm.xml
new file mode 100644
--- /dev/null
+++ b/xml/fasm.xml
@@ -0,0 +1,899 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<!--
+"Intel x86 (FASM)" is based on ver. 1.3 of "Intel x86 (NASM)" by Nicola Gigante and Bogdan Drozdowski
+
+Known issues:
+* Does not include all 64-bit registers and instructions
+* "near" and "far" as in "jmp near MyLabel" is unhandeled.
+* Confuses and,or,not,xor,shl instructions,with operators with same name, e.g. "2 shl 4"
+* May confuse ah,bh,ch,dh with hexadecimal numbers.
+
+Notes:
+* "used" and "defined" are treated opperators and are not highlighted.
+-->
+
+<language name="Intel x86 (FASM)" section="Assembler" version="0.2" kateversion="4.5" extensions="*.asm;*.inc;*.fasm" mimetype="" author="rCX (rCX12@yahoo.com)" license="GPL">
+  <highlighting>
+    <list name="registers">
+      <!-- General purpose registers -->
+      <item>rax</item>
+      <item>eax</item>
+      <item>ax</item>
+      <item>ah</item>
+      <item>al</item>
+      <item>rbx</item>
+      <item>ebx</item>
+      <item>bx</item>
+      <item>bh</item>
+      <item>bl</item>
+      <item>rcx</item>
+      <item>ecx</item>
+      <item>cx</item>
+      <item>ch</item>
+      <item>cl</item>
+      <item>rdx</item>
+      <item>edx</item>
+      <item>dx</item>
+      <item>dh</item>
+      <item>dl</item>
+      <item>rbp</item>
+      <item>ebp</item>
+      <item>bp</item>
+      <item>rsi</item>
+      <item>esi</item>
+      <item>si</item>
+      <item>rdi</item>
+      <item>edi</item>
+      <item>di</item>
+      <item>rsp</item>
+      <item>esp</item>
+      <item>sp</item>
+      <item>r8</item>
+      <item>r9</item>
+      <item>r10</item>
+      <item>r11</item>
+      <item>r12</item>
+      <item>r13</item>
+      <item>r14</item>
+      <item>r15</item>
+      <!-- Segmentation registers -->
+      <item>cs</item>
+      <item>ds</item>
+      <item>es</item>
+      <item>fs</item>
+      <item>gs</item>
+      <item>ss</item>
+      <!-- Control registers -->
+      <item>cr0</item>
+      <!--<item>cr1</item>-->
+      <item>cr2</item>
+      <item>cr3</item>
+      <item>cr4</item>
+      <!-- Debug registers -->
+      <item>dr0</item>
+      <item>dr1</item>
+      <item>dr2</item>
+      <item>dr3</item>
+      <item>dr6</item>
+      <item>dr7</item>
+      <!-- x87 FPU Registers -->
+      <item>st</item>
+      <!-- MMX registers -->
+      <item>mm0</item>
+      <item>mm1</item>
+      <item>mm2</item>
+      <item>mm3</item>
+      <item>mm4</item>
+      <item>mm5</item>
+      <item>mm6</item>
+      <item>mm7</item>
+      <!-- XMM registers -->
+      <item>xmm0</item>
+      <item>xmm1</item>
+      <item>xmm2</item>
+      <item>xmm3</item>
+      <item>xmm4</item>
+      <item>xmm5</item>
+      <item>xmm6</item>
+      <item>xmm7</item>
+    </list>
+    <list name="instructions">
+      <item>aaa</item>
+      <item>aad</item>
+      <item>aam</item>
+      <item>aas</item>
+      <item>adc</item>
+      <item>add</item>
+      <item>addpd</item>
+      <item>addps</item>
+      <item>addsd</item>
+      <item>addss</item>
+      <item>addsubpd</item>
+      <item>addsubps</item>
+      <item>and</item>
+      <item>andnpd</item>
+      <item>andnps</item>
+      <item>andpd</item>
+      <item>andps</item>
+      <item>arpl</item>
+      <item>bound</item>
+      <item>bsf</item>
+      <item>bsr</item>
+      <item>bswap</item>
+      <item>bt</item>
+      <item>btc</item>
+      <item>btr</item>
+      <item>bts</item>
+      <item>call</item>
+      <item>cbw</item>
+      <item>cwde</item>
+      <item>cwd</item>
+      <item>cdq</item>
+      <item>cdqe</item>
+      <item>cqo</item>
+      <item>clc</item>
+      <item>cld</item>
+      <item>clgi</item>
+      <item>cli</item>
+      <item>clts</item>
+      <item>clflush</item>
+      <item>cmc</item>
+      <item>cmova</item>
+      <item>cmovae</item>
+      <item>cmovb</item>
+      <item>cmovbe</item>
+      <item>cmovc</item>
+      <item>cmove</item>
+      <item>cmovg</item>
+      <item>cmovge</item>
+      <item>cmovl</item>
+      <item>cmovle</item>
+      <item>cmovna</item>
+      <item>cmovnae</item>
+      <item>cmovnb</item>
+      <item>cmovnbe</item>
+      <item>cmovnc</item>
+      <item>cmovne</item>
+      <item>cmovng</item>
+      <item>cmovnge</item>
+      <item>cmovnl</item>
+      <item>cmovnle</item>
+      <item>cmovno</item>
+      <item>cmovnp</item>
+      <item>cmovns</item>
+      <item>cmovnz</item>
+      <item>cmovo</item>
+      <item>cmovp</item>
+      <item>cmovpe</item>
+      <item>cmovpo</item>
+      <item>cmovs</item>
+      <item>cmovz</item>
+      <item>cmp</item>
+      <item>cmpeqpd</item>
+      <item>cmpeqps</item>
+      <item>cmpeqsd</item>
+      <item>cmpeqss</item>
+      <item>cmplepd</item>
+      <item>cmpleps</item>
+      <item>cmplesd</item>
+      <item>cmpless</item>
+      <item>cmpltpd</item>
+      <item>cmpltps</item>
+      <item>cmpltsd</item>
+      <item>cmpltss</item>
+      <item>cmpneqpd</item>
+      <item>cmpneqps</item>
+      <item>cmpneqsd</item>
+      <item>cmpneqss</item>
+      <item>cmpnlepd</item>
+      <item>cmpnleps</item>
+      <item>cmpnlesd</item>
+      <item>cmpnless</item>
+      <item>cmpnltpd</item>
+      <item>cmpnltps</item>
+      <item>cmpnltsd</item>
+      <item>cmpnltss</item>
+      <item>cmpordpd</item>
+      <item>cmpordps</item>
+      <item>cmpordsd</item>
+      <item>cmpordss</item>
+      <item>cmppd</item>
+      <item>cmpps</item>
+      <item>cmps</item>
+      <item>cmpsb</item>
+      <item>cmpsd</item>
+      <item>cmpss</item>
+      <item>cmpsw</item>
+      <item>cmpunordpd</item>
+      <item>cmpunordps</item>
+      <item>cmpunordsd</item>
+      <item>cmpunordss</item>
+      <item>cmpxchg</item>
+      <item>cmpxchg486</item>
+      <item>cmpxchg8b</item>
+      <item>cmpxchg16b</item>
+      <item>comisd</item>
+      <item>comiss</item>
+      <item>cpuid</item>
+      <item>cvtdq2pd</item>
+      <item>cvtdq2ps</item>
+      <item>cvtpd2dq</item>
+      <item>cvtpd2pi</item>
+      <item>cvtpd2ps</item>
+      <item>cvtpi2pd</item>
+      <item>cvtpi2ps</item>
+      <item>cvtps2dq</item>
+      <item>cvtps2pd</item>
+      <item>cvtps2pi</item>
+      <item>cvtsd2si</item>
+      <item>cvtsd2ss</item>
+      <item>cvtsi2sd</item>
+      <item>cvtsi2ss</item>
+      <item>cvtss2sd</item>
+      <item>cvtss2si</item>
+      <item>cvttpd2dq</item>
+      <item>cvttpd2pi</item>
+      <item>cvttps2dq</item>
+      <item>cvttps2pi</item>
+      <item>cvttsd2si</item>
+      <item>cvttss2si</item>
+      <item>daa</item>
+      <item>das</item>
+      <item>dec</item>
+      <item>div</item>
+      <item>divpd</item>
+      <item>divps</item>
+      <item>divsd</item>
+      <item>divss</item>
+      <item>emms</item>
+      <item>enter</item>
+      <item>f2xm1</item>
+      <item>fabs</item>
+      <item>fadd</item>
+      <item>faddp</item>
+      <item>fbld</item>
+      <item>fbstp</item>
+      <item>fchs</item>
+      <item>fclex</item>
+      <item>fnclex</item>
+      <item>fcmovb</item>
+      <item>fcmovbe</item>
+      <item>fcmove</item>
+      <item>fcmovnb</item>
+      <item>fcmovnbe</item>
+      <item>fcmovne</item>
+      <item>fcmovnu</item>
+      <item>fcmovu</item>
+      <item>fcom</item>
+      <item>fcomp</item>
+      <item>fcompp</item>
+      <item>fcomi</item>
+      <item>fcomip</item>
+      <item>fcos</item>
+      <item>fdecstp</item>
+      <item>fdisi</item>
+      <item>feni</item>
+      <item>fdiv</item>
+      <item>fdivr</item>
+      <item>fdivp</item>
+      <item>fdivrp</item>
+      <item>femms</item>
+      <item>ffree</item>
+      <item>ffreep</item>
+      <item>fiadd</item>
+      <item>ficom</item>
+      <item>ficomp</item>
+      <item>fidiv</item>
+      <item>fidivr</item>
+      <item>fild</item>
+      <item>fimul</item>
+      <item>fincstp</item>
+      <item>finit</item>
+      <item>fist</item>
+      <item>fistp</item>
+      <item>fisttp</item>
+      <item>fisub</item>
+      <item>fisubr</item>
+      <item>fld</item>
+      <item>fld1</item>
+      <item>fldl2e</item>
+      <item>fldl2t</item>
+      <item>fldlg2</item>
+      <item>fldln2</item>
+      <item>fldcw</item>
+      <item>fldenv</item>
+      <item>fldpi</item>
+      <item>fldz</item>
+      <item>fmul</item>
+      <item>fmulp</item>
+      <item>fndisi</item>
+      <item>fneni</item>
+      <item>fninit</item>
+      <item>fnop</item>
+      <item>fnsave</item>
+      <item>fnstcw</item>
+      <item>fnstenv</item>
+      <item>fnstsw</item>
+      <item>fnwait</item>
+      <item>fpatan</item>
+      <item>fptan</item>
+      <item>fprem</item>
+      <item>fprem1</item>
+      <item>frndint</item>
+      <item>frstor</item>
+      <item>fsave</item>
+      <item>fscale</item>
+      <item>fsetpm</item>
+      <item>fsin</item>
+      <item>fsincos</item>
+      <item>fsqrt</item>
+      <item>fst</item>
+      <item>fstp</item>
+      <item>fstcw</item>
+      <item>fstenv</item>
+      <item>fstsw</item>
+      <item>fsub</item>
+      <item>fsubr</item>
+      <item>fsubp</item>
+      <item>fsubrp</item>
+      <item>ftst</item>
+      <item>fucom</item>
+      <item>fucomp</item>
+      <item>fucompp</item>
+      <item>fucomi</item>
+      <item>fucomip</item>
+      <item>fwait</item>
+      <item>fxam</item>
+      <item>fxch</item>
+      <item>fxrstor</item>
+      <item>fxsave</item>
+      <item>fxtract</item>
+      <item>fyl2x</item>
+      <item>fyl2xp1</item>
+      <item>haddpd</item>
+      <item>haddps</item>
+      <item>hlt</item>
+      <item>hsubpd</item>
+      <item>hsubps</item>
+      <item>ibts</item>
+      <item>idiv</item>
+      <item>imul</item>
+      <item>in</item>
+      <item>inc</item>
+      <item>ins</item>
+      <item>insb</item>
+      <item>insd</item>
+      <item>insw</item>
+      <item>int</item>
+      <item>int1</item>
+      <item>int3</item>
+      <item>into</item>
+      <item>invd</item>
+      <item>invlpg</item>
+      <item>invlpga</item>
+      <item>iret</item>
+      <item>iretd</item>
+      <item>iretq</item>
+      <item>iretw</item>
+      <item>ja</item>
+      <item>jae</item>
+      <item>jb</item>
+      <item>jbe</item>
+      <item>jc</item>
+      <item>je</item>
+      <item>jg</item>
+      <item>jge</item>
+      <item>jl</item>
+      <item>jle</item>
+      <item>jna</item>
+      <item>jnae</item>
+      <item>jnb</item>
+      <item>jnbe</item>
+      <item>jnc</item>
+      <item>jne</item>
+      <item>jng</item>
+      <item>jnge</item>
+      <item>jnl</item>
+      <item>jnle</item>
+      <item>jno</item>
+      <item>jnp</item>
+      <item>jns</item>
+      <item>jnz</item>
+      <item>jo</item>
+      <item>jp</item>
+      <item>jpe</item>
+      <item>jpo</item>
+      <item>js</item>
+      <item>jz</item>
+      <item>jcxz</item>
+      <item>jecxz</item>
+      <item>jrcxz</item>
+      <item>jmp</item>
+      <item>lahf</item>
+      <item>lar</item>
+      <item>lddqu</item>
+      <item>ldmxcsr</item>
+      <item>lds</item>
+      <item>les</item>
+      <item>lea</item>
+      <item>leave</item>
+      <item>lfence</item>
+      <item>lfs</item>
+      <item>lgdt</item>
+      <item>lgs</item>
+      <item>lidt</item>
+      <item>lldt</item>
+      <item>lmsw</item>
+      <item>loadall</item>
+      <item>loadall286</item>
+      <item>lods</item>
+      <item>lodsb</item>
+      <item>lodsd</item>
+      <item>lodsq</item>
+      <item>lodsw</item>
+      <item>loop</item>
+      <item>loope</item>
+      <item>loopne</item>
+      <item>loopnz</item>
+      <item>loopz</item>
+      <item>lsl</item>
+      <item>lss</item>
+      <item>ltr</item>
+      <item>maskmovdqu</item>
+      <item>maskmovq</item>
+      <item>maxpd</item>
+      <item>maxps</item>
+      <item>maxsd</item>
+      <item>maxss</item>
+      <item>mfence</item>
+      <item>minpd</item>
+      <item>minps</item>
+      <item>minsd</item>
+      <item>minss</item>
+      <item>monitor</item>
+      <item>mov</item>
+      <item>movapd</item>
+      <item>movaps</item>
+      <item>movd</item>
+      <item>movddup</item>
+      <item>movdq2q</item>
+      <item>movdqa</item>
+      <item>movdqu</item>
+      <item>movhlps</item>
+      <item>movhpd</item>
+      <item>movhps</item>
+      <item>movlhps</item>
+      <item>movlpd</item>
+      <item>movlps</item>
+      <item>movmskpd</item>
+      <item>movmskps</item>
+      <item>movntdq</item>
+      <item>movnti</item>
+      <item>movntpd</item>
+      <item>movntps</item>
+      <item>movntq</item>
+      <item>movq</item>
+      <item>movq2dq</item>
+      <item>movs</item>
+      <item>movsb</item>
+      <item>movsd</item>
+      <item>movshdup</item>
+      <item>movsldup</item>
+      <item>movsq</item>
+      <item>movss</item>
+      <item>movsx</item>
+      <item>movsxd</item>
+      <item>movsw</item>
+      <item>movupd</item>
+      <item>movups</item>
+      <item>movzx</item>
+      <item>mul</item>
+      <item>mulpd</item>
+      <item>mulps</item>
+      <item>mulsd</item>
+      <item>mulss</item>
+      <item>mwait</item>
+      <item>neg</item>
+      <item>nop</item>
+      <item>not</item>
+      <item>or</item>
+      <item>orpd</item>
+      <item>orps</item>
+      <item>out</item>
+      <item>outs</item>
+      <item>outsb</item>
+      <item>outsw</item>
+      <item>outsd</item>
+      <item>packssdw</item>
+      <item>packsswb</item>
+      <item>packuswb</item>
+      <item>paddb</item>
+      <item>paddd</item>
+      <item>paddq</item>
+      <item>paddsb</item>
+      <item>paddsw</item>
+      <item>paddusb</item>
+      <item>paddusw</item>
+      <item>paddw</item>
+      <item>pand</item>
+      <item>pandn</item>
+      <item>pause</item>
+      <item>pavgb</item>
+      <item>pavgusb</item>
+      <item>pavgw</item>
+      <item>pcmpeqb</item>
+      <item>pcmpeqw</item>
+      <item>pcmpeqd</item>
+      <item>pcmpgtb</item>
+      <item>pcmpgtw</item>
+      <item>pcmpgtd</item>
+      <item>pdistib</item>
+      <item>pextrw</item>
+      <item>pf2id</item>
+      <item>pf2iw</item>
+      <item>pfacc</item>
+      <item>pfadd</item>
+      <item>pfcmpeq</item>
+      <item>pfcmpge</item>
+      <item>pfcmpgt</item>
+      <item>pfmax</item>
+      <item>pfmin</item>
+      <item>pfmul</item>
+      <item>pfnacc</item>
+      <item>pfpnacc</item>
+      <item>pfrcp</item>
+      <item>pfrcpit1</item>
+      <item>pfrcpit2</item>
+      <item>pfrsqit1</item>
+      <item>pfrsqrt</item>
+      <item>pfsub</item>
+      <item>pfsubr</item>
+      <item>pi2fd</item>
+      <item>pi2fw</item>
+      <item>pinsrw</item>
+      <item>pmachriw</item>
+      <item>pmaddwd</item>
+      <item>pmagw</item>
+      <item>pmaxsw</item>
+      <item>pmaxub</item>
+      <item>pminsw</item>
+      <item>pminub</item>
+      <item>pmovmskb</item>
+      <item>pmulhrw</item>
+      <item>pmulhuw</item>
+      <item>pmulhw</item>
+      <item>pmullw</item>
+      <item>pmuludq</item>
+      <item>pmvgezb</item>
+      <item>pmvlzb</item>
+      <item>pmvnzb</item>
+      <item>pmvzb</item>
+      <item>pop</item>
+      <item>popa</item>
+      <item>popaw</item>
+      <item>popad</item>
+      <item>popf</item>
+      <item>popfw</item>
+      <item>popfd</item>
+      <item>popfq</item>
+      <item>por</item>
+      <item>prefetch</item>
+      <item>prefetchnta</item>
+      <item>prefetcht0</item>
+      <item>prefetcht1</item>
+      <item>prefetcht2</item>
+      <item>prefetchw</item>
+      <item>psadbw</item>
+      <item>pshufd</item>
+      <item>pshufhw</item>
+      <item>pshuflw</item>
+      <item>pshufw</item>
+      <item>pslld</item>
+      <item>pslldq</item>
+      <item>psllq</item>
+      <item>psllw</item>
+      <item>psrad</item>
+      <item>psraw</item>
+      <item>psrld</item>
+      <item>psrldq</item>
+      <item>psrlq</item>
+      <item>psrlw</item>
+      <item>psubb</item>
+      <item>psubd</item>
+      <item>psubq</item>
+      <item>psubsb</item>
+      <item>psubsiw</item>
+      <item>psubsw</item>
+      <item>psubusb</item>
+      <item>psubusw</item>
+      <item>psubw</item>
+      <item>pswapd</item>
+      <item>punpckhbw</item>
+      <item>punpckhdq</item>
+      <item>punpckhqdq</item>
+      <item>punpckhwd</item>
+      <item>punpcklbw</item>
+      <item>punpckldq</item>
+      <item>punpcklqdq</item>
+      <item>punpcklwd</item>
+      <item>push</item>
+      <item>pusha</item>
+      <item>pushad</item>
+      <item>pushaw</item>
+      <item>pushf</item>
+      <item>pushfd</item>
+      <item>pushfq</item>
+      <item>pushfw</item>
+      <item>pxor</item>
+      <item>rcl</item>
+      <item>rcr</item>
+      <item>rcpps</item>
+      <item>rcpss</item>
+      <item>rdmsr</item>
+      <item>rdpmc</item>
+      <item>rdshr</item>
+      <item>rdtsc</item>
+      <item>rdtscp</item>
+      <item>ret</item>
+      <item>retf</item>
+      <item>retn</item>
+      <item>rol</item>
+      <item>ror</item>
+      <item>rsdc</item>
+      <item>rsldt</item>
+      <item>rsm</item>
+      <item>rsqrtps</item>
+      <item>rsqrtss</item>
+      <item>rsts</item>
+      <item>sahf</item>
+      <item>sal</item>
+      <item>sar</item>
+      <item>salc</item>
+      <item>sbb</item>
+      <item>scas</item>
+      <item>scasb</item>
+      <item>scasd</item>
+      <item>scasq</item>
+      <item>scasw</item>
+      <item>seta</item>
+      <item>setae</item>
+      <item>setb</item>
+      <item>setbe</item>
+      <item>setc</item>
+      <item>sete</item>
+      <item>setg</item>
+      <item>setge</item>
+      <item>setl</item>
+      <item>setle</item>
+      <item>setna</item>
+      <item>setnae</item>
+      <item>setnb</item>
+      <item>setnbe</item>
+      <item>setnc</item>
+      <item>setne</item>
+      <item>setng</item>
+      <item>setnge</item>
+      <item>setnl</item>
+      <item>setnle</item>
+      <item>setno</item>
+      <item>setnp</item>
+      <item>setns</item>
+      <item>setnz</item>
+      <item>seto</item>
+      <item>setp</item>
+      <item>setpe</item>
+      <item>setpo</item>
+      <item>sets</item>
+      <item>setz</item>
+      <item>sfence</item>
+      <item>sgdt</item>
+      <item>shl</item>
+      <item>shld</item>
+      <item>shr</item>
+      <item>shrd</item>
+      <item>shufpd</item>
+      <item>shufps</item>
+      <item>sidt</item>
+      <item>skinit</item>
+      <item>sldt</item>
+      <item>smi</item>
+      <item>smint</item>
+      <item>smintold</item>
+      <item>smsw</item>
+      <item>sqrtpd</item>
+      <item>sqrtps</item>
+      <item>sqrtsd</item>
+      <item>sqrtss</item>
+      <item>stc</item>
+      <item>std</item>
+      <item>stgi</item>
+      <item>sti</item>
+      <item>stmxcsr</item>
+      <item>stos</item>
+      <item>stosb</item>
+      <item>stosd</item>
+      <item>stosq</item>
+      <item>stosw</item>
+      <item>str</item>
+      <item>sub</item>
+      <item>subpd</item>
+      <item>subps</item>
+      <item>subsd</item>
+      <item>subss</item>
+      <item>svdc</item>
+      <item>svldt</item>
+      <item>svts</item>
+      <item>swapgs</item>
+      <item>syscall</item>
+      <item>sysenter</item>
+      <item>sysexit</item>
+      <item>sysret</item>
+      <item>test</item>
+      <item>ucomisd</item>
+      <item>ucomiss</item>
+      <item>ud0</item>
+      <item>ud1</item>
+      <item>ud2</item>
+      <item>umov</item>
+      <item>unpckhpd</item>
+      <item>unpckhps</item>
+      <item>unpcklpd</item>
+      <item>unpcklps</item>
+      <item>verr</item>
+      <item>verw</item>
+      <item>vmload</item>
+      <item>vmmcall</item>
+      <item>vmrun</item>
+      <item>vmsave</item>
+      <item>wait</item>
+      <item>wbinvd</item>
+      <item>wrmsr</item>
+      <item>wrshr</item>
+      <item>xadd</item>
+      <item>xbts</item>
+      <item>xchg</item>
+      <item>xlat</item>
+      <item>xlatb</item>
+      <item>xor</item>
+      <item>xorpd</item>
+      <item>xorps</item>
+    </list>
+
+    <list name="Data">
+      <!-- Initialized data (1.2.2)-->
+      <item>db</item>
+      <item>dw</item>
+      <item>du</item>
+      <item>dd</item>
+      <item>dp</item>
+      <item>df</item>
+      <item>dq</item>
+      <item>dt</item>
+      <!-- Uninitialized data (1.2.2)-->
+      <item>rb</item>
+      <item>rw</item>
+      <item>rd</item>
+      <item>rp</item>
+      <item>rf</item>
+      <item>rq</item>
+      <item>rt</item>
+      <!-- binary file include (1.2.2)-->
+      <item>file</item>
+      <!-- operand size from (1.2.1)-->
+      <item>byte</item>
+      <item>word</item>
+      <item>dword</item>
+      <item>pword</item>
+      <item>qword</item>
+      <item>tbyte</item>
+      <item>tword</item>
+      <item>dqword</item>
+      <item>ptr</item>
+    </list>
+
+    <list name="Preprocessor Keywords"> <!-- Contains keywords for macros, structures, etc... -->
+      <item>append</item>
+      <item>at</item>   <!-- As in "virtual at"-->
+      <item>break</item>
+      <item>common</item>
+      <item>display</item>
+      <item>else</item>
+      <item>end</item> <!-- As in "end if"-->
+      <item>equ</item>
+      <item>fix</item>
+      <item>foward</item>
+      <item>if</item>
+      <item>irp</item>
+      <item>irps</item>
+      <item>label</item>
+      <item>local</item>
+      <item>match</item>
+      <item>macro</item>
+      <item>purge</item>
+      <item>repeat</item>
+      <item>rept</item>
+      <item>reverse</item>
+      <item>restore</item>
+      <item>struc</item>
+      <item>times</item>
+      <item>while</item>
+      <item>virtual</item>
+    </list>
+
+    <list name="Instruction-like Keywords"> <!-- Contains instruction-like keywords -->
+      <item>align</item>
+      <item>entry</item>
+      <item>extrn</item>
+      <item>format</item>
+      <item>include</item>
+      <item>invoke</item>
+      <item>data</item>
+      <item>load</item>
+      <item>from</item>
+      <item>heap</item>
+      <item>org</item>
+      <item>proc</item>
+      <item>public</item>
+      <item>section</item>
+      <item>segment</item>
+      <item>stack</item>
+      <item>store</item>
+      <item>use16</item>
+      <item>use32</item>
+      <item>use64</item>
+    </list>
+
+    <contexts>
+      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
+        <keyword attribute="Registers" context="#stay" String="registers"/>
+        <keyword attribute="Data" context="#stay" String="Data"/>
+        <keyword attribute="Instructions" context="#stay" String="instructions"/>
+        <keyword attribute="Instructions" context="#stay" String="Instruction-like Keywords"/>
+        <keyword attribute="Preprocessor" context="#stay" String="Preprocessor Keywords"/>
+        <DetectChar attribute="Comment" context="Comment" char=";"/>
+        <AnyChar attribute="String" context="String" String="&quot;'"/>
+        <RegExpr attribute="Label" context="#stay" String="^\s*[A-Za-z0-9@_.$?]+:"/>
+        <!-- Conditional instructions -->
+        <RegExpr attribute="Instructions" context="#stay" String="(cmov|fcmov|j|loop|set)(a|ae|b|be|c|e|g|ge|l|le|na|nae|nb|nbe|nc|ne|ng|nge|nl|nle|no|np|ns|nz|o|p|pe|po|s|z)"/>
+        <!-- hexadecimal numbers -->
+        <RegExpr attribute="BaseN" context="#stay" insensitive="true" String="(^|[ \t,]+)((\$|0x){1}[0-9]+[a-f0-9]*|[a-f0-9]+h)([ \t,]+|$)"/>
+        <!-- octal and binary numbers -->
+        <RegExpr attribute="BaseN" context="#stay" insensitive="true" String="(^|[ \t,]+)([0-7]+(q|o)|[01]+b)([ \t,]+|$)"/>
+        <DetectChar attribute="Number" context="#stay" char="$"/>
+        <HlCOct attribute="BaseN" context="#stay"/>
+        <HlCHex attribute="BaseN" context="#stay"/>
+        <Float attribute="Float" context="#stay"/>
+        <Int attribute="Number" context="#stay"/>
+        <HlCChar attribute="Char" context="#stay"/>
+      </context>
+      <context name="Comment" attribute="Comment" lineEndContext="#pop"/>
+      <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop"/>
+      <context name="String" attribute="String" lineEndContext="#pop">
+        <AnyChar attribute="String" context="#pop" String="&quot;'"/>
+      </context>
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Registers" defStyleNum="dsKeyword"/>
+      <itemData name="Instructions" defStyleNum="dsKeyword"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="Label" defStyleNum="dsFunction"/>
+      <itemData name="Data" defStyleNum="dsDataType"/>
+      <itemData name="BaseN" defStyleNum="dsBaseN"/>
+      <itemData name="Float" defStyleNum="dsFloat"/>
+      <itemData name="Number" defStyleNum="dsDecVal"/>
+      <itemData name="Char" defStyleNum="dsChar"/>
+      <itemData name="String" defStyleNum="dsString"/>
+      <itemData name="Preprocessor" defStyleNum="dsOthers"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <keywords casesensitive="0"/>
+    <comments>
+      <comment name="singleLine" start=";"/>
+    </comments>
+  </general>
+</language>
+<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->
diff --git a/xml/fortran.xml b/xml/fortran.xml
--- a/xml/fortran.xml
+++ b/xml/fortran.xml
@@ -395,7 +395,7 @@
 
 <!-- This context highlights operators and the logical values .true. .false. -->
       <context attribute="Normal Text" lineEndContext="#stay" name="find_op_and_log">
-        <RegExpr attribute="Logical" context="#stay" String="\.(true|false)\." insensitive="TRUE"/>
+        <RegExpr attribute="Logical" context="#stay" String="\.(true|false)\." insensitive="true"/>
         <RegExpr attribute="Operator" context="#stay" String="\.[A-Za-z]+\."/>
         <RegExpr attribute="Operator" context="#stay" String="(==|/=|&lt;|&lt;=|&gt;|&gt;=)"/>
       </context>
@@ -426,11 +426,11 @@
 
 <!-- The following two contexts match input/output statements -->
       <context attribute="Normal Text" lineEndContext="#stay" name="find_io_stmnts">
-        <RegExpr attribute="IO Function" context="find_io_paren" String="\b(read|write|backspace|rewind|end\s*file|close)\s*[(]" insensitive="TRUE"/>
-        <RegExpr attribute="IO Function" context="find_io_paren" String="\bopen\s*[(]" insensitive="TRUE"/>
-        <RegExpr attribute="IO Function" context="find_io_paren" String="\binquire\s*[(]" insensitive="TRUE"/>
-        <RegExpr attribute="IO Function" context="format_stmnt" String="\bformat\s*[(]" insensitive="TRUE"/>
-        <RegExpr attribute="IO Function" context="#stay" String="\bend\s*file\b" insensitive="TRUE"/>
+        <RegExpr attribute="IO Function" context="find_io_paren" String="\b(read|write|backspace|rewind|end\s*file|close)\s*[(]" insensitive="true"/>
+        <RegExpr attribute="IO Function" context="find_io_paren" String="\bopen\s*[(]" insensitive="true"/>
+        <RegExpr attribute="IO Function" context="find_io_paren" String="\binquire\s*[(]" insensitive="true"/>
+        <RegExpr attribute="IO Function" context="format_stmnt" String="\bformat\s*[(]" insensitive="true"/>
+        <RegExpr attribute="IO Function" context="#stay" String="\bend\s*file\b" insensitive="true"/>
         <keyword attribute="IO Function" context="#stay" String="io_functions"/>
       </context>
 <!-- This context matches parenthesis for the read, write, ... statements -->
@@ -450,7 +450,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="format_stmnt">
         <DetectChar attribute="IO Function" context="format_stmnt" char="("/>
         <DetectChar attribute="IO Function" context="#pop" char=")"/>
-        <RegExpr attribute="IO Function" context="#stay" String="[0-9]*/" insensitive="TRUE"/>
+        <RegExpr attribute="IO Function" context="#stay" String="[0-9]*/" insensitive="true"/>
         <AnyChar attribute="IO Function" context="#stay" String=":"/>
         <IncludeRules context="find_strings" />
         <IncludeRules context="find_symbols" />
@@ -458,39 +458,39 @@
 
 <!-- The following context matches the begin of program units -->
       <context attribute="Normal Text" lineEndContext="#stay" name="find_begin_stmnts">
-        <RegExpr attribute="Keyword" context="#stay" String="\bmodule\s+procedure\b" insensitive="TRUE"/>
-        <RegExpr attribute="Keyword" context="#stay" String="\b(subroutine|function|block\s*data)\b" insensitive="TRUE" beginRegion="Routine"/>
-        <RegExpr attribute="Keyword" context="#stay" String="\b(program|module|block\s*data)\b" insensitive="TRUE" beginRegion="Routine"/>
-        <RegExpr attribute="Keyword" context="#stay" String="\b(then|do)\b" insensitive="TRUE" beginRegion="Block"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bmodule\s+procedure\b" insensitive="true"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\b(subroutine|function|block\s*data)\b" insensitive="true" beginRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\b(program|module|block\s*data)\b" insensitive="true" beginRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\b(then|do)\b" insensitive="true" beginRegion="Block"/>
       </context>
 <!-- The following context matches the end of program units -->
       <context attribute="Normal Text" lineEndContext="#stay" name="find_end_stmnts">
-        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(subroutine|function|block\s*data)\b" insensitive="TRUE" endRegion="Routine"/>
-        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(program|module)\b" insensitive="TRUE" endRegion="Routine"/>
-        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(do|if)\b" insensitive="TRUE" endRegion="Block"/>
-        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(select|where|forall|interface)\b" insensitive="TRUE"/>
-        <RegExpr attribute="Keyword" context="#stay" String="\belse\s*if\b" insensitive="TRUE" endRegion="Block"/>
-        <RegExpr attribute="Keyword" context="#stay" String="\bend\b" insensitive="TRUE" endRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(subroutine|function|block\s*data)\b" insensitive="true" endRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(program|module)\b" insensitive="true" endRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(do|if)\b" insensitive="true" endRegion="Block"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(select|where|forall|interface)\b" insensitive="true"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\belse\s*if\b" insensitive="true" endRegion="Block"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\b" insensitive="true" endRegion="Routine"/>
       </context>
 <!-- The following context matches the mid of program units -->
       <context attribute="Normal Text" lineEndContext="#stay" name="find_mid_stmnts">
-        <RegExpr attribute="Keyword" context="#stay" String="\belse\b" insensitive="TRUE" endRegion="Block" beginRegion="Block"/>
-        <RegExpr attribute="Keyword" context="#stay" String="\bcontains\b" insensitive="TRUE" endRegion="Routine" beginRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\belse\b" insensitive="true" endRegion="Block" beginRegion="Block"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bcontains\b" insensitive="true" endRegion="Routine" beginRegion="Routine"/>
       </context>
 
 <!-- The following two contexts match declarations -->
       <context attribute="Normal Text" lineEndContext="#stay" name="find_decls">
-        <RegExpr attribute="Data Type" context="#stay" String="\binteger[\*]\d{1,2}" insensitive="TRUE"/>
-        <RegExpr attribute="Data Type" context="#stay" String="\breal[\*]\d{1,2}" insensitive="TRUE"/>
-        <RegExpr attribute="Data Type" context="#stay" String="\bcomplex[\*]\d{1,2}" insensitive="TRUE"/>
-        <RegExpr attribute="Data Type" context="#stay" String="\bend\s*type\b" insensitive="TRUE"/>
+        <RegExpr attribute="Data Type" context="#stay" String="\binteger[\*]\d{1,2}" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="\breal[\*]\d{1,2}" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="\bcomplex[\*]\d{1,2}" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="\bend\s*type\b" insensitive="true"/>
         <keyword attribute="Data Type" context="#stay" String="types"/>
-        <RegExpr attribute="Data Type" context="#stay" String="^\s*data\b" insensitive="TRUE"/>
-        <RegExpr attribute="Data Type" context="find_paren" String="^\s*real\s*[(]" insensitive="TRUE"/>
-        <RegExpr attribute="Data Type" context="#stay" String="^\s*real(?![\w\*])" insensitive="TRUE"/>
-        <RegExpr attribute="Data Type" context="#stay" String="\bcharacter[*][0-9]+\b" insensitive="TRUE"/>
-        <RegExpr attribute="Data Type" context="find_paren" String="\b(type|integer|complex|character|logical|intent|dimension)\b\s*[(]" insensitive="TRUE"/>
-        <RegExpr attribute="Data Type" context="#stay" String="\b(type|integer|complex|character|logical|intent|dimension)\b" insensitive="TRUE"/>
+        <RegExpr attribute="Data Type" context="#stay" String="^\s*data\b" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="find_paren" String="^\s*real\s*[(]" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="^\s*real(?![\w\*])" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="\bcharacter[*][0-9]+\b" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="find_paren" String="\b(type|integer|complex|character|logical|intent|dimension)\b\s*[(]" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="\b(type|integer|complex|character|logical|intent|dimension)\b" insensitive="true"/>
         <Detect2Chars attribute="Data Type" context="#stay" char=":" char1=":"/>
       </context>
 <!-- This context matches parenthesis in data type declarations, such as in 'real(...)'-->
@@ -512,13 +512,13 @@
 <!-- The following context matches integer and real numbers -->
       <context attribute="Normal Text" lineEndContext="#stay" name="find_numbers">
         <!-- Floating-point numbers with optional kind -->
-        <RegExpr attribute="Float" context="#stay" String="[0-9]*\.[0-9]+([de][+-]?[0-9]+)?([_]([0-9]+|[a-z][\w_]*))?" insensitive="TRUE"/>
-        <RegExpr attribute="Float" context="#stay" String="\b[0-9]+\.[0-9]*([de][+-]?[0-9]+)?([_]([0-9]+|[a-z][\w_]*))?(?![a-z])" insensitive="TRUE"/>
-        <RegExpr attribute="Float" context="#stay" String="\b[0-9]+[de][+-]?[0-9]+([_]([0-9]+|[a-z][\w_]*))?" insensitive="TRUE"/>
+        <RegExpr attribute="Float" context="#stay" String="[0-9]*\.[0-9]+([de][+-]?[0-9]+)?([_]([0-9]+|[a-z][\w_]*))?" insensitive="true"/>
+        <RegExpr attribute="Float" context="#stay" String="\b[0-9]+\.[0-9]*([de][+-]?[0-9]+)?([_]([0-9]+|[a-z][\w_]*))?(?![a-z])" insensitive="true"/>
+        <RegExpr attribute="Float" context="#stay" String="\b[0-9]+[de][+-]?[0-9]+([_]([0-9]+|[a-z][\w_]*))?" insensitive="true"/>
         <!-- Integers with optional kind specifier -->
         <RegExpr attribute="Decimal" context="#stay" String="\b[0-9]+([_]([0-9]+|[a-zA-Z][\w_]*))?"/>
         <!-- Integers in binary, octal and hexadecimal notations -->
-        <RegExpr attribute="Decimal" context="#stay" String="\b[bozx]([&apos;][0-9a-f]+[&apos;]|[&quot;][0-9a-f]+[&quot;])" insensitive="TRUE"/>
+        <RegExpr attribute="Decimal" context="#stay" String="\b[bozx]([&apos;][0-9a-f]+[&apos;]|[&quot;][0-9a-f]+[&quot;])" insensitive="true"/>
       </context>
 
 <!-- The following four contexts implement the complex string multi-line declarations -->
diff --git a/xml/fsharp.xml b/xml/fsharp.xml
--- a/xml/fsharp.xml
+++ b/xml/fsharp.xml
@@ -9,7 +9,7 @@
 <!ENTITY ESC    "(\\[ntbr'&quot;\\]|\\[0-9]{3}|\\x[0-9A-Fa-f]{2})"> <!-- OCaml character code escapes. -->
 <!ENTITY DEC    "[0-9][0-9_]*">                                     <!-- Decimal digits with underscores. -->
 ]>
-<language name="FSharp" version="0.0.1" kateversion="2.4" section="Sources" extensions="*.fs;*.fsi;*.fsx" mimetype="" priority="10" author="Bas Bossink (bas.bossink@gmail.com)" license="LGPL">
+<language name="FSharp" version="0.1" kateversion="2.4" section="Sources" extensions="*.fs;*.fsi;*.fsx" mimetype="" priority="10" author="Bas Bossink (bas.bossink@gmail.com)" license="LGPL">
 
   <highlighting>
     <list name="keywords">
diff --git a/xml/glsl.xml b/xml/glsl.xml
new file mode 100644
--- /dev/null
+++ b/xml/glsl.xml
@@ -0,0 +1,323 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="GLSL" section="Sources" extensions="*.glsl;*.vert;*.frag;*.geom" mimetype="text/x-glslsrc" version="1.03" kateversion="2.4" author="Oliver Richers (o.richers@tu-bs.de)" license="LGPL">
+	<highlighting>
+		<list name="keywords">
+			<item>break</item>
+			<item>continue</item>
+			<item>do</item>
+			<item>for</item>
+			<item>while</item>
+			
+			<item>if</item>
+			<item>else</item>
+			
+			<item>true</item>
+			<item>false</item>
+			
+			<item>discard</item>
+			<item>return</item>
+			
+			<item>struct</item>
+		</list>
+		<list name="types">
+			<item>float</item>
+			<item>int</item>
+			<item>void</item>
+			<item>bool</item>
+
+			<item>mat2</item>
+			<item>mat3</item>
+			<item>mat4</item>
+			
+			<item>vec2</item>
+			<item>vec3</item>
+			<item>vec4</item>
+			<item>ivec2</item>
+			<item>ivec3</item>
+			<item>ivec4</item>
+			<item>bvec2</item>
+			<item>bvec3</item>
+			<item>bvec4</item>
+			
+			<item>sampler1D</item>
+			<item>sampler2D</item>
+			<item>sampler3D</item>
+			<item>samplerCube</item>
+			<item>sampler1DShadow</item>
+			<item>sampler2DShadow</item>
+		</list>
+		<list name="typequal">
+			<item>attribute</item>
+			<item>const</item>
+			<item>uniform</item>
+			<item>varying</item>
+			
+			<item>in</item>
+			<item>out</item>
+			<item>inout</item>
+		</list>
+		<list name="attention">
+			<item>FIXME</item>
+			<item>TODO</item>
+			<item>BUG</item>
+		</list>
+		<list name="stdlib">
+			<!-- Angle and Trigonometry Functions -->
+			<item>radians</item>
+			<item>degrees</item>
+			<item>sin</item>
+			<item>cos</item>
+			<item>tan</item>
+			<item>asin</item>
+			<item>acos</item>
+			<item>atan</item>
+
+			<!-- Exponential Functions -->
+			<item>pow</item>
+			<item>exp</item>
+			<item>log</item>
+			<item>exp2</item>
+			<item>log2</item>
+			<item>sqrt</item>
+			<item>inversesqrt</item>
+
+			<!-- Common Functions -->
+			<item>abs</item>
+			<item>sign</item>
+			<item>floor</item>
+			<item>ceil</item>
+			<item>fract</item>
+			<item>mod</item>
+			<item>min</item>
+			<item>max</item>
+			<item>clamp</item>
+			<item>mix</item>
+			<item>step</item>
+			<item>smoothstep</item>
+
+			<!-- Geometric Functions -->
+			<item>length</item>
+			<item>distance</item>
+			<item>dot</item>
+			<item>cross</item>
+			<item>normalize</item>
+			<item>ftransform</item>
+			<item>faceforward</item>
+			<item>reflect</item>
+			<item>refract</item>
+
+			<!-- Matrix Functions -->
+			<item>matrixCompMult</item>
+
+			<!-- Vector Relational Functions -->
+			<item>lessThan</item>
+			<item>lessThenEqual</item>
+			<item>greaterThan</item>
+			<item>greaterThanEqual</item>
+			<item>equal</item>
+			<item>notEqual</item>
+			<item>any</item>
+			<item>all</item>
+			<item>not</item>
+
+			<!-- Texture Lookup Functions -->
+			<item>texture1D</item>
+			<item>texture1DProj</item>
+			<item>texture1DLod</item>
+			<item>texture1DProjLod</item>
+			<item>texture2D</item>
+			<item>texture2DProj</item>
+			<item>texture2DLod</item>
+			<item>texture2DProjLod</item>
+			<item>texture3D</item>
+			<item>texture3DProj</item>
+			<item>texture3DLod</item>
+			<item>texture3DProjLod</item>
+			<item>textureCube</item>
+			<item>textureCubeLod</item>
+			<item>shadow1D</item>
+			<item>shadow2D</item>
+			<item>shadow1DProj</item>
+			<item>shadow2DProj</item>
+			<item>shadow1DLod</item>
+			<item>shadow2DLod</item>
+			<item>shadow1DProjLod</item>
+			<item>shadow2DProjLod</item>
+
+			<!-- Fragment Processing Functions -->
+			<item>dFdx</item>
+			<item>dFdy</item>
+			<item>fwidth</item>
+
+			<!-- Noise Functions -->
+			<item>noise1</item>
+			<item>noise2</item>
+			<item>noise3</item>
+			<item>noise4</item>
+		</list>
+		<list name="stdvar">
+			<!-- Vertex Shader Special Variables -->
+			<item>gl_Position</item>
+			<item>gl_PointSize</item>
+			<item>gl_ClipVertex</item>
+
+			<!-- Fragment Shader Special Variables -->
+			<item>gl_FragCoord</item>
+			<item>gl_FragFacing</item>
+			<item>gl_FragColor</item>
+			<item>gl_FragData</item>
+			<item>gl_FragDepth</item>
+
+			<!-- Vertex Shader Built-in Attributes -->
+			<item>gl_Color</item>
+			<item>gl_SecondaryColor</item>
+			<item>gl_Normal</item>
+			<item>gl_Vertex</item>
+			<item>gl_MultiTexCoord0</item>
+			<item>gl_MultiTexCoord1</item>
+			<item>gl_MultiTexCoord2</item>
+			<item>gl_MultiTexCoord2</item>
+			<item>gl_MultiTexCoord3</item>
+			<item>gl_MultiTexCoord4</item>
+			<item>gl_MultiTexCoord5</item>
+			<item>gl_MultiTexCoord6</item>
+			<item>gl_MultiTexCoord7</item>
+			<item>gl_FogColor</item>
+
+			<!-- Built-in Constants -->
+			<item>gl_MaxLights</item>
+			<item>gl_MaxClipPlanes</item>
+			<item>gl_MaxTextureUnits</item>
+			<item>gl_MaxTextureCoords</item>
+			<item>gl_MaxVertexAttributes</item>
+			<item>gl_MaxVertexUniformComponents</item>
+			<item>gl_MaxVaryingFloats</item>
+			<item>gl_MaxVertexTextureImageUnits</item>
+			<item>gl_MaxCombinedTextureImageUnits</item>
+			<item>gl_MaxTextureImageUnits</item>
+			<item>gl_MaxFragmentUniformComponents</item>
+			<item>gl_MaxDrawBuffers</item>
+
+			<!-- Built-in Uniform State -->
+			<item>gl_ModelViewMatrix</item>
+			<item>gl_ProjectionMatrix</item>
+			<item>gl_ModelViewProjectionMatrix</item>
+			<item>gl_TextureMatrix</item>
+			<item>gl_NormalMatrix</item>
+			<item>gl_ModelViewMatrixInverse</item>
+			<item>gl_ProjectionMatrixInverse</item>
+			<item>gl_ModelViewProjectionMatrixInverse</item>
+			<item>gl_TextureMatrixInverse</item>
+			<item>gl_ModelViewMatrixTranspose</item>
+			<item>gl_ProjectionMatrixTranspose</item>
+			<item>gl_ModelViewProjectionMatrixTranspose</item>
+			<item>gl_TextureMatrixTranspose</item>
+			<item>gl_ModelViewMatrixInverseTranspose</item>
+			<item>gl_ProjectionMatrixInverseTranspose</item>
+			<item>gl_ModelViewProjectionMatrixInverseTranspose</item>
+			<item>gl_TextureMatrixInverseTranspose</item>
+			<item>gl_NormScale</item>
+			<item>gl_DepthRangeParameters</item>
+			<item>gl_DepthRange</item>
+			<item>gl_ClipPlane</item>
+			<item>gl_PointParameters</item>
+			<item>gl_Point</item>
+			<item>gl_MaterialParameters</item>
+			<item>gl_FrontMaterial</item>
+			<item>gl_BackMaterial</item>
+			<item>gl_LightSourceParameters</item>
+			<item>gl_LightSource</item>
+			<item>gl_LightModelParameters</item>
+			<item>gl_LightModel</item>
+			<item>gl_LightModelProducts</item>
+			<item>gl_FrontLightModelProduct</item>
+			<item>gl_BackLightModelProduct</item>
+			<item>gl_LightProducts</item>
+			<item>gl_FrontLightProduct</item>
+			<item>gl_BackLightProduct</item>
+			<item>gl_TextureEnvColor</item>
+			<item>gl_EyePlaneS</item>
+			<item>gl_EyePlaneT</item>
+			<item>gl_EyePlaneR</item>
+			<item>gl_EyePlaneQ</item>
+			<item>gl_ObjectPlaneS</item>
+			<item>gl_ObjectPlaneT</item>
+			<item>gl_ObjectPlaneR</item>
+			<item>gl_ObjectPlaneQ</item>
+			<item>gl_FogParameters</item>
+			<item>gl_Fog</item>
+
+			<!-- Varying Variables -->
+			<item>gl_FrontColor</item>
+			<item>gl_BackColor</item>
+			<item>gl_FrontSecondaryColor</item>
+			<item>gl_BackSecondaryColor</item>
+			<item>gl_TexCoord</item>
+			<item>gl_FogFragCoord</item>
+			<item>gl_Color</item>
+			<item>gl_SecondaryColor</item>
+		</list>
+		<contexts>
+			<context attribute="Normal Text" lineEndContext="#stay" name="Normal">
+				<keyword attribute="Keyword" String="keywords" context="#stay" />
+				<keyword attribute="Data Type" String="types" context="#stay" />
+				<keyword attribute="Type Qualifier" String="typequal" context="#stay" />
+				<keyword attribute="StdFunction" String="stdlib" context="#stay" />
+				<keyword attribute="StdVariable" String="stdvar" context="#stay" />
+				
+				<Float attribute="Float" context="#stay" />
+				<HlCOct attribute="Octal" context="#stay"/>
+				<HlCHex attribute="Hex" context="#stay"/>
+				<Int attribute="Decimal" context="#stay" />
+				
+				<Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
+				<Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+				<DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
+				<DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
+				
+				<DetectChar attribute="Preprocessor" context="Preprocessor" char="#" firstNonSpace="true"/>
+				<RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*[(])" />
+				
+				<RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" />
+				<AnyChar attribute="Symbol" context="#stay" String=".+-/*%&lt;&gt;[]()^|&amp;~=!:;,?&#59;" />
+			</context>
+			<context name="Member" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+				<RegExpr attribute="Function" context="#pop" String="\b[_\w][_\w\d]*(?=[\s]*)" />
+			</context>
+			<context name="Commentar 1" attribute="Comment" lineEndContext="#pop">
+				<keyword attribute="Alert" context="#stay" String="attention" />
+			</context>
+			<context name="Commentar 2" attribute="Comment" lineEndContext="#stay">
+				<Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+				<keyword attribute="Alert" context="#stay" String="attention" />
+			</context>
+			<context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop">
+			</context>
+	        </contexts>
+		<itemDatas>
+			<itemData name="Normal Text"    defStyleNum="dsNormal"/>
+			<itemData name="Keyword"        defStyleNum="dsKeyword"/>
+			<itemData name="Function"       defStyleNum="dsFunction" bold="0"/>
+			<itemData name="StdFunction"    defStyleNum="dsFunction" bold="1"/>
+			<itemData name="StdVariable"    defStyleNum="dsFunction" bold="0"/>
+			<itemData name="Data Type"      defStyleNum="dsDataType"/>
+			<itemData name="Type Qualifier" defStyleNum="dsDataType"/>
+			<itemData name="Decimal"        defStyleNum="dsDecVal"/>
+			<itemData name="Octal"          defStyleNum="dsBaseN"/>
+			<itemData name="Hex"            defStyleNum="dsBaseN"/>
+			<itemData name="Float"          defStyleNum="dsFloat"/>
+			<itemData name="Symbol"         defStyleNum="dsNormal"/>
+			<itemData name="Preprocessor"   defStyleNum="dsOthers"/>
+			<itemData name="Comment"        defStyleNum="dsComment"/>
+			<itemData name="Alert"          defStyleNum="dsAlert" />
+		</itemDatas>
+	</highlighting>
+	<general>
+		<comments>
+			<comment name="singleLine" start="//" />
+			<comment name="multiLine" start="/*" end="*/" />
+		</comments>
+		<keywords casesensitive="1" />
+	</general>
+</language>
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="2.2" kateversion="2.3" section="Sources" extensions="*.hs;*.chs" mimetype="text/x-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL" indenter="haskell">
+<language name="Haskell" version="2.4" kateversion="2.3" section="Sources" extensions="*.hs;*.chs" mimetype="text/x-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL" indenter="haskell" style="haskell">
   <highlighting>
   <list name="keywords">
     <item> case </item>
@@ -24,6 +24,8 @@
     <item> where </item>
   </list>
   <list name="prelude function">
+    <item> FilePath </item>
+    <item> IOError </item>
     <item> abs </item>
     <item> acos </item>
     <item> acosh </item>
@@ -341,8 +343,10 @@
       <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="Float"   context="#stay" String ="\d+\.\d+([Ee][+-]?\d+)?|\d+[Ee][+-]?\d+"/>
+      <RegExpr    attribute="Octal"   context="#stay" String="0[Oo][0-7]+"/>
+      <RegExpr    attribute="Hex"     context="#stay" String="0[Xx][0-9A-Fa-f]+"/>
       <Int        attribute="Decimal" context="#stay" />
-      <RegExpr    attribute="Float"   context="#stay" String="\d+\.\d+" />
       <DetectChar attribute="Char"    context="char" char="'" />
       <DetectChar attribute="String"  context="string" char="&quot;" />
 
@@ -428,6 +432,8 @@
     <itemData name="Type"             defStyleNum="dsDataType" spellChecking="false" />
     <itemData name="Special"          defStyleNum="dsOthers"  spellChecking="false" />
 
+    <itemData name="Octal"            defStyleNum="dsBaseN"    spellChecking="false" />
+    <itemData name="Hex"              defStyleNum="dsBaseN"    spellChecking="false" />
     <itemData name="Decimal"          defStyleNum="dsDecVal"   spellChecking="false" />
     <itemData name="Float"            defStyleNum="dsFloat"    spellChecking="false" />
     <itemData name="Char"             defStyleNum="dsChar"     spellChecking="false" />
diff --git a/xml/haskell.xml.patch b/xml/haskell.xml.patch
new file mode 100644
--- /dev/null
+++ b/xml/haskell.xml.patch
@@ -0,0 +1,15 @@
+--- a/haskell.xml
++++ b/haskell.xml
+@@ -422,9 +418,9 @@
+
+     <itemData name="Keyword"          defStyleNum="dsKeyword"  spellChecking="false" />
+     <itemData name="Type Prelude"     defStyleNum="dsDataType" spellChecking="false" />
+-    <itemData name="Function Prelude" defStyleNum="dsFunction" spellChecking="false" />
+-    <itemData name="Data Prelude"     defStyleNum="dsKeyword"  spellChecking="false" />
+-    <itemData name="Class Prelude"    defStyleNum="dsKeyword"  spellChecking="false" />
++    <itemData name="Function Prelude" defStyleNum="dsNormal" spellChecking="false" />
++    <itemData name="Data Prelude"     defStyleNum="dsDataType"  spellChecking="false" />
++    <itemData name="Class Prelude"    defStyleNum="dsDataType"  spellChecking="false" />
+
+     <itemData name="Signature"        defStyleNum="dsOthers"  spellChecking="false" />
+     <itemData name="Function"         defStyleNum="dsNormal"   spellChecking="false" />
diff --git a/xml/html.xml b/xml/html.xml
--- a/xml/html.xml
+++ b/xml/html.xml
@@ -17,41 +17,41 @@
     <DetectIdentifier/>
     <StringDetect attribute="Comment" context="Comment" String="&lt;!--" beginRegion="comment" />
     <StringDetect attribute="CDATA" context="CDATA" String="&lt;![CDATA[" beginRegion="cdata" />
-    <RegExpr attribute="Doctype" context="Doctype" String="&lt;!DOCTYPE\s+" insensitive="TRUE" beginRegion="doctype"  />
+    <RegExpr attribute="Doctype" context="Doctype" String="&lt;!DOCTYPE\s+" insensitive="true" beginRegion="doctype"  />
     <RegExpr attribute="Processing Instruction" context="PI" String="&lt;\?[\w:-]*" beginRegion="pi" />
-    <RegExpr attribute="Element" context="CSS" String="&lt;style\b" insensitive="TRUE" beginRegion="style" />
-    <RegExpr attribute="Element" context="JS" String="&lt;script\b" insensitive="TRUE" beginRegion="script" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;pre\b" insensitive="TRUE" beginRegion="pre" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;div\b" insensitive="TRUE" beginRegion="div" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;table\b" insensitive="TRUE" beginRegion="table" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;ul\b" insensitive="TRUE" beginRegion="ul" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;ol\b" insensitive="TRUE" beginRegion="ol" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;dl\b" insensitive="TRUE" beginRegion="dl" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;article\b" insensitive="TRUE" beginRegion="article" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;aside\b" insensitive="TRUE" beginRegion="aside" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;details\b" insensitive="TRUE" beginRegion="details" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;figure\b" insensitive="TRUE" beginRegion="figure" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;footer\b" insensitive="TRUE" beginRegion="footer" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;header\b" insensitive="TRUE" beginRegion="header" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;main\b" insensitive="TRUE" beginRegion="main" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;nav\b" insensitive="TRUE" beginRegion="nav" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;section\b" insensitive="TRUE" beginRegion="section" />
+    <RegExpr attribute="Element" context="CSS" String="&lt;style\b" insensitive="true" beginRegion="style" />
+    <RegExpr attribute="Element" context="JS" String="&lt;script\b" insensitive="true" beginRegion="script" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;pre\b" insensitive="true" beginRegion="pre" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;div\b" insensitive="true" beginRegion="div" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;table\b" insensitive="true" beginRegion="table" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;ul\b" insensitive="true" beginRegion="ul" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;ol\b" insensitive="true" beginRegion="ol" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;dl\b" insensitive="true" beginRegion="dl" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;article\b" insensitive="true" beginRegion="article" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;aside\b" insensitive="true" beginRegion="aside" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;details\b" insensitive="true" beginRegion="details" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;figure\b" insensitive="true" beginRegion="figure" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;footer\b" insensitive="true" beginRegion="footer" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;header\b" insensitive="true" beginRegion="header" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;main\b" insensitive="true" beginRegion="main" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;nav\b" insensitive="true" beginRegion="nav" />
+    <RegExpr attribute="Element" context="El Open" String="&lt;section\b" insensitive="true" beginRegion="section" />
     <RegExpr attribute="Element" context="El Open" String="&lt;&name;" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/pre\b" insensitive="TRUE" endRegion="pre" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/div\b" insensitive="TRUE" endRegion="div" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/table\b" insensitive="TRUE" endRegion="table" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/ul\b" insensitive="TRUE" endRegion="ul" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/ol\b" insensitive="TRUE" endRegion="ol" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/dl\b" insensitive="TRUE" endRegion="dl" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/article\b" insensitive="TRUE" endRegion="article" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/aside\b" insensitive="TRUE" endRegion="aside" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/details\b" insensitive="TRUE" endRegion="details" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/figure\b" insensitive="TRUE" endRegion="figure" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/footer\b" insensitive="TRUE" endRegion="footer" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/header\b" insensitive="TRUE" endRegion="header" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/main\b" insensitive="TRUE" endRegion="main" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/nav\b" insensitive="TRUE" endRegion="nav" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/section\b" insensitive="TRUE" endRegion="section" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/pre\b" insensitive="true" endRegion="pre" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/div\b" insensitive="true" endRegion="div" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/table\b" insensitive="true" endRegion="table" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/ul\b" insensitive="true" endRegion="ul" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/ol\b" insensitive="true" endRegion="ol" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/dl\b" insensitive="true" endRegion="dl" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/article\b" insensitive="true" endRegion="article" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/aside\b" insensitive="true" endRegion="aside" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/details\b" insensitive="true" endRegion="details" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/figure\b" insensitive="true" endRegion="figure" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/footer\b" insensitive="true" endRegion="footer" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/header\b" insensitive="true" endRegion="header" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/main\b" insensitive="true" endRegion="main" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/nav\b" insensitive="true" endRegion="nav" />
+    <RegExpr attribute="Element" context="El Close" String="&lt;/section\b" insensitive="true" endRegion="section" />
     <RegExpr attribute="Element" context="El Close" String="&lt;/&name;" />
     <!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context="FindDTDRules" />
     <IncludeRules context="FindEntityRefs" />
@@ -157,7 +157,7 @@
   </context>
 
   <context name="CSS content" attribute="Other Text" lineEndContext="#stay">
-    <RegExpr attribute="Element" context="El Close 2" String="&lt;/style\b" insensitive="TRUE" endRegion="style" />
+    <RegExpr attribute="Element" context="El Close 2" String="&lt;/style\b" insensitive="true" endRegion="style" />
     <IncludeRules context="##CSS" includeAttrib="true"/>
   </context>
 
@@ -169,13 +169,13 @@
   </context>
 
   <context name="JS content" attribute="Other Text" lineEndContext="#stay">
-    <RegExpr attribute="Element" context="El Close 2" String="&lt;/script\b" insensitive="TRUE" endRegion="script" />
-    <RegExpr attribute="Comment" context="JS comment close" String="//(?=.*&lt;/script\b)" insensitive="TRUE" />
+    <RegExpr attribute="Element" context="El Close 2" String="&lt;/script\b" insensitive="true" endRegion="script" />
+    <RegExpr attribute="Comment" context="JS comment close" String="//(?=.*&lt;/script\b)" insensitive="true" />
     <IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
   </context>
 
   <context name="JS comment close" attribute="Comment" lineEndContext="#pop">
-    <RegExpr attribute="Element" context="El Close 3" String="&lt;/script\b" insensitive="TRUE" endRegion="script" />
+    <RegExpr attribute="Element" context="El Close 3" String="&lt;/script\b" insensitive="true" endRegion="script" />
     <IncludeRules context="##Alerts" />
   </context>
 
diff --git a/xml/java.xml b/xml/java.xml
--- a/xml/java.xml
+++ b/xml/java.xml
@@ -3766,7 +3766,7 @@
 				<HlCOct attribute="Octal" context="#stay"/>
 				<HlCHex attribute="Hex" context="#stay"/>
 				<Int attribute="Decimal" context="#stay">
-					<StringDetect attribute="Decimal" context="#stay" String="L" insensitive="TRUE"/>
+					<StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
 				</Int>
 				<HlCChar attribute="Char" context="#stay"/>
 				<RegExpr attribute="Char" context="#stay" String="'\\u[0-9a-fA-F]{4}'"/>
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="1.04" kateversion="2.4" section="Markup" extensions="" license="LGPL" author="Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)">
+<language name="Javadoc" version="1.05" kateversion="2.4" section="Markup" extensions="" license="LGPL" author="Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)">
 	<highlighting>
 		<contexts>
 			<context name="Start" attribute="Normal Text" lineEndContext="#stay">
@@ -78,12 +78,12 @@
 				<RegExpr attribute="JavadocParam" context="#pop#pop" String="\S*(?=\*/)" />
 				<RegExpr attribute="JavadocParam" context="#pop" String="\S*(\s|$)" />
 			</context>
-			<context attribute="InlineTag" name="InlineTagar">
+			<context attribute="InlineTag" name="InlineTagar" lineEndContext="#stay">
 				<DetectChar attribute="InlineTag" context="#pop" char="}" />
 				<Detect2Chars attribute="JavadocFS" context="#pop#pop#pop" char="*" char1="/" />
 				<IncludeRules context="##HTML"/>
 			</context>
-			<context attribute="InlineTag" name="LiteralTagar">
+			<context attribute="InlineTag" name="LiteralTagar" lineEndContext="#stay">
 				<DetectChar attribute="InlineTag" context="#pop" char="}" />
 				<Detect2Chars attribute="JavadocFS" context="#pop#pop#pop" char="*" char1="/" />
 			</context>
diff --git a/xml/javascript.xml.bkp b/xml/javascript.xml.bkp
deleted file mode 100644
--- a/xml/javascript.xml.bkp
+++ /dev/null
@@ -1,253 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
-<!-- 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="1.18" kateversion="2.4" section="Scripts" extensions="*.js"
-          mimetype="text/x-javascript;application/x-javascript" indenter="cstyle"
-          author="Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net)" license="">
-  <highlighting>
-    <list name="keywords">
-        <item> if </item>
-        <item> else </item>
-        <item> for </item>
-        <item> in </item>
-        <item> while </item>
-        <item> do </item>
-        <item> continue </item>
-        <item> break </item>
-        <item> with </item>
-        <item> try </item>
-        <item> catch </item>
-        <item> finally </item>
-        <item> switch </item>
-        <item> case </item>
-        <item> new </item>
-        <item> var </item>
-        <item> function </item>
-        <item> return </item>
-        <item> delete </item>
-        <item> true </item>
-        <item> false </item>
-        <item> void </item>
-        <item> throw </item>
-        <item> typeof </item>
-        <item> const </item>
-        <item> default </item>
-    </list>
-    <list name="functions">
-        <item> escape </item>
-        <item> isFinite </item>
-        <item> isNaN </item>
-        <item> Number </item>
-        <item> parseFloat </item>
-        <item> parseInt </item>
-        <item> reload </item>
-        <item> taint </item>
-        <item> unescape </item>
-        <item> untaint </item>
-        <item> write </item>
-        </list>
-    <list name="objects">
-        <item>Anchor</item>
-        <item>Applet</item>
-        <item>Area</item>
-        <item>Array</item>
-        <item>Boolean</item>
-        <item>Button</item>
-        <item>Checkbox</item>
-        <item>Date</item>
-        <item>document</item>
-        <item>window</item>
-        <item>Image</item>
-        <item>FileUpload</item>
-        <item>Form</item>
-        <item>Frame</item>
-        <item>Function</item>
-        <item>Hidden</item>
-        <item>Link</item>
-        <item>MimeType</item>
-        <item>Math</item>
-        <item>Max</item>
-        <item>Min</item>
-        <item>Layer</item>
-        <item>navigator</item>
-        <item>Object</item>
-        <item>Password</item>
-        <item>Plugin</item>
-        <item>Radio</item>
-        <item>RegExp</item>
-        <item>Reset</item>
-        <item>Screen</item>
-        <item>Select</item>
-        <item>String</item>
-        <item>Text</item>
-        <item>Textarea</item>
-        <item>this</item>
-        <item>Window</item>
-        </list>
-    <list name="math">
-        <item> abs </item>
-        <item> acos </item>
-        <item> asin </item>
-        <item> atan </item>
-        <item> atan2 </item>
-        <item> ceil </item>
-        <item> cos </item>
-        <item> ctg </item>
-        <item> E </item>
-        <item> exp </item>
-        <item> floor </item>
-        <item> LN2 </item>
-        <item> LN10 </item>
-        <item> log </item>
-        <item> LOG2E </item>
-        <item> LOG10E </item>
-        <item> PI </item>
-        <item> pow </item>
-        <item> round </item>
-        <item> sin </item>
-        <item> sqrt </item>
-        <item> SQRT1_2 </item>
-        <item> SQRT2 </item>
-        <item> tan </item>
-    </list>
-    <list name="events">
-         <item>onAbort</item>
-         <item>onBlur</item>
-         <item>onChange</item>
-         <item>onClick</item>
-         <item>onError</item>
-         <item>onFocus</item>
-         <item>onLoad</item>
-         <item>onMouseOut</item>
-         <item>onMouseOver</item>
-         <item>onReset</item>
-         <item>onSelect</item>
-         <item>onSubmit</item>
-         <item>onUnload</item>
-    </list>
-    <contexts>
-      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
-	<DetectSpaces/>
-        <StringDetect attribute="Region Marker" context="region_marker" String="//BEGIN" beginRegion="Region1"/>
-        <StringDetect attribute="Region Marker" context="region_marker" String="//END" endRegion="Region1"/>
-        <Float attribute="Float" context="#stay" />
-        <Int attribute="Decimal" context="#stay" />
-        <RegExpr attribute="JSON" context="#stay" String="\b[\w\.]+\b\s*(?=:)" />
-
-        <keyword attribute="Keyword" context="#stay" String="keywords" />
-        <keyword attribute="Function" context="#stay" String="functions" />
-        <keyword attribute="Objects" context="#stay" String="objects" />
-        <keyword attribute="Math" context="#stay" String="math" />
-        <keyword attribute="Events" context="#stay" String="events" />
-
-        <DetectChar context="ObjectMember" char="." />
-        <RegExpr attribute="Objects" context="ObjectMember" String="\b[\w\.]+(?=\.)" />
-
-	<DetectIdentifier/>
-        <DetectChar attribute="String" context="String" char="&quot;"/>
-        <DetectChar attribute="String Char" context="String 1" char="'"/>
-        <Detect2Chars attribute="Comment" context="Comment" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="Multi/inline Comment" char="/" char1="*" beginRegion="Comment"/>
-        <RegExpr attribute="Normal Text" context="(Internal regex catch)" String="[=?:]" />
-        <RegExpr attribute="Normal Text" context="(Internal regex catch)" String="\(" />
-        <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 attribute="String" lineEndContext="#pop" name="String">
-	<DetectIdentifier/>
-        <HlCStringChar attribute="String Char" context="#stay"/>
-        <LineContinue attribute="String" context="#stay"/>
-        <DetectChar attribute="String" context="#pop" char="&quot;"/>
-      </context>
-      <context attribute="String Char" lineEndContext="#pop" name="String 1">
-        <DetectIdentifier/>
-        <HlCStringChar attribute="String Char" context="#stay"/>
-        <LineContinue attribute="String" context="#stay"/>
-        <DetectChar attribute="String Char" context="#pop" char="'"/>
-      </context>
-
-      <context attribute="Comment" lineEndContext="#pop" name="Comment">
-        <DetectSpaces />
-        <IncludeRules context="##Alerts" />
-        <DetectIdentifier />
-      </context>
-      <context attribute="Comment" lineEndContext="#stay" name="Multi/inline Comment">
-        <IncludeRules context="##Alerts" />
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
-      </context>
-
-      <context attribute="Regular Expression" lineEndContext="#stay" name="Regular Expression">
-        <RegExpr attribute="Regular Expression" context="#pop#pop#pop" String="/[ig]{0,2}" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\{[\d, ]+\}" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\\[bB]" />
-        <RegExpr attribute="Pattern Character Class" context="#stay" String="\\[nrtvfDdSsWw]" />
-        <DetectChar attribute="Pattern Character Class" context="(charclass caret first check)" char="[" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\\." />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\$(?=/)" />
-        <AnyChar attribute="Pattern Internal Operator" context="#stay" String="?+*()|" />
-      </context>
-      <context attribute="Normal Text" lineEndContext="#stay" name="(Internal regex catch)" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Normal Text" context="#stay" String="\s*" />
-        <RegExpr attribute="Regular Expression" context="#pop" String="//(?=;)" />
-        <Detect2Chars attribute="Comment" context="Comment" char="/" char1="/" />
-        <Detect2Chars attribute="Comment" context="Multi/inline Comment" char="/" char1="*" />
-        <DetectChar attribute="Regular Expression" context="(regex caret first check)" char="/" />
-      </context>
-      <context attribute="Pattern Character Class" lineEndContext="#stay" name="Regular Expression Character Class">
-        <RegExpr attribute="Pattern Character Class" context="#stay" String="\\[\[\]]" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\\." />
-        <DetectChar attribute="Pattern Character Class" context="#pop#pop" char="]" />
-      </context>
-      <context attribute="Pattern Internal Operator" lineEndContext="#pop" name="(regex caret first check)" fallthrough="true" fallthroughContext="Regular Expression">
-        <DetectChar attribute="Pattern Internal Operator" context="Regular Expression" char="^" />
-      </context>
-      <context attribute="Pattern Internal Operator" lineEndContext="#pop" name="(charclass caret first check)" fallthrough="true" fallthroughContext="Regular Expression Character Class">
-        <DetectChar attribute="Pattern Internal Operator" context="Regular Expression Character Class" char="^" />
-      </context>
-
-      <context name="region_marker" attribute="Region Marker" lineEndContext="#pop" >
-	<DetectIdentifier />
-	<DetectSpaces />
-      </context>
-
-      <context name="ObjectMember" attribute="Normal Text" lineEndContext="#stay">
-        <DetectChar context="#stay" char="." />
-        <DetectIdentifier attribute="Object Member" />
-        <DetectSpaces context="#pop" />
-        <AnyChar lookAhead="true" context="#pop" String="(){}:!%&amp;+,-/.*&lt;=&gt;?[]|~^&#59;"/>
-      </context>
-    </contexts>
-    <itemDatas>
-      <itemData name="Normal Text"  defStyleNum="dsNormal"  spellChecking="false"/>
-      <itemData name="Keyword"      defStyleNum="dsKeyword" spellChecking="false"/>
-      <itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/>
-      <itemData name="Objects" defStyleNum="dsKeyword" color="#008000" selColor="#00ffff" bold="0" italic="0" spellChecking="false"/>
-      <itemData name="Object Member" defStyleNum="dsFunction" spellChecking="false"/>
-      <itemData name="Math" defStyleNum="dsKeyword" color="#DBA716" selColor="#00ffff" bold="0" italic="0" spellChecking="false"/>
-      <itemData name="Events" defStyleNum="dsKeyword" color="#F766D5" selColor="#00ffff" bold="0" italic="0" spellChecking="false"/>
-      <itemData name="Decimal"      defStyleNum="dsDecVal" spellChecking="false"/>
-      <itemData name="Float"        defStyleNum="dsFloat" spellChecking="false"/>
-      <itemData name="Char"         defStyleNum="dsChar" spellChecking="false"/>
-      <itemData name="String"       defStyleNum="dsString"/>
-      <itemData name="String Char"  defStyleNum="dsChar" spellChecking="false"/>
-      <itemData name="Comment"      defStyleNum="dsComment"/>
-      <itemData name="Symbol"       defStyleNum="dsNormal" spellChecking="false"/>
-      <itemData name="Regular Expression" defStyleNum="dsOthers" spellChecking="false"/>
-      <itemData name="Pattern Internal Operator" defStyleNum="dsFloat" spellChecking="false"/>
-      <itemData name="Pattern Character Class" defStyleNum="dsBaseN" spellChecking="false"/>
-      <itemData name="Region Marker" defStyleNum="dsRegionMarker" spellChecking="false"/>
-      <itemData name="JSON" defStyleNum="dsDataType" spellChecking="false"/>
-    </itemDatas>
-  </highlighting>
-  <general>
-    <comments>
-      <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
-    </comments>
-    <keywords casesensitive="1" />
-  </general>
-</language>
diff --git a/xml/language.dtd b/xml/language.dtd
deleted file mode 100644
--- a/xml/language.dtd
+++ /dev/null
@@ -1,556 +0,0 @@
-<!--
-        Copyright (c) 2001 Joseph Wenninger <jowenn@kde.org>
-        modified (c) 2002 Anders Lund <anders@alweb.dk>
-        modified (c) 2003 Simon Huerlimann <simon.huerlimann@access.unizh.ch>
-        modified (c) 2005 Dominik Haumann <dhdev@gmx.de>
-        modified (c) 2008 Wilbert Berendsen <info@wilbertberendsen.nl>
-
-        This file describes the XML format used for syntax highlight descriptions
-        for the Kate text editor (http://kate.kde.org), which is part of the KDE
-        desktop environment (http://www.kde.org).
-        You'll find the "Writing a Kate Highlighting XML File HOWTO" at
-        http://kate.kde.org/doc/hlhowto.php
-
-        This format is identified using the SYSTEM identifier
-        SYSTEM "language.dtd"
-
-        Files using this format should include a DOCTYPE declaration like this:
-        <!DOCTYPE language SYSTEM "language.dtd">
-
-        You can validate your syntax files using checkXML from the development
-        package of kdelibs:
-         checkXML yourSyntax.xml
-        If you see any 'validity error' lines, you should fix them. If you get
-        a lot of 'No template matches' lines, everything's just fine. You've
-        produced a valid syntax file!
-
-        It's also possible to use the (much faster) xmllint which comes with the
-        GNOME (oops:-) XML Library libxml2:
-
-         xmllint - -dtdvalid language.dtd yourSyntax.xml
-	 (don't use a space between the two - That's just because XML
-         comments don't allow that:-(
-
-        To use your syntax file, copy it to .kde/share/apps/katepart/syntax/ in
-        your home directory. You have to open a new instance of kwrite/kate to use
-        the new syntax file.
-
-TODO
-  - find a more readable way for the - -dtdvalid stuff, it's just annoying
-    xml comments don't allow it.
--->
-
-<!-- Entity declarations
-  You can use '&per;' instead of '.'. This seems to be useful in <item> elements.
-
-TODO
-  - Are there any more such pre-defined entities?
--->
-<!ENTITY per "." >
-
-<!-- Boolean type
-  Attributes that are of type boolean allow the following values:
-  'true', 'TRUE' and '1' all meaning true,
-  'false', FALSE' and '0' all meaning false.
-
-  It is encouraged to use 'true' and 'false' instead of the alternatives.
--->
-<!ENTITY % boolean "true|false|TRUE|FALSE|0|1">
-
-<!-- Default Styles
-  Allowed predefined default styles for itemData, available are:
-    - dsNormal,   used for normal text
-    - dsKeyword,  used for keywords
-    - dsDataType, used for data types
-    - dsDecVal,   used for decimal values
-    - dsBaseN,    used for values with a base other than 10
-    - dsFloat,    used for float values
-    - dsChar,     used for a character
-    - dsString,   used for strings
-    - dsComment,  used for comments
-    - dsOthers,   used for 'other' things
-    - dsAlert,    used for warning messages
-    - dsFunction, used for function calls
-    - dsRegionMarker, used for region markers
-    - dsError,    used for error highlighting.
--->
-<!ENTITY % defStyles "dsNormal|dsKeyword|dsDataType|dsDecVal|dsBaseN|dsFloat|dsChar|dsString|dsComment|dsOthers|dsAlert|dsFunction|dsRegionMarker|dsError">
-
-<!-- Language specification
-  name:        The name of this syntax description. Used in the Highlightning Mode menu
-  section:     The logical group to which this syntax description belongs. Used for sub menus
-  extensions:  A file glob or pattern to decide for which documents to use this syntax description
-  style:       Attribute style that this highlighter provides to kate scripts [optional]
-  mimetype:    A list of mimetypes to decide for which documents to use this syntax description [optional]
-  version:     Version number of this syntax description [optional]
-  kateversion: Kate version required for using this file [optional]
-  casesensitive: Whether text is matched case sensitive. [boolean, optional, default=true] FIXME: This is not implemented yet
-  priority:    Priority of this language, if more than one are usable for the file [optional]
-  author:      Name of author of this hl file [optional]
-  license:     License for this hl file [optional]
-  indenter:    Name of the Indenter to use for this highlighting mode per default, like "cstyle" [optional]
-  hidden:      Should it be hidden in menu [boolean, optional, default=false]
-
-TODO
-  - Which matches are affected by casesensitive? keyword, RegExpr, StringDetect, WordDetect...?
-
-WARNING: due to helper scripts, the language opening tag must be on a
-*single line* and *cannot* be split in multiple lines.
-
--->
-<!ELEMENT language (highlighting, general?, spellchecking?)>
-<!ATTLIST language
-  name          CDATA       #REQUIRED
-  section       NMTOKEN     #REQUIRED
-  extensions    CDATA       #REQUIRED
-  version       CDATA       #REQUIRED
-  kateversion   CDATA       #REQUIRED
-  style         CDATA       #IMPLIED
-  mimetype      CDATA       #IMPLIED
-  casesensitive (%boolean;) #IMPLIED
-  priority      CDATA       #IMPLIED
-  author        CDATA       #IMPLIED
-  license       CDATA       #IMPLIED
-  indenter      CDATA       #IMPLIED
-  hidden        (%boolean;) #IMPLIED
->
-
-<!-- General options -->
-<!ELEMENT general (folding|comments|keywords|indentation|emptyLines)*>
-
-<!-- List of folding
-  indentationsensitive: If true, the code folding is indentation based.
--->
-<!ELEMENT folding EMPTY>
-<!ATTLIST folding
-  indentationsensitive (%boolean;) #IMPLIED
->
-
-<!-- List of comments -->
-<!ELEMENT comments (comment)+>
-
-<!-- Comment specification
-  name:         Type of this comment. Allowed are 'singleLine' and 'multiLine'
-  start:        The comment starts with this string
-  end:          The comment ends with this string [optional]
-  region:       The region name of the foldable multiline comment. If you have
-                beginRegion="Comment" ... endRegion="Comment" you should use
-                region="Comment". This way uncomment works even if you do not
-                select all the text of the multiline comment.
-  position:     only availalbe for type singleLine. Default is column0, to insert
-                the single line comment characters after the whitespaces
-                (= before the first non space) set position to "afterwhitespace"
--->
-<!ELEMENT comment EMPTY>
-<!ATTLIST comment
-  name      (singleLine|multiLine)  #REQUIRED
-  start     CDATA                   #REQUIRED
-  end       CDATA                   #IMPLIED
-  region    CDATA                   #IMPLIED
-  position  (afterwhitespace)       #IMPLIED
->
-
-<!-- Keyword options
-  casesensitive:        Whether keywords are matched case sensitive. [boolean, optional, default=true]
-  weakDeliminator:      Add weak deliminators [optional, default: ""]
-  additionalDeliminator: Add deliminators [optional]
-  wordWrapDeliminator:  characters that are used to wrap long lines [optional]
-
--->
-<!ELEMENT keywords EMPTY>
-<!ATTLIST keywords
-  casesensitive         (%boolean;) #IMPLIED
-  weakDeliminator       CDATA       #IMPLIED
-  additionalDeliminator CDATA       #IMPLIED
-  wordWrapDeliminator   CDATA       #IMPLIED
->
-
-<!-- Indentation options
-  mode:        indentation mode to use
-
-TODO
-  - Explain (weak) deliminators
--->
-<!ELEMENT indentation EMPTY>
-<!ATTLIST indentation
-  mode         CDATA   #IMPLIED
->
-
-<!-- Treat lines that match a given regular expression as empty line. This is
-  needed for example in Python for comments (#...), as then the indentation
-  based folding should ignore the line.
-  This is only implemented for indentation based folding. If the folding
-  is not indentation based, the emptyLines are not used.
--->
-<!ELEMENT emptyLines (emptyLine*)>
-
-<!-- One empty line regular expression.
-  regexpr:       The regular expression, example from python: ^\s*#.*$
-  casesensitive: Sets, whether the regular expression match is performed case sesitive
--->
-<!ELEMENT emptyLine EMPTY>
-<!ATTLIST emptyLine
-  regexpr       CDATA       #REQUIRED
-  casesensitive (%boolean;) #IMPLIED
->
-
-
-<!-- Highlighting specification -->
-<!ELEMENT highlighting (list*, contexts, itemDatas)>
-<!ATTLIST highlighting
->
-
-<!-- List of items
-  name:     Name of this list
--->
-<!ELEMENT list (item)*>
-<!ATTLIST list
-  name  CDATA   #REQUIRED
->
-
-<!-- List item
-  contains string used in <keyword>
--->
-<!ELEMENT item (#PCDATA)>
-
-<!-- List of contexts -->
-<!ELEMENT contexts (context)+>
-
-<!-- context specification
-  name:             The name of this context specification. Used in '*Context' attributes [optional]
-  attribute:        The name of the ItemData to be used for matching text
-  lineEndContext:   Next context if end of line is encountered
-  lineBeginContext: Next context if begin of line is encountered [optional]
-  fallthrough:      Use a fallthrough context [optional]
-  fallthroughContext: Fall through to this context [optional]
-  dynamic:          Dynamic context [boolean, optional]
-  noIndentationBasedFolding: Python uses indentation based folding. However, Python has parts where
-                    it does not use indentation based folding (e.g. for """ strings). In this case
-		    switch to an own context and set this attribute to true. Then the indentation
-		    based folding will ignore this parts and not change folding markers. [optional]
-
-TODO:
-  - Explain fallthrough.
-  - Do we need fallthrough at all? It could be true, if fallthroughContext is set, false otherwise.
-  - Make lineEndContext optional, defaults to '#stay'. Reasonable?
--->
-<!ELEMENT context (keyword | Float | HlCOct | HlCHex | HlCFloat | Int | DetectChar | Detect2Chars | AnyChar | StringDetect | WordDetect | RegExpr | LineContinue | HlCStringChar | RangeDetect | HlCChar | IncludeRules | DetectSpaces | DetectIdentifier)*>
-<!ATTLIST context
-  name              CDATA       #IMPLIED
-  attribute         CDATA       #REQUIRED
-  lineEndContext    CDATA       #REQUIRED
-  lineBeginContext  CDATA       #IMPLIED
-  fallthrough       (%boolean;) #IMPLIED
-  fallthroughContext CDATA      #IMPLIED
-  dynamic           (%boolean;) #IMPLIED
-  noIndentationBasedFolding (%boolean;) #IMPLIED
->
-
-<!-- Common attributes
-  attribute:    The name of the ItemData to be used for matching text
-  context:      The name of the context to go to when this rule matches
-  beginRegion:  Begin a region of type beginRegion [optional]
-  endRegion:    End a region of type endRegion [optional]
-  firstNonSpace: should this rule only match at first non-space char in line?
-  column: should this rule only match at given column in line (column == count of chars in front)
--->
-<!ENTITY % commonAttributes
- "attribute     CDATA       #IMPLIED
-  context       CDATA       #IMPLIED
-  beginRegion   CDATA       #IMPLIED
-  endRegion     CDATA       #IMPLIED
-  lookAhead     (%boolean;) #IMPLIED
-  firstNonSpace (%boolean;) #IMPLIED
-  column        CDATA       #IMPLIED"
->
-
-<!-- Detect members of a keyword list
-  commonAttributes: Common attributes
-  insensitive:      Is this list case-insensitive? [boolean, optional, see note]
-  String:           Name of the list
-  weakDelimiter:    Use weak deliminator
-
-  By default, case sensitivity is determined from <keywords casesensitive> in
-  <general> (default=true), but can be overridden per-list with 'insensitive'.
-
-TODO:
-  - Should be weakDeliminator
-  - Explain deliminator
-  - Doesn't seem to be supported in highligh.cpp
--->
-<!ELEMENT keyword EMPTY>
-<!ATTLIST keyword
-  %commonAttributes;
-  insensitive   CDATA #IMPLIED
-  String        CDATA #REQUIRED
-  weakDelimiter CDATA #IMPLIED
->
-
-<!-- Detect a floating point number
-  commonAttributes: Common attributes
-  AnyChar is allowed as a child rule. TODO: The source code allows
-  *all* rules to be child rules, shall we change the DTD in some way?
--->
-<!ELEMENT Float (AnyChar)*>
-<!ATTLIST Float
-  %commonAttributes;
->
-
-<!-- Detect an octal number
-  commonAttributes: Common attributes
--->
-<!ELEMENT HlCOct EMPTY>
-<!ATTLIST HlCOct
-  %commonAttributes;
->
-
-<!-- Detect a hexadecimal number
-  commonAttributes: Common attributes
--->
-<!ELEMENT HlCHex EMPTY>
-<!ATTLIST HlCHex
-  %commonAttributes;
->
-
-<!-- Detect a C-style floating point number
-  commonAttributes: Common attributes
--->
-<!ELEMENT HlCFloat EMPTY>
-<!ATTLIST HlCFloat
-  %commonAttributes;
->
-
-<!-- Detect C-style character
-  commonAttributes: Common attributes
-
-TODO
-  - Did I get this right?
--->
-<!ELEMENT HlCChar EMPTY>
-<!ATTLIST HlCChar
-  %commonAttributes;
->
-
-<!-- Detect an integer number
-  commonAttributes: Common attributes
-  StringDetect is allowed as a child rule. TODO: The source code allows
-  *all* rules to be child rules, shall we change the DTD in some way?
--->
-<!ELEMENT Int (StringDetect)*>
-<!ATTLIST Int
-  %commonAttributes;
->
-
-<!-- Detect a single character
-  commonAttributes: Common attributes
-  char:             The character to look for
-  dynamic:          Uses 0 ... 9 as placeholders for dynamic arguments (in fact, first char of arg...) [boolean, optional, default=false]
--->
-<!ELEMENT DetectChar EMPTY>
-<!ATTLIST DetectChar
-  %commonAttributes;
-  char          CDATA   #REQUIRED
-  dynamic       (%boolean;) #IMPLIED
->
-
-<!-- Detect two characters
-  commonAttributes: Common attributes
-  char:             The first character
-  char1:            The second character
-  dynamic:          Uses 0 ... 9 as placeholders for dynamic arguments (in fact, first char of arg...) [boolean, optional, default=false]
--->
-<!ELEMENT Detect2Chars EMPTY>
-<!ATTLIST Detect2Chars
-  %commonAttributes;
-  char          CDATA   #REQUIRED
-  char1         CDATA   #REQUIRED
-  dynamic       (%boolean;) #IMPLIED
->
-
-<!-- Detect any group of characters
-  commonAttributes: Common attributes
-  String:           A string representing the characters to look for
-
-TODO
-  - Description is not descriptive enough, I'm not sure what it exactly does:-(
--->
-<!ELEMENT AnyChar EMPTY>
-<!ATTLIST AnyChar
-  %commonAttributes;
-  String        CDATA   #REQUIRED
->
-
-<!-- Detect a string
-  commonAttributes: Common attributes
-  String:           The string to look for
-  insensitive:      Whether the string is matched case INsensitive. [boolean, optional, default=false]
-  dynamic:          Uses %0 ... %9 as placeholders for dynamic arguments [boolean, optional, default=false]
-
-TODO
-  - What's default of insensitive? I'm not sure...
--->
-<!ELEMENT StringDetect EMPTY>
-<!ATTLIST StringDetect
-  %commonAttributes;
-  String        CDATA       #REQUIRED
-  insensitive   (%boolean;)  #IMPLIED
-  dynamic       (%boolean;) #IMPLIED
->
-
-<!-- Detect a word, i.e. a string at word boundaries
-  commonAttributes: Common attributes
-  String:           The string to look for
-  insensitive:      Whether the string is matched case INsensitive. [boolean, optional, default=false]
-  dynamic:          Uses %0 ... %9 as placeholders for dynamic arguments [boolean, optional, default=false]
-
-TODO
-  - What's default of insensitive? I'm not sure...
--->
-<!ELEMENT WordDetect EMPTY>
-<!ATTLIST WordDetect
-  %commonAttributes;
-  String        CDATA       #REQUIRED
-  insensitive   (%boolean;)  #IMPLIED
-  dynamic       (%boolean;) #IMPLIED
->
-
-<!-- Detect a match of a regular expression
-  commonAttributes: Common attributes
-  String:           The regular expression pattern
-  insensitive:      Whether the text is matched case INsensitive. [boolean, optional, default=false]
-  minimal:          Wheather to use minimal matching for wild cards in the pattern [boolean, optional, default='false']
-  dynamic:          Uses %0 ... %9 as placeholders for dynamic arguments [boolean, optional, default=false]
--->
-<!ELEMENT RegExpr EMPTY>
-<!ATTLIST RegExpr
-  %commonAttributes;
-  String        CDATA       #REQUIRED
-  insensitive   (%boolean;) #IMPLIED
-  minimal       (%boolean;) #IMPLIED
-  dynamic       (%boolean;) #IMPLIED
->
-
-<!-- Detect a line continuation
-  commonAttributes: Common attributes
--->
-<!ELEMENT LineContinue EMPTY>
-<!ATTLIST LineContinue
-  %commonAttributes;
->
-
-<!-- Detect a C-style escaped character
-  commonAttributes: Common attributes
-
-TODO:
-  - Did I get this right? Only one character, or a string?
--->
-<!ELEMENT HlCStringChar EMPTY>
-<!ATTLIST HlCStringChar
-  %commonAttributes;
->
-
-<!-- Detect a range of characters
-  commonAttributes: Common attributes
-  char:             The character starting the range
-  char1:            The character terminating the range
--->
-<!ELEMENT RangeDetect EMPTY>
-<!ATTLIST RangeDetect
-  %commonAttributes;
-  char          CDATA   #REQUIRED
-  char1         CDATA   #REQUIRED
->
-
-<!-- Include Rules of another context
-  context:             The name of the context to include
-  includeAttrib:       If this is true, the host context of the IncludeRules
-                       will be given the attribute of the source context
--->
-<!ELEMENT IncludeRules EMPTY>
-<!ATTLIST IncludeRules
-  context       CDATA   #REQUIRED
-  includeAttrib (%boolean;) #IMPLIED
->
-
-<!-- Detect all following Spaces
--->
-<!ELEMENT DetectSpaces EMPTY>
-<!ATTLIST DetectSpaces
-          %commonAttributes;
->
-
-<!-- Detect an Identifier ( == LETTER(LETTER|NUMBER|_)*)
-     -->
-<!ELEMENT DetectIdentifier EMPTY>
-<!ATTLIST DetectIdentifier
-          %commonAttributes;
->
-
-<!-- List of attributes -->
-<!ELEMENT itemDatas (itemData)+>
-<!ATTLIST itemDatas
->
-
-<!-- Attribute specification
-  name          CDATA   #REQUIRED       The name of this attribute
-  defStyleNum   CDATA   #REQUIRED       The index of the default style to use
-  color         CDATA   #IMPLIED        Color for this style, either a hex triplet, a name or some other format recognized by Qt [optional]
-  selColor      CDATA   #IMPLIED        The color for this style when text is selected [optional]
-  italic        CDATA   #IMPLIED        Whether this attribute should be rendered using an italic typeface [optional, boolean, default=false]
-  bold          CDATA   #IMPLIED        Whether this attribute should be renederd using a bold typeface [optional, boolean, default=false]
-  underline     CDATA   #IMPLIED        Whether this attribute should be underlined [optional, boolean, default=false]
-  strikeOut     CDATA   #IMPLIED        Whether this attribute should be striked out [optional, boolean, default=false]
-  backgroundColor    CDATA #IMPLIED     The background color for this style [optional]
-  selBackgroundColor CDATA #IMPLIED     The background color for this style when text is selected [optional]
-  spellChecking      CDATA #IMPLIED     Whether this attribute should be spell checked [optional, boolean, default=true]
--->
-<!ELEMENT itemData EMPTY>
-<!ATTLIST itemData
-  name          CDATA   #REQUIRED
-  defStyleNum   (%defStyles;) #REQUIRED
-  color         CDATA   #IMPLIED
-  selColor      CDATA   #IMPLIED
-  italic        (%boolean;) #IMPLIED
-  bold          (%boolean;) #IMPLIED
-  underline     (%boolean;) #IMPLIED
-  strikeOut     (%boolean;) #IMPLIED
-  backgroundColor    CDATA  #IMPLIED
-  selBackgroundColor CDATA  #IMPLIED
-  spellChecking (%boolean;) #IMPLIED
->
-
-<!-- encodingPolicy type
-  Attributes that are of type 'encodingPolicy' allow the following values:
-  'EncodeAlways', 'EncodeWhenPresent' and 'EncodeNever'
--->
-<!ENTITY % encodingPolicy "EncodeAlways|EncodeWhenPresent|EncodeNever">
-
-<!-- Spellchecking specification -->
-<!ELEMENT spellchecking (configuration?, encodings?)>
-<!ATTLIST spellchecking
->
-
-<!-- List of character encodings -->
-<!ELEMENT encodings (encoding)+>
-<!ATTLIST encodings
->
-
-<!-- Encoding specification
-  sequence       CDATA        #REQUIRED  Character sequence of the encoding; must not contain new-line characters, i.e. \n or \r
-  character      CDATA        #IMPLIED   Encoded character; must be of length 1
-  ignored        (%boolean;)  #IMPLIED   If true, then the encoding sequence is ignored for spellchecking
--->
-<!ELEMENT encoding EMPTY>
-<!ATTLIST encoding
-  string         CDATA        #REQUIRED
-  char           CDATA        #IMPLIED
-  ignored        (%boolean;)  #IMPLIED
->
-
-<!-- Spellchecking configuration
-  encodingReplacementPolicy       (%encodingPolicy;)     #IMPLIED  Policy for replacing encoded characters in replacements for misspelled words
--->
-<!ELEMENT configuration EMPTY>
-<!ATTLIST configuration
-  encodingReplacementPolicy   (%encodingPolicy;)   #IMPLIED
->
diff --git a/xml/lilypond.xml b/xml/lilypond.xml
new file mode 100644
--- /dev/null
+++ b/xml/lilypond.xml
@@ -0,0 +1,1199 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd" [
+  <!ENTITY b "(?![A-Za-z])">
+  <!ENTITY rest "\b[srR]&b;">
+  <!ENTITY pitch "\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|&b;)">
+  <!ENTITY duration "(\\(longa|breve)\b|(1|2|4|8|16|32|64|128|256|512|1024|2048)(?!\d))(\s*\.+)?(\s*\*\s*\d+(/\d+)?)*">
+  <!ENTITY dynamics "p{1,5}|mp|mf|f{1,5}|s?fp|sff?|spp?|[sr]?fz|cresc|decresc|dim">
+  <!ENTITY scripts "\d+|accent|marcato|staccat(issim)?o|espressivo|tenuto|portato|(up|down)(bow|mordent|prall)|flageolet|thumb|[lr](heel|toe)|open|stopped|turn|reverseturn|trill|mordent|prall(prall|mordent|down|up)?|lineprall|signumcongruentiae|(short|long|verylong)?fermata|segno|(var)?coda|snappizzicato|halfopen">
+  <!ENTITY keywords "accepts|alias|consists|defaultchild|denies|description|grobdescriptions|include|invalid|language|name|objectid|once|remove|sequential|simultaneous|type|version|score|book|bookpart">
+  <!ENTITY deprecatedkeywords "consistsend">
+
+  <!-- predefined commands, grouped, TODO: unravel other commands -->
+  <!ENTITY commands-heads "(aiken|funk|sacredHarp|southernHarmony|walker)Heads(Minor)?">
+  <!ENTITY commands-other1 "acciaccatura|addQuote|afterGrace|allowPageTurn|alternative|apply(Context|Music|Output)|appoggiatura|arpeggio(Arrow(Down|Up)|Bracket|Normal|Parenthesis)?|(a|de)scendens|auctum|augmentum|autoBeamO(ff|n)|autochange|balloon(Grob)?Text|bar|barNumberCheck|bendAfter|breathe|break|cadenzaO(ff|n)|cavum|clef(\s+(treble|violin|G|alto|C|tenor|(sub)?bass|F|french|(mezzo)?soprano|(var)?baritone|percussion|tab))?|(end)?(de)?cr|cresc(TextCresc|Hairpin)">
+  <!ENTITY commands-other2 "(cue|transposedCue)During|default|deminutum|dim(Text(Decresc|Decr|Dim)|Hairpin)|display(Lily)?Music|divisio(Maior|Maxima|Minima)|(dynamic|dots|phrasingSlur|slur|stem|tie|tuplet)(Down|Neutral|Up)|(balloon|text)LengthO(ff|n)|featherDurations|figure(mode|s)|finalis|flexa|(french|german|italian|semiGerman)Chords|glissando|grace|harmonic|(unH|h)ideNotes|(hide|show)StaffSwitch|inclinatum|(keep|remove)WithTag|key(\s+&pitch;)?|killCues">
+  <!ENTITY commands-other3 "label|laissezVibrer|linea|makeClusters|mark|maxima|melisma(End)?|mergeDifferently(Head|Dott)edO(ff|n)|newSpacingSection|no(Beam|Break|PageBreak|PageTurn)|normalsize|numericTimeSignature|octaveCheck|oneVoice|oriscus|ottava|page(-ref|Break|Turn)|parallelMusic|parenthesize|partcombine|partial(\s*&duration;)?|pes|pitchedTrill">
+  <!ENTITY commands-other4 "pointAndClickO(ff|n)|quilisma|quoteDuring|relative(\s+&pitch;)?|RemoveEmptyStaffContext|repeat(\s+(unfold|volta|tremolo|percent)(\s+\d+)?)?|repeatTie|resetRelativeOctave|rest|scaleDurations|scoreTweak|easyHeadsO(ff|n)|shift(Durations|Off|On{1,3})|(slur|tie)(Both|Dashed|Dotted|Solid)|small|spacingTweaks">
+  <!ENTITY commands-other5 "(start|stop)(Group|(Text|Trill)Span|Staff)|stemBoth|stropha|super|(sustain|sostenuto)O(ff|n)|table-of-contents|tag|times?(\s*\d+/\d+)?|tiny|tocItem">
+  <!ENTITY commands-other6 "transpose(\s+&pitch;\s*&pitch;)?|transposition(\s+&pitch;)">
+  <!ENTITY commands-other7 "tweak|unfoldRepeats|virg(ul)?a|voice(One|Two|Three|Four)|withMusicProperty|cm|mm|in|pt|major|minor|ionian|locrian|aeolian|mixolydian|lydian|phrygian|dorian">
+
+  <!ENTITY deprecatedcommands "arpeggio(Up|Down|Neutral)|newpage|script(Up|Down|Both)|(empty|fat)Text|setEasyHeads|(default|voice|modernVoice|piano|forget)Accidentals|(modern(Voice)?|piano)Cautionaries|noResetKey|compressMusic|octave|(sustain|sostenuto)(Down|Up)|set(Hairpin|Text)(Cresc|Decresc|Dim)|setTextDecr">
+  <!ENTITY markupnotextargs "arrow-head|beam|char|(semi|sesqui|double)?(flat|sharp)|draw-(circle|line)|epsfile|eyeglasses|filled-box|fret-diagram(-terse|-verbose)?|fromproperty|harp-pedal|(justify|wordwrap)-(field|string)|left-brace|lookup|markalphabet|markletter|musicglyph|natural|note-by-number|note|null|path|right-brace|simple|(back)?slashed-digit|stencil|strut|tied-lyric|triangle|verbatim-file">
+  <!ENTITY markupwithtextargs "markup|bold|(rounded-)?box|bracket|caps|(center|general|left|right)-align|circle|((center|dir|left|right)-)?column|combine|concat|dynamic|fill-line|finger|fontCaps|(abs-)?fontsize|fraction|halign|hbracket|hcenter-in|hcenter|hspace|huge|italic|justify|larger?|line|lower|magnify|medium|normal-size-(sub|super)|normal-text|normalsize|number|on-the-fly|override|pad-(around|markup|to-box|x)|page-ref|postscript|put-adjacent|raise|roman|rotate|sans|small(er)?|smallCaps|sub|super|teeny|text|tiny|translate(-scaled)?|transparent|typewriter|underline|upright|vcenter|whiteout|with-(color|dimensions|url)|wordwrap|(markup|column-|justified-|override-|wordwrap-)lines|wordwrap-(string-)?internal">
+  <!ENTITY deprecatedmarkup "bigger|h?center">
+  <!ENTITY headervars "dedication|(sub){,2}title|poet|composer|meter|opus|arranger|instrument|piece|breakbefore|copyright|tagline|mutopia(title|composer|poet|opus|instrument)|date|enteredby|source|style|maintainer(Email|Web)?|moreInfo|lastupdated|texidoc|footer">
+
+  <!-- The '-new' entities are for for LilyPond 2.13.4 and higher, and '-old' for LilyPond up to 2.12 -->
+  <!ENTITY paper-margin "(top|bottom|left|right)-margin|(foot|head)-separation|indent|short-indent|paper-(height|width)|horizontal-shift|line-width">
+  <!ENTITY paper-margin-new "(inner|outer)-margin|two-sided|binding-offset">
+  <!ENTITY paper-spacing-old "(after|before|between)-title-space|between-system-(space|padding)|page-top-space|page-breaking-between-system-padding">
+  <!ENTITY paper-spacing-new "(after|before|between)-title-spacing|between-(scores-)?system-spacing|bottom-system-spacing|top-title-spacing|top-system-spacing|page-breaking-between-system-spacing">
+  <!ENTITY paper-systems "system-count">
+  <!ENTITY paper-systems-new "(min-|max-)?systems-per-page">
+  <!ENTITY paper-other "annotate-spacing|auto-first-page-number|blank-(last-)?page-force|first-page-number|page-count|page-limit-inter-system-space|page-limit-inter-system-space-factor|page-spacing-weight|print-all-headers|print-first-page-number|print-page-number|ragged-(bottom|right)|ragged-last(-bottom)?|system-separator-markup|force-assignment|input-encoding|output-scale">
+  <!ENTITY paper-markup "((even|odd)(Footer|Header)|(book|score|toc)Title|tocItem)Markup">
+  <!ENTITY papervars "&paper-margin;|&paper-margin-new;|&paper-spacing-old;|&paper-spacing-new;|&paper-systems;|&paper-systems-new;|&paper-other;|&paper-markup;">
+
+  <!ENTITY layoutvars "system-count|(short-)?indent">
+  <!ENTITY toplevelvars "dash(Hat|Plus|Dash|Bar|Larger|Dot|Underscore)|fermataMarkup|pipeSymbol|slashSeparator">
+  <!ENTITY performer "Beam|Control_track|Drum_note|Dynamic|Key|Lyric|Note|Piano_pedal|Slur|Staff|Swallow|Tempo|Tie|Time_signature">
+  <!ENTITY translator "Note_swallow|Rest_swallow|Skip_event_swallow|Timing">
+  <!ENTITY engraver0 "Accidental|Ambitus|Arpeggio|Auto_beam|Axis_group|Balloon|Bar|Bar_number|Beam|Bend|Break_align|Breathing_sign|Chord_name|Chord_tremolo|Clef|Cluster_spanner|Collision|Completion_heads|Custos|Default_bar_line|Dot_column|Dots|Drum_notes|Dynami_align|Dynamic|Episema|Extender|Figured_bass|Figured_bass_position|Fingering|Font_size|Forbid_line_break|Fretboard|Glissando|Grace_beam|Grace|Grace_spacing|Grid_line_span|Grid_point|Grob_pq|Hara_kiri|Horizontal_bracket">
+  <!ENTITY engraver1 "Hyphen|Instrument_name|Instrument_switch|Key|Laissez_vibrer|Ledger_line|Ligature_bracket|Lyric|Mark|Measure_grouping|Melody|Mensural_ligature|Metronome_mark|Multi_measure_rest|New_dynamic|New_fingering|Note_head_line|Note_heads|Note_name|Note_spacing|Ottava_spanner|Output_property|Page_turn|Paper_column|Parenthesis|Part_combine|Percent_repeat|Phrasing_slur|Piano_pedal_align|Piano_pedal|Pitch_squash|Pitched_trill|Repeat_acknowledge|Repeat_tie|Rest_collision|Rest|Rhythmic_column|Scheme|Script_column|Script|Script_row">
+  <!ENTITY engraver2 "Separating_line_group|Slash_repeat|Slur|Spacing|Span_arpeggio|Span_bar|Spanner_break_forbid|Staff_collecting|Staff_symbol|Stanza_number_align|Stanza_number|Stem|String_number|Swallow|System_start_delimiter|Tab_harmonic|Tab_note_heads|Tab_staff_symbol|Text|Text_spanner|Tie|Time_signature|Trill_spanner|Tuplet|Tweak|Vaticana_ligature|Vertical_align|Vertically_spaced_contexts|Volta">
+  <!ENTITY engravers00 "(&engraver0;)_engraver">
+  <!ENTITY engravers01 "(&engraver1;)_engraver">
+  <!ENTITY engravers02 "(&engraver2;)_engraver">
+  <!ENTITY engravers1 "(&performer;)_performer">
+  <!ENTITY engravers2 "(&translator;)_translator">
+
+  <!ENTITY schemename "[a-zA-Z#][^\s(){}[\];$&quot;]*">
+  <!ENTITY schemefunc0 "\b(define|defined\?|define\*(-public)?|define-(\*|builtin-markup-(list-)?command|class|(extra-)?display-method|fonts?|grob-property|ly-syntax(-loc|-simple)?|macro(-public)?|markup-(list-)command|method|module|music-function|post-event-display-method|public(-macro|-toplevel)?|safe-public|span-event-display-method)|defmacro(\*(-public)?)?|lambda\*?|and|or|if|cond|case|let\*?|letrec|begin|do|delay|set!|else|(quasi)?quote|unquote(-splicing)?|(define|let|letrec)-syntax|syntax-rules)(?=($|\s|\)))">
+  <!ENTITY schemefunc1 "\b(not|boolean\?|eq\?|eqv\?|equal\?|pair\?|cons|set-c[ad]r!|c[ad]{1,4}r|null\?|list\?|list|length|append|reverse|list-ref|mem[qv]|member|ass[qv]|assoc|symbol\?|symbol-&gt;string|string-&gt;symbol|number\?|complex\?|real\?|rational\?|integer\?|exact\?|inexact\?|zero\?|positive\?|negative\?|odd\?|even\?|max|min|abs|quotient|remainder|modulo|gcd|lcm|numerator|denominator|floor|ceiling|truncate|round|rationalize|exp|log|sin|cos|tan|asin|acos|atan|sqrt|expt|make-rectangular|make-polar|real-part|imag-part|magnitude|angle|exact-&gt;inexact|inexact-&gt;exact|number-&gt;string|string-&gt;number)(?=($|\s|\)))">
+  <!ENTITY schemefunc2 "\b(char((-ci)?(=\?|&lt;\?|&gt;\?|&lt;=\?|&gt;=\?)|-alphabetic\?|\?|-numeric\?|-whitespace\?|-upper-case\?|-lower-case\?|-&gt;integer|-upcase|-downcase|-ready\?)|integer-&gt;char|make-string|string(\?|-copy|-fill!|-length|-ref|-set!|(-ci)?(=\?|&lt;\?|&gt;\?|&lt;=\?|&gt;=\?)|-append)|substring|make-vector|vector(\?|-length|-ref|-set!|-fill!)?|procedure\?|apply|map|for-each|force|call-with-(current-continuation|(in|out)put-file)|(in|out)put-port\?|current-(in|out)put-port|open-(in|out)put-file|close-(in|out)put-port|eof-object\?|read|(read|peek)-char|write(-char)?|display|newline|call/cc|list-tail|string-&gt;list|list-&gt;string|vector-&gt;list|list-&gt;vector|with-input-from-file|with-output-to-file|load|transcript-(on|off)|eval|dynamic-wind|port\?|values|call-with-values|(scheme-report-|null-|interaction-)environment)(?=($|\s|\)))">
+]>
+<language name="LilyPond" section="Other"
+          style="lilypond" indenter="lilypond"
+          version="3.07" kateversion="3.0"
+          extensions="*.ly;*.LY;*.ily;*.ILY;*.lyi;*.LYI"
+          mimetype="text/x-lilypond"
+          author="Wilbert Berendsen (info@wilbertberendsen.nl)" license="LGPL">
+
+  <!--
+
+    Fall 2010
+    Minor updates by Wilbert Berendsen
+
+    Changes:
+    - add some new commands (\path, \eyeglasses, etc), contexts and grobs for LilyPond 2.14
+    - cleaned up papervars mess by using nested entities categorizing different variables
+
+    November, 2009
+    Minor updates by Wilbert Berendsen
+
+    Changes:
+    - add makeClusters
+    - fix chords in drummode
+
+    October, 2008
+    Minor updates by Wilbert Berendsen
+
+    Changes:
+    - More new LilyPond commands (2.12) and some more deprecated words
+    - Match deprecated properties after header vars
+    - Special case \tempo command
+
+    January, 2008
+    Fully rewritten by Wilbert Berendsen (info@wilbertberendsen.nl)
+
+    Changes:
+    - correctly parse pitches, chords, durations, etc. marking often made mistakes as invalid
+    - speed up by shortening contexts, e.g. branch out on a \, instead of RegExpr'ing all \commands
+    - recognize some contexts like \layout, \with, \header to colorcode variables, engravers, etc. only there
+    - recognize lilypond words like ChoirStaff etc. only in sections and after \set, \override etc.
+    - highlight some standard Scheme function names
+    - add \figuremode recognition
+    - all Scheme stuff has a nice, very light background, to show where Lilypond is in Scheme mode.
+    - mark some deprecated (pre 2.12) LilyPond commands and properties
+
+    October, 2007
+    New version by Wilbert Berendsen (info@wilbertberendsen.nl)
+
+    Changes:
+    - better recognition of being inside lyrics, drums, notes, chords and markup sections
+    - detect block comments %{  %}
+    - links to ##Alerts in comments (e.g. TODO, FIXME)
+    - detect lilypond inside scheme #{ #}
+    - detect \score inside \markup, etc.
+    - helps with some often made errors like forgetting spaces around lyric extenders and hyphens
+    - more scheme improvements: strings, numbers, $substitutions, lilypond objects
+    - highlights many variables, commands, lilypond objects, properties, engravers, etc.
+    - by using entities for many regexps the main syntax checking parts remain legible, and the file more maintainable.
+
+    I borrowed some colors and the drum names from Andrea Primiani's first version (August, 2004).
+
+  -->
+
+  <highlighting>
+    <list name="contexts">
+      <item> ChoirStaff </item>
+      <item> ChordNames </item>
+      <item> CueVoice </item>
+      <item> Devnull </item>
+      <item> DrumStaff </item>
+      <item> DrumVoice </item>
+      <item> Dynamics </item>
+      <item> FiguredBass </item>
+      <item> FretBoards </item>
+      <item> Global </item>
+      <item> GrandStaff </item>
+      <item> GregorianTranscriptionStaff </item>
+      <item> GregorianTranscriptionVoice </item>
+      <item> Lyrics </item>
+      <item> MensuralStaff </item>
+      <item> MensuralVoice </item>
+      <item> NoteNames </item>
+      <item> PianoStaff </item>
+      <item> RhythmicStaff </item>
+      <item> Score </item>
+      <item> Staff </item>
+      <item> StaffGroup </item>
+      <item> TabStaff </item>
+      <item> TabVoice </item>
+      <item> Timing </item>
+      <item> VaticanaStaff </item>
+      <item> VaticanaVoice </item>
+      <item> Voice </item>
+    </list>
+    <list name="deprecatedcontexts">
+      <item> InnerChoirStaff </item>
+      <item> InnerStaffGroup </item>
+    </list>
+    <list name="layoutobjects">
+      <item> Accidental </item>
+      <item> AccidentalCautionary </item>
+      <item> AccidentalPlacement </item>
+      <item> AccidentalSuggestion </item>
+      <item> Ambitus </item>
+      <item> AmbitusAccidental </item>
+      <item> AmbitusLine </item>
+      <item> AmbitusNoteHead </item>
+      <item> Arpeggio </item>
+      <item> BalloonTextItem </item>
+      <item> BarLine </item>
+      <item> BarNumber </item>
+      <item> BassFigure </item>
+      <item> BassFigureAlignment </item>
+      <item> BassFigureAlignmentPositioning </item>
+      <item> BassFigureBracket </item>
+      <item> BassFigureContinuation </item>
+      <item> BassFigureLine </item>
+      <item> Beam </item>
+      <item> BendAfter </item>
+      <item> BreakAlignGroup </item>
+      <item> BreakAlignment </item>
+      <item> BreathingSign </item>
+      <item> ChordName </item>
+      <item> Clef </item>
+      <item> ClusterSpanner </item>
+      <item> ClusterSpannerBeacon </item>
+      <item> CombineTextScript </item>
+      <item> Custos </item>
+      <item> DotColumn </item>
+      <item> Dots </item>
+      <item> DoublePercentRepeat </item>
+      <item> DoublePercentRepeatCounter </item>
+      <item> DynamicLineSpanner </item>
+      <item> DynamicText </item>
+      <item> DynamicTextSpanner </item>
+      <item> Episema </item>
+      <item> Fingering </item>
+      <item> FretBoard </item>
+      <item> Glissando </item>
+      <item> GraceSpacing </item>
+      <item> GridLine </item>
+      <item> GridPoint </item>
+      <item> Hairpin </item>
+      <item> HarmonicParenthesesItem </item>
+      <item> HorizontalBracket </item>
+      <item> InstrumentName </item>
+      <item> InstrumentSwitch </item>
+      <item> KeyCancellation </item>
+      <item> KeySignature </item>
+      <item> LaissezVibrerTie </item>
+      <item> LaissezVibrerTieColumn </item>
+      <item> LedgerLineSpanner </item>
+      <item> LeftEdge </item>
+      <item> LigatureBracket </item>
+      <item> LyricExtender </item>
+      <item> LyricHyphen </item>
+      <item> LyricSpace </item>
+      <item> LyricText </item>
+      <item> MeasureGrouping </item>
+      <item> MelodyItem </item>
+      <item> MensuralLigature </item>
+      <item> MetronomeMark </item>
+      <item> MultiMeasureRest </item>
+      <item> MultiMeasureRestNumber </item>
+      <item> MultiMeasureRestText </item>
+      <item> NonMusicalPaperColumn </item>
+      <item> NoteCollision </item>
+      <item> NoteColumn </item>
+      <item> NoteHead </item>
+      <item> NoteName </item>
+      <item> NoteSpacing </item>
+      <item> OctavateEight </item>
+      <item> OttavaBracket </item>
+      <item> PaperColumn </item>
+      <item> ParenthesesItem </item>
+      <item> PercentRepeat </item>
+      <item> PercentRepeatCounter </item>
+      <item> PhrasingSlur </item>
+      <item> PianoPedalBracket </item>
+      <item> RehearsalMark </item>
+      <item> RepeatSlash </item>
+      <item> RepeatTie </item>
+      <item> RepeatTieColumn </item>
+      <item> Rest </item>
+      <item> RestCollision </item>
+      <item> Script </item>
+      <item> ScriptColumn </item>
+      <item> ScriptRow </item>
+      <item> SeparationItem </item>
+      <item> Slur </item>
+      <item> SostenutoPedal </item>
+      <item> SostenutoPedalLineSpanner </item>
+      <item> SpacingSpanner </item>
+      <item> SpanBar </item>
+      <item> StaffGrouper </item>
+      <item> StaffSpacing </item>
+      <item> StaffSymbol </item>
+      <item> StanzaNumber </item>
+      <item> Stem </item>
+      <item> StemTremolo </item>
+      <item> StringNumber </item>
+      <item> StrokeFinger </item>
+      <item> SustainPedal </item>
+      <item> SustainPedalLineSpanner </item>
+      <item> System </item>
+      <item> SystemStartBar </item>
+      <item> SystemStartBrace </item>
+      <item> SystemStartBracket </item>
+      <item> SystemStartSquare </item>
+      <item> TabNoteHead </item>
+      <item> TextScript </item>
+      <item> TextSpanner </item>
+      <item> Tie </item>
+      <item> TieColumn </item>
+      <item> TimeSignature </item>
+      <item> TrillPitchAccidental </item>
+      <item> TrillPitchGroup </item>
+      <item> TrillPitchHead </item>
+      <item> TrillSpanner </item>
+      <item> TupletBracket </item>
+      <item> TupletNumber </item>
+      <item> UnaCordaPedal </item>
+      <item> UnaCordaPedalLineSpanner </item>
+      <item> VaticanaLigature </item>
+      <item> VerticalAlignment </item>
+      <item> VerticalAxisGroup </item>
+      <item> VoiceFollower </item>
+      <item> VoltaBracket </item>
+      <item> VoltaBracketSpanner </item>
+    </list>
+    <list name="properties">
+      <item> aDueText </item>
+      <item> alignAboveContext </item>
+      <item> alignBassFigureAccidentals </item>
+      <item> alignBelowContext </item>
+      <item> allowBeamBreak </item>
+      <item> associatedVoice </item>
+      <item> autoAccidentals </item>
+      <item> autoBeamCheck </item>
+      <item> autoBeamSettings </item>
+      <item> autoBeaming </item>
+      <item> autoCautionaries </item>
+      <item> automaticBars </item>
+      <item> barAlways </item>
+      <item> barCheckSynchronize </item>
+      <item> barNumberVisibility </item>
+      <item> baseMoment </item>
+      <item> bassFigureFormatFunction </item>
+      <item> bassStaffProperties </item>
+      <item> beamExceptions </item>
+      <item> beatGrouping </item>
+      <item> beatLength </item>
+      <item> beatStructure </item>
+      <item> chordChanges </item>
+      <item> chordNameExceptions </item>
+      <item> chordNameExceptionsFull </item>
+      <item> chordNameExceptionsPartial </item>
+      <item> chordNameFunction </item>
+      <item> chordNameSeparator </item>
+      <item> chordNoteNamer </item>
+      <item> chordPrefixSpacer </item>
+      <item> chordRootNamer </item>
+      <item> clefGlyph </item>
+      <item> clefOctavation </item>
+      <item> clefPosition </item>
+      <item> connectArpeggios </item>
+      <item> countPercentRepeats </item>
+      <item> createKeyOnClefChange </item>
+      <item> createSpacing </item>
+      <item> crescendoSpanner </item>
+      <item> crescendoText </item>
+      <item> currentBarNumber </item>
+      <item> decrescendoSpanner </item>
+      <item> decrescendoText </item>
+      <item> defaultBarType </item>
+      <item> doubleSlurs </item>
+      <item> doubleRepeatType </item>
+      <item> drumPitchTable </item>
+      <item> drumStyleTable </item>
+      <item> dynamicAbsoluteVolumeFunction </item>
+      <item> explicitClefVisibility </item>
+      <item> explicitKeySignatureVisibility </item>
+      <item> extendersOverRests </item>
+      <item> extraNatural </item>
+      <item> figuredBassAlterationDirection </item>
+      <item> figuredBassCenterContinuations </item>
+      <item> figuredBassFormatter </item>
+      <item> figuredBassPlusDirection </item>
+      <item> fingeringOrientations </item>
+      <item> firstClef </item>
+      <item> followVoice </item>
+      <item> fontSize </item>
+      <item> forbidBreak </item>
+      <item> forceClef </item>
+      <item> gridInterval </item>
+      <item> hairpinToBarline </item>
+      <item> harmonicAccidentals </item>
+      <item> highStringOne </item>
+      <item> ignoreBarChecks </item>
+      <item> ignoreFiguredBassRest </item>
+      <item> ignoreMelismata </item>
+      <item> implicitBassFigures </item>
+      <item> implicitTimeSignatureVisibility </item>
+      <item> instrumentCueName </item>
+      <item> instrumentEqualizer </item>
+      <item> instrumentName </item>
+      <item> instrumentTransposition </item>
+      <item> internalBarNumber </item>
+      <item> keepAliveInterfaces </item>
+      <item> keyAlterationOrder </item>
+      <item> keySignature </item>
+      <item> lyricMelismaAlignment </item>
+      <item> majorSevenSymbol </item>
+      <item> markFormatter </item>
+      <item> maximumFretStretch </item>
+      <item> measureLength </item>
+      <item> measurePosition </item>
+      <item> melismaBusyProperties </item>
+      <item> metronomeMarkFormatter </item>
+      <item> middleCClefPosition </item>
+      <item> middleCOffset </item>
+      <item> middleCPosition </item>
+      <item> midiInstrument </item>
+      <item> midiMaximumVolume </item>
+      <item> midiMinimumVolume </item>
+      <item> minimumFret </item>
+      <item> minimumPageTurnLength </item>
+      <item> minimumRepeatLengthForPageTurn </item>
+      <item> noteToFretFunction </item>
+      <item> ottavation </item>
+      <item> output </item>
+      <item> pedalSostenutoStrings </item>
+      <item> pedalSostenutoStyle </item>
+      <item> pedalSustainStrings </item>
+      <item> pedalSustainStyle </item>
+      <item> pedalUnaCordaStrings </item>
+      <item> pedalUnaCordaStyle </item>
+      <item> printKeyCancellation </item>
+      <item> printOctaveNames </item>
+      <item> printPartCombineTexts </item>
+      <item> proportionalNotationDuration </item>
+      <item> recordEventSequence </item>
+      <item> rehearsalMark </item>
+      <item> repeatCommands </item>
+      <item> restNumberThreshold </item>
+      <item> scriptDefinitions </item>
+      <item> shapeNoteStyles </item>
+      <item> shortInstrumentName </item>
+      <item> shortVocalName </item>
+      <item> skipBars </item>
+      <item> skipTypesetting </item>
+      <item> soloIIText </item>
+      <item> soloText </item>
+      <item> squashedPosition </item>
+      <item> staffLineLayoutFunction </item>
+      <item> stanza </item>
+      <item> stemLeftBeamCount </item>
+      <item> stemRightBeamCount </item>
+      <item> stringNumberOrientations </item>
+      <item> stringOneTopmost </item>
+      <item> stringTunings </item>
+      <item> strokeFingerOrientations </item>
+      <item> subdivideBeams </item>
+      <item> suggestAccidentals </item>
+      <item> systemStartDelimiter </item>
+      <item> systemStartDelimiterHierarchy </item>
+      <item> tablatureFormat </item>
+      <item> tempoUnitCount </item>
+      <item> tempoUnitDuration </item>
+      <item> tempoWholesPerMinute </item>
+      <item> tieWaitForNote </item>
+      <item> timeSignatureFraction </item>
+      <item> timing </item>
+      <item> tonic </item>
+      <item> topLevelAlignment </item>
+      <item> trebleStaffProperties </item>
+      <item> tremoloFlags </item>
+      <item> tupletFullLength </item>
+      <item> tupletFullLengthNote </item>
+      <item> tupletSpannerDuration </item>
+      <item> useBassFigureExtenders </item>
+      <item> verticallySpacedContexts </item>
+      <item> vocalName </item>
+      <item> voltaOnThisStaff </item> <!-- gone in 2.12 and 2.13 -->
+      <item> voltaSpannerDuration </item>
+      <item> whichBar </item>
+    </list>
+    <list name="deprecatedproperties">
+      <item> barNumberAlignSymbol </item>
+      <item> centralCPosition </item>
+      <item> extraVerticalExtent </item>
+      <item> fingerHorizontalDirection </item>
+      <item> instr </item>
+      <item> instrument </item>
+      <item> keyAccidentalOrder </item>
+      <item> minimumVerticalExtent </item>
+      <item> rehearsalMarkAlignSymbol </item>
+      <item> soloADue </item>
+      <item> tupletNumberFormatFunction </item>
+      <item> vocNam </item>
+    </list>
+    <list name="musicexpressions">
+      <item> AbsoluteDynamicEvent </item>
+      <item> AnnotateOutputEvent </item>
+      <item> ApplyContext </item>
+      <item> ApplyOutputEvent </item>
+      <item> ArpeggioEvent </item>
+      <item> ArticulationEvent </item>
+      <item> AutoChangeMusic </item>
+      <item> BarCheck </item>
+      <item> BassFigureEvent </item>
+      <item> BeamEvent </item>
+      <item> BeamForbidEvent </item>
+      <item> BendAfterEvent </item>
+      <item> BreathingEvent </item>
+      <item> ClusterNoteEvent </item>
+      <item> ContextChange </item>
+      <item> ContextSpeccedMusic </item>
+      <item> CrescendoEvent </item>
+      <item> DecrescendoEvent </item>
+      <item> Event </item>
+      <item> EventChord </item>
+      <item> ExtenderEvent </item>
+      <item> FingeringEvent </item>
+      <item> GlissandoEvent </item>
+      <item> GraceMusic </item>
+      <item> HarmonicEvent </item>
+      <item> HyphenEvent </item>
+      <item> KeyChangeEvent </item>
+      <item> LabelEvent </item>
+      <item> LaissezVibrerEvent </item>
+      <item> LigatureEvent </item>
+      <item> LineBreakEvent </item>
+      <item> LyricCombineMusic </item>
+      <item> LyricEvent </item>
+      <item> MarkEvent </item>
+      <item> MultiMeasureRestEvent </item>
+      <item> MultiMeasureRestMusic </item>
+      <item> MultiMeasureTextEvent </item>
+      <item> Music </item>
+      <item> NoteEvent </item>
+      <item> NoteGroupingEvent </item>
+      <item> OverrideProperty </item>
+      <item> PageBreakEvent </item>
+      <item> PageTurnEvent </item>
+      <item> PartCombineMusic </item>
+      <item> PercentEvent </item>
+      <item> PercentRepeatedMusic </item>
+      <item> PesOrFlexaEvent </item>
+      <item> PhrasingSlurEvent </item>
+      <item> PropertySet </item>
+      <item> PropertyUnset </item>
+      <item> QuoteMusic </item>
+      <item> RelativeOctaveCheck </item>
+      <item> RelativeOctaveMusic </item>
+      <item> RepeatTieEvent </item>
+      <item> RepeatedMusic </item>
+      <item> RestEvent </item>
+      <item> RevertProperty </item>
+      <item> ScriptEvent </item>
+      <item> SequentialMusic </item>
+      <item> SimultaneousMusic </item>
+      <item> SkipEvent </item>
+      <item> SkipMusic </item>
+      <item> SlurEvent </item>
+      <item> SoloOneEvent </item>
+      <item> SoloTwoEvent </item>
+      <item> SostenutoEvent </item>
+      <item> SpacingSectionEvent </item>
+      <item> SpanEvent </item>
+      <item> StaffSpanEvent </item>
+      <item> StringNumberEvent </item>
+      <item> StrokeFingerEvent </item>
+      <item> SustainEvent </item>
+      <item> TextScriptEvent </item>
+      <item> TextSpanEvent </item>
+      <item> TieEvent </item>
+      <item> TimeScaledMusic </item>
+      <item> TransposedMusic </item>
+      <item> TremoloEvent </item>
+      <item> TremoloRepeatedMusic </item>
+      <item> TremoloSpanEvent </item>
+      <item> TrillSpanEvent </item>
+      <item> TupletSpanEvent </item>
+      <item> UnaCordaEvent </item>
+      <item> UnfoldedRepeatedMusic </item>
+      <item> UnisonoEvent </item>
+      <item> UnrelativableMusic </item>
+      <item> VoiceSeparator </item>
+      <item> VoltaRepeatedMusic </item>
+    </list>
+    <list name="drumpitchnames">
+      <item> acousticbassdrum </item>
+      <item> acousticsnare </item>
+      <item> agh </item>
+      <item> agl </item>
+      <item> bassdrum </item>
+      <item> bd </item>
+      <item> bda </item>
+      <item> boh </item>
+      <item> bohm </item>
+      <item> boho </item>
+      <item> bol </item>
+      <item> bolm </item>
+      <item> bolo </item>
+      <item> cab </item>
+      <item> cabasa </item>
+      <item> cb </item>
+      <item> cgh </item>
+      <item> cghm </item>
+      <item> cgho </item>
+      <item> cgl </item>
+      <item> cglm </item>
+      <item> cglo </item>
+      <item> chinesecymbal </item>
+      <item> cl </item>
+      <item> claves </item>
+      <item> closedhihat </item>
+      <item> cowbell </item>
+      <item> crashcymbal </item>
+      <item> crashcymbala </item>
+      <item> crashcymbalb </item>
+      <item> cuim </item>
+      <item> cuio </item>
+      <item> cymc </item>
+      <item> cymca </item>
+      <item> cymcb </item>
+      <item> cymch </item>
+      <item> cymr </item>
+      <item> cymra </item>
+      <item> cymrb </item>
+      <item> cyms </item>
+      <item> da </item>
+      <item> db </item>
+      <item> dc </item>
+      <item> dd </item>
+      <item> de </item>
+      <item> electricsnare </item>
+      <item> fivedown </item>
+      <item> fiveup </item>
+      <item> fourdown </item>
+      <item> fourup </item>
+      <item> gui </item>
+      <item> guil </item>
+      <item> guiro </item>
+      <item> guis </item>
+      <item> halfopenhihat </item>
+      <item> handclap </item>
+      <item> hc </item>
+      <item> hh </item>
+      <item> hhc </item>
+      <item> hhho </item>
+      <item> hho </item>
+      <item> hhp </item>
+      <item> hiagogo </item>
+      <item> hibongo </item>
+      <item> hiconga </item>
+      <item> highfloortom </item>
+      <item> hightom </item>
+      <item> hihat </item>
+      <item> himidtom </item>
+      <item> hisidestick </item>
+      <item> hitimbale </item>
+      <item> hiwoodblock </item>
+      <item> loagogo </item>
+      <item> lobongo </item>
+      <item> loconga </item>
+      <item> longguiro </item>
+      <item> longwhistle </item>
+      <item> losidestick </item>
+      <item> lotimbale </item>
+      <item> lowfloortom </item>
+      <item> lowmidtom </item>
+      <item> lowoodblock </item>
+      <item> lowtom </item>
+      <item> mar </item>
+      <item> maracas </item>
+      <item> mutecuica </item>
+      <item> mutehibongo </item>
+      <item> mutehiconga </item>
+      <item> mutelobongo </item>
+      <item> muteloconga </item>
+      <item> mutetriangle </item>
+      <item> onedown </item>
+      <item> oneup </item>
+      <item> opencuica </item>
+      <item> openhibongo </item>
+      <item> openhiconga </item>
+      <item> openhihat </item>
+      <item> openlobongo </item>
+      <item> openloconga </item>
+      <item> opentriangle </item>
+      <item> pedalhihat </item>
+      <item> rb </item>
+      <item> ridebell </item>
+      <item> ridecymbal </item>
+      <item> ridecymbala </item>
+      <item> ridecymbalb </item>
+      <item> shortguiro </item>
+      <item> shortwhistle </item>
+      <item> sidestick </item>
+      <item> sn </item>
+      <item> sna </item>
+      <item> snare </item>
+      <item> sne </item>
+      <item> splashcymbal </item>
+      <item> ss </item>
+      <item> ssh </item>
+      <item> ssl </item>
+      <item> tamb </item>
+      <item> tambourine </item>
+      <item> tamtam </item>
+      <item> threedown </item>
+      <item> threeup </item>
+      <item> timh </item>
+      <item> timl </item>
+      <item> tomfh </item>
+      <item> tomfl </item>
+      <item> tomh </item>
+      <item> toml </item>
+      <item> tommh </item>
+      <item> tomml </item>
+      <item> tri </item>
+      <item> triangle </item>
+      <item> trim </item>
+      <item> trio </item>
+      <item> tt </item>
+      <item> twodown </item>
+      <item> twoup </item>
+      <item> ua </item>
+      <item> ub </item>
+      <item> uc </item>
+      <item> ud </item>
+      <item> ue </item>
+      <item> vibraslap </item>
+      <item> vibs </item>
+      <item> wbh </item>
+      <item> wbl </item>
+      <item> whl </item>
+      <item> whs </item>
+    </list>
+    <contexts>
+      <!-- Entry point -->
+      <context name="lilypond" attribute="Normal Text" lineEndContext="#stay">
+        <IncludeRules context="music"/>
+        <RegExpr String="\b[a-z]+\s*=" insensitive="true" lookAhead="true" context="assignment"/>
+      </context>
+
+      <!-- Music expressions -->
+      <context name="music" attribute="Normal Text" lineEndContext="#stay">
+        <AnyChar String="()~" attribute="Slur"/>
+        <AnyChar String="[]" attribute="Beam"/>
+        <AnyChar String="-_^" context="connect"/>
+        <DetectChar char="\" context="musiccommand" lookAhead="true"/>
+        <IncludeRules context="default"/>
+        <DetectChar char="&lt;" attribute="Chord" context="chord"/>
+        <DetectChar char="&gt;" attribute="Invalid"/><!-- chord terminator outsite chord -->
+        <RegExpr String="[a-z]+\d+\.*[,']+" attribute="Invalid"/><!-- pitch-dur-octave i.s.o. pitch-oct-dur -->
+        <RegExpr String="(&rest;|&pitch;)" context="pitch"/>
+        <RegExpr String=":\d*" attribute="Tremolo"/>
+      </context>
+
+      <!-- Default Lilypond code to be recognized e.g. also inside lyrics -->
+      <context name="default" attribute="Normal Text" lineEndContext="#stay">
+        <Detect2Chars char="&lt;" char1="&lt;" attribute="Keyword" beginRegion="simultaneous"/>
+        <Detect2Chars char="&gt;" char1="&gt;" attribute="Keyword" endRegion="simultaneous"/>
+        <DetectChar char="{" attribute="Keyword" beginRegion="sequential"/>
+        <DetectChar char="}" attribute="Keyword" endRegion="sequential"/>
+        <DetectChar char="|" attribute="Check"/>
+        <DetectChar char="\" context="command" lookAhead="true"/>
+        <IncludeRules context="basic"/>
+      </context>
+
+      <!-- Basic Lilypond syntax that also works inside markup -->
+      <context name="basic" attribute="Normal Text" lineEndContext="#stay">
+        <Detect2Chars char="%" char1="{" context="commentblock" beginRegion="comment"/>
+        <DetectChar char="%" context="commentline"/>
+        <DetectChar char="&quot;" context="string"/>
+        <DetectChar char="#" context="scheme"/>
+        <DetectChar char="$" context="schemesub"/>
+      </context>
+
+      <context name="musiccommand" attribute="Normal Text" lineEndContext="#pop"
+               fallthrough="true" fallthroughContext="#pop">
+        <RegExpr String="\\(&dynamics;)&b;" attribute="Dynamic"/>
+        <RegExpr String="\\[&lt;!&gt;]" attribute="Dynamic"/>
+        <RegExpr String="\\(&scripts;)&b;" attribute="Articulation"/>
+        <RegExpr String="\\[()]" attribute="Slur"/>
+        <RegExpr String="\\[][]" attribute="Beam"/>
+        <IncludeRules context="command"/>
+      </context>
+
+      <context name="command" attribute="Normal Text" lineEndContext="#pop"
+               fallthrough="true" fallthroughContext="#pop">
+        <Detect2Chars char="\" char1="\" attribute="Keyword"/>
+        <RegExpr String="\\note(mode|s)&b;" context="notemode"/>
+        <RegExpr String="\\drum(mode|s)&b;" context="drummode"/>
+        <RegExpr String="\\chord(mode|s)&b;" context="chordmode"/>
+        <RegExpr String="\\figure(mode|s)&b;" context="figuremode"/>
+        <RegExpr String="\\(lyric(mode|s)|addlyrics)&b;" context="lyricmode"/>
+        <RegExpr String="\\lyricsto&b;" context="lyricsto"/>
+        <RegExpr String="\\markup(lines)?&b;" attribute="Markup" context="markup"/>
+        <RegExpr String="\\(header|paper|layout|midi|with)\b" context="section"/>
+        <RegExpr String="\\(new|context|change)\b" attribute="Keyword" context="context"/>
+        <RegExpr String="\\(un)?set\b" attribute="Keyword" context="set"/>
+        <RegExpr String="\\(override(Property)?|revert)&b;" attribute="Keyword" context="override"/>
+        <RegExpr String="\\skip&b;" attribute="Command" context="duration"/>
+        <RegExpr String="\\tempo&b;" attribute="Command" context="tempo"/>
+        <RegExpr String="\\(&keywords;)&b;" attribute="Keyword"/>
+        <RegExpr String="\\(&commands-heads;)&b;" attribute="Command"/>
+        <RegExpr String="\\(&commands-other1;)&b;" attribute="Command"/>
+        <RegExpr String="\\(&commands-other2;)&b;" attribute="Command"/>
+        <RegExpr String="\\(&commands-other3;)&b;" attribute="Command"/>
+        <RegExpr String="\\(&commands-other4;)&b;" attribute="Command"/>
+        <RegExpr String="\\(&commands-other5;)&b;" attribute="Command"/>
+        <RegExpr String="\\(&commands-other6;)&b;" attribute="Command"/>
+        <RegExpr String="\\(&commands-other7;)&b;" attribute="Command"/>
+        <RegExpr String="\\(&toplevelvars;)&b;" attribute="Variable"/>
+        <RegExpr String="\\(&deprecatedkeywords;)&b;" attribute="Deprecated Keyword"/>
+        <RegExpr String="\\(&deprecatedcommands;)&b;" attribute="Deprecated Command"/>
+        <RegExpr String="\\(translator|newcontext)\b" attribute="Deprecated Keyword" context="context"/>
+        <RegExpr String="\\property&b;" attribute="Deprecated Keyword" context="override"/>
+        <RegExpr String="\\[A-Za-z]+" attribute="User Command"/>
+        <DetectChar char="\" attribute="Invalid"/>
+      </context>
+
+      <context name="assignment" attribute="Normal Text" lineEndContext="#pop">
+        <RegExpr String="\b(&toplevelvars;)\b" attribute="Variable" context="#pop"/>
+        <RegExpr String="[a-z]+" insensitive="true" attribute="User Command" context="#pop"/>
+      </context>
+
+      <context name="pitch" attribute="Pitch" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <RegExpr String="=\s*('+|,+)?" attribute="Check"/>
+        <AnyChar String="!?"/>
+        <IncludeRules context="duration"/>
+      </context>
+
+      <context name="duration" attribute="Normal Text" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces attribute="Normal Text"/>
+        <RegExpr String="&duration;" attribute="Duration" context="#pop"/>
+        <RegExpr String="\d+" attribute="Invalid" context="#pop"/><!-- uncaught (wrong) durations -->
+      </context>
+
+      <context name="chord" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="&gt;" context="chordend"/>
+        <RegExpr String="&pitch;" context="chordpitch"/>
+        <AnyChar String="&lt;{}srR" attribute="Invalid"/><!-- no rests in chord allowed -->
+        <IncludeRules context="music"/>
+      </context>
+
+      <context name="chordpitch" attribute="Pitch" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces attribute="Normal Text"/>
+        <RegExpr String="=\s*('+|,+)?" attribute="Check"/>
+        <RegExpr String="&duration;" attribute="Invalid" context="#pop"/><!-- no duration in chord allowed -->
+        <RegExpr String="\d+" attribute="Invalid" context="#pop"/><!-- catch other (wrong) durations as well -->
+      </context>
+
+      <context name="chordend" attribute="Chord" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop#pop">
+        <DetectSpaces attribute="Normal Text"/>
+        <RegExpr String="&duration;" attribute="Duration" context="#pop#pop"/>
+      </context>
+
+      <context name="commentline" attribute="Comment" lineEndContext="#pop">
+        <IncludeRules context="##Alerts"/>
+      </context>
+
+      <context name="commentblock" attribute="Comment" lineEndContext="#stay">
+        <Detect2Chars char="%" char1="}" attribute="Comment" context="#pop" endRegion="comment"/>
+        <IncludeRules context="##Alerts"/>
+      </context>
+
+      <context name="string" attribute="Quoted Text" lineEndContext="#stay">
+        <DetectChar char="&quot;" attribute="Quoted Text" context="#pop"/>
+        <Detect2Chars char="\" char1="\"/>
+        <Detect2Chars char="\" char1="&quot;"/>
+      </context>
+
+      <context name="connect" attribute="Articulation" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <AnyChar String=".-+|&gt;^_12345" attribute="Articulation" context="#pop"/>
+      </context>
+
+      <!-- Scheme -->
+      <context name="scheme" attribute="Scheme" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="scheme2">
+        <DetectSpaces/>
+      </context>
+
+      <context name="scheme2" attribute="Scheme" lineEndContext="#pop#pop">
+        <DetectChar char="(" attribute="Scheme Keyword" context="scheme3" beginRegion="scheme"/>
+        <IncludeRules context="schemerules"/>
+        <DetectSpaces lookAhead="true" context="#pop#pop"/>
+      </context>
+
+      <context name="scheme3" attribute="Scheme" lineEndContext="#stay">
+        <DetectChar char=")" attribute="Scheme Keyword" context="#pop#pop#pop" endRegion="scheme"/>
+        <IncludeRules context="schemerules"/>
+      </context>
+
+      <context name="schemerules" attribute="Scheme" lineEndContext="#stay">
+        <DetectChar char="(" context="schemerules" beginRegion="scheme"/>
+        <DetectChar char=")" context="#pop" endRegion="scheme"/>
+        <DetectChar char="&quot;" context="schemestring"/>
+        <DetectChar char=";" context="schemecommentline"/>
+        <DetectChar char="$" context="schemesub"/>
+        <DetectChar char="'" context="schemequote"/>
+        <Detect2Chars char="#" char1="!" context="schemecommentblock" beginRegion="schemecomment"/>
+        <Detect2Chars char="#" char1="{" attribute="Scheme Keyword" context="schemelily" beginRegion="schemelily"/>
+        <keyword String="musicexpressions" attribute="Scheme Keyword"/>
+        <keyword String="contexts" attribute="Scheme Keyword"/>
+        <keyword String="layoutobjects" attribute="Scheme Keyword"/>
+        <RegExpr String="[-+]?(\d+(\.\d+)?|\.\d+)" attribute="Scheme Value"/>
+        <RegExpr String="#(t|f|b[-+]?[01.]+|o[-+]?[0-7.]+|d[-+]?[0-9.]+|x[-+]?[0-9a-f.]+)"
+                 insensitive="true" attribute="Scheme Value"/>
+        <RegExpr String="[+-](inf|nan)\.0" attribute="Scheme Value"/>
+        <RegExpr String="&schemefunc0;" attribute="Scheme Keyword"/>
+        <RegExpr String="&schemefunc1;" attribute="Scheme Keyword"/>
+        <RegExpr String="&schemefunc2;" attribute="Scheme Keyword"/>
+        <RegExpr String="&schemename;"/>
+      </context>
+
+      <context name="schemequote" attribute="Scheme" lineEndContext="#pop"
+               fallthrough="true" fallthroughContext="#pop">
+        <RegExpr String="&schemefunc0;"/>
+        <RegExpr String="&schemefunc1;"/>
+        <RegExpr String="&schemefunc2;"/>
+      </context>
+
+      <context name="schemelily" attribute="Normal Text" lineEndContext="#stay">
+        <Detect2Chars char="#" char1="}" attribute="Scheme Keyword" context="#pop" endRegion="schemelily"/>
+        <IncludeRules context="lilypond"/>
+      </context>
+
+      <context name="schemecommentline" attribute="Scheme Comment" lineEndContext="#pop">
+        <IncludeRules context="##Alerts"/>
+      </context>
+
+      <context name="schemecommentblock" attribute="Scheme Comment" lineEndContext="#stay">
+        <Detect2Chars char="!" char1="#" attribute="Scheme Comment" context="#pop" endRegion="schemecomment"/>
+        <IncludeRules context="##Alerts"/>
+      </context>
+
+      <context name="schemesub" attribute="Scheme Subst" lineEndContext="#pop"
+                fallthrough="true" fallthroughContext="#pop">
+        <RegExpr String="&schemename;" attribute="Scheme Subst" context="#pop"/>
+      </context>
+
+      <context name="schemestring" attribute="Scheme String" lineEndContext="#stay">
+        <DetectChar char="&quot;" attribute="Scheme String" context="#pop"/>
+        <RegExpr String="\\[0fnrtav\\&quot;]"/>
+      </context>
+
+      <!-- NoteMode -->
+      <context name="notemode" attribute="Other Mode" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectChar char="{" attribute="Keyword" context="notemode2" beginRegion="sequential"/>
+        <DetectSpaces/>
+      </context>
+
+      <context name="notemode2" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop#pop" endRegion="sequential"/>
+        <IncludeRules context="noterules"/>
+      </context>
+
+      <context name="noterules" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="{" attribute="Keyword" context="noterules" beginRegion="sequential"/>
+        <DetectChar char="}" attribute="Keyword" context="#pop" endRegion="sequential"/>
+        <IncludeRules context="music"/>
+      </context>
+
+      <!-- Drummode -->
+      <context name="drummode" attribute="Other Mode" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectChar char="{" attribute="Keyword" context="drummode2" beginRegion="sequential"/>
+        <DetectSpaces/>
+      </context>
+
+      <context name="drummode2" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop#pop" endRegion="sequential"/>
+        <IncludeRules context="drumrules"/>
+      </context>
+
+      <context name="drumrules" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="{" attribute="Keyword" context="drumrules" beginRegion="sequential"/>
+        <DetectChar char="}" attribute="Keyword" context="#pop" endRegion="sequential"/>
+        <RegExpr String="&lt;(?!&lt;)" attribute="Chord" context="drumchord"/>
+        <keyword attribute="Other Text" String="drumpitchnames" context="duration"/>
+        <IncludeRules context="music"/>
+      </context>
+
+      <context name="drumchord" attribute="Normal Text" lineEndContext="#stay">
+        <keyword attribute="Other Text" String="drumpitchnames"/>
+        <IncludeRules context="chord"/>
+      </context>
+
+      <!-- Chordmode -->
+      <context name="chordmode" attribute="Other Mode" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectChar char="{" attribute="Keyword" context="chordmode2" beginRegion="sequential"/>
+        <DetectSpaces/>
+      </context>
+
+      <context name="chordmode2" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop#pop" endRegion="sequential"/>
+        <IncludeRules context="chordrules"/>
+      </context>
+
+      <context name="chordrules" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="{" attribute="Keyword" context="chordrules" beginRegion="sequential"/>
+        <DetectChar char="}" attribute="Keyword" context="#pop" endRegion="sequential"/>
+        <RegExpr attribute="Other Text" String=":?([\.^]?\d+[-+]?|(m|dim|aug|maj|sus)&b;)*(/\+?&pitch;)?"/>
+        <IncludeRules context="music"/>
+      </context>
+
+      <!-- Figuremode -->
+      <context name="figuremode" attribute="Other Mode" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectChar char="{" attribute="Keyword" context="figuremode2" beginRegion="sequential"/>
+        <DetectSpaces/>
+      </context>
+
+      <context name="figuremode2" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop#pop" endRegion="sequential"/>
+        <IncludeRules context="figurerules"/>
+      </context>
+
+      <context name="figurerules" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="{" attribute="Keyword" context="figurerules" beginRegion="sequential"/>
+        <DetectChar char="}" attribute="Keyword" context="#pop" endRegion="sequential"/>
+        <DetectChar char="&lt;" attribute="Chord" context="figure"/>
+        <RegExpr String="&rest;" attribute="Pitch" context="duration"/>
+        <IncludeRules context="default"/>
+      </context>
+
+      <context name="figure" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="&gt;" attribute="Chord" context="chordend"/>
+        <IncludeRules context="basic"/>
+        <RegExpr String="\\markup(lines)?&b;" attribute="Markup" context="markup"/>
+        <RegExpr String="\\skip&b;" attribute="Command" context="duration"/>
+      </context>
+
+      <!-- Lyrics -->
+      <context name="lyricmode" attribute="Lyricmode" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectChar char="{" attribute="Keyword" context="lyricmode2" beginRegion="sequential"/>
+        <DetectSpaces/>
+      </context>
+
+      <context name="lyricmode2" attribute="Lyric Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop#pop" endRegion="sequential"/>
+        <IncludeRules context="lyricrules"/>
+      </context>
+
+      <!-- LyricsTo has extra parameter -->
+      <context name="lyricsto" attribute="Lyricmode" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <RegExpr String="&quot;(\\[&quot;\\]|[^&quot;\\])+&quot;" attribute="Quoted Text" context="lyricsto2"/>
+        <RegExpr String="[A-Za-z]+" attribute="Normal Text" context="lyricsto2"/>
+        <DetectSpaces/>
+      </context>
+
+      <context name="lyricsto2" attribute="Normal Text" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop#pop">
+        <DetectChar char="{" attribute="Keyword" context="lyricsto3" beginRegion="sequential"/>
+        <DetectSpaces/>
+      </context>
+
+      <context name="lyricsto3" attribute="Lyric Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop#pop#pop" endRegion="sequential"/>
+        <IncludeRules context="lyricrules"/>
+      </context>
+
+      <context name="lyricrules" attribute="Lyric Text" lineEndContext="#stay">
+        <DetectChar char="{" attribute="Keyword" context="lyricrules" beginRegion="sequential"/>
+        <DetectChar char="}" attribute="Keyword" context="#pop" endRegion="sequential"/>
+        <RegExpr String="(\w+-{2,}|\w+_{2,}|-{2,}\w+|_{2,}\w+)" attribute="Invalid"/><!-- two hyphens or underscores run together with a word -->
+        <RegExpr String="&duration;" attribute="Duration"/>
+        <RegExpr String="(--|__|_)" attribute="Lyricmode"/>
+        <IncludeRules context="default"/>
+        <RegExpr String="\S+\}" attribute="Invalid" context="#pop" endRegion="sequential"/>
+      </context>
+
+      <!-- Markup -->
+      <context name="markup" attribute="Normal Text" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectChar char="{" attribute="Keyword" context="markup2" beginRegion="markup"/>
+        <DetectSpaces/>
+        <RegExpr String="\\score\b" attribute="Markup" context="notemode"/>
+        <RegExpr String="\\(&markupwithtextargs;)&b;" attribute="Markup"/>
+        <RegExpr String="\\(&markupnotextargs;)&b;" attribute="Markup" context="#pop"/>
+        <DetectChar char="#" context="scheme"/>
+        <RegExpr String="[^&quot;\s\\#%{}$]+" attribute="Normal Text" context="#pop"/>
+      </context>
+
+      <context name="markup2" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop#pop" endRegion="markup"/>
+        <IncludeRules context="markuprules"/>
+      </context>
+
+      <context name="markuprules" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop" endRegion="markup"/>
+        <DetectChar char="{" attribute="Keyword" context="markuprules" beginRegion="markup"/>
+        <RegExpr String="\\score\b" attribute="Markup" context="notemode"/>
+        <RegExpr String="\\(&markupnotextargs;|&markupwithtextargs;)&b;" attribute="Markup"/>
+        <RegExpr String="\\(&deprecatedmarkup;)&b;" attribute="Deprecated Markup"/>
+        <RegExpr String="\\[A-Za-z]+(-[A-Za-z]+)*" attribute="User Command"/>
+        <IncludeRules context="basic"/>
+      </context>
+
+      <!-- \paper, \layout, \midi, \header, \with -->
+      <context name="section" attribute="Keyword" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectChar char="{" attribute="Keyword" context="section2" beginRegion="section"/>
+        <DetectSpaces/>
+      </context>
+
+      <context name="section2" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop#pop" endRegion="section"/>
+        <IncludeRules context="sectionrules"/>
+      </context>
+
+      <context name="sectionrules" attribute="Normal Text" lineEndContext="#stay">
+        <DetectChar char="}" attribute="Keyword" context="#pop" endRegion="section"/>
+        <DetectChar char="{" attribute="Keyword" context="sectionrules" beginRegion="section"/>
+        <keyword String="contexts" attribute="Context"/>
+        <keyword String="deprecatedcontexts" attribute="Deprecated Context"/>
+        <RegExpr String="(&quot;?)\b(&engravers00;)\b\1" attribute="Engraver"/>
+        <RegExpr String="(&quot;?)\b(&engravers01;)\b\1" attribute="Engraver"/>
+        <RegExpr String="(&quot;?)\b(&engravers02;)\b\1" attribute="Engraver"/>
+        <RegExpr String="(&quot;?)\b(&engravers1;)\b\1" attribute="Engraver"/>
+        <RegExpr String="(&quot;?)\b(&engravers2;)\b\1" attribute="Engraver"/>
+        <keyword String="layoutobjects" attribute="Layout Object"/>
+        <keyword String="properties" attribute="Property"/>
+        <RegExpr String="\b(&headervars;|&papervars;|&layoutvars;)\b" attribute="Variable"/>
+        <keyword String="deprecatedproperties" attribute="Deprecated Property"/>
+        <IncludeRules context="default"/>
+      </context>
+
+      <!-- \new, \context, \change -->
+      <context name="context" attribute="Normal Text" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces/>
+        <keyword String="contexts" attribute="Context" context="context2"/>
+        <keyword String="deprecatedcontexts" attribute="Deprecated Context" context="context2"/>
+        <RegExpr String="[A-Za-z]+" attribute="User Command" context="context2"/>
+        <DetectChar char="{" attribute="Keyword" context="section2" beginRegion="section"/>
+      </context>
+
+      <context name="context2" attribute="Normal Text" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop#pop">
+        <DetectSpaces/>
+        <RegExpr String="=(\s*[A-Za-z]+)?" attribute="Normal Text" context="#pop#pop"/>
+      </context>
+
+      <!-- \set, \unset -->
+      <context name="set" attribute="Normal Text" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces/>
+        <keyword String="contexts" attribute="Context"/>
+        <keyword String="deprecatedcontexts" attribute="Deprecated Context"/>
+        <DetectChar char="."/>
+        <keyword String="properties" attribute="Property" context="#pop"/>
+        <keyword String="deprecatedproperties" attribute="Deprecated Property" context="#pop"/>
+        <RegExpr String="[A-Za-z]+" attribute="User Command" context="#pop"/>
+      </context>
+
+      <!-- \override, \overrideProperty, \revert -->
+      <context name="override" attribute="Normal Text" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces/>
+        <keyword String="contexts" attribute="Context"/>
+        <keyword String="deprecatedcontexts" attribute="Deprecated Context"/>
+        <DetectChar char="."/>
+        <keyword String="layoutobjects" attribute="Layout Object" context="#pop"/>
+        <RegExpr String="[A-Za-z]+(?=\s*\.)" attribute="User Command"/>
+        <RegExpr String="[A-Za-z]+" attribute="User Command" context="#pop"/>
+      </context>
+
+      <!-- special cases for individual commands -->
+      <!-- \tempo -->
+      <context name="tempo" attribute="Normal Text" lineEndContext="#stay"
+               fallthrough="true" fallthroughContext="#pop">
+        <RegExpr String="\\markup(lines)?&b;" attribute="Markup" context="markup"/>
+        <RegExpr String="\d+\.*\s*=\s*\d+" attribute="Command" context="#pop"/>
+        <DetectSpaces/>
+        <IncludeRules context="basic"/>
+      </context>
+
+    </contexts>
+    <itemDatas>
+      <itemData name="Pitch" defStyleNum="dsNormal"/>
+      <itemData name="Duration" defStyleNum="dsDataType"/>
+      <itemData name="Slur" defStyleNum="dsChar" bold="true"/>
+      <itemData name="Dynamic" defStyleNum="dsString" color="#ee5000" bold="true"/>
+      <itemData name="Articulation" defStyleNum="dsString" color="#ee5000" bold="true"/>
+      <itemData name="Chord" defStyleNum="dsDataType" bold="true"/>
+      <itemData name="Beam" defStyleNum="dsDataType" bold="true"/>
+      <itemData name="Check" defStyleNum="dsDecVal"/>
+      <itemData name="Repeat" defStyleNum="dsDataType" italic="true"/>
+      <itemData name="Keyword" defStyleNum="dsKeyword"/>
+      <itemData name="Command" defStyleNum="dsFunction" bold="true"/>
+      <itemData name="User Command" defStyleNum="dsFunction"/>
+      <itemData name="Context" defStyleNum="dsDataType" bold="true"/>
+      <itemData name="Layout Object" defStyleNum="dsDataType"/>
+      <itemData name="Property" defStyleNum="dsDataType"/>
+      <itemData name="Variable" defStyleNum="dsDataType"/>
+      <itemData name="Engraver" defStyleNum="dsDataType"/>
+      <itemData name="Markup" defStyleNum="dsBaseN" color="#009817"/>
+      <itemData name="Lyricmode" defStyleNum="dsKeyword" color="#007010"/>
+      <itemData name="Lyric Text" defStyleNum="dsNormal" color="#007010"/>
+      <itemData name="Other Mode" defStyleNum="dsKeyword" color="#0094e4"/>
+      <itemData name="Other Text" defStyleNum="dsNormal" color="#0094e4"/>
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Quoted Text" defStyleNum="dsString"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="Scheme" defStyleNum="dsFloat" backgroundColor="#fff6ff"/>
+      <itemData name="Scheme Keyword" defStyleNum="dsFloat" bold="true" backgroundColor="#fff6ff"/>
+      <itemData name="Scheme Subst" defStyleNum="dsDecVal" bold="true" backgroundColor="#fff6ff"/>
+      <itemData name="Scheme Value" defStyleNum="dsDecVal" backgroundColor="#fff6ff"/>
+      <itemData name="Scheme String" defStyleNum="dsString" backgroundColor="#fff6ff"/>
+      <itemData name="Scheme Comment" defStyleNum="dsComment" backgroundColor="#fff6ff"/>
+      <itemData name="Deprecated Keyword" defStyleNum="dsKeyword" backgroundColor="#fcc"/>
+      <itemData name="Deprecated Command" defStyleNum="dsFunction" backgroundColor="#fcc"/>
+      <itemData name="Deprecated Property" defStyleNum="dsDataType" backgroundColor="#fcc"/>
+      <itemData name="Deprecated Context" defStyleNum="dsDataType" bold="true" backgroundColor="#fcc"/>
+      <itemData name="Deprecated Markup" defStyleNum="dsBaseN" color="#009817" backgroundColor="#fcc"/>
+      <itemData name="Invalid" defStyleNum="dsError"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="%"/>
+      <comment name="multiLine" start="%{" end="%}" region="comment"/>
+    </comments>
+    <keywords casesensitive="true" additionalDeliminator="'_0123456789"/>
+  </general>
+</language>
+<!--
+  kate: space-indent on; indent-width 2; replace-tabs on;
+-->
diff --git a/xml/literate-haskell.xml b/xml/literate-haskell.xml
--- a/xml/literate-haskell.xml
+++ b/xml/literate-haskell.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Literate Haskell" version="2.0.2" kateversion="2.3" section="Sources" extensions="*.lhs" mimetype="text/x-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL">
+<language name="Literate Haskell" version="2.1" kateversion="2.3" section="Sources" extensions="*.lhs" mimetype="text/x-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL">
   <highlighting>
   <contexts>
     <context attribute="Text" lineEndContext="#stay" name="text">
diff --git a/xml/lua.xml.patch b/xml/lua.xml.patch
new file mode 100644
--- /dev/null
+++ b/xml/lua.xml.patch
@@ -0,0 +1,14 @@
+diff --git a/lua.xml b/lua.xml
+index 97e6b21..81bce25 100644
+--- a/lua.xml
++++ b/lua.xml
+@@ -282,3 +282,3 @@
+       <itemData name="Comment"         defStyleNum="dsComment"/>
+-      <itemData name="Constant"        defStyleNum="dsKeyword" spellChecking="false"/>
++      <itemData name="Constant"        defStyleNum="dsNormal" /> <!-- JGM -->
+       <itemData name="Control"         defStyleNum="dsKeyword" color="#A1A100" selColor="#ffffff" bold="0" italic="0" spellChecking="false"/>
+@@ -289,3 +289,3 @@
+       <itemData name="Symbols"         defStyleNum="dsOthers" spellChecking="false"/>
+-      <itemData name="Variable"        defStyleNum="dsKeyword" color="#5555FF" selColor="#ffffff" bold="0" italic="0" spellChecking="false"/>
++      <itemData name="Variable"        defStyleNum="dsNormal" /> <!-- JGM -->
+     </itemDatas>
diff --git a/xml/m4.xml b/xml/m4.xml
new file mode 100644
--- /dev/null
+++ b/xml/m4.xml
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<!--
+
+  GNU M4 syntax highlightning.
+  Corresponds to GNU M4 version 1.4.16.
+
+  For KatePart (Kate, KWrite etc) copy this file to
+    ~/.kde/share/apps/katepart/syntax/
+
+  For Qt Creator copy this file to
+    ~/.config/Nokia/qtcreator/generic-highlighter/
+
+
+  Copyright (c) 2011, Cybernetica AS ( http://www.cyber.ee/ )
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in the
+        documentation and/or other materials provided with the distribution.
+      * Neither the name of Cybernetica AS nor the names of its contributors
+        may be used to endorse or promote products derived from this software
+        without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  DISCLAIMED. IN NO EVENT SHALL  Cybernetica AS  BE LIABLE FOR ANY
+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<language name="GNU M4" version="1.1" section="Sources" kateversion="2.5" extensions="*.m4;" author="Jaak Ristioja" license="New BSD License">
+  <highlighting>
+    <list name="optbuiltins">
+      <item> __gnu__ </item>
+      <item> __os2__ </item>
+      <item> os2 </item>
+      <item> __unix__ </item>
+      <item> unix </item>
+      <item> __windows__ </item>
+      <item> windows </item>
+    </list>
+    <list name="m4_optbuiltins">
+      <item> m4___gnu__ </item>
+      <item> m4___os2__ </item>
+      <item> m4_os2 </item>
+      <item> m4___unix__ </item>
+      <item> m4_unix </item>
+      <item> m4___windows__ </item>
+      <item> m4_windows </item>
+    </list>
+    <list name="builtins">
+      <item> __file__ </item>
+      <item> __line__ </item>
+      <item> __program__ </item>
+      <item> builtin </item>
+      <item> changecom </item>
+      <item> changequote </item>
+      <item> changeword </item>
+      <item> debugfile </item>
+      <item> debugmode </item>
+      <item> decr </item>
+      <item> define </item>
+      <item> defn </item>
+      <item> divert </item>
+      <item> divnum </item>
+      <item> dnl </item>
+      <item> dumpdef </item>
+      <item> errprint </item>
+      <item> esyscmd </item>
+      <item> eval </item>
+      <item> format </item>
+      <item> ifdef </item>
+      <item> ifelse </item>
+      <item> include </item>
+      <item> incr </item>
+      <item> index </item>
+      <item> indir </item>
+      <item> len </item>
+      <item> m4exit </item>
+      <item> m4wrap </item>
+      <item> maketemp </item>
+      <item> mkstemp </item>
+      <item> patsubst </item>
+      <item> popdef </item>
+      <item> pushdef </item>
+      <item> regexp </item>
+      <item> shift </item>
+      <item> sinclude </item>
+      <item> substr </item>
+      <item> syscmd </item>
+      <item> sysval </item>
+      <item> traceon </item>
+      <item> traceoff </item>
+      <item> translit </item>
+      <item> undefine </item>
+      <item> undivert </item>
+    </list>
+    <list name="m4_builtins">
+      <item> m4___file__ </item>
+      <item> m4___line__ </item>
+      <item> m4___program__ </item>
+      <item> m4_builtin </item>
+      <item> m4_changecom </item>
+      <item> m4_changequote </item>
+      <item> m4_changeword </item>
+      <item> m4_debugfile </item>
+      <item> m4_debugmode </item>
+      <item> m4_decr </item>
+      <item> m4_define </item>
+      <item> m4_defn </item>
+      <item> m4_divert </item>
+      <item> m4_divnum </item>
+      <item> m4_dnl </item>
+      <item> m4_dumpdef </item>
+      <item> m4_errprint </item>
+      <item> m4_esyscmd </item>
+      <item> m4_eval </item>
+      <item> m4_format </item>
+      <item> m4_ifdef </item>
+      <item> m4_ifelse </item>
+      <item> m4_include </item>
+      <item> m4_incr </item>
+      <item> m4_index </item>
+      <item> m4_indir </item>
+      <item> m4_len </item>
+      <item> m4_m4exit </item>
+      <item> m4_m4wrap </item>
+      <item> m4_maketemp </item>
+      <item> m4_mkstemp </item>
+      <item> m4_patsubst </item>
+      <item> m4_popdef </item>
+      <item> m4_pushdef </item>
+      <item> m4_regexp </item>
+      <item> m4_shift </item>
+      <item> m4_sinclude </item>
+      <item> m4_substr </item>
+      <item> m4_syscmd </item>
+      <item> m4_sysval </item>
+      <item> m4_traceon </item>
+      <item> m4_traceoff </item>
+      <item> m4_translit </item>
+      <item> m4_undefine </item>
+      <item> m4_undivert </item>
+    </list>
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Normal Text">
+        <keyword attribute="Builtins" String="builtins" context="#stay"/>
+        <keyword attribute="Builtins (prefixed with m4_)" String="m4_builtins" context="#stay"/>
+        <keyword attribute="Optional builtins" String="optbuiltins" context="#stay"/>
+        <keyword attribute="Optional builtins (prefixed with m4_)" String="m4_optbuiltins" context="#stay"/>
+        <RegExpr attribute="Normal Text" String="[a-zA-Z_]\w+" context="#stay"/>
+        <RegExpr attribute="Special arguments to macros" String="\$([1-9]\d*|0|\#|\*|\@|\{([1-9]\d*|0)\})" context="#stay"/>
+        <RegExpr attribute="Int" String="([1-9]\d*|0|0x[0-9abcdefABCDEF]+)" context="#stay"/>
+        <RegExpr attribute="Comment" String="#.*$" context="#stay"/>
+        <DetectChar attribute="Commas" char="," context="#stay"/>
+        <DetectChar attribute="Operators" char="(" context="inparenthesis" beginRegion="parenthesis"/>
+        <DetectChar attribute="Operators" char=")" context="#pop" endRegion="parenthesis"/>
+        <RegExpr attribute="Operators" String="[+*/%\|=\!&lt;&gt;!^&amp;~-]" context="#stay"/>
+      </context>
+      <context name="inparenthesis" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
+        <IncludeRules context="Normal Text" />
+      </context>
+    </contexts>
+    <itemDatas>
+      <itemData name="Builtins" defStyleNum="dsKeyword"/>
+      <itemData name="Builtins (prefixed with m4_)" defStyleNum="dsKeyword"/>
+      <itemData name="Optional builtins" defStyleNum="dsKeyword"/>
+      <itemData name="Optional builtins (prefixed with m4_)" defStyleNum="dsKeyword"/>
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Special arguments to macros" defStyleNum="dsChar"/>
+      <itemData name="Int" defStyleNum="dsDecVal"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="Commas" defStyleNum="dsChar"/>
+      <itemData name="Operators" defStyleNum="dsChar"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <folding indentationsensitive="1" />
+    <comments>
+      <comment name="singleLine" start="#" position="afterwhitespace"/>
+    </comments>
+  </general>
+</language>
diff --git a/xml/markdown.xml b/xml/markdown.xml
--- a/xml/markdown.xml
+++ b/xml/markdown.xml
@@ -35,7 +35,7 @@
 <!ENTITY strikeoutregex "[~]{2}[^~].*[^~][~]{2}">
 <!-- pandoc style -->
 ]>
-<language name="Markdown" version="1.3" kateversion="3.7" section="Markup" extensions="*.md;*.mmd;*.markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
+<language name="Markdown" version="1.4" kateversion="3.7" section="Markup" extensions="*.md;*.mmd;*.markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
   <highlighting>
     <contexts>
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal Text">
@@ -56,17 +56,17 @@
         <RegExpr attribute="meta" String="^(Title|Author|Date|Copyright|Revision|CSS|LaTeX\ XSLT|Categories|Tags|BaseName|Excerpt):(.*)+$"/>
         <IncludeRules context="inc"/>
       </context>
-      <context attribute="blockquote" lineEndContext="#pop" name="blockquote">
+      <context attribute="blockquote" lineEndContext="#stay" lineEmptyContext="#pop" name="blockquote">
         <RegExpr attribute="bq-strong" String="&strongregex;"/>
         <RegExpr attribute="bq-emphasis" String="&emphasisregex;"/>
         <IncludeRules context="inc"/>
       </context>
-      <context attribute="bullet" lineEndContext="#pop" name="bullet">
+      <context attribute="bullet" lineEndContext="#stay" lineEmptyContext="#pop" name="bullet">
         <RegExpr attribute="bl-strong" String="&strongregex;"/>
         <RegExpr attribute="bl-emphasis" String="&emphasisregex;"/>
         <IncludeRules context="inc"/>
       </context>
-      <context attribute="numlist" lineEndContext="#pop" name="numlist">
+      <context attribute="numlist" lineEndContext="#stay" lineEmptyContext="#pop" name="numlist">
         <RegExpr attribute="nl-strong" String="&strongregex;"/>
         <RegExpr attribute="nl-emphasis" String="&emphasisregex;"/>
         <IncludeRules context="inc"/>
diff --git a/xml/mathematica.xml b/xml/mathematica.xml
new file mode 100644
--- /dev/null
+++ b/xml/mathematica.xml
@@ -0,0 +1,3229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="Mathematica" version="8.1" kateversion="2.4" section="Scientific" extensions="*.nb" indenter="cstyle"
+          author="Sven Brauch (svenbrauch@gmail.com)" license="LGPL" priority="3">
+  <highlighting>
+    <list name="functions">
+      <item>A</item>
+      <item>AbelianGroup</item>
+      <item>All</item>
+      <item>ArcSinh</item>
+      <item>Abort</item>
+      <item>AllowGroupClose</item>
+      <item>ArcTan</item>
+      <item>AbortKernels</item>
+      <item>AllowReverseGroupClose</item>
+      <item>ArcTanh</item>
+      <item>AbortProtect</item>
+      <item>AlphaChannel</item>
+      <item>Arg</item>
+      <item>Abs</item>
+      <item>AlternatingGroup</item>
+      <item>ArgMax</item>
+      <item>AbsoluteCurrentValue</item>
+      <item>AlternativeHypothesis</item>
+      <item>ArgMin</item>
+      <item>AbsoluteDashing</item>
+      <item>Alternatives</item>
+      <item>ArithmeticGeometricMean</item>
+      <item>AbsoluteFileName</item>
+      <item>AnchoredSearch</item>
+      <item>Array</item>
+      <item>AbsoluteOptions</item>
+      <item>And</item>
+      <item>ArrayComponents</item>
+      <item>AbsolutePointSize</item>
+      <item>AndersonDarlingTest</item>
+      <item>ArrayDepth</item>
+      <item>AbsoluteThickness</item>
+      <item>AngerJ</item>
+      <item>ArrayFlatten</item>
+      <item>AbsoluteTime</item>
+      <item>AngleBracket</item>
+      <item>ArrayPad</item>
+      <item>AbsoluteTiming</item>
+      <item>Animate</item>
+      <item>ArrayPlot</item>
+      <item>AccountingForm</item>
+      <item>AnimationDirection</item>
+      <item>ArrayQ</item>
+      <item>Accumulate</item>
+      <item>AnimationDisplayTime</item>
+      <item>ArrayRules</item>
+      <item>Accuracy</item>
+      <item>AnimationRate</item>
+      <item>Arrow</item>
+      <item>AccuracyGoal</item>
+      <item>AnimationRepetitions</item>
+      <item>Arrowheads</item>
+      <item>ActionMenu</item>
+      <item>AnimationRunning</item>
+      <item>AspectRatio</item>
+      <item>ActiveStyle</item>
+      <item>Animator</item>
+      <item>Assert</item>
+      <item>AcyclicGraphQ</item>
+      <item>Annotation</item>
+      <item>Assuming</item>
+      <item>AddTo</item>
+      <item>Annuity</item>
+      <item>Assumptions</item>
+      <item>AdjacencyGraph</item>
+      <item>AnnuityDue</item>
+      <item>AstronomicalData</item>
+      <item>AdjacencyMatrix</item>
+      <item>Antialiasing</item>
+      <item>Asynchronous</item>
+      <item>AdjustmentBox</item>
+      <item>Apart</item>
+      <item>AtomQ</item>
+      <item>AffineTransform</item>
+      <item>ApartSquareFree</item>
+      <item>Attributes</item>
+      <item>AiryAi</item>
+      <item>Appearance</item>
+      <item>AugmentedSymmetricPolynomial</item>
+      <item>AiryAiPrime</item>
+      <item>AppearanceElements</item>
+      <item>AutoAction</item>
+      <item>AiryAiZero</item>
+      <item>AppellF1</item>
+      <item>AutoIndent</item>
+      <item>AiryBi</item>
+      <item>Append</item>
+      <item>AutoItalicWords</item>
+      <item>AiryBiPrime</item>
+      <item>AppendTo</item>
+      <item>Automatic</item>
+      <item>AiryBiZero</item>
+      <item>Apply</item>
+      <item>AutoMultiplicationSymbol</item>
+      <item>AlgebraicIntegerQ</item>
+      <item>ArcCos</item>
+      <item>AutorunSequencing</item>
+      <item>AlgebraicNumber</item>
+      <item>ArcCosh</item>
+      <item>AutoScroll</item>
+      <item>AlgebraicNumberDenominator</item>
+      <item>ArcCot</item>
+      <item>AutoSpacing</item>
+      <item>AlgebraicNumberNorm</item>
+      <item>ArcCoth</item>
+      <item>Axes</item>
+      <item>AlgebraicNumberPolynomial</item>
+      <item>ArcCsc</item>
+      <item>AxesEdge</item>
+      <item>AlgebraicNumberTrace</item>
+      <item>ArcCsch</item>
+      <item>AxesLabel</item>
+      <item>Algebraics</item>
+      <item>ArcSec</item>
+      <item>AxesOrigin</item>
+      <item>AlgebraicUnitQ</item>
+      <item>ArcSech</item>
+      <item>AxesStyle</item>
+      <item>Alignment</item>
+      <item>ArcSin</item>
+      <item>Axis</item>
+      <item>AlignmentPoint</item>
+      <item>ArcSinDistribution</item>
+      <item>B</item>
+      <item>BabyMonsterGroupB</item>
+      <item>BetaRegularized</item>
+      <item>BooleanGraph</item>
+      <item>Back</item>
+      <item>BetweennessCentrality</item>
+      <item>BooleanMaxterms</item>
+      <item>Background</item>
+      <item>BezierCurve</item>
+      <item>BooleanMinimize</item>
+      <item>Backslash</item>
+      <item>BezierFunction</item>
+      <item>BooleanMinterms</item>
+      <item>Backward</item>
+      <item>BilateralFilter</item>
+      <item>Booleans</item>
+      <item>Band</item>
+      <item>Binarize</item>
+      <item>BooleanTable</item>
+      <item>BarabasiAlbertGraphDistribution</item>
+      <item>BinaryFormat</item>
+      <item>BooleanVariables</item>
+      <item>BarChart</item>
+      <item>BinaryImageQ</item>
+      <item>BorderDimensions</item>
+      <item>BarChart3D</item>
+      <item>BinaryRead</item>
+      <item>BorelTannerDistribution</item>
+      <item>BarnesG</item>
+      <item>BinaryReadList</item>
+      <item>Bottom</item>
+      <item>BarOrigin</item>
+      <item>BinaryWrite</item>
+      <item>BottomHatTransform</item>
+      <item>BarSpacing</item>
+      <item>BinCounts</item>
+      <item>BoundaryStyle</item>
+      <item>BaseForm</item>
+      <item>BinLists</item>
+      <item>BoxData</item>
+      <item>Baseline</item>
+      <item>Binomial</item>
+      <item>Boxed</item>
+      <item>BaselinePosition</item>
+      <item>BinomialDistribution</item>
+      <item>BoxMatrix</item>
+      <item>BaseStyle</item>
+      <item>BinormalDistribution</item>
+      <item>BoxRatios</item>
+      <item>BatesDistribution</item>
+      <item>BiorthogonalSplineWavelet</item>
+      <item>BoxStyle</item>
+      <item>BattleLemarieWavelet</item>
+      <item>BipartiteGraphQ</item>
+      <item>BoxWhiskerChart</item>
+      <item>Because</item>
+      <item>BirnbaumSaundersDistribution</item>
+      <item>BracketingBar</item>
+      <item>BeckmannDistribution</item>
+      <item>BitAnd</item>
+      <item>BrayCurtisDistance</item>
+      <item>Beep</item>
+      <item>BitClear</item>
+      <item>BreadthFirstScan</item>
+      <item>Begin</item>
+      <item>BitGet</item>
+      <item>Break</item>
+      <item>BeginDialogPacket</item>
+      <item>BitLength</item>
+      <item>Brown</item>
+      <item>BeginPackage</item>
+      <item>BitNot</item>
+      <item>BrownForsytheTest</item>
+      <item>BellB</item>
+      <item>BitOr</item>
+      <item>BSplineBasis</item>
+      <item>BellY</item>
+      <item>BitSet</item>
+      <item>BSplineCurve</item>
+      <item>BenfordDistribution</item>
+      <item>BitShiftLeft</item>
+      <item>BSplineFunction</item>
+      <item>BeniniDistribution</item>
+      <item>BitShiftRight</item>
+      <item>BSplineSurface</item>
+      <item>BenktanderGibratDistribution</item>
+      <item>BitXor</item>
+      <item>BubbleChart</item>
+      <item>BenktanderWeibullDistribution</item>
+      <item>Black</item>
+      <item>BubbleChart3D</item>
+      <item>BernoulliB</item>
+      <item>Blank</item>
+      <item>BubbleScale</item>
+      <item>BernoulliDistribution</item>
+      <item>BlankNullSequence</item>
+      <item>BubbleSizes</item>
+      <item>BernoulliGraphDistribution</item>
+      <item>BlankSequence</item>
+      <item>ButterflyGraph</item>
+      <item>BernsteinBasis</item>
+      <item>Blend</item>
+      <item>Button</item>
+      <item>BesselI</item>
+      <item>Block</item>
+      <item>ButtonBar</item>
+      <item>BesselJ</item>
+      <item>BlockRandom</item>
+      <item>ButtonBox</item>
+      <item>BesselJZero</item>
+      <item>Blue</item>
+      <item>ButtonData</item>
+      <item>BesselK</item>
+      <item>Blur</item>
+      <item>ButtonFrame</item>
+      <item>BesselY</item>
+      <item>BodePlot</item>
+      <item>ButtonFunction</item>
+      <item>BesselYZero</item>
+      <item>Bold</item>
+      <item>ButtonMinHeight</item>
+      <item>Beta</item>
+      <item>Bookmarks</item>
+      <item>ButtonNotebook</item>
+      <item>BetaBinomialDistribution</item>
+      <item>Boole</item>
+      <item>ButtonSource</item>
+      <item>BetaDistribution</item>
+      <item>BooleanConvert</item>
+      <item>Byte</item>
+      <item>BetaNegativeBinomialDistribution</item>
+      <item>BooleanCountingFunction</item>
+      <item>ByteCount</item>
+      <item>BetaPrimeDistribution</item>
+      <item>BooleanFunction</item>
+      <item>ByteOrdering</item>
+      <item>C</item>
+      <item>C</item>
+      <item>CityData</item>
+      <item>ContinuousAction</item>
+      <item>CallPacket</item>
+      <item>Clear</item>
+      <item>ContinuousTimeModelQ</item>
+      <item>CanberraDistance</item>
+      <item>ClearAll</item>
+      <item>ContinuousWaveletData</item>
+      <item>Cancel</item>
+      <item>ClearAttributes</item>
+      <item>ContinuousWaveletTransform</item>
+      <item>CancelButton</item>
+      <item>ClearSystemCache</item>
+      <item>ContourDetect</item>
+      <item>CandlestickChart</item>
+      <item>ClebschGordan</item>
+      <item>ContourLabels</item>
+      <item>Cap</item>
+      <item>ClickPane</item>
+      <item>ContourPlot</item>
+      <item>CapForm</item>
+      <item>Clip</item>
+      <item>ContourPlot3D</item>
+      <item>CapitalDifferentialD</item>
+      <item>ClippingStyle</item>
+      <item>Contours</item>
+      <item>CarmichaelLambda</item>
+      <item>Clock</item>
+      <item>ContourShading</item>
+      <item>Cases</item>
+      <item>Close</item>
+      <item>ContourStyle</item>
+      <item>Cashflow</item>
+      <item>CloseKernels</item>
+      <item>ContraharmonicMean</item>
+      <item>Casoratian</item>
+      <item>ClosenessCentrality</item>
+      <item>Control</item>
+      <item>Catalan</item>
+      <item>Closing</item>
+      <item>ControlActive</item>
+      <item>CatalanNumber</item>
+      <item>ClusteringComponents</item>
+      <item>ControllabilityGramian</item>
+      <item>Catch</item>
+      <item>CMYKColor</item>
+      <item>ControllabilityMatrix</item>
+      <item>CauchyDistribution</item>
+      <item>Coefficient</item>
+      <item>ControllableDecomposition</item>
+      <item>CayleyGraph</item>
+      <item>CoefficientArrays</item>
+      <item>ControllableModelQ</item>
+      <item>CDF</item>
+      <item>CoefficientList</item>
+      <item>ControllerInformation</item>
+      <item>CDFWavelet</item>
+      <item>CoefficientRules</item>
+      <item>ControllerLinking</item>
+      <item>Ceiling</item>
+      <item>CoifletWavelet</item>
+      <item>ControllerManipulate</item>
+      <item>Cell</item>
+      <item>Collect</item>
+      <item>ControllerMethod</item>
+      <item>CellAutoOverwrite</item>
+      <item>Colon</item>
+      <item>ControllerPath</item>
+      <item>CellBaseline</item>
+      <item>ColorCombine</item>
+      <item>ControllerState</item>
+      <item>CellChangeTimes</item>
+      <item>ColorConvert</item>
+      <item>ControlPlacement</item>
+      <item>CellContext</item>
+      <item>ColorData</item>
+      <item>ControlsRendering</item>
+      <item>CellDingbat</item>
+      <item>ColorDataFunction</item>
+      <item>ControlType</item>
+      <item>CellDynamicExpression</item>
+      <item>ColorFunction</item>
+      <item>Convergents</item>
+      <item>CellEditDuplicate</item>
+      <item>ColorFunctionScaling</item>
+      <item>ConversionRules</item>
+      <item>CellEpilog</item>
+      <item>Colorize</item>
+      <item>Convolve</item>
+      <item>CellEvaluationDuplicate</item>
+      <item>ColorNegate</item>
+      <item>ConwayGroupCo1</item>
+      <item>CellEvaluationFunction</item>
+      <item>ColorQuantize</item>
+      <item>ConwayGroupCo2</item>
+      <item>CellEventActions</item>
+      <item>ColorRules</item>
+      <item>ConwayGroupCo3</item>
+      <item>CellFrame</item>
+      <item>ColorSeparate</item>
+      <item>CoordinatesToolOptions</item>
+      <item>CellFrameMargins</item>
+      <item>ColorSetter</item>
+      <item>CoprimeQ</item>
+      <item>CellGroup</item>
+      <item>ColorSlider</item>
+      <item>Coproduct</item>
+      <item>CellGroupData</item>
+      <item>ColorSpace</item>
+      <item>CopulaDistribution</item>
+      <item>CellGrouping</item>
+      <item>Column</item>
+      <item>Copyable</item>
+      <item>CellLabel</item>
+      <item>ColumnAlignments</item>
+      <item>CopyDirectory</item>
+      <item>CellLabelAutoDelete</item>
+      <item>ColumnLines</item>
+      <item>CopyFile</item>
+      <item>CellMargins</item>
+      <item>ColumnsEqual</item>
+      <item>CopyToClipboard</item>
+      <item>CellOpen</item>
+      <item>ColumnSpacings</item>
+      <item>CornerFilter</item>
+      <item>CellPrint</item>
+      <item>ColumnWidths</item>
+      <item>CornerNeighbors</item>
+      <item>CellProlog</item>
+      <item>Commonest</item>
+      <item>Correlation</item>
+      <item>CellTags</item>
+      <item>CommonestFilter</item>
+      <item>CorrelationDistance</item>
+      <item>CellularAutomaton</item>
+      <item>CompilationOptions</item>
+      <item>Cos</item>
+      <item>CensoredDistribution</item>
+      <item>CompilationTarget</item>
+      <item>Cosh</item>
+      <item>Censoring</item>
+      <item>Compile</item>
+      <item>CoshIntegral</item>
+      <item>Center</item>
+      <item>Compiled</item>
+      <item>CosineDistance</item>
+      <item>CenterDot</item>
+      <item>CompiledFunction</item>
+      <item>CosIntegral</item>
+      <item>CentralMoment</item>
+      <item>Complement</item>
+      <item>Cot</item>
+      <item>CentralMomentGeneratingFunction</item>
+      <item>CompleteGraph</item>
+      <item>Coth</item>
+      <item>CForm</item>
+      <item>CompleteGraphQ</item>
+      <item>Count</item>
+      <item>ChampernowneNumber</item>
+      <item>CompleteKaryTree</item>
+      <item>CountRoots</item>
+      <item>ChanVeseBinarize</item>
+      <item>Complex</item>
+      <item>CountryData</item>
+      <item>Character</item>
+      <item>Complexes</item>
+      <item>Covariance</item>
+      <item>CharacterEncoding</item>
+      <item>ComplexExpand</item>
+      <item>CovarianceEstimatorFunction</item>
+      <item>CharacteristicFunction</item>
+      <item>ComplexInfinity</item>
+      <item>CramerVonMisesTest</item>
+      <item>CharacteristicPolynomial</item>
+      <item>ComplexityFunction</item>
+      <item>CreateArchive</item>
+      <item>CharacterRange</item>
+      <item>ComponentMeasurements</item>
+      <item>CreateDialog</item>
+      <item>Characters</item>
+      <item>ComposeList</item>
+      <item>CreateDirectory</item>
+      <item>ChartBaseStyle</item>
+      <item>ComposeSeries</item>
+      <item>CreateDocument</item>
+      <item>ChartElementFunction</item>
+      <item>Composition</item>
+      <item>CreateIntermediateDirectories</item>
+      <item>ChartElements</item>
+      <item>CompoundExpression</item>
+      <item>CreatePalette</item>
+      <item>ChartLabels</item>
+      <item>Compress</item>
+      <item>CreateScheduledTask</item>
+      <item>ChartLayout</item>
+      <item>Condition</item>
+      <item>CreateWindow</item>
+      <item>ChartLegends</item>
+      <item>ConditionalExpression</item>
+      <item>CriticalSection</item>
+      <item>ChartStyle</item>
+      <item>Conditioned</item>
+      <item>Cross</item>
+      <item>ChebyshevT</item>
+      <item>Cone</item>
+      <item>CrossingDetect</item>
+      <item>ChebyshevU</item>
+      <item>ConfidenceLevel</item>
+      <item>CrossMatrix</item>
+      <item>Check</item>
+      <item>Congruent</item>
+      <item>Csc</item>
+      <item>CheckAbort</item>
+      <item>Conjugate</item>
+      <item>Csch</item>
+      <item>Checkbox</item>
+      <item>ConjugateTranspose</item>
+      <item>Cubics</item>
+      <item>CheckboxBar</item>
+      <item>Conjunction</item>
+      <item>Cuboid</item>
+      <item>ChemicalData</item>
+      <item>ConnectedComponents</item>
+      <item>Cumulant</item>
+      <item>ChessboardDistance</item>
+      <item>ConnectedGraphQ</item>
+      <item>CumulantGeneratingFunction</item>
+      <item>ChiDistribution</item>
+      <item>ConoverTest</item>
+      <item>Cup</item>
+      <item>ChineseRemainder</item>
+      <item>Constant</item>
+      <item>CupCap</item>
+      <item>ChiSquareDistribution</item>
+      <item>ConstantArray</item>
+      <item>CurrentImage</item>
+      <item>ChoiceButtons</item>
+      <item>Constants</item>
+      <item>CurrentValue</item>
+      <item>ChoiceDialog</item>
+      <item>ContentPadding</item>
+      <item>CurvatureFlowFilter</item>
+      <item>CholeskyDecomposition</item>
+      <item>ContentSelectable</item>
+      <item>CurveClosed</item>
+      <item>Chop</item>
+      <item>ContentSize</item>
+      <item>Cyan</item>
+      <item>Circle</item>
+      <item>Context</item>
+      <item>CycleGraph</item>
+      <item>CircleDot</item>
+      <item>Contexts</item>
+      <item>Cycles</item>
+      <item>CircleMinus</item>
+      <item>ContextToFileName</item>
+      <item>CyclicGroup</item>
+      <item>CirclePlus</item>
+      <item>Continue</item>
+      <item>Cyclotomic</item>
+      <item>CircleTimes</item>
+      <item>ContinuedFraction</item>
+      <item>Cylinder</item>
+      <item>CirculantGraph</item>
+      <item>ContinuedFractionK</item>
+      <item>CylindricalDecomposition</item>
+      <item>D</item>
+      <item>D</item>
+      <item>DepthFirstScan</item>
+      <item>DiskMatrix</item>
+      <item>DagumDistribution</item>
+      <item>Derivative</item>
+      <item>Dispatch</item>
+      <item>DamerauLevenshteinDistance</item>
+      <item>DerivativeFilter</item>
+      <item>DispersionEstimatorFunction</item>
+      <item>Darker</item>
+      <item>DesignMatrix</item>
+      <item>DisplayAllSteps</item>
+      <item>Dashed</item>
+      <item>Det</item>
+      <item>DisplayEndPacket</item>
+      <item>Dashing</item>
+      <item>DGaussianWavelet</item>
+      <item>DisplayForm</item>
+      <item>DataDistribution</item>
+      <item>Diagonal</item>
+      <item>DisplayFunction</item>
+      <item>DataRange</item>
+      <item>DiagonalMatrix</item>
+      <item>DisplayPacket</item>
+      <item>DataReversed</item>
+      <item>Dialog</item>
+      <item>DistanceFunction</item>
+      <item>DateDifference</item>
+      <item>DialogInput</item>
+      <item>DistanceTransform</item>
+      <item>DateFunction</item>
+      <item>DialogNotebook</item>
+      <item>Distribute</item>
+      <item>DateList</item>
+      <item>DialogProlog</item>
+      <item>Distributed</item>
+      <item>DateListLogPlot</item>
+      <item>DialogReturn</item>
+      <item>DistributedContexts</item>
+      <item>DateListPlot</item>
+      <item>DialogSymbols</item>
+      <item>DistributeDefinitions</item>
+      <item>DatePattern</item>
+      <item>Diamond</item>
+      <item>DistributionChart</item>
+      <item>DatePlus</item>
+      <item>DiamondMatrix</item>
+      <item>DistributionFitTest</item>
+      <item>DateString</item>
+      <item>DiceDissimilarity</item>
+      <item>DistributionParameterAssumptions</item>
+      <item>DateTicksFormat</item>
+      <item>DictionaryLookup</item>
+      <item>DistributionParameterQ</item>
+      <item>DaubechiesWavelet</item>
+      <item>DifferenceDelta</item>
+      <item>Divide</item>
+      <item>DavisDistribution</item>
+      <item>DifferenceRoot</item>
+      <item>DivideBy</item>
+      <item>DawsonF</item>
+      <item>DifferenceRootReduce</item>
+      <item>Dividers</item>
+      <item>DeBruijnGraph</item>
+      <item>Differences</item>
+      <item>Divisible</item>
+      <item>DeclarePackage</item>
+      <item>DifferentialD</item>
+      <item>Divisors</item>
+      <item>Decompose</item>
+      <item>DifferentialRoot</item>
+      <item>DivisorSigma</item>
+      <item>Decrement</item>
+      <item>DifferentialRootReduce</item>
+      <item>DivisorSum</item>
+      <item>DedekindEta</item>
+      <item>DigitBlock</item>
+      <item>DMSList</item>
+      <item>Default</item>
+      <item>DigitCharacter</item>
+      <item>DMSString</item>
+      <item>DefaultAxesStyle</item>
+      <item>DigitCount</item>
+      <item>Do</item>
+      <item>DefaultBaseStyle</item>
+      <item>DigitQ</item>
+      <item>DockedCells</item>
+      <item>DefaultBoxStyle</item>
+      <item>DihedralGroup</item>
+      <item>DocumentNotebook</item>
+      <item>DefaultButton</item>
+      <item>Dilation</item>
+      <item>Dot</item>
+      <item>DefaultDuplicateCellStyle</item>
+      <item>Dimensions</item>
+      <item>DotDashed</item>
+      <item>DefaultDuration</item>
+      <item>DiracComb</item>
+      <item>DotEqual</item>
+      <item>DefaultElement</item>
+      <item>DiracDelta</item>
+      <item>Dotted</item>
+      <item>DefaultFaceGridsStyle</item>
+      <item>DirectedEdge</item>
+      <item>DoubleBracketingBar</item>
+      <item>DefaultFieldHintStyle</item>
+      <item>DirectedEdges</item>
+      <item>DoubleDownArrow</item>
+      <item>DefaultFrameStyle</item>
+      <item>DirectedGraph</item>
+      <item>DoubleLeftArrow</item>
+      <item>DefaultFrameTicksStyle</item>
+      <item>DirectedGraphQ</item>
+      <item>DoubleLeftRightArrow</item>
+      <item>DefaultGridLinesStyle</item>
+      <item>DirectedInfinity</item>
+      <item>DoubleLongLeftArrow</item>
+      <item>DefaultLabelStyle</item>
+      <item>Direction</item>
+      <item>DoubleLongLeftRightArrow</item>
+      <item>DefaultMenuStyle</item>
+      <item>Directive</item>
+      <item>DoubleLongRightArrow</item>
+      <item>DefaultNewCellStyle</item>
+      <item>Directory</item>
+      <item>DoubleRightArrow</item>
+      <item>DefaultOptions</item>
+      <item>DirectoryName</item>
+      <item>DoubleUpArrow</item>
+      <item>DefaultTicksStyle</item>
+      <item>DirectoryQ</item>
+      <item>DoubleUpDownArrow</item>
+      <item>Defer</item>
+      <item>DirectoryStack</item>
+      <item>DoubleVerticalBar</item>
+      <item>Definition</item>
+      <item>DirichletCharacter</item>
+      <item>DownArrow</item>
+      <item>Degree</item>
+      <item>DirichletConvolve</item>
+      <item>DownArrowBar</item>
+      <item>DegreeCentrality</item>
+      <item>DirichletDistribution</item>
+      <item>DownArrowUpArrow</item>
+      <item>DegreeGraphDistribution</item>
+      <item>DirichletL</item>
+      <item>DownLeftRightVector</item>
+      <item>Deinitialization</item>
+      <item>DirichletTransform</item>
+      <item>DownLeftTeeVector</item>
+      <item>Del</item>
+      <item>DiscreteConvolve</item>
+      <item>DownLeftVector</item>
+      <item>Deletable</item>
+      <item>DiscreteDelta</item>
+      <item>DownLeftVectorBar</item>
+      <item>Delete</item>
+      <item>DiscreteIndicator</item>
+      <item>DownRightTeeVector</item>
+      <item>DeleteBorderComponents</item>
+      <item>DiscreteLQEstimatorGains</item>
+      <item>DownRightVector</item>
+      <item>DeleteCases</item>
+      <item>DiscreteLQRegulatorGains</item>
+      <item>DownRightVectorBar</item>
+      <item>DeleteContents</item>
+      <item>DiscreteLyapunovSolve</item>
+      <item>DownTeeArrow</item>
+      <item>DeleteDirectory</item>
+      <item>DiscretePlot</item>
+      <item>DownValues</item>
+      <item>DeleteDuplicates</item>
+      <item>DiscretePlot3D</item>
+      <item>DragAndDrop</item>
+      <item>DeleteFile</item>
+      <item>DiscreteRatio</item>
+      <item>Drop</item>
+      <item>DeleteSmallComponents</item>
+      <item>DiscreteRiccatiSolve</item>
+      <item>DSolve</item>
+      <item>Delimiter</item>
+      <item>DiscreteShift</item>
+      <item>Dt</item>
+      <item>DelimiterFlashTime</item>
+      <item>DiscreteTimeModelQ</item>
+      <item>DualSystemsModel</item>
+      <item>Denominator</item>
+      <item>DiscreteUniformDistribution</item>
+      <item>DumpSave</item>
+      <item>DensityHistogram</item>
+      <item>DiscreteWaveletData</item>
+      <item>Dynamic</item>
+      <item>DensityPlot</item>
+      <item>DiscreteWaveletPacketTransform</item>
+      <item>DynamicEvaluationTimeout</item>
+      <item>DependentVariables</item>
+      <item>DiscreteWaveletTransform</item>
+      <item>DynamicModule</item>
+      <item>Deploy</item>
+      <item>Discriminant</item>
+      <item>DynamicModuleValues</item>
+      <item>Deployed</item>
+      <item>Disjunction</item>
+      <item>DynamicSetting</item>
+      <item>Depth</item>
+      <item>Disk</item>
+      <item>DynamicWrapper</item>
+      <item>E</item>
+      <item>E</item>
+      <item>End</item>
+      <item>ExactNumberQ</item>
+      <item>EdgeAdd</item>
+      <item>EndDialogPacket</item>
+      <item>ExampleData</item>
+      <item>EdgeCount</item>
+      <item>EndOfFile</item>
+      <item>Except</item>
+      <item>EdgeCoverQ</item>
+      <item>EndOfLine</item>
+      <item>ExcludedForms</item>
+      <item>EdgeDelete</item>
+      <item>EndOfString</item>
+      <item>ExcludePods</item>
+      <item>EdgeDetect</item>
+      <item>EndPackage</item>
+      <item>Exclusions</item>
+      <item>EdgeForm</item>
+      <item>EngineeringForm</item>
+      <item>ExclusionsStyle</item>
+      <item>EdgeIndex</item>
+      <item>EnterExpressionPacket</item>
+      <item>Exists</item>
+      <item>EdgeLabeling</item>
+      <item>EnterTextPacket</item>
+      <item>Exit</item>
+      <item>EdgeLabels</item>
+      <item>Entropy</item>
+      <item>Exp</item>
+      <item>EdgeList</item>
+      <item>EntropyFilter</item>
+      <item>Expand</item>
+      <item>EdgeQ</item>
+      <item>Environment</item>
+      <item>ExpandAll</item>
+      <item>EdgeRenderingFunction</item>
+      <item>Epilog</item>
+      <item>ExpandDenominator</item>
+      <item>EdgeRules</item>
+      <item>Equal</item>
+      <item>ExpandFileName</item>
+      <item>EdgeShapeFunction</item>
+      <item>EqualTilde</item>
+      <item>ExpandNumerator</item>
+      <item>EdgeStyle</item>
+      <item>Equilibrium</item>
+      <item>Expectation</item>
+      <item>EdgeWeight</item>
+      <item>Equivalent</item>
+      <item>ExpGammaDistribution</item>
+      <item>Editable</item>
+      <item>Erf</item>
+      <item>ExpIntegralE</item>
+      <item>EditDistance</item>
+      <item>Erfc</item>
+      <item>ExpIntegralEi</item>
+      <item>EffectiveInterest</item>
+      <item>Erfi</item>
+      <item>Exponent</item>
+      <item>Eigensystem</item>
+      <item>ErlangDistribution</item>
+      <item>ExponentFunction</item>
+      <item>Eigenvalues</item>
+      <item>Erosion</item>
+      <item>ExponentialDistribution</item>
+      <item>EigenvectorCentrality</item>
+      <item>ErrorBox</item>
+      <item>ExponentialFamily</item>
+      <item>Eigenvectors</item>
+      <item>EstimatedDistribution</item>
+      <item>ExponentialGeneratingFunction</item>
+      <item>Element</item>
+      <item>EstimatorGains</item>
+      <item>ExponentialMovingAverage</item>
+      <item>ElementData</item>
+      <item>EstimatorRegulator</item>
+      <item>ExponentialPowerDistribution</item>
+      <item>Eliminate</item>
+      <item>EuclideanDistance</item>
+      <item>ExponentStep</item>
+      <item>EllipticE</item>
+      <item>EulerE</item>
+      <item>Export</item>
+      <item>EllipticExp</item>
+      <item>EulerGamma</item>
+      <item>ExportString</item>
+      <item>EllipticExpPrime</item>
+      <item>EulerianGraphQ</item>
+      <item>Expression</item>
+      <item>EllipticF</item>
+      <item>EulerPhi</item>
+      <item>ExpressionCell</item>
+      <item>EllipticK</item>
+      <item>Evaluatable</item>
+      <item>ExpToTrig</item>
+      <item>EllipticLog</item>
+      <item>Evaluate</item>
+      <item>ExtendedGCD</item>
+      <item>EllipticNomeQ</item>
+      <item>EvaluatePacket</item>
+      <item>Extension</item>
+      <item>EllipticPi</item>
+      <item>EvaluationElements</item>
+      <item>ExtentElementFunction</item>
+      <item>EllipticTheta</item>
+      <item>EvaluationMonitor</item>
+      <item>ExtentMarkers</item>
+      <item>EllipticThetaPrime</item>
+      <item>EvaluationNotebook</item>
+      <item>ExtentSize</item>
+      <item>EmitSound</item>
+      <item>EvaluationObject</item>
+      <item>Extract</item>
+      <item>EmpiricalDistribution</item>
+      <item>Evaluator</item>
+      <item>ExtractArchive</item>
+      <item>EmptyGraphQ</item>
+      <item>EvenQ</item>
+      <item>ExtremeValueDistribution</item>
+      <item>Enabled</item>
+      <item>EventHandler</item>
+      <item>Encode</item>
+      <item>EventLabels</item>
+      <item>F</item>
+      <item>FaceForm</item>
+      <item>FindFit</item>
+      <item>FormBox</item>
+      <item>FaceGrids</item>
+      <item>FindGeneratingFunction</item>
+      <item>FortranForm</item>
+      <item>FaceGridsStyle</item>
+      <item>FindGeoLocation</item>
+      <item>Forward</item>
+      <item>Factor</item>
+      <item>FindGeometricTransform</item>
+      <item>ForwardBackward</item>
+      <item>Factorial</item>
+      <item>FindGraphIsomorphism</item>
+      <item>Fourier</item>
+      <item>Factorial2</item>
+      <item>FindHamiltonianCycle</item>
+      <item>FourierCoefficient</item>
+      <item>FactorialMoment</item>
+      <item>FindIndependentEdgeSet</item>
+      <item>FourierCosCoefficient</item>
+      <item>FactorialMomentGeneratingFunction</item>
+      <item>FindIndependentVertexSet</item>
+      <item>FourierCosSeries</item>
+      <item>FactorialPower</item>
+      <item>FindInstance</item>
+      <item>FourierCosTransform</item>
+      <item>FactorInteger</item>
+      <item>FindIntegerNullVector</item>
+      <item>FourierDCT</item>
+      <item>FactorList</item>
+      <item>FindLibrary</item>
+      <item>FourierDST</item>
+      <item>FactorSquareFree</item>
+      <item>FindLinearRecurrence</item>
+      <item>FourierParameters</item>
+      <item>FactorSquareFreeList</item>
+      <item>FindList</item>
+      <item>FourierSequenceTransform</item>
+      <item>FactorTerms</item>
+      <item>FindMaximum</item>
+      <item>FourierSeries</item>
+      <item>FactorTermsList</item>
+      <item>FindMaxValue</item>
+      <item>FourierSinCoefficient</item>
+      <item>False</item>
+      <item>FindMinimum</item>
+      <item>FourierSinSeries</item>
+      <item>FeedbackType</item>
+      <item>FindMinValue</item>
+      <item>FourierSinTransform</item>
+      <item>Fibonacci</item>
+      <item>FindPermutation</item>
+      <item>FourierTransform</item>
+      <item>FieldHint</item>
+      <item>FindRoot</item>
+      <item>FourierTrigSeries</item>
+      <item>FieldHintStyle</item>
+      <item>FindSequenceFunction</item>
+      <item>FractionalPart</item>
+      <item>FieldMasked</item>
+      <item>FindShortestPath</item>
+      <item>FractionBox</item>
+      <item>FieldSize</item>
+      <item>FindShortestTour</item>
+      <item>Frame</item>
+      <item>FileBaseName</item>
+      <item>FindThreshold</item>
+      <item>FrameBox</item>
+      <item>FileByteCount</item>
+      <item>FindVertexCover</item>
+      <item>Framed</item>
+      <item>FileDate</item>
+      <item>FinishDynamic</item>
+      <item>FrameLabel</item>
+      <item>FileExistsQ</item>
+      <item>FiniteAbelianGroupCount</item>
+      <item>FrameMargins</item>
+      <item>FileExtension</item>
+      <item>FiniteGroupCount</item>
+      <item>FrameStyle</item>
+      <item>FileFormat</item>
+      <item>FiniteGroupData</item>
+      <item>FrameTicks</item>
+      <item>FileHash</item>
+      <item>First</item>
+      <item>FrameTicksStyle</item>
+      <item>FileNameDepth</item>
+      <item>FischerGroupFi22</item>
+      <item>FRatioDistribution</item>
+      <item>FileNameDrop</item>
+      <item>FischerGroupFi23</item>
+      <item>FrechetDistribution</item>
+      <item>FileNameJoin</item>
+      <item>FischerGroupFi24Prime</item>
+      <item>FreeQ</item>
+      <item>FileNames</item>
+      <item>FisherHypergeometricDistribution</item>
+      <item>FresnelC</item>
+      <item>FileNameSetter</item>
+      <item>FisherRatioTest</item>
+      <item>FresnelS</item>
+      <item>FileNameSplit</item>
+      <item>FisherZDistribution</item>
+      <item>FrobeniusNumber</item>
+      <item>FileNameTake</item>
+      <item>Fit</item>
+      <item>FrobeniusSolve</item>
+      <item>FilePrint</item>
+      <item>FittedModel</item>
+      <item>FromCharacterCode</item>
+      <item>FileType</item>
+      <item>FixedPoint</item>
+      <item>FromCoefficientRules</item>
+      <item>FilledCurve</item>
+      <item>FixedPointList</item>
+      <item>FromContinuedFraction</item>
+      <item>Filling</item>
+      <item>Flat</item>
+      <item>FromDigits</item>
+      <item>FillingStyle</item>
+      <item>Flatten</item>
+      <item>FromDMS</item>
+      <item>FillingTransform</item>
+      <item>FlattenAt</item>
+      <item>Front</item>
+      <item>FilterRules</item>
+      <item>FlipView</item>
+      <item>FrontEndDynamicExpression</item>
+      <item>FinancialBond</item>
+      <item>Floor</item>
+      <item>FrontEndEventActions</item>
+      <item>FinancialData</item>
+      <item>Fold</item>
+      <item>FrontEndExecute</item>
+      <item>FinancialDerivative</item>
+      <item>FoldList</item>
+      <item>FrontEndToken</item>
+      <item>FinancialIndicator</item>
+      <item>FontColor</item>
+      <item>FrontEndTokenExecute</item>
+      <item>Find</item>
+      <item>FontFamily</item>
+      <item>Full</item>
+      <item>FindArgMax</item>
+      <item>FontSize</item>
+      <item>FullDefinition</item>
+      <item>FindArgMin</item>
+      <item>FontSlant</item>
+      <item>FullForm</item>
+      <item>FindClique</item>
+      <item>FontSubstitutions</item>
+      <item>FullGraphics</item>
+      <item>FindClusters</item>
+      <item>FontTracking</item>
+      <item>FullSimplify</item>
+      <item>FindCurvePath</item>
+      <item>FontVariations</item>
+      <item>Function</item>
+      <item>FindDistributionParameters</item>
+      <item>FontWeight</item>
+      <item>FunctionExpand</item>
+      <item>FindDivisions</item>
+      <item>For</item>
+      <item>FunctionInterpolation</item>
+      <item>FindEdgeCover</item>
+      <item>ForAll</item>
+      <item>FunctionSpace</item>
+      <item>FindEulerianCycle</item>
+      <item>Format</item>
+      <item>FindFile</item>
+      <item>FormatType</item>
+      <item>G</item>
+      <item>GaborWavelet</item>
+      <item>GeoPositionXYZ</item>
+      <item>GraphStyle</item>
+      <item>GainMargins</item>
+      <item>GeoProjectionData</item>
+      <item>GraphUnion</item>
+      <item>GainPhaseMargins</item>
+      <item>Get</item>
+      <item>Gray</item>
+      <item>Gamma</item>
+      <item>Glaisher</item>
+      <item>GrayLevel</item>
+      <item>GammaDistribution</item>
+      <item>Glow</item>
+      <item>Greater</item>
+      <item>GammaRegularized</item>
+      <item>GoldenRatio</item>
+      <item>GreaterEqual</item>
+      <item>GapPenalty</item>
+      <item>GompertzMakehamDistribution</item>
+      <item>GreaterEqualLess</item>
+      <item>Gather</item>
+      <item>Goto</item>
+      <item>GreaterFullEqual</item>
+      <item>GatherBy</item>
+      <item>Gradient</item>
+      <item>GreaterGreater</item>
+      <item>GaussianFilter</item>
+      <item>GradientFilter</item>
+      <item>GreaterLess</item>
+      <item>GaussianIntegers</item>
+      <item>Graph</item>
+      <item>GreaterSlantEqual</item>
+      <item>GaussianMatrix</item>
+      <item>GraphCenter</item>
+      <item>GreaterTilde</item>
+      <item>GCD</item>
+      <item>GraphComplement</item>
+      <item>Green</item>
+      <item>GegenbauerC</item>
+      <item>GraphData</item>
+      <item>Grid</item>
+      <item>General</item>
+      <item>GraphDiameter</item>
+      <item>GridBox</item>
+      <item>GeneralizedLinearModelFit</item>
+      <item>GraphDifference</item>
+      <item>GridDefaultElement</item>
+      <item>GenerateConditions</item>
+      <item>GraphDisjointUnion</item>
+      <item>GridGraph</item>
+      <item>GeneratedCell</item>
+      <item>GraphDistance</item>
+      <item>GridLines</item>
+      <item>GeneratedParameters</item>
+      <item>GraphDistanceMatrix</item>
+      <item>GridLinesStyle</item>
+      <item>GeneratingFunction</item>
+      <item>GraphHighlight</item>
+      <item>GroebnerBasis</item>
+      <item>GenericCylindricalDecomposition</item>
+      <item>GraphHighlightStyle</item>
+      <item>GroupActionBase</item>
+      <item>GenomeData</item>
+      <item>Graphics</item>
+      <item>GroupCentralizer</item>
+      <item>GenomeLookup</item>
+      <item>Graphics3D</item>
+      <item>GroupElementPosition</item>
+      <item>GeodesicDilation</item>
+      <item>GraphicsColumn</item>
+      <item>GroupElementQ</item>
+      <item>GeodesicErosion</item>
+      <item>GraphicsComplex</item>
+      <item>GroupElements</item>
+      <item>GeoDestination</item>
+      <item>GraphicsGrid</item>
+      <item>GroupGenerators</item>
+      <item>GeodesyData</item>
+      <item>GraphicsGroup</item>
+      <item>GroupMultiplicationTable</item>
+      <item>GeoDirection</item>
+      <item>GraphicsRow</item>
+      <item>GroupOrbits</item>
+      <item>GeoDistance</item>
+      <item>GraphIntersection</item>
+      <item>GroupOrder</item>
+      <item>GeoGridPosition</item>
+      <item>GraphLayout</item>
+      <item>GroupPageBreakWithin</item>
+      <item>GeometricDistribution</item>
+      <item>GraphPeriphery</item>
+      <item>GroupSetwiseStabilizer</item>
+      <item>GeometricMean</item>
+      <item>GraphPlot</item>
+      <item>GroupStabilizer</item>
+      <item>GeometricMeanFilter</item>
+      <item>GraphPlot3D</item>
+      <item>GroupStabilizerChain</item>
+      <item>GeometricTransformation</item>
+      <item>GraphPower</item>
+      <item>Gudermannian</item>
+      <item>GeoPosition</item>
+      <item>GraphQ</item>
+      <item>GumbelDistribution</item>
+      <item>GeoPositionENU</item>
+      <item>GraphRadius</item>
+      <item>H</item>
+      <item>HaarWavelet</item>
+      <item>HermitianMatrixQ</item>
+      <item>Hue</item>
+      <item>HalfNormalDistribution</item>
+      <item>HessenbergDecomposition</item>
+      <item>HumpDownHump</item>
+      <item>HamiltonianGraphQ</item>
+      <item>HexadecimalCharacter</item>
+      <item>HumpEqual</item>
+      <item>HammingDistance</item>
+      <item>HighlightGraph</item>
+      <item>HurwitzLerchPhi</item>
+      <item>HankelH1</item>
+      <item>HigmanSimsGroupHS</item>
+      <item>HurwitzZeta</item>
+      <item>HankelH2</item>
+      <item>HilbertMatrix</item>
+      <item>HyperbolicDistribution</item>
+      <item>HankelMatrix</item>
+      <item>Histogram</item>
+      <item>HypercubeGraph</item>
+      <item>HaradaNortonGroupHN</item>
+      <item>Histogram3D</item>
+      <item>Hyperfactorial</item>
+      <item>HararyGraph</item>
+      <item>HistogramDistribution</item>
+      <item>Hypergeometric0F1</item>
+      <item>HarmonicMean</item>
+      <item>HistogramList</item>
+      <item>Hypergeometric0F1Regularized</item>
+      <item>HarmonicMeanFilter</item>
+      <item>HitMissTransform</item>
+      <item>Hypergeometric1F1</item>
+      <item>HarmonicNumber</item>
+      <item>HITSCentrality</item>
+      <item>Hypergeometric1F1Regularized</item>
+      <item>Hash</item>
+      <item>Hold</item>
+      <item>Hypergeometric2F1</item>
+      <item>Haversine</item>
+      <item>HoldAll</item>
+      <item>Hypergeometric2F1Regularized</item>
+      <item>HazardFunction</item>
+      <item>HoldAllComplete</item>
+      <item>HypergeometricDistribution</item>
+      <item>Head</item>
+      <item>HoldComplete</item>
+      <item>HypergeometricPFQ</item>
+      <item>Heads</item>
+      <item>HoldFirst</item>
+      <item>HypergeometricPFQRegularized</item>
+      <item>HeavisideLambda</item>
+      <item>HoldForm</item>
+      <item>HypergeometricU</item>
+      <item>HeavisidePi</item>
+      <item>HoldPattern</item>
+      <item>Hyperlink</item>
+      <item>HeavisideTheta</item>
+      <item>HoldRest</item>
+      <item>Hyphenation</item>
+      <item>HeldGroupHe</item>
+      <item>HornerForm</item>
+      <item>HypothesisTestData</item>
+      <item>HermiteDecomposition</item>
+      <item>HotellingTSquareDistribution</item>
+      <item>HermiteH</item>
+      <item>HoytDistribution</item>
+      <item>I</item>
+      <item>I</item>
+      <item>ImportString</item>
+      <item>Interrupt</item>
+      <item>Identity</item>
+      <item>In</item>
+      <item>Intersection</item>
+      <item>IdentityMatrix</item>
+      <item>IncidenceGraph</item>
+      <item>Interval</item>
+      <item>If</item>
+      <item>IncidenceMatrix</item>
+      <item>IntervalIntersection</item>
+      <item>IgnoreCase</item>
+      <item>IncludeConstantBasis</item>
+      <item>IntervalMemberQ</item>
+      <item>Im</item>
+      <item>IncludePods</item>
+      <item>IntervalUnion</item>
+      <item>Image</item>
+      <item>Increment</item>
+      <item>Inverse</item>
+      <item>ImageAdd</item>
+      <item>IndependentEdgeSetQ</item>
+      <item>InverseBetaRegularized</item>
+      <item>ImageAdjust</item>
+      <item>IndependentVertexSetQ</item>
+      <item>InverseCDF</item>
+      <item>ImageAlign</item>
+      <item>Indeterminate</item>
+      <item>InverseChiSquareDistribution</item>
+      <item>ImageApply</item>
+      <item>IndexGraph</item>
+      <item>InverseContinuousWaveletTransform</item>
+      <item>ImageAspectRatio</item>
+      <item>InexactNumberQ</item>
+      <item>InverseDistanceTransform</item>
+      <item>ImageAssemble</item>
+      <item>Infinity</item>
+      <item>InverseEllipticNomeQ</item>
+      <item>ImageCapture</item>
+      <item>Infix</item>
+      <item>InverseErf</item>
+      <item>ImageChannels</item>
+      <item>Information</item>
+      <item>InverseErfc</item>
+      <item>ImageClip</item>
+      <item>Inherited</item>
+      <item>InverseFourier</item>
+      <item>ImageColorSpace</item>
+      <item>Initialization</item>
+      <item>InverseFourierCosTransform</item>
+      <item>ImageCompose</item>
+      <item>InitializationCell</item>
+      <item>InverseFourierSequenceTransform</item>
+      <item>ImageConvolve</item>
+      <item>Inner</item>
+      <item>InverseFourierSinTransform</item>
+      <item>ImageCooccurrence</item>
+      <item>Inpaint</item>
+      <item>InverseFourierTransform</item>
+      <item>ImageCorrelate</item>
+      <item>Input</item>
+      <item>InverseFunction</item>
+      <item>ImageCorrespondingPoints</item>
+      <item>InputAliases</item>
+      <item>InverseFunctions</item>
+      <item>ImageCrop</item>
+      <item>InputAssumptions</item>
+      <item>InverseGammaDistribution</item>
+      <item>ImageData</item>
+      <item>InputAutoReplacements</item>
+      <item>InverseGammaRegularized</item>
+      <item>ImageDeconvolve</item>
+      <item>InputField</item>
+      <item>InverseGaussianDistribution</item>
+      <item>ImageDifference</item>
+      <item>InputForm</item>
+      <item>InverseGudermannian</item>
+      <item>ImageDimensions</item>
+      <item>InputNamePacket</item>
+      <item>InverseHaversine</item>
+      <item>ImageEffect</item>
+      <item>InputNotebook</item>
+      <item>InverseJacobiCD</item>
+      <item>ImageFilter</item>
+      <item>InputPacket</item>
+      <item>InverseJacobiCN</item>
+      <item>ImageForestingComponents</item>
+      <item>InputStream</item>
+      <item>InverseJacobiCS</item>
+      <item>ImageForwardTransformation</item>
+      <item>InputString</item>
+      <item>InverseJacobiDC</item>
+      <item>ImageHistogram</item>
+      <item>InputStringPacket</item>
+      <item>InverseJacobiDN</item>
+      <item>ImageKeypoints</item>
+      <item>Insert</item>
+      <item>InverseJacobiDS</item>
+      <item>ImageLevels</item>
+      <item>InsertResults</item>
+      <item>InverseJacobiNC</item>
+      <item>ImageLines</item>
+      <item>Inset</item>
+      <item>InverseJacobiND</item>
+      <item>ImageMargins</item>
+      <item>Install</item>
+      <item>InverseJacobiNS</item>
+      <item>ImageMultiply</item>
+      <item>InstallService</item>
+      <item>InverseJacobiSC</item>
+      <item>ImagePad</item>
+      <item>InString</item>
+      <item>InverseJacobiSD</item>
+      <item>ImagePadding</item>
+      <item>Integer</item>
+      <item>InverseJacobiSN</item>
+      <item>ImagePartition</item>
+      <item>IntegerDigits</item>
+      <item>InverseLaplaceTransform</item>
+      <item>ImagePerspectiveTransformation</item>
+      <item>IntegerExponent</item>
+      <item>InversePermutation</item>
+      <item>ImageQ</item>
+      <item>IntegerLength</item>
+      <item>InverseRadon</item>
+      <item>ImageReflect</item>
+      <item>IntegerPart</item>
+      <item>InverseSeries</item>
+      <item>ImageResize</item>
+      <item>IntegerPartitions</item>
+      <item>InverseSurvivalFunction</item>
+      <item>ImageResolution</item>
+      <item>IntegerQ</item>
+      <item>InverseWaveletTransform</item>
+      <item>ImageRotate</item>
+      <item>Integers</item>
+      <item>InverseWeierstrassP</item>
+      <item>ImageScaled</item>
+      <item>IntegerString</item>
+      <item>InverseZTransform</item>
+      <item>ImageSize</item>
+      <item>Integrate</item>
+      <item>Invisible</item>
+      <item>ImageSizeAction</item>
+      <item>InteractiveTradingChart</item>
+      <item>IrreduciblePolynomialQ</item>
+      <item>ImageSizeMultipliers</item>
+      <item>Interleaving</item>
+      <item>IsolatingInterval</item>
+      <item>ImageSubtract</item>
+      <item>InternallyBalancedDecomposition</item>
+      <item>IsomorphicGraphQ</item>
+      <item>ImageTake</item>
+      <item>InterpolatingFunction</item>
+      <item>IsotopeData</item>
+      <item>ImageTransformation</item>
+      <item>InterpolatingPolynomial</item>
+      <item>Italic</item>
+      <item>ImageTrim</item>
+      <item>Interpolation</item>
+      <item>Item</item>
+      <item>ImageType</item>
+      <item>InterpolationOrder</item>
+      <item>ItemAspectRatio</item>
+      <item>ImageValue</item>
+      <item>Interpretation</item>
+      <item>ItemSize</item>
+      <item>Implies</item>
+      <item>InterpretationBox</item>
+      <item>ItemStyle</item>
+      <item>Import</item>
+      <item>InterquartileRange</item>
+      <item>J</item>
+      <item>JaccardDissimilarity</item>
+      <item>JacobiNS</item>
+      <item>JankoGroupJ4</item>
+      <item>JacobiAmplitude</item>
+      <item>JacobiP</item>
+      <item>JarqueBeraALMTest</item>
+      <item>JacobiCD</item>
+      <item>JacobiSC</item>
+      <item>JohnsonDistribution</item>
+      <item>JacobiCN</item>
+      <item>JacobiSD</item>
+      <item>Join</item>
+      <item>JacobiCS</item>
+      <item>JacobiSN</item>
+      <item>Joined</item>
+      <item>JacobiDC</item>
+      <item>JacobiSymbol</item>
+      <item>JoinedCurve</item>
+      <item>JacobiDN</item>
+      <item>JacobiZeta</item>
+      <item>JoinForm</item>
+      <item>JacobiDS</item>
+      <item>JankoGroupJ1</item>
+      <item>JordanDecomposition</item>
+      <item>JacobiNC</item>
+      <item>JankoGroupJ2</item>
+      <item>JordanModelDecomposition</item>
+      <item>JacobiND</item>
+      <item>JankoGroupJ3</item>
+      <item>K</item>
+      <item>KagiChart</item>
+      <item>KelvinKer</item>
+      <item>KolmogorovSmirnovTest</item>
+      <item>KalmanEstimator</item>
+      <item>KernelMixtureDistribution</item>
+      <item>KroneckerDelta</item>
+      <item>KarhunenLoeveDecomposition</item>
+      <item>KernelObject</item>
+      <item>KroneckerProduct</item>
+      <item>KaryTree</item>
+      <item>Kernels</item>
+      <item>KroneckerSymbol</item>
+      <item>KatzCentrality</item>
+      <item>Khinchin</item>
+      <item>KuiperTest</item>
+      <item>KCoreComponents</item>
+      <item>KirchhoffGraph</item>
+      <item>KumaraswamyDistribution</item>
+      <item>KDistribution</item>
+      <item>KirchhoffMatrix</item>
+      <item>Kurtosis</item>
+      <item>KelvinBei</item>
+      <item>KleinInvariantJ</item>
+      <item>KuwaharaFilter</item>
+      <item>KelvinBer</item>
+      <item>KnightTourGraph</item>
+      <item>KelvinKei</item>
+      <item>KnotData</item>
+      <item>L</item>
+      <item>Label</item>
+      <item>LibraryFunction</item>
+      <item>ListDensityPlot</item>
+      <item>Labeled</item>
+      <item>LibraryFunctionError</item>
+      <item>ListInterpolation</item>
+      <item>LabelingFunction</item>
+      <item>LibraryFunctionInformation</item>
+      <item>ListLineIntegralConvolutionPlot</item>
+      <item>LabelStyle</item>
+      <item>LibraryFunctionLoad</item>
+      <item>ListLinePlot</item>
+      <item>LaguerreL</item>
+      <item>LibraryFunctionUnload</item>
+      <item>ListLogLinearPlot</item>
+      <item>LandauDistribution</item>
+      <item>LibraryLoad</item>
+      <item>ListLogLogPlot</item>
+      <item>LanguageCategory</item>
+      <item>LibraryUnload</item>
+      <item>ListLogPlot</item>
+      <item>LaplaceDistribution</item>
+      <item>LiftingFilterData</item>
+      <item>ListPlay</item>
+      <item>LaplaceTransform</item>
+      <item>LiftingWaveletTransform</item>
+      <item>ListPlot</item>
+      <item>LaplacianFilter</item>
+      <item>LightBlue</item>
+      <item>ListPlot3D</item>
+      <item>LaplacianGaussianFilter</item>
+      <item>LightBrown</item>
+      <item>ListPointPlot3D</item>
+      <item>Large</item>
+      <item>LightCyan</item>
+      <item>ListPolarPlot</item>
+      <item>Larger</item>
+      <item>Lighter</item>
+      <item>ListStreamDensityPlot</item>
+      <item>Last</item>
+      <item>LightGray</item>
+      <item>ListStreamPlot</item>
+      <item>Latitude</item>
+      <item>LightGreen</item>
+      <item>ListSurfacePlot3D</item>
+      <item>LatitudeLongitude</item>
+      <item>Lighting</item>
+      <item>ListVectorDensityPlot</item>
+      <item>LatticeData</item>
+      <item>LightingAngle</item>
+      <item>ListVectorPlot</item>
+      <item>LatticeReduce</item>
+      <item>LightMagenta</item>
+      <item>ListVectorPlot3D</item>
+      <item>LaunchKernels</item>
+      <item>LightOrange</item>
+      <item>LocalizeVariables</item>
+      <item>LayeredGraphPlot</item>
+      <item>LightPink</item>
+      <item>LocationEquivalenceTest</item>
+      <item>LayerSizeFunction</item>
+      <item>LightPurple</item>
+      <item>LocationTest</item>
+      <item>LCM</item>
+      <item>LightRed</item>
+      <item>Locator</item>
+      <item>LeafCount</item>
+      <item>LightYellow</item>
+      <item>LocatorAutoCreate</item>
+      <item>LeastSquares</item>
+      <item>Likelihood</item>
+      <item>LocatorPane</item>
+      <item>Left</item>
+      <item>Limit</item>
+      <item>LocatorRegion</item>
+      <item>LeftArrow</item>
+      <item>LimitsPositioning</item>
+      <item>Locked</item>
+      <item>LeftArrowBar</item>
+      <item>LindleyDistribution</item>
+      <item>Log</item>
+      <item>LeftArrowRightArrow</item>
+      <item>Line</item>
+      <item>Log10</item>
+      <item>LeftDownTeeVector</item>
+      <item>LinearFractionalTransform</item>
+      <item>Log2</item>
+      <item>LeftDownVector</item>
+      <item>LinearModelFit</item>
+      <item>LogBarnesG</item>
+      <item>LeftDownVectorBar</item>
+      <item>LinearOffsetFunction</item>
+      <item>LogGamma</item>
+      <item>LeftRightArrow</item>
+      <item>LinearProgramming</item>
+      <item>LogGammaDistribution</item>
+      <item>LeftRightVector</item>
+      <item>LinearRecurrence</item>
+      <item>LogicalExpand</item>
+      <item>LeftTeeArrow</item>
+      <item>LinearSolve</item>
+      <item>LogIntegral</item>
+      <item>LeftTeeVector</item>
+      <item>LinearSolveFunction</item>
+      <item>LogisticDistribution</item>
+      <item>LeftTriangle</item>
+      <item>LineBreakChart</item>
+      <item>LogitModelFit</item>
+      <item>LeftTriangleBar</item>
+      <item>LineGraph</item>
+      <item>LogLikelihood</item>
+      <item>LeftTriangleEqual</item>
+      <item>LineIndent</item>
+      <item>LogLinearPlot</item>
+      <item>LeftUpDownVector</item>
+      <item>LineIndentMaxFraction</item>
+      <item>LogLogisticDistribution</item>
+      <item>LeftUpTeeVector</item>
+      <item>LineIntegralConvolutionPlot</item>
+      <item>LogLogPlot</item>
+      <item>LeftUpVector</item>
+      <item>LineIntegralConvolutionScale</item>
+      <item>LogNormalDistribution</item>
+      <item>LeftUpVectorBar</item>
+      <item>LineSpacing</item>
+      <item>LogPlot</item>
+      <item>LeftVector</item>
+      <item>LinkClose</item>
+      <item>LogSeriesDistribution</item>
+      <item>LeftVectorBar</item>
+      <item>LinkConnect</item>
+      <item>Longest</item>
+      <item>LegendAppearance</item>
+      <item>LinkCreate</item>
+      <item>LongestCommonSequence</item>
+      <item>Legended</item>
+      <item>LinkFunction</item>
+      <item>LongestCommonSubsequence</item>
+      <item>LegendreP</item>
+      <item>LinkInterrupt</item>
+      <item>Longitude</item>
+      <item>LegendreQ</item>
+      <item>LinkLaunch</item>
+      <item>LongLeftArrow</item>
+      <item>Length</item>
+      <item>LinkObject</item>
+      <item>LongLeftRightArrow</item>
+      <item>LengthWhile</item>
+      <item>LinkPatterns</item>
+      <item>LongRightArrow</item>
+      <item>LerchPhi</item>
+      <item>LinkProtocol</item>
+      <item>LoopFreeGraphQ</item>
+      <item>Less</item>
+      <item>LinkRead</item>
+      <item>LowerCaseQ</item>
+      <item>LessEqual</item>
+      <item>LinkReadyQ</item>
+      <item>LowerLeftArrow</item>
+      <item>LessEqualGreater</item>
+      <item>Links</item>
+      <item>LowerRightArrow</item>
+      <item>LessFullEqual</item>
+      <item>LinkWrite</item>
+      <item>LowerTriangularize</item>
+      <item>LessGreater</item>
+      <item>LiouvilleLambda</item>
+      <item>LQEstimatorGains</item>
+      <item>LessLess</item>
+      <item>List</item>
+      <item>LQGRegulator</item>
+      <item>LessSlantEqual</item>
+      <item>Listable</item>
+      <item>LQOutputRegulatorGains</item>
+      <item>LessTilde</item>
+      <item>ListAnimate</item>
+      <item>LQRegulatorGains</item>
+      <item>LetterCharacter</item>
+      <item>ListContourPlot</item>
+      <item>LucasL</item>
+      <item>LetterQ</item>
+      <item>ListContourPlot3D</item>
+      <item>LUDecomposition</item>
+      <item>Level</item>
+      <item>ListConvolve</item>
+      <item>LyapunovSolve</item>
+      <item>LeveneTest</item>
+      <item>ListCorrelate</item>
+      <item>LyonsGroupLy</item>
+      <item>LeviCivitaTensor</item>
+      <item>ListCurvePathPlot</item>
+      <item>LevyDistribution</item>
+      <item>ListDeconvolve</item>
+      <item>M</item>
+      <item>MachineNumberQ</item>
+      <item>MaxDetect</item>
+      <item>MinDetect</item>
+      <item>MachinePrecision</item>
+      <item>MaxExtraBandwidths</item>
+      <item>MinFilter</item>
+      <item>Magenta</item>
+      <item>MaxExtraConditions</item>
+      <item>MinimalPolynomial</item>
+      <item>Magnification</item>
+      <item>MaxFilter</item>
+      <item>MinimalStateSpaceModel</item>
+      <item>Magnify</item>
+      <item>Maximize</item>
+      <item>Minimize</item>
+      <item>Majority</item>
+      <item>MaxIterations</item>
+      <item>Minors</item>
+      <item>MakeBoxes</item>
+      <item>MaxMemoryUsed</item>
+      <item>MinStableDistribution</item>
+      <item>MakeExpression</item>
+      <item>MaxMixtureKernels</item>
+      <item>Minus</item>
+      <item>MangoldtLambda</item>
+      <item>MaxPlotPoints</item>
+      <item>MinusPlus</item>
+      <item>ManhattanDistance</item>
+      <item>MaxRecursion</item>
+      <item>MinValue</item>
+      <item>Manipulate</item>
+      <item>MaxStableDistribution</item>
+      <item>Missing</item>
+      <item>Manipulator</item>
+      <item>MaxStepFraction</item>
+      <item>MixtureDistribution</item>
+      <item>MannWhitneyTest</item>
+      <item>MaxSteps</item>
+      <item>Mod</item>
+      <item>MantissaExponent</item>
+      <item>MaxStepSize</item>
+      <item>Modal</item>
+      <item>Manual</item>
+      <item>MaxValue</item>
+      <item>ModularLambda</item>
+      <item>Map</item>
+      <item>MaxwellDistribution</item>
+      <item>Module</item>
+      <item>MapAll</item>
+      <item>McLaughlinGroupMcL</item>
+      <item>Modulus</item>
+      <item>MapAt</item>
+      <item>Mean</item>
+      <item>MoebiusMu</item>
+      <item>MapIndexed</item>
+      <item>MeanDeviation</item>
+      <item>Moment</item>
+      <item>MapThread</item>
+      <item>MeanFilter</item>
+      <item>MomentConvert</item>
+      <item>MarcumQ</item>
+      <item>MeanShift</item>
+      <item>MomentEvaluate</item>
+      <item>MardiaCombinedTest</item>
+      <item>MeanShiftFilter</item>
+      <item>MomentGeneratingFunction</item>
+      <item>MardiaKurtosisTest</item>
+      <item>Median</item>
+      <item>Monitor</item>
+      <item>MardiaSkewnessTest</item>
+      <item>MedianDeviation</item>
+      <item>MonomialList</item>
+      <item>MarginalDistribution</item>
+      <item>MedianFilter</item>
+      <item>MonsterGroupM</item>
+      <item>Masking</item>
+      <item>Medium</item>
+      <item>MorletWavelet</item>
+      <item>MatchingDissimilarity</item>
+      <item>MeijerG</item>
+      <item>MorphologicalBinarize</item>
+      <item>MatchLocalNames</item>
+      <item>MemberQ</item>
+      <item>MorphologicalBranchPoints</item>
+      <item>MatchQ</item>
+      <item>MemoryConstrained</item>
+      <item>MorphologicalComponents</item>
+      <item>MathieuC</item>
+      <item>MemoryInUse</item>
+      <item>MorphologicalEulerNumber</item>
+      <item>MathieuCharacteristicA</item>
+      <item>MenuCommandKey</item>
+      <item>MorphologicalGraph</item>
+      <item>MathieuCharacteristicB</item>
+      <item>MenuPacket</item>
+      <item>MorphologicalPerimeter</item>
+      <item>MathieuCharacteristicExponent</item>
+      <item>MenuSortingValue</item>
+      <item>MorphologicalTransform</item>
+      <item>MathieuCPrime</item>
+      <item>MenuStyle</item>
+      <item>Most</item>
+      <item>MathieuGroupM11</item>
+      <item>MenuView</item>
+      <item>MouseAnnotation</item>
+      <item>MathieuGroupM12</item>
+      <item>Mesh</item>
+      <item>MouseAppearance</item>
+      <item>MathieuGroupM22</item>
+      <item>MeshFunctions</item>
+      <item>Mouseover</item>
+      <item>MathieuGroupM23</item>
+      <item>MeshShading</item>
+      <item>MousePosition</item>
+      <item>MathieuGroupM24</item>
+      <item>MeshStyle</item>
+      <item>MovingAverage</item>
+      <item>MathieuS</item>
+      <item>Message</item>
+      <item>MovingMedian</item>
+      <item>MathieuSPrime</item>
+      <item>MessageDialog</item>
+      <item>MoyalDistribution</item>
+      <item>MathMLForm</item>
+      <item>MessageList</item>
+      <item>MultiedgeStyle</item>
+      <item>MatrixExp</item>
+      <item>MessageName</item>
+      <item>Multinomial</item>
+      <item>MatrixForm</item>
+      <item>MessagePacket</item>
+      <item>MultinomialDistribution</item>
+      <item>MatrixPlot</item>
+      <item>Messages</item>
+      <item>MultinormalDistribution</item>
+      <item>MatrixPower</item>
+      <item>Method</item>
+      <item>MultiplicativeOrder</item>
+      <item>MatrixQ</item>
+      <item>MexicanHatWavelet</item>
+      <item>MultivariateHypergeometricDistribution</item>
+      <item>MatrixRank</item>
+      <item>MeyerWavelet</item>
+      <item>MultivariatePoissonDistribution</item>
+      <item>Max</item>
+      <item>Min</item>
+      <item>MultivariateTDistribution</item>
+      <item>N</item>
+      <item>N</item>
+      <item>NormalizedSquaredEuclideanDistance</item>
+      <item>NotPrecedesSlantEqual</item>
+      <item>NakagamiDistribution</item>
+      <item>NormalsFunction</item>
+      <item>NotPrecedesTilde</item>
+      <item>NameQ</item>
+      <item>NormFunction</item>
+      <item>NotReverseElement</item>
+      <item>Names</item>
+      <item>Not</item>
+      <item>NotRightTriangle</item>
+      <item>Nand</item>
+      <item>NotCongruent</item>
+      <item>NotRightTriangleBar</item>
+      <item>NArgMax</item>
+      <item>NotCupCap</item>
+      <item>NotRightTriangleEqual</item>
+      <item>NArgMin</item>
+      <item>NotDoubleVerticalBar</item>
+      <item>NotSquareSubset</item>
+      <item>NCache</item>
+      <item>Notebook</item>
+      <item>NotSquareSubsetEqual</item>
+      <item>NDSolve</item>
+      <item>NotebookApply</item>
+      <item>NotSquareSuperset</item>
+      <item>Nearest</item>
+      <item>NotebookAutoSave</item>
+      <item>NotSquareSupersetEqual</item>
+      <item>NearestFunction</item>
+      <item>NotebookClose</item>
+      <item>NotSubset</item>
+      <item>NeedlemanWunschSimilarity</item>
+      <item>NotebookDelete</item>
+      <item>NotSubsetEqual</item>
+      <item>Needs</item>
+      <item>NotebookDirectory</item>
+      <item>NotSucceeds</item>
+      <item>Negative</item>
+      <item>NotebookDynamicExpression</item>
+      <item>NotSucceedsEqual</item>
+      <item>NegativeBinomialDistribution</item>
+      <item>NotebookEvaluate</item>
+      <item>NotSucceedsSlantEqual</item>
+      <item>NegativeMultinomialDistribution</item>
+      <item>NotebookEventActions</item>
+      <item>NotSucceedsTilde</item>
+      <item>NeighborhoodGraph</item>
+      <item>NotebookFileName</item>
+      <item>NotSuperset</item>
+      <item>Nest</item>
+      <item>NotebookFind</item>
+      <item>NotSupersetEqual</item>
+      <item>NestedGreaterGreater</item>
+      <item>NotebookGet</item>
+      <item>NotTilde</item>
+      <item>NestedLessLess</item>
+      <item>NotebookInformation</item>
+      <item>NotTildeEqual</item>
+      <item>NestList</item>
+      <item>NotebookLocate</item>
+      <item>NotTildeFullEqual</item>
+      <item>NestWhile</item>
+      <item>NotebookObject</item>
+      <item>NotTildeTilde</item>
+      <item>NestWhileList</item>
+      <item>NotebookOpen</item>
+      <item>NotVerticalBar</item>
+      <item>NevilleThetaC</item>
+      <item>NotebookPrint</item>
+      <item>NProbability</item>
+      <item>NevilleThetaD</item>
+      <item>NotebookPut</item>
+      <item>NProduct</item>
+      <item>NevilleThetaN</item>
+      <item>NotebookRead</item>
+      <item>NRoots</item>
+      <item>NevilleThetaS</item>
+      <item>Notebooks</item>
+      <item>NSolve</item>
+      <item>NExpectation</item>
+      <item>NotebookSave</item>
+      <item>NSum</item>
+      <item>NextPrime</item>
+      <item>NotebookSelection</item>
+      <item>Null</item>
+      <item>NHoldAll</item>
+      <item>NotebookWrite</item>
+      <item>NullRecords</item>
+      <item>NHoldFirst</item>
+      <item>NotElement</item>
+      <item>NullSpace</item>
+      <item>NHoldRest</item>
+      <item>NotEqualTilde</item>
+      <item>NullWords</item>
+      <item>NicholsGridLines</item>
+      <item>NotExists</item>
+      <item>Number</item>
+      <item>NicholsPlot</item>
+      <item>NotGreater</item>
+      <item>NumberFieldClassNumber</item>
+      <item>NIntegrate</item>
+      <item>NotGreaterEqual</item>
+      <item>NumberFieldDiscriminant</item>
+      <item>NMaximize</item>
+      <item>NotGreaterFullEqual</item>
+      <item>NumberFieldFundamentalUnits</item>
+      <item>NMaxValue</item>
+      <item>NotGreaterGreater</item>
+      <item>NumberFieldIntegralBasis</item>
+      <item>NMinimize</item>
+      <item>NotGreaterLess</item>
+      <item>NumberFieldNormRepresentatives</item>
+      <item>NMinValue</item>
+      <item>NotGreaterSlantEqual</item>
+      <item>NumberFieldRegulator</item>
+      <item>NominalVariables</item>
+      <item>NotGreaterTilde</item>
+      <item>NumberFieldRootsOfUnity</item>
+      <item>NoncentralBetaDistribution</item>
+      <item>NotHumpDownHump</item>
+      <item>NumberFieldSignature</item>
+      <item>NoncentralChiSquareDistribution</item>
+      <item>NotHumpEqual</item>
+      <item>NumberForm</item>
+      <item>NoncentralFRatioDistribution</item>
+      <item>NotLeftTriangle</item>
+      <item>NumberFormat</item>
+      <item>NoncentralStudentTDistribution</item>
+      <item>NotLeftTriangleBar</item>
+      <item>NumberMarks</item>
+      <item>NonCommutativeMultiply</item>
+      <item>NotLeftTriangleEqual</item>
+      <item>NumberMultiplier</item>
+      <item>NonConstants</item>
+      <item>NotLess</item>
+      <item>NumberPadding</item>
+      <item>None</item>
+      <item>NotLessEqual</item>
+      <item>NumberPoint</item>
+      <item>NonlinearModelFit</item>
+      <item>NotLessFullEqual</item>
+      <item>NumberQ</item>
+      <item>NonNegative</item>
+      <item>NotLessGreater</item>
+      <item>NumberSeparator</item>
+      <item>NonPositive</item>
+      <item>NotLessLess</item>
+      <item>NumberSigns</item>
+      <item>Nor</item>
+      <item>NotLessSlantEqual</item>
+      <item>NumberString</item>
+      <item>NorlundB</item>
+      <item>NotLessTilde</item>
+      <item>Numerator</item>
+      <item>Norm</item>
+      <item>NotNestedGreaterGreater</item>
+      <item>NumericFunction</item>
+      <item>Normal</item>
+      <item>NotNestedLessLess</item>
+      <item>NumericQ</item>
+      <item>NormalDistribution</item>
+      <item>NotPrecedes</item>
+      <item>NyquistGridLines</item>
+      <item>Normalize</item>
+      <item>NotPrecedesEqual</item>
+      <item>NyquistPlot</item>
+      <item>O</item>
+      <item>O</item>
+      <item>Operate</item>
+      <item>OutputForm</item>
+      <item>ObservabilityGramian</item>
+      <item>OperatingSystem</item>
+      <item>OutputNamePacket</item>
+      <item>ObservabilityMatrix</item>
+      <item>Optional</item>
+      <item>OutputResponse</item>
+      <item>ObservableDecomposition</item>
+      <item>Options</item>
+      <item>OutputSizeLimit</item>
+      <item>ObservableModelQ</item>
+      <item>OptionsPattern</item>
+      <item>OutputStream</item>
+      <item>OddQ</item>
+      <item>OptionValue</item>
+      <item>OverBar</item>
+      <item>Off</item>
+      <item>Or</item>
+      <item>OverDot</item>
+      <item>Offset</item>
+      <item>Orange</item>
+      <item>Overflow</item>
+      <item>On</item>
+      <item>Order</item>
+      <item>OverHat</item>
+      <item>ONanGroupON</item>
+      <item>OrderDistribution</item>
+      <item>Overlaps</item>
+      <item>OneIdentity</item>
+      <item>OrderedQ</item>
+      <item>Overlay</item>
+      <item>Opacity</item>
+      <item>Ordering</item>
+      <item>Overscript</item>
+      <item>OpenAppend</item>
+      <item>Orderless</item>
+      <item>OverscriptBox</item>
+      <item>Opener</item>
+      <item>Orthogonalize</item>
+      <item>OverTilde</item>
+      <item>OpenerView</item>
+      <item>Out</item>
+      <item>OverVector</item>
+      <item>Opening</item>
+      <item>Outer</item>
+      <item>OwenT</item>
+      <item>OpenRead</item>
+      <item>OutputControllabilityMatrix</item>
+      <item>OwnValues</item>
+      <item>OpenWrite</item>
+      <item>OutputControllableModelQ</item>
+      <item>P</item>
+      <item>PackingMethod</item>
+      <item>PermutationList</item>
+      <item>PopupMenu</item>
+      <item>PaddedForm</item>
+      <item>PermutationListQ</item>
+      <item>PopupView</item>
+      <item>Padding</item>
+      <item>PermutationMax</item>
+      <item>PopupWindow</item>
+      <item>PadeApproximant</item>
+      <item>PermutationMin</item>
+      <item>Position</item>
+      <item>PadLeft</item>
+      <item>PermutationOrder</item>
+      <item>Positive</item>
+      <item>PadRight</item>
+      <item>PermutationPower</item>
+      <item>PositiveDefiniteMatrixQ</item>
+      <item>PageBreakAbove</item>
+      <item>PermutationProduct</item>
+      <item>PossibleZeroQ</item>
+      <item>PageBreakBelow</item>
+      <item>PermutationReplace</item>
+      <item>Postfix</item>
+      <item>PageBreakWithin</item>
+      <item>Permutations</item>
+      <item>Power</item>
+      <item>PageFooters</item>
+      <item>PermutationSupport</item>
+      <item>PowerDistribution</item>
+      <item>PageHeaders</item>
+      <item>Permute</item>
+      <item>PowerExpand</item>
+      <item>PageRankCentrality</item>
+      <item>PeronaMalikFilter</item>
+      <item>PowerMod</item>
+      <item>PageWidth</item>
+      <item>PERTDistribution</item>
+      <item>PowerModList</item>
+      <item>PairedBarChart</item>
+      <item>PetersenGraph</item>
+      <item>PowersRepresentations</item>
+      <item>PairedHistogram</item>
+      <item>PhaseMargins</item>
+      <item>PowerSymmetricPolynomial</item>
+      <item>PairedTTest</item>
+      <item>Pi</item>
+      <item>PrecedenceForm</item>
+      <item>PairedZTest</item>
+      <item>Pick</item>
+      <item>Precedes</item>
+      <item>PaletteNotebook</item>
+      <item>Piecewise</item>
+      <item>PrecedesEqual</item>
+      <item>Pane</item>
+      <item>PiecewiseExpand</item>
+      <item>PrecedesSlantEqual</item>
+      <item>Panel</item>
+      <item>PieChart</item>
+      <item>PrecedesTilde</item>
+      <item>Paneled</item>
+      <item>PieChart3D</item>
+      <item>Precision</item>
+      <item>PaneSelector</item>
+      <item>Pink</item>
+      <item>PrecisionGoal</item>
+      <item>ParabolicCylinderD</item>
+      <item>PixelConstrained</item>
+      <item>PreDecrement</item>
+      <item>ParagraphIndent</item>
+      <item>PixelValue</item>
+      <item>PreemptProtect</item>
+      <item>ParagraphSpacing</item>
+      <item>Placed</item>
+      <item>Prefix</item>
+      <item>ParallelArray</item>
+      <item>Placeholder</item>
+      <item>PreIncrement</item>
+      <item>ParallelCombine</item>
+      <item>PlaceholderReplace</item>
+      <item>Prepend</item>
+      <item>ParallelDo</item>
+      <item>Plain</item>
+      <item>PrependTo</item>
+      <item>ParallelEvaluate</item>
+      <item>Play</item>
+      <item>PreserveImageOptions</item>
+      <item>Parallelization</item>
+      <item>PlayRange</item>
+      <item>PriceGraphDistribution</item>
+      <item>Parallelize</item>
+      <item>Plot</item>
+      <item>Prime</item>
+      <item>ParallelMap</item>
+      <item>Plot3D</item>
+      <item>PrimeNu</item>
+      <item>ParallelNeeds</item>
+      <item>PlotLabel</item>
+      <item>PrimeOmega</item>
+      <item>ParallelProduct</item>
+      <item>PlotLayout</item>
+      <item>PrimePi</item>
+      <item>ParallelSubmit</item>
+      <item>PlotMarkers</item>
+      <item>PrimePowerQ</item>
+      <item>ParallelSum</item>
+      <item>PlotPoints</item>
+      <item>PrimeQ</item>
+      <item>ParallelTable</item>
+      <item>PlotRange</item>
+      <item>Primes</item>
+      <item>ParallelTry</item>
+      <item>PlotRangeClipping</item>
+      <item>PrimeZetaP</item>
+      <item>ParameterEstimator</item>
+      <item>PlotRangePadding</item>
+      <item>PrimitiveRoot</item>
+      <item>ParameterMixtureDistribution</item>
+      <item>PlotRegion</item>
+      <item>PrincipalComponents</item>
+      <item>ParametricPlot</item>
+      <item>PlotStyle</item>
+      <item>PrincipalValue</item>
+      <item>ParametricPlot3D</item>
+      <item>Plus</item>
+      <item>Print</item>
+      <item>ParentDirectory</item>
+      <item>PlusMinus</item>
+      <item>PrintingStyleEnvironment</item>
+      <item>ParetoDistribution</item>
+      <item>Pochhammer</item>
+      <item>PrintTemporary</item>
+      <item>Part</item>
+      <item>PodStates</item>
+      <item>Probability</item>
+      <item>ParticleData</item>
+      <item>PodWidth</item>
+      <item>ProbabilityDistribution</item>
+      <item>Partition</item>
+      <item>Point</item>
+      <item>ProbabilityPlot</item>
+      <item>PartitionsP</item>
+      <item>PointFigureChart</item>
+      <item>ProbabilityScalePlot</item>
+      <item>PartitionsQ</item>
+      <item>PointSize</item>
+      <item>ProbitModelFit</item>
+      <item>PascalDistribution</item>
+      <item>PoissonConsulDistribution</item>
+      <item>Product</item>
+      <item>PassEventsDown</item>
+      <item>PoissonDistribution</item>
+      <item>ProductDistribution</item>
+      <item>PassEventsUp</item>
+      <item>PolarAxes</item>
+      <item>ProductLog</item>
+      <item>Paste</item>
+      <item>PolarAxesOrigin</item>
+      <item>ProgressIndicator</item>
+      <item>PasteButton</item>
+      <item>PolarGridLines</item>
+      <item>Projection</item>
+      <item>Path</item>
+      <item>PolarPlot</item>
+      <item>Prolog</item>
+      <item>PathGraph</item>
+      <item>PolarTicks</item>
+      <item>Properties</item>
+      <item>PathGraphQ</item>
+      <item>PoleZeroMarkers</item>
+      <item>Property</item>
+      <item>Pattern</item>
+      <item>PolyaAeppliDistribution</item>
+      <item>PropertyList</item>
+      <item>PatternSequence</item>
+      <item>PolyGamma</item>
+      <item>PropertyValue</item>
+      <item>PatternTest</item>
+      <item>Polygon</item>
+      <item>Proportion</item>
+      <item>PauliMatrix</item>
+      <item>PolyhedronData</item>
+      <item>Proportional</item>
+      <item>PaulWavelet</item>
+      <item>PolyLog</item>
+      <item>Protect</item>
+      <item>Pause</item>
+      <item>PolynomialExtendedGCD</item>
+      <item>Protected</item>
+      <item>PDF</item>
+      <item>PolynomialGCD</item>
+      <item>ProteinData</item>
+      <item>PearsonChiSquareTest</item>
+      <item>PolynomialLCM</item>
+      <item>Pruning</item>
+      <item>PearsonDistribution</item>
+      <item>PolynomialMod</item>
+      <item>PseudoInverse</item>
+      <item>PerformanceGoal</item>
+      <item>PolynomialQ</item>
+      <item>Purple</item>
+      <item>PermutationCycles</item>
+      <item>PolynomialQuotient</item>
+      <item>Put</item>
+      <item>PermutationCyclesQ</item>
+      <item>PolynomialQuotientRemainder</item>
+      <item>PutAppend</item>
+      <item>PermutationGroup</item>
+      <item>PolynomialReduce</item>
+      <item>PermutationLength</item>
+      <item>PolynomialRemainder</item>
+      <item>Q</item>
+      <item>QBinomial</item>
+      <item>QRDecomposition</item>
+      <item>Quartiles</item>
+      <item>QFactorial</item>
+      <item>QuadraticIrrationalQ</item>
+      <item>QuartileSkewness</item>
+      <item>QGamma</item>
+      <item>Quantile</item>
+      <item>Quiet</item>
+      <item>QHypergeometricPFQ</item>
+      <item>QuantilePlot</item>
+      <item>Quit</item>
+      <item>QPochhammer</item>
+      <item>Quartics</item>
+      <item>Quotient</item>
+      <item>QPolyGamma</item>
+      <item>QuartileDeviation</item>
+      <item>QuotientRemainder</item>
+      <item>R</item>
+      <item>RadicalBox</item>
+      <item>RefreshRate</item>
+      <item>RightArrowBar</item>
+      <item>RadioButton</item>
+      <item>RegionBinarize</item>
+      <item>RightArrowLeftArrow</item>
+      <item>RadioButtonBar</item>
+      <item>RegionFunction</item>
+      <item>RightCosetRepresentative</item>
+      <item>Radon</item>
+      <item>RegionPlot</item>
+      <item>RightDownTeeVector</item>
+      <item>RamanujanTau</item>
+      <item>RegionPlot3D</item>
+      <item>RightDownVector</item>
+      <item>RamanujanTauL</item>
+      <item>RegularExpression</item>
+      <item>RightDownVectorBar</item>
+      <item>RamanujanTauTheta</item>
+      <item>Regularization</item>
+      <item>RightTeeArrow</item>
+      <item>RamanujanTauZ</item>
+      <item>ReleaseHold</item>
+      <item>RightTeeVector</item>
+      <item>RandomChoice</item>
+      <item>ReliefImage</item>
+      <item>RightTriangle</item>
+      <item>RandomComplex</item>
+      <item>ReliefPlot</item>
+      <item>RightTriangleBar</item>
+      <item>RandomGraph</item>
+      <item>Remove</item>
+      <item>RightTriangleEqual</item>
+      <item>RandomImage</item>
+      <item>RemoveAlphaChannel</item>
+      <item>RightUpDownVector</item>
+      <item>RandomInteger</item>
+      <item>RemoveProperty</item>
+      <item>RightUpTeeVector</item>
+      <item>RandomPermutation</item>
+      <item>RemoveScheduledTask</item>
+      <item>RightUpVector</item>
+      <item>RandomPrime</item>
+      <item>RenameDirectory</item>
+      <item>RightUpVectorBar</item>
+      <item>RandomReal</item>
+      <item>RenameFile</item>
+      <item>RightVector</item>
+      <item>RandomSample</item>
+      <item>RenkoChart</item>
+      <item>RightVectorBar</item>
+      <item>RandomVariate</item>
+      <item>Repeated</item>
+      <item>RogersTanimotoDissimilarity</item>
+      <item>Range</item>
+      <item>RepeatedNull</item>
+      <item>Root</item>
+      <item>RangeFilter</item>
+      <item>Replace</item>
+      <item>RootApproximant</item>
+      <item>RankedMax</item>
+      <item>ReplaceAll</item>
+      <item>RootIntervals</item>
+      <item>RankedMin</item>
+      <item>ReplaceList</item>
+      <item>RootLocusPlot</item>
+      <item>Raster</item>
+      <item>ReplacePart</item>
+      <item>RootMeanSquare</item>
+      <item>Rasterize</item>
+      <item>ReplaceRepeated</item>
+      <item>RootOfUnityQ</item>
+      <item>RasterSize</item>
+      <item>Resampling</item>
+      <item>RootReduce</item>
+      <item>Rational</item>
+      <item>Rescale</item>
+      <item>Roots</item>
+      <item>Rationalize</item>
+      <item>RescalingTransform</item>
+      <item>RootSum</item>
+      <item>Rationals</item>
+      <item>ResetDirectory</item>
+      <item>Rotate</item>
+      <item>Ratios</item>
+      <item>ResetScheduledTask</item>
+      <item>RotateLabel</item>
+      <item>RawBoxes</item>
+      <item>Residue</item>
+      <item>RotateLeft</item>
+      <item>RawData</item>
+      <item>Resolve</item>
+      <item>RotateRight</item>
+      <item>RayleighDistribution</item>
+      <item>Rest</item>
+      <item>RotationAction</item>
+      <item>Re</item>
+      <item>Resultant</item>
+      <item>RotationMatrix</item>
+      <item>Read</item>
+      <item>ResumePacket</item>
+      <item>RotationTransform</item>
+      <item>ReadList</item>
+      <item>Return</item>
+      <item>Round</item>
+      <item>ReadProtected</item>
+      <item>ReturnExpressionPacket</item>
+      <item>RoundingRadius</item>
+      <item>Real</item>
+      <item>ReturnPacket</item>
+      <item>Row</item>
+      <item>RealBlockDiagonalForm</item>
+      <item>ReturnTextPacket</item>
+      <item>RowAlignments</item>
+      <item>RealDigits</item>
+      <item>Reverse</item>
+      <item>RowBox</item>
+      <item>RealExponent</item>
+      <item>ReverseBiorthogonalSplineWavelet</item>
+      <item>RowLines</item>
+      <item>Reals</item>
+      <item>ReverseElement</item>
+      <item>RowMinHeight</item>
+      <item>Reap</item>
+      <item>ReverseEquilibrium</item>
+      <item>RowReduce</item>
+      <item>Record</item>
+      <item>ReverseGraph</item>
+      <item>RowsEqual</item>
+      <item>RecordLists</item>
+      <item>ReverseUpEquilibrium</item>
+      <item>RowSpacings</item>
+      <item>RecordSeparators</item>
+      <item>RevolutionAxis</item>
+      <item>RSolve</item>
+      <item>Rectangle</item>
+      <item>RevolutionPlot3D</item>
+      <item>RudvalisGroupRu</item>
+      <item>RectangleChart</item>
+      <item>RGBColor</item>
+      <item>Rule</item>
+      <item>RectangleChart3D</item>
+      <item>RiccatiSolve</item>
+      <item>RuleDelayed</item>
+      <item>RecurrenceTable</item>
+      <item>RiceDistribution</item>
+      <item>Run</item>
+      <item>Red</item>
+      <item>RidgeFilter</item>
+      <item>RunScheduledTask</item>
+      <item>Reduce</item>
+      <item>RiemannR</item>
+      <item>RunThrough</item>
+      <item>ReferenceLineStyle</item>
+      <item>RiemannSiegelTheta</item>
+      <item>RuntimeAttributes</item>
+      <item>Refine</item>
+      <item>RiemannSiegelZ</item>
+      <item>RuntimeOptions</item>
+      <item>ReflectionMatrix</item>
+      <item>Riffle</item>
+      <item>RussellRaoDissimilarity</item>
+      <item>ReflectionTransform</item>
+      <item>Right</item>
+      <item>Refresh</item>
+      <item>RightArrow</item>
+      <item>S</item>
+      <item>SameQ</item>
+      <item>Sin</item>
+      <item>StationaryWaveletPacketTransform</item>
+      <item>SameTest</item>
+      <item>Sinc</item>
+      <item>StationaryWaveletTransform</item>
+      <item>SampleDepth</item>
+      <item>SinghMaddalaDistribution</item>
+      <item>StatusArea</item>
+      <item>SampledSoundFunction</item>
+      <item>SingleLetterItalics</item>
+      <item>StepMonitor</item>
+      <item>SampledSoundList</item>
+      <item>SingularValueDecomposition</item>
+      <item>StieltjesGamma</item>
+      <item>SampleRate</item>
+      <item>SingularValueList</item>
+      <item>StirlingS1</item>
+      <item>SamplingPeriod</item>
+      <item>SingularValuePlot</item>
+      <item>StirlingS2</item>
+      <item>SatisfiabilityCount</item>
+      <item>Sinh</item>
+      <item>StopScheduledTask</item>
+      <item>SatisfiabilityInstances</item>
+      <item>SinhIntegral</item>
+      <item>StreamColorFunction</item>
+      <item>SatisfiableQ</item>
+      <item>SinIntegral</item>
+      <item>StreamColorFunctionScaling</item>
+      <item>Save</item>
+      <item>SixJSymbol</item>
+      <item>StreamDensityPlot</item>
+      <item>SaveDefinitions</item>
+      <item>Skeleton</item>
+      <item>StreamPlot</item>
+      <item>SawtoothWave</item>
+      <item>SkeletonTransform</item>
+      <item>StreamPoints</item>
+      <item>Scale</item>
+      <item>SkellamDistribution</item>
+      <item>StreamPosition</item>
+      <item>Scaled</item>
+      <item>Skewness</item>
+      <item>Streams</item>
+      <item>ScalingFunctions</item>
+      <item>SkewNormalDistribution</item>
+      <item>StreamScale</item>
+      <item>ScalingMatrix</item>
+      <item>Skip</item>
+      <item>StreamStyle</item>
+      <item>ScalingTransform</item>
+      <item>Slider</item>
+      <item>String</item>
+      <item>Scan</item>
+      <item>Slider2D</item>
+      <item>StringCases</item>
+      <item>ScheduledTaskObject</item>
+      <item>SlideView</item>
+      <item>StringCount</item>
+      <item>ScheduledTasks</item>
+      <item>Slot</item>
+      <item>StringDrop</item>
+      <item>SchurDecomposition</item>
+      <item>SlotSequence</item>
+      <item>StringExpression</item>
+      <item>ScientificForm</item>
+      <item>Small</item>
+      <item>StringForm</item>
+      <item>ScreenStyleEnvironment</item>
+      <item>SmallCircle</item>
+      <item>StringFormat</item>
+      <item>ScriptBaselineShifts</item>
+      <item>Smaller</item>
+      <item>StringFreeQ</item>
+      <item>ScriptMinSize</item>
+      <item>SmithWatermanSimilarity</item>
+      <item>StringInsert</item>
+      <item>ScriptSizeMultipliers</item>
+      <item>SmoothDensityHistogram</item>
+      <item>StringJoin</item>
+      <item>Scrollbars</item>
+      <item>SmoothHistogram</item>
+      <item>StringLength</item>
+      <item>ScrollPosition</item>
+      <item>SmoothHistogram3D</item>
+      <item>StringMatchQ</item>
+      <item>Sec</item>
+      <item>SmoothKernelDistribution</item>
+      <item>StringPosition</item>
+      <item>Sech</item>
+      <item>SokalSneathDissimilarity</item>
+      <item>StringQ</item>
+      <item>SechDistribution</item>
+      <item>Solve</item>
+      <item>StringReplace</item>
+      <item>SectorChart</item>
+      <item>SolveAlways</item>
+      <item>StringReplaceList</item>
+      <item>SectorChart3D</item>
+      <item>Sort</item>
+      <item>StringReplacePart</item>
+      <item>SectorOrigin</item>
+      <item>SortBy</item>
+      <item>StringReverse</item>
+      <item>SectorSpacing</item>
+      <item>Sound</item>
+      <item>StringSkeleton</item>
+      <item>SeedRandom</item>
+      <item>SoundNote</item>
+      <item>StringSplit</item>
+      <item>Select</item>
+      <item>SoundVolume</item>
+      <item>StringTake</item>
+      <item>Selectable</item>
+      <item>Sow</item>
+      <item>StringToStream</item>
+      <item>SelectComponents</item>
+      <item>Spacer</item>
+      <item>StringTrim</item>
+      <item>SelectedNotebook</item>
+      <item>Spacings</item>
+      <item>StructuredSelection</item>
+      <item>SelectionAnimate</item>
+      <item>Span</item>
+      <item>StruveH</item>
+      <item>SelectionCreateCell</item>
+      <item>SpanFromAbove</item>
+      <item>StruveL</item>
+      <item>SelectionEvaluate</item>
+      <item>SpanFromBoth</item>
+      <item>Stub</item>
+      <item>SelectionEvaluateCreateCell</item>
+      <item>SpanFromLeft</item>
+      <item>StudentTDistribution</item>
+      <item>SelectionMove</item>
+      <item>SparseArray</item>
+      <item>Style</item>
+      <item>SelfLoopStyle</item>
+      <item>Speak</item>
+      <item>StyleBox</item>
+      <item>SemialgebraicComponentInstances</item>
+      <item>Specularity</item>
+      <item>StyleData</item>
+      <item>SendMail</item>
+      <item>SpellingCorrection</item>
+      <item>StyleDefinitions</item>
+      <item>Sequence</item>
+      <item>Sphere</item>
+      <item>Subfactorial</item>
+      <item>SequenceAlignment</item>
+      <item>SphericalBesselJ</item>
+      <item>Subgraph</item>
+      <item>SequenceHold</item>
+      <item>SphericalBesselY</item>
+      <item>SubMinus</item>
+      <item>Series</item>
+      <item>SphericalHankelH1</item>
+      <item>SubPlus</item>
+      <item>SeriesCoefficient</item>
+      <item>SphericalHankelH2</item>
+      <item>Subresultants</item>
+      <item>SeriesData</item>
+      <item>SphericalHarmonicY</item>
+      <item>Subscript</item>
+      <item>SessionTime</item>
+      <item>SphericalPlot3D</item>
+      <item>SubscriptBox</item>
+      <item>Set</item>
+      <item>SphericalRegion</item>
+      <item>Subset</item>
+      <item>SetAccuracy</item>
+      <item>SpheroidalEigenvalue</item>
+      <item>SubsetEqual</item>
+      <item>SetAlphaChannel</item>
+      <item>SpheroidalJoiningFactor</item>
+      <item>Subsets</item>
+      <item>SetAttributes</item>
+      <item>SpheroidalPS</item>
+      <item>SubStar</item>
+      <item>SetDelayed</item>
+      <item>SpheroidalPSPrime</item>
+      <item>Subsuperscript</item>
+      <item>SetDirectory</item>
+      <item>SpheroidalQS</item>
+      <item>SubsuperscriptBox</item>
+      <item>SetFileDate</item>
+      <item>SpheroidalQSPrime</item>
+      <item>Subtract</item>
+      <item>SetOptions</item>
+      <item>SpheroidalRadialFactor</item>
+      <item>SubtractFrom</item>
+      <item>SetPrecision</item>
+      <item>SpheroidalS1</item>
+      <item>Succeeds</item>
+      <item>SetProperty</item>
+      <item>SpheroidalS1Prime</item>
+      <item>SucceedsEqual</item>
+      <item>SetSelectedNotebook</item>
+      <item>SpheroidalS2</item>
+      <item>SucceedsSlantEqual</item>
+      <item>SetSharedFunction</item>
+      <item>SpheroidalS2Prime</item>
+      <item>SucceedsTilde</item>
+      <item>SetSharedVariable</item>
+      <item>Splice</item>
+      <item>SuchThat</item>
+      <item>SetStreamPosition</item>
+      <item>SplineClosed</item>
+      <item>Sum</item>
+      <item>SetSystemOptions</item>
+      <item>SplineDegree</item>
+      <item>SumConvergence</item>
+      <item>Setter</item>
+      <item>SplineKnots</item>
+      <item>SuperDagger</item>
+      <item>SetterBar</item>
+      <item>SplineWeights</item>
+      <item>SuperMinus</item>
+      <item>Setting</item>
+      <item>Split</item>
+      <item>SuperPlus</item>
+      <item>Shallow</item>
+      <item>SplitBy</item>
+      <item>Superscript</item>
+      <item>ShannonWavelet</item>
+      <item>SpokenString</item>
+      <item>SuperscriptBox</item>
+      <item>ShapiroWilkTest</item>
+      <item>Sqrt</item>
+      <item>Superset</item>
+      <item>Share</item>
+      <item>SqrtBox</item>
+      <item>SupersetEqual</item>
+      <item>Sharpen</item>
+      <item>Square</item>
+      <item>SuperStar</item>
+      <item>ShearingMatrix</item>
+      <item>SquaredEuclideanDistance</item>
+      <item>SurvivalDistribution</item>
+      <item>ShearingTransform</item>
+      <item>SquareFreeQ</item>
+      <item>SurvivalFunction</item>
+      <item>Short</item>
+      <item>SquareIntersection</item>
+      <item>SuspendPacket</item>
+      <item>ShortDownArrow</item>
+      <item>SquaresR</item>
+      <item>SuzukiDistribution</item>
+      <item>Shortest</item>
+      <item>SquareSubset</item>
+      <item>SuzukiGroupSuz</item>
+      <item>ShortestPathFunction</item>
+      <item>SquareSubsetEqual</item>
+      <item>Switch</item>
+      <item>ShortLeftArrow</item>
+      <item>SquareSuperset</item>
+      <item>Symbol</item>
+      <item>ShortRightArrow</item>
+      <item>SquareSupersetEqual</item>
+      <item>SymbolName</item>
+      <item>ShortUpArrow</item>
+      <item>SquareUnion</item>
+      <item>SymletWavelet</item>
+      <item>Show</item>
+      <item>SquareWave</item>
+      <item>SymmetricGroup</item>
+      <item>ShowAutoStyles</item>
+      <item>StabilityMargins</item>
+      <item>SymmetricMatrixQ</item>
+      <item>ShowCellBracket</item>
+      <item>StabilityMarginsStyle</item>
+      <item>SymmetricPolynomial</item>
+      <item>ShowCellLabel</item>
+      <item>StableDistribution</item>
+      <item>SymmetricReduction</item>
+      <item>ShowCellTags</item>
+      <item>Stack</item>
+      <item>SynchronousInitialization</item>
+      <item>ShowCursorTracker</item>
+      <item>StackBegin</item>
+      <item>SynchronousUpdating</item>
+      <item>ShowGroupOpener</item>
+      <item>StackComplete</item>
+      <item>SyntaxInformation</item>
+      <item>ShowPageBreaks</item>
+      <item>StackInhibit</item>
+      <item>SyntaxLength</item>
+      <item>ShowSelection</item>
+      <item>StandardDeviation</item>
+      <item>SyntaxPacket</item>
+      <item>ShowSpecialCharacters</item>
+      <item>StandardDeviationFilter</item>
+      <item>SyntaxQ</item>
+      <item>ShowStringCharacters</item>
+      <item>StandardForm</item>
+      <item>SystemDialogInput</item>
+      <item>ShrinkingDelay</item>
+      <item>Standardize</item>
+      <item>SystemInformation</item>
+      <item>SiegelTheta</item>
+      <item>Star</item>
+      <item>SystemOpen</item>
+      <item>SiegelTukeyTest</item>
+      <item>StarGraph</item>
+      <item>SystemOptions</item>
+      <item>Sign</item>
+      <item>StartingStepSize</item>
+      <item>SystemsModelDelete</item>
+      <item>Signature</item>
+      <item>StartOfLine</item>
+      <item>SystemsModelDimensions</item>
+      <item>SignedRankTest</item>
+      <item>StartOfString</item>
+      <item>SystemsModelExtract</item>
+      <item>SignificanceLevel</item>
+      <item>StartScheduledTask</item>
+      <item>SystemsModelFeedbackConnect</item>
+      <item>SignPadding</item>
+      <item>StateFeedbackGains</item>
+      <item>SystemsModelLabels</item>
+      <item>SignTest</item>
+      <item>StateOutputEstimator</item>
+      <item>SystemsModelOrder</item>
+      <item>SimilarityRules</item>
+      <item>StateResponse</item>
+      <item>SystemsModelParallelConnect</item>
+      <item>SimpleGraph</item>
+      <item>StateSpaceModel</item>
+      <item>SystemsModelSeriesConnect</item>
+      <item>SimpleGraphQ</item>
+      <item>StateSpaceRealization</item>
+      <item>SystemsModelStateFeedbackConnect</item>
+      <item>Simplify</item>
+      <item>StateSpaceTransform</item>
+      <item>T</item>
+      <item>Table</item>
+      <item>Tilde</item>
+      <item>TraceOn</item>
+      <item>TableAlignments</item>
+      <item>TildeEqual</item>
+      <item>TraceOriginal</item>
+      <item>TableDepth</item>
+      <item>TildeFullEqual</item>
+      <item>TracePrint</item>
+      <item>TableDirections</item>
+      <item>TildeTilde</item>
+      <item>TraceScan</item>
+      <item>TableForm</item>
+      <item>TimeConstrained</item>
+      <item>TrackedSymbols</item>
+      <item>TableHeadings</item>
+      <item>TimeConstraint</item>
+      <item>TradingChart</item>
+      <item>TableSpacing</item>
+      <item>Times</item>
+      <item>TraditionalForm</item>
+      <item>TabView</item>
+      <item>TimesBy</item>
+      <item>TransferFunctionCancel</item>
+      <item>TagBox</item>
+      <item>TimeUsed</item>
+      <item>TransferFunctionExpand</item>
+      <item>TaggingRules</item>
+      <item>TimeValue</item>
+      <item>TransferFunctionFactor</item>
+      <item>TagSet</item>
+      <item>TimeZone</item>
+      <item>TransferFunctionModel</item>
+      <item>TagSetDelayed</item>
+      <item>Timing</item>
+      <item>TransferFunctionPoles</item>
+      <item>TagUnset</item>
+      <item>Tiny</item>
+      <item>TransferFunctionZeros</item>
+      <item>Take</item>
+      <item>TitsGroupT</item>
+      <item>TransformationFunction</item>
+      <item>TakeWhile</item>
+      <item>ToBoxes</item>
+      <item>TransformationFunctions</item>
+      <item>Tally</item>
+      <item>ToCharacterCode</item>
+      <item>TransformationMatrix</item>
+      <item>Tan</item>
+      <item>ToContinuousTimeModel</item>
+      <item>TransformedDistribution</item>
+      <item>Tanh</item>
+      <item>ToDiscreteTimeModel</item>
+      <item>Translate</item>
+      <item>TargetFunctions</item>
+      <item>ToeplitzMatrix</item>
+      <item>TranslationTransform</item>
+      <item>TautologyQ</item>
+      <item>ToExpression</item>
+      <item>Transparent</item>
+      <item>Temporary</item>
+      <item>Together</item>
+      <item>Transpose</item>
+      <item>TeXForm</item>
+      <item>Toggler</item>
+      <item>TreeForm</item>
+      <item>Text</item>
+      <item>TogglerBar</item>
+      <item>TreeGraph</item>
+      <item>TextAlignment</item>
+      <item>TokenWords</item>
+      <item>TreeGraphQ</item>
+      <item>TextCell</item>
+      <item>Tolerance</item>
+      <item>TreePlot</item>
+      <item>TextClipboardType</item>
+      <item>ToLowerCase</item>
+      <item>TrendStyle</item>
+      <item>TextData</item>
+      <item>ToNumberField</item>
+      <item>TriangleWave</item>
+      <item>TextJustification</item>
+      <item>Tooltip</item>
+      <item>TriangularDistribution</item>
+      <item>TextPacket</item>
+      <item>TooltipDelay</item>
+      <item>Trig</item>
+      <item>TextRecognize</item>
+      <item>Top</item>
+      <item>TrigExpand</item>
+      <item>Texture</item>
+      <item>TopHatTransform</item>
+      <item>TrigFactor</item>
+      <item>TextureCoordinateFunction</item>
+      <item>TopologicalSort</item>
+      <item>TrigFactorList</item>
+      <item>TextureCoordinateScaling</item>
+      <item>ToRadicals</item>
+      <item>Trigger</item>
+      <item>Therefore</item>
+      <item>ToRules</item>
+      <item>TrigReduce</item>
+      <item>Thick</item>
+      <item>ToString</item>
+      <item>TrigToExp</item>
+      <item>Thickness</item>
+      <item>Total</item>
+      <item>TrimmedMean</item>
+      <item>Thin</item>
+      <item>TotalVariationFilter</item>
+      <item>True</item>
+      <item>Thinning</item>
+      <item>TotalWidth</item>
+      <item>TrueQ</item>
+      <item>ThompsonGroupTh</item>
+      <item>ToUpperCase</item>
+      <item>TruncatedDistribution</item>
+      <item>Thread</item>
+      <item>Tr</item>
+      <item>TTest</item>
+      <item>ThreeJSymbol</item>
+      <item>Trace</item>
+      <item>Tube</item>
+      <item>Threshold</item>
+      <item>TraceAbove</item>
+      <item>TukeyLambdaDistribution</item>
+      <item>Through</item>
+      <item>TraceBackward</item>
+      <item>Tuples</item>
+      <item>Throw</item>
+      <item>TraceDepth</item>
+      <item>TuranGraph</item>
+      <item>Thumbnail</item>
+      <item>TraceDialog</item>
+      <item>TuringMachine</item>
+      <item>Ticks</item>
+      <item>TraceForward</item>
+      <item>TicksStyle</item>
+      <item>TraceOff</item>
+      <item>U</item>
+      <item>Uncompress</item>
+      <item>UniformSumDistribution</item>
+      <item>UpArrowBar</item>
+      <item>Undefined</item>
+      <item>Uninstall</item>
+      <item>UpArrowDownArrow</item>
+      <item>UnderBar</item>
+      <item>Union</item>
+      <item>Update</item>
+      <item>Underflow</item>
+      <item>UnionPlus</item>
+      <item>UpdateInterval</item>
+      <item>Underlined</item>
+      <item>Unique</item>
+      <item>UpDownArrow</item>
+      <item>Underoverscript</item>
+      <item>UnitBox</item>
+      <item>UpEquilibrium</item>
+      <item>UnderoverscriptBox</item>
+      <item>Unitize</item>
+      <item>UpperCaseQ</item>
+      <item>Underscript</item>
+      <item>UnitStep</item>
+      <item>UpperLeftArrow</item>
+      <item>UnderscriptBox</item>
+      <item>UnitTriangle</item>
+      <item>UpperRightArrow</item>
+      <item>UndirectedEdge</item>
+      <item>UnitVector</item>
+      <item>UpperTriangularize</item>
+      <item>UndirectedGraph</item>
+      <item>Unprotect</item>
+      <item>UpSet</item>
+      <item>UndirectedGraphQ</item>
+      <item>UnsameQ</item>
+      <item>UpSetDelayed</item>
+      <item>Unequal</item>
+      <item>UnsavedVariables</item>
+      <item>UpTeeArrow</item>
+      <item>Unevaluated</item>
+      <item>Unset</item>
+      <item>UpValues</item>
+      <item>UniformDistribution</item>
+      <item>UnsetShared</item>
+      <item>UsingFrontEnd</item>
+      <item>UniformGraphDistribution</item>
+      <item>UpArrow</item>
+      <item>V</item>
+      <item>ValidationLength</item>
+      <item>VertexAdd</item>
+      <item>VertexReplace</item>
+      <item>ValueQ</item>
+      <item>VertexColors</item>
+      <item>VertexShape</item>
+      <item>Variables</item>
+      <item>VertexComponent</item>
+      <item>VertexShapeFunction</item>
+      <item>Variance</item>
+      <item>VertexCoordinateRules</item>
+      <item>VertexSize</item>
+      <item>VarianceEquivalenceTest</item>
+      <item>VertexCoordinates</item>
+      <item>VertexStyle</item>
+      <item>VarianceEstimatorFunction</item>
+      <item>VertexCount</item>
+      <item>VertexTextureCoordinates</item>
+      <item>VarianceTest</item>
+      <item>VertexCoverQ</item>
+      <item>VertexWeight</item>
+      <item>VectorAngle</item>
+      <item>VertexDegree</item>
+      <item>VerticalBar</item>
+      <item>VectorColorFunction</item>
+      <item>VertexDelete</item>
+      <item>VerticalSeparator</item>
+      <item>VectorColorFunctionScaling</item>
+      <item>VertexEccentricity</item>
+      <item>VerticalSlider</item>
+      <item>VectorDensityPlot</item>
+      <item>VertexInComponent</item>
+      <item>VerticalTilde</item>
+      <item>VectorPlot</item>
+      <item>VertexInDegree</item>
+      <item>ViewAngle</item>
+      <item>VectorPlot3D</item>
+      <item>VertexIndex</item>
+      <item>ViewCenter</item>
+      <item>VectorPoints</item>
+      <item>VertexLabeling</item>
+      <item>ViewMatrix</item>
+      <item>VectorQ</item>
+      <item>VertexLabels</item>
+      <item>ViewPoint</item>
+      <item>VectorScale</item>
+      <item>VertexList</item>
+      <item>ViewRange</item>
+      <item>VectorStyle</item>
+      <item>VertexNormals</item>
+      <item>ViewVector</item>
+      <item>Vee</item>
+      <item>VertexOutComponent</item>
+      <item>ViewVertical</item>
+      <item>Verbatim</item>
+      <item>VertexOutDegree</item>
+      <item>Visible</item>
+      <item>VerifyConvergence</item>
+      <item>VertexQ</item>
+      <item>VonMisesDistribution</item>
+      <item>VerifyTestAssumptions</item>
+      <item>VertexRenderingFunction</item>
+      <item>W</item>
+      <item>WaitAll</item>
+      <item>WeierstrassHalfPeriods</item>
+      <item>WindowFloating</item>
+      <item>WaitNext</item>
+      <item>WeierstrassInvariants</item>
+      <item>WindowFrame</item>
+      <item>WakebyDistribution</item>
+      <item>WeierstrassP</item>
+      <item>WindowMargins</item>
+      <item>WalleniusHypergeometricDistribution</item>
+      <item>WeierstrassPPrime</item>
+      <item>WindowMovable</item>
+      <item>WaringYuleDistribution</item>
+      <item>WeierstrassSigma</item>
+      <item>WindowOpacity</item>
+      <item>WatershedComponents</item>
+      <item>WeierstrassZeta</item>
+      <item>WindowSize</item>
+      <item>WatsonUSquareTest</item>
+      <item>WeightedAdjacencyGraph</item>
+      <item>WindowStatusArea</item>
+      <item>WattsStrogatzGraphDistribution</item>
+      <item>WeightedAdjacencyMatrix</item>
+      <item>WindowTitle</item>
+      <item>WaveletBestBasis</item>
+      <item>WeightedGraphQ</item>
+      <item>WindowToolbars</item>
+      <item>WaveletFilterCoefficients</item>
+      <item>Weights</item>
+      <item>With</item>
+      <item>WaveletImagePlot</item>
+      <item>WheelGraph</item>
+      <item>WolframAlpha</item>
+      <item>WaveletListPlot</item>
+      <item>Which</item>
+      <item>Word</item>
+      <item>WaveletMapIndexed</item>
+      <item>While</item>
+      <item>WordBoundary</item>
+      <item>WaveletMatrixPlot</item>
+      <item>White</item>
+      <item>WordCharacter</item>
+      <item>WaveletPhi</item>
+      <item>Whitespace</item>
+      <item>WordData</item>
+      <item>WaveletPsi</item>
+      <item>WhitespaceCharacter</item>
+      <item>WordSearch</item>
+      <item>WaveletScale</item>
+      <item>WhittakerM</item>
+      <item>WordSeparators</item>
+      <item>WaveletScalogram</item>
+      <item>WhittakerW</item>
+      <item>WorkingPrecision</item>
+      <item>WaveletThreshold</item>
+      <item>WienerFilter</item>
+      <item>Write</item>
+      <item>WeatherData</item>
+      <item>WignerD</item>
+      <item>WriteString</item>
+      <item>WeberE</item>
+      <item>WignerSemicircleDistribution</item>
+      <item>Wronskian</item>
+      <item>Wedge</item>
+      <item>WindowClickSelect</item>
+      <item>WeibullDistribution</item>
+      <item>WindowElements</item>
+      <item>X</item>
+      <item>XMLElement</item>
+      <item>Xnor</item>
+      <item>XMLObject</item>
+      <item>Xor</item>
+      <item>Y</item>
+      <item>Yellow</item>
+      <item>YuleDissimilarity</item>
+      <item>Z</item>
+      <item>ZernikeR</item>
+      <item>ZetaZero</item>
+      <item>ZTransform</item>
+      <item>ZeroTest</item>
+      <item>ZipfDistribution</item>
+      <item>Zeta</item>
+      <item>ZTest</item>
+      <item>$</item>
+      <item>$Aborted</item>
+      <item>$Inspector</item>
+      <item>$OutputSizeLimit</item>
+      <item>$AssertFunction</item>
+      <item>$InstallationDirectory</item>
+      <item>$Packages</item>
+      <item>$Assumptions</item>
+      <item>$IterationLimit</item>
+      <item>$ParentLink</item>
+      <item>$BaseDirectory</item>
+      <item>$KernelCount</item>
+      <item>$ParentProcessID</item>
+      <item>$BatchInput</item>
+      <item>$KernelID</item>
+      <item>$Path</item>
+      <item>$BatchOutput</item>
+      <item>$Language</item>
+      <item>$PathnameSeparator</item>
+      <item>$ByteOrdering</item>
+      <item>$LibraryPath</item>
+      <item>$PerformanceGoal</item>
+      <item>$Canceled</item>
+      <item>$LicenseExpirationDate</item>
+      <item>$Post</item>
+      <item>$CharacterEncoding</item>
+      <item>$LicenseID</item>
+      <item>$Pre</item>
+      <item>$CharacterEncodings</item>
+      <item>$LicenseServer</item>
+      <item>$PrePrint</item>
+      <item>$CommandLine</item>
+      <item>$Line</item>
+      <item>$PreRead</item>
+      <item>$CompilationTarget</item>
+      <item>$Linked</item>
+      <item>$ProcessID</item>
+      <item>$ConfiguredKernels</item>
+      <item>$MachineAddresses</item>
+      <item>$ProcessorCount</item>
+      <item>$Context</item>
+      <item>$MachineDomains</item>
+      <item>$ProcessorType</item>
+      <item>$ContextPath</item>
+      <item>$MachineEpsilon</item>
+      <item>$RecursionLimit</item>
+      <item>$ControlActiveSetting</item>
+      <item>$MachineID</item>
+      <item>$ReleaseNumber</item>
+      <item>$CreationDate</item>
+      <item>$MachineName</item>
+      <item>$RootDirectory</item>
+      <item>$CurrentLink</item>
+      <item>$MachinePrecision</item>
+      <item>$ScheduledTask</item>
+      <item>$DateStringFormat</item>
+      <item>$MachineType</item>
+      <item>$ScriptCommandLine</item>
+      <item>$DefaultImagingDevice</item>
+      <item>$MaxExtraPrecision</item>
+      <item>$SessionID</item>
+      <item>$Display</item>
+      <item>$MaxMachineNumber</item>
+      <item>$SharedFunctions</item>
+      <item>$DisplayFunction</item>
+      <item>$MaxNumber</item>
+      <item>$SharedVariables</item>
+      <item>$DistributedContexts</item>
+      <item>$MaxPiecewiseCases</item>
+      <item>$SoundDisplayFunction</item>
+      <item>$DynamicEvaluation</item>
+      <item>$MaxPrecision</item>
+      <item>$SyntaxHandler</item>
+      <item>$Echo</item>
+      <item>$MaxRootDegree</item>
+      <item>$System</item>
+      <item>$Epilog</item>
+      <item>$MessageGroups</item>
+      <item>$SystemCharacterEncoding</item>
+      <item>$ExportFormats</item>
+      <item>$MessageList</item>
+      <item>$SystemID</item>
+      <item>$Failed</item>
+      <item>$MessagePrePrint</item>
+      <item>$SystemWordLength</item>
+      <item>$FrontEnd</item>
+      <item>$Messages</item>
+      <item>$TemporaryDirectory</item>
+      <item>$FrontEndSession</item>
+      <item>$MinMachineNumber</item>
+      <item>$TimedOut</item>
+      <item>$GeoLocation</item>
+      <item>$MinNumber</item>
+      <item>$TimeUnit</item>
+      <item>$HistoryLength</item>
+      <item>$MinPrecision</item>
+      <item>$TimeZone</item>
+      <item>$HomeDirectory</item>
+      <item>$ModuleNumber</item>
+      <item>$Urgent</item>
+      <item>$IgnoreEOF</item>
+      <item>$NewMessage</item>
+      <item>$UserBaseDirectory</item>
+      <item>$ImagingDevices</item>
+      <item>$NewSymbol</item>
+      <item>$UserDocumentsDirectory</item>
+      <item>$ImportFormats</item>
+      <item>$Notebooks</item>
+      <item>$UserName</item>
+      <item>$InitialDirectory</item>
+      <item>$NumberMarks</item>
+      <item>$Version</item>
+      <item>$Input</item>
+      <item>$OperatingSystem</item>
+      <item>$VersionNumber</item>
+      <item>$InputFileName</item>
+      <item>$Output</item>
+    </list>
+    <contexts>
+      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
+	<keyword attribute="function" String="functions" context="#stay"/>
+	<Int attribute="Int" context="#stay" />
+	<Float attribute="Float" context="#stay" />
+	<RegExpr attribute="Parameter" String="[a-zA-Z_0-9]+\_" context="#stay"/>
+	<RegExpr attribute="Replace" String="(\-\>|\/\.)" context="#stay"/>
+	<AnyChar attribute="Operator" String="+*/%\|-^" context="#stay"/>
+	<RegExpr attribute="Assign" String="(:=|=)" context="#stay"/>
+      </context>
+    </contexts>
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false"/>
+      <itemData name="function" defStyleNum="dsFunction" spellChecking="false"/>
+      <itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
+      <itemData name="Int" defStyleNum="dsDecVal" spellChecking="false"/>
+      <itemData name="Parameter" italic="1" defStyleNum="dsDataType" spellChecking="false"/>
+      <itemData name="Operator" defStyleNum="dsNormal" color="#FF7B00" spellChecking="false"/>
+      <itemData name="Assign" defStyleNum="dsNormal" color="#00A0E4" spellChecking="false"/>
+      <itemData name="Replace" defStyleNum="dsNormal" color="#85C200" spellChecking="false"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <keywords casesensitive="0" weakDeliminator="-%"/>
+    <comments>
+      <comment name="multiLine" start="(*" end="*)" />
+    </comments>
+  </general>
+</language>
diff --git a/xml/maxima.xml b/xml/maxima.xml
--- a/xml/maxima.xml
+++ b/xml/maxima.xml
@@ -21,7 +21,7 @@
 
 <!DOCTYPE language SYSTEM "language.dtd">
 
-<language name="Maxima" version="0.16" kateversion="2.0" section="Scientific" extensions="*.mac;*.MAC;*.dem;*.DEM" casesensitive="1" author="Alexey Beshenov &lt;al@beshenov.ru>" license="LGPL">
+<language name="Maxima" version="0.17" kateversion="2.0" section="Scientific" extensions="*.mac;*.MAC;*.dem;*.DEM" casesensitive="1" author="Alexey Beshenov &lt;al@beshenov.ru>" license="LGPL">
     <highlighting>
 
         <list name="MaximaKeyword">
@@ -1867,14 +1867,14 @@
         <itemDatas>
             <itemData name="Normal Text" defStyleNum="dsNormal" color="#000"/>
             <itemData name="Keyword" defStyleNum="dsKeyword" bold="true" color="#000"/>
-            <itemData name="Variable" italic="true" color="#336"/>
+            <itemData name="Variable" defStyleNum="dsVariable" italic="true" color="#336"/>
             <itemData name="String" defStyleNum="dsString" color="#c00"/>
             <itemData name="Function" defStyleNum="dsFunction" color="#066"/>
             <itemData name="Integer" defStyleNum="dsDecVal" color="#00c"/>
             <itemData name="Float" defStyleNum="dsFloat" color="#606"/>
-            <itemData name="Comment" color="#666"/>
-            <itemData name="Quote" color="#00c" bold="true"/>
-            <itemData name="Special" color="#c00" bold="true" />
+            <itemData name="Comment" defStyleNum="dsComment" color="#666"/>
+            <itemData name="Quote" defStyleNum="dsComment" color="#00c" bold="true"/>
+            <itemData name="Special" defStyleNum="dsSpecialString" color="#c00" bold="true" />
         </itemDatas>
 
     </highlighting>
diff --git a/xml/mediawiki.xml b/xml/mediawiki.xml
new file mode 100644
--- /dev/null
+++ b/xml/mediawiki.xml
@@ -0,0 +1,623 @@
+<?xml version = '1.0' encoding = 'UTF-8'?>
+<!DOCTYPE language SYSTEM "language.dtd" [
+  <!ENTITY url          "(http:|https:|ftp:|mailto:)[^]| ]*(?=$|[]|\s])">
+  <!ENTITY htmlTagName  "(?![0-9])[\w_:][\w.:_-]*">
+  <!ENTITY htmlEntity   "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&htmlTagName;);">
+  <!ENTITY wikiLinkWithDescription "\[\[[^]|]*\|[^]]*\]\]">
+  <!ENTITY wikiLinkWithoutDescription "\[\[[^]|]*\]\]">
+]>
+<language name="MediaWiki" section="Markup" version="1.11" kateversion="3.10" extensions="*.mediawiki" mimetype="" license="FDL" >
+  <highlighting>
+    <contexts>
+      <context attribute="Normal" lineEndContext="#stay" name="normal" >
+        <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
+        <RegExpr String="[=]{5,5}(?!=)" context="Section5" attribute="Section" column="0" />
+        <RegExpr String="[=]{4,4}(?!=)" context="Section4" attribute="Section" column="0" />
+        <RegExpr String="[=]{3,3}(?!=)" context="Section3" attribute="Section" column="0" />
+        <RegExpr String="[=]{2,2}(?!=)" context="Section2" attribute="Section" column="0" />
+        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <DetectChar char=";" attribute="WikiTag" context="DefinitionListHeader" column="0" />
+        <IncludeRules context="FindListItem" />
+        <IncludeRules context="FindUrl" />
+        <IncludeRules context="FindTextDecorations" />
+        <IncludeRules context="FindTable" />
+        <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindWikiLink" />
+        <IncludeRules context="FindHtmlEntities" />
+        <StringDetect String="&lt;nowiki&gt;" context="NoWiki" attribute="WikiTag" />
+        <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
+        <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
+        <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
+        <RegExpr String="[\s]" context="Unformatted" column="0" />
+      </context>
+      <context name="TableHeader" attribute="Normal" lineEndContext="TableContent" >
+        <Detect2Chars char="{" char1="|" attribute="WikiTag" beginRegion="table" />
+        <IncludeRules context="FindHtmlStartTagAttributes" />
+      </context>
+      <context name="TableContent" attribute="Normal" lineEndContext="#stay">
+        <StringDetect String="&lt;!--" context="comment" attribute="Comment" />
+        <RegExpr String="[=]{5,5}(?!=)" context="Section5" attribute="Section" column="0" />
+        <RegExpr String="[=]{4,4}(?!=)" context="Section4" attribute="Section" column="0" />
+        <RegExpr String="[=]{3,3}(?!=)" context="Section3" attribute="Section" column="0" />
+        <RegExpr String="[=]{2,2}(?!=)" context="Section2" attribute="Section" column="0" />
+        <DetectChar char=";" attribute="WikiTag" context="DefinitionListHeader" column="0" />
+        <IncludeRules context="FindListItem" />
+        <IncludeRules context="FindUrl" />
+        <IncludeRules context="FindTextDecorations" />
+        <IncludeRules context="FindTable" />
+        <Detect2Chars char="|" char1="}" column="0" attribute="WikiTag" context="#pop#pop" endRegion="table" />
+        <Detect2Chars char="|" char1="-" column="0" attribute="WikiTag" />
+        <DetectChar char="|" attribute="WikiTag" context="#stay"/>
+        <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindWikiLink" />
+        <IncludeRules context="FindHtmlEntities" />
+        <StringDetect String="&lt;nowiki&gt;" context="NoWiki" attribute="WikiTag" />
+        <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
+        <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
+        <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
+        <RegExpr String="[\s]" context="Unformatted" column="0" />
+        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <RegExpr String="[-]{4,}" attribute="WikiTag" context="#stay" />
+        <DetectChar char="!" attribute="WikiTag" context="#stay" column="0" />
+      </context>
+      <context attribute="Section" lineEndContext="#pop" name="Section5" >
+        <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
+        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <IncludeRules context="FindUrl" />
+        <IncludeRules context="FindTextDecorationsInHeader" />
+        <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindWikiLink" />
+        <IncludeRules context="FindHtmlEntities" />
+        <StringDetect String="&lt;nowiki&gt;" context="NoWiki" attribute="HtmlTag" />
+        <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
+        <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
+        <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
+        <RegExpr String="={6,} *$" context="#pop" attribute="Normal" />
+        <RegExpr String="={5,5} *$" context="#pop" attribute="Section" />
+        <RegExpr String="={1,4} *$" context="#pop" attribute="Normal" />
+        <RegExpr String="={1,4} *$" context="#pop" attribute="Normal" />
+        <RegExpr String="=*[^=]+$" context="#pop" attribute="Normal" />
+      </context>
+      <context attribute="Section" lineEndContext="#pop" name="Section4" >
+        <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
+        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <IncludeRules context="FindUrl" />
+        <IncludeRules context="FindTextDecorationsInHeader" />
+        <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindWikiLink" />
+        <IncludeRules context="FindHtmlEntities" />
+        <StringDetect String="&lt;nowiki&gt;" context="NoWiki" attribute="HtmlTag" />
+        <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
+        <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
+        <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
+        <RegExpr String="={5,} *$" context="#pop" attribute="Normal" />
+        <RegExpr String="={4,4} *$" context="#pop" attribute="Section" />
+        <RegExpr String="={1,3} *$" context="#pop" attribute="Normal" />
+        <RegExpr String="=*[^=]+$" context="#pop" attribute="Normal" />
+      </context>
+      <context attribute="Section" lineEndContext="#pop" name="Section3" >
+        <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
+        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <IncludeRules context="FindUrl" />
+        <IncludeRules context="FindTextDecorationsInHeader" />
+        <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindWikiLink" />
+        <IncludeRules context="FindHtmlEntities" />
+        <StringDetect String="&lt;nowiki&gt;" context="NoWiki" attribute="HtmlTag" />
+        <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
+        <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
+        <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
+        <RegExpr String="={4,} *$" context="#pop" attribute="Normal" />
+        <RegExpr String="={3,3} *$" context="#pop" attribute="Section" />
+        <RegExpr String="={1,2} *$" context="#pop" attribute="Normal" />
+        <RegExpr String="=*[^=]+$" context="#pop" attribute="Normal" />
+      </context>
+      <context attribute="Section" lineEndContext="#pop" name="Section2" >
+        <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
+        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <IncludeRules context="FindUrl" />
+        <IncludeRules context="FindTextDecorationsInHeader" />
+        <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindWikiLink" />
+        <IncludeRules context="FindHtmlEntities" />
+        <StringDetect String="&lt;nowiki&gt;" context="NoWiki" attribute="HtmlTag" />
+        <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
+        <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
+        <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
+        <RegExpr String="={3,} *$" context="#pop" attribute="Normal" />
+        <RegExpr String="={2,2} *$" context="#pop" attribute="Section" />
+        <RegExpr String="={1,1} *$" context="#pop" attribute="Normal" />
+        <RegExpr String="=*[^=]+$" context="#pop" attribute="Normal" />
+      </context>
+      <context attribute="Comment" lineEndContext="#stay" name="comment" >
+        <StringDetect String="--&gt;" context="#pop" attribute="Comment" endRegion="comment" />
+      </context>
+      <context attribute="Link" lineEndContext="#stay" name="DelimitedURL" >
+        <DetectChar char="]" context="#pop" attribute="WikiTag" />
+        <DetectChar char="[" context="#stay" attribute="WikiTag" />
+        <RegExpr String="&url;" context="DelimitedUrlLink" lookAhead="true" />
+        <DetectChar char=" " context="URLTag" attribute="WikiTag" />
+      </context>
+      <context attribute="Link" lineEndContext="#stay" name="DelimitedUrlLink" >
+        <IncludeRules context="FindTemplate" />
+        <DetectChar char=" " context="#pop" lookAhead="true" />
+        <DetectChar char="]" context="#pop" lookAhead="true" />
+      </context>
+
+      <context attribute="Link" lineEndContext="#pop" name="LooseURL" >
+        <IncludeRules context="FindTemplate" />
+        <DetectChar char=" " context="#pop" attribute="WikiTag" />
+      </context>
+      <context attribute="Link" lineEndContext="#pop" name="LooseURLWithinTemplate" >
+        <IncludeRules context="FindTemplate" />
+        <Detect2Chars char="}" char1="}" context="#pop" lookAhead="true" />
+        <DetectChar char=" " context="#pop" attribute="WikiTag" />
+      </context>
+
+      <context attribute="dsNormal" lineEndContext="#stay" name="URLTag" >
+        <IncludeRules context="FindTextDecorations" />
+        <IncludeRules context="FindTemplate" />
+        <DetectChar char="]" context="#pop" lookAhead="true" />
+      </context>
+
+      <context name="WikiLinkWithoutDescriptionRules" attribute="Normal" lineEndContext="#stay" >
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindHtmlEntities" />
+        <Detect2Chars char="[" char1="[" attribute="WikiTag" />
+        <Detect2Chars char="]" char1="]" context="#pop" attribute="WikiTag" />
+      </context>
+      <context name="WikiLinkWithDescriptionRules" attribute="Normal" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithoutDescriptionRules" />
+        <DetectChar char="#" attribute="WikiTag" />
+      </context>
+      <context name="WikiLink" attribute="Link" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithDescriptionRules" />
+        <DetectChar char="|" attribute="WikiTag" context="WikiLinkDescription" />
+      </context>
+      <context name="WikiLinkBoldWithDescription" attribute="Link" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithDescriptionRules" />
+        <DetectChar char="|" attribute="WikiTag" context="WikiLinkDescriptionBold" />
+      </context>
+      <context name="WikiLinkBoldWithoutDescription" attribute="LinkBold" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithoutDescriptionRules" />
+        <DetectChar char="#" attribute="WikiTagBold" />
+      </context>
+      <context name="WikiLinkItalicWithDescription" attribute="Link" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithDescriptionRules" />
+        <DetectChar char="|" attribute="WikiTag" context="WikiLinkDescriptionItalic" />
+      </context>
+      <context name="WikiLinkItalicWithoutDescription" attribute="LinkItalic" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithoutDescriptionRules" />
+        <DetectChar char="#" attribute="WikiTagItalic" />
+      </context>
+      <context name="WikiLinkUnderlinedWithDescription" attribute="Link" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithDescriptionRules" />
+        <DetectChar char="|" attribute="WikiTag" context="WikiLinkDescriptionUnderlined" />
+      </context>
+      <context name="WikiLinkUnderlinedWithoutDescription" attribute="LinkUnderlined" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithoutDescriptionRules" />
+        <DetectChar char="#" attribute="WikiTagUnderlined" />
+      </context>
+      <context name="WikiLinkBoldItalicWithDescription" attribute="Link" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithDescriptionRules" />
+        <DetectChar char="|" attribute="WikiTag" context="WikiLinkDescriptionBoldItalic" />
+      </context>
+      <context name="WikiLinkBoldItalicWithoutDescription" attribute="LinkBoldItalic" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithoutDescriptionRules" />
+        <DetectChar char="#" attribute="WikiTagBoldItalic" />
+      </context>
+      <context name="WikiLinkBoldUnderlinedWithDescription" attribute="Link" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithDescriptionRules" />
+        <DetectChar char="|" attribute="WikiTag" context="WikiLinkDescriptionBoldUnderlined" />
+      </context>
+      <context name="WikiLinkBoldUnderlinedWithoutDescription" attribute="LinkBoldUnderlined" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithoutDescriptionRules" />
+        <DetectChar char="#" attribute="WikiTagBoldUnderlined" />
+      </context>
+      <context name="WikiLinkItalicUnderlinedWithDescription" attribute="Link" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithDescriptionRules" />
+        <DetectChar char="|" attribute="WikiTag" context="WikiLinkDescriptionItalicUnderlined" />
+      </context>
+      <context name="WikiLinkItalicUnderlinedWithoutDescription" attribute="LinkItalicUnderlined" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithoutDescriptionRules" />
+        <DetectChar char="#" attribute="WikiTagItalicUnderlined" />
+      </context>
+      <context name="WikiLinkBoldItalicUnderlinedWithDescription" attribute="Link" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkWithDescriptionRules" />
+        <DetectChar char="|" attribute="WikiTag" context="WikiLinkDescriptionBoldItalicUnderlined" />
+      </context>
+      <context name="WikiLinkBoldItalicUnderlinedWithoutDescription" attribute="LinkBoldItalicUnderlined" lineEndContext="#stay" >
+        <DetectChar char="#" attribute="WikiTagBoldItalicUnderlined" />
+        <IncludeRules context="WikiLinkWithoutDescriptionRules" />
+      </context>
+
+      <context name="WikiLinkDescriptionRules" attribute="Normal" lineEndContext="#stay">
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindHtmlEntities" />
+        <Detect2Chars char="]" char1="]" context="#pop" attribute="WikiTag" lookAhead="true" />
+      </context>
+      <context name="WikiLinkDescription" attribute="Normal" lineEndContext="#stay">
+        <IncludeRules context="WikiLinkDescriptionRules" />
+        <IncludeRules context="FindTextDecorations" />
+      </context>
+      <context name="WikiLinkDescriptionBold" attribute="Bold" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkDescriptionRules" />
+        <StringDetect String="''" context="BoldItalic" attribute="WikiTag" />
+        <RegExpr String="&lt;u *&gt;" attribute="HtmlTag" context="BoldUnderlined" />
+      </context>
+      <context name="WikiLinkDescriptionItalic" attribute="Italic" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkDescriptionRules" />
+        <StringDetect String="'''" attribute="WikiTag" context="ItalicBold" />
+        <RegExpr String="&lt;u *&gt;" attribute="HtmlTag" context="ItalicUnderlined" />
+      </context>
+      <context name="WikiLinkDescriptionUnderlined" attribute="Underlined" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkDescriptionRules" />
+        <StringDetect String="'''" context="UnderlinedBold" attribute="WikiTag" />
+        <StringDetect String="''" context="UnderlinedItalic" attribute="WikiTag" />
+      </context>
+      <context name="WikiLinkDescriptionBoldItalic" attribute="BoldItalic" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkDescriptionRules" />
+        <RegExpr String="&lt;u *&gt;" attribute="HtmlTag" context="BoldItalicUnderlined" />
+      </context>
+      <context name="WikiLinkDescriptionBoldUnderlined" attribute="BoldUnderlined" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkDescriptionRules" />
+        <StringDetect String="''" context="BoldUnderlinedItalic" attribute="WikiTag" />
+      </context>
+      <context name="WikiLinkDescriptionItalicUnderlined" attribute="ItalicUnderlined" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkDescriptionRules" />
+        <StringDetect String="'''" context="ItalicUnderlinedBold" attribute="WikiTag" />
+      </context>
+      <context name="WikiLinkDescriptionBoldItalicUnderlined" attribute="BoldItalicUnderlined" lineEndContext="#stay" >
+        <IncludeRules context="WikiLinkDescriptionRules" />
+      </context>
+
+      <context attribute="TemplateName" lineEndContext="#stay" name="Template" >
+        <StringDetect String="|" context="TemplateParameterSlot" attribute="WikiTag" />
+        <Detect2Chars char="}" char1="}" context="#pop" attribute="WikiTag" endRegion="template" />
+      </context>
+      <context attribute="Normal" lineEndContext="#stay" name="TemplateParameterSlot" >
+        <Detect2Chars char="}" char1="}" context="#pop" attribute="WikiTag" lookAhead="true" />
+        <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
+        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <IncludeRules context="FindListItem" />
+        <IncludeRules context="FindUrlWithinTemplate" />
+        <IncludeRules context="FindTextDecorations" />
+        <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindWikiLink" />
+        <IncludeRules context="FindHtmlEntities" />
+        <StringDetect String="&lt;nowiki&gt;" context="NoWiki" attribute="HtmlTag" />
+        <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
+        <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
+        <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
+        <StringDetect String="|" context="#pop" attribute="WikiTag" lookAhead="true" />
+        <RegExpr String="[^{}|=]+(?=[=])" attribute="Parameter" context="TemplateParameterSlotEqual" />
+      </context>
+      <context attribute="Normal" lineEndContext="#stay" name="TemplateParameterSlotEqual" >
+        <Detect2Chars char="}" char1="}" context="#pop" attribute="WikiTag" lookAhead="true" />
+        <StringDetect String="|" context="#pop" attribute="WikiTag" lookAhead="true" />
+        <StringDetect String="=" context="TemplateParameterSlotValue" attribute="WikiTag" />
+      </context>
+      <context attribute="Normal" lineEndContext="#stay" name="TemplateParameterSlotValue" >
+        <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
+        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <IncludeRules context="FindListItem" />
+        <IncludeRules context="FindUrlWithinTemplate" />
+        <IncludeRules context="FindTextDecorations" />
+        <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
+        <IncludeRules context="FindTemplate" />
+        <IncludeRules context="FindWikiLink" />
+        <IncludeRules context="FindHtmlEntities" />
+        <StringDetect String="&lt;nowiki&gt;" context="NoWiki" attribute="HtmlTag" />
+        <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
+        <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
+        <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
+        <Detect2Chars char="}" char1="}" context="#pop" attribute="WikiTag" lookAhead="true" />
+        <StringDetect String="|" context="#pop" attribute="WikiTag" lookAhead="true" />
+      </context>
+      <context attribute="Parameter" lineEndContext="#stay" name="TemplateParameter" >
+        <StringDetect String="}}}" context="#pop" attribute="WikiTag" />
+      </context>
+      <context attribute="NoWiki" lineEndContext="#stay" name="NoWiki" >
+        <RegExpr String="&lt;!--[^-]*--&gt;" attribute="NoWiki" />
+        <StringDetect String="&lt;/nowiki&gt;" context="#pop" attribute="HtmlTag" />
+        <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
+        <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
+      </context>
+      <context attribute="Unformatted" lineEndContext="#pop" name="Unformatted" />
+      <context attribute="NoWiki" lineEndContext="#stay" name="Pre" >
+        <StringDetect String="&lt;/pre&gt;" context="#pop" attribute="HtmlTag" />
+      </context>
+
+
+
+      <!-- <source> and <syntaxhighlight> tags. -->
+
+      <context name="SourceStartTag" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="(^|\s+)lang\=(&quot;javascript&quot;|&apos;javascript&apos;)" context="JavaScriptSourceStartTag" lookAhead="true" />
+        <DetectChar attribute="HtmlTag" context="UnsupportedLanguageSourceStartTag" char="&gt;" lookAhead="true" />
+        <IncludeRules context="FindHtmlStartTagAttributes" />
+      </context>
+      <context name="SyntaxHighlightStartTag" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="(^|\s+)lang\=(&quot;javascript&quot;|&apos;javascript&apos;)" context="JavaScriptSyntaxHighlightStartTag" lookAhead="true" />
+        <DetectChar attribute="HtmlTag" context="UnsupportedLanguageSyntaxHighlightStartTag" char="&gt;" lookAhead="true" />
+        <IncludeRules context="FindHtmlStartTagAttributes" />
+      </context>
+
+
+      <context name="UnsupportedLanguageSourceStartTag" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="HtmlTag" context="UnsupportedLanguageSourceContent" char="&gt;" />
+        <IncludeRules context="FindHtmlStartTagAttributes" />
+      </context>
+      <context name="UnsupportedLanguageSyntaxHighlightStartTag" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="HtmlTag" context="UnsupportedLanguageSyntaxHighlightContent" char="&gt;" />
+        <IncludeRules context="FindHtmlStartTagAttributes" />
+      </context>
+
+      <context name="JavaScriptSourceStartTag" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="HtmlTag" context="JavaScriptSourceContent" char="&gt;" />
+        <IncludeRules context="FindHtmlStartTagAttributes" />
+      </context>
+      <context name="JavaScriptSyntaxHighlightStartTag" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="HtmlTag" context="JavaScriptSyntaxHighlightContent" char="&gt;" />
+        <IncludeRules context="FindHtmlStartTagAttributes" />
+      </context>
+
+
+      <context name="UnsupportedLanguageSourceContent" attribute="NoWiki" lineEndContext="#stay">
+        <IncludeRules context="SourceEnd" />
+      </context>
+      <context name="UnsupportedLanguageSyntaxHighlightContent" attribute="NoWiki" lineEndContext="#stay">
+        <IncludeRules context="SyntaxHighlightEnd" />
+      </context>
+
+      <context name="JavaScriptSourceContent" attribute="NoWiki" lineEndContext="#stay">
+        <IncludeRules context="SourceEnd" />
+        <IncludeRules context="Normal##JavaScript" />
+      </context>
+      <context name="JavaScriptSyntaxHighlightContent" attribute="NoWiki" lineEndContext="#stay">
+        <StringDetect String="&lt;/syntaxhighlight&gt;" context="#pop#pop#pop" attribute="HtmlTag" />
+        <IncludeRules context="SyntaxHighlightEnd" />
+        <IncludeRules context="Normal##JavaScript" />
+      </context>
+
+
+      <context name="SourceEnd" attribute="Normal" lineEndContext="#stay">
+        <StringDetect String="&lt;/source&gt;" context="#pop#pop#pop" attribute="HtmlTag" />
+      </context>
+      <context name="SyntaxHighlightEnd" attribute="Normal" lineEndContext="#stay">
+        <StringDetect String="&lt;/syntaxhighlight&gt;" context="#pop#pop#pop" attribute="HtmlTag" />
+      </context>
+
+
+      <context name="HtmlAttribute" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="HtmlAttribute" context="HtmlValue" char="=" />
+        <RegExpr attribute="Error" context="#stay" String="\S" />
+      </context>
+      <context name="HtmlValue" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="HtmlValue" context="ValueWithDoubleQuotes" char="&quot;" />
+        <DetectChar attribute="HtmlValue" context="ValueWithSingleQuotes" char="&apos;" />
+        <RegExpr attribute="Error" context="#stay" String="\S" />
+      </context>
+      <context name="ValueWithDoubleQuotes" attribute="HtmlValue" lineEndContext="#stay">
+        <DetectChar attribute="HtmlValue" context="#pop#pop#pop" char="&quot;" />
+        <IncludeRules context="FindHtmlEntities" />
+      </context>
+      <context name="ValueWithSingleQuotes" attribute="HtmlValue" lineEndContext="#stay">
+        <DetectChar attribute="HtmlValue" context="#pop#pop#pop" char="&apos;" />
+        <IncludeRules context="FindHtmlEntities" />
+      </context>
+
+
+
+      <context attribute="DefinitionListHeader" lineEndContext="#pop" name="DefinitionListHeader" >
+        <DetectChar char=":" context="#pop" attribute="WikiTag" />
+      </context>
+      <context attribute="Bold" lineEndContext="#pop" name="Bold" >
+        <IncludeRules context="FindTemplate" />
+        <StringDetect String="'''" context="#pop" attribute="WikiTag" />
+        <StringDetect String="''" context="BoldItalic" attribute="WikiTag" />
+        <RegExpr String="&lt;u *&gt;" attribute="HtmlTag" context="BoldUnderlined" />
+        <IncludeRules context="FindWikiLinkBeingBold" />
+      </context>
+      <context attribute="Italic" lineEndContext="#pop" name="Italic" >
+        <IncludeRules context="FindTemplate" />
+        <StringDetect String="'''" attribute="WikiTag" context="ItalicBold" />
+        <StringDetect String="''" context="#pop" attribute="WikiTag" />
+        <RegExpr String="&lt;u *&gt;" attribute="HtmlTag" context="ItalicUnderlined" />
+        <IncludeRules context="FindWikiLinkBeingItalic" />
+      </context>
+      <context attribute="Underlined" name="Underlined" lineEndContext="#stay" >
+        <IncludeRules context="FindTemplate" />
+        <StringDetect String="'''" context="UnderlinedBold" attribute="WikiTag" />
+        <StringDetect String="''" context="UnderlinedItalic" attribute="WikiTag" />
+        <RegExpr String="&lt;/u *&gt;" context="#pop" attribute="HtmlTag" />
+        <IncludeRules context="FindWikiLinkBeingUnderlined" />
+      </context>
+      <context name="BoldItalic" attribute="BoldItalic" lineEndContext="#pop" >
+        <IncludeRules context="FindTemplate" />
+        <StringDetect String="''" context="#pop" attribute="WikiTag" />
+        <RegExpr String="&lt;u *&gt;" attribute="HtmlTag" context="BoldItalicUnderlined" />
+        <IncludeRules context="FindWikiLinkBeingBoldItalic" />
+      </context>
+      <context name="ItalicBold" attribute="BoldItalic" lineEndContext="#pop" >
+        <IncludeRules context="FindTemplate" />
+        <StringDetect String="'''" context="#pop" attribute="WikiTag" />
+        <RegExpr String="&lt;u *&gt;" attribute="HtmlTag" context="BoldItalicUnderlined" />
+        <IncludeRules context="FindWikiLinkBeingBoldItalic" />
+      </context>
+      <context name="BoldUnderlined" attribute="BoldUnderlined" lineEndContext="#pop" >
+        <IncludeRules context="FindTemplate" />
+        <RegExpr String="&lt;/u *&gt;" context="#pop" attribute="HtmlTag" />
+        <StringDetect String="''" context="BoldUnderlinedItalic" attribute="WikiTag" />
+        <IncludeRules context="FindWikiLinkBeingBoldUnderlined" />
+      </context>
+      <context name="UnderlinedBold" attribute="BoldUnderlined" lineEndContext="#pop" >
+        <IncludeRules context="FindTemplate" />
+        <StringDetect String="'''" context="#pop" attribute="WikiTag" />
+        <StringDetect String="''" context="BoldUnderlinedItalic" attribute="WikiTag" />
+        <IncludeRules context="FindWikiLinkBeingBoldUnderlined" />
+      </context>
+      <context name="ItalicUnderlined" attribute="ItalicUnderlined" lineEndContext="#pop" >
+        <IncludeRules context="FindTemplate" />
+        <RegExpr String="&lt;/u *&gt;" context="#pop" attribute="HtmlTag" />
+        <StringDetect String="'''" context="ItalicUnderlinedBold" attribute="WikiTag" />
+        <IncludeRules context="FindWikiLinkBeingItalicUnderlined" />
+      </context>
+      <context name="UnderlinedItalic" attribute="ItalicUnderlined" lineEndContext="#pop" >
+        <IncludeRules context="FindTemplate" />
+        <StringDetect String="''" context="#pop" attribute="WikiTag" />
+        <StringDetect String="'''" context="ItalicUnderlinedBold" attribute="WikiTag" />
+        <IncludeRules context="FindWikiLinkBeingItalicUnderlined" />
+      </context>
+      <context name="BoldItalicUnderlined" attribute="BoldItalicUnderlined" lineEndContext="#pop" >
+        <IncludeRules context="FindTemplate" />
+        <RegExpr String="&lt;/u *&gt;" context="#pop" attribute="HtmlTag" />
+        <IncludeRules context="FindWikiLinkBeingBoldItalicUnderlined" />
+      </context>
+      <context name="BoldUnderlinedItalic" attribute="BoldItalicUnderlined" lineEndContext="#pop" >
+        <IncludeRules context="FindTemplate" />
+        <StringDetect String="''" context="#pop" attribute="WikiTag" />
+        <IncludeRules context="FindWikiLinkBeingBoldItalicUnderlined" />
+      </context>
+      <context name="ItalicUnderlinedBold" attribute="BoldItalicUnderlined" lineEndContext="#pop" >
+        <IncludeRules context="FindTemplate" />
+        <StringDetect String="'''" context="#pop" attribute="WikiTag" />
+        <IncludeRules context="FindWikiLinkBeingBoldItalicUnderlined" />
+      </context>
+
+      <!-- Contexts for inclusion. -->
+
+      <context name="FindHtmlEntities" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="&htmlEntity;" attribute="HtmlEntity" />
+      </context>
+
+      <context name="FindHtmlStartTagAttributes" attribute="Normal" lineEndContext="#stay">
+        <RegExpr attribute="HtmlAttribute" context="HtmlAttribute" String="^&htmlTagName;" />
+        <RegExpr attribute="HtmlAttribute" context="HtmlAttribute" String="\s+&htmlTagName;" />
+        <RegExpr attribute="Error" context="#stay" String="\S" />
+      </context>
+
+      <context attribute="Normal" lineEndContext="#stay" name="FindListItem" >
+        <RegExpr String="[*#;:\s]*[*#:]+" attribute="WikiTag" context="#stay" column="0" />
+      </context>
+
+      <context attribute="Normal" lineEndContext="#stay" name="FindSyntaxHighlightingHtmlElement" >
+        <RegExpr String="&lt;source(?=\s)" context="SourceStartTag" attribute="HtmlTag" />
+        <RegExpr String="&lt;syntaxhighlight(?=\s)" context="SyntaxHighlightStartTag" attribute="HtmlTag" />
+      </context>
+
+      <context name="FindTable" attribute="Normal" lineEndContext="#stay">
+        <Detect2Chars char="{" char1="|" column="0" context="TableHeader"  lookAhead="true" />
+      </context>
+
+      <context attribute="Normal" lineEndContext="#stay" name="FindTemplate" >
+        <Detect2Chars char="{" char1="{" context="Template" attribute="WikiTag" beginRegion="template" />
+      </context>
+
+      <context name="FindTextDecorations" attribute="Normal" lineEndContext="#stay">
+        <StringDetect String="'''" attribute="WikiTag" context="Bold" />
+        <StringDetect String="''" attribute="WikiTag" context="Italic" />
+        <RegExpr String="&lt;u *&gt;" attribute="HtmlTag" context="Underlined" />
+      </context>
+      <context attribute="Normal" lineEndContext="#stay" name="FindTextDecorationsInHeader" >
+        <StringDetect String="'''" attribute="WikiTag" context="Bold" />
+        <StringDetect String="''" attribute="WikiTag" context="BoldItalic" />
+      </context>
+
+      <context attribute="Normal" lineEndContext="#stay" name="FindUrl" >
+        <RegExpr String="\[&url;" attribute="WikiTag" context="DelimitedURL" lookAhead="true" />
+        <RegExpr String="&url;" attribute="URL" context="LooseURL" lookAhead="true" />
+      </context>
+      <context attribute="Normal" lineEndContext="#stay" name="FindUrlWithinTemplate" >
+        <RegExpr String="\[&url;" attribute="WikiTag" context="DelimitedURL" lookAhead="true" />
+        <RegExpr String="&url;" attribute="URL" context="LooseURLWithinTemplate" lookAhead="true" />
+      </context>
+
+      <context name="FindWikiLink" attribute="Normal" lineEndContext="#stay">
+        <Detect2Chars char="[" char1="[" attribute="WikiTag" context="WikiLink" />
+      </context>
+      <context name="FindWikiLinkBeingBold" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="&wikiLinkWithDescription;" context="WikiLinkBoldWithDescription" lookAhead="true" />
+        <RegExpr String="&wikiLinkWithoutDescription;" context="WikiLinkBoldWithoutDescription" lookAhead="true" />
+      </context>
+      <context name="FindWikiLinkBeingItalic" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="&wikiLinkWithDescription;" context="WikiLinkItalicWithDescription" lookAhead="true" />
+        <RegExpr String="&wikiLinkWithoutDescription;" context="WikiLinkItalicWithoutDescription" lookAhead="true" />
+      </context>
+      <context name="FindWikiLinkBeingUnderlined" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="&wikiLinkWithDescription;" context="WikiLinkUnderlinedWithDescription" lookAhead="true" />
+        <RegExpr String="&wikiLinkWithoutDescription;" context="WikiLinkUnderlinedWithoutDescription" lookAhead="true" />
+      </context>
+      <context name="FindWikiLinkBeingBoldItalic" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="&wikiLinkWithDescription;" context="WikiLinkBoldItalicWithDescription" lookAhead="true" />
+        <RegExpr String="&wikiLinkWithoutDescription;" context="WikiLinkBoldItalicWithoutDescription" lookAhead="true" />
+      </context>
+      <context name="FindWikiLinkBeingBoldUnderlined" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="&wikiLinkWithDescription;" context="WikiLinkBoldUnderlinedWithDescription" lookAhead="true" />
+        <RegExpr String="&wikiLinkWithoutDescription;" context="WikiLinkBoldUnderlinedWithoutDescription" lookAhead="true" />
+      </context>
+      <context name="FindWikiLinkBeingItalicUnderlined" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="&wikiLinkWithDescription;" context="WikiLinkItalicUnderlinedWithDescription" lookAhead="true" />
+        <RegExpr String="&wikiLinkWithoutDescription;" context="WikiLinkItalicUnderlinedWithoutDescription" lookAhead="true" />
+      </context>
+      <context name="FindWikiLinkBeingBoldItalicUnderlined" attribute="Normal" lineEndContext="#stay">
+        <RegExpr String="&wikiLinkWithDescription;" context="WikiLinkBoldItalicUnderlinedWithDescription" lookAhead="true" />
+        <RegExpr String="&wikiLinkWithoutDescription;" context="WikiLinkBoldItalicUnderlinedWithoutDescription" lookAhead="true" />
+      </context>
+
+    </contexts>
+    <itemDatas>
+      <itemData name="Normal" defStyleNum="dsNormal" />
+      <itemData name="Link" defStyleNum="dsOthers" />
+      <itemData name="LinkBold" defStyleNum="dsOthers" bold="true" />
+      <itemData name="LinkItalic" defStyleNum="dsOthers" italic="true" />
+      <itemData name="LinkUnderlined" defStyleNum="dsOthers" underline="true" />
+      <itemData name="LinkBoldItalic" defStyleNum="dsOthers" bold="true" italic="true" />
+      <itemData name="LinkBoldUnderlined" defStyleNum="dsOthers" bold="true" underline="true" />
+      <itemData name="LinkItalicUnderlined" defStyleNum="dsOthers" italic="true" underline="true" />
+      <itemData name="LinkBoldItalicUnderlined" defStyleNum="dsOthers" bold="true" italic="true" underline="true" />
+      <itemData name="URL" defStyleNum="dsOthers" />
+      <itemData name="Comment" defStyleNum="dsComment" />
+      <itemData name="Section" defStyleNum="dsKeyword" />
+      <itemData name="DefinitionListHeader" defStyleNum="dsKeyword" />
+      <itemData name="HtmlEntity" defStyleNum="dsDecVal" />
+      <itemData name="HtmlTag" defStyleNum="dsKeyword" />
+      <itemData name="WikiTag" defStyleNum="dsDecVal" bold="true" />
+      <itemData name="WikiTagBold" defStyleNum="dsDecVal" bold="true" />
+      <itemData name="WikiTagItalic" defStyleNum="dsDecVal" bold="true" italic="true" />
+      <itemData name="WikiTagUnderlined" defStyleNum="dsDecVal" bold="true" underline="true" />
+      <itemData name="WikiTagBoldItalic" defStyleNum="dsDecVal" bold="true" italic="true" />
+      <itemData name="WikiTagBoldUnderlined" defStyleNum="dsDecVal" bold="true" underline="true" />
+      <itemData name="WikiTagItalicUnderlined" defStyleNum="dsDecVal" bold="true" italic="true" underline="true" />
+      <itemData name="WikiTagBoldItalicUnderlined" defStyleNum="dsDecVal" bold="true" italic="true" underline="true" />
+      <itemData name="Error" defStyleNum="dsError" />
+      <itemData name="NoWiki" defStyleNum="dsNormal" />
+      <itemData name="Unformatted" defStyleNum="dsNormal" />
+      <itemData name="Parameter" defStyleNum="dsNormal" bold="true" />
+      <itemData name="TemplateName" defStyleNum="dsOthers" bold="true" />
+      <itemData name="Bold" defStyleNum="dsNormal" bold="true" />
+      <itemData name="Italic" defStyleNum="dsNormal" italic="true" />
+      <itemData name="Underlined" defStyleNum="dsNormal" underline="true" />
+      <itemData name="BoldItalic" defStyleNum="dsNormal" bold="true" italic="true" />
+      <itemData name="BoldUnderlined" defStyleNum="dsNormal" bold="true" underline="true" />
+      <itemData name="ItalicUnderlined" defStyleNum="dsNormal" italic="true" underline="true" />
+      <itemData name="BoldItalicUnderlined" defStyleNum="dsNormal" bold="true" italic="true" underline="true" />
+      <itemData name="HtmlAttribute" defStyleNum="dsOthers" spellChecking="false" />
+      <itemData name="HtmlValue" defStyleNum="dsString" color="#a00" spellChecking="false" />
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment end="//-->" start="&lt;!--" name="multiLine" />
+    </comments>
+    <keywords casesensitive="0" />
+    <indentation mode="normal" />
+  </general>
+</language>
diff --git a/xml/nasm.xml b/xml/nasm.xml
--- a/xml/nasm.xml
+++ b/xml/nasm.xml
@@ -850,9 +850,9 @@
         <!-- The NASM's CPU directive -->
         <RegExpr attribute="NASM Keywords" context="#stay" String="cpu (pentium|ppro|p2|p3|katmai|p4|willamette|prescott|ia64)*"/>
         <!-- hexadecimal numbers -->
-        <RegExpr attribute="BaseN" context="#stay" insensitive="TRUE" String="(^|[ \t,]+)((\$|0x){1}[0-9]+[a-f0-9]*|[0-9]+[a-f0-9]*h)([ \t,]+|$)"/>
+        <RegExpr attribute="BaseN" context="#stay" insensitive="true" String="(^|[ \t,]+)((\$|0x){1}[0-9]+[a-f0-9]*|[0-9]+[a-f0-9]*h)([ \t,]+|$)"/>
         <!-- octal and binary numbers -->
-        <RegExpr attribute="BaseN" context="#stay" insensitive="TRUE" String="(^|[ \t,]+)([0-7]+(q|o)|[01]+b)([ \t,]+|$)"/>
+        <RegExpr attribute="BaseN" context="#stay" insensitive="true" String="(^|[ \t,]+)([0-7]+(q|o)|[01]+b)([ \t,]+|$)"/>
         <DetectChar attribute="Number" context="#stay" char="$"/>
         <HlCOct attribute="BaseN" context="#stay"/>
         <HlCHex attribute="BaseN" context="#stay"/>
diff --git a/xml/objectivec.xml b/xml/objectivec.xml
--- a/xml/objectivec.xml
+++ b/xml/objectivec.xml
@@ -63,14 +63,14 @@
         <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"/>
+          <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>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
diff --git a/xml/objectivecpp.xml b/xml/objectivecpp.xml
--- a/xml/objectivecpp.xml
+++ b/xml/objectivecpp.xml
@@ -179,14 +179,14 @@
         <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"/>
+          <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>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
diff --git a/xml/opencl.xml b/xml/opencl.xml
new file mode 100644
--- /dev/null
+++ b/xml/opencl.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="OpenCL" section="Sources"
+          version="1.44" kateversion="2.4"
+          indenter="cstyle"
+          extensions="*.cl"
+          mimetype="text/x-clsrc"
+          priority="5">
+  <highlighting>
+    <list name="keywords">
+      <item> __constant </item>
+      <item> __global </item>
+      <item> __local </item>
+      <item> __private </item>
+      <item> __kernel </item>
+      <item> __read_only </item>
+      <item> __write_only </item>
+      <item> constant </item>
+      <item> global </item>
+      <item> local </item>
+      <item> private </item>
+      <item> kernel </item>
+      <item> read_only </item>
+      <item> write_only </item>
+      <item> break </item>
+      <item> case </item>
+      <item> continue </item>
+      <item> default </item>
+      <item> do </item>
+      <item> else </item>
+      <item> enum </item>
+      <item> for </item>
+      <item> goto </item>
+      <item> if </item>
+      <item> inline </item>
+      <item> return </item>
+      <item> sizeof </item>
+      <item> struct </item>
+      <item> switch </item>
+      <item> typedef </item>
+      <item> union </item>
+      <item> while </item>
+    </list>
+    <list name="types">
+      <item> bool </item>
+      <item> uchar </item>
+      <item> uchar2 </item>
+      <item> uchar3 </item>
+      <item> uchar4 </item>
+      <item> uchar8 </item>
+      <item> uchar16 </item>
+      <item> char </item>
+      <item> char2 </item>
+      <item> char3 </item>
+      <item> char4 </item>
+      <item> char8 </item>
+      <item> char16 </item>
+      <item> const </item>
+      <item> double </item>
+      <item> double2 </item>
+      <item> double3 </item>
+      <item> double4 </item>
+      <item> double8 </item>
+      <item> double16 </item>
+      <item> event_t </item>
+      <item> float </item>
+      <item> float2 </item>
+      <item> float3 </item>
+      <item> float4 </item>
+      <item> float8 </item>
+      <item> float16 </item>
+      <item> half </item>
+      <item> half2 </item>
+      <item> half3 </item>
+      <item> half4 </item>
+      <item> half8 </item>
+      <item> half16 </item>
+      <item> image1d_t </item>
+      <item> image2d_t </item>
+      <item> image3d_t </item>
+      <item> uint </item>
+      <item> uint2 </item>
+      <item> uint3 </item>
+      <item> uint4 </item>
+      <item> uint8 </item>
+      <item> uint16 </item>
+	  <item> int </item>
+      <item> int2 </item>
+      <item> int3 </item>
+      <item> int4 </item>
+      <item> int8 </item>
+      <item> int16 </item>
+      <item> ulong </item>
+      <item> ulong2 </item>
+      <item> ulong3 </item>
+      <item> ulong4 </item>
+      <item> ulong8 </item>
+      <item> ulong16 </item>
+      <item> long </item>
+      <item> long2 </item>
+      <item> long3 </item>
+      <item> long4 </item>
+      <item> long8 </item>
+      <item> long16 </item>
+      <item> restrict </item>
+      <item> sampler_t </item>
+      <item> ushort </item>
+      <item> ushort2 </item>
+      <item> ushort3 </item>
+      <item> ushort4 </item>
+      <item> ushort8 </item>
+      <item> ushort16 </item>
+      <item> short </item>
+      <item> short2 </item>
+      <item> short3 </item>
+      <item> short4 </item>
+      <item> short8 </item>
+      <item> short16 </item>
+      <item> signed </item>
+      <item> static </item>
+      <item> unsigned </item>
+      <item> void </item>
+      <item> volatile </item>
+    </list>
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
+        <DetectSpaces />
+	<RegExpr attribute="Preprocessor" context="Outscoped" String="#\s*if\s+0\s*$" beginRegion="PP" firstNonSpace="true" />
+        <DetectChar context="AfterHash" char="#" firstNonSpace="true" lookAhead="true" />
+        <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" />
+        <keyword attribute="Keyword" context="#stay" String="keywords"/>
+        <keyword attribute="Data Type" context="#stay" String="types"/>
+        <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>
+        <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>
+        <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 attribute="String" lineEndContext="#pop" name="String">
+        <LineContinue attribute="String" context="#stay"/>
+        <HlCStringChar attribute="String Char" context="#stay"/>
+        <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+
+      <context attribute="Region Marker" lineEndContext="#pop" name="Region Marker">
+      </context>
+
+      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+        <LineContinue attribute="Comment" context="#stay"/>
+        <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>
+
+      <context attribute="Error" lineEndContext="#pop" name="AfterHash">
+        <!-- define, elif, else, endif, error, if, ifdef, ifndef, include, include_next, line, pragma, undef, warning -->
+        <RegExpr attribute="Preprocessor" context="Preprocessor" String="#\s*if(?:def|ndef)?(?=\s+\S)" insensitive="true" beginRegion="PP" firstNonSpace="true" />
+        <RegExpr attribute="Preprocessor" context="Preprocessor" String="#\s*endif" insensitive="true" endRegion="PP" firstNonSpace="true" />
+        <RegExpr attribute="Preprocessor" context="Define" String="#\s*define.*((?=\\))" insensitive="true" firstNonSpace="true" />
+        <RegExpr attribute="Preprocessor" context="Preprocessor" String="#\s*(?:el(?:se|if)|include(?:_next)?|define|undef|line|error|warning|pragma)" insensitive="true" firstNonSpace="true" />
+        <RegExpr attribute="Preprocessor" context="Preprocessor" String="#\s+[0-9]+" insensitive="true" firstNonSpace="true" />
+      </context>
+
+      <context attribute="Preprocessor" lineEndContext="#pop" name="Preprocessor">
+        <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;"/>
+        <IncludeRules context="##Doxygen" />
+        <Detect2Chars attribute="Comment" context="Commentar/Preprocessor" char="/" char1="*" beginRegion="Comment2" />
+        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/" />
+      </context>
+
+      <context attribute="Preprocessor" lineEndContext="#pop" name="Define">
+        <LineContinue attribute="Preprocessor" context="#stay"/>
+      </context>
+
+      <context attribute="Comment" lineEndContext="#stay" name="Commentar/Preprocessor">
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment2" />
+      </context>
+
+      <context attribute="Comment" lineEndContext="#stay" name="Outscoped" >
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <DetectIdentifier />
+        <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"/>
+        <RegExpr attribute="Comment" context="Outscoped intern" String="#\s*if" beginRegion="PP" firstNonSpace="true" />
+        <RegExpr attribute="Preprocessor" context="#pop" String="#\s*el(?:se|if)" firstNonSpace="true" />
+        <RegExpr attribute="Preprocessor" context="#pop" String="#\s*endif" endRegion="PP" firstNonSpace="true" />
+      </context>
+
+      <context attribute="Comment" lineEndContext="#stay" name="Outscoped intern">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <DetectIdentifier />
+        <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"/>
+        <RegExpr attribute="Comment" context="Outscoped intern" String="#\s*if" beginRegion="PP" firstNonSpace="true" />
+        <RegExpr attribute="Comment" context="#pop" String="#\s*endif" endRegion="PP" firstNonSpace="true" />
+      </context>
+    </contexts>
+    <itemDatas>
+      <itemData name="Normal Text"  defStyleNum="dsNormal" spellChecking="false"/>
+      <itemData name="Keyword"      defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="Data Type"    defStyleNum="dsDataType" spellChecking="false"/>
+      <itemData name="Decimal"      defStyleNum="dsDecVal" spellChecking="false"/>
+      <itemData name="Octal"        defStyleNum="dsBaseN" spellChecking="false"/>
+      <itemData name="Hex"          defStyleNum="dsBaseN" spellChecking="false"/>
+      <itemData name="Float"        defStyleNum="dsFloat" spellChecking="false"/>
+      <itemData name="Char"         defStyleNum="dsChar" spellChecking="false"/>
+      <itemData name="String"       defStyleNum="dsString"/>
+      <itemData name="String Char"  defStyleNum="dsChar"/>
+      <itemData name="Comment"      defStyleNum="dsComment"/>
+      <itemData name="Symbol"       defStyleNum="dsNormal" spellChecking="false"/>
+      <itemData name="Preprocessor" defStyleNum="dsOthers" spellChecking="false"/>
+      <itemData name="Prep. Lib"    defStyleNum="dsOthers" spellChecking="false"/> <!--,Qt::darkYellow,Qt::yellow,false,false)); -->
+      <itemData name="Alert"        defStyleNum="dsAlert" spellChecking="false"/>
+      <itemData name="Region Marker" defStyleNum="dsRegionMarker" spellChecking="false"/>
+      <itemData name="Error"        defStyleNum="dsError" spellChecking="false"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="//" />
+      <comment name="multiLine" start="/*" end="*/" />
+    </comments>
+    <keywords casesensitive="1" additionalDeliminator="'&quot;" />
+  </general>
+</language>
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="1.29" kateversion="2.4" section="Scripts" extensions="*.pl;*.PL;*.pm" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPL">
+<language name="Perl" version="1.30" kateversion="2.4" section="Scripts" extensions="*.pl;*.PL;*.pm" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPL">
   <highlighting>
     <list name="keywords">
       <item> if </item>
@@ -620,14 +620,14 @@
       </context>
 
       <!-- rules internal stuff wrt regex patterns -->
-      <context name="regex_pattern_internal_rules_1" lineEndContext="#stay">
+      <context name="regex_pattern_internal_rules_1" attribute="Pattern" lineEndContext="#stay">
         <RegExpr attribute="Comment" context="#stay" String="#.*$" firstNonSpace="true" />
         <RegExpr attribute="Pattern Character Class" context="#stay" String="\\[anDdSsWw]" />
         <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\\[ABbEGLlNUuQdQZz]" />
         <RegExpr attribute="Special Variable" context="#stay" String="\\[\d]+" />
         <RegExpr attribute="Pattern" context="#stay" String="\\." />
       </context>
-      <context name="regex_pattern_internal_rules_2" lineEndContext="#stay">
+      <context name="regex_pattern_internal_rules_2" attribute="Pattern" lineEndContext="#stay">
         <Detect2Chars attribute="Pattern Internal Operator" context="pat_ext" char="(" char1="?" />
         <DetectChar attribute="Pattern Internal Operator" context="pat_char_class" char="[" />
         <RegExpr attribute="Pattern Internal Operator" context="#stay" String="[()?^*+|]" />
@@ -746,7 +746,7 @@
       </context>
       <context name="here_document" attribute="String (interpolated)" lineEndContext="#stay" dynamic="true">
         <DetectSpaces />
-        <RegExpr attribute="Keyword" context="#pop#pop" String="%1" column="0" dynamic="true" endRegion="HereDocument"/>
+        <RegExpr attribute="Keyword" context="#pop#pop" String="^%1\b" column="0" dynamic="true" endRegion="HereDocument"/>
         <RegExpr attribute="Keyword" context="here_document" String="\=\s*&lt;&lt;\s*[&quot;']?([A-Z0-9_\-]+)[&quot;']?" beginRegion="HEREDoc" />
         <IncludeRules context="ipstring_internal" />
       </context>
diff --git a/xml/perl.xml.bkp b/xml/perl.xml.bkp
deleted file mode 100644
--- a/xml/perl.xml.bkp
+++ /dev/null
@@ -1,835 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
-<!--
-   This file is part of the KDE project
-   Copyright (C) 2001, 2002, 2003, 2004 Anders Lund <anders@alweb.dk>
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public
-   License version 2 as published by the Free Software Foundation.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public License
-   along with this library; see the file COPYING.LIB.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.
-
-   *** NOTICE ***
-   This file is maintained by Anders Lund <anders@alweb.dk>
-   Please do not commit changes without checking with me.
-
-   *** TODO ***
-
-   Work on the comment support in the REPLACEMENT part of s/// - we may support
-   the comment, if the line remainder does not contain the delimiter char.
-
-   Try to support ?PATTERN? (at least in one line, like if "\?(?=.*\?)" matches).
-
-   parse code behind '<<HEREDELIMITER' as code, or at least ignore it, to eol.
-   Requires the ability to pass the delimiter through a context level.
-
-   find a here delimiter like '*END*' (Shell.pm). Requires that when a regex is
-   inserting a dynamic string, it escapes [*(){}$[]
-
-   support for more regex extensions, such as (?>), (?{}), (?(cond)yes|no)
-
-   Enhance tr/// and y/// support.
--->
-<language name="Perl" version="1.25" kateversion="2.4" section="Scripts" extensions="*.pl;*.pm" mimetype="application/x-perl;text/x-perl" author="Anders Lund (anders@alweb.dk)" license="LGPL">
-  <highlighting>
-    <list name="keywords">
-      <item> if </item>
-      <item> unless </item>
-      <item> else </item>
-      <item> elsif </item>
-      <item> while </item>
-      <item> until </item>
-      <item> for </item>
-      <item> each </item>
-      <item> foreach </item>
-      <item> next </item>
-      <item> last </item>
-      <item> break </item>
-      <item> continue </item>
-      <item> return </item>
-      <item> use </item>
-      <item> no </item>
-      <item> require </item>
-      <item> my </item>
-      <item> our </item>
-      <item> local </item>
-      <item> BEGIN </item>
-      <item> END </item>
-      <item>require</item>
-      <item> package </item>
-      <item> sub </item>
-      <item> do </item>
-      <item> __END__ </item>
-      <item> __DATA__ </item>
-      <item> __FILE__ </item>
-      <item> __LINE__ </item>
-      <item> __PACKAGE__ </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> //= </item>
-      <item> &amp;= </item>
-      <item> &amp;&amp;= </item>
-      <item> ?= </item>
-      <item> + </item>
-      <item> - </item>
-      <item> * </item>
-     <!-- <item> / </item>//-->
-      <item> % </item>
-      <item> || </item>
-      <item> // </item>
-      <item> &amp;&amp; </item>
-      <item> | </item>
-      <item> &amp; </item>
-      <item> &lt; </item>
-      <item> &lt;&lt; </item>
-      <item> &gt; </item>
-      <item> &gt;&gt; </item>
-      <item> ^ </item>
-      <item> -&gt; </item>
-      <item> =&gt; </item>
-      <item> . </item>
-      <item> , </item>
-      <item> ; </item>
-      <item> :: </item>
-      <item> \ </item>
-      <item> and </item>
-      <item> or </item>
-      <item> not </item>
-      <item> eq </item>
-      <item> ne </item>
-      <item> lt </item>
-      <item> gt </item>
-      <item> le </item>
-      <item> ge </item>
-      <item> cmp </item>
-    </list>
-    <list name="functions">
-      <item>abs</item>
-      <item>accept</item>
-      <item>alarm</item>
-      <item>atan2</item>
-      <item>bind</item>
-      <item>binmode</item>
-      <item>bless</item>
-      <item>caller</item>
-      <item>chdir</item>
-      <item>chmod</item>
-      <item>chomp</item>
-      <item>chop</item>
-      <item>chown</item>
-      <item>chr</item>
-      <item>chroot</item>
-      <item>close</item>
-      <item>closedir</item>
-      <item>connect</item>
-      <item>cos</item>
-      <item>crypt</item>
-      <item>dbmclose</item>
-      <item>dbmopen</item>
-      <item>defined</item>
-      <item>delete</item>
-      <item>die</item>
-      <item>dump</item>
-      <item>endgrent</item>
-      <item>endhostent</item>
-      <item>endnetent</item>
-      <item>endprotoent</item>
-      <item>endpwent</item>
-      <item>endservent</item>
-      <item>eof</item>
-      <item>eval</item>
-      <item>exec</item>
-      <item>exists</item>
-      <item>exit</item>
-      <item>exp</item>
-      <item>fcntl</item>
-      <item>fileno</item>
-      <item>flock</item>
-      <item>fork</item>
-      <item>format</item>
-      <item>formline</item>
-      <item>getc</item>
-      <item>getgrent</item>
-      <item>getgrgid</item>
-      <item>getgrnam</item>
-      <item>gethostbyaddr</item>
-      <item>gethostbyname</item>
-      <item>gethostent</item>
-      <item>getlogin</item>
-      <item>getnetbyaddr</item>
-      <item>getnetbyname</item>
-      <item>getnetent</item>
-      <item>getpeername</item>
-      <item>getpgrp</item>
-      <item>getppid</item>
-      <item>getpriority</item>
-      <item>getprotobyname</item>
-      <item>getprotobynumber</item>
-      <item>getprotoent</item>
-      <item>getpwent</item>
-      <item>getpwnam</item>
-      <item>getpwuid</item>
-      <item>getservbyname</item>
-      <item>getservbyport</item>
-      <item>getservent</item>
-      <item>getsockname</item>
-      <item>getsockopt</item>
-      <item>glob</item>
-      <item>gmtime</item>
-      <item>goto</item>
-      <item>grep</item>
-      <item>hex</item>
-      <item>import</item>
-      <item>index</item>
-      <item>int</item>
-      <item>ioctl</item>
-      <item>join</item>
-      <item>keys</item>
-      <item>kill</item>
-      <item>last</item>
-      <item>lc</item>
-      <item>lcfirst</item>
-      <item>length</item>
-      <item>link</item>
-      <item>listen</item>
-      <item>localtime</item>
-      <item>lock</item>
-      <item>log</item>
-      <item>lstat</item>
-      <item>map</item>
-      <item>mkdir</item>
-      <item>msgctl</item>
-      <item>msgget</item>
-      <item>msgrcv</item>
-      <item>msgsnd</item>
-      <item>oct</item>
-      <item>open</item>
-      <item>opendir</item>
-      <item>ord</item>
-      <item>pack</item>
-      <item>package</item>
-      <item>pipe</item>
-      <item>pop</item>
-      <item>pos</item>
-      <item>print</item>
-      <item>printf</item>
-      <item>prototype</item>
-      <item>push</item>
-      <item>quotemeta</item>
-      <item>rand</item>
-      <item>read</item>
-      <item>readdir</item>
-      <item>readline</item>
-      <item>readlink</item>
-      <item>recv</item>
-      <item>redo</item>
-      <item>ref</item>
-      <item>rename</item>
-      <item>reset</item>
-      <item>return</item>
-      <item>reverse</item>
-      <item>rewinddir</item>
-      <item>rindex</item>
-      <item>rmdir</item>
-      <item>scalar</item>
-      <item>seek</item>
-      <item>seekdir</item>
-      <item>select</item>
-      <item>semctl</item>
-      <item>semget</item>
-      <item>semop</item>
-      <item>send</item>
-      <item>setgrent</item>
-      <item>sethostent</item>
-      <item>setnetent</item>
-      <item>setpgrp</item>
-      <item>setpriority</item>
-      <item>setprotoent</item>
-      <item>setpwent</item>
-      <item>setservent</item>
-      <item>setsockopt</item>
-      <item>shift</item>
-      <item>shmctl</item>
-      <item>shmget</item>
-      <item>shmread</item>
-      <item>shmwrite</item>
-      <item>shutdown</item>
-      <item>sin</item>
-      <item>sleep</item>
-      <item>socket</item>
-      <item>socketpair</item>
-      <item>sort</item>
-      <item>splice</item>
-      <item>split</item>
-      <item>sprintf</item>
-      <item>sqrt</item>
-      <item>srand</item>
-      <item>stat</item>
-      <item>study</item>
-      <item>sub</item>
-      <item>substr</item>
-      <item>symlink</item>
-      <item>syscall</item>
-      <item>sysread</item>
-      <item>sysseek</item>
-      <item>system</item>
-      <item>syswrite</item>
-      <item>tell</item>
-      <item>telldir</item>
-      <item>tie</item>
-      <item>time</item>
-      <item>times</item>
-      <item>truncate</item>
-      <item>uc</item>
-      <item>ucfirst</item>
-      <item>umask</item>
-      <item>undef</item>
-      <item>unlink</item>
-      <item>unpack</item>
-      <item>unshift</item>
-      <item>untie</item>
-      <item>utime</item>
-      <item>values</item>
-      <item>vec</item>
-      <item>wait</item>
-      <item>waitpid</item>
-      <item>wantarray</item>
-      <item>warn</item>
-      <item>write</item>
-    </list>
-    <list name="pragmas">
-      <item>strict</item>
-      <item>english</item>
-      <item>warnings</item>
-      <item>vars</item>
-      <item>subs</item>
-      <item>utf8</item>
-      <item>sigtrap</item>
-      <item>locale</item>
-      <item>open</item>
-      <item>less</item>
-      <item>integer</item>
-      <item>filetest</item>
-      <item>constant</item>
-      <item>bytes</item>
-      <item>diagnostics</item>
-    </list>
-    <contexts>
-      <context name="normal" attribute="Normal Text" lineEndContext="#stay">
-        <RegExpr attribute="Keyword" context="#stay" String="^#!\/.*" />
-        <StringDetect attribute="Keyword" context="data_handle" String="__DATA__" firstNonSpace="true" />
-        <StringDetect attribute="Keyword" context="#stay" String="__END__" firstNonSpace="true"/>
-        <RegExpr attribute="Keyword" context="sub_name_def" String="\bsub\s+" />
-        <keyword attribute="Keyword" context="#stay" String="keywords" />
-        <keyword attribute="Operator" context="#stay" String="operators" />
-        <keyword attribute="Function" context="#stay" String="functions" />
-        <keyword attribute="Pragma" context="#stay" String="pragmas" />
-        <RegExpr attribute="Pod" context="pod" String="\=(?:head[1-6]|over|back|item|for|begin|end|pod)(\s|$)" column="0" beginRegion="POD"/>
-        <DetectSpaces />
-        <DetectChar attribute="Comment" context="comment" char="#" />
-
-        <HlCOct attribute="Octal" context="slash_safe_escape" />
-        <HlCHex attribute="Hex" context="slash_safe_escape" />
-        <Float attribute="Float" context="slash_safe_escape" />
-        <Int attribute="Decimal" context="slash_safe_escape" />
-
-        <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="Keyword" context="#stay" String="&lt;[A-Z0-9_]+&gt;" />
-
-        <RegExpr attribute="Operator" context="find_here_document" String="\s*&lt;&lt;(?=\w+|\s*[&quot;'])" beginRegion="HereDocument" />
-
-        <RegExpr attribute="Normal Text" context="#stay" String="\s*\}\s*/{1,2}" endRegion="Block"/>
-        <RegExpr attribute="Normal Text" context="#stay" String="\s*[)\]]\s*/{1,2}" />
-        
-        <RegExpr attribute="Function" context="sub_name_def" String="\w+::" />
-        <RegExpr attribute="Normal Text" context="#stay" String="\w+[=]" />
-
-        <RegExpr attribute="Operator" context="find_quoted" String="\bq(?=[qwx]?\s*[^\w\s])" />
-        <RegExpr attribute="Operator" context="find_subst" String="\bs(?=\s*[^\w\s\]})])" />
-        <RegExpr attribute="Operator" context="tr" String="\b(?:tr|y)\s*(?=[^\w\s\]})])" />
-
-        <RegExpr attribute="Operator" context="find_pattern" String="\b(?:m|qr)(?=\s*[^\w\s\]})])" />
-
-        <RegExpr attribute="Normal Text" context="#stay" String="[\w_]+\s*/" />
-        <RegExpr attribute="Normal Text" context="#stay" String="[&lt;&gt;&quot;':]/" />
-        <DetectChar attribute="Operator" context="pattern_slash" char="/" beginRegion="Pattern" />
-        <RegExpr attribute="Operator" context="#stay" String="-[rwxoRWXOeszfdlpSbctugkTBMAC]" />
-
-        <DetectChar attribute="Normal Text" context="#stay" char="{" beginRegion="Block" />
-        <DetectChar attribute="Normal Text" context="#stay" char="}" endRegion="Block" />
-      </context>
-
-      <!-- ====== quoted construct central ===== -->
-      <context name="find_quoted" attribute="Normal Text" lineEndContext="#stay" >
-        <!-- NOTE - qx'not interpolated regex' does not cover newline between "qr" and "'" -->
-        <RegExpr attribute="Operator" context="string_6" String="x\s*(')" beginRegion="String" />
-        <AnyChar attribute="Operator" context="find_qqx" String="qx" />
-        <DetectChar attribute="Operator" context="find_qw" char="w" />
-        <DetectChar attribute="Operator" context="string_2" char="(" beginRegion="String" />
-        <DetectChar attribute="Operator" context="string_3" char="{" beginRegion="String" />
-        <DetectChar attribute="Operator" context="string_4" char="[" beginRegion="String" />
-        <DetectChar attribute="Operator" context="string_5" char="&lt;" beginRegion="String" />
-        <RegExpr attribute="Operator" context="string_6" String="([^a-zA-Z0-9_\s[\]{}()])" beginRegion="String" />
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*" /><!-- q[qwx] # == comment, look for the delim on the next line -->
-      </context>
-      <context name="find_qqx" attribute="Normal Text" lineEndContext="#stay" >
-        <DetectChar attribute="Operator" context="ip_string_2" char="(" beginRegion="String" />
-        <DetectChar attribute="Operator" context="ip_string_3" char="{" beginRegion="String" />
-        <DetectChar attribute="Operator" context="ip_string_4" char="[" beginRegion="String" />
-        <DetectChar attribute="Operator" context="ip_string_5" char="&lt;" beginRegion="String" />
-        <RegExpr attribute="Operator" context="ip_string_6" String="([^a-zA-Z0-9_\s[\]{}()])" beginRegion="String" />
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*" /><!-- q[qwx] # == comment, look for the delim on the next line -->
-      </context>
-      <context name="find_qw" attribute="Normal Text" lineEndContext="#stay" >
-        <DetectChar attribute="Operator" context="quote_word_paren" char="(" beginRegion="Wordlist" />
-        <DetectChar attribute="Operator" context="quote_word_brace" char="{" beginRegion="Wordlist" />
-        <DetectChar attribute="Operator" context="quote_word_bracket" char="[" beginRegion="Wordlist" />
-        <RegExpr attribute="Operator" context="quote_word" String="([^a-zA-Z0-9_\s[\]{}()])" beginRegion="Wordlist" />
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*" /><!-- q[qwx] # == comment, look for the delim on the next line -->
-      </context>
-
-      <!-- ====== 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 (interpolated)" context="#stay" String="\\." />
-        <RegExpr attribute="Normal Text" context="find_variable_unsafe" String="(?:[\$@]\S|%[\w{])" lookAhead="true" />
-      </context>
-      <context name="ip_string" attribute="String (interpolated)" lineEndContext="#stay">
-        <DetectChar attribute="Operator" context="#pop" char="&quot;" endRegion="String"/>
-        <IncludeRules context="ipstring_internal" />
-      </context>
-      <context name="ip_string_2" attribute="String (interpolated)" lineEndContext="#stay">
-        <RangeDetect attribute="String (interpolated)" context="#stay" char="(" char1=")" />
-        <DetectChar attribute="Operator" context="#pop#pop#pop" char=")" endRegion="String" />
-        <IncludeRules context="ipstring_internal" />
-      </context>
-      <context name="ip_string_3" attribute="String (interpolated)" lineEndContext="#stay">
-        <RangeDetect attribute="String (interpolated)" context="#stay" char="{" char1="}" />
-        <DetectChar attribute="Operator" context="#pop#pop#pop" char="}" endRegion="String" />
-        <IncludeRules context="ipstring_internal" />
-      </context>
-      <context name="ip_string_4" attribute="String (interpolated)" lineEndContext="#stay">
-        <RangeDetect attribute="String (interpolated)" context="#stay" char="[" char1="]" />
-        <DetectChar attribute="Operator" context="#pop#pop#pop" char="]" endRegion="String" />
-        <IncludeRules context="ipstring_internal" />
-      </context>
-      <context name="ip_string_5" attribute="String (interpolated)" lineEndContext="#stay">
-        <RangeDetect attribute="String (interpolated)" context="#stay" char="&lt;" char1="&gt;" />
-        <DetectChar attribute="Operator" context="#pop#pop#pop" char="&gt;" endRegion="String" />
-        <IncludeRules context="ipstring_internal" />
-      </context>
-      <context name="ip_string_6" attribute="String (interpolated)" lineEndContext="#stay" dynamic="true">
-        <RegExpr attribute="String (interpolated)" context="#stay" String="\%1" dynamic="true" />
-        <DetectChar attribute="Operator" context="#pop#pop#pop" char="1" dynamic="true"  endRegion="String"/>
-        <IncludeRules context="ipstring_internal" />
-      </context>
-
-      <context name="string" attribute="String" lineEndContext="#stay">
-        <DetectIdentifier />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="'" />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="\" />
-        <DetectChar attribute="Operator" context="#pop" char="'" endRegion="String" />
-      </context>
-      <context name="string_2" attribute="String" lineEndContext="#stay">
-        <DetectIdentifier />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1=")" />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="\" />
-        <RangeDetect attribute="String" context="#stay" char="(" char1=")" />
-        <DetectChar attribute="Operator" context="#pop#pop" char=")" endRegion="String" />
-      </context>
-      <context name="string_3" attribute="String" lineEndContext="#stay">
-        <DetectIdentifier />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="}" />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="\" />
-        <RangeDetect attribute="String" context="#stay" char="{" char1="}" />
-        <DetectChar attribute="Operator" context="#pop#pop" char="}" endRegion="String" />
-      </context>
-      <context name="string_4" attribute="String" lineEndContext="#stay">
-        <DetectIdentifier />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="]" />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="\" />
-        <RangeDetect attribute="String" context="#stay" char="[" char1="]" />
-        <DetectChar attribute="Operator" context="#pop#pop" char="]" endRegion="String" />
-      </context>
-      <context name="string_5" attribute="String" lineEndContext="#stay">
-        <DetectIdentifier />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="&lt;" />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="\" />
-        <Detect2Chars attribute="String" context="#stay" char="\" char1="&gt;" />
-        <RangeDetect attribute="String" context="#stay" char="&lt;" char1="&gt;" />
-        <DetectChar attribute="Operator" context="#pop#pop" char="&gt;" endRegion="String" />
-      </context>
-      <context name="string_6" attribute="String" lineEndContext="#stay" dynamic="true">
-        <DetectIdentifier />
-        <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="\" />
-        <RegExpr attribute="String Special Character" context="#stay" String="\%1" dynamic="true"/>
-        <DetectChar attribute="Operator" context="#pop#pop" char="1" dynamic="true" endRegion="String" />
-      </context>
-
-      <!-- ====== contexts for  s/// ====== -->
-      <context name="find_subst" attribute="Normal Text" lineEndContext="#stay" >
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*" /><!-- s # == comment, look for the delim on the next line -->
-        <DetectChar attribute="Operator" context="subst_curlybrace_pattern" char="{" beginRegion="Pattern" />
-        <DetectChar attribute="Operator" context="subst_paren_pattern" char="(" beginRegion="Pattern" />
-        <DetectChar attribute="Operator" context="subst_bracket_pattern" char="[" beginRegion="Pattern" />
-        <DetectChar attribute="Operator" context="subst_sq_pattern" char="'" beginRegion="Pattern" />
-        <RegExpr attribute="Operator" context="subst_slash_pattern" String="([^\w\s[\]{}()])" beginRegion="Pattern" />
-      </context>
-
-      <!-- Fully parse s {} {}.
-           This means that
-           - comments are legal between PATTERN and REPLACEMENT
-           - REPLACEMENT can contain resursive {} blocks -->
-      <context name="subst_curlybrace_pattern" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
-        <IncludeRules context="regex_pattern_internal_ip" />
-        <DetectChar attribute="Operator" context="subst_curlybrace_middle" char="}" endRegion="Pattern" />
-      </context>
-      <context name="subst_curlybrace_middle" attribute="Normal Text" lineEndContext="#stay" >
-        <RegExpr attribute="Comment" context="#stay" String="#.*$" />
-        <DetectChar attribute="Operator" context="subst_curlybrace_replace" char="{" beginRegion="Replacement" />
-      </context>
-      <context name="subst_curlybrace_replace" attribute="String (interpolated)" lineEndContext="#stay">
-        <IncludeRules context="ipstring_internal" />
-        <DetectChar attribute="Normal Text" context="subst_curlybrace_replace_recursive" char="{" beginRegion="Block" />
-        <RegExpr attribute="Operator" context="#pop#pop#pop#pop" String="\}[cegimosx]*" endRegion="Replacement" />
-      </context>
-      <context name="subst_curlybrace_replace_recursive" attribute="String (interpolated)" lineEndContext="#stay" >
-        <DetectChar attribute="String (interpolated)" context="subst_curlybrace_replace_recursive" char="{" beginRegion="Block" />
-        <DetectChar attribute="Normal Text" context="#pop" char="}" endRegion="Block" />
-        <IncludeRules context="ipstring_internal" />
-      </context>
-
-      <context name="subst_paren_pattern" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
-        <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_bracket_pattern" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
-        <IncludeRules context="regex_pattern_internal_ip" />
-        <DetectChar attribute="Operator" context="subst_bracket_replace" char="]" endRegion="Pattern" />
-      </context>
-      <context name="subst_bracket_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_slash_pattern" attribute="Pattern" lineEndContext="#stay" dynamic="true">
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\$(?=%1)" dynamic="true" />
-        <RegExpr attribute="Operator" context="subst_slash_replace" String="(%1)" dynamic="true" endRegion="Pattern" beginRegion="Replacement" />
-        <IncludeRules context="regex_pattern_internal_ip" />
-      </context>
-      <context name="subst_slash_replace" attribute="String (interpolated)" lineEndContext="#stay" dynamic="true">
-        <RegExpr attribute="Operator" context="#pop#pop#pop" String="%1[cegimosx]*" dynamic="true" endRegion="Replacement" />
-        <IncludeRules context="ipstring_internal" />
-
-      </context>
-
-      <context name="subst_sq_pattern" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
-        <IncludeRules context="regex_pattern_internal" />
-        <DetectChar attribute="Operator" context="subst_sq_replace" char="'" endRegion="Pattern" beginRegion="Pattern" />
-      </context>
-      <context name="subst_sq_replace" attribute="String" lineEndContext="#stay">
-        <RegExpr attribute="Operator" context="#pop#pop#pop" String="'[cegimosx]*" endRegion="Replacement" />
-      </context>
-
-      <context name="tr" attribute="Pattern" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop" >
-        <RegExpr attribute="Pattern" context="#pop" String="([^)]*\)\s*\(?:[^)]*\)" />
-        <RegExpr attribute="Pattern" context="#pop" String="{[^}]*\}\s*\{[^}]*\}" />
-        <RegExpr attribute="Pattern" context="#pop" String="\[[^}]*\]\s*\[[^\]]*\]" />
-        <RegExpr attribute="Pattern" context="#pop" String="([^a-zA-Z0-9_\s[\]{}()]).*\1.*\1" minimal="true"/>
-      </context>
-
-      <!-- ====== PATTERNs ====== -->
-      <context name="find_pattern" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*" /><!-- s # == comment, look for the delim on the next line -->
-        <DetectChar attribute="Operator" context="pattern_brace" char="{" beginRegion="Pattern" />
-        <DetectChar attribute="Operator" context="pattern_paren" char="(" beginRegion="Pattern" />
-        <DetectChar attribute="Operator" context="pattern_bracket" char="[" beginRegion="Pattern" />
-        <DetectChar attribute="Operator" context="pattern_sq" char="'" beginRegion="Pattern" />
-        <RegExpr attribute="Operator" context="pattern" String="([^\w\s])" beginRegion="Pattern" />
-      </context>
-      <context name="pattern_slash" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\$(?=/)" />
-        <IncludeRules context="regex_pattern_internal_ip" />
-        <RegExpr attribute="Operator" context="#pop" String="/[cgimosx]*" endRegion="Pattern" />
-      </context>
-      <context name="pattern" attribute="Pattern" lineEndContext="#stay" dynamic="true">
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\$(?=%1)" dynamic="true" />
-        <RegExpr attribute="Operator" context="#pop#pop" String="%1[cgimosx]*" dynamic="true" endRegion="Pattern" />
-        <IncludeRules context="regex_pattern_internal_ip" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\$(?=\%1)" dynamic="true" />
-      </context>
-      <context name="pattern_brace" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Operator" context="#pop#pop" String="\}[cgimosx]*" endRegion="Pattern" />
-        <IncludeRules context="regex_pattern_internal_ip" />
-      </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" />
-        <IncludeRules context="regex_pattern_internal_ip" />
-      </context>
-      <context name="pattern_sq" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Operator" context="#pop#pop" String="'[cgimosx]*" endRegion="Pattern" />
-        <IncludeRules context="regex_pattern_internal" />
-      </context>
-
-      <!-- rules internal stuff wrt regex patterns -->
-      <context name="regex_pattern_internal_rules_1" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="#.*$" firstNonSpace="true" />
-        <RegExpr attribute="Pattern Character Class" context="#stay" String="\\[anDdSsWw]" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\\[ABbEGLlNUuQdQZz]" />
-        <RegExpr attribute="Special Variable" context="#stay" String="\\[\d]+" />
-        <RegExpr attribute="Pattern" context="#stay" String="\\." />
-      </context>
-      <context name="regex_pattern_internal_rules_2" lineEndContext="#stay">
-        <Detect2Chars attribute="Pattern Internal Operator" context="pat_ext" char="(" char1="?" />
-        <DetectChar attribute="Pattern Internal Operator" context="pat_char_class" char="[" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="[()?^*+|]" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\{[\d, ]+\}" />
-        <DetectChar attribute="Pattern Internal Operator" context="#stay" char="$" />
-        <RegExpr attribute="Comment" context="#stay" String="\s{3,}#.*$" />
-      </context>
-      <context name="regex_pattern_internal" attribute="Pattern" lineEndContext="#stay">
-        <IncludeRules context="regex_pattern_internal_rules_1" />
-        <IncludeRules context="regex_pattern_internal_rules_2" />
-      </context>
-      <context name="regex_pattern_internal_ip" attribute="Pattern" lineEndContext="#stay" >
-        <IncludeRules context="regex_pattern_internal_rules_1" />
-        <!-- NOTE the below means that the special variables $' $], $} and $> are not supported
-             within interpolated PATTERNs (apart from $(, $) and ${ and $| not supported by perl).
-             This is because perl considers
-             s{foo$} {bar} OK as well as s{foo$}} {bar}, and detecting that is a huge work overload
-             for something that is unlikely to happen. -->
-        <RegExpr attribute="Data Type" context="find_variable_unsafe" String="[$@][^]\s{}()|&gt;']" lookAhead="true" />
-        <IncludeRules context="regex_pattern_internal_rules_2" />
-      </context>
-      <context name="pat_ext" attribute="Pattern Internal Operator" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#pop" String="\#[^)]*" />
-        <RegExpr attribute="Pattern Internal Operator" context="#pop" String="[:=!&gt;&lt;]+" />
-        <DetectChar attribute="Pattern Internal Operator" context="#pop" char=")" />
-      </context>
-      <context name="pat_char_class" attribute="Pattern Character Class" lineEndContext="#stay">
-        <DetectChar attribute="Pattern Internal Operator" context="#stay" char="^" />
-        <Detect2Chars attribute="Pattern Character Class" context="#stay" char="\" char1="\" />
-        <Detect2Chars attribute="Pattern Character Class" context="#stay" char="\" char1="]" />
-        <RegExpr attribute="Pattern Character Class" context="#stay" String="\[:^?[a-z]+:\]" />
-        <DetectChar attribute="Pattern Internal Operator" context="#pop" char="]" />
-      </context>
-
-      <!-- ====== Variables ====== -->
-      <context name="find_variable" attribute="Data Type" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop" >
-        <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="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_]+\}" />
-        <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]?" />
-        <!-- 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="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="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="Operator" context="#pop" String="$@%*" />
-      </context>
-      <context name="var_detect"  attribute="Data Type" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="#pop#pop">
-        <IncludeRules context="var_detect_rules" />
-        <IncludeRules context="slash_safe_escape" />
-      </context>
-      <context name="var_detect_unsafe"  attribute="Data Type" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="#pop#pop">
-        <IncludeRules context="var_detect_rules" />
-      </context>
-      <context name="var_detect_rules" attribute="Data Type" lineEndContext="#pop#pop" >
-        <RegExpr attribute="Data Type" context="#stay" String="[\w_]+" />
-        <Detect2Chars attribute="Normal Text" context="#stay" char=":" char1=":" />
-        <DetectChar attribute="Operator" context="#stay" char="'" />
-        <Detect2Chars attribute="Normal Text" context="#stay" char="-" char1="&gt;" />
-        <!-- safe with operator / -->
-        <Detect2Chars attribute="Normal Text" context="#stay" char="+" char1="+" />
-        <Detect2Chars attribute="Normal Text" context="#stay" char="-" char1="-" />
-      </context>
-
-
-      <!-- ====== Word lists ====== -->
-      <context name="quote_word" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <DetectSpaces />
-        <DetectIdentifier />
-        <RegExpr attribute="Normal Text" context="#stay" String="\\%1" dynamic="true" />
-        <DetectChar attribute="Operator" context="#pop#pop#pop" char="1" dynamic="true" endRegion="Wordlist" />
-      </context>
-      <context name="quote_word_paren" attribute="Normal Text" lineEndContext="#stay">
-        <DetectSpaces />
-        <DetectIdentifier />
-        <Detect2Chars attribute="Normal Text" context="#stay" char="\" char1=")" />
-        <DetectChar attribute="Operator" context="#pop#pop#pop" char=")" endRegion="Wordlist" />
-      </context>
-      <context name="quote_word_brace" attribute="Normal Text" lineEndContext="#stay">
-        <DetectSpaces />
-        <DetectIdentifier />
-        <Detect2Chars attribute="Normal Text" context="#stay" char="\" char1="}" />
-        <DetectChar attribute="Operator" context="#pop#pop#pop" char="}" endRegion="Wordlist" />
-      </context>
-      <context name="quote_word_bracket" attribute="Normal Text" lineEndContext="#stay">
-        <DetectSpaces />
-        <DetectIdentifier />
-        <Detect2Chars attribute="Normal Text" context="#stay" char="\" char1="]" />
-        <DetectChar attribute="Operator" context="#pop#pop#pop" char="]" endRegion="Wordlist" />
-      </context>
-
-      <!-- ====== Here Documents ====== -->
-      <context name="find_here_document" attribute="Normal Text" lineEndContext="#pop" >
-        <RegExpr attribute="Keyword" context="here_document" String="(\w+)\s*;?" />
-        <RegExpr attribute="Keyword" context="here_document" String="\s*&quot;([^&quot;]+)&quot;\s*;?" />
-        <RegExpr attribute="Keyword" context="here_document" String="\s*`([^`]+)`\s*;?" />
-        <RegExpr attribute="Keyword" context="here_document_dumb" String="\s*'([^']+)'\s*;?" />
-      </context>
-      <context name="here_document" attribute="String (interpolated)" lineEndContext="#stay" dynamic="true">
-        <DetectSpaces />
-        <RegExpr attribute="Keyword" context="#pop#pop" String="%1" column="0" dynamic="true" endRegion="HereDocument"/>
-        <RegExpr attribute="Keyword" context="here_document" String="\=\s*&lt;&lt;\s*[&quot;']?([A-Z0-9_\-]+)[&quot;']?" beginRegion="HEREDoc" />
-        <IncludeRules context="ipstring_internal" />
-      </context>
-      <context name="here_document_dumb" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <DetectSpaces />
-        <RegExpr attribute="Keyword" context="#pop#pop" String="%1" column="0" dynamic="true" endRegion="HereDocument"/>
-        <DetectIdentifier />
-      </context>
-
-      <!-- ====== Misc ====== -->
-      <context name="data_handle" attribute="Data" lineEndContext="#stay">
-        <RegExpr attribute="Pod" context="pod" String="\=(?:head[1-6]|over|back|item|for|begin|end|pod)\s+.*" column="0" beginRegion="POD"/>
-        <StringDetect attribute="Keyword" context="normal" String="__END__" firstNonSpace="true" />
-      </context>
-      <context name="end_handle" attribute="Nothing" lineEndContext="#stay">
-        <RegExpr attribute="Pod" context="pod" String="^\=(?:head[1-6]|over|back|item|for|begin|end|pod)\s*.*"/>
-        <StringDetect attribute="Keyword" context="data_handle" String="__DATA__" firstNonSpace="true" />
-      </context>
-
-      <context name="Backticked" attribute="String (interpolated)" lineEndContext="#stay">
-        <IncludeRules context="ipstring_internal"/>
-        <DetectChar attribute="Operator" context="#pop" char="`"/>
-      </context>
-
-      <context name="slash_safe_escape" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Normal Text" context="#pop" String="\s*\}\s*/{1,2}" endRegion="Block"/>
-        <RegExpr attribute="Normal Text" context="#pop" String="\s*[)\]]?\s*/{1,2}" />
-        <keyword attribute="Keyword" context="#pop" String="keywords" /><!-- wonder why??? -->
-      </context>
-
-      <context name="package_qualified_blank" attribute="Normal Text" lineEndContext="#stay">
-        <RegExpr attribute="Normal Text" context="#pop" String="[\w_]+" />
-      </context>
-
-      <context name="sub_name_def" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Function" context="#stay" String="\w+" />
-        <RegExpr attribute="Normal Text" context="find_variable" String="\$\S" lookAhead="true" />
-        <RegExpr attribute="Normal Text" context="sub_arg_definition" String="\s*\(" />
-        <Detect2Chars attribute="Normal Text" context="#stay" char=":" char1=":" />
-      </context>
-
-      <context name="sub_arg_definition" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop#pop">
-        <AnyChar attribute="Data Type" context="#stay" String="*$@%" />
-        <AnyChar attribute="Normal Text" context="#stay" String="&amp;\[];" />
-        <DetectChar attribute="Normal Text" context="slash_safe_escape" char=")" />
-      </context>
-
-      <context name="pod" attribute="Pod" lineEndContext="#stay">
-        <DetectSpaces />
-        <DetectIdentifier />
-        <RegExpr attribute="Pod" context="#stay" String="\=(?:head[1-6]|over|back|item|for|begin|end|pod)\s*.*" column="0" beginRegion="POD" endRegion="POD"/>
-        <RegExpr attribute="Pod" context="#pop" String="\=cut.*$" column="0" endRegion="POD"/>
-      </context>
-
-      <context name="comment" attribute="Comment" lineEndContext="#pop">
-        <DetectSpaces />
-        <IncludeRules context="##Alerts" />
-        <DetectIdentifier />
-      </context>
-
-    </contexts>
-    <itemDatas>
-      <itemData name="Normal Text"               defStyleNum="dsNormal" />
-      <itemData name="Keyword"                   defStyleNum="dsKeyword" />
-      <itemData name="Pragma"                    defStyleNum="dsKeyword" />
-      <itemData name="Function"                  defStyleNum="dsFunction" />
-      <itemData name="Operator"                  defStyleNum="dsKeyword" color="#008000"/>
-      <itemData name="Data Type"                 defStyleNum="dsDataType" />
-      <itemData name="Special Variable"          defStyleNum="dsDataType" color="#C00000" selColor="#C00000" bold="0" italic="0" />
-      <itemData name="Decimal"                   defStyleNum="dsDecVal" />
-      <itemData name="Octal"                     defStyleNum="dsBaseN" />
-      <itemData name="Hex"                       defStyleNum="dsBaseN" />
-      <itemData name="Float"                     defStyleNum="dsFloat" />
-      <itemData name="String"                    defStyleNum="dsString" color="#FF6C6C" selColor="#FF6C6C" bold="0" italic="0" />
-      <itemData name="String (interpolated)"     defStyleNum="dsString" />
-      <itemData name="String Special Character"  defStyleNum="dsChar" />
-      <itemData name="Pattern"                   defStyleNum="dsOthers" />
-      <itemData name="Pattern Internal Operator" defStyleNum="dsChar" />
-      <itemData name="Pattern Character Class"   defStyleNum="dsBaseN" />
-      <itemData name="Data"                      defStyleNum="dsNormal" />
-      <itemData name="Comment"                   defStyleNum="dsComment" />
-      <itemData name="Pod"                       defStyleNum="dsComment" />
-      <itemData name="Nothing"                   defStyleNum="dsComment" />
-    </itemDatas>
-  </highlighting>
-  <general>
-    <comments>
-      <comment name="singleLine" start="#" />
-    </comments>
-    <keywords casesensitive="1" />
-  </general>
-</language>
-<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->
diff --git a/xml/perl.xml.patch b/xml/perl.xml.patch
new file mode 100644
--- /dev/null
+++ b/xml/perl.xml.patch
@@ -0,0 +1,10 @@
+diff --git a/perl.xml b/perl.xml
+index fc2fd41..21e24e1 100644
+--- a/perl.xml
++++ b/perl.xml
+@@ -660,3 +660,4 @@
+         <Detect2Chars attribute="Pattern Character Class" context="#stay" char="\" char1="]" />
+-        <RegExpr attribute="Pattern Character Class" context="#stay" String="\[:^?[a-z]+:\]" />
++        <!-- JGM:  added \ before ^ in the following regex -->
++        <RegExpr attribute="Pattern Character Class" context="#stay" String="\[:\^?[a-z]+:\]" />
+         <DetectChar attribute="Pattern Internal Operator" context="#pop" char="]" />
diff --git a/xml/php.xml.patch b/xml/php.xml.patch
new file mode 100644
--- /dev/null
+++ b/xml/php.xml.patch
@@ -0,0 +1,11 @@
+--- a/xml/php.xml
++++ b/xml/php.xml
+@@ -5412,6 +5412,7 @@
+     </list>
+ 
+     <contexts>
++      <!-- JGM:  Added fallthrough so it will handle snippets that don't begin with <?php -->
++      <context name="start" lineEndContext="#stay" attribute="Normal Text" fallthrough="true" fallthroughContext="phpsource">
+-      <context name="start" lineEndContext="#stay" attribute="Normal Text">
+         <RegExpr context="phpsource" attribute="Keyword" String="&lt;\?(?:=|php)?" insensitive="true" />
+         <StringDetect attribute="Keyword" context="#pop" String="?&gt;" />
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="1.2" kateversion="2.3"
+	  version="1.3" kateversion="2.3"
 	  mimetype="text/x-prolog"
 	  extensions="*.prolog;*.dcg;*.pro"
 	  author="Torsten Eichstädt (torsten.eichstaedt@web.de)"
@@ -825,10 +825,10 @@
 
 	    <!-- id,var,graphic: ASSERT calling context ashured 1st char is ok
 				 ASSERT we get the 1st char for id & var -->
-	    <context name="id" attribute="Syntax Error" >
+	    <context name="id" attribute="Syntax Error" lineEndContext="#stay" >
 		<DetectIdentifier context="#pop" attribute="Normal Text" />
 	    </context>
-	    <context name="var" attribute="Syntax Error" >
+	    <context name="var" attribute="Syntax Error" lineEndContext="#stay" >
 		<DetectIdentifier context="#pop" attribute="_VARIABLE" />
 	    </context>
 	    <context name="graphic" lineEndContext="#pop" attribute="Syntax Error" fallthrough="true" fallthroughContext="#pop" >
diff --git a/xml/pure.xml b/xml/pure.xml
new file mode 100644
--- /dev/null
+++ b/xml/pure.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<!--
+
+ Pure syntax highlighting for kate. Usage:
+
+ - Copy this file either to ~/.kde/share/apps/katepart/syntax or to the global
+   /opt/kde3/share/apps/katepart/syntax directory (or wherever the Kate syntax
+   files are located on your system).
+
+ - You may also want to add a mime type for *.pure files so that your file
+   manager can recognize them.
+
+ - Fire up kate on your Pure script and enjoy the syntax highlighting.
+   Folding of comments and block structure is also supported.
+
+ Author: Albert Graef, with some fixes contributed by Eddie Rucker
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+-->
+<language name="Pure" version="1.2" kateversion="2.4" section="Sources" extensions="*.pure">
+  <highlighting>
+    <list name="blockstarters">
+      <item> case </item>
+      <item> when </item>
+      <item> with </item>
+    </list>
+    <list name="blockenders">
+      <item> end </item>
+    </list>
+    <list name="keywords">
+      <item> const </item>
+      <item> def </item>
+      <item> else </item>
+      <item> extern </item>
+      <item> if </item>
+      <item> infix </item>
+      <item> infixl </item>
+      <item> infixr </item>
+      <item> interface </item>
+      <item> let </item>
+      <item> namespace </item>
+      <item> nonfix </item>
+      <item> of </item>
+      <item> otherwise </item>
+      <item> outfix </item>
+      <item> postfix </item>
+      <item> prefix </item>
+      <item> private </item>
+      <item> public </item>
+      <item> then </item>
+      <item> type </item>
+      <item> using </item>
+    </list>
+    <list name="special">
+      <item> catch </item>
+      <item> throw </item>
+      <item> __break__ </item>
+      <item> __trace__ </item>
+    </list>
+    <list name="types">
+      <item> bigint </item>
+      <item> bool </item>
+      <item> char </item>
+      <item> float  </item>
+      <item> double  </item>
+      <item> expr </item>
+      <item> short </item>
+      <item> int </item>
+      <item> long </item>
+      <item> string </item>
+      <item> pointer </item>
+      <item> void </item>
+      <item> int8 </item>
+      <item> int16 </item>
+      <item> int32 </item>
+      <item> int64 </item>
+      <item> matrix </item>
+      <item> dmatrix </item>
+      <item> cmatrix </item>
+      <item> imatrix </item>
+      <item> smatrix </item>
+      <item> nmatrix </item>
+    </list>
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
+        <DetectSpaces />
+        <keyword attribute="Keyword" context="#stay" String="blockstarters" beginRegion="Block" />
+        <keyword attribute="Keyword" context="#stay" String="blockenders" endRegion="Block" />
+        <keyword attribute="Keyword" context="#stay" String="keywords"/>
+        <keyword attribute="Function" context="#stay" String="special"/>
+        <keyword attribute="Type" context="#stay" String="types"/>
+        <RegExpr attribute="Normal Text" context="#stay" String="[A-Za-z_][A-Za-z0-9_]*"/>
+        <RegExpr attribute="Number" context="#stay" String="0x[A-Za-z0-9]+"/>
+        <Float attribute="Number" context="#stay"/>
+        <Int attribute="Number" context="#stay"/>
+        <HlCChar attribute="Char" context="#stay"/>
+        <DetectChar attribute="String" context="String" char="&quot;"/>
+        <Detect2Chars attribute="Comment" context="Comment1" char="/" char1="*" beginRegion="Comment" />
+        <Detect2Chars attribute="Comment" context="Comment2" char="/" char1="/"/>
+      </context>
+      <context attribute="String" lineEndContext="#pop" name="String">
+        <LineContinue attribute="String" context="#stay"/>
+        <HlCStringChar attribute="String Char" context="#stay"/>
+        <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+      <context attribute="Region Marker" lineEndContext="#pop" name="Region Marker">
+      </context>
+      <context attribute="Comment" lineEndContext="#stay" name="Comment1">
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="Comment2"/>
+    </contexts>
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal" />
+      <itemData name="Keyword"     defStyleNum="dsKeyword" />
+      <itemData name="Function"    defStyleNum="dsFunction"/>
+      <itemData name="Type"        defStyleNum="dsDataType"/>
+      <itemData name="Number"      defStyleNum="dsDecVal" />
+      <itemData name="String"      defStyleNum="dsString" />
+      <itemData name="String Char" defStyleNum="dsChar"/>
+      <itemData name="Comment"     defStyleNum="dsComment" />
+    </itemDatas>
+  </highlighting>
+  <general>
+    <keywords casesensitive="1" />
+    <comments>
+      <comment name="singleLine" start="//" />
+      <comment name="multiLine" start="/*" end="*/" />
+    </comments>
+  </general>
+</language>
diff --git a/xml/python.xml b/xml/python.xml
--- a/xml/python.xml
+++ b/xml/python.xml
@@ -13,7 +13,7 @@
 <!-- v2.06 decorator names can (and often do) contain periods -->
 <!-- v2.07 add support for %prog and co, see bug 142832 -->
 <!-- v2.08 add missing overloaders, new Python 3 statements, builtins, and keywords -->
-<language name="Python" version="2.22" style="python" kateversion="2.4" section="Scripts" extensions="*.py;*.pyw;SConstruct;SConscript" mimetype="application/x-python;text/x-python" casesensitive="1" author="Michael Bueker" license="">
+<language name="Python" version="2.23" style="python" kateversion="2.4" section="Scripts" extensions="*.py;*.pyw;SConstruct;SConscript" mimetype="application/x-python;text/x-python" casesensitive="1" author="Michael Bueker" license="">
 	<highlighting>
 		<list name="prep">
 			<item> import </item>
@@ -378,10 +378,10 @@
 				<StringDetect attribute="String" String="u&quot;&quot;&quot;" insensitive="true" context="Tripple Q-string" beginRegion="Tripple Q-region"/>
 				<!-- ' -->
 				<DetectChar attribute="String" char="'" context="Single A-string"/>
-				<Detect2Chars attribute="String" char="u" char1="'" insensitive="true" context="Single A-string"/>
+				<StringDetect attribute="String" String="u'" insensitive="true" context="Single A-string"/>
 				<!-- " -->
 				<DetectChar attribute="String" char="&quot;" context="Single Q-string"/>
-				<Detect2Chars attribute="String" char="u" char1="&quot;" insensitive="true" context="Single Q-string"/>
+				<StringDetect attribute="String" String="u&quot;" insensitive="true" context="Single Q-string"/>
 
 				<!-- ''' -->
 				<StringDetect attribute="Raw String" String="r'''" insensitive="true" context="Raw Tripple A-string" beginRegion="Tripple A-region"/>
@@ -407,10 +407,10 @@
 				<StringDetect attribute="Comment" String="u&quot;&quot;&quot;" insensitive="true" firstNonSpace="true" context="Tripple Q-comment" beginRegion="Tripple Q-region"/>
 				<!-- ' -->
 				<DetectChar attribute="Comment" char="'" firstNonSpace="true" context="Single A-comment"/>
-				<Detect2Chars attribute="Comment" char="u" char1="'" insensitive="true" firstNonSpace="true" context="Single A-comment"/>
+				<StringDetect attribute="Comment" String="u'" insensitive="true" firstNonSpace="true" context="Single A-comment"/>
 				<!-- " -->
 				<DetectChar attribute="Comment" char="&quot;" firstNonSpace="true" context="Single Q-comment"/>
-				<Detect2Chars attribute="Comment" char="u" char1="&quot;" insensitive="true" firstNonSpace="true" context="Single Q-comment"/>
+				<StringDetect attribute="Comment" String="u&quot;" insensitive="true" firstNonSpace="true" context="Single Q-comment"/>
 
 				<!-- ''' -->
 				<StringDetect attribute="Comment" String="r'''" insensitive="true" firstNonSpace="true" context="Tripple A-comment" beginRegion="Tripple A-region"/>
diff --git a/xml/relaxng.xml b/xml/relaxng.xml
new file mode 100644
--- /dev/null
+++ b/xml/relaxng.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+	<!ENTITY qname    "[A-Za-z_:][\w.:_-]*">
+	<!ENTITY entref  "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&qname;);">
+]>
+
+<!--
+  Kate syntax highlighting for RELAX NG
+  2007 by Thomas Schraitle (tom_schr AT web DOT de)
+  Derived from the XSLT syntax file from Peter Lammich
+  Published under the LGPL
+
+  TODO:
+   - More modularization (how?)
+   - Namespace rules
+-->
+
+<language version="0.8"
+          kateversion="2.1"
+          name="RELAX NG"
+          section="Markup"
+          extensions="*.rng;*.RNG"
+          license="LGPL"
+          author="Thomas Schraitle (tom_schr AT web DOT de)">
+  <highlighting>
+    <list name="relaxngnames">
+      <item> anyName </item>
+      <item> attribute </item>
+      <item> choice </item>
+      <item> data </item>
+      <item> define </item>
+      <item> div </item>
+      <item> element </item>
+      <item> empty </item>
+      <item> except </item>
+      <item> externalRef </item>
+      <item> grammar </item>
+      <item> group </item>
+      <item> include </item>
+      <item> interleave </item>
+      <item> list </item>
+      <item> mixed </item>
+      <item> name </item>
+      <item> notAllowed </item>
+      <item> nsName </item>
+      <item> oneOrMore </item>
+      <item> optional </item>
+      <item> param </item>
+      <item> parentRef </item>
+      <item> ref </item>
+      <item> start </item>
+      <item> text </item>
+      <item> value </item>
+      <item> zeroOrMore </item>
+    </list>
+
+    <contexts>
+      <context name="normalText" attribute="Normal Text" lineEndContext="#stay">
+         <StringDetect attribute="Comment" context="comment" String="&lt;!--" beginRegion="comment"/>
+         <DetectChar attribute="Tag" context="tagname" char="&lt;" />
+         <RegExpr attribute="Entity Reference" context="#stay" String="&entref;" />
+      </context>
+
+      <context name="detectEntRef" attribute="Normal Text" lineEndContext="#stay">
+         <RegExpr attribute="Entity Reference" context="#stay" String="&entref;" />
+      </context>
+
+      <context name="tagname" attribute="Tag" lineEndContext="#stay">
+         <keyword attribute="RELAX NG Tag" context="attributes" String="relaxngnames" />
+         <RegExpr attribute="Attribute" context="attributes" String="\s*" />
+         <DetectChar attribute="Tag" context="#pop" char="&gt;" />
+      </context>
+      
+      <context name="attributes" attribute="Attribute" lineEndContext="#stay">
+         <Detect2Chars attribute="Tag" context="#pop#pop" char="/" char1="&gt;" />
+         <DetectChar attribute="Tag" context="#pop#pop" char="&gt;" />
+         <RegExpr attribute="Normal Text" context="attrValue" String="\s*=\s*" />
+      </context>
+      
+      <context name="attrValue" attribute="Invalid" lineEndContext="#stay">
+         <Detect2Chars attribute="Invalid" context="#pop#pop#pop" char="/" char1="&gt;" />
+         <DetectChar attribute="Invalid" context="#pop#pop#pop" char="&gt;" />
+         <DetectChar attribute="Attribute Value" context="string" char="&quot;" />
+      </context>
+      
+      <context name="string" attribute="Attribute Value" lineEndContext="#stay">
+         <DetectChar attribute="Attribute Value" context="#pop#pop" char="&quot;" />
+         <IncludeRules context="detectEntRef" />
+      </context>
+      
+      <context name="comment" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces/>
+        <StringDetect attribute="Comment" context="#pop"  String="--&gt;" endRegion="comment"/>
+        <RegExpr attribute="Error" context="#stay" String="-(-(?!-&gt;))+"/>
+        <IncludeRules context="##Alerts"/>
+        <DetectIdentifier/>
+      </context>      
+    </contexts>
+    
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Tag" defStyleNum="dsKeyword"/>
+      <itemData name="Invalid" defStyleNum="dsError"/>
+      <itemData name="Attribute" defStyleNum="dsOthers"/>
+      <itemData name="Attribute Value" defStyleNum="dsString" color="#800000" selColor="#ffffff" bold="0" italic="0"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="RELAX NG Tags" defStyleNum="dsKeyword" color="#000080" selColor="#ffffff" bold="1" italic="0" />
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="multiLine" start="&lt;!--" end="--&gt;" />
+    </comments>
+    <keywords casesensitive="0" weakDeliminator="-:" additionalDeliminator="&quot;{}"/>
+  </general>
+</language>
diff --git a/xml/rest.xml b/xml/rest.xml
new file mode 100644
--- /dev/null
+++ b/xml/rest.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+        <!ENTITY inlinestart "(^|[-\s&apos;&quot;\(\[{&lt;/:‘“’«¡¿‐‑‒–— ])">
+        <!ENTITY inlineend "(?=[-\s’”»‐‑‒–— &apos;&quot;\)\]}&gt;/:\.,;!\?\\]|$)">
+        <!ENTITY SimpleReferenceNameChars "\w_\.:\+-">
+]>
+<!--
+  This file is part of KDE's kate project.
+
+  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="1.4" kateversion="2.4" casesensitive="1">
+
+  <highlighting>
+
+    <contexts>
+      <context name="Normal" attribute="Normal" lineEndContext="#stay">
+        <RegExpr attribute="Bold" context="#stay" String="&inlinestart;\*\*[^\s].*\*\*&inlineend;" minimal="true"/>
+        <RegExpr attribute="Italic" context="#stay" String="&inlinestart;\*[^\s].*\*&inlineend;" minimal="true"/>
+        <IncludeRules context="InlineMarkup"/>
+        <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"/>
+        <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"/>
+        <RegExpr attribute="Field" String=":(?=([^:]*\\:)*[^:]*:(\s|$))" context="Field" firstNonSpace="true"/>
+        <RegExpr attribute="Comment" context="Comment" String="^(\s*)\.\.\s(?![\w-_\.]+::(\s|$))" column="0"/>
+      </context>
+
+      <context name="InlineMarkup" attribute="Normal" lineEndContext="#stay">
+        <RegExpr attribute="InlineLiteral" context="#stay" String="&inlinestart;``[^\s].*``&inlineend;" minimal="true"/>
+        <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="InterpretedText" context="TrailingRole" String="&inlinestart;`[^\s].*`(?=:[\w-_\.\+]+:)" minimal="true"/>
+        <RegExpr attribute="Role" String=":[\w-_\.\+]+:(?=`)" context="Role"/>
+      </context>
+
+      <context name="Field" attribute="Field" lineEndContext="#stay">
+        <DetectChar attribute="Field" context="#pop" char=":"/>
+        <Detect2Chars attribute="Field" context="#stay" char="\" char1=":"/>
+        <RegExpr attribute="FieldBold" context="#stay" String="&inlinestart;\*\*[^\s].*\*\*&inlineend;" minimal="true"/>
+        <RegExpr attribute="FieldItalic" context="#stay" String="&inlinestart;\*[^\s].*\*&inlineend;" minimal="true"/>
+        <IncludeRules context="InlineMarkup"/>
+      </context>
+      <context name="InterpretedText" attribute="InterpretedText" lineEndContext="#pop">
+        <DetectChar attribute="InterpretedText" char="`" context="#pop" />
+      </context>
+      <context name="Role" attribute="Role" lineEndContext="#pop">
+        <DetectChar attribute="InterpretedText" char="`" context="#pop!InterpretedText" />
+      </context>
+      <context name="TrailingRole" attribute="Role" lineEndContext="#pop">
+        <RegExpr attribute="Role" String=":[\w-_\.\+]+:" context="#pop"/>
+      </context>
+      <context name="Comment" attribute="Comment" lineEndContext="#stay" dynamic="true">
+        <RegExpr attribute="Code" String="^%1   " context="#stay" column="0" dynamic="true"/>
+        <RegExpr attribute="Normal" String="^(.|$)" lookAhead="true" column="0" context="#pop"/>
+        <IncludeRules context="##Alerts"/>
+      </context>
+
+      <context name="CodeBlock" attribute="Code" lineEndContext="#stay">
+        <RegExpr attribute="Code" String="^(\s+)(?=\S)" context="Code" column="0"/>
+      </context>
+
+      <context name="Code" attribute="Code" lineEndContext="#stay" dynamic="true">
+        <RegExpr attribute="Code" String="^%1" context="#stay" column="0" dynamic="true"/>
+        <RegExpr attribute="Normal" String="^(.|$)" lookAhead="true" context="#pop#pop" column="0"/>
+      </context>
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal" defStyleNum="dsNormal" />
+      <itemData name="Bold" defStyleNum="dsNormal" bold="1" />
+      <itemData name="Italic" defStyleNum="dsNormal" italic="1" />
+      <itemData name="InlineLiteral" defStyleNum="dsDataType" />
+      <itemData name="SubstitutionReference" defStyleNum="dsFunction" />
+      <itemData name="InlineInternalTarget" defStyleNum="dsFunction" />
+      <itemData name="FootnoteReference" defStyleNum="dsOthers" />
+      <itemData name="InterpretedText" defStyleNum="dsDecVal" />
+      <itemData name="HyperlinkReference" defStyleNum="dsOthers" />
+      <itemData name="Field" defStyleNum="dsFunction" />
+      <itemData name="FieldBold" defStyleNum="dsFunction" bold="1" />
+      <itemData name="FieldItalic" defStyleNum="dsFunction" italic="1" />
+      <itemData name="Footnote" defStyleNum="dsDataType" />
+      <itemData name="Citation" defStyleNum="dsDataType" />
+      <itemData name="HyperlinkTarget" defStyleNum="dsDataType" />
+      <itemData name="Directive" defStyleNum="dsDataType" />
+      <itemData name="SubstitutionDefinition" defStyleNum="dsDataType" />
+      <itemData name="Role" defStyleNum="dsKeyword" />
+      <itemData name="Code" defStyleNum="dsDataType" />
+      <itemData name="Comment" defStyleNum="dsComment" />
+    </itemDatas>
+
+  </highlighting>
+
+  <general>
+    <folding indentationsensitive="true" />
+    <comments>
+      <comment name="singleLine" start=".."/>
+    </comments>
+  </general>
+
+</language>
diff --git a/xml/restructuredtext.xml b/xml/restructuredtext.xml
deleted file mode 100644
--- a/xml/restructuredtext.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
-<language name="Restructured Text" version="1.0" kateversion="2.4" section="Markup" extensions="*.rst" author="Massimiliano Torromeo (massimiliano.torromeo@gmail.com)" license="LGPL">
-
-	<highlighting>
-		<contexts>
-			<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Emphasys" String="\*[^* ].*\S\*" context="#stay" />
-				<RegExpr attribute="Strong" String="\*\*\S.*\S\*\*" context="#stay" />
-				<RegExpr attribute="Literal" String="``\S.*\S``" context="#stay" />
-				<RegExpr attribute="Directive" String="^\.\. " context="Directive" />
-				<RegExpr attribute="Title" String="^(#{3,}|\*{3,}|={3,}|-{3,}|\^{3,}|&quot;{3,}|&apos;{3,}|~{3,}|`{3,}|\+{3,})$" context="#stay" />
-				<RegExpr attribute="OrderedList" String="[#0-9]\.\s" firstNonSpace="1" context="#stay" />
-				<AnyChar attribute="UnorderedList" String="*+-" firstNonSpace="1" context="#stay" />
-				<DetectChar attribute="Link" char="`" context="Link" />
-				<RegExpr attribute="Code" String="::$" context="CodeBlock" />
-			</context>
-
-			<context name="CodeBlock" attribute="Code" lineEndContext="#stay">
-				<RegExpr attribute="Code" String="^\s" context="Code" />
-			</context>
-
-			<context name="Code" attribute="Code" lineEndContext="#stay">
-				<RegExpr attribute="Normal" String="^\S" lookAhead="true" context="#pop#pop" />
-			</context>
-
-			<context name="Directive" attribute="Directive" lineEndContext="#pop">
-				<RegExpr attribute="Keyword" String="\w+" context="#stay" />
-			</context>
-
-			<context name="Link" attribute="Link" lineEndContext="#pop">
-				<DetectChar attribute="Link" char="&lt;" context="URL" />
-				<Detect2Chars attribute="Link" char="`" char1="_" context="#pop" />
-			</context>
-
-			<context name="URL" attribute="LinkUrl" lineEndContext="#stay">
-				<RegExpr attribute="LinkUrl" String="[^&gt;]+" context="#stay" />
-				<DetectChar attribute="Link" char="&gt;" context="#pop" />
-			</context>
-		</contexts>
-
-		<itemDatas>
-			<itemData name="Normal Text" defStyleNum="dsNormal" />
-			<itemData name="Directive" defStyleNum="dsDecVal" />
-			<itemData name="Emphasys" defStyleNum="dsNormal" italic="1" />
-			<itemData name="Strong" defStyleNum="dsNormal" bold="1" />
-			<itemData name="Literal" defStyleNum="dsDataType" />
-			<itemData name="Keyword" defStyleNum="dsKeyword" />
-			<itemData name="OrderedList" defStyleNum="dsDecVal" />
-			<itemData name="UnorderedList" defStyleNum="dsFloat" />
-			<itemData name="Link" defStyleNum="dsString" />
-			<itemData name="LinkUrl" defStyleNum="dsString" bold="1" />
-			<itemData name="Title" defStyleNum="dsKeyword" bold="1" />
-			<itemData name="Code" defStyleNum="dsDataType" />
-			<itemData name="Error" defStyleNum="dsError" />
-		</itemDatas>
-
-	</highlighting>
-</language>
diff --git a/xml/rhtml.xml b/xml/rhtml.xml
--- a/xml/rhtml.xml
+++ b/xml/rhtml.xml
@@ -339,15 +339,15 @@
 				<StringDetect attribute="CDATA" context="CDATA" String="&lt;![CDATA[" beginRegion="cdata" />
 				<RegExpr attribute="Doctype" context="Doctype" String="&lt;!DOCTYPE\s+" beginRegion="doctype" />
 				<RegExpr attribute="Processing Instruction" context="PI" String="&lt;\?[\w:-]*" beginRegion="pi" />
-				<RegExpr attribute="Element" context="CSS" String="&lt;style\b" insensitive="TRUE" beginRegion="style" />
-				<RegExpr attribute="Element" context="JS" String="&lt;script\b" insensitive="TRUE" beginRegion="script" />
-				<RegExpr attribute="Element" context="El Open" String="&lt;pre\b" insensitive="TRUE" beginRegion="pre" />
-				<RegExpr attribute="Element" context="El Open" String="&lt;div\b" insensitive="TRUE" beginRegion="div" />
-				<RegExpr attribute="Element" context="El Open" String="&lt;table\b" insensitive="TRUE" beginRegion="table" />
+				<RegExpr attribute="Element" context="CSS" String="&lt;style\b" insensitive="true" beginRegion="style" />
+				<RegExpr attribute="Element" context="JS" String="&lt;script\b" insensitive="true" beginRegion="script" />
+				<RegExpr attribute="Element" context="El Open" String="&lt;pre\b" insensitive="true" beginRegion="pre" />
+				<RegExpr attribute="Element" context="El Open" String="&lt;div\b" insensitive="true" beginRegion="div" />
+				<RegExpr attribute="Element" context="El Open" String="&lt;table\b" insensitive="true" beginRegion="table" />
 				<RegExpr attribute="Element" context="El Open" String="&lt;&name;" />
-				<RegExpr attribute="Element" context="El Close" String="&lt;/pre\b" insensitive="TRUE" endRegion="pre" />
-				<RegExpr attribute="Element" context="El Close" String="&lt;/div\b" insensitive="TRUE" endRegion="div" />
-				<RegExpr attribute="Element" context="El Close" String="&lt;/table\b" insensitive="TRUE" endRegion="table" />
+				<RegExpr attribute="Element" context="El Close" String="&lt;/pre\b" insensitive="true" endRegion="pre" />
+				<RegExpr attribute="Element" context="El Close" String="&lt;/div\b" insensitive="true" endRegion="div" />
+				<RegExpr attribute="Element" context="El Close" String="&lt;/table\b" insensitive="true" endRegion="table" />
 				<RegExpr attribute="Element" context="El Close" String="&lt;/&name;" />
 				<!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context="FindDTDRules" />
 				<IncludeRules context="FindEntityRefs" />
@@ -469,7 +469,7 @@
 			<context name="CSS content" attribute="Normal Text" lineEndContext="#stay">
 				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
 				
-				<RegExpr attribute="Element" context="El Close 2" String="&lt;/style\b" insensitive="TRUE" endRegion="style" />
+				<RegExpr attribute="Element" context="El Close 2" String="&lt;/style\b" insensitive="true" endRegion="style" />
 				<IncludeRules context="##CSS" includeAttrib="true"/>
 			</context>
 			
@@ -485,13 +485,13 @@
 			<context name="JS content" attribute="Normal Text" lineEndContext="#stay">
 				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
 				
-				<RegExpr attribute="Element" context="El Close 2" String="&lt;/script\b" insensitive="TRUE" endRegion="script" />
-				<RegExpr attribute="Comment" context="JS comment close" String="//(?=.*&lt;/script\b)" insensitive="TRUE" />
+				<RegExpr attribute="Element" context="El Close 2" String="&lt;/script\b" insensitive="true" endRegion="script" />
+				<RegExpr attribute="Comment" context="JS comment close" String="//(?=.*&lt;/script\b)" insensitive="true" />
 				<IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
 			</context>
 			
 			<context name="JS comment close" attribute="Comment" lineEndContext="#pop">
-				<RegExpr attribute="Element" context="El Close 3" String="&lt;/script\b" insensitive="TRUE" endRegion="script" />
+				<RegExpr attribute="Element" context="El Close 3" String="&lt;/script\b" insensitive="true" endRegion="script" />
 				<IncludeRules context="##Alerts" />
 			</context>
 			
diff --git a/xml/scala.xml b/xml/scala.xml
--- a/xml/scala.xml
+++ b/xml/scala.xml
@@ -3412,14 +3412,14 @@
         <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"/>
+          <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>
         <HlCChar attribute="Char" context="#stay"/>
         <RegExpr attribute="Decimal" context="#stay" String="//\s*BEGIN.*$" beginRegion="Region1"/>
diff --git a/xml/tcsh.xml b/xml/tcsh.xml
new file mode 100644
--- /dev/null
+++ b/xml/tcsh.xml
@@ -0,0 +1,868 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+        <!ENTITY funcname "[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*">
+        <!ENTITY varname  "[A-Za-z_][A-Za-z0-9_]*">
+        <!ENTITY word     "[|&amp;;()&lt;&gt;\s]+">	<!-- see man csh -->
+        <!ENTITY eos      "(?=($|\s))">			<!-- eol or space following -->
+        <!ENTITY noword   "(?![\w$+-])">		<!-- no word, $, + or - following -->
+        <!ENTITY pathpart "([\w_@.&#37;*?+-]|\\ )">     <!-- valid character in a file name -->
+]>
+<language name="Tcsh" version="0.2" kateversion="2.4" section="Scripts" extensions="*.csh;*.tcsh;csh.cshrc;csh.login;.tcshrc;.cshrc;.login" mimetype="application/x-csh" casesensitive="1" author="Matthew Woehlke (mw_triad@users.sourceforge.net)" license="LGPL">
+
+<!-- (c) 2006 Matthew Woehlke (mw_triad@users.sourceforge.net)
+    Based on the bash highlighter by Wilbert Berendsen (wilbert@kde.nl)
+    Released under the LGPL -->
+
+  <highlighting>
+    <list name="keywords">
+      <item> else </item>
+      <item> for </item>
+      <item> function </item>
+      <item> in </item>
+      <item> select </item>
+      <item> until </item>
+      <item> while </item>
+      <item> . </item>
+      <item> then </item>
+    </list>
+
+    <list name="builtins">
+      <item> : </item>
+      <item> alias </item>
+      <item> alloc </item>
+      <item> bg </item>
+      <item> bindkey </item>
+      <item> break </item>
+      <item> builtins </item>
+      <item> bye </item>
+      <item> cd </item>
+      <item> chdir </item>
+      <item> complete </item>
+      <item> continue </item>
+      <item> dirs </item>
+      <item> echo </item>
+      <item> echotc </item>
+      <item> eval </item>
+      <item> exec </item>
+      <item> exit </item>
+      <item> fg </item>
+      <item> filetest </item>
+      <item> glob </item>
+      <item> hashstat </item>
+      <item> history </item>
+      <item> hup </item>
+      <item> inlib </item>
+      <item> jobs </item>
+      <item> kill </item>
+      <item> limit </item>
+      <item> log </item>
+      <item> login </item>
+      <item> logout </item>
+      <item> ls-F </item>
+      <item> migrate </item>
+      <item> newgrp </item>
+      <item> nice </item>
+      <item> nohup </item>
+      <item> notify </item>
+      <item> onintr </item>
+      <item> popd </item>
+      <item> printenv </item>
+      <item> pushd </item>
+      <item> rehash </item>
+      <item> repeat </item>
+      <item> sched </item>
+      <item> settc </item>
+      <item> setty </item>
+      <item> shift </item>
+      <item> source </item>
+      <item> stop </item>
+      <item> suspend </item>
+      <item> telltc </item>
+      <item> time </item>
+      <item> umask </item>
+      <item> unalias </item>
+      <item> uncomplete </item>
+      <item> unhash </item>
+      <item> unlimit </item>
+      <item> ver </item>
+      <item> wait </item>
+      <item> watchlog </item>
+      <item> where </item>
+      <item> which </item>
+    </list>
+
+    <list name="builtins_var">
+      <item> unset </item>
+      <item> unsetenv </item>
+    </list>
+
+    <list name="unixcommands">
+      <!-- /bin -->
+      <item> arch </item>
+      <item> awk </item>
+      <item> bash </item>
+      <item> bunzip2 </item>
+      <item> bzcat </item>
+      <item> bzcmp </item>
+      <item> bzdiff </item>
+      <item> bzegrep </item>
+      <item> bzfgrep </item>
+      <item> bzgrep </item>
+      <item> bzip2 </item>
+      <item> bzip2recover </item>
+      <item> bzless </item>
+      <item> bzmore </item>
+      <item> cat </item>
+      <item> chattr </item>
+      <item> chgrp </item>
+      <item> chmod </item>
+      <item> chown </item>
+      <item> chvt </item>
+      <item> cp </item>
+      <item> date </item>
+      <item> dd </item>
+      <item> deallocvt </item>
+      <item> df </item>
+      <item> dir </item>
+      <item> dircolors </item>
+      <item> dmesg </item>
+      <item> dnsdomainname </item>
+      <item> domainname </item>
+      <item> du </item>
+      <item> dumpkeys </item>
+      <item> echo </item>
+      <item> ed </item>
+      <item> egrep </item>
+      <item> false </item>
+      <item> fgconsole </item>
+      <item> fgrep </item>
+      <item> fuser </item>
+      <item> gawk </item>
+      <item> getkeycodes </item>
+      <item> gocr </item>
+      <item> grep </item>
+      <item> groff </item>
+      <item> groups </item>
+      <item> gunzip </item>
+      <item> gzexe </item>
+      <item> gzip </item>
+      <item> hostname </item>
+      <item> igawk </item>
+      <item> install </item>
+      <item> kbd_mode </item>
+      <item> kbdrate </item>
+      <item> killall </item>
+      <item> last </item>
+      <item> lastb </item>
+      <item> link </item>
+      <item> ln </item>
+      <item> loadkeys </item>
+      <item> loadunimap </item>
+      <item> login </item>
+      <item> ls </item>
+      <item> lsattr </item>
+      <item> lsmod </item>
+      <item> lsmod.old </item>
+      <item> mapscrn </item>
+      <item> mesg </item>
+      <item> mkdir </item>
+      <item> mkfifo </item>
+      <item> mknod </item>
+      <item> mktemp </item>
+      <item> more </item>
+      <item> mount </item>
+      <item> mv </item>
+      <item> nano </item>
+      <item> netstat </item>
+      <item> nisdomainname </item>
+      <item> nroff </item>
+      <item> openvt </item>
+      <item> pgawk </item>
+      <item> pidof </item>
+      <item> ping </item>
+      <item> ps </item>
+      <item> pstree </item>
+      <item> pwd </item>
+      <item> rbash </item>
+      <item> readlink </item>
+      <item> red </item>
+      <item> resizecons </item>
+      <item> rm </item>
+      <item> rmdir </item>
+      <item> run-parts </item>
+      <item> sash </item>
+      <item> sed </item>
+      <item> setfont </item>
+      <item> setkeycodes </item>
+      <item> setleds </item>
+      <item> setmetamode </item>
+      <item> setserial </item>
+      <item> sh </item>
+      <item> showkey </item>
+      <item> shred </item>
+      <item> sleep </item>
+      <item> ssed </item>
+      <item> stat </item>
+      <item> stty </item>
+      <item> su </item>
+      <item> sync </item>
+      <item> tar </item>
+      <item> tempfile </item>
+      <item> touch </item>
+      <item> troff </item>
+      <item> true </item>
+      <item> umount </item>
+      <item> uname </item>
+      <item> unicode_start </item>
+      <item> unicode_stop </item>
+      <item> unlink </item>
+      <item> utmpdump </item>
+      <item> uuidgen </item>
+      <item> vdir </item>
+      <item> wall </item>
+      <item> wc </item>
+      <item> ypdomainname </item>
+      <item> zcat </item>
+      <item> zcmp </item>
+      <item> zdiff </item>
+      <item> zegrep </item>
+      <item> zfgrep </item>
+      <item> zforce </item>
+      <item> zgrep </item>
+      <item> zless </item>
+      <item> zmore </item>
+      <item> znew </item>
+      <item> zsh </item>
+
+      <!-- some from /usr/bin -->
+      <item> aclocal </item>
+      <item> aconnect </item>
+      <item> aplay </item>
+      <item> apm </item>
+      <item> apmsleep </item>
+      <item> apropos </item>
+      <item> ar </item>
+      <item> arecord </item>
+      <item> as </item>
+      <item> as86 </item>
+      <item> autoconf </item>
+      <item> autoheader </item>
+      <item> automake </item>
+      <item> awk </item>
+      <item> basename </item>
+      <item> bc </item>
+      <item> bison </item>
+      <item> c++ </item>
+      <item> cal </item>
+      <item> cat </item>
+      <item> cc </item>
+      <item> cdda2wav </item>
+      <item> cdparanoia </item>
+      <item> cdrdao </item>
+      <item> cd-read </item>
+      <item> cdrecord </item>
+      <item> chfn </item>
+      <item> chgrp </item>
+      <item> chmod </item>
+      <item> chown </item>
+      <item> chroot </item>
+      <item> chsh </item>
+      <item> clear </item>
+      <item> cmp </item>
+      <item> co </item>
+      <item> col </item>
+      <item> comm </item>
+      <item> cp </item>
+      <item> cpio </item>
+      <item> cpp </item>
+      <item> cut </item>
+      <item> dc </item>
+      <item> dd </item>
+      <item> df </item>
+      <item> diff </item>
+      <item> diff3 </item>
+      <item> dir </item>
+      <item> dircolors </item>
+      <item> directomatic </item>
+      <item> dirname </item>
+      <item> du </item>
+      <item> env </item>
+      <item> expr </item>
+      <item> fbset </item>
+      <item> file </item>
+      <item> find </item>
+      <item> flex </item>
+      <item> flex++ </item>
+      <item> fmt </item>
+      <item> free </item>
+      <item> ftp </item>
+      <item> funzip </item>
+      <item> fuser </item>
+      <item> g++ </item>
+      <item> gawk </item>
+      <item> gc </item>
+      <item> gcc </item>
+      <item> gdb </item>
+      <item> getent </item>
+      <item> getopt </item>
+      <item> gettext </item>
+      <item> gettextize </item>
+      <item> gimp </item>
+      <item> gimp-remote </item>
+      <item> gimptool </item>
+      <item> gmake </item>
+      <item> gs </item>
+      <item> head </item>
+      <item> hexdump </item>
+      <item> id </item>
+      <item> install </item>
+      <item> join </item>
+      <item> kill </item>
+      <item> killall </item>
+      <item> ld </item>
+      <item> ld86 </item>
+      <item> ldd </item>
+      <item> less </item>
+      <item> lex </item>
+      <item> ln </item>
+      <item> locate </item>
+      <item> lockfile </item>
+      <item> logname </item>
+      <item> lp </item>
+      <item> lpr </item>
+      <item> ls </item>
+      <item> lynx </item>
+      <item> m4 </item>
+      <item> make </item>
+      <item> man </item>
+      <item> mkdir </item>
+      <item> mknod </item>
+      <item> msgfmt </item>
+      <item> mv </item>
+      <item> namei </item>
+      <item> nasm </item>
+      <item> nawk </item>
+      <item> nice </item>
+      <item> nl </item>
+      <item> nm </item>
+      <item> nm86 </item>
+      <item> nmap </item>
+      <item> nohup </item>
+      <item> nop </item>
+      <item> od </item>
+      <item> passwd </item>
+      <item> patch </item>
+      <item> pcregrep </item>
+      <item> pcretest </item>
+      <item> perl </item>
+      <item> perror </item>
+      <item> pidof </item>
+      <item> pr </item>
+      <item> printf </item>
+      <item> procmail </item>
+      <item> prune </item>
+      <item> ps2ascii </item>
+      <item> ps2epsi </item>
+      <item> ps2frag </item>
+      <item> ps2pdf </item>
+      <item> ps2ps </item>
+      <item> psbook </item>
+      <item> psmerge </item>
+      <item> psnup </item>
+      <item> psresize </item>
+      <item> psselect </item>
+      <item> pstops </item>
+      <item> rcs </item>
+      <item> rev </item>
+      <item> rm </item>
+      <item> scp </item>
+      <item> sed </item>
+      <item> seq </item>
+      <item> setterm </item>
+      <item> shred </item>
+      <item> size </item>
+      <item> size86 </item>
+      <item> skill </item>
+      <item> slogin </item>
+      <item> snice </item>
+      <item> sort </item>
+      <item> sox </item>
+      <item> split </item>
+      <item> ssh </item>
+      <item> ssh-add </item>
+      <item> ssh-agent </item>
+      <item> ssh-keygen </item>
+      <item> ssh-keyscan </item>
+      <item> stat </item>
+      <item> strings </item>
+      <item> strip </item>
+      <item> sudo </item>
+      <item> suidperl </item>
+      <item> sum </item>
+      <item> tac </item>
+      <item> tail </item>
+      <item> tee </item>
+      <item> test </item>
+      <item> tr </item>
+      <item> uniq </item>
+      <item> unlink </item>
+      <item> unzip </item>
+      <item> updatedb </item>
+      <item> updmap </item>
+      <item> uptime </item>
+      <item> users </item>
+      <item> vmstat </item>
+      <item> w </item>
+      <item> wc </item>
+      <item> wget </item>
+      <item> whatis </item>
+      <item> whereis </item>
+      <item> which </item>
+      <item> who </item>
+      <item> whoami </item>
+      <item> write </item>
+      <item> xargs </item>
+      <item> yacc </item>
+      <item> yes </item>
+      <item> zip </item>
+      <item> zsoelim </item>
+
+      <!-- others -->
+      <item> dcop </item>
+      <item> kdialog </item>
+      <item> kfile </item>
+      <item> xhost </item>
+      <item> xmodmap </item>
+      <item> xset </item>
+    </list>
+
+
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Start">
+        <IncludeRules context="FindAll" />
+      </context>
+
+<!-- ====== The following rulessets are meant to be included ======== -->
+      <!-- FindAll tries to interpret everything -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindAll">
+        <IncludeRules context="FindComments" />
+        <IncludeRules context="FindCommands" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- FindMost tries to interpret anything except commands -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindMost">
+        <IncludeRules context="FindComments" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+
+      <!-- FindComments consumes shell comments till EOL -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindComments">
+        <DetectChar attribute="Comment" context="Comment" char="#" firstNonSpace="true"/>
+        <RegExpr attribute="Normal Text" context="Comment" String="[\s;](?=#)" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="Comment">
+        <IncludeRules context="##Alerts" />
+      </context>
+
+      <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsParen">
+        <DetectChar attribute="Comment" context="CommentParen" char="#" firstNonSpace="true"/>
+        <RegExpr attribute="Normal Text" context="CommentParen" String="[\s;](?=#)" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="CommentParen">
+        <RegExpr attribute="Comment" context="#pop" String="[^)](?=\))" />
+        <IncludeRules context="##Alerts" />
+      </context>
+
+      <!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsBackq">
+        <DetectChar attribute="Comment" context="CommentBackq" char="#" firstNonSpace="true"/>
+        <RegExpr attribute="Normal Text" context="CommentBackq" String="[\s;](?=#)" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="CommentBackq">
+        <RegExpr attribute="Comment" context="#pop" String="[^`](?=`)" />
+        <IncludeRules context="##Alerts" />
+      </context>
+
+
+      <!-- breaksw case default if else end endif endsw foreach goto
+           set setenv switch while -->
+
+      <!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindCommands">
+        <!-- start expression in double parentheses -->
+<!--!--><Detect2Chars attribute="Keyword" context="ExprDblParen" char="(" char1="(" beginRegion="expression" />
+        <!-- start expression in double brackets -->
+<!--!--><RegExpr attribute="Keyword" context="ExprDblBracket" String="\[\[&eos;" beginRegion="expression" column="0"/>
+<!--!--><RegExpr attribute="Keyword" context="ExprDblBracket" String="\s\[\[&eos;" beginRegion="expression" />
+        <!-- start expression in single brackets -->
+<!--!--><RegExpr attribute="Builtin" context="ExprBracket" String="\[&eos;" beginRegion="expression" column="0"/>
+<!--!--><RegExpr attribute="Builtin" context="ExprBracket" String="\s\[&eos;" beginRegion="expression" />
+        <!-- start a group command with { -->
+<!--!--><RegExpr attribute="Keyword" context="Group" String="\{&eos;" beginRegion="group" />
+        <!-- start a subshell -->
+<!--!--><DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell" />
+        <!-- match do and if blocks -->
+<!--!--><RegExpr attribute="Keyword" context="#stay" String="\bdo&noword;" beginRegion="do" />
+<!--!--><RegExpr attribute="Keyword" context="#stay" String="\bdone&noword;" endRegion="do" />
+<!--!--><RegExpr attribute="Keyword" context="#stay" String="\belse\s+if&noword;" />
+<!--!--><RegExpr attribute="Keyword" context="#stay" String="\bif&noword;" beginRegion="if" />
+<!--!--><RegExpr attribute="Keyword" context="#stay" String="\bendif&noword;" endRegion="if" />
+        <!-- handle switch as a special case -->
+<!--!--><RegExpr attribute="Keyword" context="Switch" String="\bswitch&noword;" beginRegion="switch" />
+        <!-- handle command line options -->
+        <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9][A-Za-z0-9_]*" />
+        <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
+        <!-- handle variable assignments -->
+<!--R--><RegExpr attribute="Keyword" context="#stay" String="\b@\s" />
+<!--R--><RegExpr attribute="Keyword" context="#stay" String="\bset\s" />
+        <RegExpr attribute="Keyword" context="CmdSetEnv" String="\bsetenv\s" />
+        <!-- handle functions with function keyword before keywords -->
+<!--!--><StringDetect attribute="Function" context="#stay" String=":()" />
+<!--!--><RegExpr attribute="Keyword" context="FunctionDef" String="\bfunction\b" />
+        <!-- handle keywords -->
+        <keyword attribute="Keyword" context="#stay" String="keywords" />
+        <keyword attribute="Builtin" context="#stay" String="builtins" />
+        <keyword attribute="Command" context="#stay" String="unixcommands" />
+        <!-- handle commands that have variable names as argument -->
+        <keyword attribute="Builtin" context="VarName" String="builtins_var" />
+        <!-- handle redirection -->
+        <RegExpr attribute="Redirection" context="#stay" String="(&lt;&lt;?|&gt;&gt;?&amp;?!?)" />
+        <!-- handle &, &&, | and || -->
+        <RegExpr attribute="Control" context="#stay" String="([|&amp;])\1?" />
+        <!-- mark function definitions without function keyword -->
+        <RegExpr attribute="Function" context="#stay" String="&funcname;\s*\(\)" />
+      </context>
+
+      <!-- FindOthers contains various rules to mark different shell input -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindOthers">
+        <RegExpr attribute="Escape" context="#stay" String="\\[;&quot;\\'$`{}()|&amp;&lt;&gt;* ]" />
+<!--?   <RegExpr attribute="Escape" context="#stay" String="\{(?!(\s|$))\S*\}" />-->
+        <RegExpr attribute="Path" context="#stay" String="&pathpart;*(?=/)" />
+        <RegExpr attribute="Path" context="#stay" String="~\w*" />
+        <RegExpr attribute="Path" context="#stay" String="/&pathpart;*(?=([\s/):;$`'&quot;]|$))" />
+        <!-- TODO: shell globs -->
+      </context>
+
+      <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindStrings">
+        <DetectChar attribute="String SingleQ" context="StringSQ" char="'" />
+        <DetectChar attribute="String DoubleQ" context="StringDQ" char="&quot;" />
+        <Detect2Chars attribute="String SingleQ" context="StringEsc" char="$" char1="'" />
+        <Detect2Chars attribute="String Transl." context="StringDQ" char="$" char1="&quot;" />
+      </context>
+
+      <!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindSubstitutions">
+        <RegExpr attribute="Variable" context="Subscript" String="\$&varname;\[" />
+        <RegExpr attribute="Variable" context="#stay" String="\$&varname;" />
+        <RegExpr attribute="Variable" context="#stay" String="\$[*@#?$!_0-9-]" />
+        <RegExpr attribute="Variable" context="#stay" String="\$\{[*@#?$!_0-9-]\}" />
+        <RegExpr attribute="Variable" context="#stay" String="\$\{#&varname;\}" />
+        <RegExpr attribute="Variable" context="#stay" String="\$\{!&varname;\*?\}" />
+        <RegExpr attribute="Variable" context="VarBrace" String="\$\{&varname;" />
+        <RegExpr attribute="Variable" context="VarBrace" String="\$\{[*@#?$!_0-9-](?=[:#%/])" />
+        <StringDetect attribute="Variable" context="ExprDblParenSubst" String="$((" beginRegion="expression" />
+<!--?   <StringDetect attribute="Redirection" context="SubstFile" String="$(&lt;" />-->
+<!--?   <StringDetect attribute="Variable" context="SubstCommand" String="$(" />-->
+        <DetectChar attribute="Backquote" context="SubstBackq" char="`" />
+        <RegExpr attribute="Escape" context="#stay" String="\\[`$\\]" />
+      </context>
+
+      <!-- FindTests finds operators valid in tests -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindTests">
+        <RegExpr attribute="Expression" context="#stay" String="-[rwxXeozsfdlbcpSugktRLDIFNZ](?=\s)"/>
+        <RegExpr attribute="Expression" context="#stay" String="-[AMCUG]:?(?=\s)"/>
+        <RegExpr attribute="Expression" context="#stay" String="-P[0-7]{,3}:?(?=\s)"/>
+        <RegExpr attribute="Expression" context="#stay" String="([|&amp;=&gt;&lt;])\1"/>
+        <RegExpr attribute="Expression" context="#stay" String="[|^&amp;&gt;&lt;+\-*/%!~]"/>
+        <RegExpr attribute="Expression" context="#stay" String="([!=]~|[!&gt;&lt;]=)"/>
+      </context>
+
+
+<!-- ====== These are the contexts that can be branched to ======= -->
+
+      <!-- ExprDblParen consumes an expression started in command mode till )) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
+        <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression" />
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
+        <Detect2Chars attribute="Variable" context="#pop" char=")" char1=")" endRegion="expression" />
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- ExprSubParen consumes an expression till ) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubParen">
+        <DetectChar attribute="Normal Text" context="#pop" char=")" />
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- ExprBracket consumes an expression till ] -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket">
+        <RegExpr attribute="Builtin" context="#pop" String="\s\](?=($|[\s;|&amp;]))" endRegion="expression" />
+        <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindTests" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- ExprDblBracket consumes an expression till ]] -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket">
+        <RegExpr attribute="Keyword" context="#pop" String="\s\]\](?=($|[\s;|&amp;]))" endRegion="expression" />
+        <RegExpr attribute="Keyword" context="#pop" String="\]\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindTests" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- Group consumes shell input till } -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="Group">
+        <DetectChar attribute="Keyword" context="#pop" char="}" endRegion="group" />
+        <IncludeRules context="FindAll" />
+      </context>
+
+      <!-- SubShell consumes shell input till ) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubShell">
+        <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell" />
+        <IncludeRules context="FindAll" />
+      </context>
+
+      <!-- Assign consumes an expression till EOL or whitespace -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthrough="true" fallthroughContext="#pop">
+        <DetectChar attribute="Variable" context="AssignArray" char="(" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+        <RegExpr attribute="Normal Text" context="#stay" String="[\w:,+_./-]+" />
+      </context>
+
+      <!-- AssignArray consumes everything till ), marking assignments -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="AssignArray">
+        <DetectChar attribute="Variable" context="#pop" char=")" />
+        <DetectChar attribute="Variable" context="Subscript" char="[" />
+        <DetectChar attribute="Variable" context="Assign" char="=" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- AssignSubscr first expects a [ then parses subscript and continues with '=value' -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="AssignSubscr" fallthrough="true" fallthroughContext="#pop">
+        <DetectChar attribute="Variable" context="Subscript" char="[" />
+        <DetectChar attribute="Variable" context="Assign" char="=" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- Subscript consumes anything till ], marks as Variable -->
+      <context attribute="Variable" lineEndContext="#stay" name="Subscript">
+        <DetectChar attribute="Variable" context="#pop" char="]" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- FunctionDef consumes a name, possibly with (), marks as Function -->
+      <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="Function" context="#pop" String="\s+&funcname;(\s*\(\))?" />
+      </context>
+
+      <!-- CmdSetEnv handles the name part of setenv -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="CmdSetEnv" fallthrough="true" fallthroughContext="#pop">
+        <!-- handle command line options -->
+        <RegExpr attribute="Variable" context="#pop" String="\b&varname;" />
+        <DetectChar attribute="Variable" context="Assign" char=" " />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- VarName consumes spare variable names and assignments -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="VarName" fallthrough="true" fallthroughContext="#pop">
+        <!-- handle command line options -->
+        <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9]+" />
+        <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
+        <RegExpr attribute="Variable" context="#stay" String="\b&varname;" />
+        <DetectChar attribute="Variable" context="Subscript" char="[" />
+        <DetectChar attribute="Variable" context="Assign" char="=" />
+        <IncludeRules context="FindMost" />
+        <!-- stay here in spaces and other safe characters -->
+        <RegExpr attribute="Normal Text" context="#stay" String="[^]})|;`&amp;&gt;&lt;]" />
+      </context>
+
+      <!-- ProcessSubst handles <(command) and >(command) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst">
+        <DetectChar attribute="Redirection" context="#pop" char=")" />
+        <IncludeRules context="FindCommentsParen" />
+        <IncludeRules context="FindCommands" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- StringSQ consumes anything till ' -->
+      <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ">
+        <DetectChar attribute="String SingleQ" context="#pop" char="'" />
+      </context>
+
+      <!-- StringDQ consumes anything till ", substitutes vars and expressions -->
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ">
+        <DetectChar attribute="String DoubleQ" context="#pop" char="&quot;" />
+        <RegExpr attribute="String Escape" context="#stay" String="\\[`&quot;\\$\n]" />
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+
+      <!-- StringEsc eats till ', but escaping many characters -->
+      <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
+        <DetectChar attribute="String SingleQ" context="#pop" char="'" />
+        <RegExpr attribute="String Escape" context="#stay" String="\\[abefnrtv\\']" />
+        <RegExpr attribute="String Escape" context="#stay" String="\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)" />
+      </context>
+
+      <!-- VarBrace is called as soon as ${xxx is encoutered -->
+      <context attribute="Variable" lineEndContext="#stay" name="VarBrace">
+        <DetectChar attribute="Variable" context="#pop" char="}" />
+        <DetectChar attribute="Variable" context="Subscript" char="[" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <!-- TODO: highlight various special parameter expansions } -->
+      </context>
+
+      <!-- SubstFile is called after a <( or >( is encoutered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubstFile">
+        <DetectChar attribute="Redirection" context="#pop" char=")" />
+        <IncludeRules context="FindCommentsParen" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- SubstCommand is called after a $( is encountered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand">
+        <DetectChar attribute="Variable" context="#pop" char=")" />
+        <IncludeRules context="FindCommentsParen" />
+        <IncludeRules context="FindCommands" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- SubstBackq is called when a backquote is encountered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubstBackq">
+        <DetectChar attribute="Backquote" context="#pop" char="`" />
+        <IncludeRules context="FindCommentsBackq" />
+        <IncludeRules context="FindCommands" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- Switch is called after the switch keyword is encoutered. This is
+           left over from the bash highlighter where the lonely parentheses
+           would otherwise cause trouble. We keep it because it lets us do a
+           bit of extra syntax validation. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="Switch">
+        <RegExpr attribute="Keyword" context="SwitchCase" String="\scase\b" />
+        <RegExpr attribute="Keyword" context="SwitchDefault" String="\sdefault\b" />
+        <RegExpr attribute="Keyword" context="#pop" String="\bendsw(?=$|[\s;)])" endRegion="switch" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- SwitchCase is called when the construct 'switch ... case' has been found. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SwitchCase">
+        <DetectChar attribute="Keyword" context="SwitchExpr" char=":" beginRegion="switchexpr" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- SwitchDefault is called when the construct 'switch ... default' has been found. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SwitchDefault">
+        <DetectChar attribute="Keyword" context="SwitchExpr" char=":" beginRegion="switchexpr" />
+      </context>
+
+      <!-- SwitchExpr eats shell input till breaksw -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SwitchExpr">
+        <RegExpr attribute="Keyword" context="#pop#pop" String="\sbreaksw\b" endRegion="switchexpr" />
+        <RegExpr attribute="Keyword" context="#pop#pop" String="\scase\b" endRegion="switchexpr" lookAhead="true" />
+        <IncludeRules context="FindAll" />
+      </context>
+
+      <!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDoc">
+        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*&quot;(&word;)&quot;)" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*'(&word;)')" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*\\(&word;))" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocINQ" String="(&lt;&lt;-\s*(&word;))" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*&quot;(&word;)&quot;)" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*'(&word;)')" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*\\(&word;))" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocNQ"  String="(&lt;&lt;\s*(&word;))" lookAhead="true" />
+        <StringDetect attribute="Redirection" context="#pop"  String="&lt;&lt;" /><!-- always met -->
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder">
+        <IncludeRules context="FindAll" />
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocQ" dynamic="true">
+        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+        <RegExpr attribute="Redirection" context="#pop#pop" String="%2[\s;]*$" dynamic="true" column="0"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocNQ" dynamic="true">
+        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+        <RegExpr attribute="Redirection" context="#pop#pop" String="%2[\s;]*$" dynamic="true" column="0"/>
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocIQ" dynamic="true">
+        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+        <RegExpr attribute="Redirection" context="#pop#pop" String="\s*%2[\s;]*$" dynamic="true" column="0"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocINQ" dynamic="true">
+        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+        <RegExpr attribute="Redirection" context="#pop#pop" String="\s*%2[\s;]*$" dynamic="true" column="0"/>
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal Text"	defStyleNum="dsNormal" />
+      <itemData name="Comment"		defStyleNum="dsComment" />
+      <itemData name="Keyword" 		defStyleNum="dsKeyword" />
+      <itemData name="Control" 		defStyleNum="dsKeyword" />
+      <itemData name="Label"            defStyleNum="dsOthers" />
+      <itemData name="Builtin" 		defStyleNum="dsKeyword" />
+      <itemData name="Command" 		defStyleNum="dsKeyword" />
+      <itemData name="Redirection" 	defStyleNum="dsKeyword" />
+      <itemData name="Escape" 		defStyleNum="dsDataType" />
+      <itemData name="String SingleQ" 	defStyleNum="dsString" />
+      <itemData name="String DoubleQ" 	defStyleNum="dsString" />
+      <itemData name="Backquote" 	defStyleNum="dsKeyword" />
+      <itemData name="String Transl." 	defStyleNum="dsString" />
+      <itemData name="String Escape" 	defStyleNum="dsDataType" />
+      <itemData name="Variable" 	defStyleNum="dsOthers" />
+      <itemData name="Expression" 	defStyleNum="dsOthers" />
+      <itemData name="Function" 	defStyleNum="dsFunction" />
+      <itemData name="Path" 		defStyleNum="dsNormal" />
+      <itemData name="Option" 		defStyleNum="dsNormal" />
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="#"/>
+    </comments>
+    <keywords casesensitive="1" weakDeliminator="^%#[]$._{}:-" additionalDeliminator="`"/>
+  </general>
+</language>
diff --git a/xml/tcsh.xml.patch b/xml/tcsh.xml.patch
new file mode 100644
--- /dev/null
+++ b/xml/tcsh.xml.patch
@@ -0,0 +1,9 @@
+diff --git a/tcsh.xml b/tcsh.xml
+index bed4bfe..ddba8fc 100644
+--- a/tcsh.xml
++++ b/tcsh.xml
+@@ -685,3 +685,3 @@
+         <RegExpr attribute="Variable" context="#pop" String="\b&varname;" />
+-        <DetectChar attribute="Variable" context="Assign" char="\s" />
++        <DetectChar attribute="Variable" context="Assign" char=" " />
+         <IncludeRules context="FindMost" />
diff --git a/xml/vhdl.xml b/xml/vhdl.xml
--- a/xml/vhdl.xml
+++ b/xml/vhdl.xml
@@ -3,30 +3,19 @@
   <!ENTITY funcname "[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*">
   <!ENTITY varname  "\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\b">
   <!ENTITY bos      "(\b)">                        <!-- bol or space following -->
-<!--  <!ENTITY bos      "^(|.*\s)">-->                        <!-- bol or space following -->
   <!ENTITY eos      "\b">                <!-- eol or space following -->
-<!--  <!ENTITY eos      "(?=($|\s))">-->                <!-- eol or space following -->
   <!ENTITY noword   "(?![\w$+-])">                <!-- no word, $, + or - following -->
   <!ENTITY label     "((&varname;)\s*:\s*)?">
 
 ]>
-
-<language name="VHDL" version="1.10" kateversion="2.3" 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)">
+<language name="VHDL" version="1.11" kateversion="3.5" 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)">
   <highlighting>
     <list name="keywordsToplevel">
       <item> file </item>
-<!--      <item> package </item>-->
       <item> library </item>
       <item> use </item>
-<!--
-      <item> entity </item>
-      <item> architecture </item>
-      <item> of </item>
-      <item> configuration </item>
--->
-
-
     </list>
+
     <list name="keywords">
       <item> access </item>
       <item> after </item>
@@ -51,6 +40,7 @@
       <item> end </item>
       <item> exit </item>
       <item> fairness </item>
+      <item> falling_edge </item>
       <item> file </item>
       <item> force </item>
       <item> function </item>
@@ -87,6 +77,7 @@
       <item> release </item>
       <item> report </item>
       <item> return </item>
+      <item> rising_edge </item>
       <item> select </item>
       <item> sequence </item>
       <item> severity </item>
@@ -157,13 +148,8 @@
       <item> variable </item>
       <item> constant </item>
       <item> type </item>
+      <item> attribute </item>
     </list>
- <!--   <list name="logics">
-      <item> and </item>
-      <item> or </item>
-      <item> xor </item>
-      <item> not </item>
-    </list>-->
 
     <list name="range">
       <item> to </item>
@@ -176,6 +162,18 @@
       <item> when </item>
     </list>
 
+    <list name="timeunits">
+      <item>fs</item>
+      <item>ps</item>
+      <item>ns</item>
+      <item>us</item>
+      <item>ms</item>
+      <item>sec</item>
+      <item>min</item>
+      <item>hr</item>
+    </list>
+
+    
     <list name="types">
       <item> bit </item>
       <item> bit_vector </item>
@@ -229,91 +227,143 @@
 
 <!-- start / global environment -->
       <context name="start" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <IncludeRules  context="preDetection" />
+        <IncludeRules context="preDetection"/>
 
-        <RegExpr       attribute="Control"  context="architecture_main"  insensitive="true"  dynamic="true"  lookAhead="true"
-                       String="architecture\s+(&varname;)" />
-        <StringDetect  attribute="Control"  context="entity"         String="entity"      />
-        <RegExpr       attribute="Normal Text" context="package"  insensitive="true"  lookAhead="true"  beginRegion="PackageRegion1" 
-                       String="&bos;(package\s+(&varname;)\s+is)&eos;"/>
-        <RegExpr       attribute="Normal Text" context="packagebody"   lookAhead="true" insensitive="true" beginRegion="PackageBodyRegion1"
-                       String="&bos;(package\s+body\s+(&varname;)\s+is)&eos;"/>            
+        <RegExpr attribute="Control" context="architecture_main" insensitive="true" dynamic="true" lookAhead="true"
+                 String="&bos;architecture\s+(&varname;)&eos;"/>
+        <StringDetect attribute="Control" context="entity" 
+                 String="entity"/>
+        <RegExpr attribute="Control" context="package" insensitive="true" lookAhead="true" dynamic="true" beginRegion="PackageRegion1"
+                 String="&bos;package\s+(&varname;)\s+is&eos;"/>
+        <RegExpr attribute="Control" context="packagebody" lookAhead="true" insensitive="true" dynamic="true" beginRegion="PackageBodyRegion1" 
+                 String="&bos;package\s+body\s+(&varname;)\s+is&eos;"/>            
        <!-- <StringDetect  attribute="Control"  context="arch_decl"      String="package"     />temporary-->
-
-        <keyword attribute="Keyword" context="#stay"  String="keywordsToplevel"/>
+        <RegExpr attribute="Control" context="configuration" insensitive="true" dynamic="true" lookAhead="true"
+                 String="&bos;configuration\s+(&varname;)&eos;"/>
+        <keyword attribute="Keyword" context="#stay" String="keywordsToplevel"/>
       </context>
 
 
       <context name="package" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <StringDetect attribute="Redirection" context="#stay" String="%2" dynamic="true" />
-        <IncludeRules context="preDetection" />
-        <StringDetect attribute="Redirection" context="#stay" String="begin" insensitive="true" />
-        <RegExpr attribute="Redirection" context="#pop" String="&bos;end(\s+package)?(\s+%3)?\s*;" dynamic="true" endRegion="PackageRegion1"  insensitive="true" />
-        <IncludeRules context="generalDetection" />
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control"   context="#stay" insensitive="true" String="&bos;package&eos;" />
+        <RegExpr attribute="Keyword"   context="packagemain" insensitive="true" String="&bos;is&eos;" />
+        <RegExpr attribute="Name"      context="#stay"     insensitive="true" String="&bos;%2&eos;" dynamic="true"/>        
+        <RegExpr attribute="Redirection" context="#pop"  dynamic="true" endRegion="PackageRegion1" insensitive="true"
+                 String="&bos;end(\s+package)?(\s+%2)?\s*;" />
+        <IncludeRules context="generalDetection"/>
       </context>
       
+      <context name="packagemain" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Keyword"   context="#pop" lookAhead="true" insensitive="true" String="&bos;end&eos;" />
+        <RegExpr attribute="Keyword"   context="packagefunction" insensitive="true" String="&bos;function&eos;" />
+        <IncludeRules context="generalDetection"/>
+      </context>
+  
+      <context name="packagefunction" attribute="Normal Text" lineEndContext="#stay">
+        <RegExpr attribute="Name" context="#pop" insensitive="true" String="&bos;&varname;&eos;" />
+      </context>
+  
       <!-- package body environment -->
 
       <context name="packagebody" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <StringDetect attribute="Redirection" context="#stay" String="%2" dynamic="true" />
-        <IncludeRules context="preDetection" />
-        <StringDetect attribute="Redirection" context="#stay" String="begin" insensitive="true" />
-        <RegExpr attribute="Redirection" context="#pop" String="&bos;end(\s+package)?(\s+%3)?\s*;" dynamic="true" endRegion="PackageBodyRegion1"  insensitive="true" />
-        <IncludeRules context="generalDetection" />
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control"   context="#stay" insensitive="true" String="&bos;package&eos;" />
+        <RegExpr attribute="Keyword"   context="packagebodymain" insensitive="true" String="&bos;is&eos;" />
+        <RegExpr attribute="Name"      context="#stay"     insensitive="true" String="&bos;%2&eos;" dynamic="true"/>  
+        <RegExpr attribute="Redirection" context="#pop" dynamic="true" endRegion="PackageBodyRegion1" insensitive="true"
+                 String="&bos;end(\s+package)?(\s+%2)?\s*;" />
+        <IncludeRules context="generalDetection"/>
       </context>
 
+      <context name="packagebodymain" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Keyword"   context="#pop" lookAhead="true" insensitive="true" String="&bos;end\s+package&eos;" />
+        <RegExpr attribute="Keyword"   context="packagebodyfunc1" beginRegion="PackBodyFunc" insensitive="true" dynamic="true" lookAhead="true" String="&bos;function\s+(&varname;)&eos;" />
+        <IncludeRules context="generalDetection"/>
+      </context>
+  
+      <context name="packagebodyfunc1" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Redirection" context="packagebodyfunc2" beginRegion="RegionFunction" insensitive="true" String="&bos;begin&eos;" />
+        <RegExpr attribute="Keyword"   context="#pop" insensitive="true" endRegion="PackBodyFunc" dynamic="true" String="&bos;end(\s+function)?(\s+%2)?&eos;" />
+        <RegExpr attribute="Name" context="#stay" insensitive="true" String="&bos;%2&eos;"  dynamic="true"/>
+        <IncludeRules context="generalDetection"/>
+      </context>    
+      
+      <context name="packagebodyfunc2" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Redirection" context="#pop" insensitive="true" dynamic="true" lookAhead="true" endRegion="RegionFunction"
+                 String="&bos;end(\s+function)?&eos;"/>
+        <!--<RegExpr attribute="Error" context="#pop" insensitive="true" dynamic="true" lookAhead="true" endRegion="RegionFunction"
+                 String="&bos;end\s+function(\s+&varname;)?&eos;"/>-->
+        <RegExpr attribute="Process" context="#stay" insensitive="true" 
+                 String="&bos;begin&eos;"/>
+        <IncludeRules context="proc_rules"/>
+      </context>      
+      
+      
 <!--====ARCHITECTURE ===============-->
-      <context  name="architecture_main"  attribute="Normal Text"  lineEndContext="#stay"  dynamic="true">
-        <IncludeRules  context="preDetection" />
-        <RegExpr       attribute="Control"  context="arch_decl"   insensitive="true"  beginRegion="ArchitectureRegion1"
-                       String="architecture\s+(&varname;)\s+of\s+(&varname;)\s+is"   />
-        <RegExpr       attribute="Control"  context="#pop#pop"    insensitive="true"  dynamic="true" endRegion="ArchitectureRegion1"
-                       String="&bos;end(\s+architecture)?(\s+%1)?\s*;"   />
-        <RegExpr       attribute="Error"    context="#pop#pop"    insensitive="true"  dynamic="true" endRegion="ArchitectureRegion1"
-                       String="&bos;end(\s+architecture)?(\s+&varname;)\s*;"   />
-        <IncludeRules  context="detect_arch_parts" />
+      <context name="architecture_main" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="arch_start" insensitive="true" lookAhead="true" dynamic="true" beginRegion="ArchitectureRegion1"
+                 String="&bos;architecture\s+(&varname;)\s+of\s+(&varname;)\s+is"/>
+        <RegExpr attribute="Control" context="#pop#pop" insensitive="true" dynamic="true" endRegion="ArchitectureRegion1"
+                 String="&bos;end(\s+architecture)?(\s+%2)?\s*;"/>
+        <RegExpr attribute="Error" context="#pop#pop" insensitive="true" dynamic="true" endRegion="ArchitectureRegion1"
+                 String="&bos;end(\s+architecture)?(\s+&varname;)\s*;"/>
+        <IncludeRules context="detect_arch_parts"/>
       </context>
 
 <!-- architecture environment "before begin" -->
-      <context name="arch_decl" attribute="Normal Text" lineEndContext="#stay" >
-        <IncludeRules  context="preDetection" />
-        <keyword       attribute="Signal"       context="signal"     insensitive="true"  String="signals"/>
-        <StringDetect  attribute="Control"      context="entity"     insensitive="true"  String="component"/>
-        <StringDetect  attribute="Control"      context="#pop"       insensitive="true"  String="begin"/>
-        <IncludeRules  context="generalDetection" />
+      <context name="arch_start" attribute="Control" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Keyword"   context="arch_decl" insensitive="true" String="&bos;is&eos;" />
+        <RegExpr attribute="Name"      context="#stay"     insensitive="true" String="&bos;%2&eos;" dynamic="true"/>
+        <RegExpr attribute="Reference" context="#stay"     insensitive="true" String="&bos;%4&eos;" dynamic="true"/>
+        <IncludeRules context="generalDetection"/>
       </context>
+      
+      <context name="arch_decl" attribute="Normal Text" lineEndContext="#stay">
+        <IncludeRules context="preDetection"/>
+        <keyword attribute="Signal" context="signal"         insensitive="true" String="signals"/>
+        <StringDetect attribute="Control" context="entity"   insensitive="true" String="component"/>
+        <StringDetect attribute="Control" context="#pop#pop" insensitive="true" String="begin"/>
+        <IncludeRules context="generalDetection"/>
+      </context>
 
 <!-- parts of architecture body -->
       <context name="detect_arch_parts" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <RegExpr attribute="Normal Text"   context="generate1"  lookAhead="true"  insensitive="true"  dynamic="true"
-                 String="&bos;((&varname;)\s*:\s*)(if|for).*\s+generate&eos;" />
-        <RegExpr attribute="Normal Text"   context="process1"   lookAhead="true"  insensitive="true"  dynamic="true"
-                 String="&bos;((&varname;)\s*:\s*)?process&eos;" />
-        <RegExpr attribute="Normal Text"   context="instance"   lookAhead="true"  insensitive="true"   dynamic="true"  beginRegion="InstanceRegion1"
-                 String="\b(&varname;)\s*:\s*(&varname;)" />
+        <RegExpr attribute="Normal Text" context="generate1" lookAhead="true" insensitive="true" dynamic="true" 
+                 String="&bos;(&varname;\s*:\s*)(if|for).*\s+generate&eos;"/>
+        <RegExpr attribute="Normal Text" context="process1" lookAhead="true" insensitive="true" dynamic="true" 
+                 String="&bos;(&varname;\s*:\s*)?process&eos;"/>
+        <RegExpr attribute="Normal Text" context="instance" lookAhead="true" insensitive="true" dynamic="true" beginRegion="InstanceRegion1" 
+                 String="&bos;(&varname;)\s*:\s*((entity\s+)?(&varname;)(\.&varname;)?)"/>
 
-        <IncludeRules  context="generalDetection" />
+        <IncludeRules context="generalDetection"/>
       </context>
 
 <!--====generate ===============-->
       <context name="generate1" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <IncludeRules  context="preDetection" />
-        <RegExpr       attribute="Control"      context="generate2"                 insensitive="true"  beginRegion="GenerateRegion"
-                       String="&bos;generate&eos;" />
-        <RegExpr       attribute="Name"         context="#stay"     dynamic="true"  insensitive="true"
-                       String="&bos;%3&eos;" />
-        <StringDetect  attribute="Control"      context="#stay"     insensitive="true"  String="for"/>
-        <StringDetect  attribute="Control"      context="#stay"     insensitive="true"  String="if"/>
-        <IncludeRules  context="generalDetection" />
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="generate2" insensitive="true" beginRegion="GenerateRegion" 
+                 String="&bos;(generate|loop)&eos;"/>
+        <RegExpr attribute="Name"      context="#stay" dynamic="true" insensitive="true" 
+                 String="&bos;%3&eos;"/>
+        <RegExpr attribute="Control" context="#stay"                insensitive="true" 
+                 String="&bos;(for|if|while)&eos;"/>
+        <IncludeRules context="generalDetection"/>
       </context>
 
       <context name="generate2" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <IncludeRules  context="preDetection" />
-        <StringDetect  attribute="Control"  context="#stay"     insensitive="true"
-                       String="begin"/>
-        <RegExpr       attribute="Control"  context="#pop#pop"  insensitive="true"  endRegion="GenerateRegion"
-                       String="&bos;end\s+generate(\s+&varname;)?\s*;"/>
-        <IncludeRules context="detect_arch_parts" />
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="#stay" insensitive="true" 
+                 String="&bos;begin&eos;"/>
+        <RegExpr attribute="Control" context="#pop#pop" insensitive="true" endRegion="GenerateRegion"
+                 String="&bos;end\s+(generate|loop)(\s+&varname;)?"/>
+        <IncludeRules context="detect_arch_parts"/>
       </context>
 
 
@@ -321,195 +371,276 @@
 <!-- process environment -->
 
       <context name="process1" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <IncludeRules  context="preDetection" />
-        <RegExpr       attribute="Process"  context="#pop"   insensitive="true"  dynamic="true" endRegion="RegionProcess"
-                       String="end\s+process(\s+%3)?\s*;" />
-        <RegExpr       attribute="Error"  context="#pop"   insensitive="true"  dynamic="true" endRegion="RegionProcess"
-                       String="end\s+process(\s+&varname;)?" />
-        <StringDetect  attribute="Process"  context="#stay"  insensitive="true"  beginRegion="RegionProcess"
-                       String="process"  />
-        <StringDetect  attribute="Process"  context="#stay"  insensitive="true"
-                       String="begin"  />
-
-
-        <IncludeRules  context="proc_rules" />
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Process" context="#pop" insensitive="true" dynamic="true" endRegion="RegionProcess"
+                 String="&bos;end\s+process(\s+%3)?"/>
+        <RegExpr attribute="Error" context="#pop" insensitive="true" dynamic="true" endRegion="RegionProcess"
+                 String="&bos;end\s+process(\s+&varname;)?"/>
+        <RegExpr attribute="Process" context="#stay" insensitive="true" beginRegion="RegionProcess" 
+                 String="&bos;process&eos;"/>
+        <RegExpr attribute="Process" context="#stay" insensitive="true" 
+                 String="&bos;begin&eos;"/>
+        <IncludeRules context="proc_rules"/>
       </context>
 
       <context name="proc_rules" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-         <RegExpr attribute="Name"          context="#stay"    insensitive="true"
-                  String="&bos;&varname;(?=\s*:(?!=))" />
-         <RegExpr attribute="Control"       context="if_start" insensitive="true"
-                  String="&bos;(if)&eos;" />
-         <RegExpr attribute="Control"       context="case1"  lookAhead="true"  insensitive="true"   dynamic="true"  beginRegion="CaseRegion1"
-                  String="&bos;(case)&eos;" />
-         <RegExpr attribute="Control"       context="forOrWhile"   insensitive="true"  beginRegion="ForOrWhileRegion1"
-                  String="&bos;&label;((for|while)\s+.+\s+)?loop&eos;"/>
-         <IncludeRules  context="generalDetection" />
+         <RegExpr attribute="Name" context="#stay" insensitive="true" 
+                  String="&bos;&varname;(?=\s*:(?!=))"/>
+         <RegExpr attribute="Control" context="if_start" insensitive="true" 
+                  String="&bos;if&eos;"/>
+         <RegExpr attribute="Control" context="case1" lookAhead="true" insensitive="true"
+                  String="&bos;case&eos;"/>
+         <RegExpr attribute="Control" context="forwhile1" dynamic="true" lookAhead="true" insensitive="true"
+                  String="&bos;((&varname;)\s*:\s*)?((for|while)\s+.+\s+)loop&eos;"/>
+         <IncludeRules context="generalDetection"/>
       </context>
 
 
 
 
 <!--====instance =============== -->
+      <!-- When an instance has been detected-->
+      <context name="instance" attribute="Error" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Reference"   context="#stay" String="&bos;%4&eos;" dynamic="true"/>
+        <RegExpr attribute="Name"        context="#stay" String="&bos;%3&eos;" dynamic="true"/>
+        <RegExpr attribute="Keyword"     context="instanceMap" beginRegion="InstanceMapRegion"
+                 String="&bos;(port|generic)\s+map\s*\(" />
+        <DetectChar attribute="Normal Text" context="#pop" char=";" endRegion="InstanceRegion1"/>
+        <IncludeRules context="generalDetection"/>
+      </context>
 
-      <context name="instance" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <IncludeRules context="preDetection" />
-        <RegExpr attribute="Name"        context="#stay"     String="\b%1\b"  dynamic="true" />
-        <RegExpr attribute="Name"        context="#stay"     String="\b%2\b"  dynamic="true" />
-        <Detect2Chars attribute="Normal Text" context="#pop"      char=")" char1=";"   endRegion="InstanceRegion1" />
-      <!--  <DetectChar   attribute="Error" context="#stay"      char=";" />-->
+      <!-- Inside a port or generic map-->
+      <context name="instanceMap" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <AnyChar attribute="Error" context="#stay" String="&lt;;:"/>
+        <DetectChar attribute="Error" context="#stay" char=":" />
+        <IncludeRules context="preDetection"/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")" endRegion="InstanceMapRegion"/>
+        <DetectChar attribute="Normal Text" context="instanceInnerPar" char="("/>
+        <IncludeRules context="generalDetection"/>
+      </context>      
 
-        <IncludeRules context="generalDetection" />
+      <!-- Inside parantheses inside a map-->
+      <context name="instanceInnerPar" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")" endRegion="instanceInnerPar"/>
+        <DetectChar attribute="Normal Text" context="instanceInnerPar" char="("/>
+        <DetectChar attribute="Error" context="#stay" char=";"/>
+        <IncludeRules context="generalDetection"/>
+      </context>       
+      
+<!--====loop ===============-->
+      <context name="forwhile1" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="forwhile2" insensitive="true" beginRegion="ForWhileRegion" 
+                 String="&bos;loop&eos;"/>
+        <RegExpr attribute="Name"      context="#stay" dynamic="true" insensitive="true" 
+                 String="&bos;%3&eos;"/>
+        <RegExpr attribute="Control" context="#stay"                insensitive="true" 
+                 String="&bos;(for|while)&eos;"/>
+        <IncludeRules context="generalDetection"/>
       </context>
 
-<!--====loop ===============-->
-      <context name="forOrWhile" attribute="Normal Text" lineEndContext="#stay">
-        <RegExpr attribute="Control" context="#pop"  endRegion="ForOrWhileRegion1" insensitive="true"
-                 String="&bos;end\s+loop(\s+&varname;)?\s*;"/>
-        <keyword attribute="Control" context="#stay"  String="forOrWhile"/>
-        <IncludeRules context="proc_rules" />
+      <context name="forwhile2" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="#stay" insensitive="true" 
+                 String="&bos;begin&eos;"/>
+        <RegExpr attribute="Control" context="#pop#pop" insensitive="true" endRegion="ForWhileRegion"
+                 String="&bos;end\s+loop(\s+&varname;)?"/>
+        <IncludeRules context="proc_rules"/>
       </context>
 
 <!--====if ===============-->
       <context name="if_start" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <IncludeRules  context="preDetection" />
-        <StringDetect  attribute="Control"   context="if"     insensitive="true"  beginRegion="IfRegion1"
-                       String="then" />
-        <IncludeRules  context="generalDetection" />
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="if" insensitive="true" beginRegion="IfRegion1" 
+                 String="&bos;then&eos;"/>
+        <IncludeRules context="generalDetection"/>
       </context>
 
       <context name="if" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <IncludeRules  context="preDetection" />
-        <RegExpr attribute="Control" context="#pop#pop"    insensitive="true"  endRegion="IfRegion1"
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="#pop#pop" insensitive="true" endRegion="IfRegion1" 
                  String="&bos;end\s+if(\s+&varname;)?\s*;"/>
-        <IncludeRules context="proc_rules" />
-        <keyword       attribute="Control"   context="#stay"     insensitive="true"
-                       String="if"/>
+        <IncludeRules context="proc_rules"/>
+        <keyword attribute="Control" context="#stay" insensitive="true" String="if"/>
       </context>
 
 
 <!--====case ===============-->
+
       <context name="case1" attribute="Normal Text" lineEndContext="#stay">
-        <IncludeRules  context="preDetection" />
-        <StringDetect  attribute="Keyword"   context="case2"     insensitive="true"
-                       String="is"/>
-        <keyword       attribute="Control"   context="#stay"     insensitive="true"
-                       String="case"/>
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Keyword" context="case2" insensitive="true" 
+                 String="&bos;is&eos;"/>
+        <keyword attribute="Control" context="#stay" insensitive="true" beginRegion="CaseRegion1" String="case"/>
+        <IncludeRules context="generalDetection"/>
       </context>
+      
       <context name="case2" attribute="Normal Text" lineEndContext="#stay">
-        <IncludeRules  context="preDetection" />
-        <RegExpr       attribute="Control"   context="#pop#pop"  insensitive="true"  endRegion="CaseRegion1"
-                       String="&bos;end\s+case(\s+&varname;)?\s*;"/>
-        <StringDetect  attribute="Control"   context="caseWhen"  insensitive="true"  beginRegion="CaseWhenRegion1"
-                       String="when"/>
-        <IncludeRules context="proc_rules" />
-      </context>
-      <context name="caseWhen" attribute="Normal Text" lineEndContext="#stay">
-        <IncludeRules  context="preDetection" />
-        <RegExpr       attribute="Control" context="#pop"  lookAhead="true"  insensitive="true"    endRegion="CaseWhenRegion1"
-                       String="&bos;when&eos;" />
-        <RegExpr       attribute="Control" context="#pop"  lookAhead="true"  insensitive="true"    endRegion="CaseWhenRegion1"
-                       String="&bos;end\s+case(\s+&varname;)?\s*;"/>
-        <IncludeRules context="proc_rules" />
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="#pop#pop" insensitive="true" endRegion="CaseRegion1" 
+                 String="&bos;end\s+case(&varname;)?\s*;"/>
+        <RegExpr attribute="Control" context="caseWhen" lookAhead="true" dynamic="true" insensitive="true" 
+                 String="&bos;when(\s+&varname;)?&eos;"/>
+        <IncludeRules context="proc_rules"/>
       </context>
 
+      <context name="caseWhen" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <Detect2Chars char="=" char1="&gt;" attribute="Operator" context="caseWhen2" beginRegion="CaseWhenRegion1"/>
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" insensitive="true" 
+                 String="&bos;when&eos;"/>
+        <RegExpr attribute="Name" insensitive="true" dynamic="true" 
+                 String="&bos;%2&eos;"/>
+        <IncludeRules context="proc_rules"/>
+      </context>       
 
+      <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;"/>
+        <IncludeRules context="proc_rules"/>
+      </context>
+      <!-- 'when' and 'end case' are checked at the beginning of the line for better code folding -->
 
 
 
+
 <!--====ENTITY ===============-->
 <!-- entity environment -->
 
-      <context  name="entity"  attribute="Normal Text"  lineEndContext="#stay"  dynamic="true">
-        <IncludeRules  context="preDetection" />
-        <RegExpr attribute="Name"  context="entity_main"  beginRegion="EntityRegion1"  insensitive="true"  String="(&varname;)" />
-        <IncludeRules  context="generalDetection" />
+      <context name="entity" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Name" context="entity_main" beginRegion="EntityRegion1" insensitive="true" 
+                 String="(&varname;)"/>
+        <IncludeRules context="generalDetection"/>
       </context>
 
 
       <context name="entity_main" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <IncludeRules context="preDetection" />
-        <RegExpr attribute="Control" context="#pop#pop"   dynamic="true"  insensitive="true" endRegion="EntityRegion1"
-                 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" String="generic"/>
-        <RegExpr attribute="Control" context="#stay" String="port"/>
-        <IncludeRules context="generalDetection" />
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="#pop#pop" dynamic="true" insensitive="true" endRegion="EntityRegion1"
+                 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"/>
+        <IncludeRules context="generalDetection"/>
       </context>
 
-
+<!--====Configuration ===============-->
+<!-- configuration environment -->
+      <context name="configuration" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Control" context="conf_start" insensitive="true" lookAhead="true" dynamic="true" beginRegion="ConfigurationRegion1"
+                 String="&bos;configuration\s+(&varname;)\s+of\s+(&varname;)\s+is"/>
+        <RegExpr attribute="Control" context="#pop#pop" insensitive="true" dynamic="true" endRegion="ConfigurationRegion1"
+                 String="&bos;end(\s+configuration)?(\s+%2)?\s*;"/>
+        <RegExpr attribute="Error" context="#pop#pop" insensitive="true" dynamic="true" endRegion="ConfigurationRegion1"
+                 String="&bos;end(\s+configuration)?(\s+&varname;)\s*;"/>
+      </context>
 
+      <context name="conf_start" attribute="Control" lineEndContext="#stay" dynamic="true">
+        <IncludeRules context="preDetection"/>
+        <RegExpr attribute="Keyword"   context="conf_decl" insensitive="true" String="&bos;is&eos;" />
+        <RegExpr attribute="Name"      context="#stay"     insensitive="true" String="&bos;%2&eos;" dynamic="true"/>
+        <RegExpr attribute="Reference" context="#stay"     insensitive="true" String="&bos;%4&eos;" dynamic="true"/>
+        <IncludeRules context="generalDetection"/>
+      </context>
+      
+      <context name="conf_decl" attribute="Normal Text" lineEndContext="#stay">
+        <IncludeRules context="preDetection"/>
+        <StringDetect attribute="Control" context="conf_for" insensitive="true" String="for"/>
+        <StringDetect attribute="Control" context="#pop#pop" insensitive="true" lookAhead="true"  String="end"/>
+        <IncludeRules context="generalDetection"/>
+      </context>      
+      
+      <context name="conf_for" attribute="Normal Text" lineEndContext="#stay">      
+        <IncludeRules context="preDetection"/>
+        <StringDetect attribute="Control" context="conf_for" insensitive="true" String="for"/>
+        <RegExpr attribute="Control" context="#pop" insensitive="true"  String="end(\s+&varname;)?"/>
+        <IncludeRules context="generalDetection"/>        
+      </context>
+      
+      
 <!--====Basic Stuff ===============-->
 <!-- basic rules -->
       <context name="preDetection" attribute="Normal Text" lineEndContext="#stay">
-        <Detect2Chars attribute="Comment"     context="comment"   char="-" char1="-" />
-        <DetectChar   attribute="Vector"      context="string"    char="&quot;" />
-        <AnyChar      attribute="Operator"    context="#stay"     String="[&amp;&gt;&lt;=:+\-*\/|].," />
-        <DetectChar   attribute="Attribute"   context="attribute" char="'" />
+        <Detect2Chars attribute="Comment" context="comment" char="-" char1="-"/>
+        <DetectChar attribute="Vector" context="string" char="&quot;"/>
+        <AnyChar attribute="Operator" context="#stay" String="[&amp;&gt;&lt;=:+\-*\/|].,"/>
+        <DetectChar attribute="Attribute" context="attribute" char="'"/>
       </context>
 
+      
+      
 <!-- general detection -->
-      <context name="generalDetection"  attribute="Normal Text"  lineEndContext="#stay">
-        <keyword   attribute="Data Type" context="#stay"  String="types"/>
-        <keyword   attribute="Signal"    context="signal" String="signals" beginRegion="sig"/>
-        <keyword   attribute="Range"     context="#stay"  String="range"/>
-        <keyword   attribute="Keyword"   context="#stay"  String="keywords"/>
-        <Int       attribute="Integer"   context="#stay" />
-        <HlCChar   attribute="Bit"       context="#stay" />
-        <DetectSpaces attribute="Normal Text" context="#stay" />
+      <context name="generalDetection" attribute="Normal Text" lineEndContext="#stay">
+        <keyword attribute="Data Type" context="#stay" String="types"/>
+        <keyword attribute="Data Type" context="#stay" String="timeunits"/>
+        <keyword attribute="Signal" context="signal" String="signals" beginRegion="sig"/>
+        <keyword attribute="Range" context="#stay" String="range"/>
+        <keyword attribute="Keyword" context="#stay" String="keywords"/>
+        <Int attribute="Integer" context="#stay"/>
+        <HlCChar attribute="Bit" context="#stay"/>
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
       </context>
 
 <!-- other environments -->
-      <context name="comment" attribute="Comment" lineEndContext="#pop" />
+      <context name="comment" attribute="Comment" lineEndContext="#pop"/>
 
-      <context name="string" attribute="Vector" lineEndContext="#stay" >
-        <DetectChar attribute="Vector"       context="#pop"        char="&quot;" />
+      <context name="string" attribute="Vector" lineEndContext="#stay">
+        <DetectChar attribute="Vector" context="#pop" char="&quot;"/>
       </context>
 
       <context name="attribute" attribute="Attribute" lineEndContext="#pop">
-        <DetectChar attribute="Attribute"    context="quot in att" char="&quot;" />
-        <DetectChar attribute="Normal Text"  context="#pop"        char=" " />
-        <DetectChar attribute="Attribute"    context="#pop"        char="'" />
-        <AnyChar    attribute="Attribute"    context="#pop"        String="()=&lt;&gt;" />
+        <DetectChar attribute="Attribute" context="quot in att" char="&quot;"/>
+        <DetectChar attribute="Attribute" context="quot in att" char="&quot;"/>
+        <DetectChar attribute="Normal Text" context="#pop" char=" "/>
+        <DetectChar attribute="Attribute" context="#pop" char="'"/>
+        <AnyChar attribute="Attribute" context="#pop" String=")=&lt;&gt;"/>
       </context>
 
       <context name="quot in att" attribute="Attribute" lineEndContext="#stay">
-        <DetectChar attribute="Attribute"    context="#pop"        char="&quot;" />
+        <DetectChar attribute="Attribute" context="#pop" char="&quot;"/>
       </context>
 
       <context name="signal" attribute="Normal Text" lineEndContext="#stay">
-        <IncludeRules context="preDetection" />
-        <DetectChar attribute="Normal Text"    context="#pop"        char=";" endRegion="sig" />
-        <IncludeRules context="generalDetection" />
+        <IncludeRules context="preDetection"/>
+        <DetectChar attribute="Normal Text" lookAhead="true" context="#pop" char=";" endRegion="sig"/>
+        <IncludeRules context="generalDetection"/>
       </context>
 
 
     </contexts>
     <itemDatas>
-      <itemData name="Normal Text" defStyleNum="dsNormal" />
-      <itemData name="Keyword" defStyleNum="dsKeyword" />
-      <itemData name="Data Type" defStyleNum="dsDataType" />
-      <itemData name="Comment" defStyleNum="dsComment" />
-      <itemData name="Integer" defStyleNum="dsDecVal" />
-      <itemData name="Bit" defStyleNum="dsChar" />
-      <itemData name="Error" defStyleNum="dsError" color="#f00" bold="1" />
-      <itemData name="Vector" defStyleNum="dsString" />
-      <itemData name="Operator" defStyleNum="dsOthers" />
-      <itemData name="Attribute" defStyleNum="dsBaseN" />
-      <itemData name="Region Marker" defStyleNum="dsRegionMarker" />
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Keyword" defStyleNum="dsKeyword"/>
+      <itemData name="Data Type" defStyleNum="dsDataType"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="Integer" defStyleNum="dsDecVal"/>
+      <itemData name="Bit" defStyleNum="dsChar"/>
+      <itemData name="Reference" defStyleNum="dsFunction"/>
+      <itemData name="Error" defStyleNum="dsError" color="#ff0000" bold="1"/>
+      <itemData name="Vector" defStyleNum="dsString"/>
+      <itemData name="Operator" defStyleNum="dsOthers"/>
+      <itemData name="Attribute" defStyleNum="dsBaseN"/>
+      <itemData name="Region Marker" defStyleNum="dsRegionMarker"/>
       <itemData name="Signal" defStyleNum="dsOthers"/>
       <itemData name="Range" defStyleNum="dsOthers"/>
-      <itemData name="Redirection" defStyleNum="dsKeyword" color="#238" />
-      <itemData name="Process" defStyleNum="dsKeyword" color="#09A" />
-      <itemData name="Control" defStyleNum="dsKeyword" color="#238" />
-      <itemData name="Name" defStyleNum="dsKeyword" color="#b60" bold="1"  />
+      <itemData name="Redirection" defStyleNum="dsKeyword" color="#223388"/>
+      <itemData name="Process" defStyleNum="dsKeyword" color="#0099AA"/>
+      <itemData name="Control" defStyleNum="dsKeyword" color="#223388"/>
+      <itemData name="Name" defStyleNum="dsKeyword" color="#bb6600" bold="1"/>
     </itemDatas>
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="--" />
+      <comment name="singleLine" start="--"/>
     </comments>
-    <keywords casesensitive="0" />
+    <keywords casesensitive="0"/>
   </general>
 </language>
diff --git a/xml/yacc.xml b/xml/yacc.xml
--- a/xml/yacc.xml
+++ b/xml/yacc.xml
@@ -25,7 +25,7 @@
 
 ========================================================================
 -->
-<language name="Yacc/Bison" version="1.03" kateversion="2.4" section="Sources" extensions="*.y;*.yy" author="Jan Villat (jan.villat@net2000.ch)" license="LGPL">
+<language name="Yacc/Bison" version="1.04" kateversion="2.4" section="Sources" extensions="*.y;*.yy" author="Jan Villat (jan.villat@net2000.ch)" license="LGPL">
 
 <highlighting>
 <contexts>
@@ -100,7 +100,7 @@
     <DetectChar attribute="Data Type" context="#pop" char="&gt;" />
   </context>
 
-  <context name="Comment" attribute="Comment">
+  <context name="Comment" attribute="Comment" lineEndContext="#stay">
     <Detect2Chars attribute="Comment" context="CommentStar" char="/" char1="*" />
     <!-- not sure that strict yacc allows that ... but I saw it in some sources ... -->
     <Detect2Chars attribute="Comment" context="CommentSlash" char="/" char1="/" />
@@ -112,7 +112,7 @@
     <RegExpr attribute="Comment" context="#pop" String="[^\\]$" />
   </context>
 
-  <context name="StringOrChar" attribute="NormalText">
+  <context name="StringOrChar" attribute="NormalText" lineEndContext="#stay">
     <DetectChar attribute="String Char" context="Char" char="'" />
     <DetectChar attribute="String" context="String" char="&quot;" />
   </context>
@@ -131,10 +131,10 @@
     <IncludeRules context="##C++" />
     <DetectChar attribute="Directive" context="Dol" char="$" />
   </context>
-  <context name="Dol" attribute="Normal Text" fallthrough="true" fallthroughContext="DolEnd">
+  <context name="Dol" attribute="Normal Text" fallthrough="true" fallthroughContext="DolEnd" lineEndContext="#stay">
     <RegExpr attribute="Data Type" context="DolEnd" String="&lt;[^&gt;]+&gt;" />
   </context>
-  <context name="DolEnd" attribute="Normal Text">
+  <context name="DolEnd" attribute="Normal Text" lineEndContext="#stay">
     <RegExpr attribute="Directive" context="#pop#pop" String="\d+" />
     <DetectChar attribute="Directive" context="#pop#pop" char="$" />
   </context>
diff --git a/xml/zsh.xml b/xml/zsh.xml
new file mode 100644
--- /dev/null
+++ b/xml/zsh.xml
@@ -0,0 +1,959 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+        <!ENTITY funcname "[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*">
+        <!ENTITY varname  "[A-Za-z_][A-Za-z0-9_]*">
+        <!ENTITY word     "[^|&amp;;()&lt;&gt;\s]+">    <!-- see man bash -->
+        <!ENTITY eos      "(?=($|\s))">                 <!-- eol or space following -->
+        <!ENTITY noword   "(?![\w$+-])">                <!-- no word, $, + or - following -->
+        <!ENTITY pathpart "([\w_@.&#37;*?+-]|\\ )">     <!-- valid character in a file name -->
+]>
+<language name="Zsh" version="0.1" 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 -->
+<!-- (c) 2004 by Wilbert Berendsen (wilbert@kde.nl)
+    Changes by Matthew Woehlke (mw_triad@users.sourceforge.net)
+    Changes by Sebastian Pipping (webmaster@hartwork.org)
+    Released under the LGPL, part of kdelibs/kate -->
+
+  <highlighting>
+    <list name="keywords">
+      <item> else </item>
+      <item> for </item>
+      <item> function </item>
+      <item> in </item>
+      <item> select </item>
+      <item> until </item>
+      <item> while </item>
+      <item> elif </item>
+      <item> then </item>
+      <item> set </item>
+    </list>
+
+<list name="builtins"><!-- see man zshbuiltins -->
+	<item> - </item>
+	<item> . </item>
+	<item> : </item>
+	<item> alias </item>
+	<item> autoload </item>
+	<item> bg </item>
+	<item> bindkey </item>
+	<item> break </item>
+	<item> builtin </item>
+	<item> bye </item>
+	<item> cap </item>
+	<item> cd </item>
+	<item> chdir </item>
+	<item> clone </item>
+	<item> command </item>
+	<item> comparguments </item>
+	<item> compcall </item>
+	<item> compctl </item>
+	<item> compdescribe </item>
+	<item> compfiles </item>
+	<item> compgroups </item>
+	<item> compquote </item>
+	<item> comptags </item>
+	<item> comptry </item>
+	<item> compvalues </item>
+	<item> continue </item>
+	<item> dirs </item>
+	<item> disable </item>
+	<item> disown </item>
+	<item> echo </item>
+	<item> echotc </item>
+	<item> echoti </item>
+	<item> emulate </item>
+	<item> enable </item>
+	<item> eval </item>
+	<item> exec </item>
+	<item> exit </item>
+	<item> false </item>
+	<item> fc </item>
+	<item> fg </item>
+	<item> functions </item>
+	<item> getcap </item>
+	<item> getopts </item>
+	<item> hash </item>
+	<item> history </item>
+	<item> jobs </item>
+	<item> kill </item>
+	<item> let </item>
+	<item> limit </item>
+	<item> log </item>
+	<item> logout </item>
+	<item> noglob </item>
+	<item> popd </item>
+	<item> print </item>
+	<item> printf </item>
+	<item> pushd </item>
+	<item> pushln </item>
+	<item> pwd </item>
+	<item> r </item>
+	<item> rehash </item>
+	<item> return </item>
+	<item> sched </item>
+	<item> set </item>
+	<item> setcap </item>
+	<item> setopt </item>
+	<item> shift </item>
+	<item> source </item>
+	<item> stat </item>
+	<item> suspend </item>
+	<item> test </item>
+	<item> times </item>
+	<item> trap </item>
+	<item> true </item>
+	<item> ttyctl </item>
+	<item> type </item>
+	<item> ulimit </item>
+	<item> umask </item>
+	<item> unalias </item>
+	<item> unfunction </item>
+	<item> unhash </item>
+	<item> unlimit </item>
+	<item> unset </item>
+	<item> unsetopt </item>
+	<item> vared </item>
+	<item> wait </item>
+	<item> whence </item>
+	<item> where </item>
+	<item> which </item>
+	<item> zcompile </item>
+	<item> zformat </item>
+	<item> zftp </item>
+	<item> zle </item>
+	<item> zmodload </item>
+	<item> zparseopts </item>
+	<item> zprof </item>
+	<item> zpty </item>
+	<item> zregexparse </item>
+	<item> zsocket </item>
+	<item> zstyle </item>
+	<item> ztcp </item>
+    </list>
+
+    <list name="builtins_var">
+	<item> declare </item>
+	<item> export </item>
+	<item> float </item>
+	<item> getln </item>
+	<item> integer </item>
+	<item> unset </item>
+	<item> declare </item>
+	<item> typeset </item>
+	<item> local </item>
+	<item> read </item>
+	<item> readonly </item>
+    </list>
+
+    <list name="unixcommands">
+      <!-- /bin -->
+      <item> arch </item>
+      <item> awk </item>
+      <item> bash </item>
+      <item> bunzip2 </item>
+      <item> bzcat </item>
+      <item> bzcmp </item>
+      <item> bzdiff </item>
+      <item> bzegrep </item>
+      <item> bzfgrep </item>
+      <item> bzgrep </item>
+      <item> bzip2 </item>
+      <item> bzip2recover </item>
+      <item> bzless </item>
+      <item> bzmore </item>
+      <item> cat </item>
+      <item> chattr </item>
+      <item> chgrp </item>
+      <item> chmod </item>
+      <item> chown </item>
+      <item> chvt </item>
+      <item> cp </item>
+      <item> date </item>
+      <item> dd </item>
+      <item> deallocvt </item>
+      <item> df </item>
+      <item> dir </item>
+      <item> dircolors </item>
+      <item> dmesg </item>
+      <item> dnsdomainname </item>
+      <item> domainname </item>
+      <item> du </item>
+      <item> dumpkeys </item>
+      <item> echo </item>
+      <item> ed </item>
+      <item> egrep </item>
+      <item> false </item>
+      <item> fgconsole </item>
+      <item> fgrep </item>
+      <item> fuser </item>
+      <item> gawk </item>
+      <item> getkeycodes </item>
+      <item> gocr </item>
+      <item> grep </item>
+      <item> groff </item>
+      <item> groups </item>
+      <item> gunzip </item>
+      <item> gzexe </item>
+      <item> gzip </item>
+      <item> hostname </item>
+      <item> igawk </item>
+      <item> install </item>
+      <item> kbd_mode </item>
+      <item> kbdrate </item>
+      <item> killall </item>
+      <item> last </item>
+      <item> lastb </item>
+      <item> link </item>
+      <item> ln </item>
+      <item> loadkeys </item>
+      <item> loadunimap </item>
+      <item> login </item>
+      <item> ls </item>
+      <item> lsattr </item>
+      <item> lsmod </item>
+      <item> lsmod.old </item>
+      <item> lzcat </item>
+      <item> lzcmp </item>
+      <item> lzdiff </item>
+      <item> lzegrep </item>
+      <item> lzfgrep </item>
+      <item> lzgrep </item>
+      <item> lzless </item>
+      <item> lzcat </item>
+      <item> lzma </item>
+      <item> lzmainfo </item>
+      <item> lzmore </item>
+      <item> mapscrn </item>
+      <item> mesg </item>
+      <item> mkdir </item>
+      <item> mkfifo </item>
+      <item> mknod </item>
+      <item> mktemp </item>
+      <item> more </item>
+      <item> mount </item>
+      <item> mv </item>
+      <item> nano </item>
+      <item> netstat </item>
+      <item> nisdomainname </item>
+      <item> nroff </item>
+      <item> openvt </item>
+      <item> pgawk </item>
+      <item> pidof </item>
+      <item> ping </item>
+      <item> ps </item>
+      <item> pstree </item>
+      <item> pwd </item>
+      <item> rbash </item>
+      <item> readlink </item>
+      <item> red </item>
+      <item> resizecons </item>
+      <item> rm </item>
+      <item> rmdir </item>
+      <item> run-parts </item>
+      <item> sash </item>
+      <item> sed </item>
+      <item> setfont </item>
+      <item> setkeycodes </item>
+      <item> setleds </item>
+      <item> setmetamode </item>
+      <item> setserial </item>
+      <item> sh </item>
+      <item> showkey </item>
+      <item> shred </item>
+      <item> sleep </item>
+      <item> ssed </item>
+      <item> stat </item>
+      <item> stty </item>
+      <item> su </item>
+      <item> sync </item>
+      <item> tar </item>
+      <item> tempfile </item>
+      <item> touch </item>
+      <item> troff </item>
+      <item> true </item>
+      <item> umount </item>
+      <item> uname </item>
+      <item> unicode_start </item>
+      <item> unicode_stop </item>
+      <item> unlink </item>
+      <item> unlzma </item>
+      <item> unxz </item>
+      <item> utmpdump </item>
+      <item> uuidgen </item>
+      <item> vdir </item>
+      <item> wall </item>
+      <item> wc </item>
+      <item> xz </item>
+      <item> xzcat </item>
+      <item> ypdomainname </item>
+      <item> zcat </item>
+      <item> zcmp </item>
+      <item> zdiff </item>
+      <item> zegrep </item>
+      <item> zfgrep </item>
+      <item> zforce </item>
+      <item> zgrep </item>
+      <item> zless </item>
+      <item> zmore </item>
+      <item> znew </item>
+      <item> zsh </item>
+
+      <!-- some from /usr/bin -->
+      <item> aclocal </item>
+      <item> aconnect </item>
+      <item> aplay </item>
+      <item> apm </item>
+      <item> apmsleep </item>
+      <item> apropos </item>
+      <item> ar </item>
+      <item> arecord </item>
+      <item> as </item>
+      <item> as86 </item>
+      <item> autoconf </item>
+      <item> autoheader </item>
+      <item> automake </item>
+      <item> awk </item>
+      <item> basename </item>
+      <item> bc </item>
+      <item> bison </item>
+      <item> c++ </item>
+      <item> cal </item>
+      <item> cat </item>
+      <item> cc </item>
+      <item> cdda2wav </item>
+      <item> cdparanoia </item>
+      <item> cdrdao </item>
+      <item> cd-read </item>
+      <item> cdrecord </item>
+      <item> chfn </item>
+      <item> chgrp </item>
+      <item> chmod </item>
+      <item> chown </item>
+      <item> chroot </item>
+      <item> chsh </item>
+      <item> clear </item>
+      <item> cmp </item>
+      <item> co </item>
+      <item> col </item>
+      <item> comm </item>
+      <item> cp </item>
+      <item> cpio </item>
+      <item> cpp </item>
+      <item> cut </item>
+      <item> dc </item>
+      <item> dd </item>
+      <item> df </item>
+      <item> diff </item>
+      <item> diff3 </item>
+      <item> dir </item>
+      <item> dircolors </item>
+      <item> directomatic </item>
+      <item> dirname </item>
+      <item> du </item>
+      <item> env </item>
+      <item> expr </item>
+      <item> fbset </item>
+      <item> file </item>
+      <item> find </item>
+      <item> flex </item>
+      <item> flex++ </item>
+      <item> fmt </item>
+      <item> free </item>
+      <item> ftp </item>
+      <item> funzip </item>
+      <item> fuser </item>
+      <item> g++ </item>
+      <item> gawk </item>
+      <item> gc </item>
+      <item> gcc </item>
+      <item> gdb </item>
+      <item> getent </item>
+      <item> getopt </item>
+      <item> gettext </item>
+      <item> gettextize </item>
+      <item> gimp </item>
+      <item> gimp-remote </item>
+      <item> gimptool </item>
+      <item> gmake </item>
+      <item> gs </item>
+      <item> head </item>
+      <item> hexdump </item>
+      <item> id </item>
+      <item> install </item>
+      <item> join </item>
+      <item> kill </item>
+      <item> killall </item>
+      <item> ld </item>
+      <item> ld86 </item>
+      <item> ldd </item>
+      <item> less </item>
+      <item> lex </item>
+      <item> ln </item>
+      <item> locate </item>
+      <item> lockfile </item>
+      <item> logname </item>
+      <item> lp </item>
+      <item> lpr </item>
+      <item> ls </item>
+      <item> lynx </item>
+      <item> m4 </item>
+      <item> make </item>
+      <item> man </item>
+      <item> mkdir </item>
+      <item> mknod </item>
+      <item> msgfmt </item>
+      <item> mv </item>
+      <item> namei </item>
+      <item> nasm </item>
+      <item> nawk </item>
+      <item> nice </item>
+      <item> nl </item>
+      <item> nm </item>
+      <item> nm86 </item>
+      <item> nmap </item>
+      <item> nohup </item>
+      <item> nop </item>
+      <item> od </item>
+      <item> passwd </item>
+      <item> patch </item>
+      <item> pcregrep </item>
+      <item> pcretest </item>
+      <item> perl </item>
+      <item> perror </item>
+      <item> pidof </item>
+      <item> pr </item>
+      <item> printf </item>
+      <item> procmail </item>
+      <item> prune </item>
+      <item> ps2ascii </item>
+      <item> ps2epsi </item>
+      <item> ps2frag </item>
+      <item> ps2pdf </item>
+      <item> ps2ps </item>
+      <item> psbook </item>
+      <item> psmerge </item>
+      <item> psnup </item>
+      <item> psresize </item>
+      <item> psselect </item>
+      <item> pstops </item>
+      <item> rcs </item>
+      <item> rev </item>
+      <item> rm </item>
+      <item> scp </item>
+      <item> sed </item>
+      <item> seq </item>
+      <item> setterm </item>
+      <item> shred </item>
+      <item> size </item>
+      <item> size86 </item>
+      <item> skill </item>
+      <item> slogin </item>
+      <item> snice </item>
+      <item> sort </item>
+      <item> sox </item>
+      <item> split </item>
+      <item> ssh </item>
+      <item> ssh-add </item>
+      <item> ssh-agent </item>
+      <item> ssh-keygen </item>
+      <item> ssh-keyscan </item>
+      <item> stat </item>
+      <item> strings </item>
+      <item> strip </item>
+      <item> sudo </item>
+      <item> suidperl </item>
+      <item> sum </item>
+      <item> tac </item>
+      <item> tail </item>
+      <item> tee </item>
+      <item> test </item>
+      <item> tr </item>
+      <item> uniq </item>
+      <item> unlink </item>
+      <item> unzip </item>
+      <item> updatedb </item>
+      <item> updmap </item>
+      <item> uptime </item>
+      <item> users </item>
+      <item> vmstat </item>
+      <item> w </item>
+      <item> wc </item>
+      <item> wget </item>
+      <item> whatis </item>
+      <item> whereis </item>
+      <item> which </item>
+      <item> who </item>
+      <item> whoami </item>
+      <item> write </item>
+      <item> xargs </item>
+      <item> yacc </item>
+      <item> yes </item>
+      <item> zip </item>
+      <item> zsoelim </item>
+
+      <!-- others -->
+      <item> dcop </item>
+      <item> kdialog </item>
+      <item> kfile </item>
+      <item> xhost </item>
+      <item> xmodmap </item>
+      <item> xset </item>
+    </list>
+
+
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Start">
+        <IncludeRules context="FindAll" />
+      </context>
+
+<!-- ====== The following rulessets are meant to be included ======== -->
+      <!-- FindAll tries to interpret everything -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindAll">
+        <IncludeRules context="FindComments" />
+        <IncludeRules context="FindCommands" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- FindMost tries to interpret anything except commands -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindMost">
+        <IncludeRules context="FindComments" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+
+      <!-- FindComments consumes shell comments till EOL -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindComments">
+        <DetectChar attribute="Comment" context="Comment" char="#" firstNonSpace="true"/>
+        <RegExpr attribute="Normal Text" context="Comment" String="[\s;](?=#)" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="Comment">
+        <IncludeRules context="##Alerts" />
+      </context>
+
+      <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsParen">
+        <DetectChar attribute="Comment" context="CommentParen" char="#" firstNonSpace="true"/>
+        <RegExpr attribute="Normal Text" context="CommentParen" String="[\s;](?=#)" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="CommentParen">
+        <RegExpr attribute="Comment" context="#pop" String="[^)](?=\))" />
+        <IncludeRules context="##Alerts" />
+      </context>
+
+      <!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsBackq">
+        <DetectChar attribute="Comment" context="CommentBackq" char="#" firstNonSpace="true"/>
+        <RegExpr attribute="Normal Text" context="CommentBackq" String="[\s;](?=#)" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="CommentBackq">
+        <RegExpr attribute="Comment" context="#pop" String="[^`](?=`)" />
+        <IncludeRules context="##Alerts" />
+      </context>
+
+
+      <!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindCommands">
+        <!-- start expression in double parentheses -->
+        <Detect2Chars attribute="Keyword" context="ExprDblParen" char="(" char1="(" beginRegion="expression" />
+        <!-- start expression in double brackets -->
+        <RegExpr attribute="Keyword" context="ExprDblBracket" String="\[\[&eos;" beginRegion="expression" column="0"/>
+        <RegExpr attribute="Keyword" context="ExprDblBracket" String="\s\[\[&eos;" beginRegion="expression" />
+        <!-- start expression in single brackets -->
+        <RegExpr attribute="Builtin" context="ExprBracket" String="\[&eos;" beginRegion="expression" column="0"/>
+        <RegExpr attribute="Builtin" context="ExprBracket" String="\s\[&eos;" beginRegion="expression" />
+        <!-- start a group command with { -->
+        <RegExpr attribute="Keyword" context="Group" String="\{&eos;" beginRegion="group" />
+        <!-- start a subshell -->
+        <DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell" />
+        <!-- match do and if blocks -->
+        <RegExpr attribute="Keyword" context="#stay" String="\bdo&noword;" beginRegion="do" />
+        <RegExpr attribute="Keyword" context="#stay" String="\bdone&noword;" endRegion="do" />
+        <RegExpr attribute="Keyword" context="#stay" String="\bif&eos;" beginRegion="if" />
+        <RegExpr attribute="Keyword" context="#stay" String="\bfi&noword;" endRegion="if" />
+        <!-- handle case as a special case -->
+        <RegExpr attribute="Keyword" context="Case" String="\bcase&noword;" beginRegion="case" />
+        <!-- handle command line options -->
+        <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9][A-Za-z0-9_]*" />
+        <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
+        <!-- handle variable assignments -->
+        <RegExpr attribute="Variable" context="Assign" String="\b&varname;\+?=" />
+        <RegExpr attribute="Variable" context="AssignSubscr" String="\b&varname;(?=\[.+\]\+?=)" />
+        <!-- handle functions with function keyword before keywords -->
+        <StringDetect attribute="Function" context="#stay" String=":()" />
+        <RegExpr attribute="Keyword" context="FunctionDef" String="\bfunction\b" />
+        <!-- handle keywords -->
+        <keyword attribute="Keyword" context="#stay" String="keywords" />
+        <RegExpr attribute="Builtin" context="#stay" String="\.(?=\s)" />
+        <keyword attribute="Builtin" context="#stay" String="builtins" />
+        <keyword attribute="Command" context="#stay" String="unixcommands" />
+        <!-- handle commands that have variable names as argument -->
+        <keyword attribute="Builtin" context="VarName" String="builtins_var" />
+        <!-- handle here-string -->
+        <RegExpr attribute="Redirection" context="#stay" String="\d*&lt;&lt;&lt;" />
+        <!-- handle here document -->
+        <StringDetect attribute="Redirection" context="HereDoc" String="&lt;&lt;" lookAhead="true" />
+        <!-- handle process subst -->
+        <RegExpr attribute="Redirection" context="ProcessSubst" String="[&lt;&gt;]\(" />
+        <!-- handle redirection -->
+        <RegExpr attribute="Redirection" context="#stay" String="([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)" />
+        <!-- handle &, &&, | and || -->
+        <RegExpr attribute="Control" context="#stay" String="([|&amp;])\1?" />
+        <!-- mark function definitions without function keyword -->
+        <RegExpr attribute="Function" context="#stay" String="&funcname;\s*\(\)" />
+      </context>
+
+      <!-- FindOthers contains various rules to mark different shell input -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindOthers">
+        <RegExpr attribute="Escape" context="#stay" String="\\[][;\\$`{}()|&amp;&lt;&gt;* ]" />
+        <RegExpr attribute="Keyword" context="#stay" String="\\$" />
+        <RegExpr attribute="Escape" context="#stay" String="\{(?!(\s|$))\S*\}" />
+        <RegExpr attribute="Path" context="#stay" String="&pathpart;*(?=/)" />
+        <RegExpr attribute="Path" context="#stay" String="~\w*" />
+        <RegExpr attribute="Path" context="#stay" String="/&pathpart;*(?=([\s/):;$`'&quot;]|$))" />
+        <!-- TODO: shell globs beside * and ? (in Path's) -->
+      </context>
+
+      <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindStrings">
+        <Detect2Chars attribute="Escape" context="#stay" char="\\" char1="'" />
+        <Detect2Chars attribute="Escape" context="#stay" char="\\" char1="&quot;" />
+        <DetectChar attribute="String SingleQ" context="StringSQ" char="'" />
+        <DetectChar attribute="String DoubleQ" context="StringDQ" char="&quot;" />
+        <Detect2Chars attribute="String SingleQ" context="StringEsc" char="$" char1="'" />
+        <Detect2Chars attribute="String Transl." context="StringDQ" char="$" char1="&quot;" />
+      </context>
+
+      <!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindSubstitutions">
+        <RegExpr attribute="Variable" context="Subscript" String="\$&varname;\[" />
+        <RegExpr attribute="Variable" context="#stay" String="\$&varname;" />
+        <RegExpr attribute="Variable" context="#stay" String="\$[*@#?$!_0-9-]" />
+        <RegExpr attribute="Variable" context="#stay" String="\$\{[*@#?$!_0-9-]\}" />
+        <RegExpr attribute="Variable" context="#stay" String="\$\{#&varname;(\[[*@]\])?\}" />
+        <RegExpr attribute="Variable" context="#stay" String="\$\{!&varname;(\[[*@]\]|[*@])?\}" />
+        <RegExpr attribute="Variable" context="VarBrace" String="\$\{&varname;" />
+        <RegExpr attribute="Variable" context="VarBrace" String="\$\{[*@#?$!_0-9-](?=[:#%/=?+-])" />
+        <StringDetect attribute="Variable" context="ExprDblParenSubst" String="$((" beginRegion="expression" />
+        <StringDetect attribute="Redirection" context="SubstFile" String="$(&lt;" />
+        <StringDetect attribute="Variable" context="SubstCommand" String="$(" />
+        <DetectChar attribute="Backquote" context="SubstBackq" char="`" />
+        <RegExpr attribute="Escape" context="#stay" String="\\[`$\\]" />
+      </context>
+
+      <!-- FindTests finds operators valid in tests -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindTests">
+        <RegExpr attribute="Expression" context="#stay" String="-[abcdefghkprstuwxOGLSNozn](?=\s)"/>
+        <RegExpr attribute="Expression" context="#stay" String="-([no]t|ef)(?=\s)"/>
+        <RegExpr attribute="Expression" context="#stay" String="([!=]=?|[&gt;&lt;])(?=\s)"/>
+        <RegExpr attribute="Expression" context="#stay" String="-(eq|ne|[gl][te])(?=\s)"/>
+      </context>
+
+
+<!-- ====== These are the contexts that can be branched to ======= -->
+
+      <!-- ExprDblParen consumes an expression started in command mode till )) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
+        <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression" />
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
+        <Detect2Chars attribute="Variable" context="#pop" char=")" char1=")" endRegion="expression" />
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- ExprSubParen consumes an expression till ) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubParen">
+        <DetectChar attribute="Normal Text" context="#pop" char=")" />
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- ExprBracket consumes an expression till ] -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket">
+        <RegExpr attribute="Builtin" context="#pop" String="\s\](?=($|[\s;|&amp;]))" endRegion="expression" />
+        <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindTests" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- ExprDblBracket consumes an expression till ]] -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket">
+        <RegExpr attribute="Keyword" context="#pop" String="\s\]\](?=($|[\s;|&amp;]))" endRegion="expression" />
+        <RegExpr attribute="Keyword" context="#pop" String="\]\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
+        <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+        <IncludeRules context="FindTests" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- Group consumes shell input till } -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="Group">
+        <DetectChar attribute="Keyword" context="#pop" char="}" endRegion="group" />
+        <IncludeRules context="FindAll" />
+      </context>
+
+      <!-- SubShell consumes shell input till ) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubShell">
+        <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell" />
+        <IncludeRules context="FindAll" />
+      </context>
+
+      <!-- Assign consumes an expression till EOL or whitespace -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthrough="true" fallthroughContext="#pop">
+        <DetectChar attribute="Variable" context="AssignArray" char="(" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+        <RegExpr attribute="Normal Text" context="#stay" String="[\w:,+_./-]" />
+      </context>
+
+      <!-- AssignArray consumes everything till ), marking assignments -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="AssignArray">
+        <DetectChar attribute="Variable" context="#pop" char=")" />
+        <DetectChar attribute="Variable" context="Subscript" char="[" />
+        <DetectChar attribute="Variable" context="Assign" char="=" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- AssignSubscr first expects a [ then parses subscript and continues with '=value' -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="AssignSubscr" fallthrough="true" fallthroughContext="#pop">
+        <DetectChar attribute="Variable" context="Subscript" char="[" />
+        <Detect2Chars attribute="Variable" context="Assign" char="+" char1="=" />
+        <DetectChar attribute="Variable" context="Assign" char="=" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- Subscript consumes anything till ], marks as Variable -->
+      <context attribute="Variable" lineEndContext="#stay" name="Subscript">
+        <DetectChar attribute="Variable" context="#pop" char="]" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- FunctionDef consumes a name, possibly with (), marks as Function -->
+      <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="Function" context="#pop" String="\s+&funcname;(\s*\(\))?" />
+      </context>
+
+      <!-- VarName consumes spare variable names and assignments -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="VarName" fallthrough="true" fallthroughContext="#pop">
+        <!-- handle command line options -->
+        <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9]+" />
+        <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
+        <RegExpr attribute="Variable" context="#stay" String="\b&varname;" />
+        <DetectChar attribute="Variable" context="Subscript" char="[" />
+        <DetectChar attribute="Variable" context="Assign" char="=" />
+        <IncludeRules context="FindMost" />
+        <!-- stay here in spaces and other safe characters -->
+        <RegExpr attribute="Normal Text" context="#stay" String="[^]})|;`&amp;&gt;&lt;]" />
+      </context>
+
+      <!-- ProcessSubst handles <(command) and >(command) -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst">
+        <DetectChar attribute="Redirection" context="#pop" char=")" />
+        <IncludeRules context="FindCommentsParen" />
+        <IncludeRules context="FindCommands" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- StringSQ consumes anything till ' -->
+      <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ">
+        <DetectChar attribute="String SingleQ" context="#pop" char="'" />
+      </context>
+
+      <!-- StringDQ consumes anything till ", substitutes vars and expressions -->
+      <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ">
+        <DetectChar attribute="String DoubleQ" context="#pop" char="&quot;" />
+        <RegExpr attribute="String Escape" context="#stay" String="\\[`&quot;\\$\n]" />
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+
+      <!-- StringEsc eats till ', but escaping many characters -->
+      <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
+        <DetectChar attribute="String SingleQ" context="#pop" char="'" />
+        <RegExpr attribute="String Escape" context="#stay" String="\\[abefnrtv\\']" />
+        <RegExpr attribute="String Escape" context="#stay" String="\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)" />
+      </context>
+
+      <!-- VarBrace is called as soon as ${xxx is encoutered -->
+      <context attribute="Error" lineEndContext="#stay" name="VarBrace">
+        <DetectChar attribute="Variable" context="#pop" char="}" />
+        <DetectChar attribute="Variable" context="Subscript" char="[" />
+        <RegExpr attribute="Variable" context="VarAlt" String="(:?[-=?+]|##?|%%?)" />
+        <RegExpr attribute="Variable" context="VarSubst" String="//?" />
+        <DetectChar attribute="Variable" context="VarSub" char=":" />
+      </context>
+
+      <!-- VarAlt is to handle default/alternate/etc values of variables -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarAlt">
+        <DetectChar attribute="Variable" context="#pop#pop" char="}" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+
+      <!-- VarSubst is to handle substitutions on variables -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarSubst">
+        <DetectChar attribute="Variable" context="#pop#pop" char="}" />
+        <DetectChar attribute="Variable" context="VarSubst2" char="/" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="VarSubst2">
+        <DetectChar attribute="Variable" context="#pop#pop#pop" char="}" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+
+      <!-- VarSub is to substrings of variables -->
+      <context attribute="Error" lineEndContext="#stay" name="VarSub">
+        <DetectChar attribute="Variable" context="VarSub2" char=":" />
+        <DetectChar attribute="Variable" context="#pop#pop" char="}" />
+        <RegExpr attribute="Variable" context="#stay" String="&varname;" />
+        <RegExpr attribute="Variable" context="#stay" String="[0-9]+(?=[:}])" />
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+      <context attribute="Error" lineEndContext="#stay" name="VarSub2">
+        <DetectChar attribute="Variable" context="#pop#pop#pop" char="}" />
+        <RegExpr attribute="Variable" context="#stay" String="&varname;" />
+        <RegExpr attribute="Variable" context="#stay" String="[0-9](?=[:}])" />
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+
+
+      <!-- SubstFile is called after a <( or >( is encoutered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubstFile">
+        <DetectChar attribute="Redirection" context="#pop" char=")" />
+        <IncludeRules context="FindCommentsParen" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- SubstCommand is called after a $( is encountered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand">
+        <DetectChar attribute="Variable" context="#pop" char=")" />
+        <IncludeRules context="FindCommentsParen" />
+        <IncludeRules context="FindCommands" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- SubstBackq is called when a backquote is encountered -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="SubstBackq">
+        <DetectChar attribute="Backquote" context="#pop" char="`" />
+        <IncludeRules context="FindCommentsBackq" />
+        <IncludeRules context="FindCommands" />
+        <IncludeRules context="FindStrings" />
+        <IncludeRules context="FindSubstitutions" />
+        <IncludeRules context="FindOthers" />
+      </context>
+
+      <!-- Case is called after the case keyword is encoutered. We handle this because of
+           the lonely closing parentheses that would otherwise disturb the expr matching -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="Case">
+        <RegExpr attribute="Keyword" context="CaseIn" String="\sin\b" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- CaseIn is called when the construct 'case ... in' has been found. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="CaseIn">
+        <RegExpr attribute="Keyword" context="#pop#pop" String="\besac(?=$|[\s;)])" endRegion="case" />
+        <DetectChar attribute="Keyword" context="CaseExpr" char=")" beginRegion="caseexpr" />
+        <AnyChar attribute="Keyword" context="#stay" String="(|" />
+        <IncludeRules context="FindMost" />
+      </context>
+
+      <!-- CaseExpr eats shell input till ;; -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr">
+        <Detect2Chars attribute="Keyword" context="#pop" char=";" char1=";" endRegion="caseexpr" />
+        <RegExpr attribute="Keyword" context="#pop" String="esac(?=$|[\s;)])" lookAhead="true" firstNonSpace="true" endRegion="caseexpr"/>
+        <IncludeRules context="FindAll" />
+      </context>
+
+      <!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDoc">
+        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*&quot;(&word;)&quot;)" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*'(&word;)')" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocIQ"  String="(&lt;&lt;-\s*\\(&word;))" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocINQ" String="(&lt;&lt;-\s*(&word;))" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*&quot;(&word;)&quot;)" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*'(&word;)')" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocQ"   String="(&lt;&lt;\s*\\(&word;))" lookAhead="true" />
+        <RegExpr attribute="Redirection" context="HereDocNQ"  String="(&lt;&lt;\s*(&word;))" lookAhead="true" />
+        <StringDetect attribute="Redirection" context="#pop"  String="&lt;&lt;" /><!-- always met -->
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder">
+        <IncludeRules context="FindAll" />
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocQ" dynamic="true">
+        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^%2\b" dynamic="true" column="0"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocNQ" dynamic="true">
+        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^%2\b" dynamic="true" column="0"/>
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocIQ" dynamic="true">
+        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2\b" dynamic="true" column="0"/>
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#stay" name="HereDocINQ" dynamic="true">
+        <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+        <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2\b" dynamic="true" column="0"/>
+        <IncludeRules context="FindSubstitutions" />
+      </context>
+
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal Text"	defStyleNum="dsNormal" />
+      <itemData name="Comment"		defStyleNum="dsComment" />
+      <itemData name="Keyword" 		defStyleNum="dsKeyword" />
+      <itemData name="Control" 		defStyleNum="dsKeyword" />
+      <itemData name="Builtin" 		defStyleNum="dsKeyword" color="#808" />
+      <itemData name="Command" 		defStyleNum="dsKeyword" color="#c0c" />
+      <itemData name="Redirection" 	defStyleNum="dsKeyword" color="#238" />
+      <itemData name="Escape" 		defStyleNum="dsDataType" />
+      <itemData name="String SingleQ" 	defStyleNum="dsString" />
+      <itemData name="String DoubleQ" 	defStyleNum="dsString" />
+      <itemData name="Backquote" 	defStyleNum="dsKeyword" />
+      <itemData name="String Transl." 	defStyleNum="dsString" />
+      <itemData name="String Escape" 	defStyleNum="dsDataType" />
+      <itemData name="Variable" 	defStyleNum="dsOthers" />
+      <itemData name="Expression" 	defStyleNum="dsOthers" />
+      <itemData name="Function" 	defStyleNum="dsFunction" />
+      <itemData name="Path" 		defStyleNum="dsNormal" />
+      <itemData name="Option" 		defStyleNum="dsNormal" />
+      <itemData name="Error"            defStyleNum="dsError" />
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="#"/>
+    </comments>
+    <keywords casesensitive="1" weakDeliminator="^%#[]$._{}:-/" additionalDeliminator="`"/>
+  </general>
+</language>
