Class: TexLogParser::PrefixedMultiLinePattern
- Inherits:
-
Object
- Object
- TexLogParser::PrefixedMultiLinePattern
- Includes:
- LogParser::RegExpPattern
- Defined in:
- lib/tex_log_parser/patterns/prefixed_multi_line_pattern.rb
Overview
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`.
Instance Method Summary collapse
-
#initialize ⇒ PrefixedMultiLinePattern
constructor
Creates a new instance.
-
#read(lines) ⇒ Array<(Message, Int)>
Reads a message from the given lines.
Methods included from LogParser::RegExpPattern
Methods included from LogParser::Pattern
Constructor Details
permalink #initialize ⇒ PrefixedMultiLinePattern
Creates a new instance.
15 16 17 18 19 20 |
# 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 |
Instance Method Details
permalink #read(lines) ⇒ Array<(Message, Int)>
Reads a message from the given lines.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# 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.) 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..gsub!(@ending[:pattern][@start_match], ' ' * (@start_match[2].length + 2)) end [msg, consumed] end |