cddl 0.8.26 → 0.12.14

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: 47f3304378cd8f42807f0b96551a9b8cd5c609741d9a1e508c7c68913bf591d0
4
- data.tar.gz: 312535858550c20a3415238c8f26b5c96f2036707e305bd6665b12bb73e4addc
3
+ metadata.gz: a4b5bfb31fd9b7fcf4cf66a1d0f2a76550c9682215c486d99a03997bab1ae30b
4
+ data.tar.gz: 97f11378fb18576f115ffb8cbd668fe9e14e33e91e4aac01d874c69e206f2fbd
5
5
  SHA512:
6
- metadata.gz: 36ef0f6662d44814da072251405894b4b70ef20a6a493e8de7b597ece370e774cbf8fe8d2da35c2baa5f8b08adffc1a98dffaf1535907aca11a1a3936b11286a
7
- data.tar.gz: a6a731d5d348156deb0b2e3415bf6c944198bcfc7ca33632ee7f4d40e07ce832bbcadcc1b4bab4d8f75653932b9f82cba2c4ccbef662af49c81554edb2e77480
6
+ metadata.gz: 623f3945c3fff7c04dd2a4e1c77879d585d347092c87b54d5ead6b8fb3ed3c5ab68a58ae67b7f3f936437c8bc9f92dea6f8597509ba8913fbc5e2e47f43d398a
7
+ data.tar.gz: a04d3f282b0d42182f63dd66988fece8fb0ab7ddb4e159b2f8213705503cff0a97b622a172096b881dc4fe70f16bdcc48a51fa035413bc55421bb5e15d1bcda3
data/bin/cddl CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env RUBY_THREAD_VM_STACK_SIZE=5000000 ruby
2
2
  # -*- coding: utf-8 -*-
3
3
  # require_relative '../lib/cddl'
4
4
  require 'cddl'
@@ -7,10 +7,13 @@ require 'json'
7
7
 
8
8
  Encoding.default_external = "UTF-8" # wake up, smell the coffee
9
9
 
10
+ CDDL_VERSION = Gem.loaded_specs["cddl"].version rescue "unknown-version"
11
+
10
12
  EX_USAGE = 64
11
13
  EX_DATAERR = 65
12
14
 
13
15
  def usage
16
+ warn "cddl tool version #{CDDL_VERSION}"
14
17
  warn "Usage:"
15
18
  warn "#$0 spec.cddl generate [n]"
16
19
  warn "#$0 spec.cddl json-generate [n]"
@@ -19,6 +22,13 @@ def usage
19
22
  exit EX_USAGE
20
23
  end
21
24
 
25
+ def utfify(s)
26
+ s.force_encoding(Encoding::UTF_8).scrub { |c|
27
+ warn "*** replaced invalid UTF-8 byte sequence #{c.inspect} by U+FFFD REPLACEMENT CHARACTER"
28
+ 0xFFFD.chr(Encoding::UTF_8)
29
+ }
30
+ end
31
+
22
32
  def read_arg(arg, remember_fn = true)
23
33
  if arg == "-"
24
34
  $fn = "(stdin)" if remember_fn
@@ -31,7 +41,7 @@ def read_arg(arg, remember_fn = true)
31
41
  end
32
42
 
33
43
  def parser
34
- @parser ||= CDDL::Parser.new(read_arg(ARGV[0], false))
44
+ @parser ||= CDDL::Parser.new(utfify(read_arg(ARGV[0], false)))
35
45
  end
36
46
 
37
47
  def my_pp(v)
@@ -96,7 +106,12 @@ begin
96
106
  instance = if $sequence
97
107
  CBOR.decode("\x9f".b << instance.b << "\xff".b)
98
108
  else
99
- CBOR.decode(instance.b) rescue JSON.load(instance)
109
+ begin
110
+ CBOR.decode(instance.b)
111
+ rescue => e
112
+ warn e.inspect if verbose
113
+ JSON.load(utfify(instance))
114
+ end
100
115
  end
