diff --git a/ParseSyntaxFiles.hs b/ParseSyntaxFiles.hs
--- a/ParseSyntaxFiles.hs
+++ b/ParseSyntaxFiles.hs
@@ -35,7 +35,6 @@
 import System.FilePath
 import Text.PrettyPrint
 import Text.Highlighting.Kate.Definitions
-import Text.Highlighting.Kate.Common (capitalize)
 
 data SyntaxDefinition =
   SyntaxDefinition { synLanguage      :: String
@@ -140,9 +139,15 @@
            \            -> String                        -- ^ Source code to highlight\n\
            \            -> Either String [SourceLine]    -- ^ Either error message or result\n\
            \highlightAs lang =\n\
-           \  case (map toLower lang) of\n" ++
+           \  let lang'  = map toLower lang\n\
+           \      lang'' = if lang' `elem` map (map toLower) languages\n\
+           \                  then lang'\n\
+           \                  else case languagesByExtension lang' of\n\
+           \                            [l]  -> map toLower l  -- go by extension if unambiguous\n\
+           \                            _    -> lang'\n\
+           \  in  case lang'' of\n" ++
            cases ++
-           "        _ -> (\\_ -> Left (\"Unknown language ++ \" ++ lang))\n"
+           "        _ -> (\\_ -> Left (\"Unknown language: \" ++ lang))\n"
 
 processOneFile :: FilePath -> IO ()
 processOneFile src = do
@@ -244,12 +249,6 @@
                                       endLineParser, withAttr, styles, parseExpressionInternal, 
                                       defaultAttributes {- , lineBeginContexts -}] ++ contexts ++ [contextCatchAll]
 
-mkIdentifier :: String -> String
-mkIdentifier "" = ""
-mkIdentifier ('-':x:xs) = toUpper x : mkIdentifier xs
-mkIdentifier ('-':xs) = mkIdentifier xs
-mkIdentifier (x:xs) = x : mkIdentifier xs
-
 mkAlternatives :: [Doc] -> Doc
 mkAlternatives docs = 
   let contents = vcat $ intersperse (text "<|>") docs
@@ -343,6 +342,10 @@
     "Javadoc" -> "Javadoc"
     "JavaScript" -> "Javascript"
     x -> x
+
+capitalize :: String -> String
+capitalize (x:xs) = toUpper x : xs
+capitalize [] = []
 
 nameFromPath :: FilePath -> String
 nameFromPath = concat . map capitalize . words . 
diff --git a/README b/README
--- a/README
+++ b/README
@@ -7,8 +7,9 @@
 D, Djangotemplate, Doxygen, Dtd, Eiffel, Erlang, Fortran, Haskell,
 Html, Java, Javadoc, Javascript, Json, Latex, Lex, LiterateHaskell, Lua,
 Makefile, Matlab, Mediawiki, Modula3, Nasm, Objectivec, Ocaml, Pascal,
-Perl, Php, Postscript, Prolog, Python, Rhtml, Ruby, Scala, Scheme, Sgml,
-Sql, SqlMysql, SqlPostgresql, Tcl, Texinfo, Xml, Xslt, Yacc
+Perl, Php, Postscript, Prolog, Python, RelaxNG compact, Rhtml, Ruby,
+Scala, Scheme, Sgml, Sql, SqlMysql, SqlPostgresql, Tcl, Texinfo, Xml,
+Xslt, Yacc
 
 To install:
 
diff --git a/Text/Highlighting/Kate.hs b/Text/Highlighting/Kate.hs
--- a/Text/Highlighting/Kate.hs
+++ b/Text/Highlighting/Kate.hs
@@ -35,4 +35,4 @@
 import Text.Highlighting.Kate.Syntax ( highlightAs, languages, languagesByExtension )
 import Text.Highlighting.Kate.Definitions ( SourceLine, LabeledSource )
 
-highlightingKateVersion = "0.2.4"
+highlightingKateVersion = "0.2.5"
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
@@ -22,10 +22,6 @@
 (>>~) :: (Monad m) => m a -> m b -> m a
 a >>~ b = a >>= \x -> b >> return x
 
