edn-abnf 0.5.32 → 0.5.35

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: 526056ed796bf81ffc83f6042d90706a446955e4069c10382f253e68b29fe587
4
- data.tar.gz: 9f0221ad1617fcdf26411960ded59fb620a7a3a66175d15547a3b24f4e24885a
3
+ metadata.gz: 066fe883e4f63f1d4f093c32c280a69ad282f587bd289224b5f9c3c869be7e73
4
+ data.tar.gz: 34bccaaa9015884fbb9bc9dcc9f8c1eba352dc0178a5ba33c6a71305c2d2b51c
5
5
  SHA512:
6
- metadata.gz: fdf3bda3807bbf83935287d370927b2c10d02b667a72468b620ad7745e7ecdbca275a519b574133f5107cfd4fbe17d4b9bdcb81acc59df61e082d40c0e6c91e9
7
- data.tar.gz: f7a0085dc92fe04f4b11e6872b518ff6bc7382813195cbf7d929fcf7281152c388c3790f09d57c71a2971e6fae5b0b4b28448474fbabea55e656c715cbcde045
6
+ metadata.gz: 5ca8b9c5816196a430547ebe8ed8b6b90599161b41f51443bb319cec2b86220ffe158df62f5520afbd67cb3450ecebc3ce0e970c90e8f3040f7dd1eb355f7543
7
+ data.tar.gz: b1bfc0fc1f5b6f076837b47900ceb9962163e32a488ef3c89d63ac1135eec991c7c8d3fa69cbf5355d7af8757c232f7fd89cd8ffdecd38a5b1ea8ae6152007b6
data/edn-abnf.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "edn-abnf"
3
- s.version = "0.5.32"
3
+ s.version = "0.5.35"
4
4
  s.summary = "CBOR Extended Diagnostic Notation (EDN) implemented in ABNF"
