module Text.Highlighter.Lexers.NginxConf (lexer) where import Text.Regex.PCRE.Light import Text.Highlighter.Types lexer :: Lexer lexer = Lexer { lName = "Nginx configuration file" , lAliases = ["nginx"] , lExtensions = [] , lMimetypes = ["text/x-nginx-conf"] , lStart = root' , lFlags = [multiline] } base' :: TokenMatcher base' = [ tok "#.*\\n" (Arbitrary "Comment" :. Arbitrary "Single") , tok "on|off" (Arbitrary "Name" :. Arbitrary "Constant") , tok "\\$[^\\s;#()]+" (Arbitrary "Name" :. Arbitrary "Variable") , tok "([a-z0-9.-]+)(:)([0-9]+)" (ByGroups [(Arbitrary "Name"), (Arbitrary "Punctuation"), (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Integer")]) , tok "[a-z-]+/[a-z-+]+" (Arbitrary "Literal" :. Arbitrary "String") , tok "[0-9]+[km]?\\b" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Integer") , tok "(\126)(\\s*)([^\\s{]+)" (ByGroups [(Arbitrary "Punctuation"), (Arbitrary "Text"), (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Regex")]) , tok "[:=\126]" (Arbitrary "Punctuation") , tok "[^\\s;#{}$]+" (Arbitrary "Literal" :. Arbitrary "String") , tok "/[^\\s;#]*" (Arbitrary "Name") , tok "\\s+" (Arbitrary "Text") , tok "[$;]" (Arbitrary "Text") ] root' :: TokenMatcher root' = [ tok "(include)(\\s+)([^\\s;]+)" (ByGroups [(Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Name")]) , tokNext "[^\\s;#]+" (Arbitrary "Keyword") (GoTo stmt') , anyOf base' ] stmt' :: TokenMatcher stmt' = [ tokNext "{" (Arbitrary "Punctuation") (GoTo block') , tokNext ";" (Arbitrary "Punctuation") Pop , anyOf base' ] block' :: TokenMatcher block' = [ tokNext "}" (Arbitrary "Punctuation") (PopNum 2) , tokNext "[^\\s;#]+" (Arbitrary "Keyword" :. Arbitrary "Namespace") (GoTo stmt') , anyOf base' ]