-capitalize :: [Char] -> [Char]
-capitalize [] = []
-capitalize (a:as) = toUpper a : as
-
 normalizeHighlighting :: [LabeledSource] -> [LabeledSource]
 normalizeHighlighting [] = []
 normalizeHighlighting ((_,""):xs) = normalizeHighlighting xs
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
@@ -44,6 +44,7 @@
 import qualified Text.Highlighting.Kate.Syntax.Postscript as Postscript
 import qualified Text.Highlighting.Kate.Syntax.Prolog as Prolog
 import qualified Text.Highlighting.Kate.Syntax.Python as Python
+import qualified Text.Highlighting.Kate.Syntax.Relaxngcompact as Relaxngcompact
 import qualified Text.Highlighting.Kate.Syntax.Rhtml as Rhtml
 import qualified Text.Highlighting.Kate.Syntax.Ruby as Ruby
 import qualified Text.Highlighting.Kate.Syntax.Scala as Scala
@@ -60,11 +61,11 @@
 
 -- | List of supported languages.
 languages :: [String]
-languages = ["Ada","Alert","Asp","Awk","Bash","Bibtex","C","Cmake","Coldfusion","Commonlisp","Cpp","Css","D","Djangotemplate","Doxygen","Dtd","Eiffel","Erlang","Fortran","Haskell","Html","Java","Javadoc","Javascript","Json","Latex","Lex","LiterateHaskell","Lua","Makefile","Matlab","Mediawiki","Modula3","Nasm","Objectivec","Ocaml","Pascal","Perl","Php","Postscript","Prolog","Python","Rhtml","Ruby","Scala","Scheme","Sgml","Sql","SqlMysql","SqlPostgresql","Tcl","Texinfo","Xml","Xslt","Yacc"]
+languages = ["Ada","Alert","Asp","Awk","Bash","Bibtex","C","Cmake","Coldfusion","Commonlisp","Cpp","Css","D","Djangotemplate","Doxygen","Dtd","Eiffel","Erlang","Fortran","Haskell","Html","Java","Javadoc","Javascript","Json","Latex","Lex","LiterateHaskell","Lua","Makefile","Matlab","Mediawiki","Modula3","Nasm","Objectivec","Ocaml","Pascal","Perl","Php","Postscript","Prolog","Python","Relaxngcompact","Rhtml","Ruby","Scala","Scheme","Sgml","Sql","SqlMysql","SqlPostgresql","Tcl","Texinfo","Xml","Xslt","Yacc"]
 
 -- | List of language extensions.
 languageExtensions :: [(String, String)]
