tex_log_parser 1.0.0.pre.10 → 1.0.0.pre.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +1 -1
- data/bin/texlogparser +4 -4
- data/lib/log_parser/buffer.rb +129 -0
- data/lib/{tex_log_parser → log_parser}/log_parser.rb +35 -22
- data/lib/log_parser/logger.rb +33 -0
- data/lib/log_parser/message.rb +79 -0
- data/lib/log_parser/pattern.rb +124 -0
- data/lib/tex_log_parser/patterns/bad_hbox_warning.rb +20 -16
- data/lib/tex_log_parser/patterns/fatal_error_occurred.rb +21 -17
- data/lib/tex_log_parser/patterns/file_line_error.rb +24 -20
- data/lib/tex_log_parser/patterns/highlighted_messages.rb +92 -88
- data/lib/tex_log_parser/patterns/prefixed_multi_line_pattern.rb +48 -44
- data/lib/tex_log_parser/patterns/runaway_parameter_error.rb +21 -17
- data/lib/tex_log_parser/patterns/standard_error.rb +39 -35
- data/lib/tex_log_parser.rb +30 -9
- data/lib/version.rb +7 -0
- metadata +37 -9
- data/lib/logger.rb +0 -21
- data/lib/tex_log_parser/log_buffer.rb +0 -62
- data/lib/tex_log_parser/log_message.rb +0 -57
- data/lib/tex_log_parser/log_pattern.rb +0 -69
- data/lib/tex_log_parser/version.rb +0 -5
@@ -1,57 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
# @attr [String] message
|
6
|
-
# @attr [String,nil] source_file
|
7
|
-
# @attr [Hash<Symbol, Int>,nil] source_lines
|
8
|
-
# @attr [Hash<Symbol, Int>,nil] log_lines
|
9
|
-
# @attr [true,false] preformatted
|
10
|
-
# @attr [:error,:warning,:info,:debug] level
|
11
|
-
# @attr [Class] pattern
|
12
|
-
class LogMessage
|
13
|
-
def initialize(message:, source_file: nil, source_lines: nil, log_lines: nil,
|
14
|
-
preformatted: false, level: :info, pattern: nil)
|
15
|
-
@message = message
|
16
|
-
@source_file = source_file
|
17
|
-
@source_lines = source_lines
|
18
|
-
@log_lines = log_lines
|
19
|
-
@preformatted = preformatted
|
20
|
-
@level = level
|
21
|
-
@pattern = pattern
|
22
|
-
end
|
23
|
-
|
24
|
-
attr_accessor :message, :source_file, :source_lines, :log_lines,
|
25
|
-
:preformatted, :level
|
26
|
-
|
27
|
-
def to_s
|
28
|
-
lines = if @source_lines.nil?
|
29
|
-
''
|
30
|
-
else
|
31
|
-
# @type [Hash<Symbol, Int>] @source_lines
|
32
|
-
":#{@source_lines.values.uniq.join('-')}"
|
33
|
-
end
|
34
|
-
|
35
|
-
message = @message
|
36
|
-
message = message.split("\n").map(&:strip).join(' ') unless @preformatted
|
37
|
-
message += "\nLog pattern: '#{@pattern}'" if Logger.debug?
|
38
|
-
|
39
|
-
<<~MSG
|
40
|
-
#{@source_file}#{lines}: #{@level.to_s.upcase}
|
41
|
-
#{message}
|
42
|
-
MSG
|
43
|
-
end
|
44
|
-
|
45
|
-
def to_json(_options = {})
|
46
|
-
hash = {
|
47
|
-
level: @level,
|
48
|
-
source_file: @source_file,
|
49
|
-
source_lines: @source_lines,
|
50
|
-
message: @message,
|
51
|
-
log_lines: @log_lines,
|
52
|
-
preformatted: @preformatted
|
53
|
-
}
|
54
|
-
hash[:pattern] = @pattern if Logger.debug?
|
55
|
-
JSON.pretty_generate hash
|
56
|
-
end
|
57
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# TODO: Document
|
4
|
-
module LogPattern
|
5
|
-
# TODO: Document
|
6
|
-
# @param [String] _line
|
7
|
-
# @return [true,false]
|
8
|
-
def begins_at?(_line)
|
9
|
-
raise NotImplementedError
|
10
|
-
end
|
11
|
-
|
12
|
-
# TODO: Document
|
13
|
-
# @param [Array<String>] _lines
|
14
|
-
# @return [Array<(LogMessage, Int)>]
|
15
|
-
def read(_lines)
|
16
|
-
raise NotImplementedError
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# TODO: document
|
21
|
-
# @attr [Regexp] start
|
22
|
-
# @attr [MatchData] start_match
|
23
|
-
# @attr [Regexp] ending
|
24
|
-
module RegExpPattern
|
25
|
-
include LogPattern
|
26
|
-
|
27
|
-
# @param [Regexp] start
|
28
|
-
# @param [Hash] ending
|
29
|
-
# @option ending [Regexp] :pattern
|
30
|
-
# @option ending [:match,:mismatch] :until
|
31
|
-
# @option ending [true,false] :inclusive
|
32
|
-
def initialize(start, ending = { pattern: ->(_) { /^\s*$/ },
|
33
|
-
until: :match,
|
34
|
-
inclusive: false })
|
35
|
-
@start = start
|
36
|
-
@ending = ending
|
37
|
-
@ending = ending
|
38
|
-
end
|
39
|
-
|
40
|
-
# TODO: document
|
41
|
-
def begins_at?(line)
|
42
|
-
match = @start.match(line)
|
43
|
-
@start_match = match unless match.nil?
|
44
|
-
!match.nil?
|
45
|
-
end
|
46
|
-
|
47
|
-
# TODO: document
|
48
|
-
def ends_at?(line)
|
49
|
-
match = @ending[:pattern][@start_match].match(line)
|
50
|
-
@end_match = match unless match.nil?
|
51
|
-
!match.nil? == (@ending[:until] == :match)
|
52
|
-
end
|
53
|
-
|
54
|
-
# TODO: make failable (e.g. EOF)
|
55
|
-
# @param [LogBuffer] lines
|
56
|
-
# @return [Array<(LogMessage, Int)>]
|
57
|
-
def read(lines)
|
58
|
-
raise NotImplementedError if @ending.nil?
|
59
|
-
|
60
|
-
ending = lines.find_index(1) { |l| ends_at?(l) }
|
61
|
-
raise "Did not find end of message (pattern '#{self.class}')." if ending.nil?
|
62
|
-
ending -= 1 unless @ending[:inclusive]
|
63
|
-
|
64
|
-
# Use ending+1 since ending is the index when we drop the first line!
|
65
|
-
msg = LogMessage.new(message: lines[0, ending + 1].join("\n"),
|
66
|
-
preformatted: true, level: nil, pattern: self.class)
|
67
|
-
[msg, ending + 1]
|
68
|
-
end
|
69
|
-
end
|