cbor-diag 0.5.10 → 0.5.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6860bf8b982a54e759b642bce8fcfc410c944ffb194ebd76942a9d791108d2f2
4
- data.tar.gz: d26df44cd7ff9616bf8ad80cc2785d633bdeb86e338084c3ce7b71fc4467ab5c
3
+ metadata.gz: 631d4dd7cf5f08c4a1a33f2a021eb2627da7007d5ad16e10ac83182fd161fb49
4
+ data.tar.gz: 4ca7971612f93597169a0af602d9b919e5dd67b2291d0999aea328fba8150c20
5
5
  SHA512:
6
- metadata.gz: 1562d3a70922fd80e4a4721e377ae4de759bf018727f9918c4181e320427f39e03610ad1c9df0ca7189a8ad4cb6457b35ccc464fdefe883375f82ed6a91fb77f
7
- data.tar.gz: 54a47f48c5fdea45e52c9e408118978ba924586835c7fe1efe03c1ece3a5c70ae72f09a140aecde8a6a06882ac822a35ad20de4451b388e3bcc7b1cd29ffb1f3
6
+ metadata.gz: b9d148ad270cddc39982052b895e18b1d1c3e0bc7b4b574e4267c7cfb07b76e013e20af1ba1c15ae7e6e9465860bd9cc485d6ad2c369a6a29ab6d3bed1924aa2
7
+ data.tar.gz: 4be65c57df7e7f2d64ef7e26672ba0835f4a9ff9b4e78387c0ba50ea3e0ec83e75e32ee21b97996af11529f76c4e3b9cd5038189906febf5f5f3cffde1089dad
data/bin/cbor2diag.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  require 'cbor-diagnostic'
3
3
 
4
4
  options = ''
5
- while /\A-([et]+)\z/ === ARGV[0]
5
+ while /\A-([etu]+)\z/ === ARGV[0]
6
6
  options << $1
7
7
  ARGV.shift
8
8
  end
@@ -10,4 +10,6 @@ end
10
10
  ARGF.binmode
11
11
  i = ARGF.read
12
12
  o = CBOR.decode(i)
13
- puts o.cbor_diagnostic(try_decode_embedded: /e/ === options, bytes_as_text: /t/ === options)
13
+ puts o.cbor_diagnostic(try_decode_embedded: /e/ === options,
14
+ bytes_as_text: /t/ === options,
15
+ utf8: /u/ === options)
data/bin/cborseq2diag.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  require 'cbor-diagnostic'
3
3
 
4
4
  options = ''
5
- while /\A-([et]+)\z/ === ARGV[0]
5
+ while /\A-([etu]+)\z/ === ARGV[0]
6
6
  options << $1
7
7
  ARGV.shift
8
8
  end
@@ -11,7 +11,9 @@ ARGF.binmode
11
11
  i = ARGF.read
12
12
  while !i.empty?
13
13
  o, i = CBOR.decode_with_rest(i)
14
- out = o.cbor_diagnostic(try_decode_embedded: /e/ === options, bytes_as_text: /t/ === options)
14
+ out = o.cbor_diagnostic(try_decode_embedded: /e/ === options,
15
+ bytes_as_text: /t/ === options,
16
+ utf8: /u/ === options)
15
17
  if i.empty?
16
18
  puts out
17
19
  else
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require 'cbor-pure'
3
+ require 'cbor-pretty'
4
+
5
+ ARGF.binmode
6
+ i = ARGF.read
7
+ puts CBOR::pretty_seq(i)
data/bin/diag2cbor.rb CHANGED
@@ -13,7 +13,14 @@ $stdout.binmode
13
13
 
14
14
  i = ARGF.read.b # binary to work around treetop performance bug
15
15
  if result = parser.parse(i)
16
- print(CBOR::encode(result.to_rb))
16
+ decoded = result.to_rb
17
+ out = case decoded
18
+ when CBOR::Sequence
19
+ CBOR::encode_seq(decoded.elements)
20
+ else
21
+ CBOR::encode(decoded)
22
+ end
23
+ print out
17
24
  else
18
25
  puts "*** can't parse #{i}"
19
26
  puts "*** #{parser.failure_reason}"
