class TexLogParser::PrefixedMultiLinePattern
Matches messages of this form:
Package tocbasic Info: omitting babel extension for `toc' (tocbasic) because of feature `nobabel' available (tocbasic) for `toc' on input line 132.
Note: Fails to pick up the fill message if lines get broken badly, e.g. in `000_pdf_fl.log:634`.
Public Class Methods
new()
click to toggle source
Creates a new instance.
Calls superclass method
LogParser::RegExpPattern::new
# File lib/tex_log_parser/patterns/prefixed_multi_line_pattern.rb, line 15 def initialize super(/(Package|Class|\w+TeX)\s+(?:(\w+)\s+)?(Warning|Error|Info|Message)/, { pattern: ->(m) { /^\s*\(#{m[2]}\)/ }, # BROKEN_BY_LINEBREAKS until: :mismatch, inclusive: false }) end
Public Instance Methods
read(lines)
click to toggle source
(see LogParser::RegExpPattern#read
)
Calls superclass method
LogParser::RegExpPattern#read
# File lib/tex_log_parser/patterns/prefixed_multi_line_pattern.rb, line 23 def read(lines) # @type [Message] msg # @type [Int] consumed msg, consumed = super(lines) case @start_match[3] when 'Error' msg.level = :error when 'Warning' msg.level = :warning when 'Info', 'Message' msg.level = :info else # TODO: abort? Logger.debug 'Unhandled message type!' end # source file from scope, parser does it # BROKEN_BY_LINEBREAKS # TODO: may be split across lines --> remove whitespace before extracting suffix_match = /on input line\s+(\d+)(?:\.\s*)?\z/.match(msg.message) unless suffix_match.nil? line = suffix_match[1].to_i msg.source_lines = { from: line, to: line } end # Remove uninformative line prefixes (e.g. `(tocbasic)`) unless @start_match[2].nil? msg.message.gsub!(@ending[:pattern][@start_match], ' ' * (@start_match[2].length + 2)) end [msg, consumed] end