highlighter-0.2: src/Text/Highlighter/Lexers/IrcLogs.hs
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}|<?-[!@=P]?->?)\\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")
]