module Text.Highlighter.Lexers.S (lexer) where import Text.Regex.PCRE.Light import Text.Highlighter.Types lexer :: Lexer lexer = Lexer { lName = "S" , lAliases = ["splus", "s", "r"] , lExtensions = [".S", ".R"] , lMimetypes = ["text/S-plus", "text/S", "text/R"] , lStart = root' , lFlags = [multiline] } statements' :: TokenMatcher statements' = [ anyOf comments' , tok "\\s+" (Arbitrary "Text") , tokNext "\\'" (Arbitrary "Literal" :. Arbitrary "String") (GoTo string_squote') , tokNext "\\\"" (Arbitrary "Literal" :. Arbitrary "String") (GoTo string_dquote') , anyOf builtin_symbols' , anyOf numbers' , anyOf keywords' , anyOf punctuation' , anyOf operators' , anyOf valid_name' ] string_dquote' :: TokenMatcher string_dquote' = [ tokNext "[^\\\"]*\\\"" (Arbitrary "Literal" :. Arbitrary "String") Pop ] operators' :: TokenMatcher operators' = [ tok "<-|-|==|<=|>=|<|>|&&|&|!=|\\|\\|?" (Arbitrary "Operator") , tok "\\*|\\+|\\^|/|%%|%/%|=" (Arbitrary "Operator") , tok "%in%|%*%" (Arbitrary "Operator") ] keywords' :: TokenMatcher keywords' = [ tok "for(?=\\s*\\()|while(?=\\s*\\()|if(?=\\s*\\()|(?<=\\s)else|(?<=\\s)break(?=;|$)|return(?=\\s*\\()|function(?=\\s*\\()" (Arbitrary "Keyword" :. Arbitrary "Reserved") ] numbers' :: TokenMatcher numbers' = [ tok "(?