module Text.Highlighter.Lexers.Brainfuck (lexer) where import Text.Regex.PCRE.Light import Text.Highlighter.Types lexer :: Lexer lexer = Lexer { lName = "Brainfuck" , lAliases = ["brainfuck", "bf"] , lExtensions = [".bf", ".b"] , lMimetypes = ["application/x-brainfuck"] , lStart = root' , lFlags = [multiline] } root' :: TokenMatcher root' = [ tokNext "\\[" (Arbitrary "Keyword") (GoTo loop') , tok "\\]" (Arbitrary "Error") , anyOf common' ] common' :: TokenMatcher common' = [ tok "[.,]+" (Arbitrary "Name" :. Arbitrary "Tag") , tok "[+-]+" (Arbitrary "Name" :. Arbitrary "Builtin") , tok "[<>]+" (Arbitrary "Name" :. Arbitrary "Variable") , tok "[^.,+\\-<>\\[\\]]+" (Arbitrary "Comment") ] loop' :: TokenMatcher loop' = [ tokNext "\\[" (Arbitrary "Keyword") Push , tokNext "\\]" (Arbitrary "Keyword") Pop , anyOf common' ]