data/bin/diag2pretty.rb CHANGED
@@ -8,7 +8,14 @@ parser = CBOR_DIAGParser.new
8
8
 
9
9
  i = ARGF.read
10
10
  if result = parser.parse(i)
11
- puts(CBOR::pretty(CBOR::encode(result.to_rb)))
11
+ decoded = result.to_rb
12
+ puts case decoded
13
+ when CBOR::Sequence
14
+ "# CBOR sequence with #{decoded.elements.size} elements\n" <<
15
+ CBOR::pretty_seq(CBOR::encode_seq(decoded.elements))
16
+ else
17
+ CBOR::pretty(CBOR::encode(decoded))
18
+ end
12
19
  else
13
20
  puts "*** can't parse #{i}"
14
21
  puts "*** #{parser.failure_reason}"
data/cbor-diag.gemspec CHANGED
@@ -1,8 +1,8 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cbor-diag"
3
- s.version = "0.5.10"
3
+ s.version = "0.5.15"
4
4
  s.summary = "CBOR (Concise Binary Object Representation) diagnostic notation"
5
- s.description = %q{cbor-diag implements diagnostic notation for CBOR, RFC 7049}
5
+ s.description = %q{cbor-diag implements diagnostic notation for CBOR, RFC 8949 and RFC 8742}
6
6
  s.author = "Carsten Bormann"
7
7
  s.email = "cabo@tzi.org"
8
8
  s.license = "Apache-2.0"
@@ -10,10 +10,38 @@ module CBOR_DIAG
10
10
 
11
11
  module Text0
12
12
  def ows1
13
- elements[0]
13
+ elements[1]
14
14
  end
15
15
 
16
16
  def value
17
+ elements[2]
18
+ end
19
+
20
+ def ows2
21
+ elements[3]
22
+ end
23
+ end
24
+
25
+ module Text1
26
+ def value
27
+ elements[0]
28
+ end
29
+
30
+ def ows
31
+ elements[1]
32
+ end
33
+
34
+ def an
35
+ elements[2]
36
+ end
37
+ end
38
+
39
+ module Text2
40
+ def ows1
41
+ elements[0]
42
+ end
43
+
44
+ def a1
17
45
  elements[1]
18
46
  end
19
47
 
@@ -22,8 +50,19 @@ module CBOR_DIAG
22
50
  end
23
51
  end
24
52
 
25
- module Text1
26
- def to_rb; value.to_rb end
53
+ module Text3
54
+ def to_rb
55
+ r = if e = a1.elements
56
+ [e[0].to_rb] + e[2].elements.map {|x| x.value.to_rb }
57
+ else
58
+ []
59
+ end
60
+ if r.size == 1
61
+ r.first
62
+ else
63
+ CBOR::Sequence.new(r)
64
+ end
65
+ end
27
66
  end
28
67
 
29
68
  def _nt_text
@@ -41,17 +80,75 @@ module CBOR_DIAG
41
80
  r1 = _nt_ows
42
81
  s0 << r1
43
82
  if r1
44
- r2 = _nt_value
83
+ i3, s3 = index, []
84
+ r4 = _nt_value
85
+ s3 << r4
86
+ if r4
87
+ r5 = _nt_ows
88
+ s3 << r5
89
+ if r5
90
+ s6, i6 = [], index
91
+ loop do
92
+ i7, s7 = index, []
93
+ if (match_len = has_terminal?(',', false, index))
94
+ r8 = true
95
+ @index += match_len
96
+ else
97
+ terminal_parse_failure('\',\'')
98
+ r8 = nil
99
+ end
100
+ s7 << r8
101
+ if r8
102
+ r9 = _nt_ows
103
+ s7 << r9
104
+ if r9
105
+ r10 = _nt_value
106
+ s7 << r10
107
+ if r10
108
+ r11 = _nt_ows
109
+ s7 << r11
110
+ end
111
+ end
112
+ end
113
+ if s7.last
114
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
115
+ r7.extend(Text0)
116
+ else
117
+ @index = i7
118
+ r7 = nil
119
+ end
120
+ if r7
121
+ s6 << r7
122
+ else
123
+ break
124
+ end
125
+ end
126
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
127
+ s3 << r6
128
+ end
129
+ end
130
+ if s3.last
131
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
132
+ r3.extend(Text1)
133
+ else
134
+ @index = i3
135
+ r3 = nil
136
+ end
137
+ if r3
138
+ r2 = r3
139
+ else
140
+ r2 = instantiate_node(SyntaxNode,input, index...index)
141
+ end
45
142
  s0 << r2