-languageExtensions = [("Ada", Ada.syntaxExtensions), ("Alert", Alert.syntaxExtensions), ("Asp", Asp.syntaxExtensions), ("Awk", Awk.syntaxExtensions), ("Bash", Bash.syntaxExtensions), ("Bibtex", Bibtex.syntaxExtensions), ("C", C.syntaxExtensions), ("Cmake", Cmake.syntaxExtensions), ("Coldfusion", Coldfusion.syntaxExtensions), ("Commonlisp", Commonlisp.syntaxExtensions), ("Cpp", Cpp.syntaxExtensions), ("Css", Css.syntaxExtensions), ("D", D.syntaxExtensions), ("Djangotemplate", Djangotemplate.syntaxExtensions), ("Doxygen", Doxygen.syntaxExtensions), ("Dtd", Dtd.syntaxExtensions), ("Eiffel", Eiffel.syntaxExtensions), ("Erlang", Erlang.syntaxExtensions), ("Fortran", Fortran.syntaxExtensions), ("Haskell", Haskell.syntaxExtensions), ("Html", Html.syntaxExtensions), ("Java", Java.syntaxExtensions), ("Javadoc", Javadoc.syntaxExtensions), ("Javascript", Javascript.syntaxExtensions), ("Json", Json.syntaxExtensions), ("Latex", Latex.syntaxExtensions), ("Lex", Lex.syntaxExtensions), ("LiterateHaskell", LiterateHaskell.syntaxExtensions), ("Lua", Lua.syntaxExtensions), ("Makefile", Makefile.syntaxExtensions), ("Matlab", Matlab.syntaxExtensions), ("Mediawiki", Mediawiki.syntaxExtensions), ("Modula3", Modula3.syntaxExtensions), ("Nasm", Nasm.syntaxExtensions), ("Objectivec", Objectivec.syntaxExtensions), ("Ocaml", Ocaml.syntaxExtensions), ("Pascal", Pascal.syntaxExtensions), ("Perl", Perl.syntaxExtensions), ("Php", Php.syntaxExtensions), ("Postscript", Postscript.syntaxExtensions), ("Prolog", Prolog.syntaxExtensions), ("Python", Python.syntaxExtensions), ("Rhtml", Rhtml.syntaxExtensions), ("Ruby", Ruby.syntaxExtensions), ("Scala", Scala.syntaxExtensions), ("Scheme", Scheme.syntaxExtensions), ("Sgml", Sgml.syntaxExtensions), ("Sql", Sql.syntaxExtensions), ("SqlMysql", SqlMysql.syntaxExtensions), ("SqlPostgresql", SqlPostgresql.syntaxExtensions), ("Tcl", Tcl.syntaxExtensions), ("Texinfo", Texinfo.syntaxExtensions), ("Xml", Xml.syntaxExtensions), ("Xslt", Xslt.syntaxExtensions), ("Yacc", Yacc.syntaxExtensions)]
+languageExtensions = [("Ada", Ada.syntaxExtensions), ("Alert", Alert.syntaxExtensions), ("Asp", Asp.syntaxExtensions), ("Awk", Awk.syntaxExtensions), ("Bash", Bash.syntaxExtensions), ("Bibtex", Bibtex.syntaxExtensions), ("C", C.syntaxExtensions), ("Cmake", Cmake.syntaxExtensions), ("Coldfusion", Coldfusion.syntaxExtensions), ("Commonlisp", Commonlisp.syntaxExtensions), ("Cpp", Cpp.syntaxExtensions), ("Css", Css.syntaxExtensions), ("D", D.syntaxExtensions), ("Djangotemplate", Djangotemplate.syntaxExtensions), ("Doxygen", Doxygen.syntaxExtensions), ("Dtd", Dtd.syntaxExtensions), ("Eiffel", Eiffel.syntaxExtensions), ("Erlang", Erlang.syntaxExtensions), ("Fortran", Fortran.syntaxExtensions), ("Haskell", Haskell.syntaxExtensions), ("Html", Html.syntaxExtensions), ("Java", Java.syntaxExtensions), ("Javadoc", Javadoc.syntaxExtensions), ("Javascript", Javascript.syntaxExtensions), ("Json", Json.syntaxExtensions), ("Latex", Latex.syntaxExtensions), ("Lex", Lex.syntaxExtensions), ("LiterateHaskell", LiterateHaskell.syntaxExtensions), ("Lua", Lua.syntaxExtensions), ("Makefile", Makefile.syntaxExtensions), ("Matlab", Matlab.syntaxExtensions), ("Mediawiki", Mediawiki.syntaxExtensions), ("Modula3", Modula3.syntaxExtensions), ("Nasm", Nasm.syntaxExtensions), ("Objectivec", Objectivec.syntaxExtensions), ("Ocaml", Ocaml.syntaxExtensions), ("Pascal", Pascal.syntaxExtensions), ("Perl", Perl.syntaxExtensions), ("Php", Php.syntaxExtensions), ("Postscript", Postscript.syntaxExtensions), ("Prolog", Prolog.syntaxExtensions), ("Python", Python.syntaxExtensions), ("Relaxngcompact", Relaxngcompact.syntaxExtensions), ("Rhtml", Rhtml.syntaxExtensions), ("Ruby", Ruby.syntaxExtensions), ("Scala", Scala.syntaxExtensions), ("Scheme", Scheme.syntaxExtensions), ("Sgml", Sgml.syntaxExtensions), ("Sql", Sql.syntaxExtensions), ("SqlMysql", SqlMysql.syntaxExtensions), ("SqlPostgresql", SqlPostgresql.syntaxExtensions), ("Tcl", Tcl.syntaxExtensions), ("Texinfo", Texinfo.syntaxExtensions), ("Xml", Xml.syntaxExtensions), ("Xslt", Xslt.syntaxExtensions), ("Yacc", Yacc.syntaxExtensions)]
 
 -- | Returns a list of languages appropriate for the given file extension.
 languagesByExtension :: String -> [String]