101
116
  instance = instance.cbor_clone if $annotate && ENV["EXPERIMENTAL_ANNOTATE"]
102
117
  warn "#{fn}:" if verbose
@@ -104,6 +119,7 @@ begin
104
119
  # my_pp ann
105
120
  instance.cbor_add_annotations_from(ann) rescue nil
106
121
  my_diag(instance) if $annotate
122
+ warn "ann: #{!!ann}" if verbose
107
123
  unless ann
108
124
  retcode = 1
109
125
  end
data/cddl.gemspec CHANGED
@@ -1,23 +1,25 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'cddl'
3
- s.version = '0.8.26'
3
+ s.version = '0.12.14'
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')
7
- s.add_dependency('abnc')
8
- s.add_dependency('json')
7
+ s.add_dependency('abnc', '~> 0.1.1')
8
+ s.add_dependency('json_pure')
9
9
  s.add_dependency('abnftt')
10
- s.add_dependency('regexp-examples') # , '1.1.0')
10
+ s.add_dependency('regexp-examples', '~> 1.5.1') # , '1.1.0')
11
11
  s.add_dependency('colorize')
12
+ s.add_dependency('base32', '~> 0.3')
13
+ s.add_dependency('base45_lite', '~> 1.0')
14
+ s.add_dependency('scanf', '~> 1.0')
12
15
  s.files = `git ls-files`.split("\n").grep(/^[a-z]/)
13
16
  s.files = Dir['lib/**/*.rb'] + %w(cddl.gemspec) + Dir['data/**/*.abnf'] + Dir['data/**/*.cddl'] + Dir['test-data/**/*.cddl'] + Dir['test/**/*.rb']
14
17
  s.require_path = 'lib'
15
18
  s.executables = ['cddl']
16
- s.default_executable = 'cddl'
17
- s.required_ruby_version = '>= 2.0'
19
+ s.required_ruby_version = '>= 2.3'
18
20
  s.author = "Carsten Bormann"
19
21
  s.email = "cabo@tzi.org"
20
- s.homepage = "http://github.com/cabo/cddl"
22
+ s.homepage = "https://www.rfc-editor.org/rfc/rfc8610#appendix-F"
21
23
  s.license = 'MIT'
22
24
  end
23
25
 
data/data/cddl.abnf CHANGED
@@ -13,7 +13,8 @@ genericarg = "<" S type1 S *("," S type1 S ) ">"
13
13
  type = type1 S *("/" S type1 S)
14
14
 
15
15
  type1 = type2 [S (rangeop / annotator) S type2]
16
- / "#" "6" ["." uint] "(" S type S ")" ; note no space!
16
+ / "#" "6" ["." headnumber] "(" S type S ")" ; note no space!
17
+ / "#" "7" ["." headnumber] ; note no space!
17
18
  / "#" DIGIT ["." uint] ; major/ai
18
19
  / "#" ; any
19
20
  / "~" S typename [genericarg]
@@ -22,6 +23,8 @@ type1 = type2 [S (rangeop / annotator) S type2]
22
23
  / "&" S "(" S group S ")"
23
24
  / "&" S groupname [genericarg]
24
25
 
26
+ headnumber = uint / ("<" type ">")
27
+
25
28
  type2 = value
26
29
  / typename [genericarg]
27
30
  / "(" type ")"
@@ -38,7 +41,7 @@ grpent = [occur S] [memberkey S] type optcom
38
41
  / [occur S] groupname [genericarg] optcom ; preempted by above
39
42
  / [occur S] "(" S group S ")" optcom
40
43
 
41
- memberkey = type1 S "=>"
44
+ memberkey = type1 S ["^" S] "=>"
42
45
  / bareword S ":"
43
46
  / value S ":"
44
47
 
@@ -62,32 +65,45 @@ value = number
62
65
  int = ["-"] uint
63
66
 
