highlighting-kate 0.2.4 → 0.2.5
raw patch · 8 files changed
+250/−34 lines, 8 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Text.Highlighting.Kate.Syntax.Relaxngcompact: highlight :: String -> Either String [SourceLine]
+ Text.Highlighting.Kate.Syntax.Relaxngcompact: parseExpression :: GenParser Char SyntaxState LabeledSource
+ Text.Highlighting.Kate.Syntax.Relaxngcompact: syntaxExtensions :: String
+ Text.Highlighting.Kate.Syntax.Relaxngcompact: syntaxName :: String
Files
- ParseSyntaxFiles.hs +12/−9
- README +3/−2
- Text/Highlighting/Kate.hs +1/−1
- Text/Highlighting/Kate/Common.hs +0/−4
- Text/Highlighting/Kate/Syntax.hs +12/−4
- Text/Highlighting/Kate/Syntax/Relaxngcompact.hs +108/−0
- highlighting-kate.cabal +6/−14
- xml/relaxngcompact.xml +108/−0
ParseSyntaxFiles.hs view
@@ -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 .
README view
@@ -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:
Text/Highlighting/Kate.hs view
@@ -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"
Text/Highlighting/Kate/Common.hs view
@@ -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
Text/Highlighting/Kate/Syntax.hs view
@@ -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))
+ Text/Highlighting/Kate/Syntax/Relaxngcompact.hs view
@@ -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
highlighting-kate.cabal view
@@ -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
+ xml/relaxngcompact.xml view
@@ -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=""" 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=""" />+ </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>