cddl 0.8.18 → 0.8.19

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea0383306d236be5fef58afc284e8129b9cd125bb0b8548e6bf76f3bd7b45ab9
4
- data.tar.gz: 3e439913ec68a51c044a4215a72789a2e4f25dd05b5f9e864349ce7dc9f83113
3
+ metadata.gz: 8e344aa8fcd67bc17cbeaba6c564ab2c3b6b9ce63b5df9acdffe060ac32628d3
4
+ data.tar.gz: 32410cfe8d62729a6f05e1174871746af3be5998cc2a56fe50bdfc139b53252d
5
5
  SHA512:
6
- metadata.gz: a2d7a09bbeedfb2a1d9884deb69e55c8ed889eec727d67fed6c74223981c6cea5aac9fc07a37dd9bd2e253f5942afdc3ac35effe7a9a8baab47baf375f88222e
7
- data.tar.gz: dd32c4869a4d708863ba8ed1188ae1f98b784c6fc6d33ffab54d2db4a6254cbf2ea0490706d31ae2f4c53f21e64ce7a87b9bb0d81ec495765ffe19a2471c6470
6
+ metadata.gz: 7fad1d715e3acbd3062c8aeb49518148de9a61c6385a09bd3baa7b384e398ce52bce13afa268209ff2fc0763ef1e07aea932857e0489a0c1e94d79429346418c
7
+ data.tar.gz: ef603bb0dca1beceb0767e87210b4e3819533924c64014392b694e36a2cc9e41b00f1618484226c950aa804e5690e7c5e7451f527b9ad0379ecc5fda5bed389e
data/cddl.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'cddl'
3
- s.version = '0.8.18'
3
+ s.version = '0.8.19'
4
4
  s.summary = "CDDL generator and validator."
5
5
  s.description = %{A parser, generator, and validator for CDDL}
6
6
  s.add_dependency('cbor-diag')
data/lib/cddl.rb CHANGED
@@ -255,6 +255,11 @@ module CDDL
255
255
  h[k] = ABNF.from_abnf(grammar)
256
256
  }
257
257
 
258
+ ABNF_ENCODING_FOR_CONOP = {
259
+ abnf: Encoding::UTF_8,
260
+ abnfb: Encoding::BINARY
261
+ }
262
+
258
263
  def generate
259
264
  @recursion = 0
260
265
  generate1(rules)
@@ -510,12 +515,19 @@ module CDDL
510
515
  fail "Don't know yet how to generate #{where}"
511
516
  end
512
517
  REGEXP_FOR_STRING[regexp].random_example(max_repeater_variance: 5)
513
- when :abnf
518
+ when :abnf, :abnfb
514
519
  grammar = generate1(control)
515
- unless target == [:prim, 3] && String === grammar
520
+ bytes = true if target == [:prim, 2]
521
+ bytes = false if target == [:prim, 3]
522
+ unless !bytes.nil? && String === grammar
516
523
  fail "Don't know yet how to generate #{where}"
517
524
  end
518
- ABNF_PARSER_FOR_STRING[grammar].generate
525
+ out = ABNF_PARSER_FOR_STRING[grammar].generate
526
+ if where[1] == :abnfb
527
+ out = out.codepoints.pack("C*")
528
+ end
529
+ enc = bytes ? Encoding::BINARY : Encoding::UTF_8
530
+ out.force_encoding(enc)
519
531
  when :cbor, :cborseq
520
532
  unless target == [:prim, 2]
521
533
  fail "Don't know yet how to generate #{where}"
@@ -634,7 +646,7 @@ module CDDL
634
646
 
635
647
  def validate_result(check)
636
648
  check || (
637
- @last_message = yield
649
+ @last_message << yield
638
650
  false
639
651
  )
640
652
  end
@@ -667,7 +679,9 @@ module CDDL
667
679
  ann.concat(ann2)
668
680
  end
669
681
  if occ < s