64
67
  ; This is a float if it has fraction or exponent; int otherwise
65
- number = int ["." fraction] ["e" exponent ]
68
+ number = hexfloat / (int ["." fraction] ["e" exponent ])
69
+ hexfloat = ["-"] "0x" 1*HEXDIG ["." 1*HEXDIG] "p" exponent
66
70
  fraction = 1*DIGIT
67
- exponent = int
71
+ exponent = ["+"/"-"] 1*DIGIT
68
72
 
69
73
  text = %x22 *SCHAR %x22
70
- SCHAR = %x20-21 / %x23-7E / SESC
71
- SESC = "\" %x20-7E
74
+ SCHAR = %x20-21 / %x23-5B / %x5D-7E / NONASCII / SESC
75
+
76
+ SESC = "\" ( %x22 / "/" / "\" / ; \" \/ \\
77
+ %x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t
78
+ (%x75 hexchar) ) ; \uXXXX
79
+
80
+ hexchar = "{" (1*"0" [ hexscalar ] / hexscalar) "}" /
81
+ non-surrogate / (high-surrogate "\" %x75 low-surrogate)
82
+ non-surrogate = ((DIGIT / "A"/"B"/"C" / "E"/"F") HEXDIG HEXDIG HEXDIG) /
83
+ ("D" %x30-37 HEXDIG HEXDIG)
84
+ high-surrogate = "D" ("8"/"9"/"A"/"B") HEXDIG HEXDIG
85
+ low-surrogate = "D" ("C"/"D"/"E"/"F") HEXDIG HEXDIG
86
+ hexscalar = "10" HEXDIG HEXDIG HEXDIG HEXDIG / HEXDIG1 HEXDIG HEXDIG HEXDIG HEXDIG
87
+ / non-surrogate / HEXDIG [HEXDIG [HEXDIG]]
72
88
 
73
89
  bytes = [bsqual] %x27 *BCHAR %x27
74
- BCHAR = %x20-26 / %x28-7E / SESC / CRLF
75
- bsqual = %x68 ; "h"
76
- / %x62.36.34 ; "b64"
90
+ BCHAR = %x20-26 / %x28-5B / %x5D-7E / NONASCII / SESC / "\'" / CRLF
91
+ bsqual = "h" / "b64"
77
92
 
78
93
  id = EALPHA *(*("-" / ".") (EALPHA / DIGIT))
79
94
  ALPHA = %x41-5A / %x61-7A
80
- EALPHA = %x41-5A / %x61-7A / "@" / "_" / "$"
95
+ EALPHA = ALPHA / "@" / "_" / "$"
81
96
  DIGIT = %x30-39
82
97
  DIGIT1 = %x31-39
83
98
  HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
99
+ HEXDIG1 = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F"
84
100
  BINDIG = %x30-31
85
101
 
86
102
  S = *WS
87
103
  WS = SP / NL
88
104
  SP = %x20
89
105
  NL = COMMENT / CRLF
90
- COMMENT = ";" *(SP / VCHAR) CRLF
91
- VCHAR = %x21-7E
106
+ COMMENT = ";" *PCHAR CRLF
107
+ PCHAR = %x20-7E / NONASCII
108
+ NONASCII = %xA0-D7FF / %xE000-10FFFD
92
109
  CRLF = %x0A / %x0D.0A
93
-
data/lib/cbor-pp-play.rb CHANGED
@@ -2,6 +2,7 @@ require_relative "cbor-pp"
2
2
 
3
3
  a = [1, {foo: "bar", busel: "basel", baz: "bass", ant: "cat", bat: "dog", eel: "fox"},
4
4
  2, 3, 4, [3]*55, "foo".b, 0.00006103515625, 0.0000099, 1e-7, nil]
5
+ a[0].cbor_annotation_add "flurp"
5
6
  a[1].cbor_annotation_add "fasel"
6
7
  CBOR::PP.pp a
7
8