@@ -85,7 +86,13 @@
             -> String                        -- ^ Source code to highlight
             -> Either String [SourceLine]    -- ^ Either error message or result
 highlightAs lang =
-  case (map toLower lang) of
+  let lang'  = map toLower lang
+      lang'' = if lang' `elem` map (map toLower) languages
+                  then lang'
+                  else case languagesByExtension lang' of
+                            [l]  -> map toLower l  -- go by extension if unambiguous
+                            _    -> lang'
+  in  case lang'' of
         "ada" -> Ada.highlight
         "alert" -> Alert.highlight
         "asp" -> Asp.highlight
@@ -128,6 +135,7 @@
         "postscript" -> Postscript.highlight
         "prolog" -> Prolog.highlight
         "python" -> Python.highlight
+        "relaxngcompact" -> Relaxngcompact.highlight
         "rhtml" -> Rhtml.highlight
         "ruby" -> Ruby.highlight
         "scala" -> Scala.highlight
@@ -141,4 +149,4 @@
         "xml" -> Xml.highlight
         "xslt" -> Xslt.highlight
         "yacc" -> Yacc.highlight
-        _ -> (\_ -> Left ("Unknown language ++ " ++ lang))
+        _ -> (\_ -> Left ("Unknown language: " ++ lang))
diff --git a/Text/Highlighting/Kate/Syntax/Relaxngcompact.hs b/Text/Highlighting/Kate/Syntax/Relaxngcompact.hs
new file mode 100644
--- /dev/null
+++ b/Text/Highlighting/Kate/Syntax/Relaxngcompact.hs
@@ -0,0 +1,108 @@
+{- This module was generated from data in the Kate syntax highlighting file relaxngcompact.xml, version 0.2,
+   by  Rintze Zelle -}
+
+module Text.Highlighting.Kate.Syntax.Relaxngcompact ( highlight, parseExpression, syntaxName, syntaxExtensions ) where
+import Text.Highlighting.Kate.Definitions
+import Text.Highlighting.Kate.Common
+import Text.ParserCombinators.Parsec
+import Data.List (nub)
+import Data.Map (fromList)
+import Data.Maybe (fromMaybe)
+
+-- | Full name of language.
+syntaxName :: String
+syntaxName = "RelaxNG-Compact"
+
+-- | Filename extensions for this language.
+syntaxExtensions :: String
+syntaxExtensions = "*.rnc"
+
+-- | Highlight source code using this syntax definition.
+highlight :: String -> Either String [SourceLine]
+highlight input =
+  case runParser parseSource startingState "source" input of
+    Left err     -> Left $ show err
+    Right result -> Right result
+
+-- | Parse an expression using appropriate local context.
+parseExpression :: GenParser Char SyntaxState LabeledSource
+parseExpression = do
+  st <- getState
+  let oldLang = synStLanguage st
+  setState $ st { synStLanguage = "RelaxNG-Compact" }
+  context <- currentContext <|> (pushContext "Normal Text" >> currentContext)
+  result <- parseRules context
+  updateState $ \st -> st { synStLanguage = oldLang }
+  return result
+
+parseSource = do 
+  lineContents <- lookAhead wholeLine
+  updateState $ \st -> st { synStCurrentLine = lineContents }
+  result <- manyTill parseSourceLine eof
+  return $ map normalizeHighlighting result
+
+startingState = SyntaxState {synStContexts = fromList [("RelaxNG-Compact",["Normal Text"])], synStLanguage = "RelaxNG-Compact", synStCurrentLine = "", synStCharsParsedInLine = 0, synStCaseSensitive = True, synStKeywordCaseSensitive = True, synStCaptures = []}
+
+parseSourceLine = manyTill parseExpressionInternal pEndLine
+
+pEndLine = do
+  newline <|> (eof >> return '\n')
+  context <- currentContext
+  case context of
+    "Normal Text" -> return ()
+    "Comments" -> (popContext >> return ())
+    "String" -> return ()
+    "Node Names" -> (popContext >> return ())
+    "Definitions" -> (popContext >> return ())
+    _ -> return ()
+  lineContents <- lookAhead wholeLine
+  updateState $ \st -> st { synStCurrentLine = lineContents, synStCharsParsedInLine = 0 }
+
+withAttribute attr txt = do
+  if null txt
+     then fail "Parser matched no text"
+     else return ()
+  let style = fromMaybe "" $ lookup attr styles
+  st <- getState
+  let oldCharsParsed = synStCharsParsedInLine st
+  updateState $ \st -> st { synStCharsParsedInLine = oldCharsParsed + length txt } 
+  return (nub [style, attr], txt)
+
+styles = [("Normal Text","Normal"),("Comments","Comment"),("String","String"),("Keywords","Keyword"),("Datatypes","DataType"),("Node Names","Others"),("Definitions","Function")]
+
+parseExpressionInternal = do
+  context <- currentContext
+  parseRules context <|> (pDefault >>= withAttribute (fromMaybe "" $ lookup context defaultAttributes))
+
+defaultAttributes = [("Normal Text","Normal Text"),("Comments","Comments"),("String","String"),("Node Names","Node Names"),("Definitions","Definitions")]
+
+parseRules "Normal Text" = 
+  do (attr, result) <- (((pFirstNonSpace >> pDetectChar False '#' >>= withAttribute "Comments") >>~ pushContext "Comments")
+                        <|>
+                        ((pDetectChar False '"' >>= withAttribute "String") >>~ pushContext "String")
+                        <|>
+                        ((pKeyword " \n\t.()!+,<=>%&*/;?[]^{|}~\\" ["default","datatypes","div","empty","external","grammar","include","inherit","list","mixed","namespace","notAllowed","parent","start","token"] >>= withAttribute "Keywords"))
+                        <|>
+                        ((pKeyword " \n\t.()!+,<=>%&*/;?[]^{|}~\\" ["attribute","element"] >>= withAttribute "Keywords") >>~ pushContext "Node Names")
+                        <|>
+                        ((pKeyword " \n\t.()!+,<=>%&*/;?[]^{|}~\\" ["string","text","xsd:anyURI","xsd:base64Binary","xsd:boolean","xsd:byte","xsd:date","xsd:dateTime","xsd:decimal","xsd:double","xsd:duration","xsd:ENTITIES","xsd:ENTITY","xsd:float","xsd:gDay","xsd:gMonth","xsd:gMonthDay","xsd:gYear","xsd:gYearMonth","xsd:hexBinary","xsd:ID","xsd:IDREF","xsd:IDREFS","xsd:int","xsd:integer","xsd:language","xsd:long","xsd:Name","xsd:NCName","xsd:negativeInteger","xsd:NMTOKEN","xsd:NMTOKENS","xsd:nonNegativeInteger","xsd:nonPositiveInteger","xsd:normalizedString","xsd:NOTATION","xsd:positiveInteger","xsd:QName","xsd:short","xsd:string","xsd:time","xsd:token","xsd:unsignedByte","xsd:unsignedInt","xsd:unsignedLong","xsd:unsignedShort"] >>= withAttribute "Datatypes"))
+                        <|>
+                        ((lookAhead (pRegExpr (compileRegex "[\\w\\.-]+[\\s]+=")) >> return ([],"") ) >>~ pushContext "Definitions"))
+     return (attr, result)
+
+parseRules "Comments" = 
+  pzero
+
+parseRules "String" = 
+  do (attr, result) <- ((pDetectChar False '"' >>= withAttribute "String") >>~ (popContext >> return ()))
+     return (attr, result)
+
+parseRules "Node Names" = 
+  do (attr, result) <- ((lookAhead (pDetectChar False '{') >> return ([],"") ) >>~ (popContext >> return ()))
+     return (attr, result)
+
+parseRules "Definitions" = 
+  do (attr, result) <- ((lookAhead (pDetectChar False '=') >> return ([],"") ) >>~ (popContext >> popContext >> return ()))
+     return (attr, result)
+
+parseRules x = fail $ "Unknown context" ++ x
diff --git a/highlighting-kate.cabal b/highlighting-kate.cabal
--- a/highlighting-kate.cabal
+++ b/highlighting-kate.cabal
@@ -1,28 +1,18 @@
 Name:                highlighting-kate
