cddl 0.8.18 → 0.8.19

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: 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