module Text.Highlighter.Lexers.IrcLogs (lexer) where import Text.Regex.PCRE.Light import Text.Highlighter.Types lexer :: Lexer lexer = Lexer { lName = "IRC logs" , lAliases = ["irc"] , lExtensions = [".weechatlog"] , lMimetypes = ["text/x-irclog"] , lStart = root' , lFlags = [multiline] } msg' :: TokenMatcher msg' = [ tok "[^\\s]+:(?!//)" (Arbitrary "Name" :. Arbitrary "Attribute") , tokNext ".*\\n" (Arbitrary "Text") Pop ] root' :: TokenMatcher root' = [ tok "^\\*\\*\\*\\*(.*)\\*\\*\\*\\*$" (Arbitrary "Comment") , tok "^\10 (\10 # irssi / xchat and others\10 (?: \\[|\\()? # Opening bracket or paren for the timestamp\10 (?: # Timestamp\10 (?: (?:\\d{1,4} [-/]?)+ # Date as - or /-separated groups of digits\10 [T ])? # Date/time separator: T or space\10 (?: \\d?\\d [:.]?)+ # Time as :/.-separated groups of 1 or 2 digits\10 )\10 (?: \\]|\\))?\\s+ # Closing bracket or paren for the timestamp\10 |\10 # weechat\10 \\d{4}\\s\\w{3}\\s\\d{2}\\s # Date\10 \\d{2}:\\d{2}:\\d{2}\\s+ # Time + Whitespace\10 |\10 # xchat\10 \\w{3}\\s\\d{2}\\s # Date\10 \\d{2}:\\d{2}:\\d{2}\\s+ # Time + Whitespace\10 )?\10 (\\s*<[^>]*>\\s*)$" (ByGroups [(Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Name" :. Arbitrary "Tag")]) , tokNext "^\10 (\10 # irssi / xchat and others\10 (?: \\[|\\()? # Opening bracket or paren for the timestamp\10 (?: # Timestamp\10 (?: (?:\\d{1,4} [-/]?)+ # Date as - or /-separated groups of digits\10 [T ])? # Date/time separator: T or space\10 (?: \\d?\\d [:.]?)+ # Time as :/.-separated groups of 1 or 2 digits\10 )\10 (?: \\]|\\))?\\s+ # Closing bracket or paren for the timestamp\10 |\10 # weechat\10 \\d{4}\\s\\w{3}\\s\\d{2}\\s # Date\10 \\d{2}:\\d{2}:\\d{2}\\s+ # Time + Whitespace\10 |\10 # xchat\10 \\w{3}\\s\\d{2}\\s # Date\10 \\d{2}:\\d{2}:\\d{2}\\s+ # Time + Whitespace\10 )?\10 \10 (\\s*<.*?>\\s*) # Nick " (ByGroups [(Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Name" :. Arbitrary "Tag")]) (GoTo msg') , tok "^\10 (\10 # irssi / xchat and others\10 (?: \\[|\\()? # Opening bracket or paren for the timestamp\10 (?: # Timestamp\10 (?: (?:\\d{1,4} [-/]?)+ # Date as - or /-separated groups of digits\10 [T ])? # Date/time separator: T or space\10 (?: \\d?\\d [:.]?)+ # Time as :/.-separated groups of 1 or 2 digits\10 )\10 (?: \\]|\\))?\\s+ # Closing bracket or paren for the timestamp\10 |\10 # weechat\10 \\d{4}\\s\\w{3}\\s\\d{2}\\s # Date\10 \\d{2}:\\d{2}:\\d{2}\\s+ # Time + Whitespace\10 |\10 # xchat\10 \\w{3}\\s\\d{2}\\s # Date\10 \\d{2}:\\d{2}:\\d{2}\\s+ # Time + Whitespace\10 )?\10 \10 (\\s*[*]\\s+) # Star\10 ([^\\s]+\\s+.*?\\n) # Nick + rest of message " (ByGroups [(Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Keyword"), (Arbitrary "Generic" :. Arbitrary "Inserted")]) , tok "^\10 (\10 # irssi / xchat and others\10 (?: \\[|\\()? # Opening bracket or paren for the timestamp\10 (?: # Timestamp\10 (?: (?:\\d{1,4} [-/]?)+ # Date as - or /-separated groups of digits\10 [T ])? # Date/time separator: T or space\10 (?: \\d?\\d [:.]?)+ # Time as :/.-separated groups of 1 or 2 digits\10 )\10 (?: \\]|\\))?\\s+ # Closing bracket or paren for the timestamp\10 |\10 # weechat\10 \\d{4}\\s\\w{3}\\s\\d{2}\\s # Date\10 \\d{2}:\\d{2}:\\d{2}\\s+ # Time + Whitespace\10 |\10 # xchat\10 \\w{3}\\s\\d{2}\\s # Date\10 \\d{2}:\\d{2}:\\d{2}\\s+ # Time + Whitespace\10 )?\10 \10 (\\s*(?:\\*{3}|?)\\s*) # Star(s) or symbols\10 ([^\\s]+\\s+) # Nick + Space\10 (.*?\\n) # Rest of message " (ByGroups [(Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Keyword"), (Arbitrary "Literal" :. Arbitrary "String"), (Arbitrary "Comment")]) , tok "^.*?\\n" (Arbitrary "Text") ]