Skip to content

Commit bbc6fe2

Browse files
committed
Revise logging to use standard RDF log facility.
1 parent 27dee06 commit bbc6fe2

File tree

9 files changed

+46
-44
lines changed

9 files changed

+46
-44
lines changed

bin/ebnf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", 'lib')))
99
require 'rubygems'
1010
require 'getoptlong'
1111
require 'ebnf'
12+
require 'rdf/spec'
1213

1314
options = {
1415
output_format: :sxp,
@@ -86,7 +87,11 @@ end
8687

8788
input = File.open(ARGV[0]) if ARGV[0]
8889

89-
ebnf = EBNF.parse(input || STDIN, **options)
90+
logger = options[:live] ? Logger.new(STDERR) : RDF::Spec.logger
91+
logger.level = options[:level] || Logger::ERROR
92+
logger.formatter = lambda {|severity, datetime, progname, msg| "%5s %s\n" % [severity, msg]}
93+
94+
ebnf = EBNF.parse(input || STDIN, logger: logger, **options)
9095
ebnf.make_bnf if options[:bnf] || options[:ll1]
9196
ebnf.make_peg if options[:peg]
9297
if options[:ll1]

examples/abnf/parser.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,10 @@ class ABNFParser
238238
# @return [EBNFParser]
239239
def initialize(input, **options, &block)
240240
# If the `level` option is set, instantiate a logger for collecting trace information.
241-
if options.has_key?(:level)
242-
options[:logger] = Logger.new(STDERR)
243-
options[:logger].level = options[:level]
244-
options[:logger].formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}
241+
if options.key?(:level)
242+
options[:logger] ||= Logger.new(STDERR).
243+
tap {|x| x.level = options[:level]}.
244+
tap {|x| x.formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}}
245245
end
246246

247247
# Read input, if necessary, which will be used in a Scanner.

examples/ebnf-ll1-parser/parser.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -276,10 +276,10 @@ def initialize(input, **options, &block)
276276
@input = input.respond_to?(:read) ? input.read : input.to_s
277277

278278
# If the `level` option is set, instantiate a logger for collecting trace information.
279-
if options.has_key?(:level)
280-
options[:logger] = Logger.new(STDERR)
281-
options[:logger].level = options.fetch(:level, 2)
282-
options[:logger].formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}
279+
if options.key?(:level)
280+
options[:logger] ||= Logger.new(STDERR).
281+
tap {|x| x.level = options[:level]}.
282+
tap {|x| x.formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}}
283283
end
284284

285285
parsing_terminals = false

examples/ebnf-peg-parser/parser.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,10 @@ class EBNFPegParser
272272
# @return [EBNFParser]
273273
def initialize(input, **options, &block)
274274
# If the `level` option is set, instantiate a logger for collecting trace information.
275-
if options.has_key?(:level)
276-
options[:logger] = Logger.new(STDERR)
277-
options[:logger].level = options[:level]
278-
options[:logger].formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}
275+
if options.key?(:level)
276+
options[:logger] ||= Logger.new(STDERR).
277+
tap {|x| x.level = options[:level]}.
278+
tap {|x| x.formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}}
279279
end
280280

281281
# Read input, if necessary, which will be used in a Scanner.

examples/isoebnf/parser.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,10 @@ class ISOEBNFPegParser
200200
# @return [EBNFParser]
201201
def initialize(input, **options, &block)
202202
# If the `level` option is set, instantiate a logger for collecting trace information.
203-
if options.has_key?(:level)
204-
options[:logger] = Logger.new(STDERR)
205-
options[:logger].level = options[:level]
206-
options[:logger].formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}
203+
if options.key?(:level)
204+
options[:logger] ||= Logger.new(STDERR).
205+
tap {|x| x.level = options[:level]}.
206+
tap {|x| x.formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}}
207207
end
208208

209209
# Read input, if necessary, which will be used in a Scanner.

lib/ebnf/abnf.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,10 @@ class ABNF
234234
# @return [EBNFParser]
235235
def initialize(input, **options)
236236
# If the `level` option is set, instantiate a logger for collecting trace information.
237-
if options.has_key?(:level)
238-
options[:logger] = Logger.new(STDERR)
239-
options[:logger].level = options[:level]
240-
options[:logger].formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}
237+
if options.key?(:level)
238+
options[:logger] ||= Logger.new(STDERR).
239+
tap {|x| x.level = options[:level]}.
240+
tap {|x| x.formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}}
241241
end
242242