-Version:             0.2.4
+Version:             0.2.5
 Cabal-Version:       >= 1.2
 Build-Type:          Simple
 Category:            Text
 Synopsis:            Syntax highlighting
 Description:         highlighting-kate is a syntax highlighting library
-                     with support for over 50 languages. The syntax
+                     with support for over fifty languages. The syntax
                      parsers are automatically generated from Kate
                      syntax descriptions (<http://kate-editor.org/>),
                      so any syntax supported by Kate can be added.
                      An (optional) command-line program is provided, along
                      with a utility for generating new parsers from Kate
                      XML syntax descriptions.
-                     .
-                     Currently the following languages are supported:
-                     Ada, Asp, Awk, Bash, Bibtex, C, Cmake, Coldfusion,
-                     Commonlisp, Cpp, Css, D, Djangotemplate, Doxygen,
-                     Dtd, Eiffel, Erlang, Fortran, Haskell, Html,
-                     Java, Javadoc, Javascript, Json, Latex, Lex,
-                     LiterateHaskell, Lua, Makefile, Matlab, Mediawiki,
-                     Modula3, Nasm, Objectivec, Ocaml, Pascal, Perl,
-                     Php, Postscript, Prolog, Python, Rhtml, Ruby,
-                     Scala, Scheme, Sgml, Sql, SqlMysql, SqlPostgresql,
-                     Tcl, Texinfo, Xml, Xslt, Yacc.
+
 License:             GPL
 License-file:        LICENSE
 Author:              John MacFarlane
@@ -84,6 +74,7 @@
                      xml/postscript.xml
                      xml/prolog.xml
                      xml/python.xml
+                     xml/relaxngcompact.xml
                      xml/rhtml.xml
                      xml/ruby.xml
                      xml/scala.xml
@@ -106,7 +97,7 @@
 
 Library
   if flag(splitBase)
-    Build-Depends:   base >= 3, containers
+    Build-Depends:   base >= 3 && < 5, containers
   else
     Build-Depends:   base < 3
   Build-Depends:     parsec < 3, pcre-light, xhtml
@@ -156,6 +147,7 @@
                      Text.Highlighting.Kate.Syntax.Postscript
                      Text.Highlighting.Kate.Syntax.Prolog
                      Text.Highlighting.Kate.Syntax.Python
+                     Text.Highlighting.Kate.Syntax.Relaxngcompact
                      Text.Highlighting.Kate.Syntax.Rhtml
                      Text.Highlighting.Kate.Syntax.Ruby
                      Text.Highlighting.Kate.Syntax.Scala
diff --git a/xml/relaxngcompact.xml b/xml/relaxngcompact.xml
new file mode 100644
--- /dev/null
+++ b/xml/relaxngcompact.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="RelaxNG-Compact" version="0.2" kateversion="2.4" section="Markup" extensions="*.rnc" casesensitive="1" author="Rintze Zelle" license="LGPL">
+  <highlighting>
+    <list name="Keywords">
+      <item> default </item>
+      <item> datatypes </item>
+      <item> div </item>
+      <item> empty </item>
+      <item> external </item>
+      <item> grammar </item>
+      <item> include </item>
+      <item> inherit </item>
+      <item> list </item>
+      <item> mixed </item>
+      <item> namespace </item>
+      <item> notAllowed </item>
+      <item> parent </item>
+      <item> start </item>
+      <item> token </item>      
+    </list>
+    <list name="Node Names">
+      <item> attribute </item>
+      <item> element </item>    
+    </list>    
+    <list name="Datatypes">
+      <item> string </item>
+      <item> text </item>    
+      <item> xsd:anyURI </item>
+      <item> xsd:base64Binary </item>
+      <item> xsd:boolean </item>
+      <item> xsd:byte </item>
+      <item> xsd:date </item>
+      <item> xsd:dateTime </item>
+      <item> xsd:decimal </item>
+      <item> xsd:double </item>
+      <item> xsd:duration </item>
+      <item> xsd:ENTITIES </item>
+      <item> xsd:ENTITY </item>
+      <item> xsd:float </item>
+      <item> xsd:gDay </item>
+      <item> xsd:gMonth </item>
+      <item> xsd:gMonthDay </item>
+      <item> xsd:gYear </item>
+      <item> xsd:gYearMonth </item>
+      <item> xsd:hexBinary </item>
+      <item> xsd:ID </item>
+      <item> xsd:IDREF </item>
+      <item> xsd:IDREFS </item>
+      <item> xsd:int </item>
+      <item> xsd:integer </item>
+      <item> xsd:language </item>
+      <item> xsd:long </item>
+      <item> xsd:Name </item>
+      <item> xsd:NCName </item>
+      <item> xsd:negativeInteger </item>
+      <item> xsd:NMTOKEN </item>
+      <item> xsd:NMTOKENS </item>
+      <item> xsd:nonNegativeInteger </item>
+      <item> xsd:nonPositiveInteger </item>
+      <item> xsd:normalizedString </item>
+      <item> xsd:NOTATION </item>
+      <item> xsd:positiveInteger </item>
+      <item> xsd:QName </item>
+      <item> xsd:short </item>
+      <item> xsd:string </item> 
+      <item> xsd:time </item>
+      <item> xsd:token </item>
+      <item> xsd:unsignedByte </item>
+      <item> xsd:unsignedInt </item>
+      <item> xsd:unsignedLong </item>
+      <item> xsd:unsignedShort </item>
+    </list>
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Normal Text" >
+        <DetectChar attribute="Comments" char="#" firstNonSpace="true" context="Comments"/>
+	<DetectChar attribute="String" char="&quot;" context="String" />
+	<keyword attribute="Keywords" context="#stay" String="Keywords" />
+	<keyword attribute="Keywords" context="Node Names" String="Node Names" />
+	<keyword attribute="Datatypes" context="#stay" String="Datatypes" />
+	<RegExpr attribute="Definitions" context="Definitions" String="[\w\.-]+[\s]+=" lookAhead="true" />
+      </context>
+      <context attribute="Comments" lineEndContext="#pop" name="Comments" >
+      </context>
+      <context attribute="String" lineEndContext="#stay" name="String" >
+        <DetectChar attribute="String" context="#pop" char="&quot;" />
+      </context>
+      <context attribute="Node Names" lineEndContext="#pop" name="Node Names" >
+        <DetectChar attribute="Node Names" context="#pop" char="{" lookAhead="true" />
+      </context>
+      <context attribute="Definitions" lineEndContext="#pop" name="Definitions" >
+        <DetectChar attribute="Definitions" context="#pop#pop" char="=" lookAhead="true" />
+      </context>
+    </contexts>
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal" />
+      <itemData name="Comments" defStyleNum="dsComment" />
+      <itemData name="String" defStyleNum="dsString" />
+      <itemData name="Keywords" defStyleNum="dsKeyword" />
+      <itemData name="Datatypes" defStyleNum="dsDataType" />
+      <itemData name="Node Names" defStyleNum="dsOthers" />
+      <itemData name="Definitions" defStyleNum="dsFunction" />
+    </itemDatas>
+  </highlighting>
+  <general>
+    <keywords weakDeliminator="-:"/>
+  </general>
+</language>