670
- @last_message = "occur not reached in array #{d} for #{where}"
682
+ # warn "*** lme #{@last_message.encoding} #{@last_message}"
683
+ # warn "*** #{"\noccur #{occ} < #{s}, not reached at #{i} in array #{d} for #{where}".encoding}"
684
+ @last_message << "\noccur #{occ} < #{s}, not reached at #{i} in array #{d} for #{where}"
671
685
  return [false, ann]
672
686
  end
673
687
  end
@@ -908,17 +922,19 @@ module CDDL
908
922
  end
909
923
  end
910
924
  )
911
- when :abnf # XXX .abnf vs. .abnfb
925
+ when :abnf, :abnfb
912
926
  ann if (
913
927
  if String === d
914
928
  ok, v, vt = extract_value(control)
915
929
  if ok && vt == String
916
930
  begin
917
- ABNF_PARSER_FOR_STRING[v].validate(d)
931
+ ABNF_PARSER_FOR_STRING[v].validate(
932
+ d.dup.force_encoding(ABNF_ENCODING_FOR_CONOP[conop]).codepoints.pack("U*")
933
+ )
918
934
  true
919
935
  rescue => e
920
936
  # warn "*** #{e}" # XXX
921
- @last_message = e
937
+ @last_message = e.to_s.force_encoding(Encoding::UTF_8)
922
938
  nil
923
939
  end
924
940
  end
@@ -1278,7 +1294,8 @@ module CDDL
1278
1294
  BRACE = {"{" => :map, "[" => :array}
1279
1295
  RANGE_EXCLUDE_END = {".." => false, "..." => true}
1280
1296
  SUPPORTED_ANNOTATIONS = [:bits, :size, :regexp, :cbor, :cborseq, :within, :and,
1281
- :default, :lt, :le, :gt, :ge, :eq, :ne, :feature, :abnf, :cat, :plus]
1297
+ :default, :lt, :le, :gt, :ge, :eq, :ne,
1298
+ :feature, :abnf, :abnfb, :cat, :plus]
1282
1299
 
1283
1300
  def type1(n, canbegroup = false)
1284
1301
  # puts "NVALUE #{n.value.inspect}"
@@ -0,0 +1,32 @@
1
+ start = [tt, tb, bt, bb]
2
+
3
+
4
+ tt = text .abnf '4DIGIT 1FOO
5
+ DIGIT = %x30-39 ; 0-9
6
+ FOO = %xc0-cf
7
+ '
8
+ tb = text .abnfb '4DIGIT 1FOO
9
+ DIGIT = %x30-39 ; 0-9
10
+ FOO = %xc0-cf
11
+ '
12
+ bt = bytes .abnf '4DIGIT 1FOO
13
+ DIGIT = %x30-39 ; 0-9
14
+ FOO = %xc0-cf
15
+ '
16
+ bb = bytes .abnfb '4DIGIT 1FOO
17
+ DIGIT = %x30-39 ; 0-9
18
+ FOO = %xc0-cf
19
+ '
20
+
21
+ ; ["7408\xC6", "7073\xC3", h'30383131CD', h'32363738CD']
22
+ ; ["5892\u00ca", "2145\u00c6", h'33333338C38B', h'31343033C388']
23
+
24
+
25
+ ; ** ENCOED UTF-8
26
+ ; ** ENCOED UTF-8
27
+ ; ** ENCOED UTF-8
28
+ ; ** ENCOED UTF-8
29
+ ; ["5845\u00c6", "9329\u00cb", h'38393538C389', h'33343230C386']
30
+
31
+
32
+ ; ["1066\u00cc", "9253\xC9", h'38333533C38A', h'32373337C4']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cddl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.18
4
+ version: 0.8.19
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-02-25 00:00:00.000000000 Z
11
+ date: 2021-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor-diag
@@ -116,6 +116,7 @@ files:
116
116
  - test-data/abignum.cddl
117
117
  - test-data/abnf1.cddl
118
118
  - test-data/abnf2.cddl
119
+ - test-data/abnf3.cddl
119
120
  - test-data/ambig.cddl
120
121
  - test-data/b.cddl
121
122
  - test-data/badaddr.cddl