5
5
  s.description = %q{edn-abnf implements converters and miscellaneous tools for CBOR EDN's ABNF}
6
6
  s.author = "Carsten Bormann"
@@ -12,7 +12,7 @@ module CBOR
12
12
  def inspect
13
13
  "#<CBOR::Box #{self.class} value=#{value.inspect}, options=#{options.inspect}>"
14
14
  end
15
- def self.from_number(n, options={})
15
+ def self.from_instance(n, options={})
16
16
  case n
17
17
  when Box
18
18
  n.class.new(n.value, n.options.merge(options))
@@ -20,23 +20,13 @@ module CBOR
20
20
  Ibox.new(n, options.dup)
21
21
  when ::Float
22
22
  Fbox.new(n, options.dup)
23
+ when ::String, ::Array, ::Hash, ::CBOR::Tagged
24
+ Xbox.new(n, options.dup)
23
25
  else
24
26
  raise ArgumentError, "cbor-diagnostic: can't box number from #{n.inspect}':\n"
25
27
  end
26
28
  end
27
- def to_cbor
28
- CBOR.encode(value)
29
- end
30
- def cbor_diagnostic(opts = {})
31
- ret = value.cbor_diagnostic(opts)
32
- if ei = options[:ei]
33
- ret << "_#{ei}"
34
- end
35
- ret
36
- end
37
- end
38
29
 
39
- class Ibox < Box
40
30
  INTEGER_EI = {
41
31
  "i" => [23, 0],
42
32
  "0" => [0xFF, 1],
@@ -44,7 +34,7 @@ module CBOR
44
34
  "2" => [0xFFFFFFFF, 4],
45
35
  "3" => [0xFFFFFFFFFFFFFFFF, 8]
46
36
  }
47
- def make_head(ib, plusbytes, d)
37
+ def self.make_head(ib, plusbytes, d)
48
38
  case plusbytes
49
39
  when 0
50
40
  [ib + d].pack("C")
@@ -61,6 +51,52 @@ module CBOR
61
51
  end
62
52
  end
63
53
 
54
+ def to_cbor
55
+ CBOR.encode(value)
56
+ end
57
+ def cbor_diagnostic(opts = {})
58
+ ret = value.cbor_diagnostic(opts)
59
+ if ei = options[:ei]
60
+ ret << "_#{ei}"
61
+ end
62
+ ret
63
+ end
64
+ end
65
+
66
+ class Xbox < Box
67
+ def to_cbor
68
+ enc = CBOR.encode(value)
69
+ if ei = options[:ei]
70
+ maxval, plusbytes = INTEGER_EI[ei]
71
+ if maxval
72
+ ib = enc.getbyte(0) & 0xE0
73
+ ai = enc.getbyte(0) & 0x1F
74
+ d, replacement = case ai
75
+ when 0...24; [ai, 0]
76
+ when 24; [enc[1..1].ord, 1]
77
+ when 25; [enc[1..2].unpack1("n"), 2]
78
+ when 26; [enc[1..4].unpack1("N"), 4]
79
+ when 27; [enc[1..8].unpack1("Q>"), 8]
80
+ # when 31; XXX conflicting EI information
81
+ else raise "unknown additional information #{ai} in ib #{ib}"
82
+ end
83
+ raise ArgumentError, "cbor-diagnostic: #{value} doesn't fit into encoding indicator _#{ei}':\n" unless d <= maxval
84
+ ib = enc.getbyte(0) & 0xE0
85
+ new_head = CBOR::Ibox.make_head(ib, plusbytes, d)
86
+ enc[0..replacement] = new_head
87
+ else
88
+ if ei == "" && value == ""
89
+ enc = CBOR.encode(value.cbor_stream!([]))
90
+ else
91
+ warn "*** cbor-diagnostic: ignoring unsupported encoding indicator _#{ei} for #{value.inspect}"
92
+ end
93
+ end
94
+ end
95
+ enc
96
+ end
97
+ end
98
+
99
+ class Ibox < Box
64
100
  def to_cbor
65
101
  if ei = options[:ei]
66
102
  maxval, plusbytes = INTEGER_EI[ei]
@@ -74,7 +110,7 @@ module CBOR
74
110
  end
75
111
  raise ArgumentError, "cbor-diagnostic: #{value} doesn't fit into encoding indicator _#{ei}':\n" unless d <= maxval
76
112
 
77
- make_head(ib, plusbytes, d)
113
+ CBOR::Ibox.make_head(ib, plusbytes, d)
78
114
 
79
115
  # s = bignum_to_bytes(d)
80
116
  # head(0xc0, TAG_BIGNUM_BASE + (ib >> 5))
@@ -197,10 +197,12 @@ module EDNGRAMMAR
197
197
 
198
198
  module String11
199
199
  def ast
200
+ val = elements[0].ast
200
201
  if ei = spec.text_value[1..-1]
201
- warn "*** ignoring unimplemented encoding indicator #{ei.inspect} for #{elements[0].text_value}"
202
+ # warn "*** implementing encoding indicator #{ei.inspect} for #{elements[0].text_value}"
203
+ val = CBOR::Box.from_instance(val, {ei: ei})
202
204
  end
203
- elements[0].ast
205
+ val
204
206
  end
205
207
  end
206
208
 
@@ -452,7 +454,7 @@ module EDNGRAMMAR
452
454
 
453
455
  if ei = spec.text_value[1..-1]
454
456
  # warn "*** implementing encoding indicator #{ei.inspect} for #{elements[0].text_value}"
455
- val = CBOR::Box.from_number(val, {ei: ei})
457
+ val = CBOR::Box.from_instance(val, {ei: ei})
456
458
  end
457
459
  val
458
460
  end
@@ -1800,10 +1802,12 @@ module EDNGRAMMAR
1800
1802
 
1801
1803
  module Tagged1
1802
1804
  def ast
1805
+ val = CBOR::Tagged.new(uint.text_value.to_i, item.ast)
1803
1806
  if ei = spec.text_value[1..-1]
1804
- warn "*** ignoring unimplemented encoding indicator #{ei.inspect} after tag number #{uint.text_value}"
1807
+ val = CBOR::Box.from_instance(val, {ei: ei})
1808
+ # warn "*** implementing encoding indicator #{ei.inspect} after tag number #{uint.text_value}"
1805
1809
  end
1806
- CBOR::Tagged.new(uint.text_value.to_i, item.ast)
1810
+ val
1807
1811
  end
1808
1812
  end
1809
1813
 
@@ -2634,6 +2638,28 @@ module EDNGRAMMAR
2634
2638
  def ast; elements[0].ast end
2635
2639
  end
2636
2640
 
2641
+ module Bstr8
2642
+ def sq_app_string_dt
2643
+ elements[0]
2644
+ end
2645
+
2646
+ end
2647
+
2648
+ module Bstr9
2649
+ def ast; elements[0].ast end
2650
+ end
2651
+
2652
+ module Bstr10
2653
+ def raw_app_string_dt
2654
+ elements[0]
2655
+ end
2656
+
2657
+ end
2658
+
2659
+ module Bstr11
2660
+ def ast; elements[0].ast end
2661
+ end
2662
+
2637
2663
  def _nt_bstr
2638
2664
  start_index = index
2639
2665
  if node_cache[:bstr].has_key?(index)
@@ -2766,38 +2792,100 @@ module EDNGRAMMAR
2766
2792
  r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
2767
2793
  r0 = r13
2768
2794
  else
2769
- r17 = _nt_app_string
2795
+ i17, s17 = index, []
2796
+ r18 = _nt_sq_app_string_dt
2797
+ s17 << r18
2798
+ if r18
2799
+ i19 = index
2800
+ r20 = lambda {|x|$options.integrated}.call(s17)
2801
+ if !r20
2802
+ terminal_parse_failure("<semantic predicate>")
2803
+ end
2804
+ if r20
2805
+ @index = i19
2806
+ r19 = instantiate_node(SyntaxNode,input, index...index)
2807
+ else
2808
+ @index = i19
2809
+ r19 = nil
2810
+ end
2811
+ s17 << r19
2812
+ end
2813
+ if s17.last
2814
+ r17 = instantiate_node(SyntaxNode,input, i17...index, s17)
2815
+ r17.extend(Bstr8)
2816
+ r17.extend(Bstr9)
2817
+ else
2818
+ @index = i17
2819
+ r17 = nil
2820
+ end
2770
2821
  if r17
2771
2822
  r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
2772
2823
  r0 = r17
2773
2824
  else
2774
- r18 = _nt_sqstr
2775
- if r18
2776
- r18 = SyntaxNode.new(input, (index-1)...index) if r18 == true
2777
- r0 = r18
2825
+ i21, s21 = index, []
2826
+ r22 = _nt_raw_app_string_dt
2827
+ s21 << r22
2828
+ if r22
2829
+ i23 = index
2830
+ r24 = lambda {|x|$options.integrated}.call(s21)
2831
+ if !r24
2832
+ terminal_parse_failure("<semantic predicate>")
2833
+ end
2834
+ if r24
2835
+ @index = i23
2836
+ r23 = instantiate_node(SyntaxNode,input, index...index)
2837
+ else
2838
+ @index = i23
2839
+ r23 = nil
2840
+ end
2841
+ s21 << r23
2842
+ end
2843
+ if s21.last
2844
+ r21 = instantiate_node(SyntaxNode,input, i21...index, s21)
2845
+ r21.extend(Bstr10)
2846
+ r21.extend(Bstr11)
2847
+ else
2848
+ @index = i21
2849
+ r21 = nil
2850
+ end
2851
+ if r21
2852
+ r21 = SyntaxNode.new(input, (index-1)...index) if r21 == true
2853
+ r0 = r21
2778
2854
  else
2779
- r19 = _nt_app_rstring
2780
- if r19
2781
- r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
2782
- r0 = r19
2855
+ r25 = _nt_app_string
2856
+ if r25
2857
+ r25 = SyntaxNode.new(input, (index-1)...index) if r25 == true
2858
+ r0 = r25
2783
2859
  else
2784
- r20 = _nt_rawstring
2785
- if r20
2786
- r20 = SyntaxNode.new(input, (index-1)...index) if r20 == true
2787
- r0 = r20
2860
+ r26 = _nt_sqstr
2861
+ if r26
2862
+ r26 = SyntaxNode.new(input, (index-1)...index) if r26 == true
2863
+ r0 = r26
2788
2864
  else
2789
- r21 = _nt_app_sequence
2790
- if r21
2791
- r21 = SyntaxNode.new(input, (index-1)...index) if r21 == true
2792
- r0 = r21
2865
+ r27 = _nt_app_rstring
2866
+ if r27
2867
+ r27 = SyntaxNode.new(input, (index-1)...index) if r27 == true
2868
+ r0 = r27
2793
2869
  else
2794
- r22 = _nt_embedded
2795
- if r22
2796
- r22 = SyntaxNode.new(input, (index-1)...index) if r22 == true
2797
- r0 = r22
2870
+ r28 = _nt_rawstring
2871
+ if r28
2872
+ r28 = SyntaxNode.new(input, (index-1)...index) if r28 == true
2873
+ r0 = r28
2798
2874
  else
2799
- @index = i0
2800
- r0 = nil
2875
+ r29 = _nt_app_sequence
2876
+ if r29
2877
+ r29 = SyntaxNode.new(input, (index-1)...index) if r29 == true
2878
+ r0 = r29
2879
+ else
2880
+ r30 = _nt_embedded
2881
+ if r30
2882
+ r30 = SyntaxNode.new(input, (index-1)...index) if r30 == true
2883
+ r0 = r30
2884
+ else
2885
+ @index = i0
2886
+ r0 = nil
2887
+ end
2888
+ end
2801
2889
  end
2802
2890
  end
2803
2891
  end
@@ -3000,7 +3088,8 @@ module EDNGRAMMAR
3000
3088
  if ei == ""
3001
3089
  r.cbor_stream!
3002
3090
  elsif ei
3003
- warn "*** ignoring unimplemented encoding indicator #{ei.inspect} after ["
3091
+ r = CBOR::Box.from_instance(r, {ei: ei})
3092
+ # warn "*** implementing XXX encoding indicator #{ei.inspect} after ["
3004
3093
  end
3005
3094
  r
3006
3095
  end
@@ -3187,7 +3276,8 @@ module EDNGRAMMAR
3187
3276
  if ei == ""
3188
3277
  r.cbor_stream!
3189
3278
  elsif ei
3190
- warn "*** ignoring unimplemented encoding indicator #{ei.inspect} after {" # }
3279
+ r = CBOR::Box.from_instance(r, {ei: ei})
3280
+ # warn "*** implementing encoding indicator #{ei.inspect} after {" # }
3191
3281
  end
3192
3282
  r
3193
3283
  end
@@ -11603,6 +11693,943 @@ module EDNGRAMMAR
11603
11693
  r0
11604
11694
  end
11605
11695
 
11696
+ def _nt_app_string_dt_prefix
11697
+ start_index = index
11698
+ if node_cache[:app_string_dt_prefix].has_key?(index)
11699
+ cached = node_cache[:app_string_dt_prefix][index]
11700
+ if cached
11701
+ node_cache[:app_string_dt_prefix][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
11702
+ @index = cached.interval.end
11703
+ end
11704
+ return cached
11705
+ end
11706
+
11707
+ i0 = index
11708
+ if (match_len = has_terminal?("dt", false, index))
11709
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
11710
+ @index += match_len
11711
+ else
11712
+ terminal_parse_failure('"dt"')
11713
+ r1 = nil
11714
+ end
11715
+ if r1
11716
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
11717
+ r0 = r1
11718
+ else
11719
+ if (match_len = has_terminal?("DT", false, index))
11720
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
11721
+ @index += match_len
11722
+ else
11723
+ terminal_parse_failure('"DT"')
11724
+ r2 = nil
11725
+ end
11726
+ if r2
11727
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
11728
+ r0 = r2
11729
+ else
11730
+ @index = i0
11731
+ r0 = nil
11732
+ end
11733
+ end
11734
+
11735
+ node_cache[:app_string_dt_prefix][start_index] = r0
11736
+
11737
+ r0
11738
+ end
11739
+
11740
+ module SqAppStringDt0
11741
+ def app_string_dt_prefix
11742
+ elements[0]
11743
+ end
11744
+
11745
+ def SQUOTE1
11746
+ elements[1]
11747
+ end
11748
+
11749
+ def app_string_dt
11750
+ elements[2]
11751
+ end
11752
+
11753
+ def SQUOTE2
11754
+ elements[3]
11755
+ end
11756
+ end
11757
+
11758
+ module SqAppStringDt1
11759
+ def ast
11760
+ CBOR_DIAG::App_dt.decode(app_string_dt_prefix.text_value, app_string_dt.ast)
11761
+ end
11762
+ end
11763
+
11764
+ def _nt_sq_app_string_dt
11765
+ start_index = index
11766
+ if node_cache[:sq_app_string_dt].has_key?(index)
11767
+ cached = node_cache[:sq_app_string_dt][index]
11768
+ if cached
11769
+ node_cache[:sq_app_string_dt][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
11770
+ @index = cached.interval.end
11771
+ end
11772
+ return cached
11773
+ end
11774
+
11775
+ i0, s0 = index, []
11776
+ r1 = _nt_app_string_dt_prefix
11777
+ s0 << r1
11778
+ if r1
11779
+ r2 = _nt_SQUOTE
11780
+ s0 << r2
11781
+ if r2
11782
+ r3 = _nt_app_string_dt
11783
+ s0 << r3
11784
+ if r3
11785
+ r4 = _nt_SQUOTE
11786
+ s0 << r4
11787
+ end
11788
+ end
11789
+ end
11790
+ if s0.last
11791
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
11792
+ r0.extend(SqAppStringDt0)
11793
+ r0.extend(SqAppStringDt1)
11794
+ else
11795
+ @index = i0
11796
+ r0 = nil
11797
+ end
11798
+
11799
+ node_cache[:sq_app_string_dt][start_index] = r0
11800
+
11801
+ r0
11802
+ end
11803
+
11804
+ module RawAppStringDt0
11805
+ def app_string_dt_prefix
11806
+ elements[0]
11807
+ end
11808
+
11809
+ def app_string_dt_raw1
11810
+ elements[1]
11811
+ end
11812
+ end
11813
+
11814
+ module RawAppStringDt1
11815
+ def ast
11816
+ CBOR_DIAG::App_dt.decode(app_string_dt_prefix.text_value, app_string_dt_raw1.ast)
11817
+ end
11818
+ end
11819
+
11820
+ def _nt_raw_app_string_dt
11821
+ start_index = index
11822
+ if node_cache[:raw_app_string_dt].has_key?(index)
11823
+ cached = node_cache[:raw_app_string_dt][index]
11824
+ if cached
11825
+ node_cache[:raw_app_string_dt][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
11826
+ @index = cached.interval.end
11827
+ end
11828
+ return cached
11829
+ end
11830
+
11831
+ i0, s0 = index, []
11832
+ r1 = _nt_app_string_dt_prefix
11833
+ s0 << r1
11834
+ if r1
11835
+ r2 = _nt_app_string_dt_raw1
11836
+ s0 << r2
11837
+ end
11838
+ if s0.last
11839
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
11840
+ r0.extend(RawAppStringDt0)
11841
+ r0.extend(RawAppStringDt1)
11842
+ else
11843
+ @index = i0
11844
+ r0 = nil
11845
+ end
11846
+
11847
+ node_cache[:raw_app_string_dt][start_index] = r0
11848
+
11849
+ r0
11850
+ end
11851
+
11852
+ module AppStringDtRaw10
11853
+ end
11854
+
11855
+ module AppStringDtRaw11
11856
+ def ast; elements[1].ast; end
11857
+ end
11858
+
11859
+ def _nt_app_string_dt_raw1
11860
+ start_index = index
11861
+ if node_cache[:app_string_dt_raw1].has_key?(index)
11862
+ cached = node_cache[:app_string_dt_raw1][index]
11863
+ if cached
11864
+ node_cache[:app_string_dt_raw1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
11865
+ @index = cached.interval.end
11866
+ end
11867
+ return cached
11868
+ end
11869
+
11870
+ i0, s0 = index, []
11871
+ if (match_len = has_terminal?("`", false, index))
11872
+ r1 = true
11873
+ @index += match_len
11874
+ else
11875
+ terminal_parse_failure('"`"')
11876
+ r1 = nil
11877
+ end
11878
+ s0 << r1
11879
+ if r1
11880
+ i2 = index
11881
+ r3 = _nt_app_string_dt_raw2
11882
+ if r3
11883
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
11884
+ r2 = r3
11885
+ else
11886
+ r4 = _nt_app_string_dt_raw1
11887
+ if r4
11888
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
11889
+ r2 = r4
11890
+ else
11891
+ @index = i2
11892
+ r2 = nil
11893
+ end
11894
+ end
11895
+ s0 << r2
11896
+ if r2
11897
+ if (match_len = has_terminal?("`", false, index))
11898
+ r5 = true
11899
+ @index += match_len
11900
+ else
11901
+ terminal_parse_failure('"`"')
11902
+ r5 = nil
11903
+ end
11904
+ s0 << r5
11905
+ end
11906
+ end
11907
+ if s0.last
11908
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
11909
+ r0.extend(AppStringDtRaw10)
11910
+ r0.extend(AppStringDtRaw11)
11911
+ else
11912
+ @index = i0
11913
+ r0 = nil
11914
+ end
11915
+
11916
+ node_cache[:app_string_dt_raw1][start_index] = r0
11917
+
11918
+ r0
11919
+ end
11920
+
11921
+ module AppStringDtRaw20
11922
+ def app_string_dt
11923
+ elements[1]
11924
+ end
11925
+ end
11926
+
11927
+ module AppStringDtRaw21
11928
+ def ast; elements[1].ast; end
11929
+ end
11930
+
11931
+ def _nt_app_string_dt_raw2
11932
+ start_index = index
11933
+ if node_cache[:app_string_dt_raw2].has_key?(index)
11934
+ cached = node_cache[:app_string_dt_raw2][index]
11935
+ if cached
11936
+ node_cache[:app_string_dt_raw2][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
11937
+ @index = cached.interval.end
11938
+ end
11939
+ return cached
11940
+ end
11941
+
11942
+ i0, s0 = index, []
11943
+ r2 = _nt_newline
11944
+ if r2
11945
+ r1 = r2
11946
+ else
11947
+ r1 = instantiate_node(SyntaxNode,input, index...index)
11948
+ end
11949
+ s0 << r1
11950
+ if r1
11951
+ r3 = _nt_app_string_dt
11952
+ s0 << r3
11953
+ end
11954
+ if s0.last
11955
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
11956
+ r0.extend(AppStringDtRaw20)
11957
+ r0.extend(AppStringDtRaw21)
11958
+ else
11959
+ @index = i0
11960
+ r0 = nil
11961
+ end
11962
+
11963
+ node_cache[:app_string_dt_raw2][start_index] = r0
11964
+
11965
+ r0
11966
+ end
11967
+
11968
+ module AppStringDt0
11969
+ def ast; text_value; end
11970
+ end
11971
+
11972
+ def _nt_app_string_dt
11973
+ start_index = index
11974
+ if node_cache[:app_string_dt].has_key?(index)
11975
+ cached = node_cache[:app_string_dt][index]
11976
+ if cached
11977
+ node_cache[:app_string_dt][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
11978
+ @index = cached.interval.end
11979
+ end
11980
+ return cached
11981
+ end
11982
+
11983
+ r0 = _nt_date_time
11984
+ r0.extend(AppStringDt0)
11985
+ r0.extend(AppStringDt0)
11986
+
11987
+ node_cache[:app_string_dt][start_index] = r0
11988
+
11989
+ r0
11990
+ end
11991
+
11992
+ def _nt_date_fullyear
11993
+ start_index = index
11994
+ if node_cache[:date_fullyear].has_key?(index)
11995
+ cached = node_cache[:date_fullyear][index]
11996
+ if cached
11997
+ node_cache[:date_fullyear][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
11998
+ @index = cached.interval.end
11999
+ end
12000
+ return cached
12001
+ end
12002
+
12003
+ s0, i0 = [], index
12004
+ loop do
12005
+ r1 = _nt_DIGIT
12006
+ if r1
12007
+ s0 << r1
12008
+ else
12009
+ break
12010
+ end
12011
+ if s0.size == 4
12012
+ break
12013
+ end
12014
+ end
12015
+ if s0.size < 4
12016
+ @index = i0
12017
+ r0 = nil
12018
+ else
12019
+ if s0.size < 4
12020
+ @terminal_failures.pop
12021
+ end
12022
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12023
+ end
12024
+
12025
+ node_cache[:date_fullyear][start_index] = r0
12026
+
12027
+ r0
12028
+ end
12029
+
12030
+ def _nt_date_month
12031
+ start_index = index
12032
+ if node_cache[:date_month].has_key?(index)
12033
+ cached = node_cache[:date_month][index]
12034
+ if cached
12035
+ node_cache[:date_month][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12036
+ @index = cached.interval.end
12037
+ end
12038
+ return cached
12039
+ end
12040
+
12041
+ s0, i0 = [], index
12042
+ loop do
12043
+ r1 = _nt_DIGIT
12044
+ if r1
12045
+ s0 << r1
12046
+ else
12047
+ break
12048
+ end
12049
+ if s0.size == 2
12050
+ break
12051
+ end
12052
+ end
12053
+ if s0.size < 2
12054
+ @index = i0
12055
+ r0 = nil
12056
+ else
12057
+ if s0.size < 2
12058
+ @terminal_failures.pop
12059
+ end
12060
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12061
+ end
12062
+
12063
+ node_cache[:date_month][start_index] = r0
12064
+
12065
+ r0
12066
+ end
12067
+
12068
+ def _nt_date_mday
12069
+ start_index = index
12070
+ if node_cache[:date_mday].has_key?(index)
12071
+ cached = node_cache[:date_mday][index]
12072
+ if cached
12073
+ node_cache[:date_mday][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12074
+ @index = cached.interval.end
12075
+ end
12076
+ return cached
12077
+ end
12078
+
12079
+ s0, i0 = [], index
12080
+ loop do
12081
+ r1 = _nt_DIGIT
12082
+ if r1
12083
+ s0 << r1
12084
+ else
12085
+ break
12086
+ end
12087
+ if s0.size == 2
12088
+ break
12089
+ end
12090
+ end
12091
+ if s0.size < 2
12092
+ @index = i0
12093
+ r0 = nil
12094
+ else
12095
+ if s0.size < 2
12096
+ @terminal_failures.pop
12097
+ end
12098
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12099
+ end
12100
+
12101
+ node_cache[:date_mday][start_index] = r0
12102
+
12103
+ r0
12104
+ end
12105
+
12106
+ def _nt_time_hour
12107
+ start_index = index
12108
+ if node_cache[:time_hour].has_key?(index)
12109
+ cached = node_cache[:time_hour][index]
12110
+ if cached
12111
+ node_cache[:time_hour][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12112
+ @index = cached.interval.end
12113
+ end
12114
+ return cached
12115
+ end
12116
+
12117
+ s0, i0 = [], index
12118
+ loop do
12119
+ r1 = _nt_DIGIT
12120
+ if r1
12121
+ s0 << r1
12122
+ else
12123
+ break
12124
+ end
12125
+ if s0.size == 2
12126
+ break
12127
+ end
12128
+ end
12129
+ if s0.size < 2
12130
+ @index = i0
12131
+ r0 = nil
12132
+ else
12133
+ if s0.size < 2
12134
+ @terminal_failures.pop
12135
+ end
12136
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12137
+ end
12138
+
12139
+ node_cache[:time_hour][start_index] = r0
12140
+
12141
+ r0
12142
+ end
12143
+
12144
+ def _nt_time_minute
12145
+ start_index = index
12146
+ if node_cache[:time_minute].has_key?(index)
12147
+ cached = node_cache[:time_minute][index]
12148
+ if cached
12149
+ node_cache[:time_minute][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12150
+ @index = cached.interval.end
12151
+ end
12152
+ return cached
12153
+ end
12154
+
12155
+ s0, i0 = [], index
12156
+ loop do
12157
+ r1 = _nt_DIGIT
12158
+ if r1
12159
+ s0 << r1
12160
+ else
12161
+ break
12162
+ end
12163
+ if s0.size == 2
12164
+ break
12165
+ end
12166
+ end
12167
+ if s0.size < 2
12168
+ @index = i0
12169
+ r0 = nil
12170
+ else
12171
+ if s0.size < 2
12172
+ @terminal_failures.pop
12173
+ end
12174
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12175
+ end
12176
+
12177
+ node_cache[:time_minute][start_index] = r0
12178
+
12179
+ r0
12180
+ end
12181
+
12182
+ def _nt_time_second
12183
+ start_index = index
12184
+ if node_cache[:time_second].has_key?(index)
12185
+ cached = node_cache[:time_second][index]
12186
+ if cached
12187
+ node_cache[:time_second][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12188
+ @index = cached.interval.end
12189
+ end
12190
+ return cached
12191
+ end
12192
+
12193
+ s0, i0 = [], index
12194
+ loop do
12195
+ r1 = _nt_DIGIT
12196
+ if r1
12197
+ s0 << r1
12198
+ else
12199
+ break
12200
+ end
12201
+ if s0.size == 2
12202
+ break
12203
+ end
12204
+ end
12205
+ if s0.size < 2
12206
+ @index = i0
12207
+ r0 = nil
12208
+ else
12209
+ if s0.size < 2
12210
+ @terminal_failures.pop
12211
+ end
12212
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12213
+ end
12214
+
12215
+ node_cache[:time_second][start_index] = r0
12216
+
12217
+ r0
12218
+ end
12219
+
12220
+ module TimeSecfrac0
12221
+ end
12222
+
12223
+ def _nt_time_secfrac
12224
+ start_index = index
12225
+ if node_cache[:time_secfrac].has_key?(index)
12226
+ cached = node_cache[:time_secfrac][index]
12227
+ if cached
12228
+ node_cache[:time_secfrac][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12229
+ @index = cached.interval.end
12230
+ end
12231
+ return cached
12232
+ end
12233
+
12234
+ i0, s0 = index, []
12235
+ if (match_len = has_terminal?(".", false, index))
12236
+ r1 = true
12237
+ @index += match_len
12238
+ else
12239
+ terminal_parse_failure('"."')
12240
+ r1 = nil
12241
+ end
12242
+ s0 << r1
12243
+ if r1
12244
+ s2, i2 = [], index
12245
+ loop do
12246
+ r3 = _nt_DIGIT
12247
+ if r3
12248
+ s2 << r3
12249
+ else
12250
+ break
12251
+ end
12252
+ end
12253
+ if s2.empty?
12254
+ @index = i2
12255
+ r2 = nil
12256
+ else
12257
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
12258
+ end
12259
+ s0 << r2
12260
+ end
12261
+ if s0.last
12262
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12263
+ r0.extend(TimeSecfrac0)
12264
+ else
12265
+ @index = i0
12266
+ r0 = nil
12267
+ end
12268
+
12269
+ node_cache[:time_secfrac][start_index] = r0
12270
+
12271
+ r0
12272
+ end
12273
+
12274
+ module TimeNumoffset0
12275
+ def time_hour
12276
+ elements[1]
12277
+ end
12278
+
12279
+ def time_minute
12280
+ elements[3]
12281
+ end
12282
+ end
12283
+
12284
+ def _nt_time_numoffset
12285
+ start_index = index
12286
+ if node_cache[:time_numoffset].has_key?(index)
12287
+ cached = node_cache[:time_numoffset][index]
12288
+ if cached
12289
+ node_cache[:time_numoffset][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12290
+ @index = cached.interval.end
12291
+ end
12292
+ return cached
12293
+ end
12294
+
12295
+ i0, s0 = index, []
12296
+ i1 = index
12297
+ if (match_len = has_terminal?("+", false, index))
12298
+ r2 = true
12299
+ @index += match_len
12300
+ else
12301
+ terminal_parse_failure('"+"')
12302
+ r2 = nil
12303
+ end
12304
+ if r2
12305
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
12306
+ r1 = r2
12307
+ else
12308
+ if (match_len = has_terminal?("-", false, index))
12309
+ r3 = true
12310
+ @index += match_len
12311
+ else
12312
+ terminal_parse_failure('"-"')
12313
+ r3 = nil
12314
+ end
12315
+ if r3
12316
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
12317
+ r1 = r3
12318
+ else
12319
+ @index = i1
12320
+ r1 = nil
12321
+ end
12322
+ end
12323
+ s0 << r1
12324
+ if r1
12325
+ r4 = _nt_time_hour
12326
+ s0 << r4
12327
+ if r4
12328
+ if (match_len = has_terminal?(":", false, index))
12329
+ r5 = true
12330
+ @index += match_len
12331
+ else
12332
+ terminal_parse_failure('":"')
12333
+ r5 = nil
12334
+ end
12335
+ s0 << r5
12336
+ if r5
12337
+ r6 = _nt_time_minute
12338
+ s0 << r6
12339
+ end
12340
+ end
12341
+ end
12342
+ if s0.last
12343
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12344
+ r0.extend(TimeNumoffset0)
12345
+ else
12346
+ @index = i0
12347
+ r0 = nil
12348
+ end
12349
+
12350
+ node_cache[:time_numoffset][start_index] = r0
12351
+
12352
+ r0
12353
+ end
12354
+
12355
+ def _nt_time_offset
12356
+ start_index = index
12357
+ if node_cache[:time_offset].has_key?(index)
12358
+ cached = node_cache[:time_offset][index]
12359
+ if cached
12360
+ node_cache[:time_offset][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12361
+ @index = cached.interval.end
12362
+ end
12363
+ return cached
12364
+ end
12365
+
12366
+ i0 = index
12367
+ if (match_len = has_terminal?("z", :insens, index))
12368
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
12369
+ @index += match_len
12370
+ else
12371
+ terminal_parse_failure('"Z"')
12372
+ r1 = nil
12373
+ end
12374
+ if r1
12375
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
12376
+ r0 = r1
12377
+ else
12378
+ r2 = _nt_time_numoffset
12379
+ if r2
12380
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
12381
+ r0 = r2
12382
+ else
12383
+ @index = i0
12384
+ r0 = nil
12385
+ end
12386
+ end
12387
+
12388
+ node_cache[:time_offset][start_index] = r0
12389
+
12390
+ r0
12391
+ end
12392
+
12393
+ module PartialTime0
12394
+ def time_hour
12395
+ elements[0]
12396
+ end
12397
+
12398
+ def time_minute
12399
+ elements[2]
12400
+ end
12401
+
12402
+ def time_second
12403
+ elements[4]
12404
+ end
12405
+
12406
+ end
12407
+
12408
+ def _nt_partial_time
12409
+ start_index = index
12410
+ if node_cache[:partial_time].has_key?(index)
12411
+ cached = node_cache[:partial_time][index]
12412
+ if cached
12413
+ node_cache[:partial_time][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12414
+ @index = cached.interval.end
12415
+ end
12416
+ return cached
12417
+ end
12418
+
12419
+ i0, s0 = index, []
12420
+ r1 = _nt_time_hour
12421
+ s0 << r1
12422
+ if r1
12423
+ if (match_len = has_terminal?(":", false, index))
12424
+ r2 = true
12425
+ @index += match_len
12426
+ else
12427
+ terminal_parse_failure('":"')
12428
+ r2 = nil
12429
+ end
12430
+ s0 << r2
12431
+ if r2
12432
+ r3 = _nt_time_minute
12433
+ s0 << r3
12434
+ if r3
12435
+ if (match_len = has_terminal?(":", false, index))
12436
+ r4 = true
12437
+ @index += match_len
12438
+ else
12439
+ terminal_parse_failure('":"')
12440
+ r4 = nil
12441
+ end
12442
+ s0 << r4
12443
+ if r4
12444
+ r5 = _nt_time_second
12445
+ s0 << r5
12446
+ if r5
12447
+ r7 = _nt_time_secfrac
12448
+ if r7
12449
+ r6 = r7
12450
+ else
12451
+ r6 = instantiate_node(SyntaxNode,input, index...index)
12452
+ end
12453
+ s0 << r6
12454
+ end
12455
+ end
12456
+ end
12457
+ end
12458
+ end
12459
+ if s0.last
12460
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12461
+ r0.extend(PartialTime0)
12462
+ else
12463
+ @index = i0
12464
+ r0 = nil
12465
+ end
12466
+
12467
+ node_cache[:partial_time][start_index] = r0
12468
+
12469
+ r0
12470
+ end
12471
+
12472
+ module FullDate0
12473
+ def date_fullyear
12474
+ elements[0]
12475
+ end
12476
+
12477
+ def date_month
12478
+ elements[2]
12479
+ end
12480
+
12481
+ def date_mday
12482
+ elements[4]
12483
+ end
12484
+ end
12485
+
12486
+ def _nt_full_date
12487
+ start_index = index
12488
+ if node_cache[:full_date].has_key?(index)
12489
+ cached = node_cache[:full_date][index]
12490
+ if cached
12491
+ node_cache[:full_date][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12492
+ @index = cached.interval.end
12493
+ end
12494
+ return cached
12495
+ end
12496
+
12497
+ i0, s0 = index, []
12498
+ r1 = _nt_date_fullyear
12499
+ s0 << r1
12500
+ if r1
12501
+ if (match_len = has_terminal?("-", false, index))
12502
+ r2 = true
12503
+ @index += match_len
12504
+ else
12505
+ terminal_parse_failure('"-"')
12506
+ r2 = nil
12507
+ end
12508
+ s0 << r2
12509
+ if r2
12510
+ r3 = _nt_date_month
12511
+ s0 << r3
12512
+ if r3
12513
+ if (match_len = has_terminal?("-", false, index))
12514
+ r4 = true
12515
+ @index += match_len
12516
+ else
12517
+ terminal_parse_failure('"-"')
12518
+ r4 = nil
12519
+ end
12520
+ s0 << r4
12521
+ if r4
12522
+ r5 = _nt_date_mday
12523
+ s0 << r5
12524
+ end
12525
+ end
12526
+ end
12527
+ end
12528
+ if s0.last
12529
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12530
+ r0.extend(FullDate0)
12531
+ else
12532
+ @index = i0
12533
+ r0 = nil
12534
+ end
12535
+
12536
+ node_cache[:full_date][start_index] = r0
12537
+
12538
+ r0
12539
+ end
12540
+
12541
+ module FullTime0
12542
+ def partial_time
12543
+ elements[0]
12544
+ end
12545
+
12546
+ def time_offset
12547
+ elements[1]
12548
+ end
12549
+ end
12550
+
12551
+ def _nt_full_time
12552
+ start_index = index
12553
+ if node_cache[:full_time].has_key?(index)
12554
+ cached = node_cache[:full_time][index]
12555
+ if cached
12556
+ node_cache[:full_time][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12557
+ @index = cached.interval.end
12558
+ end
12559
+ return cached
12560
+ end
12561
+
12562
+ i0, s0 = index, []
12563
+ r1 = _nt_partial_time
12564
+ s0 << r1
12565
+ if r1
12566
+ r2 = _nt_time_offset
12567
+ s0 << r2
12568
+ end
12569
+ if s0.last
12570
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12571
+ r0.extend(FullTime0)
12572
+ else
12573
+ @index = i0
12574
+ r0 = nil
12575
+ end
12576
+
12577
+ node_cache[:full_time][start_index] = r0
12578
+
12579
+ r0
12580
+ end
12581
+
12582
+ module DateTime0
12583
+ def full_date
12584
+ elements[0]
12585
+ end
12586
+
12587
+ def full_time
12588
+ elements[2]
12589
+ end
12590
+ end
12591
+
12592
+ def _nt_date_time
12593
+ start_index = index
12594
+ if node_cache[:date_time].has_key?(index)
12595
+ cached = node_cache[:date_time][index]
12596
+ if cached
12597
+ node_cache[:date_time][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
12598
+ @index = cached.interval.end
12599
+ end
12600
+ return cached
12601
+ end
12602
+
12603
+ i0, s0 = index, []
12604
+ r1 = _nt_full_date
12605
+ s0 << r1
12606
+ if r1
12607
+ if (match_len = has_terminal?("t", :insens, index))
12608
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
12609
+ @index += match_len
12610
+ else
12611
+ terminal_parse_failure('"T"')
12612
+ r2 = nil
12613
+ end
12614
+ s0 << r2
12615
+ if r2
12616
+ r3 = _nt_full_time
12617
+ s0 << r3
12618
+ end
12619
+ end
12620
+ if s0.last
12621
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
12622
+ r0.extend(DateTime0)
12623
+ else
12624
+ @index = i0
12625
+ r0 = nil
12626
+ end
12627
+
12628
+ node_cache[:date_time][start_index] = r0
12629
+
12630
+ r0
12631
+ end
12632
+
11606
12633
 
11607
12634
  class Parser < Treetop::Runtime::CompiledParser
11608
12635
  include EDNGRAMMAR
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: edn-abnf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.32
4
+ version: 0.5.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carsten Bormann