edn-abnf-ec 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7b8331d46fcc5488aa566d52bff36e7805ff2572124c5a968d64d6ec7f748f5c
4
+ data.tar.gz: d8e7bf78468578f924d877d1864b9648e873afadaad603152d081fd42a675451
5
+ SHA512:
6
+ metadata.gz: f047258eb31ee14fad5ef55f4608ce77aabd0f718049b47ddc67225f1ab488b97e600e6dba3ceecba2a22a67e7c8fc1be0c4b831878b2ba85335a9103ee4b61a
7
+ data.tar.gz: c22826fe2b73b320a98e6ea0fec1d9afd7b0a031c465697d5f2af5f64dfda4a93bbcf3a5241f88c1ecc56c7042709c6032a915cd67af4250e9d5d05cd2499257
data/bin/edn-abnf-ec ADDED
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8-hfs
3
+ require 'pp'
4
+ require 'yaml'
5
+ require 'treetop'
6
+ require 'json'
7
+
8
+ require_relative '../lib/edn-abnf.rb'
9
+
10
+ def snaky(name)
11
+ name.gsub(/-/, "_")
12
+ end
13
+
14
+ Encoding.default_external = Encoding::UTF_8
15
+ require 'optparse'
16
+ require 'ostruct'
17
+
18
+ $options = OpenStruct.new
19
+ begin
20
+ op = OptionParser.new do |opts|
21
+ opts.banner = "Usage: edn-abnf.rb [options] [file.edn... | -]"
22
+
23
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
24
+ $options.verbose = v
25
+ end
26
+ opts.on("-l", "--[no-]lines", "multi-line mode") do |v|
27
+ require 'csv'
28
+ $options.lines = v
29
+ end
30
+ opts.on("-eEDN", "--e=EDN", "supply EDN on command line") do |v|
31
+ $options.edn = v
32
+ end
33
+ opts.on("-tFMT", "--to=FMT", [:basic, :neat, :json, :yaml, :edn, :diag], "Target format") do |v|
34
+ $options.target = v
35
+ end
36
+ end
37
+ op.parse!
38
+ rescue Exception => e
39
+ warn e
40
+ exit 1
41
+ end
42
+
43
+
44
+ if !$options.edn
45
+ if ARGV == []
46
+ puts op
47
+ exit 1
48
+ end
49
+ $options.edn = ARGF.read
50
+ else
51
+ if ARGV != []
52
+ warn "*** file names #{ARGV.join(", ")} ignored due to -e given"
53
+ end
54
+ end
55
+
56
+ edn_file = $options.edn
57
+
58
+ if $options.lines
59
+ CSV.parse(edn_file) do |ok, edn, out|
60
+ if ok[0] == "#"
61
+ puts "# #{ok}, #{edn.inspect}, #{out}" if $options.verbose
62
+ next
63
+ end
64
+ begin
65
+ ok = ok == "="
66
+ puts "➔ #{ok}, #{edn}, #{out}" if $options.verbose
67
+ edn = EDN.from_edn(edn)
68
+ result = edn.tree
69
+ diag = result.cbor_diagnostic
70
+ if out == diag && !ok
71
+ puts "** ≠ / #{diag.inspect} / #{out.inspect}"
72
+ end
73
+ if out != diag && ok
74
+ puts "** ≡ / #{diag.inspect} / #{out.inspect}"
75
+ end
76
+ rescue ArgumentError => e
77
+ if ok
78
+ puts "** #{e} / #{result.inspect} / #{out.inspect}"
79
+ else
80
+ if $options.verbose
81
+ puts "expected failure #{e}"
82
+ end
83
+ end
84
+ end
85
+ end
86
+ exit
87
+ end
88
+
89
+ begin
90
+ edn = EDN.from_edn(edn_file)
91
+ result = edn.tree # XXX .tree?
92
+ rescue ArgumentError => e
93
+ puts "** #{e}"
94
+ exit 1
95
+ end
96
+
97
+ case $options.target
98
+ when :basic, nil
99
+ pp result
100
+ when :neat, :json
101
+ require 'neatjson'
102
+ puts JSON.neat_generate(result, after_comma: 1, after_colon: 1)
103
+ when :yaml
104
+ puts result.to_yaml
105
+ when :edn, :diag
106
+ puts result.cbor_diagnostic
107
+ else
108
+ warn ["Unknown target format: ", $options.target].inspect
109
+ end
data/edn-abnf.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "edn-abnf-ec"
3
+ s.version = "0.1.8"
4
+ s.summary = "CBOR Extended Diagnostic Notation (EDN) implemented in ABNF"
5
+ s.description = %q{edn-abnf implements converters and miscellaneous tools for CBOR EDN's ABNF}
6
+ s.author = "Carsten Bormann"
7
+ s.email = "cabo@tzi.org"
8
+ s.license = "MIT"
9
+ s.homepage = "http://github.com/cabo/edn-abnf"
10
+ s.files = Dir['lib/**/*.rb'] + %w(edn-abnf.gemspec) + Dir['bin/**/*.rb']
11
+ s.executables = Dir['bin/*'].map {|x| File.basename(x)}
12
+ s.required_ruby_version = '>= 1.9.2'
13
+
14
+ s.require_paths = ["lib"]
15
+
16
+ s.add_development_dependency 'bundler', '~>1'
17
+ s.add_development_dependency 'abnftt', '~>0.2'
18
+ s.add_dependency 'treetop', '~>1'
19
+ s.add_dependency 'json', '~>2'
20
+ s.add_dependency 'neatjson', '~>0.10'
21
+ end
@@ -0,0 +1,22 @@
1
+ require_relative "b64grammar.rb"
2
+
3
+ class CBOR_DIAG::App_b64
4
+ def self.decode(_, s)
5
+ parser = B64GRAMMARParser.new # B? XXX
6
+ ast = parser.parse(s)
7
+ if !ast
8
+ raise ArgumentError, "cbor-diagnostic: Parse Error in b64'#{s}':\n" << EDN.reason(parser, s)
9
+ end
10
+ # lazy -- not using parse tree...:
11
+ t = s.gsub(/\s|#[^\n]*(?:\n|\z)/, '').chars.each_slice(4).map(&:join)
12
+ if last = t[-1]
13
+ last << "=" * (4 - last.size)
14
+ end
15
+ b = t.join.tr("-_", "+/")
16
+ begin
17
+ b.unpack("m0")[0]
18
+ rescue ArgumentError
19
+ raise ArgumentError, "cbor-diagnostic: invalid base64 #{b.inspect}", caller[1..-1]
20
+ end
21
+ end
22
+ end