243243
# Read input, if necessary, which will be used in a Scanner.

lib/ebnf/base.rb

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ class Base
106106
# Format of input, one of `:abnf`, `:ebnf`, `:isoebnf`, `:isoebnf`, `:native`, or `:sxp`.
107107
# Use `:native` for the native EBNF parser, rather than the PEG parser.
108108
# @param [Hash{Symbol => Object}] options
109-
# @option options [Boolean, Array] :debug
110-
# Output debug information to an array or $stdout.
109+
# @option options [Boolean] :level
110+
# Trace level. 0(debug), 1(info), 2(warn), 3(error).
111111
# @option options [Boolean, Array] :validate
112112
# Validate resulting grammar.
113113
def initialize(input, format: :ebnf, **options)
@@ -311,24 +311,17 @@ def depth
311311

312312
# Progress output, less than debugging
313313
def progress(*args, **options)
314-
return unless @options[:progress] || @options[:debug]
315-
depth = options[:depth] || @depth
316-
args << yield if block_given?
317-
message = "#{args.join(': ')}"
318-
str = "[#{@lineno}]#{' ' * depth}#{message}"
319-
@options[:debug] << str if @options[:debug].is_a?(Array)
320-
$stderr.puts(str) if @options[:progress] || @options[:debug] == true
314+
debug(*args, **options.merge(level: Logger::INFO))
321315
end
322316

323317
# Error output
324318
def error(*args, **options)
325319
depth = options[:depth] || @depth
326320
args << yield if block_given?
327321
message = "#{args.join(': ')}"
322+
debug(message, **options.merge(level: Logger::ERROR))
328323
@errors << message
329-
str = "[#{@lineno}]#{' ' * depth}#{message}"
330-
@options[:debug] << str if @options[:debug].is_a?(Array)
331-
$stderr.puts(str)
324+
$stderr.puts(message)
332325
end
333326

334327
##
@@ -343,13 +336,17 @@ def error(*args, **options)
343336
#
344337
# @yieldreturn [String] added to message
345338
def debug(*args, **options)
346-
return unless @options[:debug]
339+
return unless @options.key?(:logger)
340+
level = @options[:level] || Logger::DEBUG
347341
depth = options[:depth] || @depth
348342
args << yield if block_given?
349343
message = "#{args.join(': ')}"
350344
str = "[#{@lineno}]#{' ' * depth}#{message}"
351-
@options[:debug] << str if @options[:debug].is_a?(Array)
352-
$stderr.puts(str) if @options[:debug] == true
345+
if @options[:logger].respond_to?(:add)
346+
@options[:logger].add(level, str)
347+
elsif @options[:logger].respond_to?(:<<)
348+
@options[:logger] << "[#{lineno}] " + str
349+
end
353350
end
354351
end
355352
end

lib/ebnf/isoebnf.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,10 @@ class ISOEBNF
196196
# @return [EBNFParser]
197197
def initialize(input, **options, &block)
198198
# If the `level` option is set, instantiate a logger for collecting trace information.
199-
if options.has_key?(:level)
200-
options[:logger] = Logger.new(STDERR)
201-
options[:logger].level = options[:level]
202-
options[:logger].formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}
199+
if options.key?(:level)
200+
options[:logger] ||= Logger.new(STDERR).
201+
tap {|x| x.level = options[:level]}.
202+
tap {|x| x.formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}}
203203
end
204204

205205
# Read input, if necessary, which will be used in a Scanner.

spec/base_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
%{((rule Prolog "2" (seq (opt BaseDecl) (star PrefixDecl))))},
1515
%{
1616
@terminals
17-
[3] terminal ::= [A-Z]+
17+
terminal ::= [A-Z]+
1818
} => %{((terminals _terminals (seq))
19-
(terminal terminal "3" (plus (range "A-Z"))))},
19+
(terminal terminal (plus (range "A-Z"))))},
2020
%{
2121
[9] primary ::= HEX
2222
| RANGE
@@ -125,11 +125,11 @@
125125
end
126126

127127
describe "#to_s" do
128-
specify {expect(subject.to_s).to include("[1] ebnf")}
128+
specify {expect(subject.to_s).to include("ebnf")}
129129
end
130130

131131
describe "#to_html" do
132-
specify {expect(subject.to_s).to include("[1] ebnf")}
132+
specify {expect(subject.to_s).to include("ebnf")}
133133
end
134134

135135
describe "#to_ruby" do

0 commit comments

Comments
 (0)