46
143
  if r2
47
- r3 = _nt_ows
48
- s0 << r3
144
+ r12 = _nt_ows
145
+ s0 << r12
49
146
  end
50
147
  end
51
148
  if s0.last
52
149
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
53
- r0.extend(Text0)
54
- r0.extend(Text1)
150
+ r0.extend(Text2)
151
+ r0.extend(Text3)
55
152
  else
56
153
  @index = i0
57
154
  r0 = nil
data/lib/cbor-pretty.rb CHANGED
@@ -17,6 +17,15 @@ module CBOR
17
17
  Buffer.new(s).pretty_item_final(indent, max_target)
18
18
  end
19
19
 
20
+ def self.pretty_seq(s, indent = 0, max_target = 40)
21
+ b = Buffer.new(s)
22
+ res = '' # XXX: not all indented the same
23
+ while !b.empty?
24
+ res << b.pretty_item_final(indent, max_target, true)
25
+ end
26
+ res
27
+ end
28
+
20
29
  class Buffer
21
30
 
22
31
  def take_and_print(n, prefix = '')
@@ -72,11 +81,13 @@ module CBOR
72
81
  nil
73
82
  end
74
83
 
75
- def pretty_item_final(indent = 0, max_target = 40)
84
+ def pretty_item_final(indent = 0, max_target = 40, seq = false)
76
85
  @out = ''
77
86
  @indent = indent
78
87
  pretty_item
79
- raise if @pos != @buffer.size
88
+ unless seq
89
+ raise if @pos != @buffer.size
90
+ end
80
91
  target = [@out.each_line.map {|ln| ln =~ /#/ || 0}.max, max_target].min
81
92
  @out.each_line.map {|ln|
82
93
  col = ln =~ /#/
data/lib/cbor-pure.rb CHANGED
@@ -64,6 +64,16 @@ module CBOR
64
64
  alias_method :inspect, :to_s
65
65
  end
66
66
 
67
+ Sequence = Struct.new(:elements) do
68
+ def to_s
69
+ elements.map(&:to_s).join(", ")
70
+ end
71
+ alias_method :inspect, :to_s
72
+ def to_cborseq
73
+ CBOR.encode_seq(self)
74
+ end
75
+ end
76
+
67
77
  def self.encode(d)
68
78
  Buffer.new.add(d).buffer
69
79
  end
@@ -314,6 +324,10 @@ module CBOR
314
324
  ret
315
325
  end
316
326
 
327
+ def empty?
328
+ @pos == buffer.size
329
+ end
330
+
317
331
 
318
332
  end
319
333
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cbor-diag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.10
4
+ version: 0.5.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carsten Bormann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-23 00:00:00.000000000 Z
11
+ date: 2021-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: cbor-diag implements diagnostic notation for CBOR, RFC 7049
69
+ description: cbor-diag implements diagnostic notation for CBOR, RFC 8949 and RFC 8742
70
70
  email: cabo@tzi.org
71
71
  executables:
72
72
  - cbor2diag.rb
@@ -77,6 +77,7 @@ executables:
77
77
  - cborseq2diag.rb
78
78
  - cborseq2json.rb
79
79
  - cborseq2neatjson.rb
80
+ - cborseq2pretty.rb
80
81
  - cborseq2yaml.rb
81
82
  - diag2cbor.rb
82
83
  - diag2pretty.rb
@@ -96,6 +97,7 @@ files:
96
97
  - bin/cborseq2diag.rb
97
98
  - bin/cborseq2json.rb
98
99
  - bin/cborseq2neatjson.rb
100
+ - bin/cborseq2pretty.rb
99
101
  - bin/cborseq2yaml.rb
100
102
  - bin/diag2cbor.rb
101
103
  - bin/diag2pretty.rb